Verschachtelungen, Wiederholung, Attribute#
Lernziel#
Sie lernen nun wichtige Strukturen für die Schema-Definitionen kennen: Verschachtelte Elemente, Wiederholungen und Attribute.
Handlungsanweisungen#
- Aufgaben:
1. Erstellen Sie eine Schema-Datei für folgende XML-Datei:
<?xml version="1.0" encoding="ISO-8859-1"?> <reise-datenbank xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="reise.xsd"> <reise art="Fahrrad-Tour"> <veranstalter>Fahr-away</veranstalter> <ziel>Polen</ziel> </reise> <reise art="Wanderung"> <veranstalter>BleibHier</veranstalter> <ziel>Deutschland</ziel> </reise> </reise-datenbank>
Verschachtelte Elemente#
Sie lernen nun, wie Sie verschachtelte Elemente prüfen können. Schauen wir uns die verschachtelte XML-Datei an:
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<artikel_db xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:noNamespaceSchemaLocation="artikel_db.xsd">
4 <artikel>
5 <titel>Der Titel</titel>
6 <autor>Heinz Becker</autor>
7 <inhalt>Hier irgendein Inhalt.</inhalt>
8 </artikel>
9 </artikel_db>
Wie können wir nun die XSD-Datei dazu erstellen?
1<?xml version="1.0" encoding="UTF-8"?>
2<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
3 <xs:element name="artikel_db" type="artikel_db_type" />
4</xs:schema>
- Schritt 1: Das Wurzel-Element artikel_db kann mehrere Kind-Elemente
artikel enthalten.
Diesen Sachverhalt können wir nun definieren. Mit Schema-Definitionen ist es nicht so einfach wie in einer DTD. Wie kann das Element artikel als Kindelement von artikel_db definiert werden? Wir definieren dafür einen neuen Typ artikel_db_type als Datentyp (Zeilen 4-8). Darin wieder enthalten ein Abschnitt für das Kind-Element artikel (Zeile 6).
1<?xml version="1.0" encoding="UTF-8"?>
2<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
3 <xs:element name="artikel_db" type="artikel_db_type" />
4 <xs:complexType name="artikel_db_type">
5 <xs:sequence>
6 <xs:element name="artikel" type="artikel_typ" />
7 </xs:sequence>
8 </xs:complexType>
9 </xs:schema>
2. Schritt: Wir definieren nun den Typ artikel_db_type: Dieser Typ beinhaltet das Element artikel. Das Element artikel enthält wiederum Unterelemente, die in einem extra Typ definiert werden müssen. Der Name wird im Attribut type festglegt.
1<?xml version="1.0" encoding="UTF-8"?>
2<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
3 <xs:element name="artikel_db" type="artikel_db_type" />
4 <xs:complexType name="artikel_db_type">
5 <xs:sequence>
6 <xs:element name="artikel" type="artikel_typ" />
7 </xs:sequence>
8 </xs:complexType>
9
10 <xs:complexType name="artikel_typ">
11 <xs:sequence>
12 <xs:element name="titel" type="xs:string" />
13 <xs:element name="autor" type="xs:string" />
14 <xs:element name="inhalt" type="xs:string" />
15 </xs:sequence>
16 </xs:complexType>
17</xs:schema>
3. Schritt: Nun muss noch der Aufbau eines artikel_typ definiert werden. Ein Artikel soll ja aus den drei Kind-Elementen titel, autor und inhalt bestehen. Diese sind im artikel_typ aufgeführt und bestehen aus dem einfachen Datentyp einer Zeichenkette.
Wiederholungen#
Wenn die XML-Datei mehrere Artikel enthalten soll, so muss das auch in der Schema-Datei definiert werden, da die obige Schema-Definition nur genau ein artikel-Element zulässt. Die modifizierte XSD-Datei, sollten sie weitere Datensätze einfügen können.
1<?xml version="1.0" encoding="UTF-8"?>
2<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
3 <xs:element name="artikel_db" type="artikel_db_type" />
4 <xs:complexType name="artikel_db_type">
5 <xs:sequence>
6 <xs:element name="artikel" type="artikel_typ"
7 minOccurs="1" maxOccurs="10" />
8 </xs:sequence>
9 </xs:complexType>
10
11 <xs:complexType name="artikel_typ">
12 <xs:sequence>
13 <xs:element name="titel" type="xs:string" />
14 <xs:element name="autor" type="xs:string" />
15 <xs:element name="inhalt" type="xs:string" />
16 </xs:sequence>
17 </xs:complexType>
18</xs:schema>
In der Schema-Datei müssen wir angeben, ob und wie viele Wiederholungen des artikel-Elements zugelassen sind. Das geht mit: minOccurs=“1“ und maxOccurs=“10“ (Zeile 7). Für beliebig viele Einträge verwenden Sie maxOccurs=“unbounded“
Attribute#
Die XML-Struktur wird nun ein Attribut format erhalten. Wie definieren wir nun Attribute in der XSD (Siehe Zeile 17)?
1<?xml version="1.0" encoding="UTF-8"?>
2<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
3 <xs:element name="artikel_db" type="artikel_db_type" />
4 <xs:complexType name="artikel_db_type">
5 <xs:sequence>
6 <xs:element name="artikel" type="artikel_typ"
7 minOccurs="1" maxOccurs="10" />
8 </xs:sequence>
9 </xs:complexType>
10
11 <xs:complexType name="artikel_typ">
12 <xs:sequence>
13 <xs:element name="titel" type="xs:string" />
14 <xs:element name="autor" type="xs:string" />
15 <xs:element name="inhalt" type="xs:string" />
16 </xs:sequence>
17 <xs:attribute name="format" type="xs:string"/>
18 </xs:complexType>
19</xs:schema>