Typenfrage
XML
Aufbau einer DTD
Eine DTD sieht allgemein so aus:
<!ELEMENT Name_der_Definition (Typ_des_Wurzel-Elements )> <!ELEMENT Name_des_Elements (Typ_des_Elements )>[…]
Die Definition eines Tags beginnt mit dem XML-Befehl <!ELEMENT, es folgt sein Name und in runden Klammern, welcher Art das Element ist. Besitzt es Unterelemente, stehen diese innerhalb der Klammer; ansonsten gibt man seinen Typ an: #PCDATA oder #CDATA. #PCDATA überprüft der Parser darauf, ob an dieser Stelle im XML-File eingegebene Daten den definierten Regeln entsprechen; bei Daten vom Typ #CDATA unterbleibt ein solcher Check.
Für die Namen von Definitionen und Tags dürfen Sie keine deutschen Umlaute und keines der in Kasten 1 aufgezählten Sonderzeichen verwenden.
Kasten 1: In Definitionen nicht erlaubt
Ä ä Ö ö Ü ü ß * + ! " § $ % & / ( ) = ? \ ~ # , . ; : ^ ° @ < > |
Elemente einer XML-Datei werden in einer Baumstruktur ineinander verschachtelt. So verwundert es nicht, dass es sich beim ersten in einer DTD definierten Element um das Root-(Wurzel-)Element des Dokuments handelt. Die DTD muss denselben Namen tragen wie das Root-Element; achten Sie daher besonders auf Groß- und Kleinschreibung: <ADRESSE> und <adresse> sind in XML zwei verschiedene Elemente. Da das Root-Element der Ursprung des Dokuments ist, darf es nur eines davon geben, alle anderen Elemente müssen sich vom Root-Element ableiten. Folgende DTD ist beispielsweise falsch, da ein Wurzel-Element fehlt:
<!DOCTYPE adressen [
<!ELEMENT datensatz(#PCDATA)>
<!ELEMENT info(#PCDATA)>
]>Definition einer Adressdatenbank
Am praktischen Beispiel lernt es sich besser, weshalb wir im Folgenden eine DTD für die in Heft 11/2001 vorgestellte XML-Adressdatenbank entwickeln. Ihren Aufbau zeigt Abbildung 1.
<adressen> fungiert als Root-Element der Datenbank, weshalb auch die DTD den Namen adressen bekommt und als interne DTD wie folgt beginnt:
<!DOCTYPE adressen [[…]
]>Unterhalb des Wurzel-Elements soll es beliebig viele Elemente <datensatz> geben. Jeder Datensatz wiederum enthält die Elemente <vorname>, <nachname>, <strasse>, <plz>, <ort> und <tel>. Die DTD drückt diese Abhängigkeit so aus, dass die Namen der untergeordneten Elemente in Klammern hinter den Namen der übergeordneten stehen. Auf die Vorgaben für das Wurzel-Element folgen die übrigen Elementdefinitionen (Listing 1). Durch die Einrückungen im Quelltext wird die Struktur der XML-Datei darin schon sehr schön sichtbar.
Listing 1
DTD für eine XML-Adressdatenbank
<!ELEMENT adressen(datensatz)>
<!ELEMENT datensatz(vorname,nachname,strasse,plz,ort,tel)+>
<!ELEMENT vorname(#PCDATA)?>
<!ELEMENT nachname(#PCDATA)>
<!ELEMENT strasse(#PCDATA)>
<!ELEMENT plz(#PCDATA)>
<!ELEMENT ort(#PCDATA)>
<!ELEMENT tel(#PCDATA)>
Für die Verwendung der Tags können Sie Regeln festlegen. Ein Pluszeichen vor der schließenden spitzen Klammer der Elementdefinition (wie im Beispiel bei <datensatz>) besagt, dass es beliebig viele, mindestens aber ein Element dieses Typs geben muss. Das Sternchen bedeutet, dass ein XML-Dokument beliebig viele Elemente dieser Art (auch keines) an der jeweiligen Stelle enthalten darf. Ein Fragezeichen wie beim Element <vorname> markiert ein optionales Element.



