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

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

Рассмотрим следующий пример:

<employee>

<firstname>John</firstname>

<lastname>Smith</lastname>

</employee>

Сложный элемент в схеме можно определить следующим образом:

<example><xs:element name="firstname" type="xs:string"/>

<xs:element name="lastname" type="xs:string"/>

<xs:element name="employee">

<xs:complexType>

<xs:sequence>

<xs:element ref="firstname"/>

<xs:element ref="lastname"/>

</xs:sequence>

</xs:complexType>

</xs:element>

Другой подход заключается в повторном использовании именованных элементов.

  • Элемент "employee" element может быть объявлен непосредственно по имени:

· <xs:element name="employee">

· <xs:complexType>

· <xs:sequence>

· <xs:element name="firstname" type="xs:string"/>

· <xs:element name="lastname" type="xs:string"/>

· </xs:sequence>

· </xs:complexType>

· </xs:element>

Поскольку дочерние элементы "firstname" и "lastname" окружены индикатором <sequence>, то они должны в документе появляться именно в этой последовательности.

  • Элемент "employee" может иметь атрибут типа, ссылающийся на имя сложного типа:

· <xs:element name="employee" type="personinfo"/>

·

· <xs:complexType name="personinfo">

· <xs:sequence>

· <xs:element name="firstname" type="xs:string"/>

· <xs:element name="lastname" type="xs:string"/>

· </xs:sequence>

· </xs:complexType>

Несколько элементов могут ссылаться на тот же самый сложный тип:

<xs:element name="employee" type="personinfo"/>

<xs:element name="student" type="personinfo"/>

<xs:element name="member" type="personinfo"/>

<xs:complexType name="personinfo">

<xs:sequence>

<xs:element name="firstname" type="xs:string"/>

<xs:element name="lastname" type="xs:string"/>

</xs:sequence>

</xs:complexType>

Также можно строить сложный элемент на базе существующего сложного элемента с добавлением нескольких элементов:

<xs:element name="employee" type="fullpersoninfo"/>

<xs:complexType name="personinfo">

<xs:sequence>

<xs:element name="firstname" type="xs:string"/>

<xs:element name="lastname" type="xs:string"/>

</xs:sequence>

</xs:complexType>

<xs:complexType name="fullpersoninfo">

<xs:complexContent>

<xs:extension base="personinfo">

<xs:sequence>

<xs:element name="address" type="xs:string"/>

<xs:element name="city" type="xs:string"/>

<xs:element name="country" type="xs:string"/>

</xs:sequence>

</xs:extension>

</xs:complexContent>

</xs:complexType>

Пустой сложный элемент не может иметь содержимого, только атрибуты.

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

Всего используется семь индикаторов:

  • Индикатор порядка (Order):
    • All
    • Choice
    • Sequence
  • Индикатор вхождения (Occurrence):
    • maxOccurs
    • minOccurs
  • Групповые (Group) индикаторы:
    • Group name
    • attributeGroup name

Пример:

<xs:element name="person">

<xs:complexType>

<xs:sequence>

<xs:element name="full_name" type="xs:string"/>

<xs:element name="child_name" type="xs:string" maxOccurs="10"/>

</xs:sequence>

</xs:complexType>

</xs:element>


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: