XSDインジケーター
インジケーター付きのドキュメントで要素をどのように使用するかを制御できます。
インジケーター
7つの指標があります。
注文インジケーター:
- 全て
- 選択
- 順序
発生指標:
- maxOccurs
- minOccurs
グループ指標:
- グループ名
- attributeGroup名
注文インジケーター
順序インジケーターは、要素の順序を定義するために使用されます。
すべてのインジケーター
<all>インジケーターは、子要素が任意の順序で表示できること、および各子要素が1回だけ出現する必要があることを指定します。
<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>インジケーターは、1つの子要素または別の要素のいずれかが発生する可能性があることを指定します。
<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>
シーケンスインジケーター
<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>
発生インジケーター
発生インジケーターは、要素が発生する頻度を定義するために使用されます。
注:すべての「順序」および「グループ」インジケーター(任意、すべて、選択、シーケンス、グループ名、およびグループ参照)の場合、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」要素が最小で1回(minOccursのデフォルト値は1)、「person」要素で最大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="UTF-8"?>
<persons xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="family.xsd">
<person>
<full_name>Hege Refsnes</full_name>
<child_name>Cecilie</child_name>
</person>
<person>
<full_name>Tove Refsnes</full_name>
<child_name>Hege</child_name>
<child_name>Stale</child_name>
<child_name>Jim</child_name>
<child_name>Borge</child_name>
</person>
<person>
<full_name>Stale Refsnes</full_name>
</person>
</persons>
上記のXMLファイルには、「persons」という名前のルート要素が含まれています。このルート要素内に、3つの「person」要素を定義しました。各「person」要素には「full_name」要素が含まれている必要があり、最大5つの「child_name」要素を含めることができます。
スキーマファイル「family.xsd」は次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<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>
グループインジケーター
グループインジケーターは、関連する要素のセットを定義するために使用されます。
要素グループ
要素グループは、次のようにグループ宣言で定義されます。
<xs:group name="groupname">
...
</xs:group>
グループ宣言内でall、choice、またはsequence要素を定義する必要があります。次の例では、「persongroup」という名前のグループを定義します。これは、正確な順序で発生する必要がある要素のグループを定義します。
<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: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="groupname">
...
</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>