2009-12-31 8 views
9

viele Doctype verwenden einen URL-LinkBenötigt jede HTML-Seite mit Doctype eine Internetverbindung, um die Seite korrekt zu rendern?

wie diese

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

und diese dtd-Datei ist auf Live-URL http://www.w3.org/TR/html4/strict.dtd

Was die Nutzung dieses Online-Live-dtd ist und wie jede Seite (die Verwendung Dieser Doctype wird richtig nach diesem Doctype gerendert, ohne Zugriff auf diese URL (ich meine, wenn Internet-Zugang nicht verfügbar ist?)

Update: ich diese Informationen von wikipedia http://en.wikipedia.org/wiki/System_identifier gefunden

In HTML und XML, eine Systemkennung ist eine fragmentless URI-Referenz. Es tritt typischerweise in einem Dokumententyp Declaration auf. In diesem Zusammenhang ist es beabsichtigt einen Dokumenttyp zu identifizieren, die in einer Anwendung ausschließlich verwendet wird, während eine öffentliche Kennung einen Dokumenttyp zu identifizieren, versteht man, dass mehr als eine Anwendung überspannen kann.

Im folgenden Beispiel wird das System Kennung der Text enthalten in Anführungszeichen:

Update 2: ist es nur für Validatoren zu benutzen? Wie bietet eine Software wie dreamweaver eine Offline-Validierung?

Update 3: Ich fand diese Informationen von w3c Website http://www.w3.org/QA/Tips/Doctype

Warum ein Doctype angeben? Weil es definiert, welche Version von (X) HTML Ihr Dokument tatsächlich verwendet (Version für welchen Browser oder Validator?) und dies ist ein kritisches Stück von Informationen von einigen Tool benötigt (die Werkzeuge? irgendwelche anderen Werkzeuge dann Validator?) das Dokument zu verarbeiten.

Zum Beispiel den Doctype von Ihr Dokument angeben können Sie Tools wie das Markup Validator verwenden die Syntax Ihres (X) HTML zu überprüfen. Solche Werkzeuge können nicht funktionieren, wenn sie nicht wissen, welche Art von Dokument Sie verwenden.

Aber das Wichtigste ist, dass mit den meisten Familien von Browsern, eine Doctype Deklaration viel raten überflüssig machen wird, und wird somit Trigger ein „Standard“ Rendering-Modus.

+0

Ich erwarte, dass die URL nicht wirklich verwendet wird, aber es ist Teil der Doctype-Definition, so sollte es da sein. Aber, wenn es keine Internetverbindung gibt, wird es trotzdem gut funktionieren. –

+0

Beantwortet meine Antwort nicht bereits die Fragen, die Sie in Update 3 hinzugefügt haben? Browser sind nicht wichtig, abgesehen von den spezifischen Doctypen, die für die Umschaltung von Macken/Standards verwendet werden. Validatoren kümmern sich normalerweise, aber laden die DTD normalerweise nicht herunter. Andere Werkzeuge können oder können nicht interessieren; Sie werden in der Lage sein, eine bessere Antwort zu bekommen, indem Sie nach den fraglichen Tools fragen, da es keine einheitliche Antwort gibt. –

Antwort

14

Nein, keine Browser laden oder validieren tatsächlich gegen den Doctype.Ein gutes Argument dafür, warum das Abrufen und Validieren von DTDs eine schlechte Idee ist, finden Sie unter DTDs Don't Work on the Web.

Der Doctype gibt theoretisch in der Theorie, welche Version des Standards das Dokument verwendet. Die Browser verwenden diese Informationen im Allgemeinen nicht als switch between quirks and standards mode. Alle modernen Browser akzeptieren den einfachsten möglichen Doctype, ohne URL oder Versionsinformation, <!DOCTYPE html>, für diesen Zweck; Aus diesem Grund hat HTML5 dies als empfohlenen Doctype angenommen.

Validatoren verwenden diese Informationen manchmal, um zu ermitteln, für welche DTD sie validieren sollen, aber DTDs, die in das Dokument eingebettet sind, sind keine wirklich gute Möglichkeit, Validierungsinformationen anzugeben. Das Problem bei der Validierung gegen eine DTD, die in einem Dokument referenziert wird, ist, dass der Konsument dieses Dokuments sich nicht wirklich darum kümmert, ob das Dokument selbstkonsistent ist, sondern ob es einem Schema folgt, das der Konsument zuverlässig zu interpretieren weiß. Stattdessen ist es in der Regel besser, ein externes Schema in einer leistungsfähigeren Schemasprache wie RELAX NG zu validieren.

Wenn Validatoren diese Informationen benutzen, verwenden sie häufig die URI als Kennung nur, nicht als Locator. Das bedeutet, dass der Validierer bereits über alle gängigen HTML-Doctypes Bescheid weiß und dieses Wissen für die Validierung verwendet, anstatt von dem betreffenden URI herunterzuladen. Dies ist teilweise um das Problem zu vermeiden, dass die DTD jedes Mal heruntergeladen werden muss, und auch weil eine DTD nicht genügend Informationen spezifiziert, um sehr gute Validierungs- und Fehlermeldungen bereitzustellen, so dass einige Teile des Validators in benutzerdefiniertem Code spezifiziert werden können oder eine leistungsfähigere Schema-Sprache. Weitere Informationen finden Sie unter Henri Sivonen's thesis zu seiner Implementierung des HTML5-Konformitätsprüfers validator.nu.

Einige Validierer können DTDs auch herunterladen und dann zwischenspeichern, sodass sie einmal online sein müssen, um sie herunterladen zu können, aber später von der zwischengespeicherten Version funktionieren.

+0

siehe mein Update 2 –

+0

aber wie jeder Browser ohne Internetverbindung Quirks zu strikten Modus ändern, wenn xhtml Datei diese Systemkennung hat –

+0

Browser laden nicht wirklich die DTD referenziert, um zwischen Macken und Standards-Modus zu wechseln; Sie führen nur eine Zeichenfolgenübereinstimmung für die Deklaration '. Kein (populärer, moderner) Browser lädt jemals die referenzierte DTD. Die meisten Validierer auch nicht. Sie benutzen es einfach als Identifikator. Beachten Sie, dass viele der Doktypen, die im zweiten Link in meiner Antwort aufgelistet sind, nicht einmal einen URI haben, sondern nur FPIs (formelle öffentliche Bezeichner http://en.wikipedia.org/wiki/Formal_Public_Identifier) ​​wie "- // W3C // DTD HTML 4.01 // DE ". –

2

Der URI dient dazu, den Dokumenttyp eindeutig zu identifizieren - er ist nicht zum Abruf gedacht und kein Browser (oder eine andere Software) sollte sich auf ein Dokument verlassen, das unter dieser Webadresse existiert.

+1

Es ist eher ein URI als eine URL. Sein Zweck ist es, den Dokumententyp zu identifizieren - das funktioniert auch, um es tatsächlich zu lokalisieren. – fennec

+0

Danke für die Korrektur - sehr aufmerksam. Fest. – Oded

+0

Es ist sehr zum Abruf gedacht. Ein Parser mit externer Entität, wie z. B. ein Validierungsparser (der kein Browser ist), benötigt die externe DTD-Teilmenge. Wenn es keine lokale Kopie hat, muss es die System-ID als URI dereferenzieren. Sie würden hoffen, dass die meisten Tools eine lokale Kopie der bekannten HTML-DTDs unter ihrer öffentlichen ID haben. – bobince

0

Früher habe ich mich immer gefragt. Aber wenn Sie Ihren eigenen HTTP-Server haben, ist es ziemlich einfach zu beweisen, dass es keine Rolle spielt. Ziehen Sie einfach das Kabel zur Außenwelt und sehen Sie, ob Sie die Seiten auf Ihrem Server noch öffnen können.

+0

Hey, zieh einfach das Kabel und sieh dir eine gespeicherte HTML-Seite auf deiner Festplatte an. – fennec

+1

Wir brauchen keinen Server, um nur für eine HTML-Datei zu beweisen –

+1

Hängt davon ab, wie viel Sie vertrauen, dass der Browser sich für lokale Dateien genauso verhält wie für Dateien, die er aus dem Internet heruntergeladen hat. –