Подмена элементов в XSD (Element Substitution)
- Предыдущая страница XSD <anyAttribute>
- Следующая страница Пример 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>
Использование substitutionGroup
Типы элементов, подлежащие замене, должны быть одинаковыми или происходить от основного элемента. Если тип элементов, подлежащих замене, совпадает с типом основного элемента, то указывать тип элементов, подлежащих замене, не нужно.
Обратите внимание, что все элементы в substitutionGroup (основные элементы и элементы, подлежащие замене) должны быть объявлены как глобальные элементы, в противном случае они не будут работать!
Что такое глобальные элементы (Global Elements)?
Глобальные элементы представляют собой прямых детей элемента "schema"! Локальные элементы (Local elements) представляют собой элементы, включенные в другие элементы.
- Предыдущая страница XSD <anyAttribute>
- Следующая страница Пример XSD