Виконання запитів до даних XML

Коли дані зберігаються безпосередньо в шпальтах з типом XML, для вилучення цих даних, їх вставки і оновлення можна використовувати XPath і XQuery Мова XQuery є відносно молодим, і робота над ним триває в даний час

Якщо ви коли-небудь використовували XPath, вважайте, що пройшли половину шляху в освоєнні XQuery Практично всі допустимі інструкції XPath є також і інструкціями XQuery До того ж XPath використовується для відбору значень у виразах XQuery FLWOR

Для повного опису мови XQuery і методів злиття реляційних запитів із запитами XQuery могла б знадобитися товста книга обсягом у тисячу сторінок Однак можна впевнено заявити наступне: у міру еволюції технологій роботи з даними, XML і XQuery стануть невідємною частиною будь-якої повязаної з даними діяльності

Xpath

XPath є функцією XML Вона привносить в XML обмеження результатів і засоби узагальнення при навігації по ієрархії XML для доступу до будь-якого вузла (елементу, атрибуту або фрагменту тексту) в документі XML Програмний код XPath може бути доданий для фільтрації даних в стильову таблицю XSL або в інші запити XML Найвигідніше використовувати XPath в шаблонах SQL Server

Спочатку XPath повинен ідентифікувати вузол Ідентифікація вузла функціонально схожа з імям стовпця в реченні WHERE інструкції SELECT Наприклад, для переходу до елементу event, що міститься в елементі tour, використовується наступна структура: / Tours / Tour / Event

У наведеному прикладі використана абсолютна адресація Місцезнаходження вузла може бути зазначено і відносно поточного положення, щоб фрагмент XSL, що працює з дочірніми даними, міг вибрати вузол батька для процесу фільтрації

Щоб спуститися по дереву ієрархії XML до атрибута, використовується символ @, як у наступному прикладі:

/Tours/Tour/@Name

Після того як ідентифікований коректний вузол, XPath дозволяє використовувати декілька засобів фільтрації для відбору коректних даних Для застосування фільтра WHERE = критерій визначається відразу після назви вузла і полягає у квадратні дужки:

/Tours/Tour/@Name [Gauley River Rafting]

У наступному прикладі використовується функція запиту для вилучення даних XPath в реляційному запиті:

SELECT Customer, OrderDetailquery(

‘/Items[1]/Item[1] /SKU)

FROM XMLOrders

Запити FLWOR

Запити FLWOR є серцем мови XQuery Абревіатура FLWOR складена з перших літер послідовності пропозицій For-Let-Where-Order By-Return У самій назві закладено синтаксис даних запитів Це аналогічно послідовності операцій у звичайному реляційному запиті SELECT, однак запити FLWOR послідовно проходять по ієрархічним даними XML

Призначення пропозиції For відповідає однойменним пропозицією в мові SQL Так як мова XQuery проектувався розробниками додатків, а не баз даних, під конструкцією For насправді мається на увазі конструкція For Each, яка передбачає послідовне проходження по всіх елементах Це розкриває не пакетний характер мислення в XML

Пропозиція Let використовується для присвоєння значення змінним, які надалі будуть брати участь у запиті XQuery У SQL Server 2005 ключове слово Let не підтримується

Призначення пропозиції Where ідентично його призначенням в SQL-воно обмежує елементи і атрибути XML, що відбираються запитом

Пропозиція Order By також буде інтуїтивно зрозуміло програмістам SQL Пропозиція Return специфічно для мови XQuery Цей креативний синтаксис використовується для конфігурування формату даних XML, що повертаються запитом XQuery

SELECT Customer, OrderDetailquery(

‘for $i in /Items/Item where $i/Quantity = 2 return $i/SKU1)

FROM XMLOrders

Як буде показано в наступному розділі, запити XQuery використовують у функціях реляційних запитів

Злиття XQuery з інструкцією select

Запити XQuery в SQL Server злегка відрізняються від стандарту Причиною цьому стало те, що стандарт XQuery створювався для отримання даних з файлів XML, в той час як методи XQuery в SQL Server призначені для інтеграції в інструкції SELECT

Метод exist перевіряє наявність заданого вузла, аналогічно синтаксису IF EXISTS мови SQL:

SELECT Customer FROM XMLOrders WHERE OrderDetailexist(

1/Items/Item[SKU = 234])=1

Метод exist повертає значення 1, якщо вузол існує, або 0 – в іншому випадку: Name

Sam

Метод value повертає фактичне значення вузла він може повернути тільки скалярний значення:

SELECT Customer,OrderDetai1value(

‘/Items[1]/Item[1]/SKU[1], VARCHAR(25))

FROM XMLOrders

Метод query дозволяє запитом XQuery повернути в реляційний запит SELECT дані у повному обсязі:

SELECT Customer, OrderDetailquery(

‘for $i in /Items/Item return $i/SKU)

FROM XMLOrders

Метод nodes є, мабуть, найбільш корисним при роботі з XQuery Він повертає набір рядків, який може бути обєднаний з реляційними даними в запиті SELECT

Останній метод, modify, використовується для зміни значень в змінних чи шпальтах з типом XML Цей метод призначений для використання в інструкції UPDATE і може змінювати дані за допомогою команд insert, delete і replace:

UPDATE XMLOrders

SET OrderDetailmodify(

‘insert

dtems SKU = n678&quot Quantity = &quot2n/&gt into /Items[1] *

)

WHERE OrderlD = 1

UPDATE XMLOrders

SET OrderDetailmodify(

‘delete /Items/Item[1]1 )

WHERE OrderlD = 1

Джерело: Нільсен, Пол Microsoft SQL Server 2005 Біблія користувача : Пер з англ – М: ООО ІД Вільямс , 2008 – 1232 с : Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*