XMLスキーマでは、1つの要素が別の要素を置き換えることができます。
元素置換
イギリスとノルウェー:我々は二つの異なる国からのユーザーを持っているとしましょう。 私たちは、ユーザーが彼または彼女は、XML文書内のノルウェーの要素名や英語の要素名を使用したいかどうかを選択できるようにする能力をしたいと思います。
この問題を解決するために、我々は定義することができsubstitutionGroup XMLスキーマ内を。 まず、ヘッド要素を宣言した後、我々は、彼らが、ヘッド素子に代わることは記載されて他の要素を宣言します。
<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文書は、 (according to the schema above)次のようになります。
<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文書は、 (according to the schema above)次のようになります。
<customer>
<name>John Smith</name>
</customer>
しかし、これはもはや有効ではありません:
<kunde>
<navn>John Smith</navn>
</kunde>
substitutionGroupを使用しました
置換可能な要素の型が同じ、またはヘッド要素の種類、由来でなければなりません。 置換可能な要素の型ヘッド素子の型と同じである場合は、置換要素の型を指定する必要はありません。
substitutionGroup(head要素と置換可能な要素)内のすべての要素がグローバル要素として宣言されなければならないことに注意してください、それ以外の場合は動作しません!
グローバル要素は何ですか?
グローバル要素は、直下の子である要素である"schema"の要素! ローカル要素は他の要素内にネストされるエレメントです。