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

       

В качестве результата запроса требуется


Рис. 1. Пример элемента orders
В качестве результата запроса требуется выбрать все заказы с ценой, конвертированной в другую валюту по заданному курсу. Если структура данных известна, то требуемый запрос можно выразить на языке XQuery без использования рекурсивных функций следующим образом.
let $euro-rate:=doc("rates")/rates/rate[@name="euro"]/text() return <orders> { for $o in doc("orders.xml")/orders/order return <order id="$o/@id"> { for $l in $o/orderLine return <orderLine> {$ol/name, $ol/quantity} <price cur="euro"> {$ol/price/text()*$euro-rate} </price> </orderLine> } </order> } </orders>
Запрос 2. Получение списка заказов с конвертированной ценой на языке XQuery
Необходимо обратить внимание на то, что, как и в случае с использованием рекурсивных функций, в данном примере XQuery-выражение явно конструирует всю структуру результата. Схема XML-данных может быть достаточно сложной, и воссоздание этой схемы при построении результата ведет, с одной стороны, к ошибкам и громоздкости XQuery-выражения и, с другой стороны, к проблеме эффективного выполнения таких запросов.
Приведенный на фрагмент XML-документа является примером XML-данных, ориентированных на хранение данных. Такие XML-данные хорошо структурированы, но структура их может быть сложной, с большим количеством уровней вложенности XML-узлов. Даже при известной схеме XML-данных выражение запросов из рассматриваемого класса средствами языка XQuery порождает указанные проблемы.
Мы показали, что существует важный с практической точки зрения класс запросов к XML-данным, который сложен для выражения на языке Xquery и вычисления. Такие запросы характерны как для документ-ориентированных XML-данных, так и для XML-структур, ориентированных на хранение данные. Выражение запросов из этого класса средствами языка XQuery, с одной стороны, приводит к громоздкому и не выразительному представлению запросов, а с другой стороны, такие запросы сложны для эффективного вычисления, что важно при работе с большими объемами данных.

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