Сужение простого типа определяется компонентом <restriction> в котором атрибут base указывает сужаемый простой тип, а в теле задаются ограничения, выделяющие определяемый простой тип. Например, почтовый индекс zip можно определить как шесть арабских цифр следующим образом:
<xsd:simpleType name="zip”>
<xsd:restriction base="xsd:string">
<xsd:patternvalue="[0-9] {6}” />
</xsd:restriction>
</xsd:simpleType>
Можно дать другое определение простого типа zip как целого положительного числа, находящегося в диапазоне от 100000 до 999999:
<xsd: simpleType name="zip">
<xsd:restriction base=,”xsd:positiveInteger">
<xsd:minInclusive value="100000"/>
<xsd:maxInclusive value=”999999"/>
</xsd:restriction>
</xsd:simpleType>
Теги <pattern>, <maxInclusive> и другие теги, задающие ограничения, называются фасетками (facets). Вот их список:
• <maxExclusive> — наибольшее значение, оно уже не входит в определяемый тип;
• <maxInclusive> — наибольшее значение определяемого типа;
• <minExclusive> — наименьшее значение, уже не входящее в определяемый тип;
• <minInclusive> — наименьшее значение определяемэго типа;
|
|
• <totalDigits> — общее количество цифр в определяемом числовом типе — сужении типа. decimal;
• <fractionDigits> — количество цифр в дробной части числа;
• <length> —длина значений определяемого типа;
• <maxLength> — наибольшая длина значений определяемого типа;
• <minLength> — наименьшая длина значений определяемого типа;
• <enumeration> — одно из перечисляемых значений;
• <pattern> — регулярное выражение;
• <whitespace> — применяется при сужении типа string и определяет способ преобразования пробельных символов '\n', '\r', '\t' Атрибут value этого тега принимает одно из трех значений:
• preserve — не убирать пробельные символы,
• replace — заменить пробельные символы пробелами,
• collapse — после замены пробельных символов пробелами убрать начальные и конечные пробелы, а из нескольких подряд идущих пробелов оставить только один.
В тегах-фасетках можно записывать следующие атрибуты, называемые базисными фасетками (fundamentalfacets):
• ordered — задает упорядоченность определяемого типа, принимает одно из трех значений:
• false — тип не упорядочен,
• partial — тип частично упорядочен,
• total — тип полностью упорядочен;
• bounded — задает ограниченность или неограниченность типа значениями true или false;
• cardinality — задает конечность или бесконечность типа значениями finite или countably infinite;
• numeric — показывает, числовой этот тип или нет, значениями true или false.
Как видно из приведенных выше и ниже примеров, в одном сужении может быть несколько ограничений-фасеток. При этом фасетки <pattern> и <enumeration> задают независимые друг от друга ограничения, их можно мысленно объединить союзом "или". Остальные фасетки задают общие, совместно накладываемые ограничения, их можно мысленно объединить союзом "и".
|
|
Список
Простой тип-список — это тип элементов, в теле которых записывается, через пробел, несколько значений одного и того же простого типа. Например, в документе XML может встретиться такой элемент, содержащий список целых чисел:
<days>21 34 55 4 6</<days>
Список определяется компонентом <list>, в котором атрибутом itemType указывается тип элементов определяемого списка. Тип элементов списка можно определить и в теле элемента <list>. Например, показанный выше элемент документа XML <days> можно определить в схеме так:
<xsd:element name=”days” type="listOfInteger” />
а использованный при его определении тип listOfInteger задать как список не более чем из пяти целых чисел следующим образом:
<xsd: simpleType name="listOfInteger">
<xsd:restriction>
<xsd:simpleType>
<xsd:list itemType="xsd:integer” />
</xsd: simpleType>
<xsd:maxLength value="5" />
</xsd:restriction>
</xsd:simpleType>
При определении списка можно применять фасетки <length>, <minLength>, <maxLength>, <enumeration>, <pattern>. В приведенном выше примере список — тело элемента <days> — не может содержать более пяти чисел.