In un documento XML si possono individuare tre parti fondamentali che dovrebbero essere gestite separatamente:
- il contenuto (XML);
- le specifiche relative agli elementi: la struttura (DTD, Namespaces, etc…);
- le specifiche relative alla visualizzazione: lo stile (XSL, CSS, etc).
Il foglio di stile (stylesheet) specifica il formato di presentazione di un documento XML usando due categorie di tecniche:
- trasformazione (opzionale) della struttura del documento di ingresso in un’altra struttura;
- descrizione di come devono essere visualizzati gli elementi della struttura (proprietà).
Le operazioni di trasformazione consentono di:
- generare del testo (costante);
- eliminare parte del contenuto;
- spostare parti di testo (es: scambiare l’ordine di nome e cognome);
- duplicare parti di testo (es: duplicare i titoli per creare un indice);
- ordinare alfabeticamente;
- eseguire operazioni più complesse;
La descrizione avviene attraverso tre livelli di formattazione:
- specifica del layout della schermata o della pagina;
- inserzione di parti della struttura in "contenitori" base (paragrafi, liste, …);
- specifica delle proprietà di formattazione (spaziatura, margini, allineamento, font, …) di ciascuno dei "contenitori".
XSL
XSL è l’acronimo di eXtensible Stylesheet Language, XSL è un linguaggio di annotazione che serve a "trasformare" la struttura di un documento in formato XML in un’altra struttura. Lo scopo principale di questa trasformazione è certamente quello di "convertire" il documento XML in un formato adatto alla presentazione su diversi supporti (per esempio, la sua trasformazione in HTML).
Ad esempio:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="esempio.xsl"?>
Il linguaggio XSL utilizza i pattern per specificare gli elementi XML a cui viene applicato un certo template. I pattern sono definiti mediante espressioni di XPath.
Un template definisce una regola in base a cui gli elementi che corrispondono a un certo pattern devono essere elaborati. Per definire un template si usa il seguente comando:
<xsl:template match="PATTERN">
REGOLE DI ELEBORAZIONE
</xsl:template>
L’attributo "match" è ovviamente obbligatorio, dato che contiene il pattern degli elementi a cui applicare il template in questione. Un’altro esempio:
<xsl:template match="/"> o <xsl:template match="DOCUMENTO">
Il template (o modello) si applica al pattern definito con l’attributo "match"; il pattern consiste nella semplice espressione "/", che significa il root element del documento in questione (cioe` l’elemento "DOCUMENTO"); il resto è semplice markup di HTML.
Naturalmente, la cosa più importante è quella di estrarre informazione dal file XML per riportarla sulla pagina HTML. A questo fine, il comando più importante è "xsl:value-of", che si usa come segue:
<xsl:value-of select="PATTERN"/>
come anche:
<xsl:for-each select="PATTERN">
REGOLE DI ELABORAZIONE
</xsl:for-each>
Nell’eleborare l’output e` possibile anche riordinare gli elementi da presentare; attraverso il comando sort:
<xsl:sort select="PATTERN" order="descending">
dove "descending" è uno dei due possibili valori dell’attributo "order" (l’altro, "ascending", è il valore di default). E’ possibile anche combinare più ordinamenti (per esempio quello per anno e per nome dell’artista), basta usare più volte il comando "xsl:sort".
Per filtrare l’informazione da presentare, basta usare dei filtri nei pattern che vengono usati. Per esempio, per filtrare gli elementi che vengono selezionati con xsl:for-each, basta fare come segue:
<xsl:for-each select="PATTERN[FILTRO]">
Gli operatori ammessi nel filtro sono:
- = uguale;
- != diverso;
- < minore di;
- > maggiore di;
Bisogna fare particolare attenzione agli spazi che vengono avvertiti.
E’ anche possibile introdurre un test condizionale sulle regole di elaborazione. Ciò si ottiene usando l’elemento xsl:if come segue:
<xsl:if test="./@tasse='noninregola'">
REGOLE DI ELABORAZIONE
</xsl:if>