xml: xpath - home: dipartimento di scienze ambientali ...asorato/slidexml/xpath.pdfxml: xpath xpath,...

24
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

Upload: phamquynh

Post on 24-May-2018

219 views

Category:

Documents


1 download

TRANSCRIPT

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 TypeANALIZZIAMO I TIPI DI NODI PRESENTI IN UN

DOCUMENTO XMLLa quasi totalità di un documento XML è formato da tre

tipologie di nodi:

● Root NodeE' la radice che contiene tutti gli altri nodi

● Element NodeSono gli elementi del documento

● Attribute NodeSono gli attributi di ciascun elemento

Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari

XML: Xpath - Data TypePoi ci sono altri quattro nodi meno frequenti:

● Namespace NodeSono rappresentati dai namespace

● Processing Instruction NodeSono le istruzioni di elaborazione esclusa la dichiarazione di

documento

● Comment NodeSono i commenti del documento

● Text NodeE' 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 TypeTutti i risultati delle espressioni XPath hanno uno dei

seguenti tipi di dato come risultato:

● node setUn insieme di nodi di un documento XML

● booleanUn tipo di dato binario che puo' assumere il valore true o false

generalmente prodotto mediante operatori di confronto o logici.

● numberUn tipo di dato floating point. In più sono compresi i valori speciali,

Inf, -Inf e Nan

● stringUna 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 estesaLocationPath =

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 StepUn 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 estesaL'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 estesaTIPI 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 ASSIENODI

Alessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari

XML: Xpath – Forma estesaIl 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 specificatoAlessandro Sorato - Linguaggi per la rete: XML – Dipartimento di Informatica – Università di Venezia Ca' Foscari

XML: Xpath – Forma estesaI 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 breveAbbreviata Estesa

name child::name@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 breveASSI 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 – FunzioniXPath non definisce un elenco completo di funzioni, ma unelenco 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 – FunzioniFunzioni sulle stringhe:

string(), concat(), starts-with(), contains(), substring-before(), substring-after(), substring(), string-length(), normalize-space(), 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 – Esempipippo[@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 – Esempistring-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 1Root node e document nodeGli 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 rovesciatoLa 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 preceding-sibling) 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 2Caratteri proibitiXPath 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 XPathLa 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