Xsd Ограничения I Facets
Ограничения на значения
<xs:element name="age"> <xs:simpleType> <xs:restriction base="xs:integer"> <xs:minlnclusive value="0'7> <xs:maxlnclusive value-"! 20"/> </xs:restriction> </xs:simpleType> </xs:element>
Ограничение в виде набора
значений
Для ограничения содержимого XML-элемента в виде набора допустимых значений используется ограничение- перечисление (enumeration constraint).
Пример (v.1)
<xs:element name="car"> <xs:simpleType>
<xs: restriction base="xs:string"> <xs:enumeration value="Audi"/> <xs:enumeration value="Mercedes"/> <xs:enumeration value="BMW"/> </xs:restriction> </xs:simpleType> </xs:element>
Пример (v.2)
<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: restrict ion > </xs:simpleType>
В данном случае тип "сагТуре" может быть использован другими элементами, потому что он не является частью элемента "саг".
Ограничение последовательности значений
Для ограничения содержимого XML- элемента в виде заданной последовательности допустимых чисел
или букв, применяется шаблон (XSD- элемент pattern).
Допустимым значением является ОДНА буква в НИЖНЕМ РЕГИСТРЕ от а до z:
<xs:element name="letter"> <xs:simpleType> <xs:restriction base="xs:string">
<xs: pattern value="[a-z]'7> </xs:restriction> </xs:simpleType> </xs:element>
Допустимым значаением являются ТРИ буквы в ВЕРХНЕМ РЕГИСТРЕ от а до z:
<xs:element name="initials"> <xs:simpleType> <xs:restriction base="xs:string">
<xs: pattern value="[A-Z][A-Z][A-Z]7> </xs:restriction> </xs:simpleType> </xs:element>
Допустимым значением являются ТРИ буквы в
НИЖНЕМ ИЛИ ВЕРХНЕМ РЕГИСТРЕ от а до z:
<xs:element name="initials"> <xs:simpleType> <xs: restriction base="xs:string">
<xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]7> </xs:restriction> </xs:simpleType> </xs:element>
Допустимым значением является ОДНА из следующих букв: t, у или z:
<xs:element name="choice"> <xs:simpleType> <xs:restriction base="xs:string">
<xs: pattern value="[tyz]"/> </xs:restriction> </xs:simpleType> </xs:element>
Допустимым значением является ПЯТЬ цифр, каждая из которых должна находиться в диапазоне от 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>
Допустимым значаением является
ноль, один или много вхождений букв от а до z в нижнем регистре:
<xs:element name="letter"> <xs:simpleType> <xs:restriction base="xs:string">
<xs: pattern value="([a-z])*7> </xs:restriction> </xs:simpleType> </xs:element>
Допустимым значением является одна или несколько пар букв. При этом каждая пара должна состоять из одной буквы в нижнем регистре, за которой следует одна буква в верхнем регистре.
Например, значение "sToP" будет удовлетворять этом шаблону, но не значения "Stop", "STOP" или "stop":
<xs:element name="letter"> <xs:simpleType> <xs: restriction base="xs:string">
<xs: pattern va Iue="([a-z][A-Z])+''/> </xs:restriction> </xs:simpleType> </xs:element>
Допустимыми значениями являются только «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 символов, являющихся либо буквами от а до z в верхнем или нижнем регистре, либо числами в диапазоне от 0 до 9:
<xs:element name="password"> <xs:simpleType> <xs: rest г i cti о n base="xs: st г i n g" >
<xs:pattern value="[a-zA-Z0-9]{8}'7> </xs: restriction > </xs:simpleType> </xs:element>
Ограничения на пробелы
Для определения политики обработки пробелов и других непечатных символов используется XSD-атрибут
whites расе.
Если ограничение whites расе установлено в
"preserve", XML-процессор НЕ БУДЕТ удалять служебные символы:
<xs:element name="address"> <xs:simpleType> <xs: restriction base="xs:string">
<xs: wh iteS pace val u e="prese rve' '/> </xs:restriction> </xs:simpleType> </xs:element>
Если ограничение whites расе установлено в
"replace", XML-процессор БУДЕТ ЗАМЕНЯТЬ все служебные сим волы (пере вод строки, символы табуляции, символы возврата каретки) на пробелы:
<xs:element name="address"> <xs:simpleType> <xs: restriction base="xs:string">
<xs:whiteSpace value="replace"/> </xs:restriction> </xs:simpleType> </xs:element>
Если ограничение whiteSpace установлено в "collapse", XML-процесс op БУДЕТ УДАЛЯТЬ все служебные символы (переводы строк, символы табуляции, символы возврата каретки будут заменены пробелами, пробелы в начале и конце значения будут удалены, множественные пробелы, идущие подряд будут уменьшены до одного пробела):
<xs:element name="address"> <xs:simpleType> <xs: restriction base="xs:string"> <xs: whiteSpace value="collapse7> </xs:restriction> </xs:simpleType> </xs:element>
Ограничения на длину
Для декларации длины значения элемента используются ограничения length, maxLength и minLength.
Значение элемента должно иметь длину ровно в восемь символов:
<xs:element name="password"> <xs:simpleType> <xs:restriction base="xs:string">
<xs:length value="8'7> </xs:restriction> </xs:simpleType> </xs:element>
Значение элемента должно иметь длину
минимум в пять символов, максимум в восемь символов:
<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 |
Определяет перечень допустимых значения. |
fraction Dig its |
Определяет максимально допустимое число символов после запятой. Должно быть неотрицательным. |
maxExclusive minExclusive |
Определяет верхнюю (нижнюю) границу числового значение. Значение less должно быть строго меньше (больше) данной границы. |
maxlnclusive minlnclusive |
Определяет верхнюю (нижнюю) границу числового значение. Значение less должно быть меньше (больше) данной или равно данной границе. |
Ограничения для типов данных
(часть 2)
Ограничение |
Описание |
length |
Определяет точное число символов в значении элемента. Должно быть неотрицательным. |
maxLength minLength |
Определяет максимальное (минимальное) допустимое число символов в значении элемента. Должно быть неотрицательным. |
pattern |
Определяет точную последовательность допустимых символов. |
total Dig its |
Определяет точное разрешенное число цифр. Должно быть неотрицательным. |
whiteSpace |
Определяет политику обработки непечатных символов (переводов строки, символов табуляции, пробелов, и символов возврата каретки). |
Сложные (составные) элементы XSD
(Complex Elements)
Сложными являются XML-элементы, которые
содержат другие элементы и/или атрибуты.
Существует четыре вида сложных элементов:
пустые элементы;
элементы, которые содержат только другие элементы;
элементы, которые содержат только текст;
элементы, которые содержат и текст и другие элементы.
Примеры сложных элементов (1 -2)
Сложный XML-элемент, "product", который является пустым:
<product pid="1345"/>
Сложный XML-элемент, "employee", который содержит только другие элементы:
<employee> <firstname>John</firstname> <lastname>Smith</lastname> </employee>
Примеры сложных элементов (3-4)
Сложный XML-элемент, "food", который
содержит только текст:
<food type="dessert">lce cream</food>
Сложный XML-элемент, "description",
который содержит и текст, и другие элементы:
<description> It happened on <date lang="norwegian">03.03.99</date> .... </description>
Объявление сложного элемента
Пример XML-элемента, "employee", который содержит только другие элементы:
<employee> <firstname>John</firstname> <lastname>Smith</lastname> </employee>
Сложный элемент, как и простой, может быть объявлен в XML Schema двумя различными способами.
Элемент "employee" может быть объявлен напрямую посредством перечисления входящих в него элементов:
<xs:element name="employee"> <xs:complexType> <xs:sequence> <xs:element name="firstname" type="xs:string'7> <xs:element name="lastname" type="xs:string'7> </xs:sequence> </xs: со m p I exTy pe > </xs:element>
Комментарии
Только элемент "employee" может использовать созданный сложный тип.
Дочерние элементы "firstname" и "lastname" обърнуты индикатором <sequence>. Это означает, что дочерние элементы должны включаться в родительски в том же самом порядке, в котором они объявлены.
Элемент "employee" может содержать атрибут type, который ссылается на имя используемого сложного типа:
<xs:element name-'employee" type="persoriirifo"/>
<xs:complexType name="persoriirifo"> <xs:sequence> <xs:elemerit riame="firstriame" type="xs:string"/> <xs:elemerit riame="lastriame" type="xs:string"/> </xs:sequerice> </xs:complexType>
Комментарии
Множество элементов может ссылаться на один и тот же слодный тип, например:
<xs:element name-'employee" type="personinfo"/> <xs:element name-'student"type="personinfo"/> <xs:element name="teacher" type="personinfo"/>
<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:element name-'employee" type="fullpersoninfo7>
<xs:complexType name="personinfo"> <xs:sequence> <xs:element name="firstname" type="xs:string7> <xs:element name="lastname" type="xs:string7> </xs:sequence> </xs:complexType>
<xs:complexType name-'fullpersoninfo'^ <xs:complexContent> <xs:extension base="personinfo"> <xs:sequence> <xs:element name-'address" type="xs:string7> <xs:element name="city" type="xs:string7> <xs:element name-'country" type="xs:string7> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType>
Сложные пустые элементы
Пустой XML-элемент: <product prodid="1345" />
Для создания типа без содержимого, требуется создать тип, который определяет допустимые элементы, но не определить ни одного допустимого элемента:
<xs:element name="product"> <xs:complexType> <xs: attribute name-'prodicT type="xs: positive I nteger"/> </xs:complexType>
</xs:element>
Сложный тип, содержащий только элементы
Пример-XML-элемент, "person", который содержит только другие элементы:
<person> <firstname>John</firstname> <lastname>Smith</lastname> </person>
Фрагмент XSD для элемента "person":
<xs:element name="person"> <xs:complexType> <xs:sequence> <xs:element name-'firstname" type="xs:string"/> <xs:element name="lastname" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element>