XPath
1
What is XPath?
●
XPath is a syntax for defining parts of an XML
document
●
XPath uses paths to define XML elements
●
XPath defines a library of standard functions
●
XPath is a major element in XSLT
●
XPath is not written in XML
●
XPath is a W3C Standard
2
Nodi
●
●
In XPath un documento XML viene considerato una
struttura ad albero composta da nodi
Xpath ha 7 tipi di nodi:
–
Radice
–
Elemento
–
Attributo
–
Testo
–
Commento
–
Istruzione di elaborazione
–
Namespace
3
Nodi
●
●
●
●
La struttura ad albero di Xpath ha un solo nodo radice
Il nodo radice ed i nodi degli elementi contengono liste
ordinate di nodi child (figli)
Tutti i nodi tranne quello radice hanno un nodo parent
(genitore)
Possono essere nodi child solamente:
–
●
Elementi, commenti, testi, istruzioni di elaborazione
Notare che anche se un nodo attributo o namespace può
avere come parent un elemento o la radice, non viene
considerato un figlio del suo parent
4
Tipi di Nodi XPath
5
Tipi di nodi XPath
6
Esempio di albero XPath
<?xml version="1.0"?>
<!-- Esempio di file XML -->
<!-- per lo studio di XPath
-->
<book title="C++ How to Program" edition="3">
<sample>
<![CDATA[
// C++ comment
if ( this->getX() < 5 && value[ 0 ] != 3 )
cerr << this->displayError();
]]>
</sample>
C++ How to Program by Deitel &amp; Deitel
</book>
7
L'albero relativo al file XML precedente
Radice
Commento
Esempio di file XML
Commento
Per lo studio di XPath
Elemento
book
Attributo
Title
C++ How to program
Attributo
Edition
3
Elemento
Sample
Testo
// C++ comment
if ( this->getX() < 5 && value[ 0 ] != 3 )
cerr << this->displayError();
Testo
C++ How to Program by Deitel &amp; Deitel
8
I path di posizione
●
●
Un path di posizione e' un'espressione che specifica
come spostarsi fra i nodi di un albero Xpath
Un path di posizione è composto da:
–
Un asse
–
Un test dei nodi
–
Un predicato (facoltativo)
9
Gli assi
●
Le ricerche iniziano sempre dal nodo di contesto
–
●
●
●
Selezionabile ad esempio con una istruzione match nelle
trasformazioni XSL che vedremo poi
Un asse indica quali nodi riferiti al nodo di contesto
deveono essere inclusi nella ricerca
L'asse determina la sequenza di ricerca
–
Diretta (vengono selezionati i nodi seguenti (child) di quello
di contesto)
–
Inversa (vengono selezionati i nodi antecedenti (parent) a
quello di contesto
Tipo di nodo principale dell'asse:
–
Il tipo di nodo che l'asse puo' selezionare
10
Gli assi XPath
11
Test dei nodi
●
Un asse seleziona un gruppo di nodi dall'albero in base
ad un test dei nodi
12
Path di posizione = Assi + Test dei nodi
●
●
●
I path di posizione sono formati da sequenze di passaggi di
posizione separati da /
Un passaggio di posizione è formato da:
– Un asse
– ::
– Un test dei nodi
– Un predicato (tra parentesi quadre, facoltativo)
Esempi:
– child::* (seleziona tutti i nodi degli elementi child del nodo
di contesto)
– child::text() (seleziona tutti i nodi di testo child del nodo di
contesto)
– child::body (seleziona tutti i nodi dell'elemento body che
sono child del nodo di contesto)
13
Esempio
●
Dal file XML seguente si vogliono selezionare tutti i libri
tradotti in giapponese, in una o più edizioni
<?xml version="1.0"?>
<!-- Fig. 11.9 : books.xml -->
<!-- XML book list
-->
<books>
<book>
<title>Java How to Program</title>
<translation edition="1">Spanish</translation>
<translation edition="1">Chinese</translation>
<translation edition="1">Japanese</translation>
<translation edition="2">French</translation>
<translation edition="2">Japanese</translation>
</book>
<book>
<title>C++ How to Program</title>
<translation edition="1">Korean</translation>
<translation edition="2">French</translation>
<translation edition="2">Spanish</translation>
<translation edition="3">Italian</translation>
<translation edition="3">Japanese</translation>
</book>
</books>
14
Esempio
●
●
Si supponga che il nodo radice (books) sia il nodo di
contesto
Il path di posizione da utilizzare per selezionare
l'elemento title di qualunque libro tradotto in
giapponese è:
/books/book/translation[. = 'japanese']/../title
●
Il path di posizione da utilizzare per selezionare
l'attributo edition di qualunque libro tradotto in
giapponese è:
/books/book/translation[. = 'japanese']/@edition
15
Operatori e funzioni
●
●
Gli operatori XPath consentono di manipolare i gruppi
di nodi selezionati con i path di posizione per formare
altri gruppi
Le funzioni XPath permettono di svolgere operazioni su
un gruppo di nodi
16
File XML con Namespace
<?xml version="1.0"?>
<!-- Fig. 11.3 : simple2.xml
-->
<!-- Processing instructions and namespacess -->
<html xmlns="http://www.w3.org/TR/REC-html40">
<head>
<title>Processing Instruction and Namespace Nodes</title>
</head>
<?deitelprocessor example = "fig11_03.xml"?>
<body>
<deitel:book deitel:edition="1"
xmlns:deitel="http://www.deitel.com/xmlhtp1">
<deitel:title>XML How to Program</deitel:title>
</deitel:book>
</body>
</html>
17
Lista operatori XPath
●
Pipe (|)
–
–
●
Slash(/)
–
–
●
Unisce due gruppi di nodi
head | body (seleziona tutti gli elementi head e body
che sono child del nodo di contesto)
Separa i passaggi di posizione
head/title[ last () ] (seleziona l'ultimo nodo
dell'elemento title che è contenuto in head)
Doppio Slash (//)
–
Equivalente a /descendant-or-self::node()/
–
//body è equivalente a /descendant-orself::node()/child()::body
(seleziona tutti i nodi body dell'intero documento)
18
Lista funzioni XPath
19
Esempi di funzioni
●
book [ position()=3 ]
(oppure book[
3 ])
Seleziona il terzo elemento book del nodo di contesto
●
count (*)
restituisce il numero totale di elementi che sono child del nodo
di contesto
●
//book
seleziona tutti i nodi dell'elemento book
20
Esempio sigle società di borsa
<?xml version="1.0"?>
<!-- Fig. 11.13 : stocks.xml -->
<!-- Stock list
-->
<stocks>
<stock symbol="INTC">
<name>Intel Corporation</name>
</stock>
<stock symbol="CSCO">
<name>Cisco Systems, Inc.</name>
</stock>
<stock symbol="DELL">
<name>Dell Computer Corporation</name>
</stock>
<stock symbol="MSFT">
<name>Microsoft Corporation</name>
</stock>
<stock symbol="SUNW">
<name>Sun Microsystems, Inc.</name>
</stock>
<stock symbol="CMGI">
<name>CMGI, Inc.</name>
</stock>
</stocks>
Vogliamo selezionare tutte
le società la cui sigla inizia
per C
21
Foglio di stile per società di borsa
<?xml version = "1.0"?>
<!-- Fig. 11.14 : stocks.xsl -->
<!-- string function usage -->
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/stocks">
Selezione del nodo di contesto
<html>
<body>
<ul>
<xsl:for-each select = "stock">
<xsl:if test =
"starts-with(@symbol, 'C')">
<li>
Funzione starts-with
<xsl:value-of select =
"concat(@symbol,' - ', name)"/>
</li>
</xsl:if>
</xsl:for-each>
Concatenazione della sigla con il nome
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
22
Risultato
23
Scarica

XPath - ICAR