Swappa : Uni / Tecnologie Web - XPath
Creative Commons License

Torna alla pagina di Tecnologie Web


:: Tecnologie Web ::

XPath

Indice

  1. Introduzione
  2. Location Path
  3. Location Path Compositi
  4. Predicati
  5. Location Path non abbreviati
  6. Espressioni XPath generali
  7. Funzioni XPath

Introduzione

XPath è una sintassi che consente di riferirsi a parti di documenti XML associati ad un DTD o ad un XML Schema. Un descrittore XPath è pensato per essere inserito in un documento XML, in particolare come valore di un attributo.
XPath è in grado di indicare i nodi in base alla loro posizione assoluta o relativa, al loro tipo, al loro contenuto ed in base ad altri criteri. Le espressioni XPath sono anche in grado di rappresentare numeri, stringhe o valori booleani, in modo da permettere ai fogli di stile XSLT di svolgere operazioni aritmetiche per numerare elementi o gestire riferimenti incrociati.

XPath vede un documento XML come un albero di nodi e il suo scopo è proprio quello di individuare nodi e insiemi di nodi all'interno di questo albero:

Notiamo che nell'elenco mancano alcune componenti tipiche dei documenti XML, cioè le sezioni CDATA, le referenze a entità e le dichiarazioni del tipo di documento. Però XPath è in grado di identificare qualsiasi valore al loro interno.

NOTA:
Gli esempi sottostanti si rifanno a questo documento XML:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE racconti SYSTEM "racconti.dtd">

<racconti>
<!-- Questo commento lo inserisco
perché mi serve provare il rilevamento dei commenti di XPath :P -->

  <racconto autore="Howard Phillips Lovecraft">
    <titoloItaliano>L'estraneo</titoloItaliano>
    <titoloOriginale>The Outsider</titoloOriginale>
    <notaIntroduttiva>
     The Outsider è considerato uno degli esempi più palesi 
     dell'influsso che lo stile e le tematiche di Edgar Allan
     Poe hanno esercitato su Lovecraft.
     La storia ha una sottintesa nota autobiografica. Nel 
     protagonista, che cresce solo in una grande casa, 
     nutrendo la sua cultura di vecchi libri, è facile 
     riconoscere l'infanzia solitaria dello stesso Lovecraft.
     L'invocazione finale all'oblio di fronte agli orrori 
     dell'esistenza da "estraneo" proiettato nel mondo comune
     si ripeterà continuamente nella sua opera, soprattutto 
     quella poetica, nella quale si riflettono più chiaramente
     le angosce dell'anima.
    </notaIntroduttiva>
    <frammento>
     Infelice chi dell'infanzia ha soltanto memorie di paura
     e tristezza. Sventurato chi, volgendosi indietro, non vede
     che ore solitarie trascorse in sale vaste e malinconiche 
     tappezzate di lugubri tendaggi e file esasperanti di libri
     antichi, o in desolate veglie in boschi crepuscolari fitti
     di immensi alberi grotteschi coperti da erbe, che agitano
     silenziosi in alto i rami contorti...
    </frammento>
  </racconto>

  <racconto autore="Edgar Allan Poe">
    <titoloItaliano>La mascherata della Morte Rossa</titoloItaliano>
    <titoloOriginale>The Mask of the Red Death</titoloOriginale>
    <frammento>
     La settima stanza era pesantemente avvolta in panneggi
     di velluto nero che pendevano ovunque dal soffitto e 
     dalle pareti, ricadendo in pesanti pieghe su un tappeto
     della stessa stoffa e colore. In quest'unica stanza pero'
     la tinta delle finestre non corrispondeva alle decorazioni.
     Le vetrate erano di colore scarlatto, di un cupo color
     sangue. Ora in nessuna di quele sette stanze vi era una 
     sola lampada o candelabro, pur tra la profusione di ornamenti
     dorati sparsi qua e la' o pendenti dai soffitti.
    </frammento>
  </racconto>

  <racconto autore="Howard Phillips Lovecraft">
    <titoloItaliano>La musica di Erich Zann</titoloItaliano>
    <titoloOriginale>The Music of Erich Zann</titoloOriginale>
    <notaIntroduttiva>
     Quando il saggista francese Jacques Bergier chiese a Lovecraft
     se avesse mai visitato Parigi, per averne descritto così bene
     l'atmosfera di certi quartieri, Lovecraft gli rispose:"certo
     che l'ho visitata. Con Poe, in sogno".
     Malgrado l'apparenza onirica non è tratta da un unico sogno;
     tuttavia ho sognato spesso di strade tortuose come la
     Rue d'Auseil.
    </notaIntroduttiva>	
    <frammento>
     Riuscii invece a sentire la musica del vecchio muto: prima
     salendo in punta di piedi fino al quinto piano, poi trovando
     il coraggio necessario per inerpicarmi su per l'ultima rampa
     scricchiolante che conduceva alla mansarda di Zann. E lì,
     nell'angusto pianerottolo davanti alla porta sprangata e col 
     buco della serratura tappato, più volte udii suoni che mi
     colmarono di un terrore indefinibile, un terrore di occulti
     prodigi e celati misteri.
    </frammento>
    </racconto>

</racconti>

Location Path

Location Path letteralmente significa percorso di locazione e identifica un insieme di nodi di un documento tramite un location step(passo di locazione). L'insieme di nodi può essere vuoto, contenere un singolo nodo o numerosi nodi; ogni nodo può rappresentare uno degli elementi presenti nell'albero dei nodi, quindi: un elemento, un attributo, un namespace, un testo, un commento, un'istruzione di elaborazione, il nodo radice o una combinazione di questi.

