Questo documento introduce XSL ( XSLT + XPath + XSL-FO ) e ne spiega l’uso con esempi.
Introduzione ad XSL
XSL, acronimo di eXtensible Stylesheet Language è il linguaggio per definire fogli di stile per dati XML
Un foglio di stile XSL o XML stylesheet – viene usato per garantire la separazione tra contenuto, cioè dati XML e presentazione, cioè vista XML, HTML, PDF, TXT, etc.
La separazione offre numerosi vantaggi:
- riuso dei dati di input: lo stesso input viene visualizzato diversamente in contesti diversi.
- formati multipli di output: media differenti (carta stampata, schermo, etc..), formati differenti (Lettera, A4, ..), diversi dispositivi di output (Workstation, piccoli dispositivi, ..)
- personalizzazione output: il cliente può ricevere la presentazione in base alle proprie preferenze o in base ai propri permessi.
- standardizzazione dell’output: si può garantire uniformità dnella presentazione dei dati a livello di azienda o di prodotto.
In pratica l’applicazione di un foglio di stile consiste di due fasi:
- Trasforma la struttura del documento di input
- Specifica come presentare le informazioni trasformate
Due esempi:
CSS (fogli di stile per dati HTML) : applicando un CSS ad un documento HTML si ottiene la visualizzazione dello stesso contenuto in diversi formati; ad esempio versione stampabile, versione schermo per piccoli dispositivi, versione schermo classica, etc.
XSL (fogli di stile per dati XML) : un XSL viene applicato a dati di input XML per la presentazione in diversi formati. Ad esempio HTML “versione schermo classica”, PDF “versione A4″, PDF “versione semplificata”, TXT “solo testo”, etc.
XSL = XSLT + XPath + XSL-FO
XSL è una tecnologia basata su linguaggi diversi, che concorrono alla realizzazione di scopi diversi:
- XSL-T (XSL Transform): linguaggio di trasformazione dell’XML. Concorre alla trasformazione della struttura del documento di input in una struttura diversa, in base alla quale viene prodotto l’output.
- X-Path (Xml Path) : Linguaggio per la selezione di nodi (nodeset). si usa sia per selezionare uno o più nodi interni ad un documento XML
- XSL-FO (Formatting Objects): Linguaggio per la formattazione dell’output
Nota:
Per non confondere i termini XSL ed XSLT; si ricordi che XSL è il nome della tecnologia globale, che comprende tutti e tre i linguaggi; mentre XSLT (XSL-Transform) è il linguaggio per la trasformazione.
XSL-T
XSL-T è il linguaggio con il quale si scrive la trasformazione delle struttura del documento di input XML in un’altra struttura. Tecnicamente è possibile vedere XSLT come l’applicazione di un algoritmo Visitor applicato all’albero rappresentato dal DOM del documento XML di input.
Il processore XSL legge il documento XML e man mano che visita i nodi produce l’output desiderato.
Prendiamo ad esempio un documento XML che contiene i dati di una lista di persone.
<list> <client id="1004"> <name>Mike Preston</name> <site>http://www.mpreston.com</site> <cell country="+39">333 3829100</cell> </client> <client id="1005"> <name>John John Letho</name> <site>http://www.jjletho.net</site> <cell country="+31">343 1200340</cell> </client> </list>
Vediamo quindi come trasformare i dati, per costruire in output un documento HTML che presenta l’elenco di persone registrate nei dati.
<!-- template that build the HTML document --> <xsl:template match="list"> <html> <head><title>Clienti</title></head> <body> <h1>Clienti</h1> <table> <tr> <th>ID</th><th>name</th><th>site</th><th>cell</th> </tr> <!-- iteration over all "client" elements --> <xsl:for-each select="client"> <tr> <td><xsl:value-of select="@id"/></td> <td><xsl:value-of select="name"/></td> <td><xsl:apply-templates select="site"/></td> <td><xsl:copy-of select="cell"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> <!-- template for output a link to client site --> <xsl:template match="site"> <a href="{text()}"> <xsl:value-of select="text()"/> </a> </xsl:template>
Il documento HTML prodotto in output è visibile in figura.
Se cambiano i dati XML, e vengono aggiunti ulteriori nominativi alla lista, non occorre cambiare la Trasformazione XSL, ma si può direttamente generare il nuovo output.
Download dei file usati nell’esempio:
This definitely makes great sense!
Great! thanks for the share!