Dieser Artikel von Wikipedia ist u.U. veraltet. Die neue Version gibt es hier.
Die Dokumenttypdefinition (englisch Document Type Definition DTD ) ist eine Deklaration in SGML - und XML -Dokumenten die die Struktur eines solchen Dokuments
In einer DTD werden Elemente (engl. elements z.B. XML-Elemente ) Attribute von Elementen (engl. attributes z.B. XML-Attribute) Entitäten (engl. entities z.B. XML-Entitäten) und dies ist nur bestimmten SGML-Deklarationen (engl. SGML declaration ) möglich Besonderheiten der Syntax-Verwendung (z.B. Abkürzungen lokale Umdefinitionen von Zeichen). Konkret heißt das in einer DTD beispielsweise die Reihenfolge der oder die Art des Inhalts von Attributen wird bzw. werden kann.
Die Syntax und Semantik einer DTD ist Bestandteil des XML -Standards. Diese Entscheidung wurde später kritisiert da DTD-Syntax selber kein XML ist. Mit XML-Schema existiert ein eigener Standard zur Definition Dokumenttypen für XML-Dokumente. XML-Schemata werden in einer formuliert bieten mehr Möglichkeiten und sind allerdings komplexer als DTDs.
Die DTD wird zu Beginn eines vor dem Wurzelelement in der Dokumenttyp-Deklaration angegeben. Die Grammatikregeln der DTD können sowohl innerhalb des XML-Dokumentes (interne DTD) als in einer externen Datei angeben werden (drei und die eckigen Klammern können weggelassen werden sie leer sind):
<!DOCTYPE Wurzelelement SYSTEM "datei.dtd" [ ... <!DOCTYPE Wurzelelement PUBLIC "Public Identifier" "datei.dtd" [ ]> <!DOCTYPE Wurzelelement [ ... ]>
Als Verweis auf eine Datei kann beliebiger URI angegeben werden. Für standardisierte DTDs gibt bekannte Public Identifier (z.B. "-//W3C//DTD XHTML 1.0 Strict//EN" für XHTML ) so dass Programme nicht jedesmal die neu laden müssen falls ihnen der Public bekannt ist
Innerhalb einer DTD-Datei bzw. der eckigen können verschiedene Markup-Deklarationen stehen die den Dokumenttyp
Innerhalb einer DTD kann die Dokumentstruktur Deklarationen von Elementtypen Attributlisten Entities und Notationen definiert werden. Dabei können spezielle Parameter-Entities benutzt werden die DTD-Teile enthalten und innerhalb der DTD erlaubt sind.
Mit einer Elementtyp-Deklaration wird ein Element sein möglicher Inhalt definiert. In einem validen dürfen nur Elemente vorkommen die in der definiert sind.
Der Inhalt eines Elementes kann durch Angabe anderer Elementnamen und durch einige Schlüsselwörter Zeichen angegeben werden.
EMPTY für keinen Inhalt
ANY für beliebigen Inhalt
für Reihenfolgen
| für Alternativen (im Sinne "entweder...oder")
Runde Klammern zum Gruppieren
Der Stern für keinmal oder beliebig oft
Das Pluszeichen für einmal oder beliebig oft
Das Fragezeichen für keinmal oder genau einmal
Wird kein Stern Pluszeichen oder Fragezeichen angegeben muss das Element genau einmal vorkommen
<!ELEMENT html (head body)> <!ELEMENT hr <!ELEMENT p (#PCDATA | p | ul ol | dl | table | pre hr | h1|h2|h3|h4|h5|h6 | blockquote | address fieldset)*> <!ELEMENT dl (dt|dd)+>
Die Liste der möglichen Attribute eines wird in einer DTD mit <!ATTLIST Elementname Attributliste> angegeben. Die Attributliste enthält durch Leerzeichen Zeilenumbrüche getrennt jeweils den Namen den Typ und Vorgaben eines Attributes.
Es gibt folgende Attributtypen
CDATA
ID
IDREF und IDREFS
NMTOKEN
ENTITY und ENTITIES
NOTATION und NOTATIONS
Aufzählungen und NOTATION-Aufzählungen
Mit den Attribut-Vorgaben kann angegeben werden ob ein Attribut muss ( #REQUIRED ) oder nicht ( #IMPLIED ) oder einen festen Wert enthält ( #FIXED ) und welcher Wert als Standardwert benutzt falls das Attribut bei einem XML-Tag nicht wird.
Eine Entity ist eine benannte Abkürzung eine Zeichenkette oder ein externes Dokument die der DTD oder des XML-Dokumentes das diese benutzt verwendet werden kann. Eine Entity-Referenz der Form &Name; wird dabei durch den Inhalt der ersetzt.
Interne Entities bestehen aus Zeichenketten. Diese können selber Entity-Referenzen und wohlgeformtes XML-Markup enthalten:
<!ENTITY name "Johannes Paul"> <!ENTITY papst der II."> <!ENTITY wplink "<a href=' http://de.wikipedia.org '>Wikipedia</a>">
Externe Entities bestehen aus dem Inhalt einer Datei die verwiesen wird. Dabei kann wieder ein Public Identifier benutzt werden.
<!ENTITY kapitel1 SYSTEM "kapitel1.xml"> <!ENTITY wichtig "-//privat//WICHTIG//" "wichtig.xml">
Bei externen Entities kann zusätzlich angegeben dass es sich um eine nicht analysierte Entity handelt deren Inhalt aus beliebigen Daten die durch eine Entity-Referenz nicht ersetzt werden In diesem Fall muss eine Notation angegeben werden (hier "gif").
<!ENTITY bild SYSTEM "../grafiken/bild.gif" NDATA gif>
Notationen sind Hinweise zur Interpretation von Daten die nicht direkt vom XML-Parser verarbeitet Notationen können sich beispielsweise auf ein Dateiformat Bilder beziehen.
<!NOTATION Datentyp SYSTEM "URL"> <!NOTATION Datentyp "Identifikator">
Parameter-Entitäten enthalten eine benannte Zeichenkette die %Name; an fast allen Stellen innerhalb einer eingesetzt werden kann. Auf diese Weise lassen beispielsweise externe Dateien in eine DTD einbinden mehrfach vorkommende Bestandteile abkürzen. Parameter-Entitäten werden wie Entities deklariert wobei vor dem Elementnamen ein Prozentzeichen steht. Beispiel:
<!ENTITY % datei SYSTEM "andere-datei.ent"> %andere-datei;