Introduzione ad XSL

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:

 

2 comments to Introduzione ad XSL