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


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

См. также:

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