Le specifiche di XPath17 sono state promosse dal World Wide Web Consortium allo scopo di fornire un valido strumento per il recupero dei contenuti all’interno di un documento xml.
Fondamentalmente XPath è un linguaggio il cui scopo è quello di identificare particolari nodi o set di nodi all'interno di un documento XML che ha per sua natura una struttura ad albero all’interno del quale sono individuabili una serie di nodi. La sua sintassi è molto compatta e, per certi versi, ricorda un po' le espressioni per individuare il percorso di un file o una cartella su un file system.
• Tipi di dati
XPath è in grado di trattare quattro tipi differenti di dati: stringhe, numeri, booleani e nodi.
Le stringhe sono insiemi di caratteri delimitati dalle virgolette: dal momento che le espressioni XPath sono spesso e volentieri utilizzate come valori di attributi spesso queste risultano essere delimitate da apici.
Un tipo numerico è appunto un numero considerato in floating point sul quale è possibile applicare gli operatori numerici visti in precedenza ottenendo un risultato sempre di tipo numerico. XPath definisce anche il valore speciale NaN (Not a Number) che può essere utilizzato per verificare se il valore di un elemento è numerico valido o meno:
string(number(mioelemento)) != "NaN"
In XPath, come in qualasiasi altro linguaggio, un tipo booleano può assumere valore true o false e tale valore può essere convertito nella sua rappresentazione stringa o numerica utilizzando particolari funzioni. L’uso principale del tipo booleano all’interno di un’espressione XPath riguarda la composizione dei predicati18.
Per nodo infine si intende ciascun elemento di un documento xml. Un nodo possiede generalmente un nome che può essere inteso sotto tre differenti aspetti:
• QualifiedName (QName) indica il nome con il quale il nodo appare all’interno di un’istanza di un documento xml insieme eventualmente al prefisso del namespace di appartenenza.
• Local-name indica il Qualified Name privato dell’eventuale prefisso del namespace di appartenenza.
• L’expanded-name è invece costituito dalla coppia Uri associata al namespace di appartenenza e local-name.
Per node-set si intende un insieme di nodi identificati da un location step (o location path)19.
Se ad esempio si ha il seguente documento xml:
<cartella> <documento>
<sezione>sezione 1.1</sezione>
18 I predicati insieme all’asse e al nodetest compongono la sintassi tipica di un location step, dove il nodetest , che deve necessariamente essere presente, indica il tipo di nodi che vogliamo selezionare. L’asse invece, permette di indicare la direzione verso la quale vogliamo esaminare i nodi che abbiamo filtrato. Infine il predicato può essere utile per poter filtrare ulteriormente i nodi dal contesto correntemente selezionato in base all’impostazione di opportune condizioni.
19 La maggior parte delle espressioni XPath individuano contenuti del documento xml preso in esame o parte di questi: tale processo avviene in uno o più passi, detti location step, che messi insieme danno vita ad un percorso completo di localizzazione ovvero una location path.
<sezione>sezione 1.2</sezione> </documento> <documento> <sezione>sezione 2.1</sezione> <sezione>sezione 2.2</sezione> </documento> </cartella>
e si considera la seguente espressione XPath:
/cartella/documento/sezione
Il node-set selezionato sarà costituito da tutti gli elementi che hanno nome "sezione". Il context-size indica il numero di nodi presenti all’interno di un node-set, il context-position invece indica la posizione di ciascun nodo all’interno del node-set di appartenenza.
• Tipi di nodi
XPath è in grado di recuperare ogni tipo di contenuto presente all’interno di un documento xml: non solo elementi e attributi ma anche commenti, Processing Instruction, nodi testo ed altro ancora.
Le specifiche xml prevedono che l’intero documento sia contenuto all’interno di un’unico elemento detto radice(root): in XPath l’elemento radice è rappresentato dal carattere / e tutte le location path espresse a partire da tale elemento,tutte quelle che iniziano cioè col carattere /, sono considerate path assolute. Ogni nodo elemento è generalmente composto da un tag di apertura, uno eventuale di chiusura e la porzione di documento xml compreso fra essi che a sua volta è costituito generalmente da altri nodi elemento. I nodi attributo servono generalmente a specificare le proprietà degli elementi all’interno dei quali sono definiti. Allo stesso modo sono definiti commenti, Processing Instruction, nodi-testo, namespaces. Individuiamo dunque in un documento XML tre tipologie di nodi fondamentali, ovvero:
● Root Node, è' la radice che contiene tutti gli altri nodi ● Element Node, sono gli elementi del documento ●AttributeNode, sono gli attributi di ciascun elemento.
Poi ci sono altri quattro nodi meno frequenti che sono Namespace Node, rappresentati dai namespace; Processing Instruction Node, ovvero le istruzioni di elaborazione esclusa la dichiarazione di documento; Comment Node, i
commenti del documento ed infine Text Node, cioè il testo presente all’interno di un elemento.
• Le funzioni XPath
Le funzioni XPath utilizzate generalmente all’interno dei predicati, assumono una struttura sintattica del tipo:
nomefunzione(param1, param2,..., param n)
ogni funzione ha un nome distinto ed accetta uno o più argomenti in base ai quali modifica il suo comportamento. Le funzioni disponibili in XPath possono essere classificate in base al tipo del valore che restituiscono o in base al tipo degli argomenti sui quali queste operano.