| Пример | Описание |
|---|---|
| anyElement | Это расширенный пример, показывающий, каким образом можно использовать элемент any из спецификации схемы XML для расширения документа XML. |
| Изменение PurchaseOrder.xml | Показывает, каким образом можно использовать файл схемы XML (PurchaseOrder.xsd) для предоставления помощи по редактированию при изменении файла XML (PurchaseOrder.xml). В каталоге для пользователей в разных странах показано, каким создать производный тип и использовать атрибут xsi:type в документе экземпляра XML. Пример report.xsd показывает, как работать с несколькими схемами из разных пространств имен. |
| Использование групп замены | Показывает, каким образом схема XML позволяет использовать именованные группы элементов для замены других элементов. |
Использование пространства имен ##any
Схема Book.xsd в каталоге anyNamespace имеет сложный тип BookType. Содержимым BookType является название, автор, год, isbn, за которым может следовать любой (необязательный) допустимый XML, как указано в элементе any: <any namespace="##any" minOccurs="0" maxOccurs="unbounded"/>
Это означает, что в документе экземпляра можно вставить любой элемент XML для расширения определения BookType. В этом примере имеются две другие схемы: Publisher.xsd и Reviewer.xsd. Используем их для расширения определения BookType в нашем документе экземпляра. Обратите внимание, что обе эти схемы находятся в разных пространствах имен.
Использование определенного пространства имен
Схема Book.xsd в каталоге specifiedNamespace имеет сложный тип BookType. Содержимым BookType является название, автор, год, isbn, за которым может следовать любой (необязательный) допустимый XML, принадлежащий к пространству имен http://www.wesley.com, как указано в элементе any: <any namespace="http://www.wesley.com" minOccurs="0" maxOccurs="unbounded"/>
Это означает, что в документе экземпляра можно вставить любой элемент XML для расширения определения BookType, если он принадлежит к пространству имен http://www.wesley.com. В данном примере Reviewer.xsd принадлежит к этому пространству имен.
Book.xml связан как с Book.xsd, так и с Reviewer.xsd с помощью атрибута xsi:schemaLocation. Он показывает, каким образом можно расширить BookType с помощью элемента reviewer для предоставления возможности оставлять комментарии о книге.
Для Book.xml - на панели Эскиз редактора XML выберите элемент rev:reviewer. Во всплывающем меню выберите , чтобы добавить комментарий для элемента reviewer. Выполните проверку, чтобы убедиться в допустимости документа.
Создание экземпляров на основе схем с элементом any
Добавление пространств имен в документ XML
Файл PurchaseOrder.xsd предоставляет правила для определения содержимого файла PurchaseOrder.xml. Он связан с файлом PurchaseOrder.xml с помощью атрибута xsi:schemaLocation.
Ограничения на вхождения
<element name="shipDate" type="date" minOccurs="0"/>
Для PurchaseOrder.xml - на панели Эскиз редактора XML выберите первый элемент в разделе элемента items. В его контекстном меню выберите , чтобы добавить shipDate в элемент item. Будет добавлен элемент shipDate, в качестве значения которого задана текущая дата. Обратите внимание, что во всплывающем меню Добавить дочерний объект больше нет пункта shipDate, поскольку выполняется условие наличия не более одного элемента shipDate.
Если выбрать элемент shipDate и во всплывающем меню выбрать Удалить, то опция опять станет доступной.
Перечислимый тип элемента
<element name="state" type="po:USState"/>
<simpleType name="USState">
<restriction base="string">
<enumeration value="CA"></enumeration>
<enumeration value="PA"></enumeration>
<enumeration value="AR"></enumeration>
</restriction>
</simpleType>
Для PurchaseOrder.xml - на панели Эскиз редактора XML выберите текстовое поле штата в разделе элемента shipTo. Появится список, в котором можно выбрать одно из трех значений (CA, PA или AR), ограниченных значениями перечисления в простом типе USState.
Использование производных типов в документах экземпляра (атрибут xsi:type)
<element name="shipTo" type="ipo:Address"/>
<element name="billTo" type="ipo:Address"/>
В address.xsd два сложных типа USAddress и UKAddress расширяют базовый тип Address.
В документе экземпляра ipo.xml может быть выбрано для использования другое порождение Address (например USAddress) с помощью атрибута xsi:type.
На панели Эскиз редактора XML выберите атрибут xsi:type в разделе элемента shipTo. Обратите внимание, доступен список для выбора типа Address, который требуется использовать. Пошаговая поддержка будет зависеть от типа, выбранного в поле со списком.
Работа с несколькими схемами и пространствами имен
Пример Квартальный отчет показывает, как работать с несколькими схемами из разных пространств имен. Он включает следующие файлы в папке PurchaseOrder/international: address.xsd, ipo.xsd, report.xsd и report.xml.
По мере расширения схем часто бывает целесообразно разделить их содержимое на несколько документов схем для упрощения обслуживания, повторного использования и читаемости. Схема XML определяет два конструктивных элемента: include и import. Элемент include вводит определения и объявления из включенной схемы в текущую схему. Необходимо, чтобы включенная схема находилась в том же целевом пространстве имен, в котором находится включающая схема. Аналогичный алгоритм и у элемента import, с одним исключением - импортируемая схема может происходить из другого пространства имен.
Дополнительная информация об элементах include и import приведена в электронной справке редактора схемы XML.
<element name="Book" type="Catalogue:BookType"
substitutionGroup="Catalogue:Publication"/>
<element name="Magazine" type="Catalogue:MagazineType"
substitutionGroup="Catalogue:Publication"/>
Содержимым элемента Каталог может быть любой элемент, имеющийся в группе замены. На панели Эскиз редактора XML выберите меню Добавить дочерний объект элемента Каталог. Обратите внимание, элемент Book и Magazine можно использовать в качестве замены содержимого элемента Publication. Кроме того, в этом примере элемент Publication был объявлен как абстрактный, чтобы исключить вероятность использования элемента Publication непосредственно в документе экземпляра.