XQUERY
XPATH este un limbaj de interogare a documentelor XML, o interogare returnand un set de date continand noduri sau valori scalare. Datorita limitarilor XPATH in cazul procesarii unor cantitati mari de date sau in cazul surselor de date multiple a fost dezvoltat limbajul XQUERY care extinde XPATH 2.0 si preia si functionalitati din XSLT (XSL Transformations – limbaj folosit pentru transformari ale documentelor XML). XQUERY permite interogari care includ documente multiple si este integrat in database engine.
O interogare XQUERY consta in doua sectiuni principale:
§ sectiunea prolog – optionala, folosita pentru declaratii (declararea spatiilor de nume, declararea schemelor)
§ sectiunea body (corpul interogarii) – interogarea propriu-zisa in care expresii XQUERY sunt folosite pentru a specifica datele ce vor fi returnate
O expresie XQUERY utilizeaza o cale XQUERY (bazata pe limbajul XPATH) pentru localizarea unui nod intr-un document xml. O cale XQUERY poate fi absoluta (locatia unui nod este decrisa fata de elementul root) sau relativa (fata de un nod identificat).
Exemple:
§ /magazin/carte - toate elementele carte continute de elementul magazin
§ /magazin/carte[1] – primul element carte continut de elementul magazin
Exemplele se bazeaza pe un document xml salvat cu numele Books.xml in directorul radacina a drive-ului C: (pentru a fi mai usor de referit).
Books.xml
<?xml version="1.0" ?>
<magazin>
<carte categorie="SQL">
<titlu>Functionalitati Noi In SQL Server 2005</titlu>
<autori>
<autor>Narcis Ditiu</autor>
<autor>Cristian Lefter</autor>
<autor>Adrian Stoian</autor>
</autori>
<an>2005</an>
</carte>
<carte categorie="Programare">
<titlu>Beginning ASP.NET 2.0 E-Commerce in C# 2005</titlu>
<autori>
<autor>Cristian Darie</autor>
</autori>
<an>2005</an>
</carte>
</magazin>
Specificatiile limbajului XQUERY includ instructiunile for, let, order by, where si return (cunoscute sub numele de Instructiuni FLOWR – pronuntat flower). Instructiunile FLOWR sunt similare cu SELECT-FROM-WHERE in T-SQL. Pentru exemplificare urmatorul exemplu incarca in variabila doc documentul Books.xml si returneaza toate titlurile cartilor publicate in anul 2005 ordonate dupa titlul acestora.
Exemplu:
let $doc := doc('file:///c:/Books.xml')
for $a in $doc//magazin/carte
where $a/an = '2005'
order by $a/titlu
return $a/titlu
Rezultat:
<titlu>Beginning ASP.NET 2.0 E-Commerce in C# 2005</titlu>
<titlu>Functionalitati Noi In SQL Server 2005</titlu>
SQL Server 2005 suporta un subset al limbajului XQUERY pentru a permite interogari ale datelor de tip xml. Tipul de date xml expune urmatoarele metode:
§ query() – pentru a interoga o instanta a tipului de date xml
§ value() – pentru a returna o valoare scalara avand un tip de date SQL (int, varchar etc)
§ exists() – determina existenta rezultatelor pentru o expresie XQUERY
§ modify() – folosita pentru modificari
§ nodes() – folosita pentru a genera un set de randuri dintr-un document xml
Exemple:
-- declarare si setare variabila tip xml
DECLARE @myDoc XML
SELECT @myDoc = BulkColumn
FROM OPENROWSET( Bulk 'C:\Books.xml', SINGLE_BLOB ) AS x
-- interogare folosind metoda query
SELECT @myDoc.query('for $a in /magazin/carte
where $a/an = "2005"
order by $a/@categorie
return $a/titlu')
-- returneaza valoarea atributului categorie
-- pentru prima carte
-- respectiv valoarea "SQL"
DECLARE @Categorie VARCHAR(64)
SET @Categorie = @myDoc.value('(/magazin/carte/@categorie)[1]', 'varchar(64)' )
SELECT @Categorie
Cristian Andrei Lefter, SQL Server MVP
MCT, MCSA, MCDBA, MCAD, MCSD .NET,
MCTS, MCITP - Database Administrator SQL Server 2005
http://sqlserver.ro