Главная » Java, Web, XML » Включение файлов схемы в другую схему

0

В создаваемую схему можно включить файлы, содержащие другие схемы. Для этого есть два элемента схемы: <inciude> и <import>. Например:

<xsd: include xsi: schemaLocation= "names .xsd" />

Включаемый файл задается атрибутом xsi: schemaLocation. В примере использован для того, чтобы включить в создаваемую схему содержимое файла names.xsd. Файл должен содержать схему с описаниями и определениями из того же пространства имен, что и в создаваемой схеме, или без пространства имен, то есть в нем не использован атрибут targetNamespace.

Это удобно, если мы хотим добавить к создаваемой схеме определения схемы names.xsd или просто хотим разбить большую схему на два файла. Можно представить себе результат включения так, как будто содержимое файла names.xsd просто записано на месте элемента <inciude>.

Перед включением файла можно изменить некоторые определения, приведенные в нем. Для этого используется элемент <redefine>, например:

<xsd:redefine schemaLocation="names.xsd">

<xsd: simpleType name="nameType">

<xsd:restriction base="xsd:string">

<xsd:maxLength value="40"/> </xsd:restriction»

</xsd:simpleType> </xsd:redefine»

Если же включаемый файл содержит имена из другого пространства имен, то надо воспользоваться элементом схемы <import>. Например, пусть файл A.xsd начинается со следующих определений:

<?xml version=" 1. 0" ?>

<xsd: schema xmlns :xsd="http: //www.w3 .org/2001/XMLSchema" targetNamespace="http://some.firm.com/someNames">,

а файл B.xsd начинается с определений

<?xml version=" 1. 0" ?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://some.firm.com/anotherNames">

Мы решили включить эти файлы в новый файл C.xsd. Это делается так:

<?xml version=" 1. 0" ?>

<xsd: schema xmlns :xsd="http: //www. w3. org/2001 /XMLSchema"

targetNamespace="http://some.firm.com/yetAnotherNames" xmlns:prl="http://some.firm.com/someNames" xmlns:pr2="http://some.firm.com/anotherNames">

<xsd: import namespace="http: //some .firm. com/someNames "

xsi:schemaLocation="A.xsd" /> <xsd: import namespace="http: / /some. firm. com/anotherNames" xsi:schemaLocation="B.xsd" />

После этого в файле C.xsd можно использовать имена, определенные в файлах A.xsd и B.xsd, снабжая их префиксами prl и рг2 соответственно.

Элементы <include> и <import> следует располагать перед всеми определениями схемы.

Значение атрибута xsi:schemaLocation — строка URI, поэтому файл с включаемой схемой может располагаться в любом месте Интернета.

Литература:

Хабибуллин И. Ш. Разработка Web-служб средствами Java. — СПб.: БХВ-Петербург, 2003. — 400 с: ил.

По теме:

  • Комментарии