Основные сведения об использовании запросов XPath (SQLXML 4.0)
Запрос на языке XPath может быть указан как часть URL-адреса или внутри шаблона. Схема сопоставления определяет структуру этого результирующего фрагмента, а значения извлекаются из базы данных. Этот процесс имеет сходные концепции с созданием представлений при помощи инструкции CREATE VIEW и написания SQL-запросов к ним.
![]() |
---|
Чтобы получить представление о запросах XPath в SQLXML 4.0, необходим опыт работы с XML-представлениями и другими связанными понятиями — шаблонами и схемами сопоставления. Дополнительные сведения см. в разделе Введение в схемы XSD с заметками (SQLXML 4.0) и стандарт XPath, определенный консорциумом World Wide Web (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 - это узел атрибута, а "Important" - это текст узла.
XPath - это язык навигации графа, используемый для выбора набора узлов из XML-документа. Каждый оператор XPath выбирает набор узлов на основе набора узлов, выбранных предыдущим оператором XPath. Например, имея набор узлов <Customer>, XPath может выбрать все узлы <Order> со значением "7/14/1999" атрибута date. Результирующий набор узлов содержит все заказы с датой заказа 7/14/1999.
Язык XPath определен консорциумом W3C (World Wide Web Consortium) как стандартный язык навигации. SQLXML 4.0 реализует часть спецификации XPath консорциума W3C, расположенной по адресу 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.
Функция |
Метод |
Ссылка на образцы запросов |
---|---|---|
Axes |
оси attribute, child, parent и self |
|
Предикаты с логическими значениями, включая последовательные и вложенные предикаты. |
|
Задание арифметических операторов в запросах 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 |
|
Неподдерживаемая функциональность
В следующей таблице приведены функции языка XPath, не реализованные в SQLXML 4.0.
Функция |
Метод |
---|---|
Axes |
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 может содержать символы такие, как < or &, которые имеют особые значения в XML (и шаблон является XML-документ). При использовании &-кодировки XML необходимо экранировать эти символы или указывать XPath в URL-адресе.