Penggantian Elemen XSD (Element Substitution)
- Halaman Sebelumnya XSD <anyAttribute>
- Halaman Berikutnya Contoh XSD
通过 XML Schema,一个元素可对另一个元素进行替换。
元素替换
让我们举例说明:我们的用户来自英国和挪威。我们希望有能力让用户选择在 XML 文档中使用挪威语的元素名称还是英语的元素名称。
为了解决这个问题,我们可以在 XML schema 中定义一个 substitutionGroup。首先,我们声明主元素,然后我们会声明次元素,这些次元素可声明它们能够替换主元素。
<xs:element name="name" type="xs:string"/> <xs:element name="navn"> substitutionGroup="name"/>
在上面的例子中,"name" 元素是主元素,而 "navn" 元素可替代 "name" 元素。
请看一个 XML schema 的片段:
<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 文档类似这样(根据上面的 schema):
<customer> <name>John Smith</name> </customer>
或类似这样:
<kunde> <navn>John Smith</navn> </kunde>
阻止元素替换
为防止其他的元素替换某个指定的元素,请使用 block 属性:
<xs:element name="name" type="xs:string"> block="substitution"/>
请看某个 XML schema 的片段:
<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 文档应该类似这样(根据上面的 schema):
<customer> <name>John Smith</name> </customer>
但是下面的文档不再合法:
<kunde> <navn>John Smith</navn> </kunde>
Penggunaan substitutionGroup
Tipe elemen yang dapat digantikan mesti sama dengan tipe elemen utama, atau turun dari elemen utama. Jika tipe elemen yang dapat digantikan sama dengan tipe elemen utama, maka anda tidak perlu menentukan tipe elemen yang dapat digantikan.
Perhatikan, semua elemen di dalam substitutionGroup (elemen utama dan elemen yang dapat digantikan) mesti diumumkan sebagai elemen global, atau tidak akan berfungsi!
Apa itu Elemen Global (Global Elements)?
Elemen Global adalah elemen anak langsung dari elemen "schema"! Elemen Lokal (Local elements) adalah elemen yang tersembunyi di dalam elemen lain.
- Halaman Sebelumnya XSD <anyAttribute>
- Halaman Berikutnya Contoh XSD