Was ist XML Schema? – Einführung in XML Schema

Was ist XML Schema? - Einführung in XML SchemaXML Schema bietet einen neuen Ansatz, um auf DTDs fast komplett
zu verzichten. Wie und warum das geht, erfahren Sie in diesem Artikel.

Das Prinzip von DTDs ist eigentlich klar: Sie sollen die verwendeten
Elemente in einem XML Dokument beschreiben. Doch dabei kann es Probleme
geben.
Es ist für viele Softwarefirmen und -entwickler recht ungeschickt,
dass die DTDs eine eigene Syntax (Schreibweise) haben. Entwickler
müssen diese Syntax zum einen erst erlernen und zum anderen spezielle Parser
für DTDs entwickeln (Parser ermitteln die Informationen aus den DTDs).
Die Entwickler von XML Schema haben sich gesagt, dass die Definition
der Elemente über XML Schema im Rahmen der XML Syntax bleiben
soll.
Ein weiteres Argument ist, dass DTDs mit ihren vier Datentypen zu
sehr begrenzt sind und so die Stärken von XML, nämlich
die Flexibilität, ungemein schwächen.
Mit XML Schema ist es möglich eine Vielzahl von Datentypen
zu wählen und gar neue zu definieren. So können Sie über
XML Schema Ihrer Postleitzahl die Eigenschaft geben, dass zum einen
nur Zahlen und desweiteren maximal 5 Ziffern eingegeben werden
dürfen.
Es fällt auf, dass die Argumente sehr genau treffen. Unter der
Schirmherrschaft von Microsoft hat sich eine Gruppe von Entwicklern
zusammengefunden, XML Schema entstand. Das W3C hat XML Schema dann 2001
auch zum offiziellen Standard gemacht.

Von DTDs zu XML Schema

Wie oben gezeigt wurde, haben DTDs sehr viele Schwächen, die
bei der datenbankorientierten Anwendung von XML schnell Probleme
bereiten. Das folgende Beispiel zeigt im Kleinen den Schritt von
DTDs zu XML Schemas.
Ursprünglich sieht ein einfaches XML Dokument mit Verweis
auf die entsprechende DTD so aus.

artikel.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE artikel SYSTEM "artikel.dtd">
<artikel>
<titel>Der Titel</titel>
<teaser>Der Teaser</teaser>
<inhalt>Der Inhalt</inhalt>
</artikel>

artikel.dtd
<!ELEMENT artikel (titel, teaser, inhalt )>
<!ELEMENT titel (#PCDATA)>
<!ELEMENT teaser (#PCDATA)>
<!ELEMENT inhalt (#PCDATA)>

Das entsprechende XML Schema sieht, wie zu erwarten, einem XML Dokument
sehr ähnlich. XML Schemas haben die Dateiendung *.xsd. Diese
Endung steht für XML Schema Definition.

artikel.xsd
<?xml version="1.0"encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="artikel">
    <xs:complexType>
       <xs:sequence>
         <xs:element
name="titel" type="xs:string"/>

         <xs:element
name="teaser" type="xs:string"/>

         <xs:element
name="inhalt" type="xs:string"/>

       </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Auf den ersten Blick wirkt das Schema sehr sauber strukturiert
und geordnet. Es stellen sich jedoch einige Fragen.
In der ersten Zeile des XML Schemas wird der Namespace für
die Elemente von XML Schema definiert. D.h. es wird auf die W3C-
Definition von XMLSchema verwiesen, damit der Parser, also in dem
Fall der Browser, erkennt, wo die XML Schema-Elemente definiert sind.

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

Diese Namespace-Definition umschließt das gesamte Dokument
bzw. das gesamte Schema. Es ist wie bei "normalem" XML
das Wurzelelement. Der verwendete Namespace wird nach "xmlns:"
definiert. Der Namespace ist wichtig, damit es zu keinen Konflikten
z.B. von Elementen mit dem gleichen Namen kommt.
Nach dieser Definition wird das Wurzelelement des XML-Dokumentes
"artikel" angesprochen.

<xs:element name="artikel">
</xs:element>

Der Name des Elements steht hierbei im name=""-Attribut.

Bis zu dieser Zeile ist noch alles klar. Doch die folgenden Anweisungen
bergen einige Fragen.
Das Element "artikel" ist ein Wurzelelement mit mehreren
Unterelementen. Auch das muss wie in der DTD im XML Schema angegeben
werden. Genau dafür sorgt

<xs:complexType>
</xs:complexType>

Die anderen Elemente werden als "einfache" Elemente bezeichnet,
da diese nicht weiter ineinander verschachtelt sind. Diesen Elementen
wird ein Datentyp angegeben, der angibt, welche Daten in ihm
gespeichert werden können. In unserem Beispiel sind es einfache
Strings, also Zeichenketten. Der Datentyp lautet "xs:string".

<xs:sequence>

 <xs:element name="titel" type="xs:string"/>
 <xs:element name="teaser" type="xs:string"/>
 <xs:element name="inhalt" type="xs:string"/>
</xs:sequence>

Die am meisten verwendeten Datentypen:

xs:string
Für normale Zeichenketten, also Texte

xs:integer
Für Ganzzahlen wie 1234, keine Fließkommazahlen.

xs:decimal
Datentyp für Dezimalzahlen, also Fließkommazahlen,
wie 0.123

xs:boolean
Ein Boolscher Wert, d.h. es gibt nur "wahr" oder
"falsch" bzw. "0" oder "1".

xs:date
Ein Datum im Format Jahr-Monat-Tag

xs:time
Eine Zeitangabe.

Nachdem das Schema definiert wurde, muss es noch in das XML Dokument
eingebunden werden. Bei DTDs wird dies über die Anweisung
<!DOCTYPE artikel SYSTEM "artikel.dtd">
gemacht.
XML Schemas werden mit dieser Anweisung in ein XML Dokument eingebunden:

<artikel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="artikel.xsd">

Wie Sie sehen, wird das Schema über das Wurzelelement "artikel"
eingebunden. Wichtig ist, dass die Adresse zu dem Schema richtig
über xsi:noNamespaceSchemaLocation="artikel.xsd"
angegeben wird.Das XML Dokument "artikel.xml" sieht jetzt folglich
so aus:

artikel.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<artikel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="artikel.xsd">
<titel>Der Titel</titel>
<teaser>Der Teaser</teaser>
<inhalt>Der Inhalt</inhalt>
</artikel>

Wenn Sie XML Schemas im Browser "anschauen" wollen, sehen
Sie wie bei normalen XML Dokumenten nur den Elementbaum. Die Unterstützung
von XML Schema als DTD-Ersatz ist in die meisten Parser der Browser
noch nicht integriert.

XML Schema ist richtungsweisend. Die Entwicklung von XML kam mit
den DTDs ins Stocken. XML Schema fördert die Weiterentwicklung
von XML dagegen ungemein.

This entry was posted in XML. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *