Articles

Ein XSD-Beispiel

In diesem Kapitel wird gezeigt, wie ein XML-Schema geschrieben wird. Sie werden auch lernen, dass ein Schema auf verschiedene Arten geschrieben werden kann.

Ein XML-Dokument

Werfen wir einen Blick auf dieses XML-Dokument namens „shiporder.xml“:

Erstellen Sie ein XML-Schema

Jetzt möchten wir ein Schema für das obige XML-Dokument erstellen.

Wir beginnen mit dem Öffnen einer neuen Datei, die wir „shiporder.xsd“. Um das Schema zu erstellen, können wir einfach der Struktur im XML-Dokument folgen und jedes Element so definieren, wie wir es finden. Wir beginnen mit der Standard-XML-Deklaration, gefolgt vom xs:schema-Element, das ein Schema definiert:

<?xml version=“1.0″ encoding=“UTF-8″ ?>
<xs:schema xmlns:xs=“http://www.w3.org/2001/XMLSchema“>

</xs:schema>

Im obigen Schema verwenden wir den Standardnamespace (xs), und der diesem Namespace zugeordnete URI ist die Definition der Schemasprache mit dem Standardwert http://www.w3.org/2001/XMLSchema.

Als nächstes müssen wir das Element „shiporder“ definieren. Dieses Element hat ein Attribut und enthält andere Elemente, daher betrachten wir es als komplexen Typ. Die untergeordneten Elemente des „shiporder“ -Elements sind von einem xs:sequence-Element umgeben, das eine geordnete Sequenz von Unterelementen definiert:

<xs:element name=“shiporder“>
<xs:complexType>
<xs:sequence>

</xs:sequence>
</xs:complexType>
</xs:element>

Then we have to define the „orderperson“ element as a simple type (because it does not contain any attributes or other elements). The type (xs:string) ist mit dem Namespace-Präfix mit XML-Schema, das eine vordefinierte Schema-Datentyp gibt zugeordnet vorangestellt:

<xs:element name=“orderperson“ type=“xs:string“/>

Als nächstes müssen wir zwei Elemente definieren, die vom komplexen Typ sind: „shipto“ und „item“. Wir beginnen mit der Definition des „shipto“ -Elements:

Mit Schemas können wir die Anzahl der möglichen Vorkommen für ein Element mit den Attributen maxOccurs und minOccurs definieren. maxOccurs gibt die maximale Anzahl von Vorkommen für ein Element an und minOccurs gibt die minimale Anzahl von Vorkommen für ein Element an. Der Standardwert für maxOccurs und minOccurs ist 1!

Jetzt können wir das Element „item“ definieren. Dieses Element kann innerhalb eines „Shiporder“ -Elements mehrmals vorkommen. Dies wird angegeben, indem das Attribut maxOccurs des Elements „item“ auf „unbounded“ gesetzt wird, was bedeutet, dass das Element „item“ so oft vorkommen kann, wie der Autor dies wünscht. Beachten Sie, dass das Element „Notiz“ optional ist. Wir haben dies angegeben, indem wir das Attribut minOccurs auf Null gesetzt haben:

Wir können jetzt das Attribut des Elements „shiporder“ deklarieren. Da dies ein erforderliches Attribut ist, geben wir use=“required“ an.

Hinweis: Die Attributdeklarationen müssen immer an letzter Stelle stehen:

<xs:attribute name=“orderid“ type=“xs:string“ use=“required“/>

Hier ist die vollständige Auflistung der Schemadatei mit dem Namen „shiporder.xsd“:

Schema aufteilen

Die bisherige Entwurfsmethode ist sehr einfach, kann aber bei komplexen Dokumenten schwierig zu lesen und zu pflegen sein.

Die nächste Entwurfsmethode basiert darauf, zuerst alle Elemente und Attribute zu definieren und dann mit dem ref-Attribut darauf zu verweisen.

Hier ist das neue Design der Schema-Datei („shiporder.xsd“):

Benannte Typen verwenden

Die dritte Entwurfsmethode definiert Klassen oder Typen, mit denen wir Elementdefinitionen wiederverwenden können. Dies geschieht, indem Sie die simpleTypes und complexTypes Elemente benennen und dann über das type Attribut des Elements auf sie verweisen.

Hier ist der dritte Entwurf der Schemadatei („shiporder.xsd“):

Das restriction-Element gibt an, dass der Datentyp von einem W3C XML Schema Namespace-Datentyp abgeleitet ist. Das folgende Fragment bedeutet also, dass der Wert des Elements oder Attributs ein Zeichenfolgenwert sein muss:

<xs:restriction base=“xs:string“>

The restriction element is more often used to apply restrictions to elements. Look at the following lines from the schema above:

<xs:simpleType name=“orderidtype“>
<xs:restriction base=“xs:string“>
<xs:pattern value=“{6}“/>
</xs:restriction>
</xs:simpleType>

Dies zeigt an, dass der Wert des Elements oder Attributs eine Zeichenfolge sein muss, genau sechs Zeichen hintereinander und diese Zeichen eine Zahl von 0 bis 9 sein müssen.