Swappa : Uni / Basi di Dati - Complementi - XPath
Creative Commons License

 :: Basi di Dati - Complementi ::

XPath

Cos'è

Così come per le basi di dati, anche le informazioni contenute nei documenti XML possono essere oggetto di interrogazione. Il linguaggio utilizzato a questo scopo è l'XQuery, che sfrutta la sintassi e alcune funzionalità di un secondo linguaggio, l' XPath.

Al contrario del DTD o dell'XSD, lo scopo dell' XPath non è definire la struttura di un documento XML, ma indirizzarne delle porzioni, così da permettere la navigazione e la ricerca al suo interno. Il principio è che un documento XML può essere rappresentato come un albero di nodi, quindi possono essere sfruttati tutti gli algoritmi di ricerca e di visita per muoversi al suo interno.

Dal 16 novembre 1999 l'XPath è felicemente diventato W3C recommendation.

Path Expression

Sfruttando la struttura dati albero, è possibile individuare ogni singolo nodo tenendo traccia del cammino che lo collega alla radice o al nodo corrente, ovvero attraverso la sua path expression. Essa rappresenta il fondamento di un'interrogazione XPath, e la sua valutazione restituisce l'insieme degli elementi del documento raggiungibili seguendo il percorso specificato dalla path expression stessa. Gli oggetti che possono essere ritornati sono: nodo singolo o insieme di nodi (non ordinato e privo di duplicati), booleani, numeri (in virgola mobile) e stringhe.

Ogni elemento che compone una path expression è separato dall'altro attraverso il simbolo /, con una notazione molto simile a quella che individua la posizione di un file nel file system. Gli elementi sono caratterizzati da tre componenti:

Sintassi

Per l'XPath esistono due tipi di sintassi, una abbreviata che permette di creare interrogazioni semplici e intuitive, ed una completa che guadagna in specificità aumentando tuttavia la complessità dei suoi costrutti. In questa sede vedremo solo la prima, più compatta.

Una path expression può iniziare con due simboli:

Gli axis utilizzati nella sintassi abbreviata sono:

Per quanto riguarda i node test, diciamo solo che con il simbolo asterisco * è possibile riferirsi ad un elemento qualsiasi. Tre esempi illuminanti: /cocktail/* seleziona tutti gli elementi contenuti nell'elemento cocktail; /*/* seleziona tutti gli elementi al secondo livello di annidamento; /locandine/@* seleziona tutti gli attributi contenuti nell'elemento locandine.

I predicati vanno inseriti tra parentesi quadre, ed esprimono condizioni logiche che gli elementi risultato devono rispettare. Nella fase di scrittura di tali condizioni è possibile utilizzare sia operatori logici che aritmetici, oltre a un certo numero di funzioni predefinite:

Tra le funzioni ricordiamo:

Esempi

Utilizzeremo per i nostri esempi il seguente documento libri.xml

<?xml version="1.0"?>
<Elenco>
  <Libro disponibilità="N">
    <Titolo>Il nome della rosa</Titolo>
    <Autore>Umberto Eco</Autore>
    <Data>1987</Data>
    <ISBN>55-344-2345-1</ISBN>
    <Editore>Bompiani</Editore>
  </Libro>
  <Libro disponibilità="S">
    <Titolo>Il sospetto</Titolo>
    <Autore>F. Dürrenmatt</Autore>
    <Data>1990</Data>
    <ISBN>88-07-81133-2</ISBN>
    <Editore>Feltrinelli</Editore>
  </Libro>
</Elenco>
1. Elenco semplice

"Trova tutti i libri nell’elenco all’interno del documento"

Path expression:
document(“libri.xml”)/Elenco/Libro

Commento:
Seleziona tutti gli elementi Libro contenuti in Elenco.

XML risultante:
<Libro disponibilità="N">
  <Titolo>Il nome della rosa</Titolo>
  <Autore>Umberto Eco</Autore>
  <Data>1987</Data>
  <ISBN>55-344-2345-1</ISBN>
  <Editore>Bompiani</Editore>
</Libro>
<Libro disponibilità="S">
  <Titolo>Il sospetto</Titolo>
  <Autore>F. Dürrenmatt</Autore>
  <Data>1990</Data>
  <ISBN>88-07-81133-2</ISBN>
  <Editore>Feltrinelli</Editore>
</Libro>
2. Operatori booleani e predicati su attributi

"Trova tutti i titoli dei libri dell’editore Feltrinelli che sono disponibili e che si trovano nel documento"

Path expression:
document("libri.xml")/Elenco/Libro[Editore=“Feltrinelli" AND 
                                   @disponibilità="S"]/Titolo

Commento:
Applica due condizioni entrambe vincolanti, la seconda delle quali si applica a un attributo dell'elemento Elenco.

XML risultante:
<Titolo>Il sospetto</Titolo>

3. Ricerca indipendente dai cammini

"Trova l’insieme di tutti gli autori che si trovano nel documento annidati a qualunque livello"

Path expression:
document("libri.xml")//Autore

Commento:
Seleziona tutti gli elementi di tipo Autore, ovunque si trovino all'interno del documento. In questo caso si trovano entrambi allo stesso livello, ma il principio vale in generale.

XML risultante:
<Autore>Umberto Eco</Autore>
<Autore>F. Dürrenmatt</Autore>
4. Operatori booleani e predicati su attributi

"Trova gli elementi contenuti nel primo libro del documento"

Path expression:
document("libri.xml")/Elenco/Libro[1]/*

Commento:
Seleziona tutti i sotto-elementi del primo elemento Libro.

XML risultante:
<Titolo>Il nome della rosa</Titolo>
<Autore>Umberto Eco</Autore>
<Data>1987</Data>
<ISBN>55-344-2345-1</ISBN>
<Editore>Bompiani</Editore>

Torna alla pagina di Basi di Dati - Complementi

(Printable View of http://www.swappa.it/wiki/Uni/BDC-XPath)