XML-Gültigkeit

Dokumenttypen und Dokumentschemata

XML als Meta-Sprache beschreibt nur die Syntax, nicht die Semantik

Im vorhergegangen Abschnitt haben wir die grundlegenden Eigenschaften von XML-Dokumenten geklärt. Jedoch geben diese noch keine Auskunft darüber, was mit den Element- und Attributnamen gemeint ist und in welcher Anordnung sie welchen Sinn ergeben. XML ist eine Meta-Sprache und deshalb lässt sich aus einem XML-Dokument allein noch keine Bedeutung ableiten.

In dem Moment, in dem man zu XML Dokumenten eine Interpretationsanweisung hinzufügt, spricht man von einer XML-Applikation. Beispiele für XML-Applikationen sind XHTML, WML oder WSDL.

Eine formale Beschreibung der Regeln ist notwendig, um Dokumente auf Richtigkeit zu überprüfen.

Um zu überprüfen, ob ein XML-Dokument gemäß einer Interpretationsanweisung interpretiert werden kann, also ob es den Annahmen genügt, die in der Interpretationsanweisung über das Dokument gemacht werden, besteht die Möglichkeit, XML-Dokumenten eine formale Inhaltsbeschreibung zu zuordnen.

Für XML gibt es mehrere Varianten diese formale Inhaltsbeschreibung zu spezifizieren.

Möglichkeiten zur Spezifikation von XML-Applikationen

Einbindung von DTDs

Einen Dokumenttyp für das Dokument definieren

Damit die Gültigkeit ihres Dokuments automatisch überprüft werden kann, müssen Sie dem validierenden Parser mitteilen, dass das aktuelle Dokument nach den Regeln einer bestimmten DTD geparst werden soll. Diese Mitteilung erfolgt, indem der Dokumententyp des Dokuments deklariert wird.

Die Deklaration des Dokumententyps erfolgt hinter der XML-Deklaration (XML-Verarbeitungsanweisung). Sie kann in der vollständigen oder in der verkürzten Form erfolgen:

Die vollständige Deklaration. 

Die DTD-Deklaration ist wichtig, um die Gültigkeit des Dokuments zu prüfen

besteht aus einer Abfolge des kleiner-als-Zeichens, eines Ausrufezeichens, des in Großbuchstaben geschriebenen Schlüsselwortes DOCTYPE, einem Leerzeichen gefolgt von dem Elementnamen des Root-Elements. Wiederum nach einem Leerzeichen folgt das in Großbuchstaben geschriebene Schlüsselwort PUBLIC und in Anführungszeichen die öffentliche Identifizierung der DTD, die so genannte Public ID. Getrennt durch ein Leerzeichen oder einen Zeilenumbruch folgt die interne Identifizierung der DTD, die so genannte System ID als absolute URL oder als relativer Pfadname der Datei, in der die DTD liegt. Die Deklaration wird abgeschlossen mit den größer-als-Zeichen.

Beispiel 1.10. DTD-Deklaration für XHTML 1.0

<?xml version="1.0 "encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

In diesem Beispiel wurde die DTD über die absolute Adresse angesprochen. Adressen von Dokumenten, die nicht über das Internet, sondern von der Festplatte oder einem Netzwerklaufwerk geladen werden sollen, beginnen mit file://.

Die verkürzte Deklaration. 

Warnung

Die Public ID darf in XML weggelassen werden, die System ID jedoch nicht. Für SGML-Dokumente reicht auch die Public ID oder die System ID.

bietet sich immer dann an, wenn einem die Public ID nicht bekannt ist, oder es keinen öffentliche Identifizierung gibt. In diesem Falle ist die Deklaration bis zum Schlüsselwort DOCTYPE identisch, also kleiner-als-Zeichen, Ausrufezeichen, Schlüsselwort DOCTYPE, Leerzeichen. Doch dann folgt das Schlüsselwort SYSTEM, um das Folgen der internen Identifizierung anzukündigen. Dahinter kommt die URL oder der relative Pfad der DTD (in Anführungszeichen) und zum Abschluss das größer-als-Zeichen.

Beispiel 1.11. Verkürzte DTD-Deklaration

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE dokument SYSTEM
 "../dtds/meinedtd.dtd">

Hier wird die Lage der DTD durch einen relativen Pfad angegeben. Wenn allerdings die XML-Datei verschoben wird, muss die DTD mit verschoben werden oder die Deklaration geändert werden.

Einbindung externer Entitäten über die DTD-Deklaration

Über die DTD-Deklaration kann man externe Entitäten einbinden, um Dokumente zu modularisieren.

Im Abschnitt Externe Entities haben wir bereits besprochen, dass man mit externen Entitäten die Inhalte anderer Dateien in das Dokument einbinden kann. Jetzt soll gezeigt werden, wie man solche externen Entitäten definieren kann, denn dieser Schritt kann uns bei der Modularisierung von großen Dokumenten behilflich sein.

Um externe Entities zu definieren, fügen wir vor dem größer-als-Zeichen der Doctype-Deklaration, also nach der System ID öffnende und schließende eckige Klammern „[]“ ein, in die wir die nötigen Befehle schreiben. Für jede Entity muss dann folgender Code eingegeben werden: kleiner-als-Zeichen und Ausrufezeichen, um das SGML-Schlüsselwort anzukündigen, das Schlüsselwort ENTITY, nach einem Leerzeichen der Name der Entität, also das, was im Dokument zwischen Ampersand und Semikolon verwendet wird. Es folgt wie bei der Dokumententyp-Deklaration das Schlüsselwort SYSTEM und die System ID, also die Adresse der Datei, auf welche die Entity verweisen soll. Am Ende wird das Konstrukt mit dem größer-als-Zeichen abgeschlossen.

Beispiel 1.12. Deklaration externer Entitäten

Damit können wir das Beispiel Externe Entities so vervollständigen, dass die besprochene Entität &xml; wirklich deklariert wird.

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE dokument SYSTEM
 "../dtds/meinedtd.dtd" [ 
 <!ENTITY xml SYSTEM "content.xml"> 
]> 
<dokument> 
 &xml;
 <gruss> 
  Hallo Welt 
 </gruss> 
 &xml;
</dokument>