DOCTYPE - HTML-Version

HTML Doctype und Validator

Der Dokumententyp am Anfang einer HTML-, XHTML, XML, MathML oder SVG-Datei gibt an, um welchen Typ von Dokument es sich handelt. <!DOCTYPE> legt die Document Type Definition (DTD) des Dokuments fest. Die DTD bestimmt die Grammatik und die Syntax der Sprache (HTML braucht keinen Verweis auf externe DTDs).

23-02-02 SITEMAP CSS HTML JS Basis JS Web Tutorial SVG

DOCTYPE ist kein HTML-Element

Die HTML-Standards brachten im Laufe der Jahre Versionen hervor, die dem heutigen Wunsch nach einer sauberen Struktur entgegenlaufen. Ohne !DOCTYPE könnte der Browser eine Webseite trotz validem HTML fehlerhaft darstellen, weil er sich an seine alte Darstellung eines Elements hält. Andererseits müssen alte Webseiten auch in der neuen Browsergeneration bestehen.

Anhand des DOCTYPE erkennen Browser (und andere Typen von Parsern), wie sie eine Webseite rendern sollen: Mit DOCTYPE nach dem Standard, ohne DOCTYPE in ihrem »Quirks-Modus«, in dem sie ihre alten Fehler simmulieren.

!Doctype kann nur in die erste Zeile des HTML-Codes gesetzt werden (aber es gibt doch noch eine Ausnahme: die XML-Deklaration <?xml version="1.0" encoding="utf-8"?> siehe unten) und weist weitere Besonderheiten auf:

  • !DOCTYPE ist kein HTML-Element. Darum gibt es auch kein schließendes !DOCTYPE-Tag.
  • !DOCTYPE ist das Einzige, was vor dem <HTML>-Tag stehen kann.
  • Das Ausrufezeichen "!" gehört dazu.
  • DOCTYPE ist nicht case-sensitiv, darf also auch als Doctype oder doctype geschrieben werden.

HTML DOCTYPE

Man beachte, dass der Doctype einfach »!DOCTYPE html« und nicht »!DOCTYPE html5« heißt. Der Doctype sollte zuoberst stehen, ansonsten ist !Doctype html anspruchslos: Groß- oder Kleinschreibung ist ihm egal.

<!DOCTYPE html>

HTML basiert nicht mehr auf SGML und braucht darum die langatmige Erklärung – die DTD – der HTML-Doctypes nicht. Wir dürfen die kompliziert wirkenden Doctypes des XHTML-Standards getrost entsorgen.

Ein DOCTYPE ist zwar nicht zwingend erforderlich, aber das W3C (World Wide Web Consortium), das den Standard für das Web herausgibt, empfiehlt, das <!DOCTYPE>-Tag trotzdem an den Anfang der HTML-Datei zu setzen.

Obwohl kein DOCTYPE gesetzt werden muss: Wer seine Webseiten beim Validator prüft, muss den Doctype angeben, damit keine Fehler ausgeworfen werden.

Doctype für ePub

Neben Webseiten benutzen auch eBooks nach dem ePub-Standard XHTML-Dokumente mit einem Doctype. Das HTML für EPUB 2 ist XHTML 1.1 strikt.

Doctype für striktes XHTML
   
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
        "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

ePub3 setzt bereits auf HTML, und da HTML nicht mehr durch DTDs definiert wird, hat auch EPUB 3 die Verweise auf externe Elemente aus dem Doctype entfernt. Dennoch wird ein großer Teil der eBooks weiterhin mit XHTML, also den älteren Versionen erstellt: Das erreicht mehr Geräte und ist so stabil wie es alt ist.

Mehr zu ePub How to Create an EPUB File From HTML and XML

Doctype für SVG

Das wäre ein Doctype für ein SVG-Dokument:

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
    "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">

Weil die DTDs (Document Type Definitions) in SVG eine Quelle von Missverständnissen und Fehlern waren, hat sich die SVG WG entschlossen, mit SVG 1.2 keine DTD mehr zu verwenden und empfiehlt, auch in SVG 1.0 and 1.1 keine DOCTYPE Declaration zu setzen. Stattdessen kann ein "version"- und "baseProfile"-Attribute in das SVG-Tag geschrieben werden. Das Version-Attribut hat allerdings keinen Einfluss auf die Darstellung und entfällt in SVG Version 2.

<svg xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink"
     version="1.1"
     baseProfile="full">

xmlns:svg sollte nicht benutzt werden, um den SVG-Namespace einzubinden (Inkscape setzt z.B. grundsätzlich noch xmlns:svg="http://www.w3.org/2000/svg" vor den SVG-Namespace).

Eine xml-Direktive am Anfang der SVG-Datei wird eigentlich nicht benötigt, aber WordPress und andere Content Management Systeme verweigern, wenn die XML-Direktive fehlt.

<?xml version="1.0" standalone="yes"?>

5.1. Defining an SVG document fragment: the ‘svg’ element

