XML スキーマ要素の置換
XSD 要素の置換
XML スキーマを通じて、ある要素を別の要素と置き換えることができます。
要素の交換
例を挙げてみましょう: 当社のユーザーは英国とノルウェー出身です。 XML ドキュメント内で要素名にノルウェー語と英語のどちらを使用するかをユーザーが選択できるようにしたいと考えています。
この問題を解決するには、XML スキーマで substitutionGroup を定義できます。まず、メイン要素を宣言し、次に、メイン要素を置き換えることができることを宣言する二次要素を宣言します。
<xs:element name="name" type="xs:string"/>
<xs:element name="navn" substitutionGroup="name"/>
<xs:element name="navn" substitutionGroup="name"/>
上記の例では、 「name」要素がメイン要素であり、「navn」要素が「name」要素を置き換えます。
XML スキーマの断片を見てください:
<xs:element name="name" type="xs:string"/>
<xs:element name="navn" substitutionGroup="name" / >
<xs:complexType name="custinfo">
<xs:シーケンス>
<xs:element ref="name"/>
</xs:sequence>
</xs:complexType>
<xs:element name="customer" type="custinfo"/>
<xs:element name="kunde" substitutionGroup="customer "/>
<xs:element name="navn" substitutionGroup="name" / >
<xs:complexType name="custinfo">
<xs:シーケンス>
<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>
<name>John Smith</name>
</customer>
または次のようなもの:
<kunde>
<navn>John Smith</navn>
</kunde>
<navn>John Smith</navn>
</kunde>
ブロック要素の置換
他の要素が指定された要素を置換しないようにするには、block 属性を使用してください:
<xs: element name="名前" type="xs:string" block="置換"/>
XML スキーマの断片を見てください:
<xs:element name="name" type="xs:string" block="substitution"/>
<xs:element name="navn" substitutionGroup ="name"/>
<xs:complexType name="custinfo">
<xs:シーケンス>
<xs:element ref="name"/>
</xs:sequence>
</xs:complexType>
<xs:element name="customer" type="custinfo" block="substitution"/>
<xs:element name="kunde " substitutionGroup="customer"/>
<xs:element name="navn" substitutionGroup ="name"/>
<xs:complexType name="custinfo">
<xs:シーケンス>
<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>
<name>John Smith</name>
</customer>
しかし、次の文書はもはや合法ではありません:
<kunde>
<navn>John Smith</navn>
</kunde>
<navn>John Smith</navn>
</kunde>
substitutionGroup の使用
置換可能な要素の型は、メイン要素と同じであるか、メイン要素から派生する必要があります。置換可能要素のタイプがメイン要素のタイプと同じである場合、置換可能要素のタイプを指定する必要はありません。
substitutionGroup 内のすべての要素 (メイン要素と置換可能要素) はグローバル要素として宣言する必要があることに注意してください。そうしないと機能しません。
グローバル要素とは何ですか?
グローバル要素は、「schema」要素の直接の子要素を参照します。ローカル要素は、他の要素内にネストされた要素を指します。