MokaByte 97 - Giugno 2005
  MokaByte 97 - Giugno 2005  

 

 

 

La JSP Standard Tag Library
IV parte - JSTL e XML

La JSTL consente di elaborare documenti XML in modo semplice ed efficace. Esaminiamo le principali caratteristiche dei tag che servono allo scopo.

Introduzione
L'elaborazione di documenti XML è ormai uno dei compiti più ricorrenti nello sviluppo di applicazioni J2EE. JSTL fornisce diverse possibilità interessanti per il parsing e per la gestione dei documenti XML. Inoltre consente in maniera molto semplice di applicare trasformazioni XSL a documenti XML. Le funzionalità fornite da JSTL sono un'alternativa alle diverse tecniche usate per l'elaborazione XML e sono sicuramente le più indicate per sviluppatori di pagine web che non hanno una conoscenza approfondita della tecnologia XML e delle varie tecnologie ad essa collegate.
Alla base dell'utilizzo della libreria di tag JSTL che riguardano XML c'è XPath. XPath è un linguaggio che consente di specificare parti di un documento XML. La sintassi con la quale è possibile fare riferimento a sezioni di un documento XML con XPath riprende quella in uso nei file-system; il documento XML è visto come un albero gerarchico in cui vi è un nodo radice e al di sotto di esso tutti i vari nodi con i loro figli. I vari nodi dell'albero sono individuati navigando in modo analogo a quello che si fa con le cartelle di un file-system. Non è possibile fare una trattazione approfondita di XPath per il quale si rimanda alla documentazione specifica. Di seguito invece vengono elencati i tag della libreria xml.

 

Parsing di documenti XML con <x:parse>
Prima di poter elaborare un documento XML è necessario trasformarlo in una rappresentazione in qualche modo elaborabile. Questa operazione è detta parsing. Per effettuare il parsing di un documento XML è possibile usare il tag <x:parse>.

L'utilizzo del tag è piuttosto immediato. Il tag accetta il file di cui fare il parsing o nella variabile xml o nel suo body. Il risultato del parsing è esposto nella variabile definita in var memorizzata nello scope specificato nell'attributo scope. Un esempio di utilizzo del tag parse è il seguente:

<c:import var="fileXml" url="http://myserver/fiel.xml"/>
<x:parse xml="${parsed}" var="fileXml"/>


Definizione di variabili
La libreria XML contiene alcuni tag che sono equivalenti ai tag corrispondenti della libreria core. Così come nella libreria core esistono tag per assegnare valori a variabili o visualizzare il contenuto di variabili, così nella libreria xml esistono tag analoghi che però lavorano con variabili che rappresntano documenti XML o parti di questi.
Il tag <x:out> consente di visualizzare un valore da un file XML espresso in formato XPath.

Se ad esempio nella pagina viene effettuato il parsing del seguente documento:

<x:parse var="xmlDoc">
<tag1>
<tag2>
<tag3>Testo</tag3>
</tag3>
</tag1>
</x:parse>

per visualizzare il testo contenuto tra i tag <tag3></tag3> si potrà usare il <x:out> nel seguente modo:

<x:out select="$xmlDoc//tag3"/>

Così come è possibile scrivere in output il valore di una variabile che contiene una parte di un documento XML è possibile anche assegnare ad una variabile un valore ottenuto da una espressione XPath. Il tag che lo consente è <x:set>:

L'utilizzo è esattamente analogo a quello del <x:out>.

Controllo di flusso
Nella libreria xml esistono anche i tag per il controllo di flusso, corrispondenti a quelli della libreria core. Esistono tag per eseguire test condizionali su variabili contenenti valori estratti da file XML e tag per eseguire loop su nodi di un documento XML.
Il <x:if> permette di eseguire test condizionali su espressioni XPath:

Il tag valuta un'espressione XPath e memorizza il risultato nella variabile booleana specificata. In base al valore della variabile possono può essere scelta l'elaborazione da compiere nella pagina. Analogamente ai tag della libreria core abbiamo poi i tag <x:choose>, <x:when> <x:otherwise> per fare test condizionali nella forma di un costrutto switch/case.


