Смекни!
smekni.com

на тему: Язык xml. Язык запросов X query (стр. 6 из 14)

<elementType id="bouquet">

<attribute name="id" atttype="ID">

</elementType>

Если же требуется задать список возможных значений атрибута, то пример будет выглядеть следующим образом:

<attribute name="flower" atttype="ENUMERATION"

values="red green blue" default="red">

Для приведенных примеров корректным будет являться следующий фрагмент XML-документа:

<bouquet id="0">

<flower color="red">rose</flower>

<flower color="green">leaf</flower>

<flower color="blue">bluet</flower>

</bouquet>

Модель содержимого элемента

Под моделью содержимого в схеме данных понимают описание всех допустимых объектов XML- документа, использование которых внутри данного элемента является корректным. Модель содержимого определяется инструкциями, расположенными внутри блока <elementType>:

<elementType id="article">

<attribute name="id" atttype="ID">

<element type="#title">

<string/>

</elementType>

Для этого правила корректным будет являться следующий фрагмент документа:

<article id="0">

<title>Психи и маньяки в Интернет</title>

</article>

Вложенные элементы описываются при помощи инструкции element, в которой параметром type указывается класс объекта - ссылка на его определение:

<elementType id="article">

<element type="#title"/>

<element type="#author"/>

</elementType>

Если требуется указать режим использования вложенного элемента, то надо определить параметр occurs:

<elementType id="article">

<element type="#title" occurs="REQUIRED"/>

<element type="#author" occurs="OPTIONAL"/>

<element type="#subject" occurs="ONEORMORE"/>

</elementType>

Возможные значения этого параметра таковы:

REQUIRED - элемент должен быть обязательно определен.

OPTIONAL - использование элемента не является обязательным.

ZEROORMORE - вложенный элемент может встречаться несколько раз или ни разу.

ONEORMORE - элемент должен встречаться хотя бы один раз.

Примеры правильных XML-документов, использующих приведенную выше схему:

<article>

<title>Зачем он нужен, XML?</title>

<author>Иван Петров</author>

<subject>Что такое XML</subject>

<subject>нужен ли он нам</subject>

</article>

или

<article>

<title>Зачем он нужен, XML?</title>

<subject>Что такое XML</subject>

</article>

Кроме элементов, содержимым XML-документа могут также является обычный текст и области CDATA. Для обозначения типов содержимого текущего элемента в схемах используются следующие инструкции:

<string/> - указывает на то, что содержимым элемента является только свободная текстовая информация(секция PCDATA) :

<elementType id="flower">

<string/>

</elementType>

<any/> - указывает на то, что содержимым элемента должны являться только элементы, без текста, незаключенного ни в один элемент:

<elementType id="issue">

<any/>

</elementType>

<mixed> - любое сочетание элементов и текста

<elementType id="contacts">

<mixed/>

</elementType>

<empty> - пустой элемент

Пример:

<elementType id="title">

<string/>

</elementType>

<elementType id="chapter">

<string/>

</elementType>

<elementType id="chapters-list">

<any/>

</elementType>

<elementType id="content">

<element type="#chapters-list" occurs="OPTIONAL">

</elementType>

<elementType id="article">

<mixed><element type="#title"></mixed>

<element type="#content" occurs="OPTIONAL">

</elementType>

Иерархия классов

Для того, чтобы при описании класса ограничить список объектов, которые могут являться родительскими для данного элемента, необходимо использовать элемент схемы domain.

Инструкция <domain> указывает, что текущий объект должен определяться строго внутри элемента, заданного этим тэгом. Например, в следующем фрагменте указывается, что элемент <author> может быть определен строго внутри тэга <article>:

<elementType id="author">

<element type="#lastname">

<element type="#firstname">

<domain type="#article"/>

</elementType>

Ограничения на значения

Значения элементов могут быть ограничены при помощи тэгов <min> и <max>;:

<elementType id="room">

<element type="#floor"><min>0</min><max>100</max>

</elementType>

Внутри этих элементов могут указываться и символьные ограничения:

<elementType id="line">

<element type="#character"><min>A</min><max>Z</max>

</elementType>

Использование правил из внешних схем

