- •Оглавление
- •1. История появления xml и его особенности. Хорошо оформленный документ
- •2. Структура документа xml. Верный документ
- •3. Ссылки на сущности, секция cdata. Комментарии, атрибуты, имена
- •4. Пространства имён xml. Инструкции по обработке
- •5. Конструкции dtd: объявление типа элемента, объявление атрибутов
- •6. Конструкции dtd: объявление сущности, объявление обозначения
- •7. Размещение описания dtd. Программы-анализаторы xml
- •8. Описание схемы документа на языке xsd. Встроенные простые типы
- •9. Определение новых простых типов в xsd
- •10. Объявление элементов и их атрибутов в xsd
- •11. Определение сложных типов в xsd
- •12. Пространства имён языка xsd. Связь документа xml со своей схемой
- •13. Создание ссылок на языке xLink. Пространство имён языка xLink
- •14. Атрибуты, используемые при создании ссылок на языке xLink
- •15. Типы ссылок, создаваемых на языке xLink
- •16. Создание банка ссылок. Программы-обработчики атрибутов xLink
- •17. Таблицы стилей css в языке xml. Язык описания стилей xsl
- •18. Язык записи преобразований xslt бред, не стала разбираться, что из этого надо, а что нет
9. Определение новых простых типов в xsd
В схемах XML с помощью встроенных типов можно тремя способами определить новые типы простых элементов. Они вводятся как сужение встроенного или ранее определенного простого типа, список или объединение простых типов.
Простой тип определяется компонентом схемы simpieType, имеющим вид
<xsd:simpleType name="имя типа">Определение типа</xsd:simpleType>
Сужение простого типа определяется компонентом restriction, в котором атрибут base указьшает сужаемый простой тип, а в содержимом задаются ограничения, выделяющие определяемый простой тип. Например, почтовый индекс zip можно определить как шесть арабских цифр следующим образом:
<xsd:simpleType name="zip">
<xsd:restriction base="xsd:string">
<xsd:pattern valuer"[0-9]{6}" /> </xsd:restriction>
</xsd:simpleType>
Можно дать другое определение простого типа zip как целого положительного числа, находящегося в диапазоне от 100000 до 999999:
<xsd:simpleType name="zip">
<xsd:restriction base="xsd:positiveInteger">
<xsd:minlnclusive value="100000" />
<xsd:maxlnclusive value="999999" /> </xsd:restriction>
</xsd:simpleType>
Теги <pattern>, <jnaxinciusive> и др., задающие ограничения, называются фасетками:
<maxExciusive> — наибольшее значение, которое уже не входит в определяемый тип;
<maxinciusive> — наибольшее значение определяемого типа;
<minExciusive> — наименьшее значение, уже не входящее в определяемый тип;
<mininciusive> — наименьшее значение определяемого типа;
<totalDigits> — общее количество цифр в определяемом числовом типе — сужении типа decimal;
<fractionDigits> — количество цифр в дробной части числа;
<iength> — длина значений определяемого типа;
<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.
В одном сужении может быть несколько ограничений-фасеток. При этом фасетки <pattern> и <enumeration> задают независимые друг от друга ограничения, их можно мысленно объединить союзом "или". Остальные фасетки задают общие, совместно накладываемые ограничения, их можно мысленно объединить союзом «и».
Простой тип-список — это тип элементов, в теле которых записываются через пробел несколько значений одного и того же простого типа. Например, в документе XML может встретиться такой элемент, содержащий список целых чисел:
<days>21 34 55 46</days>
Список определяется компонентом list, в котором атрибутом itemType указывается тип элементов определяемого списка. Тип элементов списка можно определить и в содержимом элемента list. Например, показанный выше элемент документа XML days можно определить в схеме так:
<xsd:element name="days" type="listOfInteger" />
а использованньй при его определении тип iistof integer задать как список не более чем из пяти целых чисел следующим образом:
<xsd:simpleType name="listOfInteger">
<xsd:restriction>
<xsd:simpleType>
<xsd:list itemType="xsd:integer" /> </xsd:simpleType>
<xsd:maxLength valuer"5" />
</xsd:restriction>
</xsd:simpleType>
При определении списка можно применять фасетки <iength>, <minLength>, <maxLength>, <enumeration>, <pattern>.
Простой тип-объединение определяется компонентом union, в котором атрибутом memberTypes можно указать имена объединяемых типов. Например:
<xsd:union memberTypes="xsd:string xsd:integer listOfInteger" />
Другой способ — записать в содержимом компонента union определения простых типов, входящих в объединение. Например:
<xsd:attribute name="size">
<xsd:simpleType> <xsd:union>
<xsd:simpleType>
<xsd:restriction base="xsd:positiveInteger">
<xsd:minlnclusive value="8"/>
<xsd:maxlnclusive value="72"/> </xsd:restriction>
</xsd:simpleType>
<xsd:simpleType>
<xsd:restriction base="xsd:NMTOKEN">
<xsd:enumeration value="small"/>
<xsd:enumeration value="medium"/>
<xsd:enumeration value="large"/> </xsd:restriction>
</xsd:simpleType>
</xsd:union> </xsd:simpleType>
</xsd:attribute>
После этого атрибут size можно использовать, например, так:
<font size='large'>Глава K/font> <font size='12'>Простой TeKCT</font>
