XPath - XML Path Language

Transcript

XPath - XML Path Language
Corso di Laurea Specialistica in Ingegneria Informatica
Corso di Linguaggi e Tecnologie Web
XPATH – XML Path Language
Eufemia TINELLI
A. A. 2011 - 2012
Contenuti
• Strumenti per navigare un albero XML
– Percorsi di posizione e passaggi di posizione
• Assi
• Test dei nodi
• Predicati
• Nodo di contesto
– Operatori e funzioni dei nodi
• Esercitazione con RecipeML
E. TINELLI – LTW A. A. 20112011-2012
2
XPath
• Permette di localizzare parti specifiche di un documento XML
Æ Navigare albero XML
• Non è un linguaggio strutturato come XML ma basato su
“espressioni” usate da altre tecnologie XML
• Vede un documento XML come una “struttura gerarchica di
nodi”. Tipi di nodi: radice, elemento, testo, commento,
istruzione di elaborazione, namespace
• XPATH 1.0 W3C recommendation 1999
• XPATH 2.0 W3C draft 2005, W3C recommendation 2007
E. TINELLI – LTW A. A. 20112011-2012
3
Percorsi di posizione
• Un percorso di posizione (location path) è una sequenza di
passaggi (location steps) separati dal carattere ‘/’ che valuta
una sequenza di nodi:
– La sequenza è ordinata secondo la struttura gerarchica del
documento
– La sequenza non può contenere duplicati
• Un location step consiste di
– Un asse (axis)
axis :: nodetest [Exp1] [Exp2] ...
– Un node test
– Dei predicati (espressioni XPath)
• Un location step parte da un “nodo contesto” e individua
una sequenza di nodi Æ si potrebbe trasformare una
sequenza di nodi in un’altra rimpiazzando ogni nodo della
sequenza di input con il risultato di una location path che ha
quel nodo come contesto
E. TINELLI – LTW A. A. 20112011-2012
4
Individuare una sequenza di nodi: Esempio
E. TINELLI – LTW A. A. 20112011-2012
5
Individuare una sequenza di nodi: Esempio
Context Node
E. TINELLI – LTW A. A. 20112011-2012
6
Individuare una sequenza di nodi: Esempio
descendant::C
E. TINELLI – LTW A. A. 20112011-2012
7
Individuare una sequenza di nodi: Esempio
descendant::C/child::E
E. TINELLI – LTW A. A. 20112011-2012
8
Individuare una sequenza di nodi: Esempio
descendant::C/child::E/child::F
E. TINELLI – LTW A. A. 20112011-2012
9
I nodi di contesto
• Nella valutazione di una espressione XPath un “contesto”
contiene:
– Un nodo di contesto (un nodo dell’albero XML)
– Una posizione ed una dimensione (2 interi non negativi)
– Un insieme di operatori che mettono in relazione nomi di variabili
a valori
– Delle funzioni di libreria
– Un insieme di dichiarazioni di namespace che mettono in
relazione i prefissi con gli URIs
• Il contesto iniziale è determinato dall’applicazione che
richiede la valutazione dell’espressione XPath
• ‘/’ Æ forza a considerare come contesto iniziale il root node
E. TINELLI – LTW A. A. 20112011-2012
10
I nodi di contesto: Esempio
E. TINELLI – LTW A. A. 20112011-2012
11
I nodi di contesto: Esempio
E. TINELLI – LTW A. A. 20112011-2012
12
I nodi di contesto: Esempio
E. TINELLI – LTW A. A. 20112011-2012
13
Gli Assi (Axis)
• Le ricerche all’interno di un documento XML iniziano dal nodo
di contesto
• Un asse indica quali nodi, riferiti al nodo contesto, devono
essere inclusi nella ricerca
• Ogni asse ha una direzione: l’ordine con cui vengono
concatenati i nodi
– Sequenza diretta (ordine dei nodi nel documento XML)
• child, descendant, following-sibling, following, self, descendant-or-self
– Sequenza inversa (ordine inverso rispetto al documento XML)
• Parent, ancestor, preceding-sibling, preceding
– Attribute??
• Un asse ha un tipo di nodo principale che corrisponde al tipo
di nodo che l’asse può selezionare
– Tutti gli assi hanno element come tipo di nodo principale tranne
attribute e namespace
E. TINELLI – LTW A. A. 20112011-2012
14
Asse Parent
E’ vuoto per il root
node
E. TINELLI – LTW A. A. 20112011-2012
15
Asse Child
Gli attributi non sono
inclusi
E. TINELLI – LTW A. A. 20112011-2012
16
Asse Descendant
Gli attributi non sono
inclusi
E. TINELLI – LTW A. A. 20112011-2012
17
Asse Ancestor
E. TINELLI – LTW A. A. 20112011-2012
18
Asse Following-Sibling
E’ vuoto per gli attributi
E. TINELLI – LTW A. A. 20112011-2012
19
Asse Preceding-Sibling
E’ vuoto per gli attributi
E. TINELLI – LTW A. A. 20112011-2012
20
Asse Following
Sono esclusi i
discendenti
E. TINELLI – LTW A. A. 20112011-2012
21
Asse Preceding
Sono esclusi gli antenati
E. TINELLI – LTW A. A. 20112011-2012
22
Gli altri assi
• Attribute: individua i nodi degli attributi del nodo contesto
• Self: individua il nodo di contesto
• Descendant-or-self: è la concatenazione delle sequenze
di nodi degli assi Self e Descendant
• Ancestor-or-self: è la concatenazione delle sequenze di
nodi degli assi Self e Ancestor
• Namespace: individua i nodi dei namespace del nodo di
contesto
E. TINELLI – LTW A. A. 20112011-2012
23
Test dei nodi
• Un asse individua un gruppo di nodi dalla struttura ad albero
di un documento XML, i nodi vengono selezionati in base ai
test dei nodi
– text() seleziona tutti i nodi di testo
– comment() seleziona tutti i nodi dei commenti
– processing-instruction() seleziona tutti i nodi delle istruzioni di
elaborazione
– node() seleziona tutti i nodi (indipendetemente dal tipo)
– * seleziona tutti i nodi dello stesso tipo di nodo principale (dipende
dall’asse)
– name seleziona tutti i nodi di un dato nome
– *:localname seleziona tutti i nodi di un dato nome qualificato
– prefix:* seleziona tutti i nodi di un dato prefisso
E. TINELLI – LTW A. A. 20112011-2012
24
Esempi di Percorsi di destinazione
• Il titolo di ogni ricetta
• Il nome di ogni ingrediente
• Tutti i “character data” nella Collection
E. TINELLI – LTW A. A. 20112011-2012
25
Predicati XPath
• È una espressione XPath che può essere valutata come una condizione
booleana avente il nodo corrente come contesto
• Un predicato XPath può essere anche un percorso di destinazione che
permette di verificare le proprietà dei nodi senza “spostarsi” realmente nella
struttura dei nodi
• Questi esempi restituiscono lo stesso risultato?
E. TINELLI – LTW A. A. 20112011-2012
26
Espressioni generali
• Espressioni da valutare su valori atomici (numeri,
booleani, stringhe unicode e datatype di XSD) o nodi
• Espressioni aritmetiche (+,-,*,div,idiv,mod)
• Espressioni di confronto
– Operatori eq, ne, lt, le, gt, ge per i valori atomici
– Operatori =, !=, <, <=, >, >= per tutti i valori
– Operatori is, <<, >> per confrontare nodi
• Espressioni booleane
– Exp1 and exp2, exp1 or exp2, not(exp)
• Espressione For
– for $name in exp1 return exp2
• Espressione condizionale
– if (exp1) then exp2 else exp3
E. TINELLI – LTW A. A. 20112011-2012
27
Funzioni XPath
• XPath offre un elevato numero di funzionalità mediante
le function libraries
• Il namespace di default per tali funzioni (prefisso fn) è:
http://www.w3.org/2004/07/xpath-functions
Esso contiene 106 funzioni supportate da XPath 2.0
• Altre funzioni relative al casting/costruzioni di valori si
trovano al namespace (prefisso xs):
http://www.w3.org/2001/XMLSchema
Funzioni XPath
Funzioni XPath
Funzioni XPath
• fn:doc(“http://sisinflab.poliba.it/tinelli/recipes.xml”)
– Restituisce il root node del documento XML specificato dall’URI
• fn:position()
– Restituisce la posizione di un nodo nel “nodo contesto”
• fn:last()
– Restituisce la dimensione (size) di un “nodo contesto”
Esempi di predicati
• Verificare l’esistenza di un attributo
• Verificare l’uguaglianza del valore di un attributo
• Verificare due condizioni per volta
• Verificare la posizione del nodo contesto
• Verificare l’esistenza di un sotto-albero
E. TINELLI – LTW A. A. 20112011-2012
32
Abbreviazioni
E. TINELLI – LTW A. A. 20112011-2012
33
Espressioni XPath abbreviate
• Tutti gli ingredienti di una data ricetta
• Il titolo di una ricetta “dietetica”
• N.B.
• è diversa da
E. TINELLI – LTW A. A. 20112011-2012
34
Bookstore: documento XML di esempio
<bookstore>
<book category="COOKING">
<title lang="en">EverydayItalian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">HarryPotter</title>
<author>J K.Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">XQueryKickStart</title>
<author>JamesMcGovern</author>
<author>Per Bothner</author>
<author>KurtCagle</author>
<author>JamesLinn</author>
<author>VaidyanathanNagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>
<book category="WEB">
<title lang="en">LearningXML</title>
<author>ErikT.Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
E. TINELLI – LTW A. A. 20112011-2012
35
Esempi di espressioni XPath
E. TINELLI – LTW A. A. 20112011-2012
36
Usare i predicati
E. TINELLI – LTW A. A. 20112011-2012
37
XPath 1.0 e XPath 2.0
• Le espressioni generali sono state introdotte principalmente
con XPath2
• Molte implememtazioni supportano solo XPath 1.0
–
–
–
–
Gestione dei namespace di default
Minor numero di function library
Cast dei valori implicito
Alcune espressioni cambiano semantica
Es. “4” < “4.0” Æ è falsa in XPath 1.0 ma vera in XPath 2.0
Esercitazione RecipeML
E. TINELLI – LTW A. A. 20112011-2012
39
RecipeML DTD
E. TINELLI – LTW A. A. 20112011-2012
40
RecipeML Example
<collection>
<recipe>
<title>Beef Parmesan with Garlic Angel Hair Pasta</title>
<ingredient name="beef cube steak" amount="1.5" unit="pound" />
<ingredient name="onion, sliced into thin rings" amount="1" />
<ingredient name="green bell pepper, sliced in rings" amount="1" />
<ingredient name="Italian seasoned bread crumbs" amount="1" unit="cup" />
<ingredient name="grated Parmesan cheese" amount="0.5" unit="cup" />
<ingredient name="olive oil" amount="2" unit="tablespoon" />
<ingredient name="spaghetti sauce" amount="1" unit="jar" />
<ingredient name="shredded mozzarella cheese" amount="0.5" unit="cup" />
<ingredient name="angel hair pasta" amount="12" unit="ounce" />
<ingredient name="minced garlic" amount="2" unit="teaspoon" />
<ingredient name="butter" amount="0.25" unit="cup" />
<preparation>
<step>Preheat oven to 350 degrees F (175 degrees C).</step>
<step>Cut cube steak into serving size pieces. Coat meat with the bread crumbs and parmesan cheese. Heat
olive oil in a large frying pan, and saute 1 teaspoon of the garlic for 3 minutes. Quick fry (brown quickly on
both sides) meat. Place meat in a casserole baking dish, slightly overlapping edges. Place onion rings and
peppers on top of meat, and pour marinara sauce over all.</step>
<step>Bake at 350 degrees F (175 degrees C) for 30 to 45 minutes, depending on the thickness of the meat.
Sprinkle mozzarella over meat and leave in the oven till bubbly.</step>
<step>Boil pasta al dente. Drain, and toss in butter and 1 teaspoon garlic. For a stronger garlic taste, season
with garlic powder. Top with grated parmesan and parsley for color. Serve meat and sauce atop a mound
of pasta!</step>
</preparation>
<comment>Make the meat ahead of time, and refrigerate over night, the acid in the tomato sauce will
tenderize the meat even more. If you do this, save the mozzarella till the last minute.</comment>
<nutrition calories="1167" fat="23%" carbohydrates="45%" protein="32%" />
</recipe>
E. TINELLI – LTW A. A. 20112011-2012
41
Query
1. I titoli di tutte le ricette che usano l’olio di oliva.
2. I titoli di tutte le ricette restituite come stringhe
3. I titoli di tutte le ricette che hanno meno di 500 calorie
4. I titoli delle ricette che non usano burro
5. La quantità di zucchero necessaria per la Zuppa Inglese
6. I primi due steps nella preparazione della Zuppa Inglese
7. I titoli delle ricette che richiedono almeno 5 steps
8. Il numero di ricette nel documento
9. Il numero medio di calorie
10. Le ricette che hanno un ingrediente in comune con la
Zuppa Inglese
11. I titoli delle ricette che hanno soltanto ingredienti composti
E. TINELLI – LTW A. A. 20112011-2012
42
Riferimenti
• Specifiche
– http://www.w3.org/TR/xpath/
– http://www.w3.org/TR/xpath20/
• Testo consigliato
– A. Moller and M. Schwartzbach, An Introduction to XML and Web
Technologies, Addison Wesley, 2006 [cap. 3]
• Materiale esercitazioni
Ombretta Gaggi @ Università di Padova
Alessio Pace, Valter Crescenzi, Paolo Merialdo, Paolo Papotti @
Università Roma Tre
E. TINELLI – LTW A. A. 20112011-2012
43