Типы данных в языках XPath и XQuery

В языке XPath, а также в языке XQuery, используются те же типы данных, что и в схеме XML, дополненные типами данных, введенными для этих языков.

Иерархия данных XPath и XQuery представлена на рис. 5.1.1.

 

 

Рис. 5.1.1. Иерархия данных XPath и XQuery

 

В языках XPath и XQuery добавлены следующие типы данных:

· xs:anyAtomicType – любой атомарный, т.е. состоящий из одного значения, тип;

· xs:untypedAtomic – любое атомарное данное, которому не может быть приписан какой-либо определенный тип;

· xs:untyped – узел элемента, который не проверялся при проверке документа XML или проверка которого была пропущена;

· xs:yearMonthDuration – продолжительность в годах и месяцах (производное от xs:duration);

· xs:dayTimeDuration – продолжительность в днях, часах, минутах и секундах (производное от xs:duration).

В языке XPath документ XML рассматривается как дерево, в котором каждая часть документа представляется узлом.

В XPath определено семь типов узлов и, соответственно, семь типов данных, представленных на рис. 5.1.1:

· узел документа;

· элемент;

· атрибут;

· текст;

· комментарий;

· инструкция по обработке;

· пространство имен.

Каждый узел дерева XPath имеет строковое представление, называемое строковым значением, которое XPath использует для сравнения узлов.

Для всех узлов в документе определяется порядок, называемый порядком появления в документе. Он соответствует появлению узлов в XML представлении документа после расшифровки всех общих сущностей. Следовательно, корневой узел всегда будет первым узлом, а узлы элементов будут предшествовать своим непосредственным потомкам. Таким образом, порядок появления в документе упорядочивает узлы элементов согласно очередности появления в XML документе соответствующих открывающих дескрипторов (после подстановки всех сущностей). Считается, что в элементе узлы атрибутов и пространств имен всегда предшествуют непосредственным потомкам элемента. При этом узлы пространств имен предшествуют узлам атрибутов. Относительный порядок следования узлов пространства имен и относительный порядок следования узлов атрибутов зависят от реализации. Обратный порядок появления в документе – это по..рядок, обратный порядку появления в документе.

Узел документа представляет весь документ. Непосредственными потомками узла документа являются корневой элемент, а также узлы комментариев и инструкций по обработке. Имя узла документа совпадает с именем корневого элемента. Строковое значение узла документа является объединением строковых значений всех текстовых узлов, являющихся потомками этого узла, выстроенными согласно порядку появления в документе.

Корневой узел не имеет расширенного имени.

Для каждого элемента в документе создается узел элемента. Узел элемента имеет расширенное имя, однако если имя не имеет префикса, URI пространства имен для имени элемента будет нулевым. Непосредственными потомками узла элемента могут быть узлы элементов, узлы комментариев, узлы инструкций обработки и текстовые узлы, образующие его содержание. При этом обрабатываются ссылки на внутренние и внешние сущности, а также выполняется подстановка для ссылок на символы.

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

Узел элемента может иметь уникальный идентификатор (ID). Значение этого атрибута декларируется в DTD как тип ID. Никакие два элемента в пределах одного документа не могут иметь одинаковые уникальные идентификаторы.

С каждым узлом элемента связан набор узлов атрибутов. При этом, хотя сам элемент является родителем каждого из этих узлов атрибутов (в отличие от модели DOM), узел атрибута непосредственным потомком своего родительского элемента не является.

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

Атрибут, подставляемый по умолчанию, обрабатывается так же, как атрибут, указанный явно. Если для данного типа элемента в DTD атрибут был объявлен со значением по умолчанию #IMPLIED, однако в элементе этот атрибут представлен не был, считается, что в наборе атрибутов указанного элемента нет узла для этого атрибута.

Узел атрибута имеет расширенное имя. Если имя атрибута не имеет префикса, URI пространства имен для имени атрибута будет нулевым. Узел атрибута также имеет нормализованное строковое значение, равное значению атрибута (с удаленными избыточными пробельными символами).

Для атрибутов, декларирующих пространства имен, соответствующих узлов атрибутов не предусмотрено.

Текстовый узел представляет символьные данные элемента. Все символы в секции CDATA обрабатываются как символьные данные. Таким образом, запись <![CDATA[<]]> в исходном документе будет обрабатываться так же, как и &lt;. Таким образом, секция CDATA обрабатывается так, словно были удалены комбинации "<![CDATA[" и "]]>", а все символы "<" и "&" были заменены на &lt; и &amp; соответственно.

Строковым значением текстового узла являются символьные данные, содержащиеся в узле. Расширенного имени этот узел не имеет.

Узел комментария представляет комментарий XML (за исключением комментариев в DTD). Его строковым значением являются содержимое комментария (не включая "<!--" и "-->"). Расширенного имени этот узел также не имеет.

Для каждой инструкции обработки создается соответствующий узел. Исключение составляют инструкции обработки, помещенные в DTD. Строковое значение узла инструкции обработки – это та часть инструкции обработки, которая следует за адресатом и возможным пробельным символом. В состав строкового значения также не попадает завершающая комбинация "?>". Инструкция обработки имеет расширенное имя, в котором локальная часть – это адресат инструкции обработки, а URI пространства имен является нулевым.

С каждым элементом связан набор узлов пространства имен: по одному на каждый новый префикс пространства имен, появившийся в области видимости этого элемента, (включая и префикс xml), и еще один узел для пространства имен по умолчанию, если такое пространство имен имеется в области видимости элемента. Данный элемент является родителем каждого такого узла пространства имен, однако узел пространства имен непосредственным потомком соответствующего элемента родителя не становится. Элемент получит узел пространства имен:

· для каждого атрибута элемента, чье имя начинается с xmlns:,

· для каждого атрибута в элементе-предке, чье имя начинается с xmlns:, при условии, что данный префикс не был затем переопределен самим элементом или его более близким предком,

· для атрибута xmlns, если сам элемент или какой-либо из его предков имеют атрибут xmlns и при этом атрибут xmlns самого ближайшего из таких элементов не является пустым.

Узел пространства имен имеет расширенное имя, локальная часть которого является префиксом пространства имен (она является пустой, если данный узел относится к пространству имен по умолчанию), а идентификатор URI пространства имен всегда нулевой.

Строковое значение узла пространства имен – это URI пространства имен, связанного с данным префиксом пространства имен. Если данный URI окажется относительным, он должен обрабатываться точно так же, как URI пространства имен в расширенном имени.








Дата добавления: 2015-03-19; просмотров: 1035;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.