XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re [email protected] Anno...
-
Upload
nerina-distefano -
Category
Documents
-
view
214 -
download
1
Transcript of XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re [email protected] Anno...
XSLTXSLT
UNIVERSITA’ DI CAMERINOCorso di laurea in Informatica
Barbara [email protected]
Anno Accademico 2006-07
Barbara Re 2
Introduzione
XML è un metalinguaggioIn quanto permette tramite la sua sintassi di descrivere altri linguaggi
XSLT (eXtensible Stylesheet Language for Transformation) è un esempio di linguaggio scritto con sintassi XML cioè una grammatica XML
Un documentoXML è innanzitutto XML Ben formattatoContiene al suo interno elementi ed attributi che fanno riferimento alla grammatica XSLT
Tale grammatica rappresenta una raccomandazione W3C
Namespace: http://www.w3.org/1999/XSL/Transform
Barbara Re 3
L’approccio
L’approccio generico di un documento XSLT alla trasformazione di contenuti XML può essere schematizzato con una frase
Cerca – Trova – Trasforma
L’approccio a XSLT dovrà essere orientato allo studio di una grammatica che ci permetta di cercare all’interno dell’albero di un documento XML dei contenuti e, una volta trovati, qualora esistano, li trasformi in qualcosa di diverso
Albero Originale Albero RisultanteTrasformazione
XSLT
Barbara Re 4
Il modello di XSLT
processore XSLT
input
output
Barbara Re 5
Documento XSLT
Stylesheet è il tag root
In ogni caso occorre che l’intero doocumento faccia riferimento al Namespace corretto, partendo dal tag root e scegliendo un alias per il Namespace, di solito xsl
Un documento XSLT quindi contiene all’interno del tag root indicato, una serie di altri nodi elemento che corrispondono a istruzioni del linguaggio
<xsl:stylesheet version="1.0"
xmlns:xsl=http://www.w3.org/1999/XSL/Transform>
<!– Qui sarà carocato il cotenuto del documento XSLT-->
</xsl:stylesheet>
Barbara Re 6
Dichiarazione
Per provare istruzioni XSLT sarà sufficiente inserire in testa a un documento xml una seconda processing-instruction dopo il prologo che colleghi l’XSLT all’XML
<?xml version="1.0" ?>
<?xml-stylesheet type=“text/xsl” href=“prima.xsl” >
<documento/>
Barbara Re 7
Definizione di Template
La prima istruzione per eccellenza di un documento XSLT è quella che ci permette di definire dei template
Cioè dei modelli di trasformazione
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl=“http://www.w3.org/1999/XSL/Transform”>
<xsl:template match=“/”>
<!– Istruzioni che lavorano sui contenuti trovati-->
</xsl:template>
</xsl:stylesheet>
Barbara Re 8
Comando template
Il comando template lavora con un attributo di nome match
Match permette di definire a quali nodi si debba applicare il template stesso
L’attibuto match rappresenta una regola XPath quindi la condizione match=“/” indica che vogliamo definire un template per il nodo root del documento
Barbara Re 9
Esempio: HTML in output
<?xml version="1.0" ?>
<xsl:stylesheet
version="1.0"
xmlns:xsl=“http://www.w3.org/1999/XSL/Transform”>
<xsl:template match=“/”>
<html>
<head>
<title> prima trasformazione da XML a HTML </title>
</head>
</html>
<body>
<h1> Prova di scrittura del documento HTML </h1>
</body>
</xsl:template>
</xsl:stylesheet>
Barbara Re 10
XML di riferimento
<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="trasformazione.xsl"?> <clienti>
<cliente id="C1001"><ragioneSociale> Cliente1 </ragioneSociale><indirizzo> Via Roma, 1 </indirizzo><fatturato anno="2000"> 2000 </fatturato><fatturato anno="2001"> 3000 </fatturato>
</cliente><cliente id="C1002">
<ragioneSociale> Cliente2 </ragioneSociale><indirizzo> Via Roma, 2 </indirizzo><fatturato anno="2000">4000 </fatturato><fatturato anno="2001">5000 </fatturato>
</cliente><cliente id="C1003">
<ragioneSociale> Cliente3 </ragioneSociale><indirizzo> Via Roma, 3 </indirizzo><fatturato anno="2000">6000 </fatturato><fatturato anno="2001">7000 </fatturato>
</cliente><cliente id="C1004">
<ragioneSociale> cliente4 </ragioneSociale><indirizzo> Via Roma, 4 </indirizzo><fatturato anno="2000">9000 </fatturato><fatturato anno="2001">1000 </fatturato>
</cliente><cliente id="C1005">
<ragioneSociale> cliente5 </ragioneSociale><indirizzo> Via Roma, 5 </indirizzo><fatturato anno="2000">10 </fatturato><fatturato anno="2001">30 </fatturato>
</cliente></clienti>
Barbara Re 11
Lettura e copia dei valori
Comandi per la lettura e copia dei documenti in ingresso
Per leggere in uscita il valore di un qualsiasi nodo con il comando value-of-select<xsl:value-of select="Path o XSLT function">
<?xml version="1.0" ?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/">
<xsl:value-of select="/clienti/cliente" /></xsl:template></xsl:stylesheet>
Barbara Re 12
Proviamo…………..
base
trasformazione
Barbara Re 13
Soluzioni iterative
Nel caso in cui si vogliono leggere però i nomi di tutti i clienti e non solo del primo cliente dobbiamo appoggiarci o ad un costrutto iterativo oppure al comando apply-templates che richiama ricorsivamente il template associato a ciascuno dei nodi che fanno parte di una collezione di nodi
<xsl:apply-templates select=“XPath">
Barbara Re 14
Proviamo…………..
ricorrobase
ricorro
Barbara Re 15
Costrutti condizionali ed iterativi
Possiamo creare costrutti condizionali per valutare il contenuto del documento XML in ingresso prima di trasformarlo
IfChoose
<xsl:if test="condizione"><!--Codice da eseguire se la condizione all'interno di test è prova--></xsl:if>
<xsl:choose><xsl:when test="condizione"><!--Codice da eseguire se la condizione di test è vera--></xsl:when><xsl:when test="condizione"><!--Codice da eseguire se la condizione di test è vera--></xsl:when><xsl:otherwise test="condizione"><!--Codice da eseguire se la condizione di test è falsa--></xsl:otherwise></xsl:choose>
La differenza fra i due costrutti è che il blocco if può valutare una sola condizione e non presenta un’alternativa elseif come spesso accade nei linguaggi tradizionali
Se prevediamo anche un blocco otherwise questo costituisce la condizione di default nel caso in cui nessuna delle precedenti si verifichi
Barbara Re 16
Esempio costrutto if
<xsl:template match="cliente"><li> <xsl:value-of select="ragioneSociale" /> <xsl:if test="fatturato/@anno=2000">
<i> (Cliente dal 2000) </i></xsl:if></li>
</xsl:template>
Barbara Re 17
Proviamo…………..
Barbara Re 18
Esempio costrutto choose
<xsl:template match="cliente"><li>
<xsl:choose><xsl:when test="position() mod 2 = 0"><font color="red" size="4"><xsl:value-of select="ragionesociale" /></font></xsl:when>
<xsl:otherwise> <font color="black" size="2">
<xsl:value-of select="ragionesociale" /> </font></xsl:otherwise></xsl:choose>
</li></xsl:template>
Barbara Re 19
Proviamo…………..
Barbara Re 20
Istruzione for-each
Nel caso in cui sia necessario eseguire delle interazioni su collezioni di nodi presenti nel documento XML di input possiamo usare l’istruzione for-each
<xsl:for-each select="XPath"><!-- codice relativo al nodo corrente -->
</xsd:for-each>
<xsl:for-each select="XPath"><xsl:value-of select="ragione sociale">
</xsd:for-each>
Barbara Re 21
Ordinamento
Qualora volessimo ordinare il contenuto secondo un qualche valore prima di scriverlo in output possiamo far riferimento all’istruzione sort
Select indica un’espressione secondo la quale ordinare i contenuti
Data-type ci permette di indicare al processore se vogliamo un ordinamento tra stringhe o numeri
Order ci permette di definire se vogliamo un ordinamento crescente o decrescente dei dati
<xsl:sort select="Espressione" data-type="text|number" order="ascending|descending" />
Barbara Re 22
XSLT consente di trasformare documenti XML in altri documenti con struttura diversa
Funziona con un meccanismo di pattern matching e si basa su Xpath
Implementa istruzioni condizionali e meccanismi di iterazione
Conclusione
Barbara Re 23
Riferimenti
Deitel et al, XML Corso di programmazione, Apogeo
Chris Bates, XML in theory and Practice, Wiley
XML Path Language (XPath) Version 1.0W3C Recommendation 16 November 1999http://www.w3.org/TR/xpath
W3Schools Online Web Tutorialshttp://www.w3schools.com/xsl/default.asp
Barbara Re 24
Ci sono domande?