xml schema xsd入門

13925 ワード

XML Schemaの理解:XML Schemaイニシャル(I)、単純タイプ例、リストタイプxsd:list、コンビネーションタイプxsd:union
コンセプト:
要素にサブ要素が含まれている場合、または属性が付いている場合は
複合タイプ;逆に要素は、数値、文字列、その他のデータのみを含むが、サブ要素を含まない場合は
単純なタイプ.
変換元:
http://blog.sina.com.cn/s/blog_4c6245400100bhbq.html
一、最も基本的な

<?xml version="1.0"?>
<greeting>Hello World!!</greeting>

対応するSchema

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <xsd:element name="greeting" type="xsd:string"/>
</xsd:schema>

二、子元素を含んで、complexType

<customer>
   <name>teiki</name>
   <address>No.237, Road Waitan, Shanghai</address>
</customer>

対応するSchema

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <xsd:element name="customer">
      <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="name" type="xsd:string"/>
            <xsd:element name="address" type="xsd:string" />
         </xsd:sequence>
      </xsd:complexType>
   </xsd:element>
</xsd:schema>

三、孫元素を含んで、直接ネストしてもいいし、refを使って構造を簡略化することもできる.

<?xml version="1.0"?>
<customer>
   <name>Teiki</name>
   <address>
         <prefecture>Zhejiang</prefecture>
         <city>Hangzhou</city>
         <street>Xilu Road, No.121, 7F</street>
   </address>
</customer>

ダイレクトネスト時のXSD

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <xsd:element name="customer">
      <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="name" type="xsd:string"/>
            <xsd:element name="address">
               <xsd:complexType>
                  <xsd:sequence>
                     <xsd:element name="prefecture" type="xsd:string"/>
                     <xsd:element name="city" type="xsd:string" />
                     <xsd:element name="street" type="xsd:string" />
                  </xsd:sequence>
               </xsd:complexType>
            </xsd:element>
         </xsd:sequence>
      </xsd:complexType>
   </xsd:element>
</xsd:schema>

Refの

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <xsd:element name="customer">
      <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="name" type="xsd:string"/>
            <xsd:element ref="address"/>
         </xsd:sequence>
      </xsd:complexType>
   </xsd:element>
   <xsd:element name="address">
      <xsd:complexType>
         <xsd:sequence>
            <xsd:element name="prefecture" type="xsd:string"/>
            <xsd:element name="city" type="xsd:string" />
         <xsd:element name="street" type="xsd:string" />
      </xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>

四、同じサブエレメントの数を定義する
maxOccursの値はunbounded、最小値はminOccursで、両方のデフォルト値は1です.

<order>
       <orderItem>Accounting Book</orderItem>
       <orderItem>Taxation Book</orderItem>
</order>

対応するschema:

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema
<xsd:element name="order">
       <xsd:complexType>
              <xsd:sequence>
                     <xsd:element name="orderItem" type="xsd:string" maxOccurs="10" />
              </xsd:sequence>
       </xsd:complexType>
</xsd:element>
</xsd:schema>

五、オプション可能なサブ要素を定義する.
xsd:choice
上記の注文データのうち、本名または番号のいずれかで注文できる場合、インスタンスドキュメントは次のようになります.

<order>
       <orderItem>
              <!--    -->
              <name>Accounting Book</name>
       </orderItem>
       <orderItem>
              <!--    -->
              <id>7-5058-3496-7</id>
       </orderItem>
</order>

対応するschema

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
       <xsd:element name="order">
              <xsd:complexType>
                     <xsd:sequence>
                            <xsd:element ref="orderItem" maxOccurs="10"/>
                     </xsd:sequence>
              </xsd:complexType>
       </xsd:element>
       <xsd:element name="orderItem">
              <xsd:complexType>
                     <xsd:choice>
                            <xsd:element name="name" type="xsd:string"/>
                            <xsd:element name="id" type="xsd:string"/>
                     </xsd:choice>
              </xsd:complexType>
       </xsd:element>
</xsd:schema>

ここでの値が1の場合、デフォルトとします.

<order>
       <orderItem>
              <name>Accounting Book</name>
              <quantity>2</quantity>
       </orderItem>
       <orderItem>
              <id>7-5058-3496-7</id>
       </orderItem>
</order>

対応するschema

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
       <xsd:element name="order">
              <xsd:complexType>
                     <xsd:sequence>
                            <xsd:element ref="orderItem" maxOccurs="10"/>
                     </xsd:sequence>
              </xsd:complexType>
       </xsd:element>
       <xsd:element name="orderItem">
              <xsd:complexType>
                     <xsd:sequence>
                            <xsd:choice>
                                   <xsd:element name="name" type="xsd:string"/>
                                   <xsd:element name="id" type="xsd:string"/>
                            </xsd:choice>
                            <xsd:element name="quantity" type="xsd:string" minOccurs="0"/>
                     </xsd:sequence>
              </xsd:complexType>
       </xsd:element>
