Die Dokumenttypdeklaration
Wozu die Angabe eines Dokumenttyps?
Da es verschiedene Versionen von HTML gibt, muß der Browser in der Lage sein zu
erkennen, womit er es zu tun bekommt. Dies reicht von solchen trivialen
Sachverhalten wie den bekannten HTML-Elementen bis hin zu der Frage, wie diese
Elemente darzustellen sind. Da mit der Zeit Elemente und Attribute hinzugefügt
und auch entfernt worden sind, müßte der Browser raten, welche HTML-Version
vorliegt – und wehe, er erkennt etwas Falsches! In diesem Fall wird der Browser
die Seite unweigerlich falsch darstellen.
Zudem wurden viele ältere Seiten zu einer Zeit erstellt, als die verschiedenen
Anbieter von Webbrowsern versucht hatten ihr eigenes Konzept durchzudrücken
oder der Standard schlichtweg fehlerhaft umgesetzt worden war. Hier erweist es
sich dann als notwendig, auf den fehlerhaften Modus zurückzuwechseln, um diese
alten Seiten korrekt darzustellen, zumal in vielen Fällen nicht mehr unbedingt
die Möglichkeit besteht, diese Seiten an die neuen Standards anzupassen. Gerade
archivierte Seiten bereiten hier besondere Probleme, da fraglich ist, ob der
ursprüngliche Ersteller diese Seiten überhaupt überarbeiten könnte.
Der andere Vorteil, der sich daraus ergibt, ist, daß man ein so ausgezeichnetes Dokument auf Gültigkeit überprüfen kann, d. h. daß seine Struktur mit denen in der Dokumenttypdeklaration angegebenen Regeln übereinstimmt. So lassen sich etwaige Fehler ganz leicht aufspüren und beseitigen. Dies ist eben nicht möglich, wenn die Dokumenttypdeklaration fehlt, da so keinerlei Informationen vorliegen, anhand derer das Dokument überhaupt überprüft werden könnte. In diesem Fall ist von einem fehlerbehafteten Dokument auszugehen, und der Browser schaltet in den Quirks-Modus um.
nach obenKann man das nicht einfach weglassen?
Nein, da der Browser sonst keinerlei Informationen erhält, wie er das Dokument
zu behandeln hat. Da eine Dokumenttypdeklaration gerade bei älteren Dokumenten
ausgelassen wurde, muß der Browser in diesem Fall annehmen, daß es nach einem
älteren Standard aufgebaut worden ist, und er wechselt in den sog.
Quirks-Modus, in dem er das von vielen alten Browsern
verwendete fehlerhafte
Box-Modell zur
Anwendung bringt, das sich von dem des standardkonformen Modus
unterscheidet.
Am einfachsten läßt sich der Unterschied demonstrieren, wenn man zwei ansonsten
exakt identische Dokumente aufbaut, die sich einzig darin unterscheiden, daß
eines davon über keine Dokumenttypdeklaration verfügt. Was in dem einen Fall
ansehnlich dargestellt wird, sieht im anderen Fall i. d. R. wie
zusammengewürfelt aus. Je nachdem für welchen Modus das Dokument aufgebaut
wurde, gibt es im jeweils anderen Modus teils erhebliche Probleme mit der
Darstellung.
Der standardkonforme Modus
In diesem Modus zeigt der Browser ein HTML-Dokument so an, wie es vom
W3C für Browser
vorgesehen ist, die den CSS-Standard unterstützen. Der standardkonforme Modus
soll somit dafür sorgen, daß Webseiten in allen Browsern identisch dargestellt
werden. Dies ist jedoch leider immer noch nicht hundertprozentig gegeben, so
daß manche Browser, selbst wenn sie in den standardkonformen Modus schalten,
die angezeigten Seiten immer noch fehlerhaft darstellen, wenngleich es sich
lediglich um Kleinigkeiten handelt. Im Großen und Ganzen jedoch kann man sagen,
daß die modernen Browser hier mittlerweile eine sehr gute Figur abgeben.
Um auch mit zukünftigen Entwicklungen kompatibel zu sein, ist es zu empfehlen,
einen Dokumenttyp zu verwenden, der den standardkonformen Modus aktiviert.
Der fast standardkonforme Modus
Dieser Modus funktioniert, bis auf eine einzige Ausnahme, wie der
standardkonforme Modus. Einzig Inline-Elemente ohne Umrandung sowie äußeren und
inneren Abstand, die entweder keinen Inhalt haben oder einen, der lediglich aus
Leerzeichen besteht, werden so dargestellt, als hätte der Browser in den
Quirks-Modus geschaltet: Die Höhe solcher Elemente wird schlichtweg ignoriert.
Hier ergaben sich insbesondere dann Probleme, wenn Bilder fragmentiert und die
einzelnen Teile in Tabellen untergebracht wurden, z. B. um bestimmte Teile des
Bildes mit Verweisen versehen zu können, etc. Während dieses fragmentierte Bild
im Quirks-Modus als ein einziges zusammengesetztes Bild dargestellt wird,
obwohl es sich auf eine Vielzahl Tabellenzellen aufteilt, erscheinen im
standardkonformen Modus unvermittelt Zwischenräume: Das Bild, das scheinbar aus
einem Stück besteht, wird so gesprengt und schaut unansehnlich aus.
Um gerade ältere Layouts vor derlei Desastern zu bewahren, wurde der fast
standardkonforme Modus entwickelt, der alles nach dem W3C-Standard darstellt,
bis auf leere Inline-Elemente ohne irgendwelche Angaben zur Umrandung. Dies ist
allerdings an bestimmte Dokumenttypdeklarationen gebunden, die den Browser in
diesen Modus umschalten.
Browser, die diesen Modus nicht unterstützen, schalten stattdessen in den
standardkonformen Modus.
Der Quirks-Modus
Dieser Modus kommt bei alten Dokumenten zum Tragen, die zu einer Zeit erstellt worden sind, als noch der sog. Browserkrieg zwischen dem Internet Explorer und dem Netscape Navigator in vollem Gang war. Hier wurden viele neue Elemente eingeführt, die entweder gar nicht in dem vom W3C veröffentlichten Standard enthalten waren oder, wenn doch, abweichend von diesem dargestellt wurden – was sehr bald dazu führte, daß viele Webseiten nur noch von einem bestimmten Browser sinnvoll dargestellt wurden und von anderen nicht. Dieser daraus entstehende Wildwuchs führte natürlich zu einer Reihe von Problemen in späteren Browsern, die sich wieder verstärkt an die Standards hielten, da die alten Seiten im standardkonformen Modus überhaupt nicht mehr richtig angezeigt wurden.
Um genau diesem Problem Rechnung zu tragen, wurde der Quirks-Modus (engl.
quirk für Eigenheit, Marotte) eingeführt, der auch
für solche alten Dokumente eine korrekte Darstellung ermöglichen soll.
In diesem Fall interpretiert der Browser die CSS-Angaben zu den verschiedenen
Elementen anders als sonst und sorgt dafür, daß selbst Seiten, die mit
fehlerhaften Formatierungsinformationen erstellt worden sind, noch ansehnlich
dargestellt werden.
Der Aufbau einer Dokumenttypdeklaration
Die Dokumenttypdeklaration steht grundsätzlich am Anfang eines HTML-Dokumentes und ist nach einem festen Schema aufgebaut. Im Regelfalle beinhaltet sie Angaben zur verwendeten HTML-Version und den dazu gehörigen Definitionen, folgend eine Dokumenttypdeklaration für HTML 4.01 Strict:
Wenn man sich die Dokumenttypdeklaration einmal anschaut, so lassen sich mehrere Felder erkennen, die allesamt eine bestimmte Bedeutung haben.
- 1. Der einleitende Bezeichner
- 2. Der Name des Wurzelelementes des HTML-Dokuments
- 3. Die Angabe PUBLIC oder SYSTEM
- 4. Der FPI
- 5. Der URI der DTD
Hierbei müssen der einleitende Bezeichner und der Bezeichner für das
Wurzelelement des Dokuments zwingend vorhanden sein, damit der Browser mit der
Dokumenttypdeklaration etwas anfangen kann.
Sind nur diese beiden Elemente der Dokumenttypdeklaration vorhanden, so
wechselt der Browser in den standardkonformen Modus, da er in diesem Fall ein
Dokument nach den neuesten Spezifikationen annimmt. Somit ist es einem älteren
Browser möglich, auch bisher unbekannte HTML-Versionen richtig darzustellen,
und zwar mit den in diesem implementierten Möglichkeiten. Zudem wird HTML5 auf
diese Art und Weise ausgezeichnet, da hier keine weiteren Informationen mehr
notwendig sind, um diese Variante des HTML zu beschreiben.
Das dritte Feld gibt an, welche Informationen über die verwendete HTML-Version
an den Browser übermittelt werden.
Für die Angabe PUBLIC ist auf jeden Fall der FPI mit
anzugeben, der seinerseits in vier Felder unterteilt werden kann, die durch
doppelte Schrägstriche voneinander getrennt werden. Für diesen legt das erste
Feld fest, ob der Besitzer der Dokumenttypdeklaration registriert ist (bei
einem +) oder nicht (bei einem -). Das zweite Feld des FPI gibt den Besitzer
an (hier ist es das World Wide Web Consortium) und das dritte den Klartextnamen
der verwendeten DTD. Das vierte Feld des FPI schließlich gibt die
in der DTD verwendete Sprache an.
Lautet die Angabe hingegen SYSTEM, so entfällt die
Angabe des FPI, und stattdessen ist zwingend die Angabe des URI der DTD
erforderlich, damit der Browser die notwendigen Informationen bekommt.
Der URI der DTD dient letztlich dazu, daß der Browser die entsprechenden DTDs
im Bedarfsfalle herunterladen kann, um so bei etwaigen Änderungen seine
Definitionen aktualisieren zu können. Dementsprechend sind die hier angegebenen
Elemente unter der angegebenen Adresse verfügbar.
Im Bedarfsfalle haben Sie so die Möglichkeit, diese Definitionen
herunterzuladen und auf Ihrem Server anzubieten. Sie müssen dann lediglich die
Verweise so anpassen, daß Sie auf die von Ihnen bereitgestellten Kopien zeigen.
Dieses Feld kann entfallen, wenn eine PUBLIC DTD
angegeben wird, außer es wird XHTML 1.1 verwendet, das zwingend den URI zur DTD
erwartet.
Bekannte Dokumenttypdeklarationen
Je nachdem, was Sie mit Ihrem HTML-Dokument erreichen wollen, stehen verschiedene Versionen des HTML zur Auswahl. Um anzugeben, welche HTML-Version Sie verwenden, ist es erforderlich, eine entsprechende Dokumenttypdeklaration in Ihrem Dokument anzugeben. Folgende Dokumenttypen stehen hier zur Auswahl:
HTML-Version | Dokumenttypdeklaration | Darstellungsmodus |
---|---|---|
HTML5 / XHTML5 ¹) | <!DOCTYPE html> | Standardkonformer Modus |
XHTML 1.1 ²) | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> |
Standardkonformer Modus |
XHTML Basic 1.1 ²) | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd"> |
Standardkonformer Modus |
XHTML 1.0 Strict | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
Standardkonformer Modus |
XHTML 1.0 Transitional | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
Fast standardkonformer Modus |
XHTML 1.0 Frameset | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> |
Fast standardkonformer Modus |
HTML 4.01 Strict | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> |
Standardkonformer Modus |
HTML 4.01 Transitional | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
Fast standardkonformer Modus |
HTML 4.01 Frameset | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> |
Fast standardkonformer Modus |
Daneben existieren noch weitere Dokumenttypen, die zwar noch gültig sind, aber aufgrund verschiedener Probleme nicht mehr verwendet werden sollten. Sie sind höchstens noch auf alten Webseiten zu finden.
HTML-Version | Dokumenttypdeklaration | Darstellungsmodus |
---|---|---|
XHTML Basic 1.0 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd"> |
Standardkonformer Modus |
HTML 4.0 Strict | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> |
Standardkonformer Modus |
HTML 4.0 Transitional | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> |
Fast standardkonformer Modus |
HTML 4.0 Frameset | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "http://www.w3.org/TR/REC-html40/frameset.dtd"> |
Fast standardkonformer Modus |
HTML 3.2 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | Quirks-Modus |
HTML 3.0 | <!DOCTYPE html PUBLIC "-//IETF//DTD HTML 3.0//EN"> | Quirks-Modus |
HTML 2.0 | <!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN"> | Quirks-Modus |
Für HTML 1.0 gibt es keinerlei Dokumenttypdeklaration, da diese Version ohnehin nicht mehr explizit unterstützt wird und zu dem Zeitpunkt die Angabe eines Dokumenttyps auch nicht vorgesehen war. Sollte sich wider Erwarten doch noch irgendwo ein Dokument anfinden, das als HTML 1.0 verfaßt ist, so schaltet der Browser wegen der fehlenden Dokumenttypdeklaration in den Quirks-Modus um, um es darzustellen.
Von HTML-Versionen, die über mehr als eine Variante verfügen (hier HTML 4.0, HTML 4.01 und XHTML 1.0), ist i. d. R. die Variante strict zu bevorzugen, da hier eine strikte Trennung zwischen logischer Unterteilung und der Darstellung eines Dokumentes stattfindet, während diese für die Varianten transitional und frameset nicht gegeben ist. Diese existieren aus Kompatibilitätsgründen oder wurden eingeführt, um die logische Unterteilung eines Dokumentes in mehrere Teile zu ermöglichen. Dennoch sollten diese Varianten nicht mehr verwendet werden.
nach obenXHTML
Hierbei handelt es sich um ein HTML-Derivat, das, im Gegensatz zu HTML, nicht
von SGML, sondern von XML abgeleitet ist, wobei man Letzteres als ein Subset
von SGML betrachten kann. Dabei gewann XML jedoch nicht nur für XHTML an
Bedeutung, sondern für eine Vielzahl anderer Dateiformate. Weitere Derivate von
XML ist beispielsweise SVG, das zum Beschreiben von Graphiken verwendet wird,
WML als Standard für die ersten Browser auf Mobiltelefonen, oder auch SMIL für
die Erstellung von Drehbüchern für Präsentationen.
Insofern stellt sich XHTML unterm Strich genauso dar wie HTML, allerdings
ergeben sich, bedingt durch die Eigenheiten von XML, einige Unterschiede, die
es zu kennen gilt, wenn man Dokumente in gültigem XHTML erstellen möchte.
Der Hauptunterschied besteht auf jeden Fall darin, daß einem Dokument, das von XML abgeleitet ist, ein XML-Prolog voranzustellen ist, der wie folgt ausschaut:
Weiterhin ist darauf zu achten, daß das Dokument mit dem richtigen MIME-Typ
ausgeliefert wird, damit der Browser auf den XML-Parser umschaltet, anstatt den
herkömmlichen, SGML-basierten, Parser des HTML zu verwenden. Hier gilt es, den
Webserver so zu konfigurieren, daß er statt text/html
den Typ application/xhtml+xml übermittelt, wenn
XHTML-Dokumente übergeben werden.
Gerade ältere Browser bereiten hier Probleme, da sie diesen MIME-Typ nicht
verstehen und die so übergebene Datei, anstatt sie anzuzeigen, zum Download
anbieten. Hier gilt es dann, den ausliefernden Server so zu konfigurieren, daß
er überprüft, ob der Aufrufer application/xhtml+xml
zuläßt, und wenn nein, das XHTML-Dokument stattdessen mit dem MIME-Typ
text/html ausliefert. Somit kann das Dokument auch
auf älteren Browsern angezeigt werden.