Latest web development tutorials

XMLスキーマインスタンス

このセクションでは、XMLスキーマを作成する方法を紹介します。 また、スキーマを記述するためのさまざまな方法を学習します。


XML文書

のは、この時にいわゆる「shiporder.xml「XML文書を見てみましょう:

<?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>

属性を含む上記のXML文書のルート要素」shiporder」は、の "受注"という名前でなければなりません。 「orderperson "、" shipTo要素 "と"アイテム ":" Shiporder "要素は、3つの異なる子要素が含まれています。 「アイテム」要素が2回出現し、それが「タイトル」、オプションの「ノート」要素、「量」と「価格」の要素が含まれています。

上記ラインのxmlns:XSI = "http://www.w3.org/2001/XMLSchema-instance」は、この文書を検証するためにXMLパーサに基づいてスキーマを語りました。 ライン:XSI:のnoNamespaceSchemaLocation = "shiporder.xsd"スキーマ(この場合は同じフォルダ内に、それは「shiporder.xml」での)位置を定義します。


XMLスキーマを作成します。

今、私たちは、上記のXML文書のスキーマを作成する必要があります。

私たちは、新しいファイルを開くことによって開始することができ、このファイルは「shiporder.xsd」と命名されています。 スキーマを作成するには、単にXML文書構造、我々が見つけたものの定義の各要素を実行する必要があります。 まず、標準のXML宣言を定義するために開始します。

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

上記のスキーマでは、我々は標準的な名前空間(XS)を使用し、この名前に関連付けられたURI空間は(スキーマ言語の定義)のスキーマ言語の定義である、その標準値はhttp://www.w3.org/であります2001 / XMLスキーマ。

次に、我々は「shiporder」要素を定義する必要があります。 この要素は、したがって、我々は複合型としてそれを識別し、他の要素が含まれているプロパティがあります。 サブ要素「shiporder」要素はxs:sequence要素囲まは、サブ要素の順序を定義します。

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

(それは任意の属性や他の要素が含まれていないため)その後、我々は「orderperson」要素が単純型として定義されている必要があります。 タイプ(XS:文字列)が関連付けられているこの名前空間と命令事前に定義されたスキーマデータ型XMLスキーマの名前空間接頭辞の条項が付けられ:

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

「shipTo要素」と「アイテム」:次に、私は複合型として定義された2つの要素を必要とします。 私たちは、定義することから始め、「shipTo要素」の要素が開始されます:

<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>

スキーマによって、我々は要素がのmaxOccursとminOccurs属性の属性を使用して発生する可能性があります回数を定義することができます。 maxOccursのは、要素の最大数が表示される定義、およびminOccurs属性は、要素のオカレンスの最小数を定義します。 デフォルトのmaxOccursとminOccurs属性は1です!

今、私たちは、「アイテム」要素を定義することができます。 この要素は、「shiporder」要素内に複数回現れることができます。 これは、値がその「アイテム」要素が所望のように作成者が何度でも表示されますすることができますので、達成するために「無制限」に設定されている「アイテム」要素のmaxOccurs属性によって行われます。 要素はオプションである「注意」、注意してください。 私たちは、この要素のminOccurs属性属性は上の0に設定されています:

<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>

現在の要素の「shiporder」属性を宣言することができます。 これは必須属性であるように、我々は使用を指定= "必要"。

注:このプロパティは、最後に宣言する必要があります。

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

これは「shiporder.xsd「スキーマファイルと呼ばれる、文書のリストです:

<?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>


スプリットスキーマ

設計法の前に非常に容易であるが、複雑なShiqueのドキュメントを読み、維持することは困難です。

次に、すべての要素と属性の最初の定義で説明した設計法に基づいて、その後、refがそれらを参照する属性を使用します。

この新しいアプローチは、スキーマファイル(「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>


指定された型を使用した(種類を名前付き)

我々は再利用可能な要素を定義する能力を持っているように、第3の設計方法は、クラスまたはタイプを定義します。 単純および複雑な要素名の最初の要素、および、それらを指すように要素の属性を入力します。具体的なアプローチがあります

この第3の方法は、設計スキーマファイル(「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>

W3C XML Schemaの名前空間データ型から派生したデータの種類を示す制限要素。 したがって、以下の断片は、要素や属性値の値が文字列型でなければならないことを意味します。

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

制限要素は、多くの場合、要素に制限を課すために使用されます。 上記のスキーマから以下の断片を考えてみましょう。

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

このコードは、要素または属性の値は文字列でなければならないことを示し、連続した6文字でなければならず、これらの文字は0-9でなければなりません。