目次へ

2.6 minOccursとmaxOccurs

出現回数に関する制限は、minOccursおよびmaxOccurs属性により制限します。

 <element 要素の名前 minOccurs="最低出現回数"  maxOccurs="最高出現回数">

minOccurs、maxOccursの値は、整数でなくてはいけません。さらに、maxOccursの値は、minOccursの値以上でなくてはいけません。出現回数に上限を持たせない場合は、maxOccursの値をunboundedと指定します。

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

上のPurchaseOrderTypeの例で、comment要素を見てください。minOccurs属性が設定されています。属性値は、0に設定されています。これにより、comment要素は最低出現回数が0、つまり、出現してもしなくてもよい要素なのです。ところで、minOccursとmaxOccursのデフォルト値は、両方とも1です。上の例では、shipTo、billTo、itemsはminOccurs、maxOccurs属性が指定されていません。この場合、shipTo、billTo、itemsは必ず1回ずつ出現しなければいけません。

ところで、all要素を指定した場合、maxOccurs、minOccursともに0 か1でなくてはいけません。以下のXML Schemaはエラーになります。

<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" maxOccurs="unbounded"/>
    <xsd:element name="items"  type="po:Items"/>
  </xsd:sequence>
  <xsd:attribute name="orderDate" type="xsd:date"/>
</xsd:complexType>

2.7 モデルグループ

子供要素として登場する要素の組があった場合は、モデルグループとして別に定義することができます。モデルグループは、group要素により、定義します。

<group name="モデルグループの名前 "> 
   モデルグループの内容
</group>             

group要素の構文は、属性を指定しないことを除けば、Complex Typeの定義と同じです。Complex Type定義内で、モデルグループを参照するときは、ref属性を使用します。

<group ref="モデルグループの名前"/>

例えば、新しくJPAddress型を作成するとします。JPAddress型とはname、street、city要素が共通であった場合、グループ化しておけば、型定義のとき、共通モジュールとして使用できます。

<xsd:complexType name="JPAddress"> 
 <xsd:sequence> 
  <xsd:group ref="po:addressCommon"/>
  <xsd:element name="prefecture" type="xsd:string"/> 
  <xsd:element name="zip" type="xsd:decimal"/> 
 </xsd:sequence>
 <xsd:attribute name="country" type="xsd:NMTOKEN" fixed="JP"/> 
</xsd:complexType>

<xsd:group name="addressCommon">
 <xsd:sequence>
  <xsd:element name="name" type="xsd:string"/> 
  <xsd:element name="street" type="xsd:string"/> 
  <xsd:element name="city" type="xsd:string"/> 
 </xsd:sequence>
</xsd:group>

以上のように記述することにより、共通の部分をJPAddress型、USAddress型両方で、全く同じ記述をしなくてもよくなります。また、モデルグループの中で別のモデルグループを参照することも可能です。

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp