Основные сведения об использовании запросов 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.
Возможность |
Элемент |
Ссылка на образцы запросов |
---|---|---|
Оси |
оси 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.
Возможность |
Элемент |
---|---|
Оси |
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-адресе.