Title: XSLT
1XSLT
UNIVERSITA DI CAMERINO Corso di laurea in
Informatica Barbara Re barbara.re_at_unicam.it
Anno Accademico 2006-07
2Introduzione
- XML è un metalinguaggio
- In 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 documento
- XML è innanzitutto XML
- Ben formattato
- Contiene 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
3Lapproccio
- Lapproccio generico di un documento XSLT alla
trasformazione di contenuti XML può essere
schematizzato con una frase - Cerca Trova Trasforma
- Lapproccio a XSLT dovrà essere orientato allo
studio di una grammatica che ci permetta di
cercare allinterno dellalbero di un documento
XML dei contenuti e, una volta trovati, qualora
esistano, li trasformi in qualcosa di diverso
Albero Originale
Albero Risultante
Trasformazione XSLT
4Il modello di XSLT
input
output
processore XSLT
5Documento XSLT
ltxslstylesheet version"1.0" xmlnsxslhttp//w
ww.w3.org/1999/XSL/Transformgt lt! Qui sarà
carocato il cotenuto del documento
XSLT--gt lt/xslstylesheetgt
- Stylesheet ? è il tag root
- In ogni caso occorre che lintero 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 allinterno del
tag root indicato, una serie di altri nodi
elemento che corrispondono a istruzioni del
linguaggio
6Dichiarazione
- Per provare istruzioni XSLT sarà sufficiente
inserire in testa a un documento xml una seconda
processing-instruction dopo il prologo che
colleghi lXSLT allXML
lt?xml version"1.0" ?gt lt?xml-stylesheet
typetext/xsl hrefprima.xsl gt ltdocumento/gt
7Definizione di Template
- La prima istruzione per eccellenza di un
documento XSLT è quella che ci permette di
definire dei template - Cioè dei modelli di trasformazione
lt?xml version"1.0" ?gt ltxslstylesheet
version"1.0" xmlnsxslhttp//www.w3.org/1999/
XSL/Transformgt ltxsltemplate match/gt lt!
Istruzioni che lavorano sui contenuti
trovati--gt lt/xsltemplategt lt/xslstylesheetgt
8Comando template
- Il comando template lavora con un attributo di
nome match - Match permette di definire a quali nodi si debba
applicare il template stesso - Lattibuto match rappresenta una regola XPath
quindi la condizione match/ indica che
vogliamo definire un template per il nodo root
del documento
9Esempio HTML in output
lt?xml version"1.0" ?gt ltxslstylesheet
version"1.0" xmlnsxslhttp//www.w3.org/199
9/XSL/Transformgt ltxsltemplate
match/gt lthtmlgt ltheadgt lttitlegt prima
trasformazione da XML a HTML lt/titlegt
lt/headgt lt/htmlgt ltbodygt lth1gt Prova di
scrittura del documento HTML lt/h1gt lt/bodygt lt/xsl
templategt lt/xslstylesheetgt
10XML di riferimento
- lt?xml version"1.0"?gt
- lt?xml-stylesheet type"text/xsl"
href"trasformazione.xsl"?gt - ltclientigt
- ltcliente id"C1001"gt
- ltragioneSocialegt Cliente1 lt/ragioneSocialegt
- ltindirizzogt Via Roma, 1 lt/indirizzogt
- ltfatturato anno"2000"gt 2000 lt/fatturatogt
- ltfatturato anno"2001"gt 3000 lt/fatturatogt
- lt/clientegt
- ltcliente id"C1002"gt
- ltragioneSocialegt Cliente2 lt/ragioneSocialegt
- ltindirizzogt Via Roma, 2 lt/indirizzogt
- ltfatturato anno"2000"gt4000 lt/fatturatogt
- ltfatturato anno"2001"gt5000 lt/fatturatogt
- lt/clientegt
- ltcliente id"C1003"gt
- ltragioneSocialegt Cliente3 lt/ragioneSocialegt
- ltindirizzogt Via Roma, 3 lt/indirizzogt
- ltfatturato anno"2000"gt6000 lt/fatturatogt
11Lettura 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 - ltxslvalue-of select"Path o XSLT function"gt
lt?xml version"1.0" ?gt ltxslstylesheet
version"1.0" xmlnsxsl"http//www.w3.org/1999/X
SL/Transform"gt ltxsltemplate match"/"gt ltxslvalu
e-of select"/clienti/cliente" /gt lt/xsltemplategt
lt/xslstylesheetgt
12Proviamo..
base
trasformazione
13Soluzioni 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
ltxslapply-templates selectXPath"gt
14Proviamo..
ricorrobase
ricorro
15Costrutti condizionali ed iterativi
- Possiamo creare costrutti condizionali per
valutare il contenuto del documento XML in
ingresso prima di trasformarlo - If
- Choose
ltxslif test"condizione"gt lt!--Codice da eseguire
se la condizione all'interno di test è
prova--gt lt/xslifgt ltxslchoosegt ltxslwhen
test"condizione"gt lt!--Codice da eseguire se la
condizione di test è vera--gt lt/xslwhengt ltxslwhen
test"condizione"gt lt!--Codice da eseguire se la
condizione di test è vera--gt lt/xslwhengt ltxslothe
rwise test"condizione"gt lt!--Codice da eseguire
se la condizione di test è falsa--gt lt/xslotherwis
egt lt/xslchoosegt
La differenza fra i due costrutti è che il blocco
if può valutare una sola condizione e non
presenta unalternativa 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
16Esempio costrutto if
ltxsltemplate match"cliente"gt ltligt
ltxslvalue-of select"ragioneSociale" /gt
ltxslif test"fatturato/_at_anno2000"gt ltigt
(Cliente dal 2000) lt/igt lt/xslifgt lt/ligt lt/xslte
mplategt
17Proviamo..
18Esempio costrutto choose
ltxsltemplate match"cliente"gt ltligt ltxslchoose
gt ltxslwhen test"position() mod 2
0"gt ltfont color"red" size"4"gt ltxslvalue-of
select"ragionesociale" /gt lt/fontgt lt/xslwhengt
ltxslotherwisegt ltfont color"black"
size"2"gt ltxslvalue-of select"ragionesociale"
/gt lt/fontgt lt/xslotherwisegt lt/xslchoosegt lt/l
igt lt/xsltemplategt
19Proviamo..
20Istruzione for-each
- Nel caso in cui sia necessario eseguire delle
interazioni su collezioni di nodi presenti nel
documento XML di input possiamo usare
listruzione for-each
ltxslfor-each select"XPath"gt lt!-- codice
relativo al nodo corrente --gt lt/xsdfor-eachgt
ltxslfor-each select"XPath"gt ltxslvalue-of
select"ragione sociale"gt lt/xsdfor-eachgt
21Ordinamento
- Qualora volessimo ordinare il contenuto secondo
un qualche valore prima di scriverlo in output
possiamo far riferimento allistruzione sort - Select
- indica unespressione 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
ltxslsort select"Espressione" data-type"textnum
ber" order"ascendingdescending" /gt
22Conclusione
- 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
23Riferimenti
- Deitel et al, XML Corso di programmazione, Apogeo
- Chris Bates, XML in theory and Practice, Wiley
- XML Path Language (XPath) Version 1.0
- W3C Recommendation 16 November 1999
- http//www.w3.org/TR/xpath
- W3Schools Online Web Tutorials
- http//www.w3schools.com/xsl/default.asp
24Ci sono domande?