eXtensible Markup Language Tutorial - by Marco Giannì
Capitolo IV: Ampliare i documenti XML

Collegamenti estesi nell'XML

L'utilizzo dei collegamenti estesi consente di definire gruppi di possibili destinazioni da un'unica origine. I collegamenti estesi forniscono tutte le informazioni necessarie per consentire i collegamenti multipli.

COLLEGAMENTI ESTESI IN LINEA

Il miglioramento delle potenzialità ha portato con sé un aumento delle complessità e in effetti i collegamenti estesi complicano l'equazione. Vediamo un esempio di collegamento esteso:

<!ELEMENT MYELINK ANY>
<!ATTLIST MYELINK
 XML:LINK CDATA #FIXED "extended"
 INLINE (true|false) "true"
 ROLE CDATA #IMPLIED
 TITLE CDATA #IMPLIED
 SHOW (replace|new|embed) #IMPLIED
 ACTUATE (auto|user) #IMPLIED
 BEHAVIOR CDATA #IMPLIED
 CONTENT-ROLE CDATA#IMPLIED
 CONTENT-TITLE CDATA #IMPLIED
>

Il codice è simile alla dichiarazione del collegamento semplice creato in precedenza, ma in questo caso l'attributo XML:LINK contiene il valore extended anziché simple, poiché si tratta di un collegamento esteso, e non vi sono attributi HREF dichiarati in quanto con i collegamenti estesi i localizzatori devono essere contenuti in un insieme separato di elementi. Questi elementi vengono identificati come localizzatori. L'utilizzo di questo metodo per la definizione dei localizzatori consente di specificare più localizzatori per un solo elemento di collegamento. Non diversamente da altri elementi, anche il localizzatore deve essere dichiarato. Ecco un esempio di dichiarazione di localizzatore:

<!ELEMENT ELOCATOR ANY>
<!ATTLIST ELOCATOR
 XML:LINK CDATA #FIXED "locator"
 HREF CDATA #REQUIRED
 INLINE (true|false) "true"
 ROLE CDATA #IMPLIED
 TITLE CDATA #IMPLIED
 SHOW (replace|new|embed) #IMPLIED
 ACTUATE (auto|user) #IMPLIED
 BEHAVIOR CDATA #IMPLIED
>

L'attributo XML:LINK contiene il valore locator per identificare questo elemento come localizzatore XLink, inoltre utilizziamo l'attributo HREF.

A questo punto esaminiamo il modo in cui questa struttura potrebbe funzionare in un documento XML. L'elemento di collegamento avrà aspetto simile al seguente codice:

<MYELINK XML:LINK="extended">minivan review

 <ELOCATOR TITLE="Chrysler Town and Country" HREF="Chrysler.htm"/>
 <ELOCATOR TITLE="Ford Windstar" HREF="Ford.htm"/>
 <ELOCATOR TITLE="Chevrolet Venture" HREF="Chevy.htm"/>
 <ELOCATOR TITLE="Honda Odyssey" HREF="Honda.htm"/>
 <ELOCATOR TITLE="Nissan Quest" HREF="Nissan.htm"/>
 <ELOCATOR TITLE="Toyota Sienna" HREF="Toyota.htm"/>

</MYELINK>

COLLEGAMENTI ESTESI NON IN LINEA

Un collegamento in linea richiede il testo del collegamento affinché il collegamento stesso risulti completo. I collegamenti estesi consentono di creare collegamenti in cui la risorsa locale non appartiene al collegamento. Questo significa che un elemento o una porzione di contenuto può costituire un collegamento, benché non sia stato creato con questo obiettivo. Questi collegamenti, definiti collegamenti non in linea, forniscono un modo potente e flessibile per collegare informazioni. Per creare un collegamento non in linea utilizzeremo la stessa dichiarazione degli elementi del collegamento esteso e la stessa dichiarazione degli elementi localizzatori create per il collegamento esteso in linea. Nel tag dell'elemento occorre impostare l'attributo INLINE su false per indicare che l'elemento è un collegamento non in linea.

