Читать «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, называемых