Dokumenttyp-Deklaration in HTML

Wenn man mit HTML Webseiten erstellt, wird vor dem einleitenden Befehl <html>, mit dem eine Webseite begonnen wird, die Dokumenttyp-Deklaration angegeben. In den Dokumenttyp-Deklarationen wird die Syntax und die Grammatik der jeweiligen (X)HTML-Sprache festgelegt. Technisch gesehen ist die Angabe der Dokumenttyp-Deklaration zwar nicht unbedingt notwendig und eine Webseite kann ohne die Angabe erstellt und betrachtet werden. Trotzdem gehört der Hinweis auf die Dokumenttyp-Deklaration zum Grundgerüst einer Webseite und sollte als fester Bestandteil auf jeder Seite einer Internetpräsenz angegeben werden. Der Sinn dieser Angabe ist, dass beim Öffnen und Lesen eines HTML-Dokuments dem Browser (oder einer anderen auslesenden Software) mitgeteilt wird, welche HTML- bzw. XHTML-Version für die nachfolgenden Befehle zugrunde gelegt wurde. So erhält der Browser einen Hinweis darauf, wie die Inhalte der Webseite gerendert und somit visuell dargestellt werden sollen.

Die Angabe der Dokumenttyp-Deklaration wird wie alle HTML-Befehle innerhalb der spitzen Klammern mit !DOCTYPE begonnen und es folgen danach weitere Angaben über die verwendete HTML- bzw. XHTML-Spezifikation. Das Ausrufezeichen gehört dazu und darf nicht weggelassen werden. Nachfolgend ist beispielhaft eine vollständige Angabe der Dokumenttyp-Deklaration für die HTML-Version 4.01 abgebildet. Bei der Verwendung einer anderen Spezifikation muss man natürlich eine andere Dokumenttyp-Deklaration verwenden.

Dokumenttyp-Deklaration

Die Gründe für die Angabe der Dokumenttyp-Deklaration

Das Erfordernis einer Dokumenttyp-Deklaration resultiert aus folgenden Umständen:

  • Im Laufe der Zeit wurden die Spezifikationen für HTML, XHTML und CSS immer wieder weiterentwickelt und neu definiert und das wird wahrscheinlich auch in Zukunft der Fall sein.
  • Folgerichtig mussten auch die Browser mit der Entwicklung mitgehen und die Änderungen der Spezifikationen in die Browser implementieren. Das taten sie jedoch nicht immer. Es kam immer wieder vor, dass bei manchen Browsern die Spezifikationen unzureichend oder in veränderter Form bzw. schlicht fehlerhaft implementiert wurden.

Dadurch wurden die Entwickler von Webseiten mit folgenden Problemen konfrontiert:

  • Durch die fehlerhafte Implementierung der Spezifikationen in manchen Browsern wurden die Webseiten unter Umständen nicht wie gewünscht dargestellt, wenn man sich an die Spezifikationen hielt.
  • Da sie die Browsersoftware nicht verändern konnten, begannen viele Entwickler, wissentlich oder unwissentlich Codes abweichend von den Spezifikationen zu erstellen, die zwar fehlerhaft waren, dafür aber auf den gängigen Browsern der Zeit wie gewünscht dargestellt wurden. Im Grunde genommen blieb ihnen nichts anderes übrig. Denn, sie konnten ja nicht fehlerfreie Codes schreiben und dadurch das Aussehen der Webseite zerstören.

