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


Общие сведения об использовании запросов XPath (SQLXML 4.0)

Запрос языка XML-пути (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 со значением атрибута<даты"7/14/1999".>< Результирующий набор узлов содержит все заказы с датой заказа 7.14.1999.

Язык XPath определяется консорциумом W3C (W3C) как стандартный язык навигации. SQLXML 4.0 реализует подмножество спецификации W3C XPath, расположенной по адресу http://www.w3.org/TR/1999/PR-xpath-19991008.html.

Ниже приведены основные различия между реализацией W3C XPath и реализацией SQLXML 4.0.

  • Корневые запросы

    SQLXML 4.0 не поддерживает корневой запрос (/). Каждый запрос XPath должен начинаться с типа элемента> верхнего уровня< в схеме.

  • Отчеты об ошибках

    Спецификация W3C XPath не определяет никаких ошибок. Запросы 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 stringnumberи boolean типов данных. Дополнительные сведения см. в разделе "Типы данных XPath" (SQLXML 4.0).

  • Запросы между продуктами

    SQLXML 4.0 не поддерживает запросы XPath между продуктами, например Customers[Order/@OrderDate=Order/@ShipDate]. Этот запрос выбирает всех клиентов с любым заказом, для которого OrderDate равно ShipDate любого заказа.

    Однако SQLXML 4.0 поддерживает такие запросы, как Customer[Order[@OrderDate=@ShippedDate]]выбор клиентов с любым заказом, для которого OrderDate равен его ShipDate.

  • Обработка ошибок и безопасность

    В зависимости от используемого выражения запроса XPath Transact-SQL могут предоставляться пользователям в определенных условиях.

Таблицы в следующих разделах содержат сведения о том, как реализация запросов XPath в SQLXML 4.0 отличается от спецификации W3C в этих областях.

Поддерживаемые функции

В следующей таблице показаны функции языка XPath, реализованного в SQLXML 4.0.

Функция Товар Ссылка на примеры запросов
Оси attribute, , childparentи 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-selfdescendantdescendant-or-self (//)followingfollowing-siblingnamespaceprecedingpreceding-sibling
Числовые предикаты
Арифметические операторы модуль
Функции узла ancestor, ancestor-or-selfdescendantdescendant-or-self (//)followingfollowing-siblingnamespaceprecedingpreceding-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-адресе.

См. также

Использование запросов XPath в SQLXML 4.0