+ All Categories
Home > Documents > XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De...

XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De...

Date post: 01-May-2015
Category:
Upload: grazia-dessi
View: 217 times
Download: 2 times
Share this document with a friend
40
XPath (XML Path Language) Laurea Magistrale Laurea Magistrale in Informatica in Informatica Reti 2 (2005/06) Reti 2 (2005/06) dott. Francesco De Angelis [email protected]
Transcript
Page 1: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath(XML Path Language)

Laurea Magistrale Laurea Magistrale in Informaticain Informatica

Reti 2 (2005/06)Reti 2 (2005/06)

dott. Francesco De [email protected]

Page 2: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 2

Agenda

Location Path e Location Step Assi Test di nodo Predicati (o filtri) Operatori e funzioni nei filtri Precisazioni Molti esempi…

Page 3: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 3

XPath

XPath è un linguaggio che permette di indirizzare parti di un documento XML XPath è una parte fondamentale di XSLT e di altre specifiche come XLink 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

Page 4: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 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

Le relazioni tra i nodi sono semplici: Un elemento annidato è un nodo figlio (child node)

dell’elemento che lo contiene Commenti, PI e testo sono figli dell’elemento che li

contiene (o del documento) I nodi attributo e dei namespace non sono considerati

child dei loro parent

Page 5: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 5

Location Path e Location Step

Il Location Path specifica come spostarsi tra i nodi dell’albero 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 parti:

Un asse Un test di nodo Zero o più predicati

axis::test[pred1][pred2]…[pred N]

Page 6: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 6

L’asse è un insieme di nodi Muovendosi 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 esso

Gli assi identificano la direzione rispetto alla struttura del documento in cui andare a cercare l’oggetto da restituire rispetto al nodo contesto (NC)

L’asse child degli elementi figli diretti è l’asse predefinito

Gli Assi

Page 7: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 7

Gli Assi

self Contiene il nodo corrente

child Contiene gli elementi direttamente annidati nel

contesto parent

Contiene il padre dell’elemento corrente attribute

Contiene gli attributi del nodo corrente ancestor

Contiene il padre del nodo, il padre del padre, ecc… ancestor-or-self

Come ancestor, ma contiene anche il nodo corrente

Page 8: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 8

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”)

Page 9: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 9

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.

Page 10: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 10

/

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

Page 11: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 11

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/>

Page 12: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 12

I Tipi

I tipi di nodo sono: radice elemento attributo testo namespace commento processing-instruction

Ogni asse ha un tipo predefinito se l’asse contiene

elementi, il tipo predefinito è “elemento”

se l’asse non contiene elementi ma attributi, il tipo predefinito è “attributo”

se l’asse non contiene elementi ma namespace, il tipo predefinito è “namespace”

Page 13: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 13

Sintassi abbreviata

In alcuni casi esistono delle forme abbreviate usabili invece della sintassi completa:

Child::x si può abbreviare con x Attribute::a si può abbreviare con @a Descendant si può abbreviare con ‘//’, self con ‘.’, parent con ‘..’

Esempi: /doc/chapter[5]/section[2]: la seconda sezione del

quinto capitolo del documento ./chapter//para: tutti i para discendenti a qualunque

livello di ogni nodo chapter figlio del NC //para: tutti i para discendenti a qualunque livello della

radice del documento

Page 14: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 14

Test di nodo (node test)

Per individuare un particolare nodo su un asse, si usano il suo tipo e/o il suo nome tramite i cosiddetti node test. Nel caso si lavori su un insieme di nodi, tutte le operazioni vengono applicate iterativamente a ciascun nodo Il risultato è un insieme di nodi, ciascuno dei quali può essere ulteriormente attraversato Il test può essere:

Un nome: vero se il nodo (elemento o attributo) ha quel nome

text(), processing-instruction(), comment(): vero se il nodo è di tipo testo, processing instruction o commento.

node(): vero sempre * : vero per tutti i nodi del tipo definito dall’asse

Page 15: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 15

I Nomi

Alcuni nodi possiedono anche un loro nome: I nodi elemento e attributo hanno il nome

dell’elemento e dell’attributo stessi Per indicare il nodo con un particolare nome, si usa

semplicemente il nome stesso come test Lo speciale test ‘*’ fa match con tutti i nodi accessibili

sull’asse, con qualunque nome I test restituiscono l’insieme dei nodi con quel

particolare nome presenti sull’asse

Page 16: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 16