Statt SVG als default Namespace zu proklamieren, bindet xmlns:svg den Präfix "svg" ein, und das ist so gut wie immer Unsinn. Wenn SVG inline in HTML-Dokumente gesetzt wird, kann der Namespace auch weggelassen werden.

Der Markup Validation Service validiert auch SVG-Grafiken.

Doctype und Quirks-Modus

Der Doctype hat nicht nur Auswirkungen auf die Darstellung des Markups und die Anwendung von CSS-Stilen, sondern auch Skripte werden ja nach Doctype unterschiedlich interpretiert.

Auf der Basis des Doctypes sind Validatoren in der Lage, das Dokument auf Syntaxfehler zu prüfen – zu validieren. Gerade wenn Skripte auf dem DOM aufbauen, ist ein korrektes Markup die Basis für ein reibungsloses Skript ohne gefährliche Stolperfallen. Darüber hinaus benutzen moderne Browser die Angabe des Doctypes, um ihr Verhalten zu ändern: Im Modus strict verhalten sie sich standardkonform, im Modus loose (Quirksmodus) simulieren sie die Fehler ihrer Vorgängerversionen, um alte HTML-Dokumente nicht ins Unglück zu stürzen.

Elemente des Doctype-Tags

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

DOCTYPE HTML PUBLIC
bedeutet, dass sich das Dokument auf die öffentlich verfügbare HTML-DTD bezieht.
"-//W3C//DTD HTML 4.01//EN"
kennzeichnet das W3C als maßgeblichen Herausgeber des Dokumententyps "HTML", der in der Version 4.01 im Dokument benutzt wird. EN ist die Sprachangabe (Englisch) und bezieht sich nicht auf den Inhalt des Dokuments, sondern auf die Notation von HTML-Elementen und -Attributen.
Die URL http://www.w3.org/TR/1999/REC-html401-19991224
erlaubt dem User Agent (Browser), die DTD und darin enthaltene Regeln und Elemente zu laden, wenn sie benötigt werden. Theoretisch wäre es einem Browser dadurch möglich, auch neuere Versionen von HTML, die nach dem Erscheinen des Browsers veröffentlicht werden, korrekt zu interpretieren. In der Praxis ist wohl kaum ein Browser in der Lage, tatsächlich neuere Regeln nachträglich zu adaptieren. Die Adresse ist demzufolge auch nicht erforderlich.
strict
schließt aus, dass die Darstellung des Dokuments Elemente und Attribute benutzt, die das W3C als Aufgabe von Stylesheets ansieht. Auch die Benutzung der HTML-Elemente innerhalb des Dokuments wird bei strict sehr eng gesehen. So müssen alle Elemente innerhalb des body-Elements in Blockelementen stehen. Ein Text, der ohne umschließende <p>-Tags direkt zwischen das öffnende und schließende <body>-Tag geschrieben wird, wird bereits als Verletzung der Syntaxregeln angesehen. Webautoren sind angehalten, strict DTD so weit wie möglich anzuwenden, es bleibt Ihnen aber überlassen, transitional zu nutzen, wenn für die Präsentation des Dokuments bestimmte Elemente und Attribute erforderlich sind.
transitional
kennzeichnet ein Dokument, in dem Elemente (z.B. font-Tags) und Attribute (z.B. bgcolor) benutzt werden, die als veraltet (deprecated) gelten. Wer seine Dokumente auch für Browser, die Stylesheets noch nicht beherrschen (z.B. Netscape 3), grafisch und typografisch aufbereiten möchte, wird diese Variante sicherlich bevorzugen.
frameset
kennzeichnet ein Dokument, das Frames (nicht iframe) benutzt.
HTML 4.01 - Strict, Transitional, Frameset
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
    "http://www.w3.org/TR/html4/strict.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
    "http://www.w3.org/TR/html4/frameset.dtd">
XHTML 1.0 - Strict, Transitional, Frameset
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
XHTML 1.1 - DTD
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
MathML 2.0 - DTD
<!DOCTYPE math PUBLIC "-//W3C//DTD MathML 2.0//EN" "http://www.w3.org/TR/MathML2/dtd/mathml2.dtd">
XHTML + MathML + SVG Profile (XHTML als Host-Sprache) - DTD
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN"
"http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">
XHTML + MathML + SVG Profile (Nutzt SVG als Host) - DTD
<!DOCTYPE svg:svg PUBLIC
"-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN"
"http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">

Auch wenn das <!DOCTYPE>-Tag das erste Tag des Dokuments sein soll – in XHTML konnte vor dem <!DOCTYPE>-Tag die XML-Deklaration erscheinen. Diese Zeile gab die XML-Version und den verwendeten Zeichensatz an. Die XML-Deklaration wurde zwar vom W3C empfohlen, war aber eine freiwillige Leistung. Da sie zu Problemen mit einigen Browsern führte, wurde sie in der Praxis meistens nicht gesetzt.

HTML ist kein XML – da macht eine XML-Deklaration keinen Sinn.