Beispiel einer XML-Dokumentinstanz:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE buch SYSTEM "buch.dtd"> <buch verlag="O'Reilly"> <kapitel type="n/a"> <ueberschrift>Vorwort</ueberschrift> <absatz>...</absatz> </kapitel> <kapitel type="xml"> <ueberschrift>XML Terminologie</ueberschrift> <absatz>...</absatz> </kapitel> <kapitel type="java"> <ueberschrift>Java Referenz</ueberschrift> <absatz>...</absatz> </kapitel> </buch>
Eine DTD beschreibt eine kontextfreien Grammatik, die festlegt, welchen Inhalt ein Element haben darf. Die Syntax ähnelt der von regulären Ausdrücken. Ein Dokument, welches wohlgeformt ist und dessen Struktur einer DTD entspricht, heißt gültiges XML-Dokument.
Eine DTD kann innerhalb eines XML Dokuments definiert werden oder in einer externen Datei. Mit Hilfe der zweiten Methode ist es möglich, die erlaubten Elemente, Attribute und Elementschachtelungen unabhängig von den Daten zu deklarieren.
Die Deklarationen der Elemente und Attribute sind die beiden wichtigsten Konzepte in DTDs. Daneben existieren Parameterentitäten, allgemeine Entitäten, Notationen und Include- Ignore-Sektionen, welche in diesem Seminar jedoch keine weitere Betrachtung finden sollen.
DTDs sind der traditionelle Weg zur Definition der Dokumentstruktur. Sie haben jedoch einige deutliche Nachteile gegenüber gängigen Schemasprachen, was daran liegt, dass sie nicht für die allgemeine Datenbeschreibung gedacht sind, sondern aus der dokumentenzentrierten Sicht von SGML stammen. DTDs besitzen eine eigene nicht XML konforme Syntax und unterstützen Datentypen nur im geringen Umfang. Das W3C hat deshalb den XML Schema Standard entwickelt, der seit Mai 2001 als stabiler Standard gilt. Die Vorteile von XML Schema liegen darin, dass es über ein anspruchsvolles Datentypkonzept verfügt, so dass Datentypen (wie Integer, Float, Date, Time, ...) verwendet werden können. XML Schema unterstützt außerdem leistungsfähige Strukturierungsmechanismen, mit denen Elementtypen voneinander abgeleitet werden können, wie man es aus anderen Modellierungsansätzen kennt. In diesem Seminar soll jedoch nur die Validierung von XML-Dokumenten gegen DTDs betrachtet werden.
, | "then" | Folge von Elementen |
| | "xor" | Alternative von Elementen (exklusiv) |
(kein Indikator) | Element muss genau einmal auftreten |
? | Element ist optional, 0 oder 1 |
* | Element ist optional und wiederholbar, 0 oder beliebig oft |
+ | Element muss vorhanden sein, kann öfter auftreten, 1 oder beliebig oft |
( | Start Inhaltsmodell oder Gruppe |
) | Ende Inhaltsmodell oder Gruppe |
#PCDATA
im Inhaltsmodell#PCDATA
steht für parsed character data und bedeutet, dass diese Textdaten vom XML-Parser auf eventuelles Markup hin untersucht werden. Falls Entity-Referenzen enthalten sind, werden diese ersetzt.
(#PCDATA) | Element besitzt nur Textdaten als Inhalt, ggf. keinen Inhalt |
(#PCDATA | elem1 | elem2)* | Mixed content. Das Element kann Textdaten und Elemente enthalten. #PCDATA muss in der Deklaration als erstes aufgeführt werden. Es lässt sich nicht festlegen, dass die erlaubten Kind-Elemente in einer vorgegebenen Reihenfolge im Text erscheinen müssen, oder dass sie überhaupt auftreten müssen. |
EMPTY | Element besitzt keinen Inhalt |
ANY | Element besitzt beliebige deklarierte Elemente und Textdaten, oder keinen Inhalt |
Element-Deklarationen für das obige XML-Dokument.
<!ELEMENT buch (kapitel+) > <!ELEMENT kapitel (ueberschrift, absatz+) > <!ELEMENT ueberschrift (#PCDATA) > <!ELEMENT absatz (#PCDATA) >
CDATA | Textdaten |
(a | b | c) | Liste von möglichen Attribut Werten |
ID | Unique identifier Wert des Attributes muss im Dokument eindeutig sein |
IDREF | Referenz auf eine ID eines anderen Elements |
IDREFS | Ein oder mehrere IDREFs, getrennt durch Leerzeichen |
NMTOKEN / NMTOKENS | Name token (nicht weiter betrachtet) |
ENTITY / ENTITIES | Name eines Entities, welches an anderer Stelle deklariert ist (nicht weiter betrachtet) |
"wert" | Default Wert des Attributes Wenn das Attribut nicht angegeben ist, wird dieser Wert verwendet |
#REQUIRED | Attribut muss angegeben werden |
#IMPLIED | Attribut ist optional |
#FIXED "wert" | Attribut besitzt einen festen Wert. Es darf kein anderer Wert im Dokumente angegeben werden. |
Attribut-Deklarationen für das obige XML-Dokument.
<!ATTLIST buch verlag CDATA #REQUIRED> <!ATTLIST kapitel type (n/a | xml | java) #IMPLIED>