Mittlerweile wurden die Spezifikationen zumindest in den meisten Browsern weitestgehend korrekt implementiert. Durch die Fehler der Vergangenheit sind folgende Umstände trotzdem zu berücksichtigen:

  • Viele Webseiten sind zum Teil sehr alt und enthalten fehlerhafte Codes.
  • Würden die aktuellen Browser sich nur an die aktuelle Spezifikation halten, würden ältere Webseiten zwar gemäß der Spezifikation dargestellt werden. Das würde jedoch unter Umständen dazu führen, dass das Layout der älteren Webseiten zerzaust und unansehnlich dargestellt wird.
  • Die Browserhersteller hätten sich auf den Standpunkt stellen können, dass man die älteren Webseiten aktualisieren solle, damit sie in den Browsern der heutigen Zeit ansehnlich dargestellt werden. Den Weg ist man jedoch nicht gegangen, weil die Fehler der Vergangenheit von manchen Browserherstellern selbst begangen wurden, indem man die Spezifikationen fehlerhaft in die Browser implementierte. Man wollte die Entwickler der älteren Webseiten nicht auch noch dafür bestrafen, dass sie fehlerhaften (X)HTML- und CSS-Codes produzieren mussten, nur damit die Webseiten in den Browsern der damaligen Zeit ansehnlich dargestellt werden konnten.
  • Außerdem ist eine Aktualisierung der Webseiten vielfach nicht mehr möglich, weil es entweder Zeit und Geld kostet, das die ehemaligen Ersteller nicht haben oder diese außerstande sind, weil sie z.B. pensioniert sind oder andere Hinderungsgründe vorliegen.

Dokumenttyp-Deklaration als Hinweis für den Darstellungsmodus

Es musste also eine Lösung her, dass man einerseits Webseiten korrekt darstellt, die sich an die aktuelle (X)HTML- und CSS-Spezifikationen halten und andererseits auch ältere Webseiten ansehnlich dargestellt werden, die nach wie vor fehlerhafte Codes aus der Vergangenheit beinhalten. So haben die Hersteller von Browsersoftware begonnen, die Dokumenttyp-Deklaration als einen Hinweis für den Darstellungsmodus zu verwenden. Das bedeutet, abhängig von der Dokumenttyp-Deklaration schalten die Browser in einen bestimmten Darstellungsmodus. Dabei wird zwischen folgenden Modi unterschieden:

  • Quirks-Mode: Dieser Modus ist vor allem für ältere Webseiten gedacht, die fehlerhafte (X)HTML- bzw. CSS-Codes enthalten. Ein Browser, der in den Quirks-Modus schaltet, simuliert eine Browserversion aus der Vergangenheit inkl. den Fehlern, den dieser enthielt. So wird das Layout der Webseiten nicht zerstört, die sich nicht an die Spezifikationen hielten bzw. die für eine ältere Browserversion erstellt und optimiert wurden. Welche Browserversion im Quirksmodus simuliert wird und wie die Inhalte einer Webseite dargestellt werden, ist unterschiedlich und hängt vom verwendeten Browser ab.
  • Full-Standard-Mode: Das ist der Modus, in dem die Webseiten zumindest weitestgehend so dargestellt werden, wie es die Spezifikationen vorsehen. Zwischen den verschiedenen Browsern kann es unter Umständen zu sehr geringen Abweichungen kommen. Diese sind jedoch meistens so gering, dass die Erstellung von Webseiten, die auf den verschiedenen Browsern weitestgehend gleich aussehen, ermöglicht wird.
  • Almost-Standard-Mode: Das ist sozusagen ein "Beinahe-Standard-Modus" und wird nur von Mozilla Firefox als einen zusätzlichen Modus neben dem Quirks- und Full-Standard-Modus verwendet. Dabei werden die Spezifikationen bis auf eine Ausnahme fast vollständig umgesetzt. Die Darstellung von Grafiken innerhalb Tabellen erfolgt wie im Quirksmodus und ist daher für Webseiten gedacht, die für die Erstellung des Layouts noch Tabellen mit Grafiken benutzten.

Das Verfahren nennt man auch Doctype-Switch und alle neueren Browser haben den Doctype-Switch implementiert. Es ist wichtig, die Dokumenttyp-Deklaration korrekt anzugeben. Gibt man keine oder eine andere Dokumenttyp-Deklaration als die auf der Webseite verwendete an, kann das dazu führen, dass der Browser in einen unpassenden Modus schaltet und die Webseite nicht so dargestellt wird, wie man es sich vorstellt, obwohl man sich an eine Spezifikation hielt. Es hilft nichts, sich an eine Spezifikation zu halten, diese jedoch auf der Webseite nicht anzugeben. Hierfür muss man wissen, welche Dokumenttyp-Deklarationen verwendet werden und welchen Modus diese bei den Browsern auslösen.

