Gymterview
middle

Какие типы существуют в XSD?

В XSD существуют два основных вида типов: простые (simpleType) и сложные (complexType). Простые типы описывают значения, которые могут быть содержимым элемента или атрибута, но не могут содержать вложенные элементы или иметь атрибуты. Сложные типы описывают элементы, которые могут содержать другие элементы и атрибуты.

Простой тип (simpleType)

Простой тип используется для текстового содержимого без вложенной структуры. XSD предоставляет более 44 встроенных простых типов:

  • xsd:string, xsd:integer, xsd:decimal, xsd:boolean
  • xsd:date, xsd:time, xsd:dateTime
  • xsd: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 — значение плюс структура (как объект). Частая ошибка — забыть, что атрибуты могут иметь только простой тип.