XSD 組合タイプインデクサ

指示子を通じて、ドキュメント内で要素を使用する方法を制御できます。

指示子

七種の指示子があります:

順序指示子:

  • すべて
  • 選択
  • シーケンス

発生指示子:

  • maxOccurs
  • minOccurs

Group 指示子:

  • Group name
  • attributeGroup name

Order 指示子

Order 指示子は、要素の順序を定義します。

All 指示子

<all> 指示子は、子要素が任意の順序で出現できることを定義し、各子要素は一度だけ出現する必要があります:

<xs:element name="person">
  <xs:complexType>
    <xs:all>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
    </xs:all>
  </xs:complexType>
</xs:element>

注記:<all> 指示子を使用する場合、<minOccurs>を0または1に設定できますが、<maxOccurs>指示子は1に設定できます(<minOccurs>および<maxOccurs>の詳細は後で説明します)。

Choice 指示子

<choice> 指示子は、ある子要素または別の子要素(どちらでも可)が出現できることを定義します:

<xs:element name="person">
  <xs:complexType>
    <xs:choice>
      <xs:element name="employee" type="employee"/>
      <xs:element name="member" type="member"/>
    </xs:choice>
  </xs:complexType>
</xs:element>

ヒント:子要素の出現回数を任意に設定する場合は、<maxOccurs>(後で説明します)をunbounded(無制限回数)に設定します。

Sequence 指示子

<sequence>は、子要素が特定の順序で出現する必要があることを定義します:

<xs:element name="person">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

Occurrence 指示子

Occurrence 指示子は、ある要素がどれだけの頻度で出現するかを定義します。

注記:すべての「Order」および「Group」指示子(any、all、choice、sequence、group nameおよびgroup reference)では、maxOccursおよびminOccursのデフォルト値が1です。

maxOccurs 指示子

<maxOccurs> 指示子が、ある要素がどれだけの回数出現できるかの最大回数を定義します:

<xs:element name="person">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="full_name" type="xs:string"/>
      <xs:element name="child_name" type="xs:string"> maxOccurs="10"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

上記の例では、子要素「child_name」が「person」要素の中で最少1回(minOccursのデフォルト値は1)から最多10回出現できることを示しています。

minOccurs 指示子

<minOccurs> 指示子が、ある要素がどれだけの回数出現できるかの最小回数を定義します:

<xs:element name="person">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="full_name" type="xs:string"/>
      <xs:element name="child_name" type="xs:string">
      maxOccurs="10" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

上記の例では、子要素「child_name」が「person」要素の中で最少0回、最多10回出現できることを示しています。

ヒント:要素の出現回数を制限しないようにするには、maxOccurs="unbounded"という宣言を使用してください:

実際の例:

「Myfamily.xml」と呼ばれるXMLファイル:

<?xml version="1.0" encoding="ISO-8859-1"?>
<persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
xsi:noNamespaceSchemaLocation="family.xsd">
<person>
<full_name>Tony Smith</full_name>
<child_name>Cecilie</child_name>
</person>
<person>
<full_name>David Smith</full_name>
<child_name>Jogn</child_name>
<child_name>mike</child_name>
<child_name>kyle</child_name>
<child_name>mary</child_name>
</person>
<person>
<full_name>Michael Smith</full_name>
</person>
</persons>

上記のXMLファイルには「persons」というルート要素が含まれています。このルート要素の内部には、3つの「person」要素が定義されています。各「person」要素は「full_name」要素を含む必要があり、最大5つの「child_name」要素を含むことができます。

これはschemaファイル「family.xsd」です:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
elementFormDefault="qualified">
<xs:element name="persons">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="person" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="full_name" type="xs:string"/>
            <xs:element name="child_name" type="xs:string">
            minOccurs="0" maxOccurs="5"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:element>
</xs:schema>

Group 指示子

Group 指示子は関連する要素のセットを定義するために使用されます。

要素グループ

要素グループは group 声明で定義されます:

<xs:group name="組名称">
  ...
</xs:group>

group 声明内部で all、choice、または sequence 要素を定義する必要があります。以下の例では、"persongroup" という名前の group を定義しています、それは必ず特定の順序で要素が並ぶことを定義しています:

<xs:group name="persongroup">
  <xs:sequence>
    <xs:element name="firstname" type="xs:string"/>
    <xs:element name="lastname" type="xs:string"/>
    <xs:element name="birthday" type="xs:date"/>
  </xs:sequence>
</xs:group>

group を定義した後、他の定義でそれを参照することができます:

<xs:group name="persongroup">
  <xs:sequence>
    <xs:element name="firstname" type="xs:string"/>
    <xs:element name="lastname" type="xs:string"/>
    <xs:element name="birthday" type="xs:date"/>
  </xs:sequence>
</xs:group>
<xs:element name="person" type="personinfo"/>
<xs:complexType name="personinfo">
  <xs:sequence>
    <xs:group ref="persongroup"/>
    <xs:element name="country" type="xs:string"/>
  </xs:sequence>
</xs:complexType>

属性グループ

属性グループは attributeGroup 声明で定義されます:

<xs:attributeGroup name="組名称">
  ...
</xs:attributeGroup>

以下の例では、"personattrgroup" という名前の属性グループを定義しています:

<xs:attributeGroup name="personattrgroup">
  <xs:attribute name="firstname" type="xs:string"/>
  <xs:attribute name="lastname" type="xs:string"/>
  <xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>

属性組を定義した後、他の定義でそれを参照することができます、例えば:

<xs:attributeGroup name="personattrgroup">
  <xs:attribute name="firstname" type="xs:string"/>
  <xs:attribute name="lastname" type="xs:string"/>
  <xs:attribute name="birthday" type="xs:date"/>
</xs:attributeGroup>
<xs:element name="person">
  <xs:complexType>
    <xs:attributeGroup ref="personattrgroup"/>
  </xs:complexType>
</xs:element>