Die Syntax für die Dokumenttyp-Deklaration

Die Dokumenttyp-Deklaration ist zum Teil ziemlich lang. Jedoch steckt eine gewisse Systematik dahinter. Wie alle HTML-Befehle wird auch die Dokumenttyp-Deklaration in spitzen Klammern geschrieben. Nach der öffnenden spitzen Klammer kommt ein Ausrufezeichen. Die nachfolgenden Angaben sind wie folgt zu verstehen:

  • DOCTYPE: Schlüsselwort für die Dokumenttyp-Deklaration.
  • HTML: Damit wird das Wurzelelement des Dokuments bezeichnet, das alle anderen Elemente enthält. Bei HTML-Seiten ist das HTML. Bei XML-Seiten kann man auch eigene Wurzelelemente definieren.
  • PUBLIC: Damit wird signalisiert, dass es sich um eine öffentliche Dokumenttyp-Deklaration handelt. Man könnte theoretisch mit SYSTEM auch eine interne Dokumenttyp-Deklaration verwenden. In dem Fall würde die nachfolgende FPI entfallen.
  • FPI: Bei öffentlichen Dokumenttyp-Deklarationen wird ein FPI (Formal Public Identifier) angegeben. Das ist die Kennung für die Dokumenttyp-Deklaration. Der FPI ist in 4 Bereiche aufgeteilt und wird innerhalb von Anführungszeichen angegeben. Die Bereiche im FPI sind durch doppelte Schrägstriche voneinander getrennt und haben folgende Bedeutung:

    • 1: Im ersten Bereich wird mit einem Plus- oder Minuszeichen ein Prefix angegeben. Ein + signalisiert, dass es sich hier um einen registrierten Besitzer der Dokumenttyp-Deklaration handelt. Bei einem - ist der Besitzer nicht registriert.
    • 2: Danach folgt der Name des Besitzers. Die Bereiche 1 und 2 kann man somit als Besitzerkennung ansehen.
    • 3: An dritter Stelle wird die verwendete Dokumenttyp-Deklaration angegeben.
    • 4: An vierter Stelle der FPI erfolgt die Angabe der verwendeten Sprache für die DTD.

  • 5: Die Dokumenttyp-Deklaration wird mit der URI abgeschlossen. Von dieser Adresse kann die DTD bei Bedarf runtergeladen werden. Diese Angabe , sollte nicht weggelassen werden, da es ansonsten passieren kann, dass der Browser ungewollt in den Quirks-Modus schaltet.
Syntax der Dokumenttyp-Deklaration

Variante Strict, Transitional und Frameset

In den früheren (X)HTML-Versionen wurde die Spezifikation in folgende Varianten aufgeteilt:

  • Strict: Mit dieser Variante wurde signalisiert, dass man sich voll an die Spezifikation hielt.
  • Transitional: Die Spezifikation wurde nicht komplett umgesetzt. Wurde verwendet, wenn auf der Webseite beispielsweise FONT-Tags oder Attribute wie BGCOLOR verwendet wurden, die als unerwünscht galten.
  • Frameset: Wurde bei Webseiten mit Framesets verwendet.

Die Dokumenttyp-Deklaration kann komplett in einer Zeile oder auch in mehreren Zeilen geschrieben werden. Zur besseren Übersicht hat es sich eingebürgert, die URI in die Zeile darunter zu schreiben. Nachfolgend eine Übersicht über die wichtigsten Dokumenttyp-Deklarationen sowie das Verhalten der Browser.

HTML 5

HTML5 basiert nicht auf SGML. Daher entfällt die Angabe einer bestimmten Dokumenttyp-Deklaration und man macht vor dem Befehl <html> die folgende Angabe zur verwendeten HTML-Sprache:

