Latest web development tutorials

XML-Schema-Instanz

Dieser Abschnitt zeigt Ihnen, wie ein XML-Schema zu schreiben. Sie werden auch verschiedene Möglichkeiten, zu lernen, das Schema zu schreiben.


XML-Dokumente

Lassen Sie uns dies zu betrachten, die so genannte "shiporder.xml" XML-Dokument:

<?xml version="1.0" encoding="ISO-8859-1"?>

<shiporder orderid="889923"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="shiporder.xsd">
<orderperson>John Smith</orderperson>
<shipto>
<name>Ola Nordmann</name>
<address>Langgt 23</address>
<city>4000 Stavanger</city>
<country>Norway</country>
</shipto>
<item>
<title>Empire Burlesque</title>
<note>Special Edition</note>
<quantity>1</quantity>
<price>10.90</price>
</item>
<item>
<title>Hide your heart</title>
<quantity>1</quantity>
<price>9.90</price>
</item>
</shiporder>

Das obige XML-Dokument Root-Element "ShipOrder", die das Attribut enthält, muss "orderid" von benannt werden. "ShipOrder" Element enthält drei verschiedene Kind-Elemente: "orderperson", "ShipTo" und "Position". "Item" Element erscheint zweimal, und es enthält einen "Titel", ein optionales "Anmerkung" Element, eine "Menge" und "Preis" Elemente.

Die obige Zeile xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance", sagte ein Schema basiert auf dem XML-Parser, dieses Dokument zu validieren. Die Zeile: xsi: noNamespaceSchemaLocation = "shiporder.xsd" Schema definiert die Position (in diesem Fall ist es "shiporder.xml" im gleichen Ordner).


Erstellen eines XML-Schemas

Nun müssen wir über ein Schema für das XML-Dokument zu erstellen.

Wir können durch das Öffnen einer neuen Datei zu starten und diese Datei den Namen "shiporder.xsd". Um ein Schema zu erstellen, müssen wir nur einfach die XML-Dokumentstruktur folgen, jedes Element der Definition dessen, was wir gefunden haben. Zuerst beginnen wir eine Standard-XML-Deklaration zu definieren:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
...
</xs:schema>

In dem obigen Schema, verwenden wir den Standard-Namespace (xs), Raum URI mit diesem Namen zugeordnet ist, die Schema-Sprache Definition (Schema Sprachdefinition), der Standardwert ist http://www.w3.org/ 2001 / XMLSchema.

Als nächstes müssen wir "ShipOrder" Element zu definieren. Dieses Element hat eine Eigenschaft, die andere Elemente enthält, daher wir es als komplexer Typ identifiziert. Unterelement "ShipOrder" Element xs: sequence Element umgeben definiert die Reihenfolge der Unterelemente:

<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
...
</xs:sequence>
</xs:complexType>
</xs:element>

Dann müssen wir auf "orderperson" Element definiert ist als ein einfacher Typ (weil es keine Attribute oder andere Elemente enthält). Typ (xs: string) wird durch die Namespacepräfix Bestimmungen dieser Namespace und Anweisungen vordefinierten Schema-Datentypen XML-Schema verknüpft mit dem Präfix:

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

Als nächstes muss ich die beiden Elemente als komplexer Typ definiert: "ShipTo" und "Position". Wir beginnen mit der Definition von "ShipTo" Element beginnt:

<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>

Mit dem Schema können wir die Anzahl der Zeiten definieren ein Element auftreten können maxOccurs und minOccurs Attribute verwenden. maxOccurs definieren eine maximale Anzahl von Elementen angezeigt werden, und minOccurs definiert die minimale Anzahl von Vorkommen eines Elements. Standard maxOccurs und minOccurs ist 1!

Jetzt können wir das "Element" Element definieren. Dieses Element kann mehrere Male innerhalb des "ShipOrder" Element erscheinen. Dies wird durch die "item" Element maxOccurs getan Attributwert auf "unbegrenzt" gesetzt zu erreichen, so dass "item" Element der Schöpfer oft erscheint wie gewünscht sein kann. Bitte beachten Sie, "note" Element ist optional. Wir haben minOccurs-Attribut dieses Elements wird auf 0 gesetzt auf:

<xs:element name="item" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string" minOccurs="0"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>

Wir können jetzt "ShipOrder" Attribut des Elements deklarieren. Da dies ein obligatorisches Attribut ist, verwenden wir angeben = "erforderlich".

Hinweis: Diese Eigenschaft muss am letzten deklariert werden:

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

