XSD 要素の代用
XML スキーマにより、要素を他の要素へ代用することができます。
要素の代用
イングランドとノルウェーという 2 つの異なる国のユーザを持っているとしましょう。
我々は、彼または彼女がXML文書内で使用したい要素名がノルウェー語なのか英語なのかを
ユーザに選択させる能力を持たせたいと思います。
この問題の解決策として、XMLスキーマで substitutionGroup を定義することができます。
まず、head 要素を宣言します。次に head 要素に対して代用可能であることを明示する他の要素を宣言します。
<xs:element name="name" type="xs:string"/>
<xs:element name="navn" substitutionGroup="name"/> |
上記例では、"name" 要素が head 要素であり、"navn"
要素が "name" の代用です。
XML スキーマの一部を見てください:
<xs:element name="name" type="xs:string"/>
<xs:element name="navn" substitutionGroup="name"/>
<xs:complexType name="custinfo">
<xs:sequence>
<xs:element ref="name"/>
</xs:sequence>
</xs:complexType>
<xs:element name="customer" type="custinfo"/>
<xs:element name="kunde" substitutionGroup="customer"/> |
(上記スキーマに基づいた)妥当な XML 文書 は、以下のようになります:
<customer>
<name>John Smith</name>
</customer> |
または、次のようになります:
<kunde>
<navn>John Smith</navn>
</kunde> |
要素代用のブロック
他の要素が、指定した要素で代用されることを防止するために、block 属性を使用します:
<xs:element name="name" type="xs:string" block="substitution"/> |
XML スキーマの一部を見てください:
<xs:element name="name" type="xs:string" block="substitution"/>
<xs:element name="navn" substitutionGroup="name"/>
<xs:complexType name="custinfo">
<xs:sequence>
<xs:element ref="name"/>
</xs:sequence>
</xs:complexType>
<xs:element name="customer" type="custinfo" block="substitution"/>
<xs:element name="kunde" substitutionGroup="customer"/> |
(上記スキーマに基づいた)妥当な XML 文書 は、以下のようになります:
<customer>
<name>John Smith</name>
</customer> |
しかし、最早妥当ではなくなっています:
<kunde>
<navn>John Smith</navn>
</kunde> |
substitutionGroup の使い方
代用可能な要素の型は、head 要素の型と同じか、head 要素から派生したものでなければなりません。
代用可能な要素の型が、head 要素の型と同じ場合は、代用可能な要素の型を指定する必要はありません。
substitutionGroup(head要素と代用可能な要素)のすべての要素は、global 要素として宣言する
必要があることに注意してください。それ以外の場合は動作しません!
Global 要素とは ?
Global 要素とは、"schema" 要素の直接の子要素です! ローカル要素は、他の要素内にネストされた要素です。
|