ref-15178 (664892), страница 4
Текст из файла (страница 4)
Если мы включим приведенные правила внутрь XML-документа, программа-клиент сможет использовать их для проверки. Т.е. она теперь сможет определить, что правильным будет являться следующий фрагмент:
John Ree
Peter Loyd
Emil McGeer
team>
Все конструкции языка схем описываются правилами "XML DTD for XML-Data-Schema".
Область схемы данных
Создавая схемы данных, мы определяем в документе специальный элемент, ; внутри которого содержатся описания правил:
Если использовать отдельное пространство имен, то полный XML-документ, содержащий в себе схему данных, будет выглядеть следующим образом:
href="http://www.mrcpk.nstu.ru/schemas/" as="s"/?>
Описание элементов
Для определения класса элемента, к которому в дальнейшем будут применяться инструкции, описывающие его содержимое и структуру, предназначен специальный элемент схемы elementType. Название элемента задается атрибутом id . Все дальнейшие инструкции, которые относятся к описываемому классу, определяют его внутреннюю структуру и набор допустимых данных, содержатся внутри блока, заданного тэгами и . При определении класса элемента, можно также использовать комментарии к нему, которые заключаются в тэги <descript>
Атрибуты элемента
Для того, чтобы в описании элемента определить его атрибуты и описать свойства этих атрибутов нужно использовать элемент attribute:
…
В данном примере элементу
layer> определяется атрибут number, значением которого может быть любая последовательность разрешенных символов:
<player number="0"/>
<player number="some text"/>
Подобно DTD, схемы данных позволяют устанавливать ограничения на значения и способ использования атрибутов. Для этого в дескрипторе необходимо использовать параметр atttype. Например, если мы хотим указать, что значение атрибута должно использоваться программой-анализатором как уникальный идентификатор, то нам необходимо создать следующее правило:
Если же требуется задать список возможных значений атрибута, то пример будет выглядеть следующим образом:
values="goalkeeper back halfback forward">
Модель содержимого элемента
Под моделью содержимого в схеме данных понимают описание всех допустимых объектов XML-документа, использование которых внутри данного элемента является корректным. Модель содержимого определяется инструкциями, расположенными внутри блока . Вложенные элементы описываются при помощи инструкции element, в которой параметром type указывается класс объекта - ссылка на его определение:
Если требуется указать режим использования вложенного элемента, то надо определить параметр occurs:
Возможные значения этого параметра таковы:
-
REQUIRED - элемент должен быть обязательно определен
-
OPTIONAL - использование элемента не является обязательным
-
ZEROORMORE - вложенный элемент может встречаться несколько раз или ни разу
-
ONEORMORE - элемент должен встречаться хотя бы один раз
Примеры правильных XML-документов, использующих приведенную выше схему:
<player>
John Ree
<nationality>English nationality>
Celtics
Portsmut
article>
или
John Ree
Celtics
<clubs>Portsmutclubs>
article>
Кроме элементов, содержимым XML-документа могут также является обычный текст и области CDATA. Для обозначения типов содержимого текущего элемента в схемах используются следующие инструкции:
-
- указывает на то, что содержимым элемента является только свободная текстовая информация(секция PCDATA) :
-
- указывает на то, что содержимым элемента должны являться только элементы, без текста, незаключенного ни в один элемент:
-
- любое сочетание элементов и текста
-
- пустой элемент.
Группировка элементов
Элемент group используется для того, чтобы задать некоторую последовательность вложенных объектов:
Группировка объектов позволяет определять сразу группу объектов различных типов, которые могут находится внутри данного объекта. В приведенном примере мы указали, что внутри объекта типа conteam могут быть включены элементы title, player, и assistant, причем атрибутом occurs мы указали, что элементы в группе являются необязательными. Корректным для таких схем будут являться следующие фрагменты документов:
Celtics
…
…
...
Celtics
...
Celtics
…
При помощи атрибута groupOrder можно также задавать режим использования группированных элементов При установленном значении OR возможно использование не всех элементов группы, а лишь некоторых из них. Если задано значение AND, то оба элемента должны быть включены в обязательном порядке. Например, для следующей группы правил:
будут считаться правильными только следующие варианты:
<team>
Celtics
…
…
или
Celtics
… player>
team>
Закрытая и открытая модели описания содержимого элемента
Когда мы определяем модель содержимого текущего элемента, список дополнительных допустимых элементов правилами не ограничивается - он может свободно расширяться. Например, для приведенного выше правила, кроме обозначенных элементов
Celtics
…
… player>
<assistant> … assistant>
team>
Однако в том случае, если мы хотим ограничить создаваемые нами правила от включения дополнительных элементов, мы должны использовать атрибут content и установить для него специальное значение CLOSED:
Теперь приведенный фрагмент XML-документа будет считаться некорректным, т.к. параметром content запрещено использование внутри элемента team других объектов, кроме указанных в правиле.
Иерархия классов
Для того, чтобы при описании класса ограничить список объектов, которые могут являться родительскими для данного элемента, необходимо использовать элемент схемы domain. Инструкция указывает, что текущий объект должен определяться строго внутри элемента, заданного этим тэгом. Например, в следующем фрагменте указывается, что элемент
Ограничения на значения
Значения элементов могут быть ограничены при помощи тэгов и ;:
1125
Использование правил из внешних схем
Схема может использовать элементы и атрибуты из других схем. Для этого надо использовать атрибут href, в котором указывается название внешней схемы. Например:
A2A3-00AA00C14882/" as="s"/?>
Компоненты схем
Компоненты, или макроопределении, используются в схемах точно также, как и в DTD. Для их определения предназначены тэги и ;:
goalkeeper
systemId="logo.gif"/>
Типы данных
В схемах существует возможность задавать тот или иной тип данных, используя при определении элемента директиву с указанием конкретного типа:
В DTD мы должны были создать атрибут с конкретным названием, определяющим операцию назначения формата данных, и значением, определенным как fixed. Использование элемента позволяет указывать это автоматически, но для обеспечения программной независимости необходимо сначала договориться об обозначениях типов данных(значения, которые должны передаваться параметру dt элемента datatype), для чего могут использоваться, например, универсальные идентификаторы ресурсов URI. В любом случае, как и прежде, все необходимые действия, связанные с конкретной интерпретацией данных, содержащихся в документе, осуществляются программой-клиентом и определяются логикой его работы. В разделе, посвященном DTD, мы уже рассматривали пример XML-документа, реализующего описанные нами возможности. Вот как выглядел бы этот пример при использовании схем данных:
...
5
2
32.5
true
18346
34.28
…
...
Подводя итог всему сказанному, необходимо отметить, что процесс развития современных информационных систем настолько динамичен, что временной промежуток между появлением новой технологии и ее практическим использованием в реально действующих приложениях сегодня слишком мал. На смену устаревающему стандарту HTML в самое ближайшее время должен будет прийти новый, более гибкий и универсальный язык описания данных. И тот факт, что XML как язык еще не стандартизирован и некоторые его составляющие до сих пор находятся в стадии разработки, видимо, не является причиной невозможности его использования уже сегодня, для решения конкретных задач в реальных системах.
Иллюстрационный пример
Файл Clients.dtd
id ID #REQUIRED
type (active | passive) #IMPLIED
>
id ID #REQUIRED
>
type (current | int) "int"
>
XML документ действительный для этого DTD
London, Piccadilli st. 467
Dublin. Solar st. 463
W3C схема эквивалентная предыдущему DTD
Литература:
-
“Изучаем XML” Э. Рей – Спб: Символ-Плюс, 2001.
-
“Мифы и реальности XML” Сергей Кузнецов - ИСП РАН, Центр информационных технологий.
-
“Semantic Web: роли XML и RDF” С. Деккер – журнал ‘Открытые системы’ сентябрь 2001
-
Материалы с CIT-forum’a
Конец формы