Exkurs - Dokumenttypdefinitionen

Beispiel für eine Dokumenttypdefinition

Wir betrachten noch einmal die DTD zur Beschreibung von Oberstufenkursen:

<!ELEMENT Kurs (Fach, Typ, Stufe, Bezeichner, Unterricht, Lehrer, Schüler*)>
<!ELEMENT Fach (#PCDATA)>
<!ELEMENT Typ (#PCDATA)>
<!ELEMENT Stufe (#PCDATA)>
<!ELEMENT Bezeichner (#PCDATA)>
<!ELEMENT Unterricht (Einheit+)>
<!ELEMENT Einheit (Tag, Stunde, Raum?)>
<!ELEMENT Tag (#PCDATA)>
<!ELEMENT Stunde (#PCDATA)>
<!ELEMENT Raum (#PCDATA)>
<!ELEMENT Lehrer (Name, Vorname)>
<!ATTLIST Lehrer
  kürzel CDATA #REQUIRED
  geschlecht CDATA #REQUIRED
> 
<!ELEMENT Name (#PCDATA)>
<!ELEMENT Vorname (#PCDATA)>
<!ELEMENT Schüler (Name, Vorname, Kurssprecher?)>
<!ATTLIST Schüler
  geschlecht CDATA #REQUIRED
>
<!ELEMENT Kurssprecher EMPTY>

Die einzelnen Zeilen der oben gezeigten DTD sollen im Folgenden kurz erläutert werden.

Deklaration der XML-Elemente

Für jedes XML-Element gibt es eine genaue Strukturbeschreibung.

<!ELEMENT Kurs (Fach, Typ, Stufe, Bezeichner, Unterricht, Lehrer, Schüler*)>

Hier wird das Wurzelelement und sein Inhalt festgelegt. Das Wurzelelement hat den Namen Kurs. Sein Inhalt besteht aus einer Sequenz von Elementen: Zuerst ein Fach-Element, gefolgt von einem Typ-Element, gefolgt von einem Stufe-Element usw..

Beachte den Stern hinter dem Schüler-Element. Dieser Stern als Zusatzsymbol deutet hier an, dass ein Schüler-Element wiederholt auftreten kann.

<!ELEMENT Fach (#PCDATA)>
<!ELEMENT Typ (#PCDATA)>
<!ELEMENT Stufe (#PCDATA)>
<!ELEMENT Bezeichner (#PCDATA)>

Diese Zeilen legen fest, dass die betreffenden Elemente als Inhalt nur Zeichen (sogenannte parsed character data) haben.

<!ELEMENT Unterricht (Einheit+)>
<!ELEMENT Einheit (Tag, Stunde, Raum?)>

Diese Zeilen legen die Struktur des Unterricht-Elements und des Einheit-Elements fest. Beachte auch hier die Zusatzsymbole "+" und "?". Ein Unterricht-Element besteht aus einer Wiederholung von Einheit-Elementen. Es muss dabei mindestens ein Einheit-Element vorkommen. Ein Einheit-Element ist eine Sequenz bestehend aus einem Tag-Element, gefolgt von einem Stunde-Element und einem optionalen Raum-Element (dieses Element kann hier stehen, muss aber nicht).

<!ELEMENT Tag (#PCDATA)>
<!ELEMENT Stunde (#PCDATA)>
<!ELEMENT Raum (#PCDATA)>

Diese Zeilen legen fest, dass die betreffenden Elemente als Inhalt nur Zeichen (sogenannte parsed character data) haben.

<!ELEMENT Lehrer (Name, Vorname)>
<!ATTLIST Lehrer
  kürzel CDATA #REQUIRED
  geschlecht CDATA #REQUIRED
> 

Diese Zeilen legen die Struktur des Lehrer-Elements fest. Sein Inhalt ist eine Sequenz bestehend aus einem Name-Element und einem Vorname-Element. Zusätzlich werden hier die Attribute des Lehrer-Elements festgelegt (s.u.).

<!ELEMENT Name (#PCDATA)>
<!ELEMENT Vorname (#PCDATA)>

Diese Zeilen legen fest, dass die betreffenden Elemente als Inhalt nur Zeichen (sogenannte parsed character data) haben.

<!ELEMENT Schüler (Name, Vorname, Kurssprecher?)>
<!ATTLIST Schüler
  geschlecht CDATA #REQUIRED
>
<!ELEMENT Kurssprecher EMPTY>

Das Schüler-Element ist analog zum Lehrer-Element aufgebaut. Eine Sonderstellung nimmt das optionale Kurssprecher-Element ein. Das Kurssprecher-Element ist ein leeres Elemente, das keinen Inhalt hat.

Zusatzsymbole und ihre Bedeutung

Bei der Festlegung von Elementen werden Zusatzsymbole benutzt. Die folgende Übersicht zeigt diese Symbole und ihre Bedeutung:

Operator Bedeutung
() Klammern zur Bildung von Elementgruppen
, Trennzeichen innerhalb einer Sequenz von Elementen
| Trennzeichen zwischen sich ausschließenden Alternativen
* Element(gruppe) kann beliebig oft (auch gar nicht) vorkommen
+ Element(gruppe) muss mindestens einmal vorkommen, kann mehrfach vorkommen
? Element(gruppe) kann einmal oder kein mal vorkommen

Deklaration von Attributen

In der oben gezeigten DTD bleiben nur noch die Attributdeklarationen zu erläutern:

<!ATTLIST Lehrer
  kürzel CDATA #REQUIRED
  geschlecht CDATA #REQUIRED
> 

Hier wird festgelegt, dass eine Lehrer-Element ein Attribut kürzel hat, das nicht weggelassen werden kann und dessen Wert eine Zeichenkette ist, sowie ein Attribut geschlecht, das ebenfalls nicht weggelassen werden kann und dessen Wert ebenfalls eine Zeichenkette ist.

Eine solche Attributfestlegung bezieht sich immer auf ein XML-Element. Sie listet alle Attribute des Elements auf und legt die erlaubten Attributwerte fest (z. B. CDATA für Zeichenketten). Zudem legt sie u.a. fest, ob das Attribut in jedem Element vorkommen muss (REQUIRED) oder ob es auch weggelassen werden kann (IMPLIED). Weitere Details findet man in geeigneten Nachschlagewerken.

Einbindung einer DTD

In den bisher betrachteten Beispielen ist die DTD jeweils in einer eigenen Datei abgespeichert worden. Das ist von Vorteil, wenn die DTD in verschiedene XML-Dokumente eingebunden werden soll. Die Einbindung erfolgt dann nach folgendem Muster:

<?xml version="1.0" encoding="iso-8859-1"?>

<!DOCTYPE Kurs SYSTEM "kurs.dtd">

<Kurs>
  ...
</Kurs>

Sie muss direkt nach dem XML-Prolog stehen. Beachte, dass der Name hinter DOCTYPE mit dem Namen des Wurzelelements des XML-Dokuments übereinstimmen muss. Mit dem Schlüsselwort SYSTEM wird hier festgelegt, dass die DTD nur auf dem lokalen System verwendet wird.

Eine DTD kann auch direkt in ein XML-Dokument eingebunden werden. Der folgende Ausschnitt zeigt, wie dies erfolgen kann.

<?xml version="1.0" encoding="iso-8859-1"?>

<!DOCTYPE Kurs [
<!ELEMENT Kurs (Fach, Typ, Stufe, Bezeichner, Unterricht, Lehrer, Schüler*)>
...
]>

<Kurs>
  ...
</Kurs>

Soll eine DTD öffentlich zugänglich gemacht werden, so verwendet man statt des Schlüsselworts SYSTEM das Schlüsselwort PUBLIC. Als Beispiel haben wir bereits die folgende Einbindung der DTD für XHTML kennen gelernt:

<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
                      "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html ...>
  ...
</html>

Die weiteren Angaben hinter dem Schlüsselwort PUBLIC dienen dazu, die DTD eindeutig identifizierbar zu machen.

X

Fehler melden

X

Suche