Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

XSLT

XSLT: come trasformare i documenti XML in altri documenti
XSLT: come trasformare i documenti XML in altri documenti
Link copiato negli appunti

Una caratteristica fondamentale di XML è quella di occuparsi esclusivamente della descrizione del contenuto dell'informazione e non della sua rappresentazione.
Infatti i tag XML non esprimono in alcun modo come verrà visualizzato il loro contenuto, cosa che invece accade in altri linguaggi basati su marcatori, come HTML.
L'informazione contenuta in un file XML può essere visualizzata definendo degli stili di rappresentazione, che, applicati al file XML, saranno in grado di rappresentarne il contenuto nel modo desiderato.
In XML questo può essere fatto utilizzando XSL (eXtensible Stylesheet Language).
XSL è un linguaggio basato su XML per esprimere i fogli di stile, ossia un documento contenente le regole per rappresentare l'informazione.
XSL è composto da due componenti: XSLT (eXtensible Stylesheet Language transformation), che descriveremo in questo capitolo, e XSL-FO (eXtensible Stylesheet Language - Formatting Objects), che analizzeremo nel prossimo capitolo.
All'interno di XSL viene utilizzato XPath per la ricerca ed il filtraggio dei contenuti del file XML.

XSLT

XSLT è un linguaggio basato su XML che permette di definire delle regole per trasformare un documento XML in un altro documento XML o in un documento HTML.
Utilizzando XSL possiamo ad esempio visualizzare il contenuto di un documento XML in HTML, XHTML o SVG.
La trasformazione viene realizzata da un XSLT Processor che riceve come input il file XML da trasformare, il file XSL con la definizione dello stylesheet da applicare e produce come output il file trasformato.
Un file XSL è formato da una serie di template (modelli) che contengono le regole di trasformazione dei tag del documento XML. Questi template vengono applicati ai tag corrispondenti dal XSLT Processor in maniera ricorsiva nel corso della trasformazione.
Come esempio vediamo di definire un file XSL per visualizzare un file XML di esempio in una pagina HTML.
Il file XML di input è:

<?xml version="1.0"?>
<rubrica>
  <persona>
    <nome>Mario</nome>
    <cognome>Rossi</cognome>
    <indirizzo>
      <via>via bianchi 1</via>
      <cap>00000</cap>
      <citta>Roma</citta>
    </indirizzo>
    <telefono>
      <telefono_fisso>123456</telefono_fisso>
      <telefono_cellulare>987656412</telefono_cellulare>
    </telefono>
  </persona>
</rubrica>

Il file XSL con la definizione dello stile per la creazione del file HTML è:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/transform" version="1.0">
  <xsl:template match="/">
    <html>
      <head>
        <title>Rubrica in versione HTML</title>
      </head>
      <body>
        <h1>Rubrica</h1>
        <xsl:apply-templates/>
      </body>
    </html>  
  </xsl:template>
  <xsl:template match="persona">
    <h2> <xsl:value-of select="cognome"/> <xsl:value-of select="nome"/> </h2>
    <ul>
      <li>Via: <xsl:value-of select="./indirizzo/via"/></li>
      <li>CAP: <xsl:value-of select="./indirizzo/cap"/></li>
      <li>Citta': <xsl:value-of select="./indirizzo/citta"/></li>
      <li>Telefono (fisso): <xsl:value-of select="./telefono/telefono_fisso"/></li>
      <li>Telefono (cellulare): <xsl:value-of select="./telefono/telefono_cellulare"/></li>
    </ul>
  </xsl:template>
</xsl:stylesheet>

I

n un file XSL le regole di trasformazione sono contenute all'interno degli elementi template e tramite l'attributo match possiamo specificare, utilizzando la sintassi XPath, il tag a cui si riferiscono queste regole. Nel nostro esempio il primo elemento template contiene le regole di trasformazione dell'elemento root del file di input (l'elemento <rubrica>); mentre il secondo definisce le regole per la trasformazione degli elementi <persona>.
Il processore XSLT effettua il parsing del documento XML da trasformare e, per ogni nodo incontrato, ricerca il template appropriato all'interno del file XSL.
Quando il processore incontra il nodo root del documento XML applica il primo template e quindi costruisce lo scheletro del file HTML. Con l'elemento <xsl:apply-templates> si indica al processore XSLT di analizzare i nodi figli del nodo corrente alla ricerca di altri template da applicare.

Il risultato della trasformazione

Il risultato (mostrato in figura) prodotto dalla trasformazione XSLT è il seguente:

<html>
  <head>
    <title>Rubrica in versione HTML</title>
  </head>
  <body>
    <h1>Rubrica</h1>
    <h2>Rossi Mario</h2>
      <ul>
        <li>Via: via bianchi 1</li>
        <li>CAP: 00000</li>
        <li>Citta': Roma</li>
        <li>Telefono (fisso): 123456</li>
        <li>Telefono (cellulare): 987656412</li>
      </ul>
  </body>
</html>  

Lo stesso file XML può essere trasformato in un'immagine SVG utilizzando il seguente file XSL:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/transform" version="1.0">
  <xsl:template match="/">
    <svg >
      <title>Rubrica in versione SVG</title>
      <xsl:apply-templates/>
    </svg>  
  </xsl:template>
  <xsl:template match="persona">
    <rect x="10" y="10" fill="lightblue" stroke="blue" stroke-/>
    <text x="20" y="30" font-family="times" font- fill="black">
      <xsl:value-of select="cognome"/> <xsl:value-of select="nome"/>
    </text>
    <rect x="10" y="40" fill="white" stroke="blue" stroke-/>
    <text x="20" y="60" font-family="times" font- fill="blue">
      Via: <xsl:value-of select="./indirizzo/via"/>
    </text>
    <text x="20" y="80" font-family="times" font- fill="blue">
      CAP: <xsl:value-of select="./indirizzo/cap"/>
    </text>
    <text x="20" y="100" font-family="times" font- fill="blue">
      Citta': <xsl:value-of select="./indirizzo/citta"/>
    </text>
    <text x="20" y="120" font-family="times" font- fill="blue">
      Telefono (fisso): <xsl:value-of select="./telefono/telefono_fisso"/>
    </text>
    <text x="20" y="140" font-family="times" font- fill="blue">
      Telefono (cellulare): <xsl:value-of select="./telefono/telefono_cellulare"/>
    </text>
  </xsl:template>
</xsl:stylesheet>

Il risultato della trasformazione

Il risultato della trasformazione (mostrato in figura) è il seguente:

<svg >
  <title>Rubrica in versione SVG</title>
  <rect x="10" y="10" fill="lightblue" stroke="blue" stroke-/>
  <text x="20" y="30" font-family="times" font- fill="black">Rossi Mario</text>
  <rect x="10" y="40" fill="white" stroke="blue" stroke-/>
  <text x="20" y="60" font-family="times" font- fill="blue">Via: via bianchi 1</text>
  <text x="20" y="80" font-family="times" font- fill="blue">CAP: 00000</text>
  <text x="20" y="100" font-family="times" font- fill="blue">Citta': Roma</text>
  <text x="20" y="120" font-family="times" font- fill="blue">Telefono (fisso): 123456</text>
  <text x="20" y="140" font-family="times" font- fill="blue">Telefono (cellulare): 987656412</text>
</svg>

XSLT è uno strumento grazie al quale possiamo decidere di visualizzare gli stessi dati contenuti in un file XML in differenti modi a seconda delle nostre esigenze ed il tutto in maniera assolutamente automatica.
In questo capitolo abbiamo descritto le caratteristiche principali e l'ambito di utilizzo di XSLT, per approfondire la conoscenza di questo linguaggio vi rimando alla lettura della sua specifica, che potete trovare a questo indirizzo: http://www.w3.org/tr/xslt.
Il processore, utilizzato per realizzare gli esempi visti in questo capitolo, è Xalan, un processore XSLT scritto in Java, liberamente scaricabile all'indirizzo: http://xml.apache.org/xalan-j/.

Ti consigliamo anche