Элемент 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 или список из расширений/ограничений:
|
final | Не обязательный. Запрещает указанный метод наследования сложного типа. Может принимать значение #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".