Come abbiamo visto la settimana scorsa, è possibile ottenere dei collegamenti ipertestuali tra documenti XML utilizzando la sintassi di XLink.
Attraverso XLink possiamo inserire all’interno di un documento XML dei collegamenti ipertestuali ad altri documenti attraverso la sintassi:
<MORE_INFO xmlns:xlink="http://www.w3.org/2001"
xlink:type = "simple"
xlink:show = "new"
xlink:href = "http://www.mysite.com/moreinfo.xml">
Do you need more info?
</MORE_INFO>
/
Che ha lo stesso significato del codice HTML:
<a href="http://www.w3.org/2001" target="_new">
Do you need more info?
</a>
/
A questo punto possiamo chiederci quale sia il metodo per referenziare porzioni interne di altri documenti XML, un po’ quello che avviene quando in HTML scriviamo questa sintassi:
<a href="http://www.mysite.org/path/page.html#section1">
Section number 1
</a>
/
A questo scopo ci viene in aiuto XPointer.
XPointer (XML Pointer Language)
XPointer è un altro linguaggio generato come applicazione a partire dalla base XML ed ha come obiettivo permettere a chi lo utilizza di avere un metodo di indirizzamento preciso alla struttura interna di un documento XML.
Questa possibilità ci è offerta anche da XLink, utilizzando lo stesso metodo messo a punto per HTML, ovvero l’utilizzo di collegamenti a porzioni del documento cui è stato precedentemente assegnato un nome mnemonico.
XPointer, invece, si basa sugli identificatori di frammento. Con essi è possibile localizzare una qualunque posizione della struttura ad albero del documento XML.
Un identificatore di frammento viene collegato ad un documento XML utilizzando un termine di localizzazione assoluto, oppure relativo, a seconda che del documento che si ricerca sia nota la posizione ed essa sia raggiungibile attraverso una parsificazione veloce.
La localizzazione, in senso generale, provvede a mettere in comunicazione tra loro applicazioni XML che in altri casi sarebbero state soppresse per mancanza di comunicabilità.
L’obiettivo principale di XPointer è fornire un metodo di indirizzamento della struttura interna di un documento XML, sia che esso includa o meno attributi di definizione dei nomi.
La sintassi utilizzata per i termini di localizzazione è la seguente:
href="uri#sezione"
href="uri|sezione"
/
Come separatore è possibile utilizzare il carattere # oppure | (pipe) a seconda della tipologia di connessione che si vuole utilizzare.
Poiché stiamo cercando di raggiungere una particolare zona del documento XML di destinazione, è importante capire come ci si debba comportare all’interno di quest’ultimo.
I documenti XML, infatti, sono dotati di una struttura rigida che deve essere analizzata con precisione per comprenderne il significato; in particolare è essenziale, per l’entità che cerca di leggere una parte del documento XML, identificare il nodo di partenza all’interno dell’alberatura XML.
Per risolvere questo problema ci vengono in aiuto i puntatori di XPointer.
Un puntatore, generalmente, ci consente di trovare un nodo all’interno di un’alberatura XML, cioè un qualsiasi elemento nel documento XML.
Altri puntatori permettono, addirittura, di selezionare parti del documento XML che non sono caratterizzabili con gli schemi classici dell’architettura XML, cioè non sono elementi XML classici.
XPointer permette di gestire tutte le possibili situazioni, fornendo oggetti in grado di selezionare qualsiasi sezione all’interno di qualsiasi documento XML, in particolare si tratta di marcatori proprietari di XPointer:
- root(): la radice del documento, ovvero tutto il documento XML;
- origin(): rappresenta, in generale, l’oggetto originale, quello principale dell’alberatura;
- id(nome): il nome o identificativo esplicito dell’oggetto;
- html(nome): seleziona l’elemento associato al marcatore.
Vediamo l’esempio di utilizzo: il classico URL utilizzato in HTML ha la sintassi:
http://www.mysite.org/path/page.html#section1
che in XPointer si traduce in:
#xpointer(id("section1"))
Inoltre XPointer definisce funzioni aggiuntive che possono essere utilizzate per referenziare in maniera più complessa la struttura interna di un documento XML:
- range-to(nodo): dall’inizio del nodo contestuale al nodo che è stato passato come parametro;
- string-range(): una sottostringa del nodo contestuale;
- start-point(), end-point(): il punto di inizio ed il punto di fine del nodo contestuale;
- here(): il punto contestuale.
Utilizzando pertanto Xlink e XPointer è possibile referenziare in maniera precisa un documento XML oppure una porzione di esso, di conseguenza è possibile creare collegamenti ipertestuali tra documenti differenti.