L’XSL si basa su un meccanismo di fogli di stile. I fogli di stile vengono generalmente usati per applicare in modo coerente stili o formattazione ai documenti. Il tipo di foglio di stile più utilizzato sul Web è basato sulla specifica dei fogli di stile CSS (Cascading Style Sheets). Questi permettono agli utenti di definire le classi di stile che possono essere applicate al documento HTML.
L’XSL offre lo stesso livello di formattazione e di flessibilità dei fogli di stile CSS e molte altre caratteristiche, ma utilizza metodi diversi. L’XSL si basa su modelli, che sono sotto alcuni aspetti analoghi alle regole dei fogli di stile e che offrono il meccanismo per l’applicazione di informazioni di formattazione ai dati che rispondono a un particolare pattern. Quindi un foglio di stile comprende uno o più modelli che a loro volta contengono dei pattern.
I modelli forniscono la struttura dei documenti generati dal codice. Gli elementi generati possono essere di qualsiasi tipo, poiché non è necessario che i modelli XSL contengano riferimenti ai dati XML. La reale potenzialità dei fogli di stile consiste nel generare dati XML in nuovi documenti. I modelli XSL fanno riferimento ai dati XML mediante i pattern.
Modelli
Un foglio di stile comprende uno o più modelli che a loro volta contengono dei pattern.
I modelli forniscono la struttura dei documenti generati dal codice.
Gli elementi generati possono essere di qualsiasi tipo, poiché non è necessario che i modelli XSL contengano riferimenti ai dati XML.
La reale potenzialità dei fogli di stile consiste nel generare dati XML in nuovi documenti.
I modelli XSL fanno riferimento ai dati XML mediante i pattern ed in genere coincide con il blocco di istruzioni compreso tra i tag <xsl:template> </ xsl:template >.
Ogni modello contiene poi uno o più pattern.
Pattern
Il linguaggio XSL utilizza i pattern per specificare gli elementi XML a cui viene applicato il modello XSL.
Questo metodo di corrispondenza dei pattern rende XSL un linguaggio di dichiarazioni in contrapposizione con i linguaggi basati sulle procedure.
I pattern definiscono il “livello” specifico della struttura del documento da far corrispondere identificandone la gerarchia della struttura. Cioè sono l’esatta alberatura dei tag xml.
In un documento XSL l’elemento radice è <xsl:stylesheet>. Esso deve contenere un attributo che definisca la versione del linguaggio e almeno una dichiarazione di namespace. Quest’ultima ha come valore: “http://www.w3.org/1999/XSL/Transform”.
La struttura di base di un foglio XSLT ( XSL Transformation ) si presenta dunque così:
<?xml version=”1.0″ encoding=”UTF-8″?>
<xsl:stylesheet version=”1.0″ xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”>
……………
</xsl:stylesheet>
Tra il tag di apertura e quello di chiusura dell’elemento radice vanno definite tutte le regole di trasformazione.
Vediamo un esempio; di seguito è riportato il codice xml
<?xml version=”1.0″?>
<?xml-stylesheet type=”text/xsl” href=”prova.xsl”?>
<catalogo>
<pianta>
<nome>zxcvx</nome>
<crescita>nn lo so</crescita>
<info>aboooooooo</info>
</pianta>
</catalogo>
mentre il file XSL è il seguente (file prova.xsl):
<?xml version=”1.0″?>
<xsl:stylesheet xmlns:xsl=”http://www.w3.org/TR/WD-xsl”>
<xsl:template>
<BODY STYLE=”font-family:Arial, helvetica, sans-serif; font-size:12px”>
<TABLE border=”1″ cellpadding=”0″ cellspacing=”0″ bgcolor=”#99CCCC” width=”50%”>
<TR>
<TD><CENTER><B>Nome</B></CENTER></TD>
<TD><CENTER><B>Crescita</B></CENTER></TD>
<TD><CENTER><B>Info</B></CENTER></TD>
</TR>
<TR>
<xsl:for-each select=”catalogo/pianta”>
<TD><CENTER><xsl:value-of select=”nome”/></CENTER></TD>
<TD><CENTER><xsl:value-of select=”crescita”/></CENTER></TD>
<TD><CENTER><xsl:value-of select=”info”/></CENTER></TD>
</xsl:for-each>
</TR>
</TABLE>
</BODY>
</xsl:template>
</xsl:stylesheet>
Il file xsl inizia quindi con il tag <xsl:stylesheet xmlns:xsl=”http://www.w3.org/TR/WD-xsl”> e termina con il tag </xsl:stylesheet> ; il primo tag dichiara inoltre un Namespaces xmlns .
Il codice incluso tra i due tag
<xsl:template>
……….
</xsl:template>
, rappresenta un unico modello, che coincide quindi con un blocco di codice html ed xsl ( o regole ), chiamato appunto template . Al suo interno ci sono poi i vari patterns, quelli che puntano tramite il select a diversi Elementi ( o Nodi ) xml e quelli che restituiscono il valore di un nodo.
L’elemento <xsl:for-each > consente di applicare ad ogni pattern ( specificato dal select ) un determinato stile; invece l’elemento <xsl:value-of > restituisce il valore dell’elemento specificato nel select.
Il foglio di stile viene richiamato nel file xml con il suo tag proprio xml-stylesheet .
Un foglio di stile può avere anche una struttura a più modelli, nella quale il foglio di stile contiene più modelli ( più tag xsl:template ) che possono essere applicati indipendentemente dagli altri.
—————————————————-
Vediamo un altro esempio; il file xml è il seguente (anteprima senza fogli di stile XSL):
<?xml version=”1.0″ standalone=”no”?>
<?xml-stylesheet type=”text/xsl” href=”curric.xsl” ?>
<radice>
<curriculum>
<dati>
<nome>Luca</nome>
<cognome>Rossi</cognome>
<sesso>Maschile</sesso>
<indirizzo>
<via>Via Degli Angeli 35</via>
<cap>21057</cap>
<city>Olgiate Olona</city>
<provincia>VA</provincia>
<nazione>Italia</nazione>
</indirizzo>
<telefono>03313434322</telefono>
<posta>rossi@mail.com</posta>
</dati>
<studi>
<maturita>
<titolo>Maturita’ Scientifica</titolo>
<voto>48/60</voto>
</maturita>
<laurea>
<universita>Statale di Milano</universita>
<facolta>Informatica</facolta>
<votol>110</votol>
</laurea>
</studi>
<esperienze>Da 3 anni responsabile tecnico “Inforscuola”</esperienze>
<lingua>Inglese</lingua>
</curriculum>
</radice>
mentre il foglio di stile XSL è il seguente (file “curric.xsl”):
<?xml version=”1.0″?>
<HTML xmlns:xsl=”http://www.w3.org/TR/WD-xsl”>
<BODY STYLE=”font-family:Arial, helvetica, sans-serif; font-size:22pt”>
<xsl:for-each select=”radice/curriculum”>
<DIV STYLE=”background-color:teal; color:white; margin-bottom:0.5em”>
<xsl:value-of select=”dati/nome”/>
<xsl:value-of select=”dati/cognome”/>
</DIV>
<DIV STYLE=”margin-left:20px; margin-bottom:1em; font-size:18pt;font-style:italic”>
Indirizzo: <xsl:value-of select=”dati/indirizzo/via”/>
<DIV STYLE=”margin-left:100px;font-style:italic;font-size:18pt”>
<xsl:value-of select=”dati/indirizzo/cap”/>
<SPAN>
<xsl:value-of select=”dati/indirizzo/city”/>
</SPAN>
<SPAN>
<xsl:value-of select=”dati/indirizzo/provincia”/>
</SPAN>
</DIV>
<DIV> Telefono:<xsl:value-of select=”dati/telefono”/>
</DIV> E-mail :<xsl:value-of select=”dati/posta”/>
</DIV>
<DIV STYLE=” font-size:24;font-style:verdana; color:black;background-color:#EEEEEE”>
Studi</DIV>
<xsl:for-each select=”studi/maturita”>
<DIV STYLE=”font-style:arial; color:black;font-size:18pt; margin-top:1em;margin-left:20px”>
Media Superiore: <SPAN STYLE=”color:teal”>
<xsl:value-of select=”titolo”/>
</SPAN> – Voto : <SPAN STYLE=”color:teal”>
<xsl:value-of select=”voto”/>
</SPAN>
</DIV>
</xsl:for-each>
<xsl:for-each select=”studi/laurea”>
<DIV STYLE=”font-style:arial; color:black; font-size:18pt; margin-left:20px”>
Universita’: <SPAN STYLE=”color:teal”>
<xsl:value-of select=”universita”/>
</SPAN> – Corso di Laurea: <SPAN STYLE=”color:teal”>
<xsl:value-of select=”facolta”/>
</SPAN> – Voto : <SPAN STYLE=”color:teal”>
<xsl:value-of select=”votol”/>
</SPAN>
</DIV>
</xsl:for-each>
<DIV STYLE=”background-color:#EEEEEE; color:black; margin-top:1em; font-size:24″>
Esperienze Lavorative </DIV>
<DIV STYLE=”font-style:italic; color:teal;font-size:18pt; margin-top:0.5em; margin-left:20px”>
<xsl:value-of select=”esperienze”/>
</DIV>
<DIV STYLE=”background-color:#EEEEEE; color:black; margin-top:0.5em; font-size:24″>
Lingua Straniera </DIV>
<DIV STYLE=”font-style:italic; color:teal;font-size:18pt; margin-top:0.5em; margin-bottom:2em; margin-left:20px”>
<xsl:value-of select=”lingua”/>
</DIV>
</xsl:for-each>
</BODY>
</HTML>
Come potete vedere, i fogli di stile (cioè i vari Tag HTML) elencati nel file XSL vengono poi applicati ad ogni elemento “radice/curriculum” ed in particolare agli elementi “studi/maturita” e “studi/laurea”.