...spezifiziert den Teil der XML Schema Definitionssprache, der die Möglichkeiten zur Beschreibung der Struktur und zur Eingrenzung des Inhalts von XML 1.0 Dokumenten bietet
(http://www.w3.org/TR/xmlschema-1/)
2. Der Aufbau eines Schemas
Die XML Syntax wird in den folgenden Beispielen schnell wieder zu erkennen sein.
Ein XML Schema Dokument wird üblich mit dem Datei Suffix .XSD (XML-Schema Definition) abgespeichert.
Namensräume in XML Schema:
Da es sich bei XML Schema um eine XML konforme Sprache handelt, beginnt auch jedes Schema mit der für XML typischen Einführungszeile
<?xml version="1.0" encoding="iso-8859-1"?>.
Namensräume werden nach xmlns: definiert. Die dann folgenden Anweisungen wie zum Beispiel Attribute oder Elemente usw. stehen zwischen <xs:schema> sowie </xs:Schema>. Gleichzeitig wirkt dieser tag als Wurzelelement des Schemas.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
.
.
</xs:schema>
|
3. Elemente in XML Schema
Struktur eines XML Elements:
Jedes XML Dokument und damit auch jedes XML Schema besteht aus einer Folge von tags mit folgendem Aufbau:
Start tag: <Elementname1 Attributname1="Attributwert1">
Leeres tag = Inhalt von Element1: <Elementname2/>
Schließendes tag: </Elementname1>
|
Leere tags werden durch ein "/" abgeschlossen. Elemente können beliebig tief geschachtelt werden.
Definition eines Elementtyps complexType:
Das XML Schema Element complexType dient zur Definition eines Elementtyps, welcher weitere Unterelemente beinhalten kann.
Beispiel: Die Darstellung einer Adresse in einem XML Dokument:
<xs:element name="adresse">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="strasse" type="xs:string"/>
<xs:element name="plz" type="xs:integer"/>
<xs:element name="ort" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
|
In der ersten Zeile wird das Element "Adresse" deklariert, einen Elementtyp besitzt es nicht.
Die complextype Definition enthält in diesem Fall vier weitere Element Definitionen.
Die Reihenfolge der Elemente ist festgelegt (sequence). Die inneren Elemente sind vom Datentyp xs:string bzw xs:integer, dabei handelt es sich um in XML Schema vordefinierte einfache Datentypen (built-in datatypes).
Alternativ zum sequence-tag sind die tags all (alle Subelemente müssen vorkommen oder gar keins, Reihenfolge egal) sowie choice (genau eines der Subelement muss verwendet werden). Darüberhinaus besteht die Möglichkeit, Elemente durch ein umschließendes group-tag zu Gruppen zusammenzufassen.
<xs:element name="adresse" type="Address"/>
<xs:complexType name="Address">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="strasse" type="xs:string"/>
<xs:element name="plz" type="xs:integer"/>
<xs:element name="ort" type="xs:string"/>
</xs:sequence>
</xs:complexType>
|
Ein einmal definierter Elementtyp kann innerhalb eines Schemas beliebig oft zur Deklaration eines Elementes verwendet werden, wobei die Definition im Dokument unterhalb der Deklarationen stehen muss.
Deklaration von Elementen element:
Zur Deklaration eines Elements in XML Schema reicht, wie im obigen Beispiel gesehen, die Angabe des Namens und eines Typs als Attribute des element Elements:
<xs:element name="name" type="xs:string"/>
|
Durch die Attribute minOccurs und maxOccurs kann zusätzlich angegeben werden, wie oft das Element mindestens bzw. maximal hintereinander im XML Dokument erscheinen darf. Der Defaultwert ist jeweils 1. Zusätzlich gibt es hier noch den Wert "unbounded", der angibt das beliebig viele <name> tags verwendet werden können.
Wird das Attribut type weggelassen, folgt die Typdefinition als complexType oder simpleType unmittelbar innerhalb des element-tags.
4. Deklaration von Attributen:
Attributdeklarationen erscheinen innerhalb einer Elementbeschreibung am Schluss.
Beispiel für eine Attributdeklaration:
<xs:element name="adresse">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="strasse" type="xs:string"/>
<xs:element name="plz" type="xs:integer"/>
<xs:element name="ort" type="xs:string"/>
</xs:sequence>
<xs:attribute name="nr" type="xs:integer"/>
</xs:complexType>
</xs:element>
|
Durch Angabe weiterer Attribute innerhalb des attribute-Element lassen sich weitere Eigenschaften des Attributs festlegen (Optionalität, Defaultwerte, fixe Werte, etc).
<xs:attribute name="nr" type="xs:integer" default="0"/>
-> Anfagswert bei "0"
<xs:attribute name="nr" type="xs:integer" fixed="10"/>
-> fester Wert bei "10"
<xs:attribute name="nr" type="xs:integer" use="optional"/>
-> optionaler Gebrauch
<xs:attribute name="nr" type="xs:integer" use="required"/>
-> wird benötigt
|
Optional zu den Standarddatentypen könne hier auch eigene Datentypen stehen wie zum Beispiel
complexType.