Документация / XSD

Простые типы

Простой тип описывает значение без вложенных элементов и атрибутов: строку, число, дату. Свой простой тип создают из встроенного тремя способами: ограничением (restriction), списком (list) и объединением (union).

Ограничение и фасеты

xs:restriction сужает базовый тип с помощью фасетов — ограничивающих свойств:

ФасетПрименяется кЗначение
length, minLength, maxLengthстрокам, спискам, двоичным даннымТочная, минимальная, максимальная длина
patternвсемРегулярное выражение (синтаксис XML Schema), привязано ко всей строке
enumerationвсем, кроме booleanОдно из допустимых значений (фасет повторяется)
minInclusive, maxInclusiveчислам, датамГраницы включительно
minExclusive, maxExclusiveчислам, датамГраницы, не включая само значение
totalDigitsдесятичным числамМаксимальное число значащих цифр
fractionDigitsдесятичным числамМаксимальное число цифр после точки
whiteSpaceстрокамpreserve, replace (табы и переводы строк → пробелы), collapse (плюс схлопывание пробелов)
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:simpleType name="Inn">
    <xs:annotation>
      <xs:documentation>ИНН организации (10 цифр) или физического лица (12 цифр)</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:string">
      <xs:pattern value="\d{10}|\d{12}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="Money">
    <xs:restriction base="xs:decimal">
      <xs:minInclusive value="0"/>
      <xs:totalDigits value="15"/>
      <xs:fractionDigits value="2"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="OrderStatus">
    <xs:restriction base="xs:string">
      <xs:enumeration value="new"/>
      <xs:enumeration value="paid"/>
      <xs:enumeration value="shipped"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:element name="payment">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="payerInn" type="Inn"/>
        <xs:element name="amount" type="Money"/>
        <xs:element name="status" type="OrderStatus"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
<payment>
  <payerInn>7707083893</payerInn>
  <amount>15000.50</amount>
  <status>paid</status>
</payment>

Этот документ не пройдёт проверку: у суммы три знака после точки, а статуса нет в перечислении.

<payment>
  <payerInn>7707083893</payerInn>
  <amount>15000.505</amount>
  <status>cancelled</status>
</payment>

Регулярные выражения XSD

Шаблон в xs:pattern всегда проверяет строку целиком — ^ и $ не нужны (и не поддерживаются). Кроме обычных классов (\d, \s, [а-я]) есть классы XML: \i — символ, с которого может начинаться имя XML, \c — символ имени, \p{L} — любая буква Unicode. Нельзя использовать опережающие проверки и нежадные квантификаторы.

Список

xs:list — значение из нескольких элементов простого типа через пробел:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:simpleType name="Sizes">
    <xs:list itemType="xs:positiveInteger"/>
  </xs:simpleType>
  <xs:element name="sizes" type="Sizes"/>
</xs:schema>
<sizes>42 44 46 48</sizes>

Объединение

xs:union — значение одного из нескольких типов. Пример: размер одежды числом или буквенным обозначением.

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:simpleType name="LetterSize">
    <xs:restriction base="xs:string">
      <xs:enumeration value="S"/>
      <xs:enumeration value="M"/>
      <xs:enumeration value="L"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="Size">
    <xs:union memberTypes="xs:positiveInteger LetterSize"/>
  </xs:simpleType>
  <xs:element name="size" type="Size"/>
</xs:schema>
<size>M</size>

Обновлено: 30 сентября 2026 г.