Классика баз данных - статьи

       

В данном примере результатом вычисления


В данном примере результатом вычисления выражения будет последовательность узлов review. Возвращаемые элементы review представляют собой копию узлов review оригинального документа с модификациями, описанными в конструкции transform replace функционального update-выражения. В данном примере запрос описывает трансформацию данных из класса "найти и заменить". Переменная $d связывается с узлами, расположенными внутри возвращаемого элемента review. Каждое из таких связываний в возвращаемом элементе заменяется на новый элемент, описываемый XQuery-конструктором. Таким образом, в примере функциональное update-выражение возвращает последовательность узлов review, в которых все вхождения элемента director заменены элементом a. Выражение вычисляется без побочных эффектов, т.е. узлы review документа db.xml не изменяются.

Рассмотрим второй пример из предыдущей главы. Нам требуется выполнить запрос над XML-данными с известной схемой данных, ориентированными на хранение данных. Логика запроса заключается в выборке всех заказов с ценой, конвертированной в другую валюту. Ниже представлена запись такого запроса с использованием функциональных update-выражений.

let $euro-rate:=doc("rates")/rates/rate[@name="euro"]/text() for $orders in doc("orders.xml")/orders transform replace $p in $orders/order/orderLine/price with <price>{$p/text()*$euro-rate}</price>

Запрос 4. Получение списка заказов с конвертированной ценой с использованием функциональных update-выражений

По синтаксису и семантике запрос аналогичен предыдущему запросу. Отличия заключаются в двух аспектах. Во-первых, вследствие известной схемы данных, все XPath-выражения прописаны без использования оси descendant-or-self []. Второе, более принципиальное отличие состоит в том, что запрос возвращает один элемент orders, в котором все вложенные элементы order изменены требуемым образом. Так происходит вследствие того, что XPath выражение doc("orders.xml")/orders возвращает только один элемент orders.


Содержание  Назад  Вперед