1 XPath
2 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
3 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
4 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
5 Tipi di Nodi XPath
6 Tipi di nodi XPath
7 Esempio di albero XPath <![CDATA[ // C++ comment if ( this->getX() < 5 && value[ 0 ] != 3 ) cerr displayError(); ]]> C++ How to Program by Deitel & Deitel
8 L'albero relativo al file XML precedente
9 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)
10 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
11 Gli assi XPath
12 Test dei nodi Un asse seleziona un gruppo di nodi dall'albero in base ad un test dei nodi
13 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)
14 Esempio Dal file XML seguente si vogliono selezionare tutti i libri tradotti in giapponese, in una o più edizioni Java How to Program Spanish Chinese Japanese French Japanese C++ How to Program Korean French Spanish Italian Japanese
15 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[. =
16 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
17 File XML con Namespace Processing Instruction and Namespace Nodes XML How to Program
18 Lista operatori XPath Pipe (|) – Unisce due gruppi di nodi – head | body (seleziona tutti gli elementi head e body che sono child del nodo di contesto) Slash(/) – 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-or- self::node()/child()::body (seleziona tutti i nodi body dell'intero documento)
19 Lista funzioni XPath
20 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
21 Esempio sigle società di borsa Intel Corporation Cisco Systems, Inc. Dell Computer Corporation Microsoft Corporation Sun Microsystems, Inc. CMGI, Inc. Vogliamo selezionare tutte le società la cui sigla inizia per C
22 Foglio di stile per società di borsa <xsl:stylesheet version = "1.0" xmlns:xsl = " <xsl:if test = 'C')"> <xsl:value-of select = - ', name)"/>
23 Risultato