Die Möglichkeiten, die XML bietet, sind durch
die XML-Spezifikation vorgegeben. Darin ist die
Syntax für DTDs festgelegt. Allein der Name,
Dokumenttyp-Definition, verrät schon die Herkunft, nämlich die
Dokumentverarbeitung. Von dem Moment an als für XML
andere als die klassischen Anwendungen geplant wurden, war
abzusehen, dass die Ausdrucksmöglichkeiten der DTDs
nicht ausreichen. DTDs können nur
die Struktur
von Elementen eines Datensatzes festlegen. Sie können aber keine
Einschränkungen für den Inhalt von Elementen
machen. Worin die Schwäche besteht, sollen folgende Beispiele erläutern. Sie
zeigen verschiedene Wege, in ein Element namens datum eine Tagangabe zu schreiben.
<datum>1.2.2000</datum> <datum>1. Feb. 2000</datum> <datum>01.02.2000</datum>
Es ist leicht einzusehen, dass diese unterschiedliche Schreibweise für ein Programm, das damit umgehen muss, eine Hürde darstellt. Eine DTD kann jedoch keine Schreibweise zwingend vorgegeben. Auch die in einer DTD mögliche Aufteilung in Tag, Monat, Jahr, wie in folgendem Beispiel zu sehen, ist keine Lösung.
<datum><tag>01</tag><monat>02</monat> <jahr>2000</jahr></datum>
Hier besteht immer noch die Möglichkeit, Felder leer zu
lassen oder sie mit Buchstaben zu füllen. Kurz gesagt: Es fehlt
die Möglichkeit, Datentypen für XML zu
definieren. Die (zurzeit) zweiteilige Spezifikation für
XML Schema behebt diesen
MissstandWir dachten eigentlich, dass das Akronym
DSSSL einzigartig in der Häufung des Buchstabens
s
bliebe. Die neue deutsche Schreibweise hat uns eines
Besseren belehrt.. Im ersten
Teil, XML Schema Part 1: Structures
, geht es um die
Strukturierung von Instanzen und im zweiten, XML
Schema Part 2: Datatypes
, um die Datentypen. Es gibt sogar
einen Teil 0
, der eine Einführung enthält.
Mit Hilfe einer Schema-Definition lässt sich das obige Problem des Datums nun einfach lösen:
<element name="datumA" type="date">
Hier wird ein neues Element namens datumA deklariert, dessen Typ date ist. Dabei handelt es sich um einen vordefinierten Typ, der in Form JJJJ-MM-TT in der Instanz geschrieben werden muss. Vorsicht: Die obige Zeile ist nicht ein Ausschnitt aus einem Dokument, sondern aus einem Schema. Er entspricht etwa folgender Deklaration in einer DTD:
<!ELEMENT datumA date>
In einer DTD stünde anstelle von date jedoch bestenfalls #PCDATA. Das Element in der Instanz sieht so aus:
<datumA>1967-09-08</datumA>
Neben eingebauten Datentypen, die sich in
primitive
und abgeleitete
untergliedern (zum
Beispiel date, integer, string,
boolean), lassen sich auch neue Typen
zusammenbauen. Ein solcher ist im folgenden Listing zu
sehen:
<!-- Typdefinition --> <type name="datumstyp"> <element name="tag" type="integer" minInclusive="1" maxInclusive="31"/> <element name="monat" type="integer" minInclusive="1" maxInclusive="12"/> <element name="jahr" type="positive-integer"/> </type> <!-- Elementdeklaration --> <element name="datumB" type="datumstyp">
Der so deklarierte Elementtyp datumB nimmt dann in der Instanz zum Beispiel die Form des nachfolgenden Elements an:
<datumB><tag>8</tag><monat>9</monat><jahr>1967</jahr></datumB>
Dabei ist gewährleistet, dass Tage und Monate im angegebenen Rahmen liegen. Unsinnige Daten, wie beispielsweise der 31. Februar lassen sich damit allerdings immer noch nicht vermeiden.
Die Software-Unterstützung für XML Schemata ist noch nicht nennenswert. Insbesondere bei Endanwender-Produkten sieht es momentan sehr schlecht aus, was fraglos auch an dem Status der Spezifikation liegt: XML Schemata sind immer noch im Entwurfsstadium. Für Entwickler gibt es aber bereits erste schema-taugliche Parser. Da die laufenden Entwicklungsschritte auch hier kürzer sind als die Lebensdauer eines gedruckten Buches, müssen wir einmal mehr auf aktuelle Informationen im Web verweisen.
Eine schlichte Empfehlung für den sofortigen Einsatz von XML auch in den Fällen, in denen eine Datentypisierung erforderlich ist: Verwenden Sie DTDs für die Festlegungen, die sich mit DTDs treffen lassen und legen Sie darüber hinaus gehende Konventionen informell (etwa in einer Dokumentation) und natürlich in einem verarbeitenden Programm fest. Nur weil es keinen Standard zur Typisierung gibt, heißt es ja nicht, dass man auf Typisierung verzichten muss. Der Preis für diese Vorgehensweise ist natürlich, dass so erstellte Software nach Erscheinen von und beim Umstieg auf XML Schema aktualisiert werden muss. Jedoch ist es in den meisten XML-Anwendungen doch so, dass nicht die Software den wertvollen Teil darstellt, sondern die Daten. Und diese bleiben auch nach Einführung von XML Schemata unverändert.