Основные сведения об использовании запросов XPath (SQLXML 4.0)
Область применения: SQL Server База данных SQL Azure
Запрос на языке 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 (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 должен начинаться с типа элемента> верхнего уровня <в схеме.
Отчеты об ошибках
Спецификация XPath консорциума W3C не определяет условия ошибки. Запросы XPath, которые не смогли выбрать какой-либо узел, возвращают пустой набор узлов. В SQLXML 4.0 запрос может вернуть несколько типов ошибок.
Порядок документов
В SQLXML 4.0 порядок документа не всегда определен. Таким образом, числовые предикаты и оси, использующие порядок документов (например , приведенные ниже), не реализуются.
Отсутствие порядка документа также означает, что строковое значение узла может быть вычислено, только когда этот узел соответствует одному столбцу в одной строке. Элемент с дочерними элементами, или узел IDREFS, или узел NMTOKENS не могут быть преобразованы в строку.
Примечание.
В некоторых случаях заметка или ключи ключевых полей из заметки связи может привести к детерминированному порядку документа. Однако это не основное использование этих заметок. Дополнительные сведения см. в разделе "Определение ключевых столбцов" с помощью полей sql:key-fields (SQLXML 4.0) и указание связей с помощью sql:relationship (SQLXML 4.0).
Типы данных
SQLXML 4.0 имеет ограничения при реализации строки XPath, числа и логических типов данных. Дополнительные сведения см. в разделе "Типы данных 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.
Функция | Товар | Ссылка на образцы запросов |
---|---|---|
Оси | атрибуты, дочерние, родительские и самостоятельные оси | Указание осей в запросах 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.
Функция | Товар |
---|---|
Оси | предок, предок или самозагод, потомок, потомок или самосознание (/), следующее, следующее, одноуровневое пространство имен, предыдущее, предыдущее |
Предикаты с числовыми значениями | |
Арифметические операторы | mod |
Функции узлов | предок, предок или самозагод, потомок, потомок или самосознание (/), следующее, следующее, одноуровневое пространство имен, предыдущее, предыдущее |
Строковые функции | string(), concat(), starts-with(), contains(), substring-before(), substring-after(), substring(), string-length(), normalize(), translate() |
логические функции | lang() |
Числовые функции | sum(), floor(), потолок(), раунд() |
Оператор Union | | |
При указании запросов XPath в шаблоне обратите внимание на следующее поведение.
- XPath может содержать такие символы, как < или >, имеющие особые значения в ФОРМАТЕ XML (и шаблон — XML-документ). Эти символы необходимо экранировать с помощью XML-кодировки или указать XPath в URL-адресе.