Nell'ambito dello standard XSL il compito di trasformare un documento XML in un altro documento è affidato al linguaggio XSLT.
Nella terminologia di XSLT, il documento da trasformare è chiamato documento origine (source document), mentre il documento generato dal processo di trasformazione è chiamato documento risultante (result document).
Il documento risultante di una trasformazione XSLT può essere un documento XML o un documento di altro tipo. Ad esempio, a partire da un documento XML possiamo generare un documento XHTML oppure un documento WML o anche RTF o altri formati testuali.
La trasformazione avviene in base alle informazioni contenute in un particolare tipo di documento e interpretate da un processore XSLT. Questo documento di trasformazione, chiamato foglio di stile XSLT, non è altro che un documento XML che fa uso di tag appartenenti alla grammatica di XSLT in grado di controllare il processo di trasformazione.
In generale, un foglio di stile XSLT ha la seguente struttura:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/transorm">
... template di trasformazione ...
</xsl:stylesheet>
All'interno del root element <xsl:stylesheet> vengono definite le istruzioni di trasformazione da applicare al documento XML origine. XSLT consente di trasformare ciascun elemento del documento XML di origine in un altro elemento del formato del documento risultante.
È possibile anche aggiungere al documento risultante elementi completamente nuovi o non prendere in considerazione determinati elementi del documento origine, riordinare gli elementi, fare elaborazioni in base al risultato di determinate condizioni, ecc.
Il processo di trasformazione controllato da XSLT si basa sull'uso del linguaggio XPath per individuare gli elementi del documento origine, sui quali viene applicato un template (o modello) di trasformazione.
Da un punto di vista sintattico, un template è un elemento del linguaggio XSLT che ha la seguente forma di base:
<xsl:template match="espressione XPath">
... Definizione dellìoutput...
</xsl:template>
Un template XSLT individua un elemento o un insieme di elementi di un documento XML sfruttando unìespressione XPath e vi applica una serie di elaborazioni per ottenere un output. Per fare una analogia con i CSS, un template corrisponde approssimativamente ad una regola CSS.
Per fare un esempio, facendo riferimento al documento XML che descrive un articolo, il seguente template restituisce in output il titolo del secondo paragrafo:
<xsl:template match="/articolo/paragrafo[position()=2]">
<xsl:value-of select="@titolo"/>
</xsl:template>
L'elemento <xsl:value-of> contenuto all'interno dell'elemento <xsl:template> consente di catturare il valore di un elemento o di un attributo e di produrlo in output.
Un foglio di stile XSLT non è altro che un insieme di template da applicare ai vari elementi di un documento XML. Comprendere come avviene l'applicazione dei template di un foglio di stile XSLT da parte del relativo processore è un elemento essenziale per realizzare fogli di stile corretti.
Il modello di elaborazione dei processori XSLT segue la struttura gerarchica del documento XML di partenza. In pratica, il processore XSLT va alla ricerca dei template da applicare partendo dal root element e seguendo l'albero di rappresentazione logica del documento stesso.
In linea di principio, con l'applicazione del relativo template al root element termina il compito del processore XSLT. Se il foglio di stile contiene diversi template che devono essere applicati ai vari elementi del documento XML di partenza è necessario specificarlo esplicitamente.
Questo può essere fatto specificando all'interno del template corrente l'elemento <xsl:apply-templates/>. Con questo elemento del linguaggio XSLT indichiamo al processore di cercare eventuali altri template da applicare alla trasformazione corrente.
Non è importante l'ordine con cui sono stati specificati i template all'interno del foglio di stile; sarà il processore ad individuarli in base all'espressione XPath associata.
Ad esempio, un possibile template del root element che avvia la trasformazione di un articolo può essere analogo al seguente:
<xsl:template match="/">
<xsl:value-of select="articolo/@titolo"/>
<xsl:apply-templates/>
</xsl:template>
Questo template estrae il titolo dell'articolo ed indica al processore XSLT di cercare altri template da applicare al documento XML.