目次へ

2.5 sequence, choice, all

出現する順番に関する制限は、以下の要素を使って指定します。

  • sequence
    要素の出現の順番を指定します。
  • choice
    出現する要素のリストを指定します。ここで指定した要素のうちどれか一つが出現します。
  • all
    出現の順番に関する制限はありません。記述してある要素が任意の順番で、0回もしくは1回、出現します。

それぞれについて、詳しく見ていきたいと思います。出現要素の順番を規定したい場合は、sequence要素を使用します(DTDの要素宣言内で、(要素名1,要素名2,要素名3...)で表されるものです)。構文は以下の通りです。

<complexType name="Complex Typeの名前">
    <sequence>
     <element 要素1 要素の情報/>
     <element 要素2 要素の情報/>
      ...
  
    </sequence>
</complexType> 

以上のように規定すると、子供要素は、sequence要素の中、上から順番に出現します。以下に例を示します。

<xsd:complexType name="PurchaseOrderType">
  <xsd:sequence>
    <xsd:element name="shipTo" type="po:USAddress"/>
    <xsd:element name="billTo" type="po:USAddress"/>
    <xsd:element ref="po:comment" minOccurs="0"/>
    <xsd:element name="items"  type="po:Items"/>
  </xsd:sequence>
  <xsd:attribute name="orderDate" type="xsd:date"/>
</xsd:complexType>

上の例では、sequence要素の中で、4つの要素を指定しています。PurchaseOrderTypeの要素は、子供要素として、shipTo、billTo、comment、itemsがこの順番で出現することを示しています。

choiceは出現する要素のリストを指定するものです。(DTDでの要素宣言内で、(要素名1|要素名2|要素3...)と表されるものです)。構文は以下の通りです。

<complexType name=" Complex Typeの名前"> 
   <choice> 
    <element 要素1 要素の情報/>
    <element 要素2 要素の情報/>
    ... 
   </choice>
</complexType> 

上のように記述すると、choice要素の内容で宣言されている要素のうちひとつだけが出現します。例えば、item要素の中で注文する品物の情報が記述しています。現状では、値段として、USPriceしか記述できませんが、新たにUSPrice、UKPriceどちらかを選択して設定できるようにします。

<item partNum="872-AA">
     <productName>Lawnmower</productName>
     <quantity>1</quantity>
     <UKPrice>103.18</UKPrice>
     <comment>Confirm this is electric</comment>
</item>purchaseOrder orderDate="1999-10-20">  

このような場合、スキーマは以下のように記述できます。

<xsd:choice>
      <xsd:element name="USPrice"  type="xsd:decimal"/>
      <xsd:element name="UKPrice"  type="xsd:decimal"/>
</xsd:choice>

これにより、USPriceかUKPrice、どちらかの要素を記述することになります。

最後がall要素になります。all要素は、子供要素が任意の順番で出現可能な場合に使用します。以下の構文になります。

<complexType name=" Complex Typeの名前"> 
   <all> 
     <element 要素1 要素の情報/>
     <element 要素2 要素の情報/>
     ... 
   </all>
</complexType> 

以上の例では、all要素の中で宣言/参照されている要素が、すべて1回ずつ出現します。しかし、出現する順番は、任意です。例えば、上のPurcahseOrderTypeの子供要素、shipTo、bilTo、comment、itemsの、出現の順番に関して、特に制限がない場合は、スキーマを以下のように変更します。

<xsd:complexType name="PurchaseOrderType">
  <xsd:all>
    <xsd:element name="shipTo" type="po:USAddress"/>
    <xsd:element name="billTo" type="po:USAddress"/>
    <xsd:element ref="po:comment" minOccurs="0"/>
    <xsd:element name="items"  type="po:Items"/>
  </xsd:all>
  <xsd:attribute name="orderDate" type="xsd:date"/>
</xsd:complexType>

すると、以下のXML文書は、正しいものになります。

<?xml version="1.0"?>
<purchaseOrder orderDate="1999-10-20">
    <items>
   ...
    </items>
    <comment>Hurry, my lawn is going wild!</comment>
    <shipTo country="US">
     ...
    </shipTo>
    <billTo country="US">
     ...
    </billTo>
</purchaseOrder>

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp