Latest web development tutorials

Заменить элементы схемы XML

По схеме XML, элемент может быть заменен другим элементом.


замещаемые элементы

Поясним: наших клиентов из Великобритании и Норвегии. Мы хотим иметь возможность позволить пользователям выбирать использовать норвежские имена элементов в документе XML или английское название элемента.

Чтобы решить эту проблему, мы можем определить substitutionGroup в схеме XML. Во-первых, мы объявляем главный элемент, то мы объявим незначительные элементы, эти элементы могут быть объявлены, как только они способны заменить первичный элемент.

<xs:element name="name" type="xs:string"/>
<xs:element name="navn" substitutionGroup="name"/>

В приведенном выше примере, элемент "имя" является основным элементом, элемент "NAVn" может заменить элемент "имя".

Рассмотрим фрагмент 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>


Заменить элемент стоп

Для того, чтобы предотвратить другие элементы заменить указанный элемент, используйте свойства блока:

<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)?

Глобальный элемент относится к прямым дочерние элементы элемента "схемы"! Местные элементы (локальные элементы) относится к элементам вложенных внутри других элементов.