XSLT Trasformazioni XSL Ing. Luca Sabatucci
XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono trasformare i documenti di dati XML in altri formati e strutture, come i file HyperText Markup Language (HTML). Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono trasformare i documenti di dati XML in altri formati e strutture, come i file HyperText Markup Language (HTML). Lo strumento utilizzato per definire queste trasformazioni è denominato Extensible Stylesheet Language Transformations (XSLT). Lo strumento utilizzato per definire queste trasformazioni è denominato Extensible Stylesheet Language Transformations (XSLT).
Foglio di stile Un insieme di regole che permettono di trasformare un documento in un altro documento si chiama foglio di stile Un insieme di regole che permettono di trasformare un documento in un altro documento si chiama foglio di stile Un foglio di stile si definisce mediante lXSL Un foglio di stile si definisce mediante lXSL XSL è una applicazione XML XSL è una applicazione XML
Processo di trasformazione La trasformazione avviene tramite un processore chiamato elaboratore XSLT La trasformazione avviene tramite un processore chiamato elaboratore XSLT
Applicazioni pratiche Web Web Un documento XML può essere trasformato in una pagina HTML in modo da essere visualizzato tramite browser Web Un documento XML può essere trasformato in una pagina HTML in modo da essere visualizzato tramite browser Web XSL-FO XSL-FO Un documento può essere trasformato in formato FO (Formatting Object) che rappresenta una applicazione di formattazione precisa dei documenti narrativi Un documento può essere trasformato in formato FO (Formatting Object) che rappresenta una applicazione di formattazione precisa dei documenti narrativi
Namespace XSL XSL è una applicazione XML XSL è una applicazione XML XSL definisce un proprio DTD e un Namespace XSL definisce un proprio DTD e un Namespace LURL da usare per il namespace è LURL da usare per il namespace è xmlns:xsl=" Il namespace viene generalmente associato al prefisso xsl Il namespace viene generalmente associato al prefisso xsl
xsl:stylesheet Lelemento radice di un documento XSL è xsl:stylesheet Lelemento radice di un documento XSL è xsl:stylesheet Allinterno dellelemento xsl:stylesheet si mettono le regole di trasformazione Allinterno dellelemento xsl:stylesheet si mettono le regole di trasformazione Il più semplice foglio di stile XSL prevede che non vi siano regole di trasformazione Il più semplice foglio di stile XSL prevede che non vi siano regole di trasformazione
Catalogo persone Luca Sabatucci Palermo Ingegnere Mario Rossi …
La più semplice trasformazione Se si trasforma il file XML catalogo persone con un foglio di stile vuoto, come quello mostrato di seguito… Se si trasforma il file XML catalogo persone con un foglio di stile vuoto, come quello mostrato di seguito…
Output LucaSabatucci PalermoIngegnere MarioRossi471982Milano Si ottiene loutput mostrato di seguito: Si ottiene loutput mostrato di seguito:
Foglio di stile vuoto In assenza di regole la trasformazione è la seguente: In assenza di regole la trasformazione è la seguente: Viene prelevato il testo interno agli elementi del documento di input Viene prelevato il testo interno agli elementi del documento di input Viene quindi riprodotto il contenuto ma non il markup. Viene quindi riprodotto il contenuto ma non il markup. In questo caso il risultato non è un documento XML In questo caso il risultato non è un documento XML
Modelli e regole Per controllare il modo in cui viene generato loutput in base allinput bisogna aggiungere dei modelli allinterno del foglio di stile Per controllare il modo in cui viene generato loutput in base allinput bisogna aggiungere dei modelli allinterno del foglio di stile Ogni modello è rappresentato da un elemento xsl:template, dotato di un attributo match Ogni modello è rappresentato da un elemento xsl:template, dotato di un attributo match xsl:template definisce una regola di trasformazione xsl:template definisce una regola di trasformazione match identifica il tipo di input che attiva la regola match identifica il tipo di input che attiva la regola esempio: persona Una persona esempio: persona Una persona
Esempio Di seguito viene mostrata la regola corrispondente a: Di seguito viene mostrata la regola corrispondente a: persona Una persona persona Una persona Una persona Output: Una personaUna persona
Associamo uno stile HTML E possibile fare in modo che loutput sia un documento XML ben formato E possibile fare in modo che loutput sia un documento XML ben formato Una persona
Output Output XML Output XML Output HTML (Internet Explorer) Output HTML (Internet Explorer) Una persona Una persona Una persona
Valore di un elemento Lelemento xsl:value-of permette di selezionare il contenuto di un elemento di input e inserirlo come output Lelemento xsl:value-of permette di selezionare il contenuto di un elemento di input e inserirlo come output xsl:value-of si può trovare soltanto allinterno di un elemento xsl:template xsl:value-of si può trovare soltanto allinterno di un elemento xsl:template Lattributo select serve a selezionare il valore che deve essere prelevato Lattributo select serve a selezionare il valore che deve essere prelevato
Esempio Di seguito viene riportato un esempio di elemento xsl:value-of: Di seguito viene riportato un esempio di elemento xsl:value-of: Una persona:
Output Output XML Output XML Output HTML (Internet Explorer) Output HTML (Internet Explorer) Una persona: Luca Una persona: Mario Una persona: Luca Una persona: Mario
select Nellesempio mostrato lattributo select di xsl:value-of era impostato come di seguito: Nellesempio mostrato lattributo select di xsl:value-of era impostato come di seguito: select="nome Dove nome è lattributo del quale si vuole estrarre linformazione. Più in generale il valore di select deve essere una espressione XPath XPath sarà argomento delle prossime lezioni.
Applicazione forzata di modelli Lutilizzo della regola xsl:apply-templates permette di stabilire quali modelli devono essere applicati e in che ordine Lutilizzo della regola xsl:apply-templates permette di stabilire quali modelli devono essere applicati e in che ordine xsl:apply-templates possiede un attributo select che specifica una regola di tipo xsl:template xsl:apply-templates possiede un attributo select che specifica una regola di tipo xsl:template
Esempio Nome: Cognome:
select A differenza del primo esempio in cui lattributo select di xsl:value-of era impostato come: A differenza del primo esempio in cui lattributo select di xsl:value-of era impostato come: select="nome In questo esempio si ha: select="text() Dove text() è una espressione XPath che sta ad indicare che dellelemento corrente (nellesempio si trattava del nome o del cognome) deve essere prelevato il testo in esso contenuto.
Output Output XML Output XML Cognome: Sabatucci Nome: Luca Cognome: Rossi Nome: Mario
Output Output HTML (Internet Explorer) Output HTML (Internet Explorer) Cognome: Sabatucci Nome: Luca Cognome: Rossi Nome: Mario
Intestazione HTML Catalogo persone
Output XML Catalogo persone Cognome: Sabatucci Nome: Luca Cognome: Rossi Nome: Mario
Creazione di attributi
Modelli XSLT di default </xsl:template> Identifica il nodo radice del doc e tutti i nodi degli elementi. Applica i modelli ai loro nodi child Identifica i nodi di testo e i nodi degli attributi e genera loutput dei loro valori Identifica i nodi di istruzione di elaborazione e i nodi dei commenti ma non svolge alcuna azione su di essi
Sorgente XML <sports> <id>243</id><para> More popular among commonwealth nations. More popular among commonwealth nations. </game> <id>431</id><para> More popular in America. More popular in America. </game> <id>123</id><para> Most popular sport in the world. Most popular sport in the world.</para></game></sports>
La trasformazione XSL <xsl:stylesheet version = "1.0" xmlns:xsl = " xmlns:xsl = "
Il risultato della trasformazione <sports> <comment> More popular among commonwealth nations. More popular among commonwealth nations. </cricket> <comment> More popular in America. More popular in America. </baseball> <comment> Most popular sport in the world. Most popular sport in the world. </soccer></sports>
Iterazioni e ordinamento
E possibile elaborare in modo iterativo I nodi selezionati con unespressione XPath. E possibile elaborare in modo iterativo I nodi selezionati con unespressione XPath. Sui nodi si può anche operare un ordinamento Sui nodi si può anche operare un ordinamento
File dati XML Deitel's XML Primer Deitel's XML Primer <author><firstName>Paul</firstName><lastName>Deitel</lastName></author><chapters> Welcome Welcome Easy XML Easy XML XML Elements? XML Elements? Entities Entities </chapters> </book>
La trasformazione XSLT - 1 <xsl:stylesheet version = "1.0" xmlns:xsl = " xmlns:xsl = " ISBN - ISBN - Continua
La trasformazione XSLT - 2 by, by, Preface Preface ( ( pages ) pages )
La trasformazione XSLT - 3 Chapter Chapter ( ( pages ) pages )
La trasformazione XSLT - 4 Appendix Appendix ( ( pages ) pages ) </xsl:stylesheet>
Il risultato della trasformazione
<html><head> ISBN X - Deitel's XML Primer ISBN X - Deitel's XML Primer </head> Deitel's XML Primer Deitel's XML Primer by Deitel, Paul by Deitel, Paul <tr> Preface 1 Preface 1 Welcome (2 pages ) Welcome (2 pages ) </tr><tr> Chapter 1 Chapter 1 Easy XML (4 pages ) Easy XML (4 pages ) </tr>
Il risultato della trasformazione <tr> Chapter 2 Chapter 2 XML Elements? (2 pages ) XML Elements? (2 pages ) </tr><tr> Appendix 1 Appendix 1 Entities (9 pages ) Entities (9 pages ) </tr></table></body></html>
Istruzioni Condizionali
Il file dati XML <planner> Doctor's appointment Doctor's appointment Physics class at BH291C Physics class at BH291C </date> Independence Day Independence Day </date> General Meeting in room 32-A General Meeting in room 32-A </date>
Il file dati XML Party at Joe's Party at Joe's </date> Financial Meeting in room 14-C Financial Meeting in room 14-C </date></year></planner>
La trasformazione XSL <xsl:stylesheet version = "1.0" xmlns:xsl = " xmlns:xsl = " Appointments Appointments
Year: Year: <xsl:sort select = order = "ascending" <xsl:sort select = order = "ascending" data-type = "number"/> data-type = "number"/> Day: Day: / /
<xsl:when test = > '0500' < '1200'"> Morning ( ): <xsl:when test = > '1200' < '1700'"> Afternoon ( ): <xsl:when test = > '1200' < '1700'"> Evening ( ): <xsl:when test = > '1200' < '1700'"> Night ( ): Entire day: Lelemento choose si usa per scegliere tra varie opzioni (tipo switch del Java)
n/a n/a </xsl:stylesheet> Lelemento choose si usa per specificare una sola condizione
Il risultato
<html><body> Appointments Appointments <strong>Year:</strong>2000<br> Day: 4/7 Day: 4/7 Entire day: Independence Day Entire day: Independence Day Day: 15/7 Day: 15/7 Afternoon (1430):Doctor's appointment Afternoon (1430):Doctor's appointment Day: 15/7 Day: 15/7 Afternoon (1620):Physics class at BH291C Afternoon (1620):Physics class at BH291C
Il risultato Day: 20/7 Day: 20/7 Morning (0900):General Meeting in room 32-A Morning (0900):General Meeting in room 32-A Day: 20/7 Day: 20/7 Entire day:Party at Joe's Entire day:Party at Joe's Day: 20/7 Day: 20/7 Afternoon (1300):Financial Meeting in room 14-C Afternoon (1300):Financial Meeting in room 14-C </body></html>
Copiare i nodi
XSLT permette di copiare i nodi dal file dati XML di origine in quello creato con la trasformazione XSLT permette di copiare i nodi dal file dati XML di origine in quello creato con la trasformazione Ciò si fa con lelemento copy che copia il nodo di contesto Ciò si fa con lelemento copy che copia il nodo di contesto
Il file dati XML <myMessage> Welcome to XSLT! Welcome to XSLT! </myMessage>
XSLT <xsl:stylesheet version = "1.0" xmlns:xsl = " xmlns:xsl = " How about 'Hi World' for a change! How about 'Hi World' for a change! </xsl:stylesheet>
Il risultato <myMessage><message> How about 'Hi World' for a change! How about 'Hi World' for a change!</message></myMessage>
Esercizi
Esercizio 1 Scrivere un XSLT che trasformi il documento della figura in quello della figura seguenti Scrivere un XSLT che trasformi il documento della figura in quello della figura seguenti
Esercizio 2 Fare il viceversa (trasformare il doc di fig in quello di fig ) Fare il viceversa (trasformare il doc di fig in quello di fig )
Esercizio 3 Trasformare in HTML i due documenti precedenti Trasformare in HTML i due documenti precedenti
Esercizio 4 Trasformare il file planner XML nella struttura mostrata in figura Trasformare il file planner XML nella struttura mostrata in figura 12.30
Il file dati PLANNER.XML <planner> Doctor's appointment Doctor's appointment Physics class at BH291C Physics class at BH291C </date> Independence Day Independence Day </date> General Meeting in room 32-A General Meeting in room 32-A </date>
Il file dati PLANNER.XML Party at Joe's Party at Joe's </date> Financial Meeting in room 14-C Financial Meeting in room 14-C </date></year></planner>
Figura 12.30