In questo capitolo iniziamo a parlare delle tecnologie della famiglia dei linguaggi XML che si occupano della gestione del collegamento tra le risorse. Di questa categoria fanno parte XLink, che analizzeremo in questo capitolo, e XPointer, di cui parleremo nel prossimo capitolo.
XLink
XLink è un linguaggio basato su XML per definire dei link (collegamenti) tra risorse.
Il concetto di link è già presente ed è ampiamente usato in HTML, grazie al tag <a> con il quale è possibile inserire all'interno di una pagina HTML dei link a delle risorse (pagine html, immagini, file, etc.) esterne o interne alla nostra pagina.
Il link utilizzato in HTML risente però di alcune limitazioni:
- è singolo: un link HTML può puntare ad una sola risorsa alla volta;
- è sematicamente povero: non è possibile caratterizzare in qualche modo il link HTML a seconda della risorsa puntata. Un link ad un'immagine è semanticamente identico ad un link ad una pagina HTML.
- è unidirezionale: il link può essere percorso in un'unica direzione, dalla sorgente al destinatario. Il documento che contiene il link, conosce la risorsa esterna a cui deve collegarsi, ma la risorsa esterna non conosce i documenti da cui è puntata;
- è difficilmente granulare: è possibile inserire un link che punti ad una parte precisa di un documento HTML e non solo al documento intero, ma questo processo è "macchinoso". Infatti dobbiamo andare a modificare il documento di destinazione, inserendo degli appositi tag nelle parti del documento a cui vogliamo collegarci.
XLink nasce con l'intento di ovviare ai problemi appena visti che affliggono i link HTML e quindi con XLink siamo in grado di definire dei link multipli, multidirezionali e caratterizzarli anche dal punto di vista semantico.
I link XML (XLink) possono essere di due tipi: i simple link (link semplici) e gli extended link (link estesi).
I simple link, come suggerisce la parola stessa, sono una versione semplificata dei link XML e sono concetualmente molto simili al link HTML in quanto sono link singoli ed unidirezionali; gli extended link invece sono la versione completa dei link XML.
Iniziamo a vedere un esempio di simple link.
<immagine
xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:type="simple"
xlink:href="img/immagine_esempio.png"
xlink:actuate="onRequest"
xlink:show="replace"
xlink:title="Esempio XLink Semplice"
xlink:role="http://nome_di_un_dominio/help_xlink.xml"/>
Secondo la sintassi XLink, non esiste un tag particolare per indicare un collegamento, ma qualsiasi elemento può diventare un link se al suo interno è presente l'attributo xlink:type con valore simple o extended. Quindi con xlink:type="simple" abbiamo trasformato l'elemento <immagine> in un link XML. L'attributo xlink:href permette di specificare l'indirizzo della risorsa puntata dal link, mentre i restanti attributi servono a determinare il comportamento del link (xlink:show e xlink:activate) e a descrivere la risorsa linkata (xlink:title e xlink:role).
Xlink:show indica come deve essere mostrato il contenuto della risorsa quando il link viene attivato, con replace ad esempio il documento destinatario viene sostituito al documento di origine all'interno della finestra.
Xlink:actuate indica quando il link deve essere attivato, ad esempio quando il documento viene caricato o in seguito al click dell'utente (come nel nostro caso). L'attributo xlink:title contiene una descrizione testuale della risorsa puntata, mentre xlink:role contiene un URI relativo ad un documento che descrive in maniera completa la risorsa linkata.
Passiamo adesso a descrivere gli extended link, considerando il seguente esempio di un documento XML in cui compaiono le informazioni di alcuni libri. Se volessimo relativamente al nome dell'autore dei libri inserire dei link a delle risorse relative all'autore (ad esempio alla sua biografia, alla sua foto, alla lista delle sue opere) in HTML avremmo dovuto definire un link per ogni risorsa. Utilizzando gli extended link invece possiamo fare le stesse cose con un unico link.
<autore xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="extended" >
<name xlink:type="resource" xlink:label="nome-autore" > Mario Rossi </name>
<biografia
xlink:type="locator"
xlink:href="nome-di-un-dominio/biog-Rossi.xml"
xlink:title="Biografia di Mario Rossi"
xlink:role="nome-di-un-dominio/descrizione-biografia.xml"
xlink:label="biografia-autore"/>
<immagine
xlink:type="locator"
xlink:href="nome-di-un-dominio/foto-Rossi.png"
xlink:title="Foto di Mario Rossi"
xlink:role="nome-di-un-dominio/descrizione-fotografia.xml"
xlink:label="fotografia-autore"/>
<opere
xlink:type="locator"
xlink:href="nome-di-un-dominio/opere-Rossi.xml"
xlink:title="Opere di Mario Rossi"
xlink:role="nome-di-un-dominio/descrizione-opere.xml"
xlink:label="opere-autore"/>
<connessione
xlink:type="arc"
xlink:from="nome-autore"
xlink:to="biografia-autore"
xlink:show="replace" xlink:actuate="onRequest"/>
<connessione
xlink:type="arc"
xlink:from="nome-autore"
xlink:to="fotografia-autore"
xlink:show="replace"
xlink:actuate="onRequest"/>
<connessione
xlink:type="arc"
xlink:from="nome-autore"
xlink:to="opere-autore"
xlink:show="replace"
xlink:actuate="onRequest"/>
</autore>
Gli extended link sono link multipli e multidirezionali, sparisce quindi il concetto di sorgente e destinazione di un link. Le risorse si dividono in locali (quelle contenute all'interno dell'extended link) e remote (quelle esterne all'extended link). Con l'attributo xlink:type="locator" (nel nostro esempio presenti negli elementi <biografia>, <immagine> e <opere>) si identifica una risorsa esterna, mentre con xlink:type="resource" (presente nell'elemento <nome>) si indica una risorsa locale.
Una volta definite le risorse locali e remote che sono coinvolte nell'extended link, dobbiamo indicare quali sono i collegamenti tra queste risorse, in quale direzione viene percorso il collegamento, il tipo di azione e il comportamento associato all'attivazione del link.
Un collegamento è costituito da un elemento XML (nel nostro esempio è l'elemento <connessione>) con l'attributo xlink:type="arc". Con xlink:show e xlink:activate definiamo il comportamento dell'arco come nel caso del simple link. Con xlink:from e xlink:to indichiamo il verso di percorrenza del link, specificandone rispettivamente la sorgente e la destinazione.
Gli extended link possono essere definiti anche esternamente al file XML, inserendoli in un documento separato che prende il nome di linkbase e che costituisce una sorta di archivio di link estesi.
In questo modo è possibile modificare i link XML senza andare a modificare il documento XML.
Possiamo utilizzare gli extended link andando ad inserire all'interno del file XML, un link che punti al linkbase contenente tutte le definizioni dei link XML.
Ad esempio:
<archiviolink xlink:type="xlink:extended" xmlns:xlink="http://www.w3.org/1999/xlink">
<sorgente xlink:type="locator" xlink:label="source"/>
<links
xlink:type="locator"
xlink:label="linkbase"
xlink:href="nome-di-un-dominio/linkbase-esempio.xml"/>
<collegamento
xlink:type="arc"
xlink:arcrole="http://www.w3.org/1999/xlink/properties/linkbase"
xlink:from="source"
xlink:to="linkbase"
xlink:actuate="onLoad" />
</archiviolink>
Il fatto che questo link si tratti di un collegamento ad un linkbase e non ad una risorsa qualsiasi è indicato dall'attributo xlink:arcrole (presente all'interno di <collegamento>) che indica il documento con la descrizione estesa del tipo di arco.
Il link viene attivato al caricamento del documento XML e questo fa si che l'applicazione analizzi il linkbase andando a recuperare i link estesi.
Al momento attuale non sono molte le implementazioni di xlink e la maggior parte di queste si limitano alla gestione dei simple link. Per maggiori informazioni vi consiglio, anche in questo caso, di andare a leggere la specifica ufficiale di XLink all'indirizzo: http://www.w3.org/tr/xlink.