© aller Texte: msw 1999-2008
Was ist XML Schema?
XML Schema ist eine Weiterentwicklung der DTD. XML Schema bietet die Möglichkeit, den Datentyp eines XML-Tags genau anzugeben. Dabei kann man zwischen normalen Buchstaben, Zahlen und sogar zwischen verschiedenen Wertebereichen der Zahlen unterscheiden. Damit geht XML Schema weit über die DTD hinaus. XML Schema kann viel genauer den Inhalt eines Tags definieren.

Aufbau von XML Schema

XML Schema wird ebenfalls vom W3-Konsortium standardisiert und wurde am 02.05.2001 als Standard verabschiedet. Im Folgenden sehen wir uns eine erste Schema-Datei an. Eine einfache XML-Datei lautet:

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

<Buch>

XML-Das Einsteigerseminar

</Buch>


Die dazugehörige XML-Schema-Datei sieht folgendermaßen aus:

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

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:element name="Buch" type="xsd:string">

</xsd:element>

</xsd:schema>

Diese Schema-Datei macht im Prinzip genau das Gleiche wie eine DTD innerhalb der XML-Datei. Hier jedoch findet eine viel genauere Definition der Inhalte statt. Wir sehen uns Schritt für Schritt die Unterschiede an.

Jedes XML-Schema wird nicht in die XML-Datei geschrieben, sondern befindet sich in einer separaten Datei (ähnlich wie eine ausgelagerte DTD). Jede Schema-Datei trägt die Endung .xsd. Jede Schema-Datei ist wiederum eine XML-Datei, d.h., die Schema-Datei muss den Syntaxregeln von XML folgen. Daher wird auch jede Schema-Datei über das <?xml>-Tag eingeleitet.

Anschließend wird der Namensraum für das Schema festgelegt. Das Tag für XML-Schema ist <xsd:schema> und der Namensraum lautet:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

Anschließend beginnt die Definition der einzelnen Tags. Zuerst wird das Wurzelelement festgelegt:

<xsd:element name="Buch" type="xsd:string"/>

<xsd:element> definiert ein Element, das später als Tag im Code verwendet wird. Über das Attribut name wird der Name dieses Tags festgelegt (hier: Buch). Es handelt sich um das Wurzelelement. Gleichzeitig wird über das Attribut type der Inhaltstyp des Tags festgelegt. type="xsd:string" gibt an, dass der Inhalt nur ein Textstring sein darf, d.h., der Inhalt muss aus normalen Zeichen bestehen. Über das Attribut type können auch weitere Datentypen angegeben werden. Dies werden wir uns noch ansehen. Anschließend werden die beiden Tags noch beendet:

</xsd:element>

</xsd:schema>

Die Verbindung zwischen XML-Datei und Schema-Datei erfolgt über das Wurzelelement in der XML-Datei, indem eine Instanz der XSD-Datei erzeugt wird. Für das letzte Beispiel sieht die Verbindung folgendermaßen aus:

<Buch xmlns="http://www.xmlguru.de/buch"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.xmlguru.de/buch

http://www.xmlguru.de/buch/index.xsd">

<!-- Weitere XML-Code folgt -->

</Buch>

Der Code besteht aus nichts anderem als mehreren Namensraum-Attributen und der Pfadangabe zu der XSD-Datei. Zuerst wird ein Namensraum zum Tag <Buch> definiert (xmlns="http://www.xmlguru.de/buch") und anschließend folgt ein Namensraum für das Element xsi. Dies steht für XML-Schema Instance. Denn von der XSD-Datei wird eine Instanz, d.h. Ableitung erzeugt, die vom XML-Parser verwendet wird. Dazu muss das xsi-Element mit dem dazugehörigen Namensraum (http://www.w3.org/2001/XMLSchema-instance) erstellt werden. Abschließend wird über schemaLocation der genaue Pfad zu der XSD-Datei angegeben. Es wird zuerst der Namensraum angegeben (http://www.xmlguru.de/buch) und anschließend der Pfad zur XSD-Datei.

Da im Prinzip für das <Buch>-Tag kein Namensraum notwendig ist, kann auch auf diesen verzichtet werden. Die zweite Möglichkeit der Einbindung ist etwas übersichtlicher:

<Buch xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:noNamespaceSchemaLocation="http://www.xmlguru.de/buch/index.xsd">

<!-- Weitere XML-Code folgt -->

</Buch>

Zuerst wird der Namensraum für das xsi-Element erstellt. Anschließend kommt die Neuerung:

xsi:noNamespaceSchemaLocation="http://www.xmlguru.de/buch/index.xsd">

noNamespaceSchemaLocation gibt an, dass kein spezieller Namensraum definiert wird, sondern gleich der Pfad zur XSD-Datei angegeben wird.

Weitere Datentypen

Im obigen Beispiel wurde der Datentyp string für das Tag <Buch> festegelegt:

<xsd:element name="Buch" type="xsd:string"/>

XML Schema bietet die Möglcihekiet für type weietren Dartentypen anzugeben, die den iNhalt dieses Tags angeben. Beispielsweise:

Typ

Inhalt

Bemerkung

anyType

Jeder nachfolgende Datentyp

Oberster Datentyp, der jeden Datentyp enthalten kann

date

Datum

Beispiel: 2001-10-10

Darstellung in der Form Jahr-Monat-Tag

time

Uhrzeit

Beispiel: 13:20:00-05:00

Die Angabe erfolgt über Stunde:Minute:Sekunde, anschließend folgt eine Angabe, um wie viel Stunden und Minuten die Uhrzeit sich hinter der Weltzeit UTC befindet (oder davor)

dateTime

Kombination aus den Angaben Datum und Uhrzeit

Beispiel:

2002-05-31T13:20:00-05:00

boolean

true oder false

Der Datentyp ist entweder wahr oder falsch

base64Binary

Base64-codierte Binärdaten

Binäre Oktets

hexBinary

Hexadezimal codierte Binärdaten

Ein binäres Oktet wird durch hexadezimale Zeichen codiert

anyURI

Uniform Resource Identifier

Stellt eine URI dar, z.B.: http://www.xmlguru.de

float

Fließkommazahl

Der Wertebereich liegt zwischen -2^24E-149 und 2^24E104

Links:

XML Schema Spezifikation

XML Schema Tutorial