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

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

minOccurs="наименьшее число появлений элемента в документе" maxOccurs="наибольшее число появлений" />

Значение по умолчанию необязательных атрибутов minOccurs и maxOccurs равно 1. Это означает, что если эти атрибуты отсутствуют, то элемент должен появиться в документе XML ровно один раз. Определение типа элемента можно вынести в тело элемента

<element>:

<xsd:element name="имя элемента" >

Определение типа элемента </xsd:element>

Описание атрибута элемента тоже несложно:

<xsd:attribute name="имя■ атрибута" type="тип атрибута"

use="обязательность атрибута" default="значение по умолчанию" />

Необязательный атрибут use принимает три значения:

□ optional — описываемый атрибут необязателен (это значение по умолчанию);

□ required — описываемый атрибут обязателен;

□ prohibited — описываемый атрибут неприменим. Это значение полезно при определении подтипа, чтобы отменить некоторые атрибуты базового типа.

Если описываемый атрибут необязателен, то атрибутом default можно задать его значение по умолчанию.

Определение типа атрибута — а это должен быть простой тип — можно вынести в тело элемента <attribute>:

<xsd:attribute name="имя■ атрибута">

Тип атрибута </xsd:attribute>

Определение сложных типов

Напомним, что тип элемента называется сложным, если в элемент вложены другие элементы и/или в открывающем теге элемента есть атрибуты.

Сложный тип определяется компонентом <complexType>, имеющим вид:

<xsd:complexType name=" имя типа" >Определение типа</xsd:complexType>

Необязательный атрибут name задает имя типа, а в теле компонента <complexType> описываются элементы, входящие в сложный тип, и/или атрибуты открывающего тега.

Определение сложного типа можно разделить на определение типа пустого элемента, элемента с простым телом и элемента, содержащего вложенные элементы. Рассмотрим эти определения подробнее.

Определение типа пустого элемента

Проще всего определяется тип пустого элемента — элемента, не имеющего тела, а содержащего только атрибуты в открывающем теге. Таков, например, элемент <name> из листинга 28.2. Каждый атрибут описывается одним компонентом <attribute>, например:

<xsd:complexType name="imageType">

<xsd:attribute name="href" type="xsd:anyURI" />

</xsd:complexType>

После этого определения можно в схеме описать элемент <image> типа imageType:

<xsd:element name="image" type="imageType" />

а в документе XML использовать это описание:

<image href="" />

Определение типа элемента с простым телом

Немного сложнее описание элемента, содержащего тело простого типа и атрибуты в открывающем теге. Этот тип отличается от простого типа только наличием атрибутов и определяется компонентом <simpleContent>. В теле данного компонента должен быть либо компонент <restriction>, либо компонент <extension>, атрибутом base задающий тип (простой) тела описываемого элемента.

В компоненте <extension> описываются атрибуты открывающего тега описываемого элемента. Все вместе выглядит так, как в следующем примере: