- Introduzione a XSLT -
 
COSA SERVE PER QUESTO TUTORIAL
Download | Chiedi sul FORUM | Glossario Un qualunque editor testuale e Internet Explorer, Opera o Firefox oppure un server che supporti ASP .Net o PHP
Concetti base delle trasformazioni XSL e applicazione in PHP e ASP .Net

DEFINIZIONE E SCOPO DI XSLT
L'obiettivo di XSLT

XSLT, o XSL Transformations, insieme a XSL-FO (XSL Formatting Objects) costituisce XSL (eXtensible Stylesheet Language). Grazie a XSLT è possibile trasformare un documento XML in un'infinità di formati, ad esempio (X)HTML ma anche RDF, SVG o persino testo semplice; questo avviene per mezzo di un parser XSLT che interpreta il documento XML di origine e produce un risultato in base al foglio di stile XSLT. Ma vediamo subito un esempio pratico per capirne l'utilità. Ammettiamo di avere un documento XML come quello che segue che descrive una persona:


<?xml version="1.0" encoding="iso-8859-1"?>
<persona codicefiscale="MRARSS50A01A390K">
    <nome>Mario</nome>
    <cognome>Rossi</cognome>
    <altezza>1,80 m</altezza>
    <peso>75 Kg</peso>
    <professione>impiegato</professione>
</persona>

Supponiamo ora di voler formattare questi dati e mostrarli in un documento HTML simile a quello che segue.


<html>
    <body>
        Buongiorno signor <ins><!-- Cognome --></ins> <ins><!-- Nome --></ins>, le ricordiamo che
        la sua altezza è di <ins><!-- Altezza --></ins> e il suo peso di <ins><!-- Peso --></ins>.
        La sua occupazione è <ins><!-- Professione --></ins> e il suo codice fiscale 
        corrisponde a <ins><!-- Codice fiscale --></ins>.
    </body>
</html>

Ovviamente il codice sopra riportato non mostrerà nulla in quanto "<!-- Cognome -->", "<!-- Nome -->", ecc. sono commenti. XSLT si pone come obiettivo di mettere "qualcosa" (un tag come vedremo tra poco) al posto di questi commenti che verrà rimpiazzato con il contenuto del documento XML.

IL PRIMO FOGLIO DI STILE XSLT
Come formattare un semplice documento XML con XSLT.

Di seguito riportiamo in foglio di stile XSLT che trasforma i dati del documento di input in un documento HTML:


<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="persona">
        <html>
            <body>
                Buongiorno signor <ins><xsl:value-of select="cognome" />&#xa0;<xsl:value-of select="nome" /></ins>, 
                le ricordiamo che la sua altezza è di <ins><xsl:value-of select="altezza" /></ins> e 
                il suo peso di <ins><xsl:value-of select="peso" /></ins>.
                La sua occupazione è <ins><xsl:value-of select="professione" /></ins> e il suo codice fiscale 
                corrisponde a <ins><xsl:value-of select="@codicefiscale" /></ins>.
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

Nota: &#xa0; corrisponde a &nbsp; (non-breaking space, carattere il cui valore è 160, A0 in esadecimale) ma è espresso in questa forma perché non è possibile usare direttamente &nbsp; in quanto non è definito da alcuna parte (sebbene molto noto, esso fa in realtà parte delle specifiche HTML/XHTML, che in questo documento non entrano in gioco).

Quello sopra riportato è un foglio di stile XSL a tutti gli effetti: analizziamone le caratteristiche. Sulla prima riga si nota immediatamente la presenza di una dichiarazione XML, il che deve farci capire che un documento XSL è anche un documento XML e deve quindi rispettarne tutte le regole.
L'elemento radice per i documenti XSLT è xsl:stylesheet, dove xsl indica lo spazio dei nomi (namespace) per tutto ciò che riguarda XSL (il cui riferimento e la versione sono specificati rispettivamente negli attributi xmlns:xsl e version). Si noti che a volte è possibile trovare xsl:transform come elemento radice, ma sia chiaro che ciò non comporta alcuna differenza.
In seguito si apre l'elemento xsl:template, che indica al parser XSLT come si dovrà comportare quando, analizzando il documento di origine, incontrerà un nodo che corrisponde all'espressione XPath dell'attributo match. Entrare nel dettaglio del funzionamento delle espressioni XPath va oltre lo scopo di questo articolo. In questo caso specifico incontrando l'elemento persona (l'espressione XPath è infatti "persona") applicherà i criteri specificati all'interno di xsl:template.
Tra il tag di apertura e quello di chiusura di xsl:template vi è il codice HTML che desideravamo usare come modello per formattare il documento originario, ma al posto dei commenti ("<!-- Cognome -->", "<!-- Nome -->", ecc.) sono stati inserite delle tag xsl:value-of; value-of è l'elemento fondamentale di XSLT che permette di stampare nel documento di output il valore identificato dall'espressione XPath dell'attributo select. In questo caso, ad esempio, il primo value-of, che ha attributo select con valore "cognome", sarà rimpiazzato nel documento di output con il contenuto dell'elemento cognome, ovvero "Rossi".
Ma vediamo all'opera XSLT: i più famosi browser web in circolazione supportano egregiamente XSLT (il codice di questo articolo è stato testato su Internet Explorer, Firefox e Opera), dunque ci serviremo di essi. Per comunicare al browser che desideriamo che un determinato documento XML sia formattato secondo un certo foglio di stile XSL dobbiamo aggiungere dopo la dichiarazione un riferimento ad esso attraverso l'istruzione di elaborazione (processing-intruction) xml-stylesheet:


<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet type="text/xsl" href="persona.xsl"?>
<persona codicefiscale="MRARSS50A01A390K">
    <nome>Mario</nome>
    <cognome>Rossi</cognome>
    <altezza>1,80 m</altezza>
    <peso>75 Kg</peso>
    <professione>impiegato</professione>
</persona>

Si noti che il foglio di stile in questo caso è stato chiamato persona.xsl e si deve trovare nella stessa cartella del documento XML (persona.xml).
Infine vediamo quale output genererà il parser XSLT:


<html>
    <body>
        Buongiorno signor <ins>Rossi Mario</ins>, le ricordiamo che
        la sua altezza è di <ins>1,80 m</ins> e il suo peso di <ins>75 Kg</ins>.
        La sua occupazione è <ins>impiegato</ins> e il suo codice fiscale 
        corrisponde a <ins>MRARSS50A01A390K</ins>.
    </body>
</html>

Come promesso il risultato ottenuto è quello inizialmente desiderato.

COME APPLICARE UNA TRASFORMAZIONE XSL IN .NET E IN PHP
XSLT in tre righe di codice ASP .Net e PHP.

In sole tre righe in un qualsiasi linguaggio .Net è possibile, dato un documento XML di input e un foglio di stile XSLT, effettuare una trasformazione XSL:


Dim xslTransfomer As New System.Xml.Xsl.XslCompiledTransform()
xslTransfomer.Load(strXSLTPath)
xslTransfomer.Transform(strInputPath, strOutputPath)

Come è intuibile, nella prima riga dichiariamo l'oggetto XslCompiledTransform (si noti che esiste anche una classe XslTransform ma è deprecata), nella seconda con il metodo Load carichiamo il foglio di stile XSLT (indicato dal percorso contenuto in strXSLTPath) e infine effettuiamo la trasformazione con il metodo Transform, fornendogli come parametri strInputPath e strOutputPath, rispettivamente il percorso del file XML di input e quello in cui verrà generato l'output.
Anche l'utilizzo di XSLT in PHP non presenta particolari difficoltà:


$xslt = xslt_create();
xslt_process($xslt, $_GET['input'], $_GET['xslt'], $_GET['output']);
xslt_free($xslt);

Nella prima riga viene creato l'oggetto che permette le trasformazioni XSLT (xslt_create) mentre la seconda esegue la trasformazione attraverso xslt_process (passandogli il percorso del documento XML di input, quello del foglio di stile XSLT e quello destinato all'output); infine viene rilasciato l'oggetto in precedenza creato (xslt_free).

I REALI VANTAGGI DI XSLT
XSLT: confronto con altre soluzioni.

Ma quali vantaggi offre l'utilizzo di XSLT? Ammettiamo di voler formattare dei dati e mostrarli all'utente sul web tramite HTML. Certamente le trasformazioni XSL non possono reggere il confronto con linguaggi di programmazione lato-server avanzati quali ASP o PHP sul lato della potenza, infatti, ad esempio, le possibilità di modificare una stringa si limita ad un substring e poco altro. Risulta però assai vantaggioso sotto altri aspetti.
Prima di tutto XSLT è XML e porta con sé tutti i relativi vantaggi quali completa portabilità (funzionerà su qualunque piattaforma dotata di un parser XSL, si è dunque indipendenti da Apache o IIS), formato standard e possibilità di generare e modificare dinamicamente XSL (XML è semplice da maneggiare in qualsiasi contesto).
Vi sono due metodi per servire all'utente dati XML formattati con XSLT: o effettuando la trasformazione lato server oppure fornendo al browser il documento XML con il riferimento al foglio di stile (tramite la processing-instruction xml-stylesheet, come visto poco fa). La seconda soluzione è particolarmente utile per dare la possibilità all'utente di accedere direttamente ai dati ma anche di mostrarli formattati attraverso XSLT. Questo metodo sarebbe l'ideale per il web del futuro: contenuto in XML, disposizione e formattazione con XSLT e grafica grazie a CSS.
 

<< INDIETRO by VeNoM00