Ограничения/Facets XSD

Ограничение (restriction) используется для определения приемлемых значений для XML-элемента или атрибута. Ограничение XML-элемента называется аспектом.

Ограничение значений

Пример, определяющий элемент с ограничением и именем "age". Значение age не может быть меньше 0 или больше 120:

<xs:element name="age">
<xs:simpleType>
  <xs:restriction base="xs:integer">
    <xs:minInclusive value="0"/>
    <xs:maxInclusive value="120"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Ограничение группы значений

Чтобы ограничить содержимое XML элемента группой приемлемых значений, мы используем ограничение перечня (enumeration constraint).

Следующий пример определяет элемент с ограниченным именем "car". Принимаемые значения включают в себя только: Audi, Golf, BMW:

<xs:element name="car">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:enumeration value="Audi"/>
    <xs:enumeration value="Golf"/>
    <xs:enumeration value="BMW"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Предыдущий пример также можно записать следующим образом:

<xs:element name="car" type="carType"/>
<xs:simpleType name="carType">
  <xs:restriction base="xs:string">
    <xs:enumeration value="Audi"/>
    <xs:enumeration value="Golf"/>
    <xs:enumeration value="BMW"/>
  </xs:restriction>
</xs:simpleType>

Комментарий:В этом случае тип "carType" может быть использован другими элементами, так как он не является частью элемента "car".

Ограничение ряда значений

Чтобы ограничить содержимое XML элемента последовательностью используемых чисел или букв, мы используем ограничение шаблона (pattern constraint).

Следующий пример определяет элемент с ограниченным именем "letter". Принимаемые значения представляют собой одну из маленьких букв a - z:

<xs:element name="letter">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[a-z]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Следующий пример определяет элемент с ограниченным именем "initials". Принимаемые значения представляют собой три больших буквы A - Z:

<xs:element name="initials">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[A-Z][A-Z][A-Z]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Следующий пример также определяет элемент с ограниченным именем "initials". Принимаемые значения представляют собой три больших или маленьких буквы a - z:

<xs:element name="initials">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Следующий пример определяет элемент с ограниченным именем "choice". Принимаемые значения включают в себя одну из букв x, y или z:

<xs:element name="choice">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[xyz]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Следующий пример определяет элемент с ограниченным именем "prodid". Принимаемые значения представляют собой последовательность из пяти арабских цифр, и каждая цифра находится в диапазоне от 0 до 9:

<xs:element name="prodid">
<xs:simpleType>
  <xs:restriction base="xs:integer">
    <xs:pattern value="[0-9][0-9][0-9][0-9][0-9]"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Другие ограничения для набора значений

Ниже приведен пример определения элемента с ограничением, называемым "letter". Принимаемые значения - это ноль или несколько букв a - z:

<xs:element name="letter">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="([a-z])*"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Ниже приведен пример определения элемента с ограничением, называемым "letter". Принимаемые значения - это одно или несколько пар букв, каждая пара состоит из маленькой буквы, за которой следует большая буква. Например, "sToP" пройдет проверку по этому шаблону, но "Stop", "STOP" или "stop" не пройдут проверку:

<xs:element name="letter">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="([a-z][A-Z])+"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Ниже приведен пример определения элемента с ограничением, называемым "gender". Принимаемые значения - это male или female:

<xs:element name="gender">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="male|female"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Ниже приведен пример определения элемента с ограничением, называемым "password". Принимаемые значения представляют собой строку из 8 символов, которые должны быть большими или малыми буквами a - z или цифрами 0 - 9:

<xs:element name="password">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:pattern value="[a-zA-Z0-9]{8}"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Ограничение пробельных символов

Чтобы определить способ обработки пробельных символов (пробельных символов), необходимо использовать ограничение whiteSpace.

Ниже приведен пример определения элемента с ограничением, называемым "address". Ограничение whiteSpace установлено в "preserve", что означает, что процессор XML не будет удалять никакие пробельные символы:

<xs:element name="address">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:whiteSpace value="preserve"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Этот пример также определяет элемент с ограничением, называемым "address". Ограничение whiteSpace установлено в "replace", что означает, что процессор XML будет удалять все пробельные символы (переносы строк, возврат каретки, пробелы и табуляторы):

<xs:element name="address">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:whiteSpace value="replace"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Этот пример также определяет элемент с ограничением,名为 "address". Этот ограничитель whiteSpace установлен в "collapse", что означает, что процессор XML удалит все пробельные символы (переносы строк, возврат каретки, пробелы и табуляции будут заменены пробелом, а начальные и конечные пробелы будут удалены, а несколько последовательных пробелов будут сокращены до одного):

<xs:element name="address">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:whiteSpace value="collapse"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Ограничение длины

Чтобы ограничить длину значения элемента, необходимо использовать ограничения length, maxLength и minLength.

Этот пример определяет элемент с ограничением и именем "password". Его значение должно быть точным до 8 символов:

<xs:element name="password">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:length value="8"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Этот пример также определяет элемент с ограничением,名为 "password". Его значение должно быть от 5 до 8 символов:

<xs:element name="password">
<xs:simpleType>
  <xs:restriction base="xs:string">
    <xs:minLength value="5"/>
    <xs:maxLength value="8"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

Ограничение типа данных

Ограничение Описание
enumeration Определяет список приемлемых значений.
fractionDigits Определяет максимальное количество знаков после запятой. Оно должно быть больше или равно 0.
length Определяет точное количество разрешенных символов или элементов списка. Оно должно быть больше или равно 0.
maxExclusive Определяет верхний предел числового значения. Допустимые значения должны быть меньше этого значения.
maxInclusive Определяет верхний предел числового значения. Допустимые значения должны быть меньше или равны этому значению.
maxLength Определяет максимальное количество разрешенных символов или элементов списка. Оно должно быть больше или равно 0.
minExclusive Определяет нижний предел числового значения. Допустимые значения должны быть больше этого значения.
minInclusive Определение минимального значения числа. Разрешенные значения должны быть больше или равно этому значению.
minLength Определение минимального числа разрешенных символов или элементов списка. Значение должно быть больше или равно 0.
pattern Определение точной последовательности разрешенных символов.
totalDigits Определение точного числа разрешенных арабских цифр. Значение должно быть больше 0.
whiteSpace Определение способа обработки пробельных символов (новая строка, возврат каретки, пробел и табуляция).