« Übersicht: Schema

Verschachtelungen, Wiederholung, Attribute#

../../_images/mosaik004-potsdam.jpg

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>