XML: XPath - Dipartimento di Scienze Ambientali, Informatica e

Transcript

XML: XPath - Dipartimento di Scienze Ambientali, Informatica e
XML: XPath
●
●
●
●
XPath, acronimo di XML Path Language è un
linguaggio il cui scopo è quello di identificare
particolari nodi o set di nodi all'interno di un
documento XML.
Il documento XML ha per sua natura una struttura
ad albero, e quindi sono individuabili una serie di
nodi.
La sintassi di XPath NON è una sintassi XML.
Il concetto (e la sintassi in forma abbreviata) è
simile a quello di navigazione su un file system
(Unix) con l'ausilio di implementazioni che ne
aumentano le potenzialità.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: XPath
●
●
XPath 1.0: W3C Recommendation del 16
novembre 1999.
XPath 2.0: W3C Recommendation del 23 gennaio
2007.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Xpath - Data Type
ANALIZZIAMO I TIPI DI NODI PRESENTI IN UN
DOCUMENTO XML
La quasi totalità di un documento XML è formato da tre
tipologie di nodi:
●
Root Node
E' la radice che contiene tutti gli altri nodi
●
Element Node
Sono gli elementi del documento
●
Attribute Node
Sono gli attributi di ciascun elemento
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Xpath - Data Type
Poi ci sono altri quattro nodi meno frequenti:
●
Namespace Node
Sono rappresentati dai namespace
●
Processing Instruction Node
Sono le istruzioni di elaborazione esclusa la dichiarazione di
documento
●
Comment Node
Sono i commenti del documento
●
Text Node
E' il testo presente all'interno di un elemento
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Xpath – Data Type
Tutti i risultati delle espressioni XPath hanno uno dei
seguenti tipi di dato come risultato:
●
node set
Un insieme di nodi di un documento XML
●
boolean
Un tipo di dato binario che puo' assumere il valore true o false
generalmente prodotto mediante operatori di confronto o logici.
●
number
Un tipo di dato floating point. In più sono compresi i valori speciali,
Inf, -Inf e Nan
●
string
Una sequenza di caratteri Unicode racchiusi tra apici singoli o doppi
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Xpath
La Location Path è quell'insieme di regole principali per
formare le espressioni che individueranno la porzione di
un documento XML che vogliamo estrarre/identificare.
Ci sono due forme per scrivere le espressioni XPath, la
forma abbreviata e quella estesa.
●
●
La forma abbreviata ricorda molto la sintassi della
shell Unix con simboli come / . ..
La forma estesa ha una sintassi particolare, e divide il
suo costrutto in 3 parti, un axis (asse), un node test
(test di nodo) e un'altra parte ozpionale che è il
predicate (predicato).
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Xpath – Forma estesa
LocationPath =
LocationStep/LocationStep/.../LocationStep
axis::node-test[predicate1][predicate2][...]
I location step consistono di un identificatore di asse, un
test di nodo e zero o più predicati.
Un location step identifica un nuovo node-set relativo al
contesto node-set.
Il location step viene valutato per ogni nodo all'interno del
contesto node-set, e l'unione dei risultanti node-set
diventano il nuovo contesto node-set per il passo
successivo di elaborazione.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Xpath – Location Step
Un location step ha tre parti:
●
●
●
Un axis (asse), che individua la direzione di
specifica del location step nell’albero e rispetto
al contesto.
Un node test (test di nodo), che individua il tipo e
il nome completo del nodo identificato dal
location step.
Zero o più predicates (predicati) che raffinano
ulteriormente l’insieme di nodi selezionati dal
location step
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Xpath – Forma estesa
L'asse di una espressione XPath indica, partendo dal
test node, la direzione da seguire per la ricerca.
TIPI DI AXIS (13)
●
self - il nodo stesso
●
child - tutti i nodi figli del set di nodi (è il nodo di default quindi puo' anche
essere omesso)
●
descendant - tutti i nodi contenuti nel set di nodi (quindi figli, figli dei
figli e così via)
●
descendant-or-self - tutti i descendant oltre al nodo stesso
●
parent - il nodo che contiene il set dei nodi
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Xpath – Forma estesa
TIPI DI AXIS - CONTINUAZIONE
●
ancestor - tutti gli elementi e il nodo radice che contengono il set dei
nodi
●
ancestor-or-self - tutti gli ancestor oltre al nodo stesso
●
preceding - tutti i nodi prercedenti del set dei nodi, ossia i nodi che
terminano prima del set di nodi in esame
●
preceding-sibling - tutti i fratelli precedenti del set dei nodi, ossia i
fratelli che terminano prima dell'inizio del set di nodi in esame
●
following - tutti i nodi successivi del set dei nodi, ossia i nodi che iniziano
dopo il set di nodi in esame
●
following-sibling - tutti i fratelli successivi del set dei nodi, ossia i
fratelli che iniziano dopo l'inizio del set di nodi in esame
●
attribute - gli attributi del set dei nodi
●
namespace - i namespace del set dei nodi
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Xpath – Forma estesa
ESEMPI
DI
ASSI
E
NODI
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Xpath – Forma estesa
Il node test indica quali nodi includere lungo l'axis
specificato prima dei ::
TIPI DI NODE TEST
●
name - ogni elemento o attributo con quel nome lungo l'asse specificato
●
* - ogni elemento lungo l'asse specificato
●
prefix:* - ogni elemento o attributo con il namespace 'prefix' lungo l'asse
specificato
●
comment() - ogni commento lungo l'asse specificato
●
text() - ogni nodo di testo lungo l'asse specificato
●
node() - ogni nodo lungo l'asse specificato
●
processing-instruction() - ogni istruzione di elaborazione lungo l'asse
specificato
●
processing-instruction('target') - ogni istruzione di elaborazione
che si riferisce al relativo 'target' lungo l'asse specificato
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Xpath – Forma estesa
I predicate sono racchiusi da [...] alla fine di un
location step. Un predicate filtra un node-set per
produrre un nuovo node-set, anlizzando ogni nodo
nel node-set in base al predicate. Sulla base del
risutato (boolean) o della posizione il nodo viene
o meno lasciato all'interno del node-set.
In poche parole, una volta ritrovato un set di nodi
grazie ad axis::nodetest, possiamo grazie ai
predicati, selezionare una parte di questi nodi.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Xpath – Forma breve
Abbreviata
Estesa
name
@name
/
//
.
..
child::name
attribute::name
descendent::name
descendent-or-self::name
self::node()
parent::node()
La forma abbreviata per la sua semplicità, è la più
utilizzata.
Tuttavia nella forma abbreviata mancano alcuni tipi di axis.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Xpath – Forma breve
ASSI MANCANTI NELLA FORMA ABBREVIATA
●
●
●
●
●
●
●
ancestor
following-sibling
preceding-sibling
following
preceding
namespace
ancestor-or-self
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Xpath – Operatori
ARITMETICI:
+, -, *, div, mod
BOOLEANI:
-, <, <=, >, >=, =, !=, and, or, |
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Xpath – Funzioni
XPath non definisce un elenco completo di funzioni, ma un
elenco fondamentale di funzioni.
Funzioni sul node-set:
last(), position(), count(),id(), local-name(), namespace-uri(),
name()

