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.
|