Angelo Stefani, nato a Vetralla (VT) il 30/03/1978. Dal 1992 al 1997 frequenta l' ITIS Leonardo da Vinci di Viterbo dove consegue il Diploma di Perito Industriale Capotecnico spec. Informatica. Attualmente iscritto al corso di laurea in Ingegneria Informatica della facoltà di Ingegneria presso l' Università degli studi di Roma "La Sapienza", sta lavorando alla tesi di laurea "Adattamento di contenuti su dispositivi eterogenei" avente come argomento principale Cocoon. Informazioni più aggiornate sono disponibili su http://angelostefani.blogspot.com/
Introduzione
Fino ad alcuni anni fa il modo più diffuso per accedere al Web era attraverso un personal computer o una workstation. Dalla metà del 2000 il numero delle differenti tipologie di dispositivi che possono accedere al Web è cresciuto molto rapidamente. Si è passati da una situazione dove si avevano poche classi di dispositivi con, sostanzialmente, le stesse caratteristiche e capacità di base ad un elevato numero di dispositivi aventi una varietà di caratteristiche molto ampia. Questa evoluzione ha portato alla luce la necessità di realizzare contenuti per il Web tenendo in forte considerazione il problema dell'indipendenza dal dispositivo finale. Con l'espressione "indipendenza dal dispositivo finale" si cerca di definire le logiche e le pratiche di interazione tra client e server tali da consentire un'esperienza d'uso del web efficiente e soddisfacente a prescindere dallo strumento tecnico utilizzato per l'accesso.
Come si può realizzare un'applicazione Web indipendente dal dispositivo destinatario? Gli approcci esistenti per ottenere una migliore indipendenza dal dispositivo si suddividono in tre categorie:
- Intermediate adaption
- Client-side adaption
- Server-side adaption
La distinzione viene fatta in base a dove avviene il controllo del processo di adattamento. Gli adattamenti server-side offrono il massimo controllo sui contenuti inviati, includendo anche la possibilità di poter cambiare radicalmente la quantità di contenuti, lo stile, la modalità di navigazione e l'impaginazione. Per poter effettuare l'adattamento più appropriato, tuttavia, il server deve avere informazioni sufficienti sul delivery context, includendo le capacità del dispositivo ricevente.
Il delivery context e gli standard CC/PP e UAProf
Indipendentemente da dove avvengano gli adattamenti, questi devono essere basati sulle informazioni riguardanti il delivery context. Tali informazioni possono includere le delivery device's capabilities, le caratteristiche della rete, le preferenze dell'utente, e altri parametri opzionali riguardanti le applicazioni come la lingua prescelta dall'utente e la localizzazione. Alcune di queste informazioni sono disponibili nell'intestazione standard del protocollo HTTP della richiesta della pagina Web. Sono stati definiti due standard per la descrizione del delivery context basati sul Resource Description Framework (RDF):
- Composite Capabilities / Preferences Profile (CC/PP) definito dal W3C
- User Agent Profile (UAProf) definito dal WAP Forum
Questi standard consentono la trasmissione efficiente delle informazioni riguardanti il delivery context al server persino tramite reti wireless con una ridotta larghezza di banda. Anziché inviare un profilo intero per ogni richiesta, il client invia soltanto un riferimento ad un profilo, il quale, è memorizzato all'interno di un terzo dispositivo noto come profile repository. Inoltre, viene anche inviata una lista di differenze specifiche per il client in questione. Il processo di riassemblamento finale del profilo, il quale è costituito dalle profile references e dalle differenze, è meglio noto come profile resolution.
DELI: una libreria per il profile resolution
Come abbiamo visto, per fornire contenuti ottimizzati per client differenti, un Web server ha bisogno della descrizione delle caratteristiche del client.
HP Labs ha realizzato una libreria open-source chiamata DELI, la quale consente alle servlet Java di risolvere richieste HTTP contenenti informazioni CC/PP o UAProf e di interrogare il profilo ottenuto.
Utilizzata in ambiente Apache Cocoon, DELI rende disponibili gli attributi CC/PP o UAProf come parametri di ingresso all'interno di stylesheet XSLT.
Un esempio pratico con Apache Cocoon
Andiamo ora a vedere in pratica come tutto questo sia possibile mediante un semplice esempio di utilizzo di DELI in ambiente Apache Cocoon.
Vedremo come sia possibile ottenere all'interno di stylesheet XSLT utili informazioni sul client richiedente. Utilizzeremo queste informazioni per adattare i contenuti delle pagine sia in formato HTML che WML.
Per rendere disponibili le informazioni riguardanti i profili all'interno degli stylesheet, si deve aggiungere la clausola al match che specifica lo stylesheet all'interno del file sitemap.xmap di Cocoon.
Vediamo il codice sorgente del file sitemap.xmap:
<?xml version="1.0"?>
<!-- Autore: Angelo Stefani -->
<!-- ================ Pipelines ====================== -->
<map:pipelines>
<map:pipeline>
<map:match pattern="*.html">
<map:generate src="{1}.xml"/>
<map:transform src="xml2html.xsl">
<map:parameter name="deli-capabilities" value="{request:deli-capabilities}"/>
</map:transform>
<map:serialize type="html"/>
</map:match>
<map:match pattern="*.wml">
<map:generate src="{1}.xml"/>
<map:transform src="xml2wml.xsl">
<map:parameter name="deli-capabilities" value="{request:deli-capabilities}"/>
</map:transform>
<map:serialize type="wml"/>
</map:match>
</map:pipeline>
</map:pipelines>
Vediamo il codice sorgente del file index.xml:
<?xml version="1.0"?>
<!-- Autore: Angelo Stefani -->
<page>
<title>DELI</title>
<subtitle>Esempio di utilizzo di DELI</subtitle>
<content>
<paragraph>Se il client supporta le immagini vedrete il logo di Cocoon</paragraph>
<paragraph>Altrimenti non inserisco l'immagine. Eviterò così di utilizzare inutilmente la banda della connessione.</paragraph>
<image src="cocoon-logo.png"/>
</content>
</page>
Per ottenere le informazioni sulle caratteristiche del client è necessario specificare in parametro all'interno degli stylesheet XSLT utilizzati. Utilizzeremo le informazioni acquisite per adattare i contenuti delle pagine sia in formato HTML che WML. Nel procedimento seguito per ottenere tutto ciò, DELI "appiattisce" i profili omettendo le informazioni inerenti i componenti. Perciò, per esempio, per ottenere l'attributo CcppAccept è necessario utilizzare l'espressione XPath deli-capabilities/browser/CcppAccept mentre per ottenere l'attributo ScreenSize si deve utilizzare l'espressione XPath deli-capabilities/browser/ScreenSize. Inoltre, nel caso in cui gli attributi contengano valori multipli, ad esempio Bags o Sequences, questi valori vengono separati utilizzando elementi distinti.
Vediamo il codice sorgente del file xml2html.xsl:
<< xml2html.xsl - Figura 1 - Stylesheet XSLT per la trasformazione HTML >>
<< xml2html.xsl - Figura 1 - Stylesheet XSLT per la trasformazione HTML >>
Vediamo il codice sorgente del file xml2wml.xsl:
<< xml2wml.xsl - Figura 2 - Stylesheet XSLT per la trasformazione WML >>
<< xml2wml.xsl - Figura 2 - Stylesheet XSLT per la trasformazione WML >>
Conclusioni
Dopo aver introdotto le problematiche principali riguardanti la realizzazione di un'applicazione Web indipendente dal dispositivo destinatario, abbiamo introdotto gli approcci e gli standard attualmente esistenti in materia. Abbiamo poi visto come DELI in ambiente Apache Cocoon consenta di adattare i contenuti su dispositivi eterogenei in maniera molto semplice.
Riferimenti
- [1] Massimo Canducci, "XML", Apogeo, 2005
- [2] Aaron Skonnard – Martin Gudgin, "Essential XML Quick Reference", Addison-Wesley, 2002
- [3] Doug Tidwell "Mastering XML Transformations", O'Reilly, 2003
- [4]
- [http://www.w3.org/Style/XSL/](http://www.w3.org/Style/XSL/)
- [5]
- [http://cocoon.apache.org/](http://cocoon.apache.org/)
- [6] Matthew Langham, Carsten Ziegeler,"Cocoon: Building XML Applications", New Riders, 2002
