Определение новых типов простых элементов
Кроме встроенных типов в схемах XML можно определить новые типы простых элементов. Они вводятся как
- сужение (restriction) встроенного или ранее определенного простого типа,
- список (list) простых типов
- объединение (union) простых типов.
Сужение простого типа определяется компонентом restriction, в котором атрибут base указывает сужаемый простой тип, а в содержимом задаются ограничения, выделяющие определяемый простой тип.
Теги задающие ограничения, называются фасетками (facets). Вот их список:
- <maxExclusive> - наибольшее значение, которое уже не входит в определяемый тип;
- <maxInclusive> - наибольшей значение определяемого типа;
- <minExclusive> - наименьшее значение, уже не входящее в определяемый тип;
- <minInclusive> - наименьшее значение определяемого типа;
- <totalDigits> - общее количество цифр в определяемом числовом типе - сужении типа decimal;
- <fractionDigits> - количество цифр в дробной части числа;
- <length> - длина значений определяемого типа;
- <maxLength> - наибольшая длина значений определяемого типа;
- <minLength> - наименьшая длина значений определяемого типа;
- <enumeration> - одно из перечислимых значений;
- <pattern> - регулярное выражение;
- <whitespace> - применяется при сужении типа string и определяет способ преобразования пробельных символов <'>\n<'>, <'>\r<'>, <'>\t. Атрибут value этого тега принимает одно из трех значений:
- preserve - не убирать пробельные символы;
- replace - заменить пробельные символы пробелами;
- collapse - после замены пробельных символов пробелами убрать начальные и конечные пробелы, а из нескольких подряд идущих пробелов оставить только один.
В тегах-фасетках можно записывать следующие атрибуты, называемые базисными фасетками (fundamental facets):
- ordered- задает упорядоченность определяемого типа, принимает одно из трех значений:
- false - тип неупорядочен;
- partial - тип частично упорядочен;
- total - тип полностью упорядочен;
- bounded - задает ограниченность или неограниченность типа значением true или false;
- cardinality - задает конечность или бесконечность типа значением finite или countably infinite;
- numeric - показывает, числовой этот тип или нет, значением true или false.
Список определяется компонентом list, в котором атрибутом itemType указывается тип элементов определяемого списка. Тип элементов списка можно определить и в содержимом элемента list.
При определении списка можно применять фасетки <length>, <minLength>, <maxLength>, <enumeration>, <pattern>.
Простой тип-объединение определяется компонентом union, в котором атрибутом memberTypes можно указать имена объединяемых типов. Например:
<xsd: union memberTypes="xsd: string xsd; integer lisstOfInteger" />
Другой способ - записать в содержимом компонента union определения простых типов, входящих в объединение.