<MYELINK XML:LINK="extended" INLINE="false">

 <ELOCATOR TITLE="Chrysler Town and Country"  HREF="#Chrysler"/>
 <ELOCATOR TITLE="Ford Windstar" HREF="#Ford"/>
 <ELOCATOR TITLE="Chevrolet Venture"  HREF="#Chevy"/>
 <ELOCATOR TITLE="Honda Odyssey" HREF="#Honda"/>
 <ELOCATOR TITLE="Nissan Quest" HREF="#Nissan"/>
 <ELOCATOR TITLE="Toyota Sienna" HREF="#Toyota"/>

</MYELINK>

<REVIEW ID="Chrysler">
 <TITLE="Chrysler Town and Country"</TITLE>
 <!--Questa è la sezione della Chrysler-- >
</REVIEW>

<REVIEW ID="Ford">
 <TITLE ="Ford Windstar"</TITLE>
 <!--Questa è la sezione della Ford-- >
</REVIEW>

<REVIEW ID="Chevy">
 <TITLE ="Chevrolet Venture"</TITLE>
 <!--Questa è la sezione della Chevrolet -- >
</REVIEW>

<REVIEW ID="Honda">
 <TITLE ="Honda Odyssey"</TITLE>
 <!--Questa è la sezione della Honda-- >
</REVIEW>

REVIEW ID="Nissan">
 <TITLE ="Nissan Quest"</TITLE>
 <!--Questa è la sezione della Nissan-- >
</REVIEW>

REVIEW ID="Toyota">
 <TITLE ="Toyota Sienna"</TITLE>
 <!--Questa è la sezione della Toyota-- >
</REVIEW>

In questo esempio i localizzatori sono mantenuti nella relativa sezione e non sono vincolati ad alcuna risorsa di collegamento locale. I localizzatori contengono tutte le informazioni necessarie per fornire le connessioni alle sezioni appropriate nel documento, ma è compito dell'applicazione visualizzare i collegamenti per l'utente. L'applicazione potrebbe ad esempio fornire un elenco separato dal contenuto che consenta all'utente di connettersi all'elemento desiderato in qualunque momento. In questo modo vengono impostati collegamenti realmente multidirezionali, eliminando i collegamenti con spostamento "avanti e indietro" che per la maggior parte degli utenti Web è consuetudine utilizzare.

A questo punto, si immagini un documento XML contenente nella DTD le dichiarazioni degli elementi Myelink ed Elocator precedentemente utilizzati. Supponiamo inoltre che il documento includa nell'elemento Document i seguenti localizzatori:

<MYELINK XML:LINK="extended" INLINE="false">

 <ELOCATOR TITLE="Chrysler Town and Country" HREF="Chrysler.htm"/>
 <ELOCATOR TITLE="Ford Windstar" HREF="Ford.htm"/>
 <ELOCATOR TITLE="Chevrolet Venture" HREF="Chevy.htm"/>
 <ELOCATOR TITLE="Honda Odyssey" HREF="Honda.htm"/>
 <ELOCATOR TITLE="Nissan Quest" HREF="Nissan.htm"/>
 <ELOCATOR TITLE="Toyota Sienna" HREF="Toyota.htm"/>

</MYELINK>

Poiché i localizzatori sono contenuti in documento distinto, qualsiasi applicazione che utilizzi questo documento sarà in grado di rendere disponibili tali collegamenti. Anche in questo caso, la struttura creata per i collegamenti è multidirezionale in quanto da qualunque documento sarà possibile accedere a un collegamento a qualsiasi altro documento. Un ulteriore vantaggio deriva dalla possibilità di gestire l'elenco dei collegamenti in maniera separata dai documenti nei quali vengono utilizzati, grazie al fatto che l'elenco dei localizzatori risiede in un documento specifico. Questo tipo di struttura consente inoltre di aggiungere collegamenti a documenti che normalmente non possono essere modificati in modo tale da contenere collegamenti in linea propri. L'applicazione può infine verificare che i documenti identificati nei localizzatori siano disponibili anche prima che i collegamenti vengano visualizzati, evitando in tal modo l'interruzione dei collegamenti.

