Комплексные элементы XSD

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

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

Составной элемент指的是包含其他元素及/или атрибутов XML элемент.

Есть四种类型的 составных элементов:

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

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

Пример составного элемента

Составной элемент, "product", пуст:

<product pid="1345"/>

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

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

Составной элемент, "food", содержит только текст:

<food type="dessert">Мороженое</food>

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

<description>
Это произошло <date lang="norwegian">03.03.99</date> ....
</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 В этом разделе вы узнаете больше о индикаторах.

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>