Описание сложных элементов
При описании документов, имеющих сложную иерархическую структуру, можно сначала определить все элементы и атрибуты, а затем ссылаться на них.
Рассмотрим следующий пример:
<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>
Дата добавления: 2015-12-29; просмотров: 767;