La configurazione di destinazioni multiple per i collegamenti, i collegamenti non in linea estesi e i collegamenti multidirezionali sono gestiti da un numero esorbitante di collegamenti. L'XLink fornisce un metodo in grado di risolvere alcuni di questi aspetti: i gruppi di collegamenti estesi.

GRUPPI DI COLLEGAMENTI ESTESI

I gruppi di collegamenti estesi semplificano la gestione delle informazioni sui collegamenti correlati impostando elementi contenenti elenchi di documenti correlati. Supponiamo di pubblicare mensilmente per una rivista di consumo un servizio sulle novità automobilistiche. Anziché creare un singolo documento contenente elenchi di tutte le automobili delle varie categorie per ogni mese, è possibile raggruppare gli elenchi in modo da renderli più facilmente gestibili. Per utilizzare i gruppi di collegamento estesi, sono necessari due elementi, uno per definire il gruppo (GROUP) e l'altro per specificare i documenti appartenenti al gruppo (DOCUMENT). Ecco un esempio di dichiarazioni:

<!ELEMENT GROUP (DOCUMENT*)>
<!ATTLIST GROUP
 XML:LINK CDATA #FIXED "group"
 STEPS CDATA #IMPLIED
>

<!ELEMENT DOCUMENT EMPTY>
<!ATTLIST DOCUMENT
 XML:LINK CDATA #FIXED "document"
 HREF CDATA #REQUIRED
>

STEPS consiste nell'indicare all'applicazione il numero di livelli dei documenti in cui eseguire la ricerca prima di terminarla. Questo attributo risulta particolarmente utile quando il gruppo contiene documenti nel quale sono inclusi altri gruppi, a loro volta contenenti nuovi documenti che contengono ulteriori gruppi e così via. Dopo aver predisposto le dichiarazioni degli elementi, è necessario aggiungere gli elementi Group e Document. Gli elementi Document contengono semplicemente HREF che portano l'applicazione che li elabora ai documenti all'interno dei quali devono essere cercati i collegamenti. Quando l'applicazione raggiunge uno di questi elementi, carica i documenti specificati dagli attributi HREF degli elementi Document in Group. Essa controlla quindi questi documenti alla ricerca di collegamenti al documento originale, costruendo una tabella di collegamenti. L'applicazione di elaborazione caricherà tutti i documenti ed elaborerà l'informazione di collegamento in essa contenuta; questa è la fase uno. Se l'attributo STEPS è maggiore di 1, l'applicazione caricherà i documenti ai quali i documenti originali erano collegati dal primo gruppo di collegamenti caricati (STEPS evita che i documenti carichino centinaia di altri documenti).

In questo modo viene creato il gruppo di collegamenti:

<GROUP STEP=1>
 <DOCUMENT HREF="cousin2.htm"/>
 <DOCUMENT HREF="cousin3.htm"/>
 <DOCUMENT HREF="cousin4.htm"/>
 <DOCUMENT HREF="cousin5.htm"/>
</GROUP>

I gruppi di collegamenti estesi rendono possibile centralizzare l'informazione di collegamento, sostituendo un labirinto di collegamenti (figura A) con un sistema di comunicazione centralizzato (figura B) che consente agli sviluppatori di esaminare e gestire collegamenti senza dover leggere documenti senza fine. Esso inoltre riduce l'occupazione del sistema consentendo agli sviluppatori di richiedere a un documento XML di scaricare solo un ulteriore documento (o eventualmente alcuni) per creare un elenco completo di collegamenti.

<indietro home page avanti>

Copyright © 2000-2005. Tutti i diritti sono riservati. Per informazioni: mgianni@infinito.it