Title: XQUERY
1XQUERY
- Basi di Dati II
- Sara Romano
2Cosè XQuery?
- XQuery è il linguaggio per interrogare dati XML
- XQuery è per lXML quello che SQL è per i
database -
- XQuery è implementato sulla base delle
espressioni XPath -
- XQuery è una Raccomandazione del W3C. (XQuery
1.0 became a W3C Recommendation January 23, 2007)
3XQuery e XPath
- Il linguaggio XQuery 1.0 è progettato come
superinsieme proprio di XPath 2.0 ogni
espressione XPath è anche espressione XQuery. - XQuery 1.0 and XPath 2.0 presentano lo stesso
data model e supportano le stesse funzioni ed
operatori. - Sfrutta il potere espressivo di XPath, in
aggiunta - esegue il join di informazioni da fonti diverse
- genera nuovi frammenti XML
- funzioni definite dallutente.
4Interrogazioni XQuery
Interrogazione è composta da un prologo seguito
da espressioni FLWOR. Prologo le espressioni
XQuery sono valutate relativamente ad un
contesto. Definizione di parametri per il
processore XQuery. Esempio xquery version
"1.0" declare default element namespace
URI declare default function namespace
URI import schema at URI
5FLWOR Expression
Permettono di ristrutturare ed unire informazioni
provenienti da fonti diverse. For Let Where
Order by Return
Generazione di sequenze di tuple (opzionali)
Filtraggio della sequenza (opzionale)
Ordinamento della sequenza risultante (opzionale)
Costruzione della sequenza risultante
6Clausola FOR (1/3)
- La clausola For lega una variabile ad ogni
elemento restituito dallespressione XPath. - La clausola For è una iterazione.
- Possono esserci più clausole For allinterno di
una FLWOR expression.
Esempio for x in (1 to 5) return lttestgt x
lt/testgt
Risultato lttestgt1lt/testgt lttestgt2lt/testgt lttestgt
3lt/testgt lttestgt4lt/testgt lttestgt5lt/testgt
7Clausola FOR (2/3)
- per effettuare il conteggio sulliterazione è
possibile utilizzare la keyword at allinterno
della clausola for.
Esempio (books.xml) for x at i in
doc("books.xml")/bookstore/book/title return
ltbookgt i . data(x) lt/bookgt
Risultato ltbookgt1. Everyday Italianlt/bookgt ltboo
kgt2. Harry Potterlt/bookgt ltbookgt3. XQuery Kick
Startlt/bookgt ltbookgt4. Learning XMLlt/bookgt
8Clausola FOR (3/3)
- E possibile utilizzare più espressioni
allinterno di una clausola for.
Esempio for x in (10,20), y in
(100,200) return lttestgt x x and y y
lt/testgt
Risultato lttestgtx10 and y100lt/testgt lttestgtx1
0 and y200lt/testgt lttestgtx20 and
y100lt/testgt lttestgtx20 and y200lt/testgt
9Clausola LET
- La clausola let associa ad una variabile il
risultato di una espressione XPath.
Esempio let x (1 to 5) return lttestgt x
lt/testgt
Risultato lttestgt1 2 3 4 5lt/testgt
10Clausola WHERE
- La clausola where è utilizzata per definire
filtri sui risultati derivati dalle clausole
precedenti (for e let).
Esempio where x/pricegt30 and x/pricelt100
11Clausola ORDER BY
- La clausola order by definisce il tipo di
ordinamento del risultato.
Esempio for x in doc("books.xml")/bookstore/boo
k order by x/_at_category, x/title return
x/title
Risultato lttitle lang"en"gtHarry
Potterlt/titlegt lttitle lang"en"gtEveryday
Italianlt/titlegt lttitle lang"en"gtLearning
XMLlt/titlegt lttitle lang"en"gtXQuery Kick
Startlt/titlegt
12Clausola RETURN
- La clausola return specifica cosa deve essere
restituito in output.
Esempio for x in doc("books.xml")/bookstore/boo
k return x/title
Risultato lttitle lang"en"gtEveryday
Italianlt/titlegt lttitle lang"en"gtHarry
Potterlt/titlegt lttitle lang"en"gtXQuery Kick
Startlt/titlegt lttitle lang"en"gtLearning
XMLlt/titlegt
13Esempio 1
Dato il documento books.xml (http//www.w3schools.
com/xquery/xquery_example.asp) Titoli dei libri
che costano più di 30 For x in
doc("books.xml")/bookstore/bookwhere
x/pricegt30return x/title
Il path expression doc("books.xml")/bookstore/bo
okpricegt30/title Produce lo stesso risultato.
Risultato lttitle lang"en"gtXQuery Kick
Startlt/titlegtlttitle lang"en"gtLearning
XMLlt/titlegt
14Esempio 2
Dato il documento books.xml (http//www.w3schools.
com/xquery/xquery_example.asp) Titoli dei libri
che costano più di 30 ordinati per titolo for
x in doc("books.xml")/bookstore/bookwhere
x/pricegt30order by x/titlereturn x/title
Risultato lttitle lang"en"gtLearning
XMLlt/titlegtlttitle lang"en"gtXQuery Kick
Startlt/titlegt
15Differenze tra FOR e LET (1/4)
for x in (1, 2, 3, 4) let y ("a", "b",
"c") return (x, y)
1, a, b, c, 2, a, b, c, 3, a, b, c, 4, a, b, c
16Differenze tra FOR e LET (2/4)
let x in (1, 2, 3, 4) for y ("a", "b",
"c") return (x, y)
1, 2, 3, 4, a, 1, 2, 3, 4, b, 1, 2, 3, 4, c
17Differenze tra FOR e LET (3/4)
for x in (1, 2, 3, 4) for y in ("a", "b",
"c") return (x, y)
1, a, 1, b, 1, c, 2, a, 2, b, 2, c, 3, a, 3, b,
3, c, 4, a, 4, b, 4, c
18Differenze tra FOR e LET (4/4)
let x (1, 2, 3, 4) let y ("a", "b",
"c") return (x, y)
1, 2, 3, 4, a, b, c
Ogni clausola for e let può far riferimento a
variabili legate in clausole precedenti in
questo modo si può effettuare il join tra
documenti XML.
19Espressioni racchiuse
Le espressioni XML possono essere calcolate
dinamicamente mediante luso di espressioni
racchiuse expr Esempio ltfoogt1 2 3 4
5lt/foogt ltfoogt1, 2, 3, 4, 5lt/foogt ltfoogt1,
"2", 3, 4, 5lt/foogt ltfoogt1 to 5lt/foogt ltfoogt1
11 " " "3" " " 4 to 5lt/foogt
20Costruttori
Le espressioni racchiuse possono essere
utilizzate nei costruttori.
Esempio element card namespace
"http//businesscard.org" , element name text
"John Doe" , element title text "CEO,
Widget Inc." , element email text
"john.doe_at_widget.com" , element phone text
"(202) 555-1414" , element logo
attribute uri "widget.gif"
ltcard xmlns"http//businesscard.org"gt ltnamegtJohn
Doelt/namegt lttitlegtCEO, Widget
Inc.lt/titlegt ltemailgtjohn.doe_at_widget.comlt/emailgt
ltphonegt(202) 555-1414lt/phonegt ltlogo
uri"widget.gif"/gt lt/cardgt
21Definizione di nuovi nodi (1/2)
Titoli dei libri che costano più di 30 ordinati
per titolo ltmyQuerygt for x in
doc("books.xml")/bookstore/book where
x/pricegt30 order by x/title return ltresultgt
x/title lt/resultgt lt/myQuerygt
22Definizione di nuovi nodi (2/2)
- Produce come risultato un documento XML piuttosto
che una lista di nodi
ltmyQuerygt ltresultgt lttitle
lang"en"gtLearning XMLlt/titlegt lt/resultgt
ltresultgt lttitle lang"en"gtXQuery Kick
Startlt/titlegt lt/resultgt ltmyQuerygt
23Esempi basex
- Esempio Ricette del libro
24Espressioni Condizionali
XQuery accetta le espressioni del tipo If - Then
- Else
Esempio for x in doc("books.xml")/bookstore/book
return if (x/_at_category"CHILDREN") then
ltchildgt data(x/title) lt/childgt else ltadultgt
data(x/title) lt/adultgt
Risultato ltadultgtEveryday Italianlt/adultgt ltchil
dgtHarry Potterlt/childgt ltadultgtLearning
XMLlt/adultgt ltadultgtXQuery Kick Startlt/adultgt
25Funzioni
In XQuery vi sono due tipi di funzioni
- Funzioni built-in
- Funzioni definite dallutente.
26Funzioni built-in
- XQuery include più di 100 funzioni built-in. Vi
sono funzioni per le stringhe, i valori numerici
manipolazione di sequenze, ecc. - LURI del namespace per le funzioni XQuery è
- http//www.w3.org/2005/02/xpath-functions
- Il prefisso di default del namespace delle
funzioni è fn - Lutilizzo del prefisso di default nelle chiamate
a funzione non è obbligatorio.
27Funzioni definite dallutente
- La definizione delle funzioni deve essere
dichiarata nel prologo con la sintassi -
- declare function nome (x1, x2, , xk) espr
- Le variabili x1, x2, , xk sono visibili
allinterno dellespressione espr. - La sintassi della chiamata è
-
- nome (espr1, espr2, , esprk)
28Tipi per funzioni e parametri
- I tipi sequenza sono utilizzati nei parametri e
nei risultati delle funzioni -
- declare function nome (x1 as item(), , xk as
item()) as item() espr - Si possono utilizzare annotazioni più precise
-
- declare function nome (x as xsstring) as
xsdecimal espr
29Esempi Basex
- Esempio studenti del libro
30Database XML
- Basi di dati relazionali sono potenti con
tecnologie (ottimizzazione,concorrenza,
indicizzazione, recupero dati) sviluppate da più
di 40 anni. - XQuery è un progetto recente, ancora non adatto a
grandi applicazioni commerciali. Le
implementazioni sono leggere e facili da
estendere con nuove caratteristiche XML.
31Viste XML di una tabella
- Molti sistemi supportano la possibilità di
esportare i dati relazionali in un formato XML. - Per esempio SQL/XML è unestensione di SQL per
costruire dati XML come risultato di query SQL.
xmlelement(name, "Students", SELECT
xmlelement(name, "record", xmlattributes(s.id,
s.name, s.age)) FROM Students )
Students
ID NAME AGE
100026 Joe Mediocre 21
100078 Jack Doe 18
ltStudentsgt ltrecord id"100026" name"Joe Average"
age"21"/gt ltrecord id"100078" name"Jack Doe"
age"18"/gt lt/Studentsgt
32Riferimenti
- Libro
- http//www.w3schools.com/xquery
- http//www.w3.org/XML/Query/
- http//www.w3.org/TR/xquery/