child::pippo[position()=3] individua il terzo nodo di nome “pippo”
nel contesto di elaborazione.

child::pippo[last()] individua l’ultimo nodo “pippo” nel contesto di
elaborazione.

child::pippo[3] è equivalente a child::pippo[position()=3]
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Xpath – Funzioni
Funzioni sulle stringhe:
string(), concat(), starts-with(), contains(), substring-before(),
substring-after(), substring(), string-length(), normalizespace(), translate()
Funzioni booleane e numeriche:
boolean(), not(), true(), false(), lang()
Funzioni numeriche:
number(), sum(), floor(), ceiling(), round()
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Xpath – Esempi
pippo[@type=“pluto”]
tutti i figli “pippo” nel contesto che abbiano l’attributo type uguale a
“pluto”.
pippo[@type=“pluto”][3]
il terzo figlio “pippo” nel contesto che abbia l’attributo type uguale a
“pluto”.
pippo[7][@type=“pluto”]
il settimo figlio “pippo” nel contsto, ma solo se ha l’attributo type
uguale a “pluto”.
articolo[titolo]
il figlio “articolo” nel contesto che contenga uno o più elementi “titolo”
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Xpath – Esempi
string-length('XML')
3
substring('ciaomondo',4,2)
'mo'
round(1.5)
2
number('xml')
NaN
number(price)
normalize-space( ' ciao
mondo ')
'ciao mondo'
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Xpath – Attenzione 1
Root node e document node
Gli XPath assoluti iniziano sempre con /root (dove “root” è il nome
dell'elemento radice).
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 (es. per
indicare il foglio di stile XSLT), oltre al nodo dell'elemento radice,
chiamato, per evitare confusioni, document element.
Assi in ordine rovesciato
La maggior parte degli assi idntifica la posizione seguendo l'ordine
degli elementi nel documento. Gli assi che indicano elementi
precedenti al nodo (ad esempio ancestor, preceding e precedingsibling) vanno in ordine rovesciato, quindi si ha che:
●
preceding[1] viene dopo di preceding[2]
●
ancestor[1] è il padre, non la radice
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Xpath – Attenzione 2
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 riscritti.
Es. <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/pippo[@foo-bar] è diverso da /doc/pippo[@foo - bar]
ID in XPath
La funzione id(foo) richiede di identificare quell'elemento con un
attributo di tipo ID il cui valore sia foo.
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.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Vincoli di Integrità
Xpath si usa in XML Schema per la definizione di vincoli di
unicità ed integrità referenziale:
●
Unicità:
<xs:unique name="codice">
<xs:selector xpath="/libreria/libro"/>
<xs:field xpath="autore"/>
<xs:field xpath="titolo"/>
</xs:unique>
Un vincolo di unicità NON implica che il nodo utilizzato come
identificatore (field) sia obbligatorio. Eventuali nodi non presenti
vengono ignorati. Per definire lo stesso vincolo quando il nodo è
obbligatorio si utilizza “key” al posto di “unique”.
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari
XML: Vincoli di Integrità
Integrità referenziale
<xs:key name="codice">
<xs:selector xpath="/libreria/libro"/>
<xs:field xpath="autore"/>
<xs:field xpath="titolo"/>
</xs:key>
xs:keyref si utilizza per definire un riferimento non solo a xs:key ma
anche a xs:unique mettendo il nome della “chiave” nell'attributo
“refer”:
<xs:keyref name="lista" refer="codice">
<xs:selector xpath="/lista/oggetti/”>
<xs:field xpath="@id"/>
</xs:keyref>
Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari