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

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

<xsd:complexType name="calcResultType">

<xsd:simpleContent>

<xsd:extension base="xsd:decimal">

<xsd:attribute name="unit" type="xsd:string" />

<xsd:attribute name="precision"

type="xsd:nonNegativeInteger" />

</xsd:extension>

</xsd:simpleContent>

</xsd:complexType>

Эту конструкцию можно описать словами так: "Определяется тип calcResultType элемента, тело которого содержит значения встроенного простого типа xsd:decimal. Простой тип расширяется тем, что к нему добавляются атрибуты unit и precision".

Если в схеме описать элемент <result> этого типа следующим образом:

<xsd:element name="result" type="calcResultType" />

то в документе XML можно написать

<result unit="cM" precision="2">123.25</result>

В компоненте <restriction> кроме атрибутов описывается простой тип тела элемента и/или фасетки, ограничивающие тип, заданный атрибутом base. Например:

<xsd:complexType name="calcResultType">

<xsd:simpleContent>

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

<xsd:totalDigits value="8" />

<xsd:attribute name="unit" type="xsd:string" />

<xsd:attribute name="precision"

type="xsd:nonNegativeInteger" />

</xsd:restriction>

</xsd:simpleContent>

</xsd:complexType>

Определение типа вложенных элементов

Если значениями определяемого сложного типа будут элементы, содержащие вложенные элементы, как, например, элементы <address>, <phone-list> листинга 28.2, то перед перечислением описания вложенных элементов надо выбрать модель группы (model group) вложенных элементов. Дело в том, что вложенные элементы, составляющие определяемый тип, могут появляться или в определенном порядке, или в произвольном порядке, кроме того, можно выбирать только один из перечисленных элементов. Эта возможность и называется моделью группы элементов. Она определяется одним из трех компонентов: <sequence>, <all> или <choice>.

Компонент <sequence> применяется в том случае, когда перечисляемые элементы должны записываться в документе в конкретном порядке. Пусть, например, мы описываем книгу. Сначала определяем тип:

<xsd:complexType name="bookType">

<xsd:sequence maxOccurs="unbounded">

<xsd:element name="author" type="xsd:normalizedString" minOccurs="0" />

<xsd:element name="title" type="xsd:normalizedString" />

<xsd:element name="pages" type="xsd:positiveInteger" minOccurs="0" />

<xsd:element name="publisher" type="xsd:normalizedString" minOccurs="0" />

</xsd:sequence>

Потом описываем элемент:

<xsd:element name="book" type="bookType" />

Элементы <author>, <title>, <pages> и <publisher> должны входить в элемент <book> именно в таком порядке. В документе XML надо писать:

<book>

<author>H. Ильф, Е. neTpoB</author>

^^^>Золотой тeлeнок</title>

<publisher>Художeствeнная литература</publisher>