<living_space>32.5</living_space>
<is_tel>true</is_tel>
<counter>18346</counter>
<price>100 р. 00 к.</price>
</house>
...
Как видно из примера, механизм создания элементов документа при этом нисколько не изменился. Все необходимая для проверки типов данных информация заложена в определения элементов внутри блока DTD.
DTD весьма удобный механизм осуществления контроля за содержимым документа. На сегодняшний день, практически все программы просмотра документов Интернет используют DTD-правила. Однако это не единственный способ проверки корректности документа. В настоящий момент в W3 консорциуме находится на рассмотрении новый стандарт языка описания структуры документов, называемый схемами данных.
5. Схемы данных
Схемы данных (Schemas) являются альтернативным способом создания правил построения XML-документов. По сравнению с DTD, схемы обладают более мощными средствами для определения сложных структур данных, обеспечивают более понятный способ описания грамматики языка, способны легко модернизироваться и расширяться. Безусловным достоинством схем является также то, что они позволяют описывать правила для XML-документа средствами самого же XML. Однако это не означает, что схемы могут полностью заменить DTD-описания - этот способ определения грамматики языка используется сейчас практическими всеми верифицирующими анализаторами XML и, более того, сами схемы, как обычные XML-элементы, тоже описываются DTD. Но серьезные возможности нового языка и его относительная простота, безусловно, дают основания утверждать, что будущий стандарт найдет широкое применение в качестве удобного и эффективного средства проверки корректности составления документов. В настоящее время в W3 консорциуме идет работа над первой спецификацией схем данных. Рассмотрим основные возможности схем данных, попытаемся использовать их для контроля корректности ранее описываемых XML-документов.
Внешне документы схем не отличаются от обычных документов XML. Документ размечается при помощи специальных элементов, выполняющих в схемах роль инструкций. Эти инструкции составляют набор правил, используя которые, программа-клиент будет делать вывод о том, корректен документ или нет. Схема данных, например, может выглядеть следующем образом:
<schema id="TeamSchema">
<elementType id="#namee">
<string/>
</elementType>
<elementType id="player">
<element type="#name"/>
<attribute name="number"/>
<attribute name="type"/>
<elementType id="team">
<element type="#player"/>
<attribute name=”title”/>
</schema>
Если мы включим приведенные правила внутрь XML-документа, программа-клиент сможет использовать их для проверки. Т.е. она теперь сможет определить, что правильным будет являться следующий фрагмент:
<team title=”Celtics”>
<player number="1" type=”goalkeeper”><name>John Ree</ name></ player>
<player number="2" type=”back”><name>Peter Loyd</ name></ player>
<player number="2" type=”forward”><name>Emil McGeer</ name></ player>
</team>
Все конструкции языка схем описываются правилами "XML DTD for XML-Data-Schema".
Область схемы данных
Создавая схемы данных, мы определяем в документе специальный элемент, <schema>; внутри которого содержатся описания правил:
<schema id="OurSchema">
<!-- последовательность инструкций -->
Если использовать отдельное пространство имен, то полный XML-документ, содержащий в себе схему данных, будет выглядеть следующим образом:
<?XML version='1.0' ?>
<?xml:namespace
href="http://www.mrcpk.nstu.ru/schemas/" as="s"/?>
<s:schema id="OurSchema">
</s:schema>
Описание элементов
Для определения класса элемента, к которому в дальнейшем будут применяться инструкции, описывающие его содержимое и структуру, предназначен специальный элемент схемы elementType. Название элемента задается атрибутом id . Все дальнейшие инструкции, которые относятся к описываемому классу, определяют его внутреннюю структуру и набор допустимых данных, содержатся внутри блока, заданного тэгами <elementType> и </elementType>. При определении класса элемента, можно также использовать комментарии к нему, которые заключаются в тэги <descript></descript>
Атрибуты элемента
Для того, чтобы в описании элемента определить его атрибуты и описать свойства этих атрибутов нужно использовать элемент attribute:
…
В данном примере элементу <player> определяется атрибут number, значением которого может быть любая последовательность разрешенных символов:
<player number="0"/>
<player number="some text"/>
Подобно DTD, схемы данных позволяют устанавливать ограничения на значения и способ использования атрибутов. Для этого в дескрипторе <attribute> необходимо использовать параметр atttype. Например, если мы хотим указать, что значение атрибута должно использоваться программой-анализатором как уникальный идентификатор, то нам необходимо создать следующее правило:
<attribute name="number" atttype="ID"/>
Если же требуется задать список возможных значений атрибута, то пример будет выглядеть следующим образом:
<attribute name="type" atttype="ENUMERATION"
values="goalkeeper back halfback forward">
Модель содержимого элемента
Под моделью содержимого в схеме данных понимают описание всех допустимых объектов XML-документа, использование которых внутри данного элемента является корректным. Модель содержимого определяется инструкциями, расположенными внутри блока <elementType>. Вложенные элементы описываются при помощи инструкции element, в которой параметром type указывается класс объекта - ссылка на его определение:
<element type="#nationality"/>
Если требуется указать режим использования вложенного элемента, то надо определить параметр occurs:
<element type="#name" occurs="REQUIRED"/>
<element type="#nationality" occurs="OPTIONAL"/>
<element type="#clubs" occurs="ONEORMORE"/>
Возможные значения этого параметра таковы:
Примеры правильных XML-документов, использующих приведенную выше схему:
<player>
<name>John Ree</name>
<nationality>English</ nationality>
<clubs>Celtics</clubs>
<clubs>Portsmut</clubs>
</article>
или
Кроме элементов, содержимым XML-документа могут также является обычный текст и области CDATA. Для обозначения типов содержимого текущего элемента в схемах используются следующие инструкции:
<elementType id="name">
<elementType id="coach">
<any/>
<mixed/>
Группировка элементов
Элемент group используется для того, чтобы задать некоторую последовательность вложенных объектов:
<element type="#title" occurs="REQUIRED"/>
<group occurs="OPTIONAL">
<element type="#player">
<element type="#assistant">
</group>
Группировка объектов позволяет определять сразу группу объектов различных типов, которые могут находится внутри данного объекта. В приведенном примере мы указали, что внутри объекта типа conteam могут быть включены элементы title, player, и assistant, причем атрибутом occurs мы указали, что элементы в группе являются необязательными. Корректным для таких схем будут являться следующие фрагменты документов:
<team>
<title>Celtics</tel>
<player> … </player>
<assistant> … </assistant>
Страницы: 1, 2, 3, 4, 5, 6