XSD Сложные элементы
Сложные элементы содержат другие элементы и/или атрибуты.
Что такое сложный элемент?
Сложный элемент — это XML-элемент, который содержит другие элементы и/или атрибуты.
Существует четыре типа сложных элементов:
- Пустые элементы
- Элементы, содержащие другие элементы
- Элементы, содержащие только текст
- Элементы, которые содержат как элементы, так и текст
Примечание:Все вышеперечисленные элементы могут содержать атрибуты!
Примеры сложных элементов
Сложный элемент "product" пуст:
Сложный элемент "employee" содержит только другие элементы:
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
Сложный XML-элемент "food" содержит только текст:
Сложный XML-элемент "description" содержит как элементы, так и текст:
Это случилось
</description>
Как определить сложный элемент?
Посмотрите на этот сложный XML-элемент "employee", который содержит только другие элементы:
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
В XML Schema есть два способа определить сложный элемент:
1. Присвоив имя этому элементу, можно напрямую объявить элемент "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>
Если вы используете описанный выше метод, то только "employee" сможет использовать указанный сложный тип. Обратите внимание, что его дочерние элементы "firstname" и "lastname" заключены в индикатор <sequence>. Это означает, что дочерние элементы должны появляться в том порядке, в котором они объявлены. Вы узнаете больше об индикаторах вXSD Indicatorsразделе.
2. Элемент "employee" может использовать атрибут type, который используется для ссылки на имя используемого сложного типа:
<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="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: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>