Root Location Path

Il Root Location Path corrisponde al carattere: / e ha lo scopo di selezionare il nodo radice del documento.
/ rappresenta un location path assoluto, perché la posizione identificata è indipendente dal contesto del nodo ed è sempre il nodo radice del documento.

Location Step degli elementi figli

Questo location path coincide con il nome di un singolo elemento e il suo scopo è quello di selezionare tutti gli elementi figli il cui nome coincida con quello specificato.
Questo location path è un XPath relativo, in quanto gli elementi individuati dipendono da quale sia il nodo corrente(il contesto).

Esempio:

Inserendo in XPath il comando:

/racconti/racconto

otteniamo:

Location Step degli Attributi

Gli attributi degli elementi possono essere selezionati tramite XPath utilizzando il carattere @ seguito dal nome dell'attributo.

Esempio:

Inserendo in XPath il comando:

/racconti/racconto/@autore

otteniamo:

Nodi di: namespace, testo, istruzioni di elaborazione, commenti

Per poter individuare i nodi di commento, di testo e istruzioni di elaborazione dobbiamo utilizzare rispettivamente:

Esempio:

Inserendo in XPath il comando:

/racconti/comment()

otteniamo:

Esempio:

Inserendo in XPath il comando:

/racconti/racconto/notaIntroduttiva/text()

otteniamo:

Caratteri Jolly

Esistono tre tipi di caratteri Jolly che permettono di trovare una corrispondenza con differenti tipi di elementi e nodi.

Esempio:

Inserendo in XPath il comando:

/racconti/racconto/*

otteniamo:

Esempio:

Inserendo in XPath il comando:

/racconti/racconto/node()

otteniamo:

Esempio:

Inserendo in XPath il comando:

/racconti/racconto/@*

otteniamo:

In questo caso abbiamo ottenuto lo stesso risultato di /racconti/racconto/@autore perché nel documento XML ho inserito un unico tipo di attributo, se ce ne fossero stati degli altri il comando li avrebbe visualizzati.

Corrispondenze Multiple

Una corrispondenza multipla consiste nella corrispondenza tra più tipi di elementi o attributi e si ottiene utilizzando il carattere |, che permette appunto di combinare location step individuali.

Location Path Compositi

I location path compositi consistono nella combinazione dei singoli location step visti fino ad ora.
Ci sono quattro tipi di location path compositi:

Predicati

I predicati entrano in gioco quando ci interessa selezionare solo alcuni nodi all'interno dell'insieme dei nodi rintracciati.
Ogni step di un location path può contenere un predicato che effettui una selezione dalla lista di nodi che risultino essere correnti in quel determinato step dell'espressione. I predicati possono essere utilizzati in una combinazione qualsiasi dei location step che compongono un location path.
I predicati contengono un'espressione booleana che viene verificata per ognuno dei nodi contenuti nella lista dei nodi di contesto correnti; se l'espressione ha valore falso il nodo corrispondente viene cancellato dalla lista, altrimenti rimane nella lista.
I predicati possono anche non avere valore booleano, in questo caso si converte il tipo differente in un valore booleano in questo modo:

XPath supporta gli operatori relazionali classici: =, <, >, <=, >=, !=. Gli operatori < e <= se si trovano in un documento XML è necessario utilizzare le referenze a entità <, infatti anche le espressioni XPath devono rispettare le regole di ben formazione tipiche dei documento XML.
XPath supporta anche gli operatori booleani: or e and per poter combinare logicamente più espressioni.

Location Path non abbreviati

Tutti i location path visti fino ad ora erano location path abbreviati, ma esistono anche i location path non abbreviati più complessi da scrivere ma più flessibili.
Ogni location step di un location path è composto da tre porzioni:

Nella forma abbreviata l'asse e il test di nodo sono combinati, mentre nella forma non abbreviata sono separati da due caratteri due punti ::

La sintassi abbreviata permette di muoversi solo lungo gli assi child(figli), parent(padre), self(se stesso), attribute(attributo), descendant-of-self(discendenti o se stesso), mentre la sintassi non abbreviata aggiunge altri otto assi lungo i quali è possibile muoversi:

Espressioni XPath generali

Le espressioni XPath, oltre ai location path, possono anche restituire numeri, valori booleani e stringhe che sono ammissibili per fornire valori dell'attributo select degli elementi xsl:value-of e all'interno dii predicati di location path.

Funzioni XPath

Le funzioni XPath sono chiamate che manipolano gli oggetti selezionati, ritornando un valore. Tutte le funzioni restituiscono uno dei quattro tipi di dato seguenti:

Notiamo quindi che le funzioni XPath non possono restituire void.
XPath non è un linguaggio fortemente tipizzato come Java quindi è possibile utilizzare qualsiasi tipo(dei quattro previsti) come argomento della funzione, indipendentemente dal tipo di dato che ci si aspetta di ricevere; l'elaboratore infatti cercherà di convertirlo nel tipo desiderato.
Le funzioni sono riconoscibili dalla presenza di due parentesi tonde alla fine, all'interno delle quali è possibile inserire eventuali argomenti.

XPath mette a disposizione molte funzioni utili, che ovviamente non possiamo analizzare tutte in dettaglio, però ne vediamo qualcuna:


Torna alla pagina di Tecnologie Web

(Printable View of http://www.swappa.it/wiki/Uni/XMLXPath)