Смекни!
smekni.com

А. Н. Терехов Санкт Петербург (стр. 4 из 8)

Q10. Перечислите всех людей согласно их интересу; используйте французскую пометку в результате.

FOR $i IN DISTINCT

document("auction.xml")/site/people/person/profile/interest/@category

LET $p := FOR $t IN document("auction.xml")/site/people/person

WHERE $t/profile/interest/@category = $i

RETURN <personne>

<statistiques>

<sexe> $t/gender/text() </sexe>,

<age> $t/age/text() </age>,

<education> $t/education/text()</education>,

<revenu> $t/income/text() </revenu>

</statistiques>,

<coordonnees>

<nom> $t/name/text() </nom>,

<rue> $t/street/text() </rue>,

<ville> $t/city/text() </ville>,

<pays> $t/country/text() </pays>,

<reseau>

<courrier> $t/email/text() </courrier>,

<pagePerso> $t/homepage/text()</pagePerso>

</reseau>,

</coordonnees>

<cartePaiement> $t/creditcard/text()</cartePaiement>

</personne>

RETURN <categorie>

<id> $i </id>,

$p

</categorie>

- Объединения на значениях

Этот запрос проверяет способность базы данных обработать большие (промежуточные) результаты. На сей раз, объединения - на основе значений. Различие между этими запросами и ссылкой, преследующей запросы Q8 и Q9 - то, что ссылки определены в DTD и могут быть оптимизированы с логическими OID например. Два запроса Q11 и Q12 располагают каскадом в размере набора результата и обеспечивают различные возможности оптимизации. Мы обращаем внимание, что альтернативные формулировки запроса с ‘-> ’ оператор могут использоваться.

Q11. Для каждого человека, перечислите номер items в настоящее время в продаже, цена которых не превышает 0.02 % дохода человека.

FOR $p IN document("auction.xml")/site/people/person

LET $l := FOR $i IN document("auction.xml")/site/open_auctions/open_auction/initial

WHERE $p/profile/@income > (5000 * $i/text())

RETURN $i

RETURN <items name=$p/profile/@income> COUNT ($l) </items>

Q12. For each richer-than-average person, list the number of items currently on sale whose price does not exceed 0.02% of the person’s income.

FOR $p IN document("auction.xml")/site/people/person

LET $l := FOR $i IN document("auction.xml")/site/open_auctions/open_auction/initial

WHERE $p/profile/@income > (5000 * $i/text())

RETURN $i

WHERE $p/profile/@income > 50000

RETURN <items person=$p/profile/@income> COUNT ($l) </person>

- Реконструкция

Ключевой дизайн для XML! Отображения системы управления базой данных должны определить критерии фрагментации. Дополнительное действие должно восстановить оригинал документа от его разбитого представления. Сделайте запрос 13 испытаний на способность базы данных восстановить части оригинала XML документ.

Q13. Перечислите имена item, зарегистрированных в Австралии наряду с их описаниями

FOR $i IN document("auction.xml")/site/regions/australia/item

RETURN <item name=$i/name/text()> $i/description </item>

- Полный Текст

Мы продолжаем бросать вызов текстовому характеру XML документов; на сей раз, мы проводим поиск по всей Справке в форме поиска по ключевым словам. Хотя полнотекстовая загрузка сдвигового регистра могла быть изучена в изоляции, мы думаем, что взаимодействие со структурной пометкой является основным, поскольку концепции считают ортогональными; так запрос Q14 ограничен подмножеству документа, объединяя содержание и структуру.

Q14. Возвратите имена всех items, описание которых содержит слово 'золото'.

FOR $i IN document("auction.xml")/site//item

WHERE CONTAINS ($i/description,"gold")

RETURN $i/name/text()

- Обходов Пути

В отличие от Раздела правильных Выражений Пути мы теперь пробуем определить количество затрат длинных обходов пути, которые не включают подстановочные знаки. Мы сначала убываем глубоко в дерево (Сделали запрос 15) и затем возвратились снова (Сделали запрос 16). Оба запросы только проверяют существование путей вместо того, чтобы выбрать пути с предикатами.

Q15. Печатайте ключевые слова в акценте в аннотациях закрытых аукционов.

FOR $a IN document("auction.xml")/site/closed_auctions/closed_auction/annotation//description/parlist/listitem/parlist/listitem/text/emph/keyword/text()

RETURN <text> $a <text>

Q16. Присудите Q15. Возвратите IDs продавцов тех аукционов, которые имеют один или более keywords в акценте

FOR $a IN document("auction.xml")/site/closed_auctions/closed_auction

WHERE NOT EMPTY ($a/annotation/description/parlist/listitem/parlist/&bsol;

listitem/text/emph/keyword/text())

RETURN <person id=$a/seller/@person />

- Отсутствующих Элементов

Это должно проверить, как хорошо процессоры запроса знают к dealwith слабоструктурированный аспект XML данных, особенно элементы, которые объявлены дополнительными в DTD.

Q17. Какие люди не имеют homepage?

FOR $p IN document("auction.xml")/site/people/person

WHERE EMPTY($p/homepage/text())

RETURN <person name=$p/name/text()/>

Фракция людей без домашней страницы довольно высока так, чтобы этот запрос также представил стимулирующий обход пути декластеризации систем.

- Функциональных Приложений

