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.

Bookmark setzen... These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Bloglines
  • MisterWong
  • MySpace
  • Reddit
  • SEOigg
  • Technorati
  • TwitThis
  • Y!GG
  • Google Bookmarks

Weiterführende Links: