Опубликован: 08.08.2007 | Доступ: свободный | Студентов: 1670 / 177 | Оценка: 3.86 / 3.76 | Длительность: 11:46:00
Специальности: Программист
Лекция 12:

Лабораторная работа № 2

Описание схемы документа на языке XSD

Связать XML документ с его XSD схемой можно разными способами:

  1. подать файлы со схемой на вход анализатора.
  2. задать файлы со схемой как свойство анализатора.
  3. указать прямо в документе XML.

Рассмотрим 3 способ более подробно.

Если элементы документа не принадлежат никакому пространству имен и записаны без префикса, то в корневом элементе документа записывается атрибут noNamespaceSchemaLocation, указывающий расположение файла со схемой в форме URI:

< root_element_name xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance 
  xsi:noNamespaceSchemaLocation="file_name.xsd">

В этом случае в схеме не должно быть целевого пространства имен.

Если же элементы документа относятся к некоторому пространству имен, то применяется атрибут schemaLocation, в котором через пробел перечисляются пространство имен и расположение файла со схемой, описывающей это пространство имен.

Элементы, из которых будет состоять документ XML, объявляются в схеме компонентом element:

<xsd:element_name="имя элемента" tуре="тип элемента" 
minOccurs="Haменьшее число появлений элемента в документе" 
maxOccurs="наибольшее число появлений" />

Значение по умолчанию необязательных атрибутов minOccurs и maxOccurs равно 1. Это означает, что если эти атрибуты отсутствуют, то элемент должен появиться в документе XML ровно один раз.

Указание типа элемента в атрибуте type удобно, если это встроенный простой тип или тип, определенный заранее. Тогда в атрибуте type можно записать только имя типа.

Если же тип элемента определяется здесь же, то определение типа элемента лучше вынести:

<xsd:element name="имя элемента">

Определение типа элемента

</xsd:element>

Объявление атрибута элемента тоже несложно:

<xsd:attribute name=" имя атрибута" type="тип атрибута" 
  use="обязательность атрибута" 
    default="значение по умолчанию" />

Необязательный атрибут use принимает три значения:

  1. optional - описываемый атрибут необязателен (это значение по умолчанию);
  2. required - описываемый атрибут обязателен;
  3. prohibited - описываемый атрибут неприменим. Это значение полезно при определении подтипа, чтобы отменить некоторые атрибуты базового типа.

Определение типа атрибута, - а это должен быть простой тип, - можно вынести в содержимое элемента attribute:

<xsd:attribute name="имя атрибута">

Тип атрибута

</xsd:attribute>

Определение простых типов

Простой тип в схемах XML определяется компонентом схемы simpleType, имеющим вид

<xsd:simpleType name="имя типа" >Определение типа</xsd:simpleType"

Определение новых типов простых элементов

Кроме встроенных типов в схемах XML можно определить новые типы простых элементов. Они вводятся как

  1. сужение (restriction) встроенного или ранее определенного простого типа,
  2. список (list) простых типов
  3. объединение (union) простых типов.

Сужение простого типа определяется компонентом restriction, в котором атрибут base указывает сужаемый простой тип, а в содержимом задаются ограничения, выделяющие определяемый простой тип.

Теги задающие ограничения, называются фасетками ( facets ). Вот их список:

  1. <maxExclusive> - наибольшее значение, которое уже не входит в определяемый тип;
  2. <maxInclusive> - наибольшей значение определяемого типа;
  3. <minExclusive> - наименьшее значение, уже не входящее в определяемый тип;
  4. <minInclusive> - наименьшее значение определяемого типа;
  5. <totalDigits> - общее количество цифр в определяемом числовом типе - сужении типа decimal;
  6. <fractionDigits> - количество цифр в дробной части числа;
  7. <length> - длина значений определяемого типа;
  8. <maxLength> - наибольшая длина значений определяемого типа;
  9. <minLength> - наименьшая длина значений определяемого типа;
  10. <enumeration> - одно из перечислимых значений;
  11. <pattern> - регулярное выражение;
  12. <whitespace> - применяется при сужении типа string и определяет способ преобразования пробельных символов <'>\n<'>, <'>\r<'>, <'>\t. Атрибут value этого тега принимает одно из трех значений:
    • preserve - не убирать пробельные символы;
    • replace - заменить пробельные символы пробелами;
    • collapse - после замены пробельных символов пробелами убрать начальные и конечные пробелы, а из нескольких подряд идущих пробелов оставить только один.

В тегах-фасетках можно записывать следующие атрибуты, называемые базисными фасетками ( fundamental facets ):

  1. ordered - задает упорядоченность определяемого типа, принимает одно из трех значений:
    • false - тип неупорядочен;
    • partial - тип частично упорядочен;
    • total - тип полностью упорядочен;
  2. bounded - задает ограниченность или неограниченность типа значением true или false;
  3. cardinality - задает конечность или бесконечность типа значением finite или countably infinite;
  4. numeric - показывает, числовой этот тип или нет, значением true или false.

Список определяется компонентом list, в котором атрибутом itemType указывается тип элементов определяемого списка. Тип элементов списка можно определить и в содержимом элемента list.

При определении списка можно применять фасетки <length>, <minLength>, <maxLength>, <enumeration>, <pattern>.

Простой тип-объединение определяется компонентом union, в котором атрибутом memberTypes можно указать имена объединяемых типов. Например:

<xsd: union memberTypes="xsd: string xsd; integer lisstOfInteger" />

Другой способ - записать в содержимом компонента union определения простых типов, входящих в объединение.