Какие типы существуют в XSD?
В XSD существуют два основных вида типов: простые (simpleType) и сложные (complexType). Простые типы описывают значения, которые могут быть содержимым элемента или атрибута, но не могут содержать вложенные элементы или иметь атрибуты. Сложные типы описывают элементы, которые могут содержать другие элементы и атрибуты.
Простой тип (simpleType)
Простой тип используется для текстового содержимого без вложенной структуры. XSD предоставляет более 44 встроенных простых типов:
xsd:string,xsd:integer,xsd:decimal,xsd:booleanxsd:date,xsd:time,xsd:dateTimexsd:anyURI,xsd:base64Binary
Пример
<xsd:element name="price" type="xsd:decimal"/>
...
<price>45.50</price>
Можно создавать пользовательские простые типы с ограничениями (facets):
Пример
<xsd:simpleType name="ageType">
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="0"/>
<xsd:maxInclusive value="150"/>
</xsd:restriction>
</xsd:simpleType>
Сложный тип (complexType)
Сложный тип описывает элементы с вложенной структурой и/или атрибутами:
Пример
<xsd:element name="price">
<xsd:complexType base="xsd:decimal">
<xsd:attribute name="currency" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
...
<price currency="US">45.50</price>
Сравнение
| Критерий | simpleType | complexType |
|---|---|---|
| Вложенные элементы | Нет | Да |
| Атрибуты | Нет | Да |
| Текстовое содержимое | Да | Да (с simpleContent) |
| Примеры | string, integer, date | Элемент с дочерними элементами |
| Использование в атрибутах | Да | Нет |
На собеседовании: достаточно объяснить разницу между простым и сложным типом одной фразой: simpleType — только значение (как примитив), complexType — значение плюс структура (как объект). Частая ошибка — забыть, что атрибуты могут иметь только простой тип.