xpath universita di camerino corso di laurea in informatica barbara re [email protected] anno...
TRANSCRIPT
XPATHXPATH
UNIVERSITA’ DI CAMERINOCorso di laurea in Informatica
Barbara [email protected]
Anno Accademico 2006-07
Laboratorio Informatico in Database Turistici
Barbara Re 2
Agenda
Location Path e Location Step Assi Test di nodo Predicati (o filtri) Operatori e funzioni nei filtri Precisazioni Molti esempi…
Laboratorio Informatico in Database Turistici
Barbara Re 3
XPath
XPath è un linguaggio che permette di indirizzare parti di un documento XML
XPath opera sulla struttura logica del documento, non su quella sintattica, usando una sintassi non XML accettabile all’interno di URI e attributi
XPath dispone anche di primitive per eseguire semplici operazioni su stringhe, numeri e valori booleani
Laboratorio Informatico in Database Turistici
Barbara Re 4
Il documento secondo XPath
Dal punto di vista di XPath, il documento XML è un albero
Ogni elemento, commento, attributo, PI o stringa di testo (non-markup) è un nodo dell’albero
I tipi di nodo sonoradiceelementoattributotestonamespacecommentoprocessing-instruction
Laboratorio Informatico in Database Turistici
Barbara Re 5
Relazioni tra nodi
La struttura ad albero di XPATH ha un solo nodo radice che contiene tutti gli altri nodi dell’albero
I nodi radice e i nodi degli elementi contengono liste ordinate di nodi child
Tutti i nodi tranne quello radice hanno un padre I nodi parent possono avere qualsiasi numero di
nodi child Gli unici nodi che possono essere nodi child sono gli
elementi, i commenti, i testi e le istruzioni di elaborazione
Laboratorio Informatico in Database Turistici
Barbara Re 6
Attenzione
Sebbene il nodo di attributo o namespace possa avere cme nodo parent un nodo di elemento o il nodo radice i nodi degli attributi o namespace non sono considerati nodi child dei loro nodi parent
La relazione che sta alla base della definizione di nodo parent e nodo child consiste nel fatto che il nodo parent contiene il nodo child
Il nodo degli attributi sono quindi semplicemente usati per fornire informazioni descrittive sui loro parent
Laboratorio Informatico in Database Turistici
Barbara Re 7
Ancora sui nodi
Ogni nodo della struttura ad albero pu essere rappresentato da una stringa usata poi per confrontare in nodi
La stringa di un elemento è formata dalla concatenazione delle stringhe di tutti i suoi nodi di testo child
Il nodo di un attributo è formato dal valore nomalizzato dell’attributo
La stringa di un nodo di commento è formata soltato dal testo del commento esclusi I caratteri <!-- e -->
Laboratorio Informatico in Database Turistici
Barbara Re 8
Ancora sui nodi
La stringa di un nodo di eleaborazione è formata da ciò che resta dell’istruzione di elaborazione dopo il target, includendo il carattere vuoto ma escludendo I caratteri finali ?>
La stringa del nodo di namespace è formata dall’URI del namespace
Laboratorio Informatico in Database Turistici
Barbara Re 9
Nome espanso sui nodi
Gli elementi, gli attributi le istruzioni di elaborazione e I namespace possono avere un nome espanso che può essere usato per determinare I nodi specifici nella struttura ad albero
Forma: parte locale e URI del namespaceElementi Parte locale nome elemento URI del namespace o di default o quello associatoAttributi Parte locale nome attributo URI del namespace o di default o quello associatoIstruzione di elaborazione Parte locale target istruzione di elaborazione URI del namespace nullNamespace Parte locale prefisso (o vuota se di default) URI del namespace null
Laboratorio Informatico in Database Turistici
Barbara Re 10
Riassumendo!!
Laboratorio Informatico in Database Turistici
Barbara Re 11
Location Path e Location Step
Il Location Path specifica come spostarsi tra i nodi dell’alberoassoluti: iniziano con / e si riferiscono ai nodi dalla radicerelativi: non iniziano con / e si riferiscono ai nodi dal nodo contesto
Un Location Path è composto di una sequenza di passi di locazione (Location Step) separati da ‘/’, e letti da sinistra a destra. Ogni termine individua più precisamente un frammento della risorsa individuata in precedenza.
Un location step ha tre partiUn asse, che definisce la relazione tra i nodiUn nodo di test, che definisce il tipo ed il nome dei nodi selezionatiZero o più predicati che raffinano l’insieme dei nodi selezionati
axis::test[pred1][pred2]…[pred N]
Laboratorio Informatico in Database Turistici
Barbara Re 12
Esempi
/A/B/C seleziona gli elementi di C che sono figli degli elementi B che sono figli dell'elemento A che rappresenta la radice del documento XML
A//B/*[1] seleziona il primo elemento ("[1]"), figlio di B, indipendentemente dal suo nome, e dal numero di nodi che intercorrono tra A e B (//). Da notare che l'esperssione non inizia con "/", quindi A è un nodo del contesto corrente.
/child::A/child::B/child::C
child::A/descendant-or-self::B/child::node()[1]
Laboratorio Informatico in Database Turistici
Barbara Re 13
L’asse è un insieme di nodiMuovendosi sull’albero del documento, XPath permette di scegliere non solo tra i figli del nodo corrente, ma anche tra una serie di altri insiemi di nodi che sono in relazione con essoLa ricerca inzia sempre dal nodo corrente chiamato anche nodo di contesto
Gli assi identificano quali nodi riferiti al nodo di contesto devono essere inclusi nella ricerca
L’asse determina anche la sequenza di ricerca dei nodi: diretta o inversa
Gli assi che selezionano i nodi che seguono il nodo di contesto nella sequenza del documento si chiamano nodi successivi (sequenza diretta) Gli assi che selezionano i nodi che precedono il nodo di contesto nella sequenza del documento si chiamano nodi precedenti (sequenza inversa)
Gli Assi
Laboratorio Informatico in Database Turistici
Barbara Re 14
Gli Assi
selfContiene il nodo corrente
child Contiene gli elementi direttamente annidati nel contesto
parentContiene il padre dell’elemento corrente
attribute Contiene gli attributi del nodo corrente
ancestorContiene il padre del nodo, il padre del padre, ecc…
ancestor-or-self Come ancestor, ma contiene anche il nodo corrente
Laboratorio Informatico in Database Turistici
Barbara Re 15
Gli Assi
descendant Contiene tutti gli elementi annidati nel nodo corrente (con livello di annidamento arbitrario)
descendant-or-self Come descendant, ma contiene anche il nodo corrente
following Contiene tutti i nodi che si trovano dopo quello corrente all’interno del documento, esclusi i discendenti, gli attributi del nodo e i namespaces
following-sibling Contiene tutti i nodi che hanno lo stesso livello di nidificazione nell’elemento padre di quello corrente e sono posti dopo di esso (“fratelli”)
Laboratorio Informatico in Database Turistici
Barbara Re 16
Gli Assi
preceding Contiene tutti i nodi che si trovano prima quello corrente all’interno del documento, esclusi i suoi antenati (ancestors), gli attributi del nodo e i namespaces
preceding-sibling Contiene tutti i nodi che hanno lo stesso livello di nidificazione nell’elemento padre di quello corrente e sono posti prima di esso
namespace Contiene i nodi namespace dichiarati per l’elemento corrente.
Laboratorio Informatico in Database Turistici
Barbara Re 17
/
R
S
P
I B
I
SS
P P P
B
P P P P P
P
S
P
I
P
Asse self::
Asse parent::
Asse preceding-sibling::
Asse following-sibling::
Asse child::
Asse ancestor::
Asse preceding::
Asse following::
Asse descendant::
Un esempio di alcuni assi
Laboratorio Informatico in Database Turistici
Barbara Re 18
Le gerarchie secondo XPath
ancestor: [c,a]ancestor-or-self: [d,c,a] attribute: [x]child: [f]descendant: [f,g]descendant-or-self: [d,f,g]following: [i,h]following-sibling: [i]namespace: [y]parent: [c]preceding: [b,e]preceding-sibling: [e]self: [d]
Nod
o Co
rren
te
Nod
o Co
rren
te<a>
<c>
<b/>
</c>
</a>
<d xmlns:y=“…” x=“…”>
<e/>
</d>
<g/>
<f>
</f>
<i/>
<h/>
Laboratorio Informatico in Database Turistici
Barbara Re 19
Riassumendo: estesa - contratta
ancestor-or-self non disponibile nella sintassi abbreviata
following non disponibile nella sintassi abbreviata
preceding non disponibile nella sintassi abbreviata
following-sibling non disponibile nella sintassi abbreviata
preceding-sibling non disponibile nella sintassi abbreviata
self .
namespace non disponibile nella sintassi abbreviata
child default, non specificato nella sintassi abbreviata
attribute @
descendant non disponibile nella sintassi abbreviata
descendant-or-self //
parent ..
ancestor non disponibile nella sintassi abbreviata
Laboratorio Informatico in Database Turistici
Barbara Re 20
Esempi
//a/@href seleziona un attributo denominato href in un qualunque elemento dell'albero del documento
h3[.='See also'] seleziona un elemento denominato h3 nel contesto corrente, il cui testo è uguale a "See also".
Laboratorio Informatico in Database Turistici
Barbara Re 21
Test di nodo (node test)
Identifica, attraverso il nome o il tipo, l'oggetto da restituire e può essere del tipo
Il test può essere: Un nome: Seleziona tutti i nodi che hanno quel nometext(), processing-instruction(), comment(): Seleziona tutti i nodi di tipo testo, processing instruction o commento del nodo contesto node(): Seleziona tutti i nodi indipendentemente dal tipo* : Seleziona tutti i nodi dello stesso tipo di nodo principale
Laboratorio Informatico in Database Turistici
Barbara Re 22
I Predicati
Tutti i controlli che permettono una maggiore selezione (raffinamento/scrematura) su un dato insieme di nodi sono detti PREDICATI
L'insieme di nodi iniziale viene filtrato e alla fine restano quelli che soddisfano il predicato specificato
I predicati in XPath corrispondono a dei filtri sull’insieme dei nodi selezionandone una parte secondo particolari criteri
Il risultato di un filtro è l’insieme dei nodi filtratiEssi sono inseriti tra parentesi quadre []
In ciascuno step si possono inserire un numero arbitrario di filtri, che vengono richiamati nell’ordine in cui si presentano
I filtri vanno posti nello step sempre dopo il node test
Laboratorio Informatico in Database Turistici
Barbara Re 23
I Predicati
All’interno del filtro si possono usare espressioni che abbiano valore booleano
L’espressione del filtro viene valutata usando ciascun nodo del set come contesto, e se vale true il nodo viene aggiunto all’insieme dei risultati
Esistono due eccezioni:Se l’espressione restituisce un numero, viene selezionato il nodo in quella posizione nell’insieme (gli insiemi di nodi sono ordinati)Se l’espressione restituisce un insieme di nodi, allora vale true se l’insieme non è vuoto
Laboratorio Informatico in Database Turistici
Barbara Re 24
<collection>
<song>
</collection>
<title/>
</song>
<song>
<title/>
</song>
<album>
<title/>
</album>
<album>
<title/>
</album>
<song>
<title/>
</song>
<song>
<title/>
</song>
/collection/song/collection/song
<album>
<title/>
</album>
<album>
<title/>
</album>
//album//album
<album>
<title/>
</album>
//album[title=“S”]//album[title=“S”]
<song>
<title/>
</song>
/collection/song[…]/collection/song[…]
<title/>
/collection//collection/song[…]/song[…]/
titletitle
Esempi
Laboratorio Informatico in Database Turistici
Barbara Re 25
I Filtri - Esempi
/collection/album[title = “Supernatural”]/@IDgli ID di ogni album nella collection che abbia
un (figlio) title contenente il testo “Supernatural”.
/collection/album[@ID = “123”]tutti gli album nella collection con ID uguale a “123”.
/collection/song[
@album =//album[title =“Supernatural”]/@ID
]/titlei titoli di tutte le song nella collection che hanno un attributo album uguale
all’ID di uno degli elementi album (presenti in qualunque punto tra i discendenti del contesto corrente) che hanno come title “Supernatural”
Laboratorio Informatico in Database Turistici
Barbara Re 26
I Filtri - Esempi
//album/title[ . = “Supernatural”]il title di tutti gli album intitolati “Supernatural”
/collection/song[comment]tutte le song nella collection che hanno un comment
/collection/song[comment[1] = “Hit”]tutte le song nella collection il cui primo comment
contiene il testo “Hit”
//album[3]il terzo elemento album presente in tutto il file XML
Laboratorio Informatico in Database Turistici
Barbara Re 27
I Filtri - Esempi
//song[1][@album = “santana1”]la prima song nel documento, se ha un attributo album con valore “santana1”
//cd[owner = “myself”]/song[@album = “santana1”]/title
i title di tutte le song aventi un attributo album con valore “santana1” che si trovano in un cd avente un elemento
figlio owner con valore “myself”.
//[self::song or self::album]i nodi song o album nel documento corrente, a qualsiasi
livello di nidificazione
Laboratorio Informatico in Database Turistici
Barbara Re 28
Operatori nei Filtri
All’interno dei filtri si possono usare operatori:Confronto: ‘=’ (uguale), ‘!=’ (diverso), ‘>’ (maggiore), ‘>=’ (maggiore o uguale), ‘<’ (minore), ‘<=’ (minore o uguale).Logici (tra espressioni filtro valide): and, or, not(…)Insiemistici: (da usare tra insiemi di nodi, ma all’esterno dei filtri!): ‘|’ (unione).Raggruppamento (per dare precedenza a certe espressioni, si possono usare anche all’esterno dei filtri!): ‘(…)’Matematici: ‘+’, ‘-’, ‘*’, ‘/’, mod
Laboratorio Informatico in Database Turistici
Barbara Re 29
I Filtri - Esempi
//album[@tracks >= 5]
tutti gli album con attributo tracks
avente valore maggiore di cinque
//song[title and artist]
tutte le song aventi (almeno)
un figlio title e un figlio artist
//song[@album != “santana1” and not(comment)]tutte le song con un attributo album con valore
diverso da “santana1” e senza figli comment
//cd/song[1]
la prima song di tutti i cd
(//cd/song)[1]
la prima di tutte le song in tutti i cd
Laboratorio Informatico in Database Turistici
Barbara Re 30
Funzioni nei Filtri
All’interno dei filtri si possono usare vari tipi di funzioni:
funzioni su insiemi di nodifunzioni su stringhefunzioni numerichefunzioni booleanefunzioni XSLT - Specifiche (non presenti nella specifica XPath)
Laboratorio Informatico in Database Turistici
Barbara Re 31
Funzioni su Nodi
Principali funzioni sugli insiemi di nodicount(ns): dimensione dell’insieme di nodi ns.last(): indice dell’ultimo elemento nell’insieme di nodi corrente.position(): posizione del nodo corrente all’interno del suo genitore.document(...): permette di accedere a documenti XML esterniid(“…”): restituisce il nodo con l’attributi di tipo ID avente il valore dato.
Laboratorio Informatico in Database Turistici
Barbara Re 32
Funzioni sulle Stringhe
Principali funzioni sulle stringhe:string(o): converte l’oggetto o in una stringa.concat(s1,s2,...): concatena più stringhe.substring(s,x,y): sottostringa di s che inizia al carattere x ed è lunga y (opzionale)substring-after(s,t): la sottostringa di s che inizia dopo i caratteri tsubstring-before(s,t): la sottostringa di s che arriva fino ai caratteri tcontains(s,t): vero se s contiene t.starts-with(s,t): vero se s inizia con t.string-length(s): la lunghezza della stringa s.
Laboratorio Informatico in Database Turistici
Barbara Re 33
Funzioni Booleane
Principali funzioni sui valori booleani:boolean(o): converte l’oggetto o in un valore booleano.true(): vale sempre true.false(): vale sempre false.not(e): vale l’opposto di e.
Laboratorio Informatico in Database Turistici
Barbara Re 34
Funzioni Numeriche
Principali funzioni sui valori numerici:number(o): converte l’oggetto o in un valore numerico.ceiling(x): restituisce l’intero più piccolo che non sia minore di x.floor(x): restituisce l’intero più grande che non sia maggiore di x.round(x): arrotonda x a un intero.sum(ns): converte in numeri (usando number()) tutti i nodi nell’insieme ns, e ne restituisce la somma.
Laboratorio Informatico in Database Turistici
Barbara Re 35
I Filtri - Esempi
//song[position() = last()]l’ultima song nel documento.
//cd[sum(song/length) > 60]/titlei titoli di tutti i cd in cui la durata
totale delle song è maggiore di 60.
//cd[count(song) < 12]i cd con meno di 12 song.
//album[@ID = current()/@album]gli album il cui attributo ID è uguale all’attributo album del
contesto esterno corrente.
Laboratorio Informatico in Database Turistici
Barbara Re 36
Un ulteriore esempio di XPath
<prenotazioni> <biglietto nome="Luca Verdi"> <voloAndata data=“1-8-2005”> <tappa t="Bologna"/><tappa t="Frankfurt"/><tappa t="NewYork"/> </voloAndata> <voloRitorno data=“8-8-2005”> <tappa t="NewYork"/><tappa t="Roma"/><tappa t="Bologna"/> </voloRitorno> <prezzo>990</prezzo> </biglietto> <biglietto nome="Luigi Bianchi"> <destinazione>Roma</destinazione> <voloAndata data=“6-8-2005”> <tappa t="Bologna"/><tappa t="Roma"/> </voloAndata> <voloRitorno data=“7-8-2005”> <tappa t="Roma"/><tappa t="Bologna"/> </voloRitorno> <prezzo>240</prezzo> </biglietto>...
Scrivere un XPath che identifichi:1.Tutti i biglietti di Luca Verdi2.Tutti i biglietti che costano più di
1000 euro3.Tutte le tappe di tutti i voli4.Tutti i biglietti del 6 agosto5.Tutti i biglietti che passano per
Roma6.Le date di tutti i biglietti che
arrivano a Napoli
Laboratorio Informatico in Database Turistici
Barbara Re 37
<prenotazioni> <biglietto nome="Luca Verdi"> <voloAndata data=“1-8-2005”> <tappa t="Bologna"/><tappa t="Frankfurt"/><tappa t="NewYork"/> </voloAndata> <voloRitorno data=“8-8-2005”> <tappa t="NewYork"/><tappa t="Roma"/><tappa t="Bologna"/> </voloRitorno> <prezzo>990</prezzo> </biglietto> <biglietto nome="Luigi Bianchi"> <destinazione>Roma</destinazione> <voloAndata data=“6-8-2005”> <tappa t="Bologna"/><tappa t="Roma"/> </voloAndata> <voloRitorno data=“7-8-2005”> <tappa t="Roma"/><tappa t="Bologna"/> </voloRitorno> <prezzo>240</prezzo> </biglietto>...
Tutti i biglietti di Luca Verdi
//prenotazioni/biglietto[@nome=‘Luca Verdi’]
Un ulteriore esempio di XPath
Laboratorio Informatico in Database Turistici
Barbara Re 38
<prenotazioni> <biglietto nome="Luca Verdi"> <voloAndata data=“1-8-2005”> <tappa t="Bologna"/><tappa t="Frankfurt"/><tappa t="NewYork"/> </voloAndata> <voloRitorno data=“8-8-2005”> <tappa t="NewYork"/><tappa t="Roma"/><tappa t="Bologna"/> </voloRitorno> <prezzo>990</prezzo> </biglietto> <biglietto nome="Luigi Bianchi"> <destinazione>Roma</destinazione> <voloAndata data=“6-8-2005”> <tappa t="Bologna"/><tappa t="Roma"/> </voloAndata> <voloRitorno data=“7-8-2005”> <tappa t="Roma"/><tappa t="Bologna"/> </voloRitorno> <prezzo>240</prezzo> </biglietto>...
Tutti i biglietti che costano più di 1000 euro
//prenotazioni/biglietto[prezzo > 1000]
Un ulteriore esempio di XPath
Laboratorio Informatico in Database Turistici
Barbara Re 39
<prenotazioni> <biglietto nome="Luca Verdi"> <voloAndata data=“1-8-2005”> <tappa t="Bologna"/><tappa t="Frankfurt"/><tappa t="NewYork"/> </voloAndata> <voloRitorno data=“8-8-2005”> <tappa t="NewYork"/><tappa t="Roma"/><tappa t="Bologna"/> </voloRitorno> <prezzo>990</prezzo> </biglietto> <biglietto nome="Luigi Bianchi"> <destinazione>Roma</destinazione> <voloAndata data=“6-8-2005”> <tappa t="Bologna"/><tappa t="Roma"/> </voloAndata> <voloRitorno data=“7-8-2005”> <tappa t="Roma"/><tappa t="Bologna"/> </voloRitorno> <prezzo>240</prezzo> </biglietto>...
Tutte le tappe di tutti i voli:
//tappa
Un ulteriore esempio di XPath
Laboratorio Informatico in Database Turistici
Barbara Re 40
<prenotazioni> <biglietto nome="Luca Verdi"> <voloAndata data=“1-8-2005”> <tappa t="Bologna"/><tappa t="Frankfurt"/><tappa t="NewYork"/> </voloAndata> <voloRitorno data=“8-8-2005”> <tappa t="NewYork"/><tappa t="Roma"/><tappa t="Bologna"/> </voloRitorno> <prezzo>990</prezzo> </biglietto> <biglietto nome="Luigi Bianchi"> <destinazione>Roma</destinazione> <voloAndata data=“6-8-2005”> <tappa t="Bologna"/><tappa t="Roma"/> </voloAndata> <voloRitorno data=“7-8-2005”> <tappa t="Roma"/><tappa t="Bologna"/> </voloRitorno> <prezzo>240</prezzo> </biglietto>...
Tutti i biglietti del 6 agosto
//biglietto[*/@data="6-8-2005"]
Un ulteriore esempio di XPath
Laboratorio Informatico in Database Turistici
Barbara Re 41
<prenotazioni> <biglietto nome="Luca Verdi"> <voloAndata data=“1-8-2005”> <tappa t="Bologna"/><tappa t="Frankfurt"/><tappa t="NewYork"/> </voloAndata> <voloRitorno data=“8-8-2005”> <tappa t="NewYork"/><tappa t="Roma"/><tappa t="Bologna"/> </voloRitorno> <prezzo>990</prezzo> </biglietto> <biglietto nome="Luigi Bianchi"> <destinazione>Roma</destinazione> <voloAndata data=“6-8-2005”> <tappa t="Bologna"/><tappa t="Roma"/> </voloAndata> <voloRitorno data=“7-8-2005”> <tappa t="Roma"/><tappa t="Bologna"/> </voloRitorno> <prezzo>240</prezzo> </biglietto>...
Tutti i biglietti che passano per Roma
//biglietto[.//tappa/@t="Roma"]
Un ulteriore esempio di XPath
Laboratorio Informatico in Database Turistici
Barbara Re 42
<prenotazioni> <biglietto nome="Luca Verdi"> <voloAndata data=“1-8-2005”> <tappa t="Bologna"/><tappa t="Frankfurt"/><tappa t="NewYork"/> </voloAndata> <voloRitorno data=“8-8-2005”> <tappa t="NewYork"/><tappa t="Roma"/><tappa t="Bologna"/> </voloRitorno> <prezzo>990</prezzo> </biglietto> <biglietto nome="Luigi Bianchi"> <destinazione>Roma</destinazione> <voloAndata data=“6-8-2005”> <tappa t="Bologna"/><tappa t="Roma"/> </voloAndata> <voloRitorno data=“7-8-2005”> <tappa t="Roma"/><tappa t="Bologna"/> </voloRitorno> <prezzo>240</prezzo> </biglietto>...
Tutti i biglietti che arrivano a Napoli
//biglietto[.//tappa[last()]="Napoli"]
Un ulteriore esempio di XPath
Laboratorio Informatico in Database Turistici
Barbara Re 43
Riferimenti
Deitel et al, XML Corso di programmazione, Apogeo
Chris Bates, XML in theory and Practice, Wiley
XML Path Language (XPath) Version 1.0W3C Recommendation 16 November 1999http://www.w3.org/TR/xpath
W3Schools Online Web Tutorialshttp://www.w3schools.com/xpath/default.asp
Laboratorio Informatico in Database Turistici
Barbara Re 44
Ci sono domande?