Схема может использовать элементы и атрибуты из других схем. Для этого надо использовать атрибут href, в котором указывается название внешней схемы. Например:

<?XML version='1.0' ?>

<?xml:namespace name="urn:uuid:BDC6E3F0-6DA3-11d1-

A2A3-00AA00C14882/" as="s"/?>

<s:schema>

<elementType id="author">

<string/>

</elementType>

<elementType id="title">

<string/>

</elementType>

<elementType id="Book">

<element type="#title" occurs="OPTIONAL"/>

<element type="#author" occurs="ONEORMORE"/>

<element href="http://mrcpk.org/" />

</elementType></s:schema>

</elementType>

</s:schema>

Типы данных

В разделе, посвященном DTD, мы уже выяснили, для чего программе-клиенту необходима информация о формате данных содержимого элемента. В схемах существует возможность задавать тот или иной тип данных, используя при определении элемента директиву <datatype> с указанием конкретного типа:

<elementType id="counter">

<datatype dt="int">

</elementType>

В DTD мы должны были создать атрибут с конкретным названием, определяющим операцию назначения формата данных, и значением, определенным как fixed. Использование элемента <datatype> позволяет указывать это автоматически, но для обеспечения программной независимости необходимо сначала договориться об обозначениях типов данных (значения, которые должны передаваться параметру dt элемента dataype. В любом случае, как и прежде, все необходимые действия, связанные с конкретной интерпретацией данных, содержащихся в документе, осуществляются программой-клиентом и определяются логикой его работы. В разделе, посвященном DTD, мы уже рассматривали пример XML- документа, реализующего описанные нами возможности. Вот как выглядел бы этот пример при использовании схем данных:

<schema id="someschema">

<elementType id="#rooms_num">

<string/>

<datatype dt="int">

</schema>

<elementType id="#floor">

<string/>

<datatype dt="int">

</schema>

<elementType id="#living_space">

<string/>

<datatype dt="float">

</schema>

<elementType id="#is_tel">

<string/>

<datatype dt="boolean">

</schema>

<elementType id="#counter">

<string/>

<datatype dt="float">

</schema>

<elementType id="#price">

<string/>

<datatype dt="float">

</schema>

<elementType id="#comments">

<string/>

<datatype dt="string">

</schema>

<elementType id="#house">

<element type="#rooms_num"occurs="ONEORMORE"/>

<element type="#floor" occurs="ONEORMORE"/>

<element type="#living_space" occurs="ONEORMORE"/>

<element type="#is_tel" occurs="OPTIONAL"/>

<element type="#counter" occurs="ONEORMORE"/>

<element type="#price" occurs="ONEORMORE"/>

<element type="#comments" occurs="OPTIONAL"/>

</elementType>

</schema>

...

<house id="0">

<rooms_num>5</rooms_num>

<floor>2</floor>

<living_space>32.5</living_space>

<is_tel>true</is_tel>

<counter>18346</counter>

<price>34.28</price>

<comments>С видом на северный полюс</comments>

</house>

...

Язык запросов XQuery

XQuery — язык запросов, разработанный для обработки данных в формате XML. XQuery использует XML как свою модель данных.

Консорциум World Wide Web Consortium (W3C) образовал рабочую группу для разработки языка запросов к источникам данных, представленных на языке XML. Этот язык запросов, получивший название XQuery, развивается до сих пор и описан в серии предварительных документов. XQuery — функциональный язык, состоящий из нескольких видов выражений, которые могут использоваться в разных сочетаниях. Язык базируется на системе типов XML Schema и совместим с другими стандартами, связанными с XML.

Язык XML все чаще применяется в качестве формата для обмена информацией между разными приложениями в Internet. Популярность XML во многом объясняется его гибкостью при представлении разных видов информации. Применение тегов делает XML-данные самоописываемыми, а расширяемая природа XML позволяет определять новые виды специализированных документов. По мере роста значимости XML создается целая серия стандартов, многие из которых были подготовлены консорциумом W3C . Так, XML Schema обеспечивает нотацию для определения новых типов элементов и документов; XML Path Language (XPath) — нотацию для выбора элементов в документе XML; Extensible Stylesheet Language Transformations (XSLT) — нотацию для преобразования документов XML из одного представления в другое.