Основные сведения об использовании запросов XPath (SQLXML 4.0)
Запрос на языке XPath может быть указан как часть URL-адреса или внутри шаблона. Схема сопоставления определяет структуру этого результирующего фрагмента, а значения извлекаются из базы данных. Этот процесс имеет сходные концепции с созданием представлений при помощи инструкции CREATE VIEW и написания SQL-запросов к ним.
Примечание
Чтобы получить представление о запросах XPath в SQLXML 4.0, необходим опыт работы с XML-представлениями и другими связанными основными понятиями — шаблонами и схемами сопоставления. Дополнительные сведения см. в статьях Введение в схемы XSD с заметками (SQLXML 4.0) и стандарт XPath, определенный консорциумом W3C.
XML-документ состоит из узлов, таких как узел элемента, узел атрибута, текстовый узел и т. д. Например, рассмотрим следующий XML-документ:
<root>
<Customer cid= "C1" name="Janine" city="Issaquah">
<Order oid="O1" date="1/20/1996" amount="3.5" />
<Order oid="O2" date="4/30/1997" amount="13.4">Customer was
very satisfied</Order>
</Customer>
<Customer cid="C2" name="Ursula" city="Oelde" >
<Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue white red">
<Urgency>Important</Urgency>
</Order>
<Order oid="O4" date="1/20/1996" amount="10000"/>
</Customer>
</root>
В этом документе <Customer> является узлом элемента, cid — узлом атрибута, а «Важно» — текстовым узлом.
XPath — это язык навигации графа, используемый для выбора набора узлов из XML-документа. Каждый оператор XPath выбирает набор узлов на основе набора узлов, выбранных предыдущим оператором XPath. Например, при наборе <узлов Customer> XPath может выбрать все <узлы Order> со значением атрибута date"14.07.1999". Результирующий набор узлов содержит все заказы с датой заказа 7/14/1999.
Язык XPath определен консорциумом W3C (World Wide Web Consortium) как стандартный язык навигации. SQLXML 4.0 реализует подмножество спецификации W3C XPath, расположенной по адресу http://www.w3.org/TR/1999/PR-xpath-19991008.html.
Далее приведены ключевые отличия реализации XPath консорциума W3C и реализации SQLXML 4.0.
Корневые запросы
SQLXML 4.0 не поддерживает корневой запрос (/). Каждый запрос XPath должен начинаться с elementType> верхнего уровня< в схеме.
Сообщения об ошибках
Спецификация XPath консорциума W3C не определяет условия ошибки. Запросы XPath, которые не смогли выбрать какой-либо узел, возвращают пустой набор узлов. В SQLXML 4.0 запрос может вернуть несколько типов ошибок.
Порядок документов
В SQLXML 4.0 порядок документа не всегда определен. Соответственно, числовые предикаты и оси, использующие порядок документа (такие, как
following
), не реализованы.Отсутствие порядка документа также означает, что строковое значение узла может быть вычислено, только когда этот узел соответствует одному столбцу в одной строке. Элемент с дочерними элементами, или узел IDREFS, или узел NMTOKENS не могут быть преобразованы в строку.
Примечание
В некоторых случаях заметка
key-fields
или ключи заметкиrelationship
могут приводить к детерминированному порядку документа. Однако это не основное использование этих заметок. Дополнительные сведения см. в разделах Определение ключевых столбцов с помощью sql:key-fields (SQLXML 4.0) и Указание связей с помощью sql:relationship (SQLXML 4.0).Типы данных
В SQLXML 4.0 имеются ограничения в реализации типов данных XPath
string
,number
иboolean
. Дополнительные сведения см. в разделе Типы данных XPath (SQLXML 4.0).Запросы перекрестного произведения
SQLXML 4.0 не поддерживает запросы перекрестного произведения XPath, такие как
Customers[Order/@OrderDate=Order/@ShipDate]
. Этот запрос выбирает все наборы узлов Customer, состоящие из узлов Order, для которых OrderDate совпадает с ShipDate любого узла Order.Однако SQLXML 4.0 не поддерживает такие запросы, как
Customer[Order[@OrderDate=@ShippedDate]]
, которые выбирают наборы узлов Customer, состоящие из узлов Order, для которых OrderDate совпадает с ShipDate.Обработка ошибок и безопасность
В зависимости от используемой схемы и выражения запроса XPath ошибки Transact-SQL могут быть доступны пользователям при определенных условиях.
Таблицы следующего раздела содержат сведения о различиях реализации запросов XPath в SQLXML 4.0 от спецификации консорциума W3C.
Поддерживаемые функции
В следующей таблице приведены возможности языка XPath, реализованные в SQLXML 4.0.
Компонент | Элемент | Ссылка на образцы запросов |
---|---|---|
Оси | оси attribute , child , parent и self |
Указание осей в запросах XPath (SQLXML 4.0) |
Предикаты с логическими значениями, включая последовательные и вложенные предикаты. | Задание арифметических операторов в запросах XPath (SQLXML 4.0) | |
Все реляционные операторы | =, !=, <, <=, >, = > | Указание реляционных операторов в запросах XPath (SQLXML 4.0) |
Арифметические операторы | +, -, *, div | Задание арифметических операторов в запросах XPath (SQLXML 4.0) |
Явные функции преобразования | number() , string() , Boolean() |
Определение явных функций преобразования в запросах XPath (SQLXML 4.0) |
Логические операторы | AND, OR | Указание логических операторов в запросах XPath (SQLXML 4.0) |
логические функции | true() , false() , not() |
Указание логических функций в запросах XPath (SQLXML 4.0) |
переменные XPath | Указание переменных XPath в запросах XPath (SQLXML 4.0) |
Неподдерживаемые функциональные возможности
В следующей таблице приведены функции языка XPath, не реализованные в SQLXML 4.0.
Компонент | Элемент |
---|---|
Оси | ancestor , ancestor-or-self , descendant , descendant-or-self (//) , following , following-sibling , namespace , preceding , preceding-sibling |
Предикаты с числовыми значениями | |
Арифметические операторы | mod |
Функции узлов | ancestor , ancestor-or-self , descendant , descendant-or-self (//) , following , following-sibling , namespace , preceding , preceding-sibling |
Строковые функции | string() , concat() , starts-with() , contains() , substring-before() , substring-after() , substring() , string-length() , normalize() , translate() |
логические функции | lang() |
Числовые функции | sum() , floor() , ceiling() , round() |
Оператор Union | | |
При указании запросов XPath в шаблоне обратите внимание на следующее поведение.
- XPath может содержать такие символы, как < или &, которые имеют особое значение в XML (а шаблон — это XML-документ). Эти символы необходимо экранировать с помощью кодировки XML & или указать XPath в URL-адресе.