Deklaration von Elementen in XSD
Das folgende Beispiel eines einfachen XML-Dokuments mit DTD und entsprechender XSD zeigt das Grundprinzip von XSD als Validierungssprache:
artikel.xml
<?xml version="1.0"?>
<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)>
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>
Das <xs:schema>-Element umschließt das gesamte XSD-Schema. Es ist das Root-Element des Schemas.
Mit dem XSD-Element <xs:element> werden die Elemente des XML-Dokuments deklariert, im Beispiel das Root-Element <artikel> sowie die Unterelemente <titel>, <teaser> und <inhalt>:
<xs:element name="artikel">
...
<xs:element name="titel" type="xs:string"/>
<xs:element name="teaser" type="xs:string"/>
<xs:element name="inhalt" type="xs:string"/>
...
</xs:element>
Der Name des deklarierten Elements steht dabei im name-Attribut.
Das Element <artikel> ist ein Element mit mehreren Unterelementen. Auch das muss im XSD angegeben werden. Dafür sorgt das in der Hierarchie folgende Element <xs:complexType>:
<xs:element name="artikel">
<xs:complexType>
...
</xs:complexType>
</xs:element>
In der XSD-Terminologie ist jedes Element, das weitere Elemente enthält oder Attribute hat, ein <complexType>. Alle anderen Elemente gelten als <simpleType>.
<xs:sequence> als weiteres XSD-Element innerhalb von <xs:complexType> gibt an, welche Reihenfolge die Unterelemente von <artikel> haben sollen. In unserem Beispiel ist das eine genaue Folge (sequence):
<xs:element name="artikel">
<xs:complexType>
<xs:sequence>
...
</xs:sequence>
</xs:complexType>
</xs:element>
Innerhalb des <xs:sequence>-Elements erfolgt nun endlich die Deklaration der Unterelemente von <artikel>, also <titel>, <teaser> und <inhalt>:
<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>
Da es sich bei <titel>, <teaser> und <inhalt> um einfache Elemente, also Elemente ohne Kindelemente oder Attribute handelt, erhalten sie keine detaillierte Typangabe durch <xs:complexType>. Bei ihnen erfolgt die Typangabe über das type-Attribut. Der Datentyp dieser Elemente ist »xs:string«, also eine Zeichenkette.
Das XSD-Element <xs:simpleType> wird bei einfachen Elementen nur dann verwendet, wenn sie genauer definiert werden sollen als es über das type-Attribut möglich ist; mehr dazu siehe weiter unten im Abschnitt Benutzerdefinierte Datentypen in XSD.


