Homepage-Webhilfe Event-Banner

Grundlagen

DTD (Document Type Definition, zu Deutsch Dokumenttypdefinition) ist keine eigene Sprache, sondern vielmehr ein Sprachbestandteil von XML (aber auch von SGML). Eine DTD enthält Regeln über den Aufbau und Inhalt eines XML- oder SGML-Dokuments.

Da die Dokumenttypdefinition Teil der XML-Spezifikation ist, muss der Syntax einer DTD natürlich weitestgehend mit dem von XML (also vor allem in Bezug auf die spitzen Klammern) kompatibel sein. Es gibt jedoch trotzdem ein paar Unterschiede, welche Sie innerhalb diese Tutorials kennenlernen werden. Im Allgemeinen kann man sagen, dass der Syntax von DTD vereinfacht ist.


Bei der Definition eines eigenen XML-Dokumentenaufbaus stellt sich wohl zunächst die Frage, warum man ein DTD braucht. Die Antwort ist einfach: Man braucht nicht zwingend eine DTD. Die Verwendung einer Dokumenttypdefinition ist jedoch sinnvoll, wenn man das Format veröffentlichen möchte bzw. es an andere Personen weitergeben möchte. Entwerfen Sie ein XML-Datenformat zum Datenaustausch von Informationen innerhalb Ihrer Website, so werden Sie wohl kaum eine DTD entwerfen. Haben Sie hingegen ein Programm entwickelt, bei welchem Einstellungen in einer XML-Datei gespeichert werden (vorausgesetzt die Datei ist auch dazu gedacht ist, vom Benutzer „manuell“ angepasst zu werden), so ist es schon eher sinnvoll, eine DTD zu schreiben. Möchten Sie einen eigenen Standard entwerfen, so könnte man das Erstellen einer DTD schon fast als Pflicht ansehen.

Mit einer Dokumenttypdefinition lassen sich Regeln aufstellen, um den Aufbau sowie den Inhalt eines oder mehrerer XML-Dokumente festzulegen. Ein Beispiel: Sie haben ein XML-Dokument, welches ein Adressbuch repräsentiert. In diesem Adressbuch befinden sich nun mehrere Kontakte. Die Kontakte enthalten z. B. Informationen über den Vornamen, den Nachnamen, die Straße, die Hausnummer, die Postleitzahl, den Ort, die Telefonnummer und die E-Mail-Adresse. Es kann jedoch vorkommen, dass in Ihrem Adressbuch Kontakte enthalten sind, deren postalische Adresse Sie nicht kennen, sondern z. B. nur deren Telefonnummer. Um nun zum einen festzulegen, welche Elemente und Attribute es gibt und zum anderen zu definieren, wie diese verschachtelt sind, in welcher Reihenfolge diese zu erscheinen haben und wie oft bestimmte Elemente vorkommen dürfen / müssen, können Sie eine Dokumenttypdefinition verwenden.

Wird für eine XML-Datei keine DTD verwendet (was nicht zwingend erforderlich ist), so kann das Dokument zwar wohlgeformt, nicht aber gültig sein. Dies liegt daran, da ohne eine DTD nicht nachweisbar ist, ob der Aufbau und die enthaltenen Daten korrekt sind oder nicht. Bei Verwendung einer Dokumenttypdefinition sieht dies anders aus, denn durch die vorliegenden Regeln kann (z. B. durch einen XML-Parser) ermittelt werden, ob der Aufbau sowie die Daten gültig sind.


Bei Verwendung einer DTD kann man selbst entscheiden, ob die DTD im eigenen XML-Dokument angegeben wird (XML-Deklarations-Attribut standalone="yes") oder in einer externen Datei (meist mit der Dateiendung .dtd, XML-Deklarations-Attribut standalone="no") ausgelagert wird. Um die gleiche DTD für mehrere XML-Dateien nutzen zu können, ohne die DTD kopieren zu müssen, ist es erforderlich, die DTD in eine eigene Datei auszulagern.

Betrachten wir zunächst den Fall, dass die DTD im eigenen XML-Dokument enthalten ist: Als erstes müssen wir die Wurzel des Dokuments deklarieren. Hierfür gilt der Syntax <!DOCTYPE Wurzel [ ]>, wobei Wurzel durch den Namen des Wurzelelements zu ersetzen ist. Innerhalb der eckigen Klammern werden nun die weiteren DTD-Anweisungen (dazu später mehr) angegeben. Dabei wird i. d. R. auch auf die Einrückung geachtet.

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>

<!DOCTYPE adressbuch [
    <!-- Hier werden die weiteren Anweisungen notiert -->
]>

<adressbuch>
    
</adressbuch>

Möchten Sie die DTD hingegen in ein eigenes Dokument auslagern, so wird in der XML-Datei lediglich der Verweis zu der DTD angegeben. Als Schema gilt hier <!DOCTYPE Wurzel SYSTEM "pfad/zur/datei.dtd">. Auch hier muss Wurzel durch den Namen des Wurzelelements ersetzt werden.

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>

<!DOCTYPE adressbuch SYSTEM "adressbuch.dtd">

<adressbuch>
    
</adressbuch>

Neben dem oben verwendeten SYSTEM-Identifikator, gibt es noch den PUBLIC-Identifikator. Hierbei muss dann zwischen dem Schlüsselwort PUBLIC und dem Dateinamen ein öffentlicher Name (anzugeben in doppelten Anführungszeichen) notiert werden. Dies ermöglicht, dass Programme wie z. B. Webbrowser die DTD nicht erneut laden, sofern die benötigte DTD über den gleichen öffentlichen Namen verfügt. Verwendet wird diese Form z. B. bei dem Dokumententyp (engl. document type, oder kurz doctype) einer XHTML-Datei.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen OK