XSD Сложные элементы


Сложные элементы содержат другие элементы и/или атрибуты.


Что такое сложный элемент?

Сложный элемент — это XML-элемент, который содержит другие элементы и/или атрибуты.

Существует четыре типа сложных элементов:

  • Пустые элементы
  • Элементы, содержащие другие элементы
  • Элементы, содержащие только текст
  • Элементы, которые содержат как элементы, так и текст

Примечание:Все вышеперечисленные элементы могут содержать атрибуты!


Примеры сложных элементов

Сложный элемент "product" пуст:

<product pid="1345"/>

Сложный элемент "employee" содержит только другие элементы:

<employee>
  <firstname>John</firstname>
  <lastname>Smith</lastname>
</employee>

Сложный XML-элемент "food" содержит только текст:

Мороженое

Сложный XML-элемент "description" содержит как элементы, так и текст:

<description>
Это случилось 03.03.99 ....
</description>


Как определить сложный элемент?

Посмотрите на этот сложный XML-элемент "employee", который содержит только другие элементы:

<employee>
  <firstname>John</firstname>
  <lastname>Smith</lastname>
</employee>

В XML Schema есть два способа определить сложный элемент:

1. Присвоив имя этому элементу, можно напрямую объявить элемент "employee", вот так:

<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>

Если вы используете описанный выше метод, то только "employee" сможет использовать указанный сложный тип. Обратите внимание, что его дочерние элементы "firstname" и "lastname" заключены в индикатор <sequence>. Это означает, что дочерние элементы должны появляться в том порядке, в котором они объявлены. Вы узнаете больше об индикаторах вXSD Indicatorsразделе.

2. Элемент "employee" может использовать атрибут type, который используется для ссылки на имя используемого сложного типа:

<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>
Другие расширения