Учебник по XML

XML ГЛАВНАЯ Введение в XML XML Как использовать XML-дерево Синтаксис XML XML-элементы XML-атрибуты Пространства имен XML Отображение XML XML HttpRequest XML-парсер XML DOM XML XPath XML XSLT XML XQuery XML-ссылка XML-валидатор XML-DTD XML-схема XML-сервер XML-примеры XML-викторина XML-сертификат

XML АЯКС

Введение в АЯКС AJAX XMLHttp АЯКС-запрос AJAX-ответ XML-файл AJAX АЯКС PHP АЯКС АСП База данных AJAX AJAX-приложения Примеры AJAX

XML DOM

Введение в ДОМ DOM-узлы Доступ к DOM Информация об узле DOM Список узлов DOM Обход DOM DOM-навигация DOM Получить значения Узлы изменения DOM DOM Удалить узлы DOM заменить узлы DOM Создание узлов DOM Добавить узлы Узлы клонирования DOM Примеры DOM

Учебник XPath

XPath Введение Узлы XPath Синтаксис XPath Оси XPath Операторы XPath Примеры XPath

XSLT- учебник

Введение в XSLT Языки XSL XSLT-преобразование XSLT <шаблон> XSLT <значение> XSLT <для каждого> XSLT <сортировка> XSLT <если> XSLT <выбрать> XSLT Применить XSLT на клиенте XSLT на сервере XSLT Редактировать XML XSLT-примеры

Учебник по XQuery

Введение в XQuery Пример XQuery XQuery FLWOR XQuery HTML Условия XQuery Синтаксис XQuery XQuery Добавить Выбор XQuery Функции XQuery

XML -DTD

Введение в DTD Строительные блоки DTD Элементы DTD Атрибуты DTD Элементы DTD и Attr Сущности DTD Примеры DTD

XSD- схема

Введение в XSD XSD Как XSD <схема> XSD-элементы XSD-атрибуты XSD-ограничения

Комплекс XSD

XSD-элементы XSD пустой Только элементы XSD Только текст XSD XSD смешанный XSD-индикаторы XSD <любой> XSD <любой атрибут> Замена XSD Пример XSD

XSD- данные

XSD-строка XSD-дата XSD числовой XSD Разное Справочник по XSD

Веб- сервисы

XML-сервисы XML WSDL XML-МЫЛО XML RDF XML RSS

использованная литература

Типы узлов DOM DOM-узел Список узлов DOM DOM NamedNodeMap Документ DOM DOM-элемент Атрибут DOM DOM-текст ДОМ CDATA Дом Комментарий DOM XMLHttpRequest Парсер DOM XSLT-элементы Функции XSLT/XPath

Замена элемента XSD


В XML-схемах один элемент может заменить другой элемент.


Замена элемента

Допустим, у нас есть пользователи из двух разных стран: Англии и Норвегии. Нам бы хотелось, чтобы пользователь мог выбирать, будет ли он или она использовать норвежские имена элементов или английские имена элементов в XML-документе.

Чтобы решить эту проблему, мы могли бы определить группу замещения в схеме XML. Сначала мы объявляем элемент head, а затем объявляем другие элементы, в которых указано, что они могут быть заменены элементом head.

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


Замена блокирующего элемента

Чтобы другие элементы не замещались указанным элементом, используйте атрибут блока:

<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 (головной элемент и замещаемые элементы) должны быть объявлены как глобальные элементы, иначе это не сработает!


Что такое глобальные элементы?

Глобальные элементы — это элементы, которые являются непосредственными дочерними элементами элемента «схема»! Локальные элементы — это элементы, вложенные в другие элементы.