XML, ehemals als Standard für strukturierte Dokumente (SGML) entwickelt, wurde rasch für den Datenaustausch entdeckt.
Um es den Entwicklern nicht allzuschwer zu machen, besann man sich darauf zwischen der "Wohlgeformtheit" und der Validität eines Dokuments zu unterscheiden. Ein XML Dokument muß in erster Linie snytaktischen Regeln folgen, um wohlgeformt zu sein. Möchte man darüber hinaus Festlegungen treffen, wie die Struktur eines XML Dokuments aussieht, welche Datentypen enthalten sein dürfen, muß man es gegen eine DTD (Document Type Definition) prüfen lassen. Lange Zeit war der Weg über eine DTD der einzige Weg einen standardisierten Mechanismus zur Beschreibung der Struktur der Daten zur Verfügung zu stellen. Allerdings hat ein DTD gravierende Mängel:
Zunächst fehlt es daran Elementen und Attributen Datentypen zuweisen zu können, sowie der Eigenschaft nicht selbst aus XML Syntax zu bestehen und der fehlenden Kompabilität zu namespaces.
Mit dem neuen Standard XML Schema (seit 2.5.2001) sollten diese Mängel beseitigt werden. Oben genannte Mängel, soweit vorweg, sind tatsächlich auch behoben worden.
Sehen wir uns die Merkmale von DTD und XML Schema genauer an.
Document Type Definitions (DTDs):
DTDs beschreibt einen Strukturplan für ein XML Dokument.
DTDs hält XML Dokumente konsistent.
DTDs kann von mehreren XML Dokumenten gemeinsam benutzt werden.
DTDs unterstützt das komplette XML Vokabular.
DTDs sind auf ein DTD pro XML Dokument beschränkt.
XML Schema:
Wie ein DTD kann das Schema die Struktur eines XML Dokuments beschreiben.
Schemas nutzen XMl Syntax und können somit auch geparst werden.
Schemas unterstützen Datentypen wie integer, string oder boolean.Außerdem können in XML Schema auch andere Datentypen definiert werden.
Schemas erlauben globale Elemente oder Gruppen von Elementen, indem alle Elemente genau z. B. einmal enthalten sein müssen (all), die Elemente mindestens einmal, aber auch öfter auftreten können (sequence) oder einer Auswahl aus mehreren Möglichkeiten (choice). Sowie auch lokale Elemente (Elemente, die eine spezielle Bedeutung im Kontext erhalten.
Übrigens XML Schema sowie der Interims Standard XDR wird vom IE 5.5 unterstützt.
Sehen wir uns zum Schluß noch mal die unterschiedliche Arten an Hand eines Beispiels an:
Zunächst das zurgunde liegende XML FIle:
<?xml version="1.0"?> <BookCatalogue xmlns="http://www.ppedv.de/schema/BookCatalogue" xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" xsi:schemaLocation= "http://http://www.ppedv.de/schema/BookCatalogue/BookCatalogue.xsd"> <Book> <Title>Computernetzwerke</Title> <Author>Tanenbaum</Author> <Date>1999</Date> <ISBN>3-8272-9568-8</ISBN> <Publisher>Prentice Hall</Publisher> </Book> <Book> <Title>1984</Title> <Author>George Orwell</Author> <Date>1995</Date> <ISBN>3-548-22562-4</ISBN> <Publisher>Ullstein</Publisher> </Book> </BookCatalogue> |
Das zugehörige DTD könnte wie folgt aussehen:
<!?Ein BookCatalogue enthält ein oder mehrere Books --> <!ELEMENT BookCatalogue (Book)*> <!ELEMENT Book (Title, Author, Date, ISBN, Publisher)> <!ELEMENT Title (#PCDATA)> <!ELEMENT Author (#PCDATA)> <!ELEMENT Date (#PCDATA)> <!ELEMENT ISBN (#PCDATA)> <!ELEMENT Publisher (#PCDATA)> |
Das passende Schema könnte so aussehen:
<?xml version="1.0" encoding="UTF-8"?> <!--W3C Schema generated by XML Spy v3.5 NT (http://www.xmlspy.com)--> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" elementFormDefault="qualified"> <xsd:element name="Author" type="xsd:string"/> <xsd:element name="Book"> <xsd:complexType> <xsd:sequence> <xsd:element ref="Title"/> <xsd:element ref="Author"/> <xsd:element ref="Date"/> <xsd:element ref="ISBN"/> <xsd:element ref="Publisher"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="BookCatalogue"> <xsd:complexType> <xsd:sequence> <xsd:element ref="Book" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="Date"> <xsd:simpleType> <xsd:restriction base="xsd:int"> <xsd:enumeration value="1995"/> <xsd:enumeration value="1999"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name="ISBN"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="3-548-22562-4"/> <xsd:enumeration value="3-8272-9568-8"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name="Publisher" type="xsd:string"/> <xsd:element name="Title"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="1984"/> <xsd:enumeration value="Computernetzwerke"/> </xsd:restriction> </xsd:simpleType> </xsd:element> </xsd:schema> |