Читать «Java 7 (Наиболее полное руководство)» онлайн - страница 468

Ильдар Шаукатович Хабибуллин

Имена элементов и атрибутов, используемые при записи схем, определены в пространстве имен с идентификатором . Префикс имен, относящихся к этому пространству, часто называют xs или xsd, как в листингах 28.4 и 28.5. Каждый анализатор "знает" это пространство имен и "понимает" имена из этого пространства.

Можно сделать это пространство имен пространством по умолчанию, но тогда надо обязательно определить префикс идентификатора целевого пространства имен для определяемых в схеме типов и элементов.

В листинге 28.6 для упрощения записи стандартное пространство имен схемы XML с идентификатором сделано пространством имен по умолчанию. Имена, относящиеся к целевому пространству имен, снабжены префиксом ntb, чтобы они не попали в пространство имен по умолчанию.

Листинг 28.6. Схема документа XML с целевым пространством имен

<?xml version=’1.0’?>

<schema xmlns=’

targetNamespace=’ xmlns:ntb=’>

<element name=’notebook’>

<complexType>

<sequence>

<element name=’person’ maxOccurs=’unbounded’> <complexType>

<sequence>

<element name=’name’>

<complexType>

<attribute name=’first’ type=’string’ use=’optional’ />

<attribute name=’second’ type=’string’ use=’optional’ />

<attribute name=’surname’ type=’string’ use=’required’ />

</complexType>

</element>

<element name=’birthdayi>

<simpleType>

<restriction base=istringi>

<pattern value=i[0-9]{2}.[0-9]{2}.[0-9]{4}i />

</restriction>

</simpleType>

</element>

<element name=iaddressi maxOccurs=iunboundedi>

<complexType>

<sequence>

<element name=istreet type=istringi />

<element name=icityi type=istringi />

<element name=izipi type=ipositiveIntegeri />

</sequence>

</complexType>

</element>

<element name=iphone-lisf>

<complexType>

<sequence>

<element name=iwork-phonei type=istringi

minOccurs=i0i maxOccurs=iunboundedi/>

<element name=ihome-phonei type=istringi

minOccurs=i0i maxOccurs=iunboundedi/>

</sequence>

</complexType>

</element>

</sequence>

</complexType>

</element>

</sequence>

</complexType>

</element>

</schema>

Поскольку в листинге 28.6 пространством имен по умолчанию сделано пространство

, префикс xsd не нужен.

Следует заметить, что в целевое пространство имен попадают только глобальные имена, чьи описания непосредственно вложены в элемент <schema>. Это естественно, потому что лишь глобальными именами можно воспользоваться далее в этой или другой схеме. В листинге 28.6 только одно глобальное имя — <notebook>. Вложенные имена name, address и другие всего-навсего ассоциированы с глобальными именами.

В схемах и документах XML часто применяется еще одно стандартное пространство имен. Рекомендация языка XSD определяет несколько атрибутов: type, nil, schemaLocation, noNamespaceSchemaLocation, которые применяются не только в схемах, но и непосредственно в описываемых этими схемами документах XML, называемых экземплярами схем (XML schema instance). Имена этих атрибутов относятся к пространству имен . Данному пространству имен чаще всего приписывают префикс xsi, например: