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