XSD элемент complexType

Элемент complexType определяет сложный тип. Элемент сложного типа может содержать другие элементы и/или атрибуты.

  • Родительские элементы: element, redefine, schema

Синтаксис элемента


<complexType
 id=идентификатор
 name=NCName
 abstract=true | false
 mixed=true | false
 block=(#all | список (extension|restriction))
 final=(#all | список (extension|restriction))
 любые атрибуты
 >

 (annotation?, (simpleContent | complexContent | ((group | all | choice | sequence)?,
 ((attribute|attributeGroup)*, anyAttribute?))))

</complexType>

(Знак ? указывает на то, что элемент может появляться ноль или один раз, знак * указывает на то, что элемент может появляться ноль, один или больше раз внутри элемента complexType.)

Атрибуты элемента

АтрибутОписание
idНе обязательный. Определяет уникальный идентификатор для элемента
nameНе обязательный. Определяет имя элемента
abstractНе обязательный. Определяет, можно ли использовать этот сложный тип в документе. Значение true определяет, что элемент не может использовать данный сложный тип напрямую, а должен сначала определить новый сложный тип, производный от него. Значение по умолчанию false
mixedНе обязательный. Определяет, могут ли символьные данные появляться между дочерних элементов данного элемента complexType. Значение по умолчнию false. Если дочерним является элемент simpleContent, то атрибут mixed использовать нельзя!
block

Не обязательный. Препятствует использованию сложного типа, который имеет заданный тип наследования, вместо данного сложного типа. Может принимать значение #all или список из расширений/ограничений:

  • extension — запрещает использование сложных типов, производных при помощи расширения
  • restriction — запрещает использование сложных типов, производных при помощи ограничения
  • #all — запрещает использование сложных типов, производных при помощи всех методов
final

Не обязательный. Запрещает указанный метод наследования сложного типа. Может принимать значение #all или список из расширений/ограничений:

  • extension — запрещает наследование сложных типов при помощи расширения
  • restriction — запрещает наследование сложных типов при помощи ограничения
  • #all — запрещает все методы наследования
любые атрибутыНе обязательный. Любые другие атрибуты вне пространства имен схемы

Пример использования

Пример №1
В следующем примере декларируется элемент "note" сложного типа:


<xs:element name="note">
   <xs:complexType>
     <xs:sequence>
       <xs:element name="to" type="xs:string"/>
       <xs:element name="from" type="xs:string"/>
       <xs:element name="heading" type="xs:string"/>
       <xs:element name="body" type="xs:string"/>
     </xs:sequence>
   </xs:complexType>
</xs:element>

Пример №2
В следующем примере декларируется сложный тип "fullpersoninfo", производный от другого сложного типа "personinfo" путем расширения наследуемого типа тремя дополнительными элементами (address, city и country):


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

В этом примере элемент "employee" должен содержать последовательно следующие элементы: "firstname", "lastname", "address", "city" и "country".