Doctype ist ein Akronym für Document Type Declaration. Mit diesem wird in SGML-/XML-Dokumenten angegeben nach welchen Standards das *ML-Dokument aufgebaut ist. Die Angabe ist essentiell wichtig, da ein nach den Standards arbeitender Browser ohne diese Angabe nicht wüsste wie er welchen Teil des Codes den er erhält interpretieren soll. Gewisse Browser stellen eine Webseite ohne Doctype sogar völlig falsch dar, weil sie ohne Doctype auf eine völlig andere, sehr eigene Dokumentenstrukturierung zurückgreifen.
Erfahren Sie in diesem Fachbeitrag worauf man bei der Wahl des Doctypes achten muss und wie man diesen in VIO.Matrix angeben kann.
Ein Doctype steht immer am Anfang eines SGML-/XML-Dokuments. Vor ihm darf nichts anderes stehen. Er ist eine der, wenn nicht die wichtigste Variable die dem Browser sagt was er für ein Dokument da vor sich hat. Der Doctype muss daher nach bestimmten, standardisierten Schemata aufgebaut sein. Der generelle Syntax sieht folgendermaßen aus:
<!DOCTYPE root-element PUBLIC "FPI" ["URI"] [ <!-- internal subset declarations --> ]>
oder
<!DOCTYPE root-element SYSTEM "URI" [ <!-- internal subset declarations --> ]>
root-Element ist die Angabe des ersten Elements im Dokument, meist groß geschrieben im Gegensatz um Element selbst. Im Bereich des Webs ist das root-element meist HTML.
Danach folgt eine Deklaration woher der Browser die Informationen über den Standard beziehen soll. Meist ist es eine einfache Referenz auf eine DTD (z.B. "-//W3C//DTD HTML 4.01//EN" und "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"), selten auch die Deklaration eines Formal Public Identifiers auf den wir hier nicht näher eingehen werden.
Aktuell (Stand Dezember 2010) gibt es folgende standardisierte Doctypes die für *ML-Dateien im Internet relevant sind:
Doctype | Standard | Anwendung |
---|---|---|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> | HTML 4.01 Strict |
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> | HTML 4.01 Transitional |
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> | HTML 4.01 Frameset |
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | XHTML 1.0 Strict |
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | XHTML 1.0 Transitional |
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> | XHTML 1.0 Strict |
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> | XHTML 1.1 | entspricht XHTML 1.0 Strict |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd"> | XHTML Basic 1.0 | |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd"> | XHTML Basic 1.1 | |
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd"> | XHTML Mobile Profile 1.0 | |
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.1//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile11.dtd"> | XHTML Mobile Profile 1.1 | |
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd"> | XHTML Mobile Profile 1.2 | |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd"> | XHTML+RDFa 1.0 | |
<!DOCTYPE HTML> | HTML5 |
|
Zu einigen dieser Doctypes haben wir bereits in unserer Befehlsreferenz ausführliche Informationen. Die in HTML und XHTML zulässigen Elemente und Attribute finden Sie ebenfalls dort.
Die oben stehende Liste ist auf den ersten Blick erschlagend. Für welchen sollte man sich da nur entscheiden?
Zunächst: Wenn Sie eine Webseite aufbauen die für Internetnutzer ohne mobiles Endgerät gedacht ist, wählen Sie einen der HTML- oder XHTML-Doctypes aus. Aber nicht Basic oder Mobile.
Welchen dieser Doctypes Sie für Ihr Dokument wählen hängt primär von dem HTML-Code ab den Sie schreiben möchten. Möchten Sie eher HTML4 schreiben (also mit <font> und ohne schließende Elemente wie </p>) dann wäre einer der HTML4-Doctypes der Richtige. Wenn Sie gut strukturierte Dokumente bevorzugen, wäre XHTML die richtige Wahl. Es hängt ganz von Ihnen ab.
Wenn Sie sich für einen Doctype entschieden haben, müssen Sie auch dessen Vorgaben befolgen. Also nicht bei einem XHTML-Doctype das <font>-Element verwenden oder ein <iframe> bei einem HTML 4.01 Strict Dokument einfügen. Das geht zwar und wird von den meisten Browsern einigermaßen verarbeitet, aber es ist unsauber und nicht optimal zukunftsfähig.
Ein falsch gewählter Doctype lässt die von Ihnen eingegebenen Inhalte ggfs. anders erscheinen als Sie möchten. Wenn Sie bspw. HTML4-Code verwenden aber einen XHTML-Doctype angegeben haben, dann kann (!) ein Browser dies durchaus falsch interpretieren und z.B. Absätze nicht sauber beendet anzeigen. Wie ein Browser den Quellcode interpretiert ist dem Browser selbst überlassen. Die meisten der heutigen Browser richten sich nach den Standards. Und die Standards sehen auch für Abweichungen mögliche Lösungsmodelle vor. Ein iframe in einem Strict-Dokument z.B. ist zwar möglich und wird auch von den meisten Browsern angezeigt, aber es ist inhaltlich falsch untergebracht.
Um eine zukunftsfähige Webseite zu erstellen, muss mann sich an diese Standards halten. Die zuletzt genannte Abweichung könnte bei zukünftig zur Verfügung stehenden semantischen Browsern zu Fehlern führen. Und bei heutigen bereits je nach Konstellation innerhalb des Quellcodes auch zu Fehldarstellungen auf Grund von Fehlinterpretationen auf Grund des nicht passenden Doctypes.
Das Content-Management-System VIO.Matrix unterstützt von Haus aus jeden Doctype, sei es ein vergangener oder ein zukünftig noch zu entwickelnder. Selbst HTML5-Doctypes sind seit jeher möglich. Dadurch, dass man als Webmaster die volle Kontrolle über jeden Teil des HTML-Codes innerhalb des CMS hat, kann man auch den Doctype den eigenen Bedürfnissen anpassen bzw. angeben.
Die komfortabelste Möglichkeit ist die Einbindung eines Doctype über die Pipeline-Definition als Serialisierer. Dazu genügt der folgende Eintrag für einen HTML 4.01 Transitional Doctype innerhalb der XML-Deklaration der Pipeline:
<map:serializer label="HTML 4.01 Transitional" name="html" src="org.viosys.viomatrix.serialization.HTMLSerializer">
<http-header name="Content-Type">text/html</http-header>
<doctype-public>-//W3C//DTD HTML 4.01 Transitional//EN</doctype-public>
<doctype-system>http://www.w3.org/TR/html4/loose.dtd</doctype-system>
<doctype-file-extension>html</doctype-file-extension>
</map:serializer>
Diese Konfiguration im Detail:
Genau so kann man auch einen XHTML 1.0 Transitional-Doctype definieren:
<map:serializer label="XHTML 1.0 Transitional" name="xhtml" src="org.viosys.viomatrix.serialization.HTMLSerializer">
<http-header name="Content-Type">text/html</http-header>
<http-header name="Content-Encoding">gzip</http-header>
<doctype-public>-//W3C//DTD XHTML 1.0 Transitional//EN</doctype-public>
<doctype-system>http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</doctype-system>
<doctype-file-extension>html</doctype-file-extension>
</map:serializer>
Wie man sieht sind hier die doctype-public und doctype-system-Elemente entsprechend angepasst. Achten Sie darauf, wie bei jedem Serialisierer, dass die Werte der name-Attribute einmalig sind. Für das Beispiel mit dem XHTML-Doctype oben wurde "xhtml" statt "html" angegeben.
Wenn Sie näheres über das Pipeline-Modell von VIO.Matrix erfahren möchten, lesen Sie doch in dem dafür erstellten Tutorial die Grundlagen durch.
Man kann aber auch komplett ohne Pipeline einen Doctype angeben. Dazu müssen Sie einfach den gewünschten Doctype in Ihrem Layout ganz oben, oberhalb des <html>-Elements einfügen. Beispiel:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html>
Im Internet geistern viele verschiedene Schreibweisen von Doctypes herum. Es ist immer der optimale Weg, wenn man nicht sicher ist, wie ein Doctype geschrieben wird, direkt beim World Wide Web Consortium nachzuschauen. Diese Organisation standardisiert u.a. auch die Festlegungen für die Doctypes.
Bei der Verwendung von verschiedenen Editoren kann es dazu kommen, dass am Anfang des Dokuments, noch vor dem Doctype, ein einzelnes Zeichen erscheint, welches dort nicht sein sollte und was man auch nich dort eingefügt hat. Dieses Zeichen bringt aber die Browser dazu den Doctype nicht mehr zu erkennen, weil der Doctype eben nicht mehr das Erste ist was in dem Dokument steht. Dieses Zeichen ist meist der Byte Order Mark (kurz "BOM"), welches in Zusammenhang mit UTF-8 und UTF-16-Zeichensätzen eingefügt wird. Man muss in dem Fall den eigenen Editor so einstellen, dass er das UTF-8-Dokument ohne BOM speichert. Wie das geht hängt jeweils von dem Editor ab. VIO.Matrix erzeugt generell kein BOM und bereitet dadurch nicht diese Probleme.