</xsd:schema>

六、内蔵単純タイプ
XML Schemaに内蔵される単純なタイプは44種類ある.XML Schema推奨規格の第2部で発表されています.以下は内蔵タイプの階層図です.
xml schema xsd 入门
七、カスタム単純タイプ
シンプルタイプの44種類が内蔵されていて、まだ要件を満たしていない場合は、どうすればいいですか?次に、カスタム単純タイプについて学習します.(XMLの拡張性はここに十分に現れている)

<order>
       <orderItem>
              <id>7-5058-3496-7</id>
              <quantity>5</quantity>
       </orderItem>
</order>

IDは標準的なISBN符号化ですが、このISBN符号化をどのように定義しますか?

<xsd:simpleType name="idType">
       <xsd:restriction base="xsd:string">
              <xsd:pattern value="\d{1}-\d{4}-\d{4}-\d{1}"/>
       </xsd:restriction>
</xsd:simpleType>

idTypeはカスタマイズされたシンプルなタイプです.
私たちはそれを制限しました.
は、文字列タイプに基づいていることを示します.文字列の形式をpattern要素で記述します.value="d{1}-d{4}-d{4}-d{1}"これは正規表現である.
このカスタムの簡単なタイプを使用して、Schemaドキュメントを書き直すことができます.

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
       <xsd:element name="order">
              <xsd:complexType>
                     <xsd:sequence>
                            <xsd:element ref="orderItem" maxOccurs="10"/>
                     </xsd:sequence>
              </xsd:complexType>
       </xsd:element>
       <xsd:element name="orderItem">
              <xsd:complexType>
                     <xsd:sequence>
                            <xsd:element name="id" type="idType"/>
                            <xsd:element name="quantity" type="xsd:integer"/>
                     </xsd:sequence>
              </xsd:complexType>
       </xsd:element>
       <xsd:simpleType name="idType">
              <xsd:restriction base="xsd:string">
                     <xsd:pattern value="\d{1}-\d{4}-\d{4}-\d{1}"/>
              </xsd:restriction>
       </xsd:simpleType>
</xsd:schema>

IDが3つしかない、すなわちISBNが3つしか選択できないと事前に確定したらどうしますか?私たちは
Enumeration要素を列挙する

<xsd:simpleType name="idType">
       <xsd:restriction base="xsd:string">
              <xsd:enumeration value="7-5058-3496-7"/>
              <xsd:enumeration value="7-5005-6450-3"/>
              <xsd:enumeration value="7-3020-6069-7"/>
       </xsd:restriction>
</xsd:simpleType>

注文量quantityの値を見てみると、
もし私たちがその値を1-10の間に設定しなければならないならば、どうすればいいですか?これらは単純なタイプをカスタマイズできます.

<xsd:simpleType name="quantityType">
       <xsd:restriction base="xsd:integer">
              <xsd:minInclusive value="1"/>
              <xsd:maxInclusive value="10"/>
       </xsd:restriction>
</xsd:simpleType>

八、属性の定義
xsd:attribute

<order>
       <orderItem id="7-5058-3496-7"/>
</order>

対応するschema

<xsd:element name="orderItem">
       <xsd:complexType>
              <xsd:sequence> <!--   -->
              </xsd:sequence> 
              <!--       -->
              <xsd:attribute name="id" type="xsd:string"/>
       </xsd:complexType>
</xsd:element>

では、インスタンスドキュメントの属性値は必須ですか、それとも有無は可能ですか.このように制限することができます.

<xsd:attribute name="id" type="idType" use="required"/>

ここではid属性タイプをカスタムデータ型idTypeとして説明する.また、attribute要素のuseプロパティを使用して、必要なプロパティかどうかを定義します.
requiredは必須値、optionalはオプション値、prohibitedは無属性値です.
では、属性のデフォルト値について、どのように定義しますか?例:

      

まだ使えます
attribute要素の別の属性defaultを定義します.

<xsd:attribute name="quantity" type="xsd:integer" default="1"/>

上記のプロパティでは、プロパティグループを使用してSchemaドキュメントを書き直すこともできます.

<xsd:element name="orderItem">
       <xsd:complexType>
              <xsd:sequence/>
              <xsd:attributeGroup ref="orderItemAttributes"/>
       </xsd:complexType>
</xsd:element>
<xsd:attributeGroup name="orderItemAttributes">
       <xsd:attribute name="id" type="idType" use="required"/>
       <xsd:attribute name="quantity" type="xsd:integer" default="1"/>
</xsd:attributeGroup>