Поделиться через


Основные сведения об использовании запросов 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)

Все реляционные операторы

=, !=, <, <=, >, >=

Применение реляционных операторов в запросах 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.

Функция

Метод

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-адресе.