Home   |   Archivio   |   Chi siamo   |   Contatti
Andrea Giovannini
XML e Java
Trasformazione di documenti XML in applicazioni Java tramite XSL
di
Andrea Giovannini
Introduzione a XSL, il linguaggio di trasformazione per documenti XML, composto da XSLT per le trasformazioni e Formatting Objects per il layout. L'articolo spiega i concetti base di XSLT, template, pattern matching e XPath, mostrando come utilizzare questi strumenti in applicazioni Java per web publishing e integrazione applicativa

XML è una tecnologia molto potente per applicazioni enterprise, in particolare in campi come l'integrazione di applicazioni e il web publishing. Per poter elaborare documenti XML è spesso necessario eseguire su di essi delle trasformazioni e per questo si usa XSL, eXtensible Stylesheet Language. In questo articolo si approfondiscono XSL e il suo utilizzo con Java.

Introduzione

XSL è composto da due parti:

  • XSL Transformation, XSLT, un linguaggio per trasformare documenti XML in altri documenti
  • Formatting Objects, FO, un linguaggio per descrivere il layout del testo

Nel caso di XSLT, il formato di destinazione potrebbe essere ancora XML oppure qualcosa di diverso, come ad esempio un formato grafico. In questo caso il foglio di trasformazione viene chiamato stylesheet.

Per XSL:FO, invece, un documento contiene direttive per indicare al motore di rendering come visualizzare il documento.

Si osservi che trasformazione di documenti è un termine generico che comprende tanto il mapping di un documento XML in una pagina HTML quanto la trasformazione di un documento in uno schema diverso.

XSL è quindi alla base delle principali applicazioni XML, ovvero web publishing e integrazione di applicazioni.

Un documento XSL viene elaborato da un processore, o engine, che dati in ingresso un documento XML e un documento XSL restituisce un nuovo documento XML, o comunque un output derivato dalla trasformazione.

Trasformazione di documenti XML

Una trasformazione XSL viene definita in un file XML come il seguente:

<?xml version="1.0"?>
<xsl:stylesheet
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
...
</xsl:stylesheet>

L'intestazione del documento indica la versione di XSL utilizzata e il namespace adottato, dichiarando che si useranno tag con prefisso xsl e che la definizione di questi tag corrisponde all'URL indicato.

È necessario porre molta attenzione al namespace poiché engine XSL diversi potrebbero implementare namespace diversi e incompatibili.

XSLT è un linguaggio dichiarativo; una trasformazione viene quindi specificata con una regola che, attraverso un meccanismo di pattern matching, viene applicata all'elemento XML di partenza.

Una regola viene espressa mediante un template:

<xsl:template match="node">
...
</xsl:template>

Quando l'engine XSL incontra questa regola, ricerca nel documento XML un elemento di nome node e ad esso applica la trasformazione.

Per attivare la regola precedente è necessario utilizzare il comando:

<xsl:apply-templates select="node"/>

L'articolo considera poi un documento XML d'esempio:

<?xml version="1.0"?>
<article>
<title>XSL and Java</title>
<author email="doe@doe.com">John Doe</author>
</article>

Per accedere al contenuto di un singolo nodo si usa il comando xsl:value-of; il contenuto del nodo title sarà quindi:

<xsl:value-of select="title"/>

Il valore dell'attributo select permette molta libertà nell'accesso agli elementi. È possibile, ad esempio, accedere agli attributi di un elemento usando il carattere @; il valore dell'attributo email di author diventa quindi:

<xsl:value-of select="author/@email"/>

Si possono inoltre specificare elementi annidati, wildcard e altri pattern mediante espressioni XPath, linguaggio definito dal W3C per individuare le singole parti di un documento XML.

L'articolo ricorda anche che vi sono molti altri comandi in XSLT; si possono ad esempio esprimere condizioni con xsl:choose e xsl:if. Il primo permette una scelta multipla fra diverse condizioni, analogamente allo switch in Java:

<xsl:choose>
 <xsl:when test="condition1">
 ...
 </xsl:when>
 <xsl:when test="condition2">
 ...
 </xsl:when>
 <xsl:otherwise>
 ...
 </xsl:otherwise>
</xsl:choose>

Conclusioni

L'articolo ha il merito di presentare XSLT non come semplice strumento accessorio, ma come componente centrale dell'ecosistema XML.

Per chi sviluppa in Java, capire template, apply-templates, value-of e XPath significa acquisire il vocabolario base per trasformare documenti XML in forme riutilizzabili per integrazione applicativa, publishing e generazione di output strutturati.

MokaByte® è un marchio registrato da MokaByte s.r.l. 
Java®, Jini® e tutti i nomi derivati sono marchi registrati da Sun Microsystems.
Tutti i diritti riservati. E' vietata la riproduzione anche parziale.
Per comunicazioni inviare una mail a info@mokabyte.it