DTD-Befehle sind die Deklarationen der Dokumenttypdefinition (Document Type Definition), mit denen XML- und SGML-Dokumente strukturell beschrieben werden. Eine DTD legt fest, welche Elemente ein Dokument enthalten darf, wie sie verschachtelt sind und welche Attribute sie besitzen.
DTD einbinden
Eine DTD kann intern im Dokument oder extern als eigene Datei stehen:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE buch [
<!ELEMENT buch (titel, autor, kapitel+)>
<!ELEMENT titel (#PCDATA)>
<!ELEMENT autor (#PCDATA)>
<!ELEMENT kapitel (#PCDATA)>
]>
Externe DTDs werden mit SYSTEM (URL/Pfad) oder PUBLIC (öffentlicher Identifier) referenziert, zum Beispiel <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">.
Elementdeklarationen
Mit <!ELEMENT> werden Elemente und ihre Inhaltsmodelle definiert. Die wichtigsten Inhaltsmodelle:
#PCDATA— nur Textinhalt (geparste Zeichendaten)EMPTY— leeres Element wie<br/>ANY— beliebiger Inhalt (selten verwendet)- Sequenz mit Komma:
(titel, autor)— Reihenfolge festgelegt - Alternative mit Pipe:
(absatz | bild)— genau eines von beiden - Quantoren:
?(optional),*(null oder mehr),+(eins oder mehr)
Attributdeklarationen
Mit <!ATTLIST> werden Attribute eines Elements festgelegt — Name, Typ und Default:
<!ATTLIST buch isbn CDATA #REQUIRED
sprache NMTOKEN "de"
kategorie (sachbuch|roman|lexikon) "sachbuch">
Wichtige Attributtypen: CDATA (beliebiger Text), ID (eindeutiger Bezeichner), IDREF/IDREFS (Verweis auf eine ID), NMTOKEN/NMTOKENS (Name-Token), ENTITY/ENTITIES (Entity-Referenz) sowie Aufzählungstypen. Defaults: #REQUIRED (Pflicht), #IMPLIED (optional), #FIXED (fester Wert).
Entities und bedingte Sektionen
<!ENTITY> definiert Textbausteine: interne Entities (<!ENTITY firma "Hanse Computing">), externe Entities und Parameter-Entities (<!ENTITY % basis SYSTEM "basis.dtd">), die zur Wiederverwendung von Deklarationsblöcken dienen. Mit <!ENTITY % cond "INCLUDE"> und <!ENTITY % cond "IGNORE"> lassen sich bedingte Sektionen ein- und ausschalten.
Validierung
Die Validierung gegen eine DTD übernimmt zum Beispiel xmllint --valid datei.xml. DTDs stammen aus SGML und sind auch die Grundlage von HTML 4; moderne Schemasprachen wie XSD-Befehle und RELAX-NG-Befehle ergänzen Datentypen und präzisere Regeln, während Schematron-Befehle regelbasierte Prüfungen ergänzen.
Verwandte Grundlagen: XML-Befehle, SGML-Befehle.