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

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

Далее в листинге 28.4 определяются оставшиеся типы: addressType, phone-listType и ruDate. Необходимость определения простого типа ruDate возникает потому, что встроенный в схему XML тип date предписывает задавать дату в виде 2004-10-22, а в России принят формат 22.10.2004. Тип ruDate определяется как сужение (restriction) типа string с помощью шаблона. Шаблон (pattern) для записи даты в виде дц.мм.гггг задается регулярным выражением.

Безымянные типы

Все описанные в листинге 28.4 типы используются только один раз. Поэтому необязательно давать типу имя. Схема XML, как говорилось ранее, позволяет определять безымянные типы. Такое определение дается внутри описания элемента. Именно так в листинге 28.4 описаны атрибуты элемента name. В листинге 28.5 показано упрощенное описание схемы адресной книги.

Листинг 28.5. Схема документа XML с безымянными типами

<?xml version=,1.0,?>

<xsd:schema xmlns:xsd=’

targetNamespace='>

<xsd:element name='notebook'>

<xsd:complexType>

<xsd:sequence>

<xsd:element name=iperson’ maxOccurs=iunbounded’>

<xsd:complexType>

<xsd:sequence>

<xsd:element name=’name’>

<xsd:complexType>

<xsd:attribute name=,first' type=’xsd:string’ use=’optional’ /> <xsd:attribute name='second' type=’xsd:string’ use=’optional’ /> <xsd:attribute name='surnamel type=’xsd:string’ use=’required’ /> </xsd:complexType>

</xsd:element>

<xsd:element name=’birthday’>

<xsd:simpleType>

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

<xsd:pattern value=’[0-9]{2}.[0-9]{2}.[0-9]{4}’ /> </xsd:restriction>

</xsd:simpleType>

</xsd:element>

<xsd:element name=’address’ maxOccurs=’unbounded’>

<xsd:complexType>

<xsd:sequence>

<xsd:element name=’street’ type=’xsd:string’ />

<xsd:element name=’cityi>

<xsd:complexType>

<xsd:simpleContent>

<xsd:extension base=’xsd:string’>

<xsd:attribute name=’type’ type=’xsd:string’

use=’optional’ default=’gorod’ />

</xsd:extension>

</xsd:simpleContent>

</xsd:complexType>

</xsd:element>

<xsd:element name=’zip’ type=’xsd:positiveIntegeri />

</xsd:sequence>

</xsd:complexType>

</xsd:element>

<xsd:element name=’phone-list’>

<xsd:complexType>

<xsd:sequence>

<xsd:element name=’work-phone’ type=’xsd:string’

minOccurs=’0’ maxOccurs=’unbounded’ />

<xsd:element name=’home-phone’ type=’xsd:string’

minOccurs=’0’ maxOccurs=’unbounded’ />

</xsd:sequence>

</xsd:complexType>

</xsd:element>

</xsd:sequence>

</xsd:complexType>

</xsd:element>

</xsd:sequence>

</xsd:complexType>

</xsd:element>

</xsd:schema>

Еще одно упрощение можно сделать, используя пространство имен по умолчанию. Посмотрим, какие пространства имен применяются в схемах XML.

Пространства имен языка XSD