XML-Dokumente können und sollten mit einer XML-Deklaration beginnen, die die verwendete XML-Version spezifiziert. Beispielsweise sind die folgenden Zeilen ein vollständiges XML-Dokument, wohlgeformt, aber nicht gültig.
<?xml version="1.0"?> <gruss>Hallo Welt!</gruss>
Gleiches gilt hierfür:
<gruss>Hallo Welt!</gruss>
Die Versionsnummer 1.0
sollte benutzt werden,
um Konformität zu dieser Version der Spezifikation
anzuzeigen. Es ist ein Fehler, wenn ein Dokument den Wert
1.0
benutzt und nicht konform zu dieser Version der
Spezifikation ist. Es ist die Absicht der
XML-Arbeitsgruppe, späteren Versionen dieser
Spezifikation andere Nummern als 1.0
zu geben. Diese
Absichtserklärung ist jedoch kein Versprechen, irgendwelche
weiteren Versionen von XML zu erstellen, noch,
falls es weitere gibt, irgendein bestimmtes
Nummerierungsschema zu verwenden. Da zukünftige Versionen
nicht ausgeschlossen sind, wurde die Deklaration eingeführt,
um die Möglichkeit der automatischen Versionserkennung zu
erlauben, sofern dies notwendig werden sollte. Prozessoren
dürfen einen Fehler anzeigen, wenn sie ein Dokument einer Version
bekommen, die sie nicht unterstützen.
Die Funktion des Markups in einem XML-Dokument ist es, die Aufteilung auf Speicherungseinheiten und die logische Struktur zu beschreiben sowie Attribut-Wert-Paare mit der logischen Struktur zu verbinden. XML stellt einen Mechanismus zur Verfügung, die Dokumenttyp-Deklaration, um Beschränkungen der logischen Struktur zu definieren und die Verwendung von vordefinierten Speichereinheiten zu unterstützen. Ein XML-Dokument ist gültig, wenn es eine dazugehörige Dokumenttyp-Deklaration besitzt und wenn sich das Dokument an die darin formulierten Beschränkungen hält.
Die Dokumenttyp-Deklaration muss vor dem ersten Element im Dokument stehen.
Prolog | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Die XML-Dokumenttyp-Deklaration enthält oder verweist auf Markup-Deklarationen, die eine Grammatik für eine Klasse von Dokumenten bilden. Diese Grammatik ist bekannt als Dokumenttyp-Definition, kurz DTD. Die Dokumenttyp-Deklaration kann entweder auf eine externe Teilmenge (eine besondere Art eines externen Entity) verweisen, die Markup-Deklarationen enthält, oder sie kann Markup-Deklarationen direkt in einer internen Teilmenge enthalten oder beides. Die DTD für ein Dokument besteht aus beiden Teilmengen zusammen.
Eine Markup-Deklaration ist eine Elementtyp-Deklaration, eine Attributlisten-Deklaration oder eine Notation-Deklaration. Diese Deklarationen dürfen ganz oder teilweise innnerhalb von Parameter-Entities stehen, wie in den Wohlgeformtheits- und Gültigkeitsbeschränkungen unten beschrieben. Für vollständigere Informationen siehe Abschnitt A.4.
Dokumenttyp-Definition | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
Die Markup-Deklarationen dürfen ganz oder teilweise durch den Ersetzungstext von Parameter-Entities gebildet werden. Die Produktionen für einzelne Nicht-Terminale (elementdecl, AttlistDecl usw.), die später in dieser Spezifikation folgen, beschreiben die Deklarationen, nachdem sämtliche Parameter-Entities aufgelöst wurden.
Gültigkeitsbeschränkung:
Wurzel-Elementtyp
Der Name in der
Dokumenttyp-Deklaration muss mit dem Elementtyp des
Wurzel-Elements übereinstimmen.
Gültigkeitsbeschränkung: Ordentliche
Deklaration/PE-Verschachtelung
Der
Ersetzungstext von Parameter-Entities muss ordentlich mit
Markup-Deklarationen verschachtelt sein. Das heißt: wenn
entweder das erste oder das letzte Zeichen einer
Markup-Deklaration (markupdecl, siehe oben) im
Ersetzungstext für eine Parameter-Entity-Referenz enthalten
ist, dann müssen beide in demselben Ersetzungstext enthalten sein.
Wohlgeformtheitsbeschränkung:
PEs in interner Teilmenge
Im
internen Teil der DTD können Parameter-Entity-Referenzen nur dort stehen, wo auch
Markup-Deklarationen stehen können, nicht jedoch innerhalb
von Markup-Deklarationen. (Dies gilt nicht für Referenzen,
die in externen Parameter-Entities erscheinen oder für die
externe Teilmenge.
Wie die interne Teilmenge so muss auch die externe Teilmenge und jedes externe Parameter-Entity, auf das die DTD Bezug nimmt, aus einer Folge von vollständigen Markup-Deklarationen des Typs bestehen, der durch das Nicht-Terminal markupdecl erlaubt wird, vermengt mit Leerraum (White Space) oder Parameter-Entity-Referenzen. Allerdings dürfen Teile des Inhalts der externen Teilmenge oder von externen Parameter-Entities unter Verwendung von bedingten Abschnitten ignoriert werden. Dies ist innerhalb der internen Teilmenge nicht erlaubt.
Externe Teilmenge | ||||||||
---|---|---|---|---|---|---|---|---|
|
Die externe Teilmenge und externe Parameter-Entities unterscheiden sich darüber hinaus von der internen Teilmenge dadurch, dass Parameter-Entity-Referenzen innerhalb von Markup-Deklarationen erlaubt sind, nicht nur zwischen Markup-Deklarationen.
Ein Beispiel:
<?xml version="1.0"?> <!DOCTYPE gruss SYSTEM "hallo.dtd"> <gruss>Hallo Welt!</gruss>
Der System-Identifier hallo.dtd gibt den URI einer DTD für das Dokument an.
Die Deklaration kann auch lokal angegeben werden, wie in folgendem Beispiel:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE gruss [ <!ELEMENT gruss (#PCDATA)> ]> <gruss>Hallo Welt!</gruss>
Wenn sowohl die externe als auch die interne Teilmenge verwendet werden, sollte die interne Teilmenge vor der externen Teilmenge stehen. Dies hat den Effekt, dass Entity- und Attributlisten-Deklarationen in der internen Teilmenge Vorrang vor jenen in der externen Teilmenge haben.