Dies ist eine Liste von Dokumenten, die so genannte "shiporder.xsd" die Schemadatei:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
<xs:element name="orderperson" type="xs:string"/>
<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="item" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string" minOccurs="0"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="orderid" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>

</xs:schema>


Split-Schema

Vor dem Design-Methode ist sehr einfach, aber es ist schwer zu lesen und zu pflegen Dokumente sind komplex Shique.

Als nächstes wird in der ersten Definition aller Elemente und Attribute beschrieben auf dem Entwurfsverfahren basiert, und dann wird der ref ihnen beziehen verwenden zuzuschreiben.

Dieser neue Ansatz wird Schemadatei entworfen ( "shiporder.xsd"):

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<!-- definition of simple elements -->
<xs:element name="orderperson" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>

<!-- definition of attributes -->
<xs:attribute name="orderid" type="xs:string"/>

<!-- definition of complex elements -->
<xs:element name="shipto">
<xs:complexType>
<xs:sequence>
<xs:element ref="name"/>
<xs:element ref="address"/>
<xs:element ref="city"/>
<xs:element ref="country"/>
</xs:sequence>
</xs:complexType>
</xs:element>

<xs:element name="item">
<xs:complexType>
<xs:sequence>
<xs:element ref="title"/>
<xs:element ref="note" minOccurs="0"/>
<xs:element ref="quantity"/>
<xs:element ref="price"/>
</xs:sequence>
</xs:complexType>
</xs:element>

<xs:element name="shiporder">
<xs:complexType>
<xs:sequence>
<xs:element ref="orderperson"/>
<xs:element ref="shipto"/>
<xs:element ref="item" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute ref="orderid" use="required"/>
</xs:complexType>
</xs:element>

</xs:schema>


Die Verwendung des angegebenen Typs (Named-Typen)

Die dritte Design-Methode definiert eine Klasse oder Art, so dass wir die Fähigkeit zu definieren, wiederverwendbare Elemente haben. Spezifische Ansatz ist: erste Element von einfachen und komplexen Elemente Namen und dann Attribut des Elements eingeben, um ihnen zu zeigen

Dieses dritte Verfahren ist die Verwendung von Design-Schema-Datei ( "shiporder.xsd"):

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:simpleType name="stringtype">
<xs:restriction base="xs:string"/>
</xs:simpleType>

<xs:simpleType name="inttype">
<xs:restriction base="xs:positiveInteger"/>
</xs:simpleType>

<xs:simpleType name="dectype">
<xs:restriction base="xs:decimal"/>
</xs:simpleType>

<xs:simpleType name="orderidtype">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{6}"/>
</xs:restriction>
</xs:simpleType>

<xs:complexType name="shiptotype">
<xs:sequence>
<xs:element name="name" type="stringtype"/>
<xs:element name="address" type="stringtype"/>
<xs:element name="city" type="stringtype"/>
<xs:element name="country" type="stringtype"/>
</xs:sequence>
</xs:complexType>

<xs:complexType name="itemtype">
<xs:sequence>
<xs:element name="title" type="stringtype"/>
<xs:element name="note" type="stringtype" minOccurs="0"/>
<xs:element name="quantity" type="inttype"/>
<xs:element name="price" type="dectype"/>
</xs:sequence>
</xs:complexType>

<xs:complexType name="shipordertype">
<xs:sequence>
<xs:element name="orderperson" type="stringtype"/>
<xs:element name="shipto" type="shiptotype"/>
<xs:element name="item" maxOccurs="unbounded" type="itemtype"/>
</xs:sequence>
<xs:attribute name="orderid" type="orderidtype" use="required"/>
</xs:complexType>

<xs:element name="shiporder" type="shipordertype"/>

</xs:schema>

Beschränkungselement die Art der Daten, die von der W3C-XML-Schema-Namespace-Datentyp zeigt. Daher bedeutet das folgende Fragment, dass der Wert des Elements oder Attributwert ein String-Typ sein muss:

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

Beschränkungselement häufig verwendeten Einschränkungen auf die Elemente zu verhängen. Betrachten Sie das folgende Fragment aus dem obigen Schema:

<xs:simpleType name="orderidtype">
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]{6}"/>
</xs:restriction>
</xs:simpleType>

Dieser Code gibt an, dass der Wert des Elements oder Attributs muss eine Zeichenfolge sein und muss in Folge sechs Zeichen lang sein, und diese Zeichen 0-9 sein müssen.