Così come è possibile iterare su array o collections mediante il tag <c:forEach>, così è possibile utilizzare il tag <x:forEach> della libreria xml per eseguire una iterazione in base ad una espressione XPath che restituisce più nodi di un documento XML.
Gli attributi del tag sono:

Se ad esempio abbiamo un documento XML come segue

<prodotti>
<prodotto id="1" >
<nome>Prodotto1</nome>
</prodotto>
<prodotto id="2" >
<nome> Prodotto2</nome>
</prodotto>
<prodotto id="3" >
<nome> Prodotto3</nome>
</prodotto>
</prodotti>

supponendo di aver effettuato il parsing del documento e di aver memorizzato il risultato nella variabile docXml con la seguente espressione verranno trovati tre elementi del documento e il body del tag sarà valutato tre volte.

<x:forEach select="$docXml//prodotto">
<p>Prodotto trovato</p>
</x:forEach>


Trasformazione di documenti XML con JSTL
XSLT è un linguaggio che consente di trasformare un documento XML in un altro documento XML o in documento di un altro formato come PDF, RTF,HTML. XSLT consente di definire una serie di regole che governano la trasformazione e che vengono applicate al documento.Il file che contiene queste regole è denominato stylesheet. XSLT è una linguaggio molto utilizzato nelle trasformazioni di file XML e richiede comunque una conoscenza specifica che spessova oltre quelle di uno sviluppatore di pagine web.
JSTl consente di effettuare una trasformazione in modo molto semplice senza che lo sviluppatore conosca tutti i dettagli della tecnologia XSLT purchè abbia a disposizione lo stylesheeet necessario alla trasformazione stessa,
JSTL mette a disposizione il tag <x:transform> i cui attributi sono:

Il tag accetta nella variabile xml il documento di cui fare il parsing e nella variabile xsl lo stylesheet XSLT da applicare nella trasformazione e visualizza in output il risultato della stessa.
Il documento XML e lo stylesheeet possono essere specificati con variabili risultato di una <c:import>.
Il risultato della trasformazione può anche essere memorizzato nella variabile specificata da var ad esempio nel caso in cui si vogliano fare più trasformazioni a cascata su un documento.
JSTL consente quindi di eseguire trasformazioni XSLT senza la necessità di avere la padronanza di API Java adatte allo scopo e quindi è si adatta particolarmente a sviluppatori di pagine web che vogliano usare XSLT senza necessariamente dover acquisirne una conoscenza approfondita.

 

Conclusioni
Nei precedenti paragrafi abbiamo fatto una carrellata sui principali tag della libreria XML evidenziando come questi permettano di eseguire numerose operazioni di elaborazione dei file XML. Come sempre si rimanda alla bibliografia per l'approfondimento sugli argomenti.
Con questo articolo si conclude la serie su JSTL. L'intento era di fornire le nozioni di base per iniziare ad utilizzare i tag della libreria e soprattutto di far comprendere i vantaggi dello sviluppo di pagine JSP scriptless.

 

Bibliografia
[1] Bryan Basham, Kathy Sierra, Bert Bates - "Head First - Servlet & Jsp", O'Reilly, 2004
[2] Autori Vari - "The J2EE 1.4 Tutorial ", Sun Microsystems, 2003
[3] Shawn Bayern - "JSTL in Action" , Manning Pubblications Co., 2004


Alfredo Larotonda, laureato in Ingegneria Elettronica, lavora da diversi anni nel settore IT. Dal 1999 si occupa di Java ed in particolare dello sviluppo di applicazioni web J2EE. Dopo diverse esperienze di disegno e sviluppo ora si occupa in particolare di aspetti architetturali per progetti rivolti al mercato finanziario ed industriale. Ha conseguito le certificazioni SCJP, SCWCD 1.3, SCWCD 1.4, SCBCD.