Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник_Палагута.doc
Скачиваний:
10
Добавлен:
13.11.2019
Размер:
6.6 Mб
Скачать

12.2. Формування запитів xQuery

Запит XQuery обов’язково зачиняється у фігурні дужки {}. Запит може вміщувати умовний вираз, що визначає критерій пошуку. Результат обчислення умовного виразу може бути істинним або ні. Якщо для певного тегу вираз є істинним, виконується дія запиту.

Умовний вираз використовується всередині виразу FLWOR, який є акронімом (абревіатурою) для речень for, let, where, order by і return.

Речення for і let використовується для привласнення значень змінним у межах XQuery. Наприклад, речення

for $x in doc("firms.xml")/firms/firm/income

визначає, що для кожного значення тегу income XQuery – процесор привласнює текстове значення (дохід) змінній $x.

Речення order by виконує сортування значення, що зберігаються у змінній. За допомогою ключових слів можна визначити порядок сортування: ascending – за зростанням, descending – за убиванням. Наприклад, речення

order by $x ascending

упорядковує значення змінної $x за зростанням.

Речення let привласнює певне значення деякій змінній. Наприклад, речення

let $x:= "XML - технології"

привласнює нове значення змінній $x.

Речення where використовується для визначення критерію фільтрації за допомогою умовного виразу. Наприклад, потрібно обрати дані про фірму за адресою «83020, м.Донецьк, вул.Щорса, 43». Такий запит виглядатиме так:

for $x in doc("firms.xml")/firms/firm

where doc("firms.xml")/firms/firm/address="83020, м.Донецьк, вул.Щорса, 43"

order by $x ascending

Речення return визначає інформацію, яку XQuery – процесор записує у вихідний файл. Речення return може виводити текстове значення, уміст тегу XML – документа або значення змінних, що використовуються у запиті XQuery. При виведенні значень змінних може використовуватися функція data(), що виводить текст, пов’язаний зі змінною. Таким чином, для виведення результатів вибору даних про конкретне підприємство за адресою слід записати інструкцію:

return data($x)

12.3. Конструктори, арифметичні операції та функції

Інформація, що міститься у XML – документі, зберігається як послідовність символів, тобто має тип даних string. Для виконання операцій над даними часто потребується перетворення інформації на інші типи даних. Наприклад, для виконання обчислень потрібно текстові дані перетворити на дані числового типу. Такі перетворення виконуються за допомогою конструкторів. Конструктор намагається значення тегу привести до певного типу даних. При невдалій спробі виводиться повідомлення про помилку. Аргументом конструктору є ім’я тегу, дані якого перетворюються. Конструктори можуть використовуватися при привласненні значень змінним або в умовних виразах.

Таблиця 13.1 – Деякі конструктори XQuery

Конструктор

Опис

xs:decimal

Створює із рядка десяткове число

xs:date

Створює із рядка дату за шаблоном YYYY-MM-DD (наприклад, 2009-12-21)

xs:double

Створює із рядка число з плаваючою крапкою подвійної точності

xs:float

Створює із рядка число з плаваючою крапкою

xs:int

Створює із рядка ціле число

xs:time

Створює із рядка час

Наприклад, файл з запитом XQuery, який обирає із файлу firms.xml усі данні про підприємства з доходом, більшим 1500 од, і видає їх у вигляді списку може бути таким:

<HTML>

<BODY>

<H2>Перелік підприємств з найбільшим доходом</H2>

<UL>

{

for $x in doc("firms.xml")/firms/firm

where xs:decimal($x/income)>1500

order by $x ascending

return <li>{data($x)}</li>

}

</UL>

</BODY>

</HTML>

На рис. 12.1 надано результат виконання запиту – HTML – документ, який розчинено у вікні ІЕ.

Рисунок 12.1 – Результат виконання запиту XQuery

У запитах XQuery можна використовувати такі арифметичні операції:

+

- додавання

-

- віднімання

*

- множення

div

- ділення

mod

- залишок від ділення

Арифметичні операції застосовуються до числових даних, які мають один с таких типів даних: integer, decimal, float або double.

Також можна застосовувати функції, зокрема такі:

sum

- розрахунок суми послідовності значень

avg

- розрахунок середнього значення

count

- розрахунок кількості значень

max

- визначення максимального значення у послідовності

min

- визначення мінімального значення у послідовності

Наприклад, можна створити запит XQuery, за допомогою якого із файлу firms.xml обираються найменування підприємств, дохід кожного підприємства та кількість працюючих, обчислюється значення доходу на одного працюючого, результати запиту видаються у HTML – документ у вигляді таблиці. Такий запит матиме вид:

<HTML>

<BODY>

<H2>Розрахунок доходу на одного працюючого </H2>

<TABLE BORDER="1">

<TR> <TD>Найменування підприємства</TD>

<TD>Дохід</TD>

<TD>Кількість працюючих</TD>

<TD>Дохід на одного працюючого</TD></TR>

{

for $f in doc("firms.xml")/firms/firm

let $in := xs:float($f/income)

let $nn := xs:float($f/number_of_the_working)

return <TR><TD>{data($f/@title)}</TD>

<TD ALIGN="CENTER">{$in}</TD>

<TD ALIGN="CENTER">{$nn}</TD>

<TD ALIGN="CENTER">{$in div $nn}</TD></TR>

}

</TABLE>

</BODY>

</HTML>

Звернення до значення атрибуту title, як це прийнято в мові XPath, починається з символу @.

Результат формування запиту наведено на рис. 12.2.

Рисунок 12.2 – Результат виконання запиту XQuery