Upload
phamquynh
View
220
Download
1
Embed Size (px)
Citation preview
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() < 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