I Predicati

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 filtrati

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

Page 17: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 17

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.

Page 18: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 18

Operandi nei Filtri

All’interno dei filtri si possono usare espressioni XPath operandi: Espressioni XPath (compresi altri filtri nidificati!), che

vengono valutate usando come contesto ciascun nodo dell’insieme di input

Il “valore” di una espressione XPath, se usata con operatori di confronto, è il testo in essa contenuto (valore dell’attributo o testo all’interno dell’elemento). Se l’espressione è un insieme, XPath restituisce true se c’è almeno un suo elemento che soddisfi il test.

Costanti numeriche o stringhe tra virgolette

Page 19: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 19

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”.

Page 20: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 20

<collection>

<song>

</collection>

<title/>

</song>

<song>

<title/>

</song>

<album>

<title/>

</album>

<album>

<title/>

</album>

<song>

<title/>

</song>

<song>

<title/>

</song>

collection/songcollection/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

/collection/song[@album =//album[title = “S”]/@ID]/title

Page 21: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 21

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” (non sottostringa!)

//album[3]il terzo elemento album presente in tutto il file XML

Page 22: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 22

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]tutti i nodi song o album nel documento corrente, a

qualsiasi livello di nidificazione.

Page 23: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 23

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

Page 24: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 24

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

Page 25: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 25

Funzioni nei Filtri

All’interno dei filtri si possono usare vari tipi di funzioni: funzioni su insiemi di nodi funzioni su stringhe funzioni numeriche funzioni booleane funzioni XSLT - Specifiche (non presenti nella

specifica XPath)

Page 26: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 26

Funzioni su Nodi

Principali funzioni sugli insiemi di nodi: count(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

esterni. id(“…”): restituisce il nodo con l’attributi di tipo ID

avente il valore dato.

Page 27: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 27

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 t substring-before(s,t): la sottostringa di s che arriva

fino ai caratteri t contains(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.

Page 28: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 28

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.

Page 29: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 29

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.

Page 30: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 30

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[substring-after(

substring-after(@date),’/’),’/’) = ‘2000’]gli album in cui l’attributo date è del tipo “…/…/2000”

//album[@ID = current()/@album]gli album il cui attributo ID è uguale all’attributo album del

contesto esterno corrente.

Page 31: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 31

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

Page 32: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 32

<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

Page 33: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 33

<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

Page 34: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 34

<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

Page 35: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 35

<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

Page 36: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 36

<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

Page 37: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 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 che arrivano a Napoli

//biglietto[.//tappa[last()]="Napoli"]

Un ulteriore esempio di XPath

Page 38: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 38

Alcune precisazioni

Root node e document node Gli XPath assoluti iniziano sempre con /root (dove root è il nome

dell'elemento radice), a parte /. Sono la stessa cosa? NO! Il nodo radice è più generale, e contiene

l'elemento radice (corrispondente al tag radice), ma non coincide con lui

Il nodo radice contiene la dichiarazione XML, la dichiarazione di tipo di documento (eventuali altre processing instruction) oltre al nodo dell'elemento radice, chiamato, per evitare confusioni, document element.

Assi in ordine rovesciato La maggior parte degli assi identifica la posizione seguendo l'ordine

degli elementi nel documento. Gli assi che indicano elementi precedenti al nodo (e.g., ancestor, preceding e preceding-sibling) vanno in ordine rovesciato, dunque

preceding[1] viene dopo di preceding[2] ancestor[1] è il padre, non la radice

Page 39: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 39

Alcune precisazioni

Caratteri proibiti XPath viene usato in contesti con sintassi particolari (es.

attributi XML o URI). In questi casi i caratteri leciti in XPath ma proibiti nel contesto vanno adeguatamente escapati.

<xsl:template match="doc[position() &lt; 3]”> Da notare che “–” è sia un carattere lecito nei nomi XML sia un

operatore matematico in XPath. Quindi è necessario precedere l'operatore matematico con uno spazio

/doc/para[@foo-bar] è diverso da /doc/para[@foo - bar] ID in XPath

La funzione id(foobar) richiede di identificare quell'elemento che abbia un attributo di tipo ID il cui valore sia foobar.

E' necessario avere il DTD per riconoscere che un attributo è di tipo ID. Poiché i DTD non sono necessari nei documenti XML, questa funzione può essere verificata solo da un parser validante, e quindi non è universale.

Page 40: XPath (XML Path Language) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XPath - XML Path Language 40

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


Recommended