<!DOCTYPE HTML>
  • Alle Browser: Full-Standard-Mode.

XHTML 1.1

In XHTML 1.1 ist nur die Variante strict gültig und wird daher nicht explizit angegeben. Außerdem muss die URI zur DTD angegeben werden. Demzufolge muss die Dokumenttyp-Deklaration wie folgt angegeben werden:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
      "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  • Alle Browser: Full-Standard-Mode.

XHTML 1.0

In XHTML 1.0 wurde noch eine Unterscheidung zwischen den Varianten Strict, Transitional und Frameset gemacht. Man konnte außerdem entscheiden, ob man die URI zur DTD angibt oder nicht. Wurde die URI nicht angegeben, hatte das keine wesentlichen Auswirkungen.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  • Alle Browser: Full-Standard-Mode.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  • Mozilla Firefox: Almost-Standard-Mode.
  • Alle sonstigen Browser: Full-Standard-Mode.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
  • Mozilla Firefox: Almost-Standard-Mode.
  • Alle sonstigen Browser: Full-Standard-Mode.

HTML 4 oder HTML 4.01

HTML 4 wurde wegen geringfügigen Änderungen durch HTML 4.01 ersetzt. Auch bei der Dokumenttyp-Deklaration für HTML 4 bzw. 4.01 konnte man entscheiden, ob man die URI angibt oder nicht. Allerdings hatte das zum Teil eine große Auswirkung, wenn man es nicht angab. Der Browser wechselte in der Variante Transitional oder Frameset bei einer Nichtangabe der URI in den Quirks-Modus sowie in der Variante Strict beim Internet Explorer 5 für Mac ebenfalls in den Quirks-Modus. Folgende Dokumenttyp-Deklarationen werden für HTML 4.01 verwendet:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
     "http://www.w3.org/TR/html4/strict.dtd">
  • Alle Browser: Full-Standard-Mode.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
     "http://www.w3.org/TR/html4/loose.dtd">
  • Internet Explorer, Opera: Full-Standard-Mode.
  • Mozilla Firefox: Almost-Standard-Mode.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
     "http://www.w3.org/TR/html4/frameset.dtd">
  • Internet Explorer, Opera: Full-Standard-Mode.
  • Mozilla Firefox: Almost-Standard-Mode.

Ältere HTML-Versionen

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
  • Alle Browser: Quirks-Mode,
<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">
  • Alle Browser: Quirks-Mode.

Keine Angabe oder unbekannte Dokumenttyp-Deklaration

Wird keine Dokumenttyp-Deklaration angegeben, bleibt den Browsern nichts anderes übrig, als in den Quirks-Modus zu schalten. Wird eine unbekannte Dokumenttyp-Deklaration angegeben, schalten die meisten Browser in den Full-Standard-Modus.

Angabe eines XML-Prologs

Bei XHTML-Dokumenten wird vor der Dokumenttyp-Deklaration ein sogenannter XML-Prolog mit Angabe des verwendeten Zeichensatzes eingefügt. Das führte beim Internet-Explorer 6 und Opera 7 dazu, dass der Browser in den Quirks-Modus versetzt wurde. Denn, es wurde als erstes die Dokumenttyp-Deklaration erwartet. Diesen Umstand konnte man dazu nutzen, den Browser gezielt in den Quirks-Modus zu versetzen, indem man entweder den XML-Prolog oder einen beliebigen Kommentar zu Beginn einfügte. Wollte man die entsprechenden Browserversionen nicht in den Quirks-Modus versetzen, konnte der XML-Prolog weggelassen und der Zeichensatz als META-Tag im HEAD-Bereich angegeben werden. Ein XML-Prolog kann wie folgt aussehen:

<?xml version="1.0" encoding="UTF-8"?>
  • Internet Explorer 6 und Opera 7: Quirks-Mode.
  • Alle sonstigen Browser: Full-Standard-Mode.

Neben diesen Dokumenttyp-Deklarationen gibt es noch eine Reihe weiterer DTD's, z.B. für mobile Versionen einer Seite.