Этот запрос помещает приложение определяемых пользователем функций (UDF) к доказательству. В XML мире, UDFs имеет специфическое значение, потому что они позволяют пользователю назначать семантику на универсальные строки, которые идут вне принуждения типа.

Q18. Конвертируйте валюту резерва всех открытых аукционов к другой валюте.

FUNCTION CONVERT ($v)

{

RETURN 2.20371 * $v -- convert Dfl to Euros

}

FOR $i IN document("auction.xml")/site/open_auctions/open_auction/

RETURN CONVERT($i/reserve/text())

- Сортировок

Благодаря недостатку схемы, предложения SORT BY часто запускают роль SQL: ORDER BY и GROUP BY. Этот запрос требует сорта на универсальных строках.

Q19. Дайте в алфавитном порядке упорядоченный список всех items наряду с их местоположением.

FOR $b IN document("auction.xml")/site/regions//item

LET $k := $b/name/text()

RETURN <item name=$k> $b/location/text() </item>

SORTBY (.)

- Соединений частей

Следующий запрос вычисляет простое соединение частей, назначая каждого человека к категории. Обратите внимание, что соединение частей действительно слабоструктурированно, поскольку это также включает тех людей, для которых уместные данные не доступны.

Q20. Клиенты группы их доходом и выводом количество элементов каждой группы.

<result>

<preferred>

COUNT (document("auction.xml")/site/people/person/profile[@income >= 100000])

</preferred>,

<standard>

COUNT (document("auction.xml")/site/people/person/profile[@income < 100000

and @income >= 30000])

</standard>,

<challenge>

COUNT (document("auction.xml")/site/people/person/profile[@income < 30000])

</challenge>,

<na>

COUNT (FOR $p in document("auction.xml")/site/people/person

WHERE EMPTY($p/@income)

RETURN $p)

</na>

</result>

2.5 XQueryXML Query Language

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

XQuery - это интересный язык с некоторыми необычными понятиями.

2.5.1 Язык выражений

В XQuery любая конструкция - это выражение, результатом вычисления которого является некоторое значение. Программа XQuery или скрипт - это просто выражение вместе с некоторыми необязательными функциями и другими определениями.

У стандарта XQuery нет изменений или уточнений, хотя, вероятно, в будущем они появятся. Эта спецификация определяет результирующую величину выражения или программы, но не устанавливает, как ее нужно вычислять.

Для описания локальных переменных используется выражение let:

let $x := 5 let $y := 6 return 10*$x+$y

2.5.2 Примитивные типы данных

Примитивные типы данных XQuery такие же, как в XML Schema:

· числа, включая целые и числа с плавающей запятой;

· булевы числа: true (истина) и false (ложь);

· строки символов;

различные типы для представления дат, времени и продолжительности.

2.5.3 Величины узлов и выражения

В XQuery также есть типы данных, необходимые для представления величин XML. Для этого используются величины узлов следующих семи типов: элемент, атрибут, пространство имен, текст, комментарий, инструкция обработки и документ (корень).

Для создания и возврата узлов используются различные стандартные функции XQuery. Так, функция document читает XML-файл, указанный аргументом URL, и возвращает корневой узел документа. (Корневой элемент - это потомок корневого узла).

Новые узлы можно также создавать непосредственно в программе.

Чтобы поместить выражение XQuery внутрь конструкторов элементов следует воспользоваться {} (фигурными скобками). Так,

let $i := 2 return let $r := <em>Value </em> return <p>{$r} of 10*{$i} is {10*$i}.</p>

создает

<p><em>Value </em> of 10*2 is 20. </p>

2.5.4 Последовательности

Рассмотренные атомарные величины (числа, строки и т.п.) и величины узлов (элементы, атрибуты и т.д.) известны как простые величины. Результатом вычисления выражения XQuery на самом деле является последовательность простых величин.

Проиллюстрируем это - для этого воспользуемся функцией count, которая принимает один аргумент и возвращает число величин в последовательности. Тогда выражение

let $a := 3,4 let $b := ($a, $a) let $c := 99 let $d := () return (count($a), count($b), count($c), count($d))

равняется (2, 4, 1, 0), потому что $b то же самое, что и (3,4,3,4).

2.5.5 Выражения XPath и отношение к XPath

В XQuery используются path expression XPath. XQuery можно рассматривать как обобщение XPath. За исключением некоторых малоизвестных форм (в основном необычных "осевых спецификаторов") все выражения XPath являются также и выражениями XQuery. По этой причине комитет, занимающийся XQuery, также работает и над спецификацией XPath - планируется, что XQuery 1.0 и XPath 2.0 будут опубликованы одновременно.

Необходимо отметить следующее различие между XPath и XQuery - выражения XPath могут вернуть множество узлов (node set), а такое же выражение XQuery возвращает последовательность узлов. Для обеспечения совместимости эти последовательности находятся в документальном порядке, в них удалены дубликаты - благодаря этому они эквиваленты множествам.

2.5.6 Итерация по последовательностям

Выражение for позволяет организовывать цикл по элементам последовательности:

for $x in (1 to 3) return ($x,10+$x)

В этом примере получается последовательность из шести элементов: 1,11,2,12,3,13.

Термин "выражение FLWR" относится и к выражению for, и к выражению let. Аббревиатура FLWR расшифровывается как одно или несколько операторов for и/или let, необязательный оператор where и оператор result. Оператор result вычисляется только тогда, когда выражение where истинно (true).