66
XSLT XSLT Trasformazioni XSL Trasformazioni XSL Ing. Luca Sabatucci

XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Embed Size (px)

Citation preview

Page 1: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

XSLTXSLT

Trasformazioni XSLTrasformazioni XSL

Ing. Luca Sabatucci

Page 2: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

XSLTXSLT

Uno dei vantaggi principali nell'utilizzo Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la dell'Extensible Markup Language è la facilità con cui si possono trasformare i facilità con cui si possono trasformare i documenti di dati XML in altri formati e documenti di dati XML in altri formati e strutture, come i file HyperText Markup strutture, come i file HyperText Markup Language (HTML). Language (HTML).

Lo strumento utilizzato per definire Lo strumento utilizzato per definire queste trasformazioni è denominato queste trasformazioni è denominato Extensible Stylesheet Language Extensible Stylesheet Language Transformations (XSLT).Transformations (XSLT).

Page 3: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Foglio di stileFoglio di stile

Un insieme di regole che permettono Un insieme di regole che permettono di trasformare un documento in un di trasformare un documento in un altro documento si chiama foglio di altro documento si chiama foglio di stilestile

Un foglio di stile si definisce Un foglio di stile si definisce mediante l’XSLmediante l’XSL

XSL è una applicazione XMLXSL è una applicazione XML

Page 4: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Processo di Processo di trasformazionetrasformazione

La trasformazione avviene tramite un La trasformazione avviene tramite un processore chiamato elaboratore XSLTprocessore chiamato elaboratore XSLT

Page 5: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Applicazioni praticheApplicazioni pratiche

WebWeb Un documento XML può essere Un documento XML può essere

trasformato in una pagina HTML in modo trasformato in una pagina HTML in modo da essere visualizzato tramite browser Webda essere visualizzato tramite browser Web

XSL-FOXSL-FO Un documento può essere trasformato in Un documento può essere trasformato in

formato FO (Formatting Object) che formato FO (Formatting Object) che rappresenta una applicazione di rappresenta una applicazione di formattazione precisa dei documenti formattazione precisa dei documenti narrativinarrativi

Page 6: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Namespace XSLNamespace XSL

XSL è una applicazione XMLXSL è una applicazione XML XSL definisce un proprio DTD e un XSL definisce un proprio DTD e un

NamespaceNamespace L’URL da usare per il namespace èL’URL da usare per il namespace è

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

Il namespace viene generalmente Il namespace viene generalmente associato al prefisso ‘xsl’associato al prefisso ‘xsl’

Page 7: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

xsl:stylesheetxsl:stylesheet

L’elemento radice di un documento L’elemento radice di un documento XSL è xsl:stylesheetXSL è xsl:stylesheet

All’interno dell’elemento All’interno dell’elemento xsl:stylesheet si mettono le regole di xsl:stylesheet si mettono le regole di trasformazionetrasformazione

Il più semplice foglio di stile XSL Il più semplice foglio di stile XSL prevede che non vi siano regole di prevede che non vi siano regole di trasformazionetrasformazione

Page 8: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Catalogo personeCatalogo persone<catalogo>

<persona><nome>Luca</nome><cognome>Sabatucci</cognome><origine>

<data_di_nascita><giorno>16</giorno><mese>2</mese><anno>1976</anno>

</data_di_nascita><luogo_di_nascita>Palermo</

luogo_di_nascita></origine><professione da="Luglio

2002">Ingegnere</professione></persona><persona>

<nome>Mario</nome><cognome>Rossi</cognome><origine>

<data_di_nascita><giorno>4</giorno><mese>7</mese><anno>1982</anno>

Page 9: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

La più semplice La più semplice trasformazionetrasformazione

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"/>

Se si trasforma il file XML catalogo Se si trasforma il file XML catalogo persone con un foglio di stile vuoto, persone con un foglio di stile vuoto, come quello mostrato di seguito…come quello mostrato di seguito…

Page 10: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

OutputOutput

LucaSabatucci1621976PalermoIngegnereMarioRossi471982Milano

Si ottiene l’output mostrato di seguito:Si ottiene l’output mostrato di seguito:

Page 11: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Foglio di stile vuotoFoglio di stile vuoto

In assenza di regole la In assenza di regole la trasformazione è la seguente:trasformazione è la seguente: Viene prelevato il testo interno agli Viene prelevato il testo interno agli

elementi del documento di inputelementi del documento di input Viene quindi riprodotto il contenuto ma Viene quindi riprodotto il contenuto ma

non il markup.non il markup. In questo caso il risultato non è un In questo caso il risultato non è un

documento XMLdocumento XML

Page 12: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Modelli e regoleModelli e regole

Per controllare il modo in cui viene generato Per controllare il modo in cui viene generato l’output in base all’input bisogna aggiungere l’output in base all’input bisogna aggiungere dei modelli all’interno del foglio di stiledei modelli all’interno del foglio di stile

Ogni modello è rappresentato da un Ogni modello è rappresentato da un elemento xsl:template, dotato di un attributo elemento xsl:template, dotato di un attributo matchmatch xsl:template definisce una regola di xsl:template definisce una regola di

trasformazionetrasformazione match identifica il tipo di input che attiva la match identifica il tipo di input che attiva la

regolaregola esempio: persona esempio: persona “Una persona” “Una persona”

Page 13: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

EsempioEsempio

Di seguito viene mostrata la regola Di seguito viene mostrata la regola corrispondente a:corrispondente a: persona persona “Una persona” “Una persona”

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="persona">Una persona</xsl:template></xsl:stylesheet>

Output:Output:Una personaUna personaUna personaUna persona

Page 14: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Associamo uno stile Associamo uno stile HTMLHTML

E’ possibile fare in modo che l’output E’ possibile fare in modo che l’output sia un documento XML ben formatosia un documento XML ben formato

<xsl:stylesheet version="1.0" xmlns:xsl=“…">

<xsl:template match="persona"><p>Una persona</p>

</xsl:template></xsl:stylesheet>

Page 15: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

OutputOutput

Output XMLOutput XML

Output HTML (Internet Explorer)Output HTML (Internet Explorer)

<p>Una persona</p><p>Una persona</p>

Una personaUna persona

Page 16: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Valore di un elementoValore di un elemento

L’elemento xsl:value-of permette di L’elemento xsl:value-of permette di selezionare il contenuto di un selezionare il contenuto di un elemento di input e inserirlo come elemento di input e inserirlo come outputoutput

xsl:value-of si può trovare soltanto xsl:value-of si può trovare soltanto all’interno di un elemento all’interno di un elemento xsl:templatexsl:template

L’attributo select serve a selezionare L’attributo select serve a selezionare il valore che deve essere prelevatoil valore che deve essere prelevato

Page 17: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

EsempioEsempio

Di seguito viene riportato un Di seguito viene riportato un esempio di elemento xsl:value-of:esempio di elemento xsl:value-of:

<xsl:stylesheet version="1.0" xmlns:xsl=“…"><xsl:template match="persona">

<p>Una persona: <xsl:value-of select="nome"/></p>

</xsl:template></xsl:stylesheet>

Page 18: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

OutputOutput

Output XMLOutput XML

Output HTML (Internet Explorer)Output HTML (Internet Explorer)

<p>Una persona: Luca</p><p>Una persona: Mario</p>

Una persona: LucaUna persona: Mario

Page 19: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

selectselect

Nell’esempio mostrato l’attributo select Nell’esempio mostrato l’attributo select di xsl:value-of era impostato come di di xsl:value-of era impostato come di seguito:seguito: select="nome“ Dove “nome” è l’attributo del quale si vuole

estrarre l’informazione. Più in generale il valore di select deve

essere una espressione XPath XPath sarà argomento delle prossime

lezioni.

Page 20: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Applicazione forzata di Applicazione forzata di modellimodelli

L’utilizzo della regola xsl:apply-L’utilizzo della regola xsl:apply-templates permette di stabilire quali templates permette di stabilire quali modelli devono essere applicati e in modelli devono essere applicati e in che ordineche ordine

xsl:apply-templates possiede un xsl:apply-templates possiede un attributo select che specifica una attributo select che specifica una regola di tipo xsl:templateregola di tipo xsl:template

Page 21: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

EsempioEsempio<xsl:stylesheet version="1.0" xmlns:xsl=“…">

<xsl:template match="persona"><p>

<xsl:apply-templates select="cognome"/>

<xsl:apply-templates select="nome"/>

</p></xsl:template><xsl:template match="nome">

Nome: <xsl:value-of select="text()"/><br/>

</xsl:template><xsl:template match="cognome">

Cognome: <xsl:value-of select="text()"/><br/>

</xsl:template></xsl:stylesheet>

Page 22: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

selectselect

A differenza del primo esempio in cui A differenza del primo esempio in cui l’attributo select di xsl:value-of era l’attributo select di xsl:value-of era impostato come:impostato come: select="nome“

In questo esempio si ha: select="text()” Dove “text()” è una espressione XPath che sta

ad indicare che dell’elemento corrente (nell’esempio si trattava del nome o del cognome) deve essere prelevato il testo in esso contenuto.

Page 23: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

OutputOutput

Output XMLOutput XML

<p>Cognome: Sabatucci<br/>Nome: Luca<br/>

</p><p>

Cognome: Rossi<br/>Nome: Mario<br/>

</p>

Page 24: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

OutputOutput

Output HTML (Internet Explorer)Output HTML (Internet Explorer)

Cognome: SabatucciNome: Luca

Cognome: RossiNome: Mario

Page 25: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Intestazione HTMLIntestazione HTML<xsl:template match="catalogo">

<html><head>

<title>Catalogo persone</title></head><body>

<xsl:apply-templates select="persona"/></body>

</html></xsl:template>

Page 26: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Output XMLOutput XML<html>

<head><title>Catalogo

persone</title></head><body>

<p>Cognome:

Sabatucci<br/>Nome: Luca<br/>

</p><p>

Cognome: Rossi<br/>Nome: Mario<br/>

</p></body>

</html>

Page 27: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Creazione di Creazione di attributiattributi

Page 28: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Modelli XSLT di defaultModelli XSLT di default<xsl:template match = "/ | *"><xsl:template match = "/ | *"> <xsl:apply-templates/><xsl:apply-templates/></xsl:template></xsl:template>

Identifica il nodo radice del doc e tutti i nodi degli Identifica il nodo radice del doc e tutti i nodi degli elementi. Applica i modelli ai loro nodi childelementi. Applica i modelli ai loro nodi child

<xsl:template match = “text() | @*"><xsl:template match = “text() | @*"> <xsl:value-of select =“.”/><xsl:value-of select =“.”/> </xsl:template></xsl:template>

Identifica i nodi di testo e i nodi degli attributi (@) Identifica i nodi di testo e i nodi degli attributi (@) e genera l’output dei loro valorie genera l’output dei loro valori

<xsl:template match = “processing-instruction() | <xsl:template match = “processing-instruction() | comment()“/>comment()“/>

Identifica i nodi di istruzione di elaborazione e i Identifica i nodi di istruzione di elaborazione e i nodi dei commenti ma non svolge alcuna azione nodi dei commenti ma non svolge alcuna azione su di essisu di essi

Page 29: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Sorgente XMLSorgente XML<?xml version="1.0"?><?xml version="1.0"?><!-- Fig. 12.4 : games.xml --><!-- Fig. 12.4 : games.xml --><!-- Sports Database --><!-- Sports Database --><sports><sports>

<game title="cricket"><game title="cricket"><id>243</id><id>243</id><para><para>

More popular among commonwealth nations.More popular among commonwealth nations. </para></para>

</game></game><game title="baseball"><game title="baseball">

<id>431</id><id>431</id><para><para>

More popular in America.More popular in America. </para></para>

</game></game><game title="soccer"><game title="soccer">

<id>123</id><id>123</id><para><para> Most popular sport in the world.Most popular sport in the world.</para></para>

</game></game></sports></sports>

Page 30: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

La trasformazione XSLLa trasformazione XSL<?xml version = "1.0"?><?xml version = "1.0"?><xsl:stylesheet version = <xsl:stylesheet version =

"1.0" "1.0" xmlns:xsl = xmlns:xsl =

"http://www.w3.org/"http://www.w3.org/1999/XSL/1999/XSL/

Transform">Transform">

<xsl:template match = "/"><xsl:template match = "/"> <xsl:apply-templates/><xsl:apply-templates/> </xsl:template></xsl:template>

<xsl:template match = <xsl:template match = "sports">"sports">

<sports><sports> <xsl:apply-templates/><xsl:apply-templates/> </sports></sports> </xsl:template></xsl:template>

<xsl:template match = <xsl:template match = "game">"game">

<xsl:element name = <xsl:element name = "{@title}">"{@title}">

<xsl:attribute name = <xsl:attribute name = "id">"id">

<xsl:value-of select = <xsl:value-of select = "id"/>"id"/>

</xsl:attribute></xsl:attribute> <comment><comment> <xsl:value-of select = <xsl:value-of select =

"para"/>"para"/> </comment></comment> </xsl:element> </xsl:element> </xsl:template></xsl:template>

</xsl:stylesheet></xsl:stylesheet>

Page 31: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Il risultato della Il risultato della trasformazionetrasformazione

<?xml version="1.0" encoding="UTF-8"?><?xml version="1.0" encoding="UTF-8"?><sports><sports>

<cricket id="243"><cricket id="243"><comment><comment>

More popular among commonwealth nations.More popular among commonwealth nations. </comment></comment>

</cricket></cricket><baseball id="431"><baseball id="431">

<comment><comment> More popular in America.More popular in America. </comment></comment>

</baseball></baseball><soccer id="123"><soccer id="123">

<comment><comment> Most popular sport in the world.Most popular sport in the world. </comment></comment>

</soccer></soccer></sports></sports>

Page 32: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Iterazioni e Iterazioni e ordinamentoordinamento

Page 33: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Iterazioni e ordinamentoIterazioni e ordinamento

E’ possibile elaborare in modo E’ possibile elaborare in modo iterativo I nodi selezionati con iterativo I nodi selezionati con un’espressione XPath. un’espressione XPath.

Sui nodi si può anche operare un Sui nodi si può anche operare un ordinamentoordinamento

Page 34: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

File dati XMLFile dati XML<?xml version="1.0"?><?xml version="1.0"?><?xml:stylesheet type = "text/xsl" href = "usage.xsl"?><?xml:stylesheet type = "text/xsl" href = "usage.xsl"?><book isbn="999-99999-9-X"><book isbn="999-99999-9-X">

<title>Deitel&apos;s XML Primer</title><title>Deitel&apos;s XML Primer</title><author><author>

<firstName>Paul</firstName><firstName>Paul</firstName><lastName>Deitel</lastName><lastName>Deitel</lastName>

</author></author><chapters><chapters>

<preface num="1" pages="2">Welcome</preface><preface num="1" pages="2">Welcome</preface><chapter num="1" pages="4">Easy <chapter num="1" pages="4">Easy

XML</chapter>XML</chapter><chapter num="2" pages="2">XML <chapter num="2" pages="2">XML

Elements?</chapter>Elements?</chapter><appendix num="1" <appendix num="1"

pages="9">Entities</appendix>pages="9">Entities</appendix></chapters></chapters><media type="CD"/><media type="CD"/>

</book></book>

Page 35: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

La trasformazione XSLT - La trasformazione XSLT - 11

<?xml version = "1.0"?><?xml version = "1.0"?><xsl:stylesheet version = "1.0" <xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">

<xsl:template match = "/"><xsl:template match = "/"> <html><html> <xsl:apply-templates/><xsl:apply-templates/> </html></html> </xsl:template></xsl:template> <xsl:template match = "book"><xsl:template match = "book"> <head><head> <title>ISBN <xsl:value-of select = "@isbn"/> - <title>ISBN <xsl:value-of select = "@isbn"/> - <xsl:value-of select = "title"/></title><xsl:value-of select = "title"/></title> </head></head>

Continua

Page 36: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

La trasformazione XSLT - 2La trasformazione XSLT - 2 <body bgcolor = "white"><body bgcolor = "white"> <h1><xsl:value-of select = "title"/></h1><h1><xsl:value-of select = "title"/></h1> <h2>by <xsl:value-of select = "author/lastName"/>,<h2>by <xsl:value-of select = "author/lastName"/>, <xsl:value-of select = "author/firstName"/></h2><xsl:value-of select = "author/firstName"/></h2>

<table border = "1"><table border = "1"> <xsl:<xsl:for-eachfor-each select = "chapters/preface"> select = "chapters/preface"> <xsl:<xsl:sortsort select = "@num" order = select = "@num" order =

"ascending"/>"ascending"/> <tr><tr> <td align = "right"><td align = "right"> Preface <xsl:value-of select = "@num"/>Preface <xsl:value-of select = "@num"/> </td></td> <td><td> <xsl:value-of select = "."/> (<xsl:value-of select = "."/> ( <xsl:value-of select = "@pages"/> pages )<xsl:value-of select = "@pages"/> pages ) </td></td> </tr></tr> </xsl:for-each></xsl:for-each>

Page 37: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

La trasformazione XSLT - La trasformazione XSLT - 33

<xsl:for-each select = "chapters/chapter"><xsl:for-each select = "chapters/chapter"> <xsl:sort select = "@num" order = <xsl:sort select = "@num" order =

"ascending"/>"ascending"/> <tr><tr> <td align = "right"><td align = "right"> Chapter <xsl:value-of select = "@num"/>Chapter <xsl:value-of select = "@num"/> </td></td>

<td><td> <xsl:value-of select = "."/> (<xsl:value-of select = "."/> ( <xsl:value-of select = "@pages"/> pages )<xsl:value-of select = "@pages"/> pages ) </td></td> </tr></tr> </xsl:for-each></xsl:for-each>

Page 38: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

La trasformazione XSLT - La trasformazione XSLT - 44

<xsl:for-each select = "chapters/appendix"><xsl:for-each select = "chapters/appendix"> <xsl:sort select = "@num" order = "ascending"/><xsl:sort select = "@num" order = "ascending"/> <tr><tr> <td align = "right"><td align = "right"> Appendix <xsl:value-of select = "@num"/>Appendix <xsl:value-of select = "@num"/> </td></td> <td><td> <xsl:value-of select = "."/> (<xsl:value-of select = "."/> ( <xsl:value-of select = "@pages"/> pages )<xsl:value-of select = "@pages"/> pages ) </td></td> </tr></tr> </xsl:for-each></xsl:for-each> </table></table> </body></body> </xsl:template></xsl:template>

</xsl:stylesheet></xsl:stylesheet>

Page 39: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Il risultato della Il risultato della trasformazionetrasformazione

Page 40: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Il risultato della Il risultato della trasformazionetrasformazione<html><html>

<head><head><META http-equiv="Content-Type" <META http-equiv="Content-Type"

content="text/html; charset=UTF-16">content="text/html; charset=UTF-16"><title>ISBN 999-99999-9-X - Deitel's XML <title>ISBN 999-99999-9-X - Deitel's XML

Primer</title>Primer</title></head></head><body bgcolor="white"><body bgcolor="white">

<h1>Deitel's XML Primer</h1><h1>Deitel's XML Primer</h1><h2>by Deitel, Paul</h2><h2>by Deitel, Paul</h2><table border="1"><table border="1">

<tr><tr><td align="right"> Preface 1</td><td align="right"> Preface 1</td><td>Welcome (2 pages )</td><td>Welcome (2 pages )</td>

</tr></tr><tr><tr>

<td align="right">Chapter 1</td><td align="right">Chapter 1</td><td>Easy XML (4 pages )</td><td>Easy XML (4 pages )</td>

</tr></tr>

Page 41: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Il risultato della Il risultato della trasformazionetrasformazione

<tr><tr><td align="right">Chapter <td align="right">Chapter

2</td>2</td><td>XML Elements? (2 pages <td>XML Elements? (2 pages

)</td>)</td></tr></tr><tr><tr>

<td align="right">Appendix <td align="right">Appendix 1</td>1</td>

<td>Entities (9 pages )</td><td>Entities (9 pages )</td></tr></tr>

</table></table></body></body>

</html></html>

Page 42: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Istruzioni Istruzioni CondizionaliCondizionali

Page 43: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Il file dati XMLIl file dati XML<?xml version="1.0"?><?xml version="1.0"?><!-- Fig. 5.9 : planner.xml --><!-- Fig. 5.9 : planner.xml --><!-- Day Planner XML document --><!-- Day Planner XML document --><planner><planner>

<year value="2000"><year value="2000"><date month="7" day="15"><date month="7" day="15">

<note time="1430">Doctor&apos;s <note time="1430">Doctor&apos;s appointment</note>appointment</note>

<note time="1620">Physics class at <note time="1620">Physics class at BH291C</note>BH291C</note>

</date></date><date month="7" day="4"><date month="7" day="4">

<note>Independence Day</note><note>Independence Day</note></date></date><date month="7" day="20"><date month="7" day="20"> <note time="0900">General Meeting in room 32-<note time="0900">General Meeting in room 32-

A</note>A</note></date></date>

Page 44: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Il file dati XMLIl file dati XML<date month="7" day="20"><date month="7" day="20"> <note time="1900">Party at <note time="1900">Party at

Joe&apos;s</note>Joe&apos;s</note></date></date><date month="7" day="20"><date month="7" day="20"> <note time="1300">Financial Meeting in <note time="1300">Financial Meeting in

room 14-C</note>room 14-C</note></date></date>

</year></year></planner></planner>

Page 45: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

La trasformazione XSLLa trasformazione XSL<?xml version = "1.0"?><?xml version = "1.0"?>

<!-- Fig. 12.11 : conditional.xsl --><!-- Fig. 12.11 : conditional.xsl -->

<!-- xsl:choose, xsl:when, and xsl:otherwise --><!-- xsl:choose, xsl:when, and xsl:otherwise -->

<xsl:stylesheet version = "1.0" <xsl:stylesheet version = "1.0"

xmlns:xsl = xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">"http://www.w3.org/1999/XSL/Transform">

<xsl:template match = "/"><xsl:template match = "/">

<html><html>

<body><body>

AppointmentsAppointments

<br/><br/>

<xsl:apply-templates select = "planner/year"/><xsl:apply-templates select = "planner/year"/>

</body></body>

</html></html>

</xsl:template></xsl:template>

Page 46: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

<xsl:template match = "year"><xsl:template match = "year"> <strong>Year:</strong><strong>Year:</strong> <xsl:value-of select = "@value"/><xsl:value-of select = "@value"/> <br/><br/> <xsl:for-each select = "date/note"><xsl:for-each select = "date/note"> <xsl:sort select = "../@day" order = <xsl:sort select = "../@day" order =

"ascending""ascending" data-type = "number"/>data-type = "number"/> <strong><strong> Day: Day: <xsl:value-of select = "../@day"/>/<xsl:value-of select = "../@day"/>/ <xsl:value-of select = "../@month"/><xsl:value-of select = "../@month"/> </strong></strong> <br/><br/>

Page 47: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

<xsl:choose> <xsl:when test = "@time &gt; '0500' and @time &lt; '1200'"> Morning (<xsl:value-of select = "@time"/>):<xsl:when>

<xsl:when test = "@time &gt; '1200' and @time &lt; '1700'"> Afternoon (<xsl:value-of select = "@time"/>):</xsl:when>

<xsl:when test = "@time &gt; '1200' and @time &lt; '1700'"> Evening (<xsl:value-of select = "@time"/>):<xsl:when> <xsl:when test = "@time &gt; '1200' and @time &lt; '1700'"> Night (<xsl:value-of select = "@time"/>):<xsl:when>

<xsl:otherwise> Entire day: </xsl:otherwise></xsl:choose>

L’elemento choose si usa per scegliere tra varie opzioni (tipo

switch del Java)

Page 48: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

<xsl:value-of select = "."/><xsl:value-of select = "."/>

<xsl:if test = ". = ''"><xsl:if test = ". = ''"> n/an/a </xsl:if></xsl:if>

<br/><br/> </xsl:for-each></xsl:for-each>

</xsl:template></xsl:template>

</xsl:stylesheet></xsl:stylesheet>

L’elemento choose si usa per specificare una

sola condizione

Page 49: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Il risultatoIl risultato

Page 50: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Il risultatoIl risultato<html><html><body><body> Appointments<br>Appointments<br>

<strong>Year:</strong>2000<br><strong>Year:</strong>2000<br>

<strong>Day: 4/7</strong><br><strong>Day: 4/7</strong><br> Entire day: Independence Day<br>Entire day: Independence Day<br>

<strong>Day: 15/7</strong><br><strong>Day: 15/7</strong><br> Afternoon (1430):Doctor's Afternoon (1430):Doctor's

appointment<br>appointment<br>

<strong>Day: 15/7</strong><br><strong>Day: 15/7</strong><br> Afternoon (1620):Physics class at BH291C<br>Afternoon (1620):Physics class at BH291C<br>

Page 51: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Il risultatoIl risultato

<strong>Day: 20/7</strong><br><strong>Day: 20/7</strong><br> Morning (0900):General Meeting in room Morning (0900):General Meeting in room

32-A<br>32-A<br>

<strong>Day: 20/7</strong><br><strong>Day: 20/7</strong><br> Entire day:Party at Joe's<br>Entire day:Party at Joe's<br>

<strong>Day: 20/7</strong><br><strong>Day: 20/7</strong><br> Afternoon (1300):Financial Meeting in room Afternoon (1300):Financial Meeting in room

14-C<br>14-C<br>

</body></body></html></html>

Page 52: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Copiare i nodiCopiare i nodi

Page 53: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Copiare i nodiCopiare i nodi

XSLT permette di copiare i nodi dal XSLT permette di copiare i nodi dal file dati XML di origine in quello file dati XML di origine in quello creato con la trasformazionecreato con la trasformazione

Ciò si fa con l’elemento Ciò si fa con l’elemento copy copy che che copia il nodo di contestocopia il nodo di contesto

Page 54: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Il file dati XMLIl file dati XML

<?xml version="1.0"?><?xml version="1.0"?>

<?xml:stylesheet type = "text/xsl" href = <?xml:stylesheet type = "text/xsl" href = "copyIntro.xsl"?>"copyIntro.xsl"?>

<myMessage><myMessage>

<message>Welcome to XSLT!</message><message>Welcome to XSLT!</message>

</myMessage></myMessage>

Page 55: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

XSLTXSLT<?xml version = "1.0"?><?xml version = "1.0"?><xsl:stylesheet version = "1.0" <xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">

<xsl:template match = "myMessage"><xsl:template match = "myMessage"> <xsl:copy><xsl:copy> <xsl:apply-templates/><xsl:apply-templates/> </xsl:copy></xsl:copy> </xsl:template></xsl:template>

<xsl:template match = "message"><xsl:template match = "message"> <xsl:copy><xsl:copy> How about &apos;Hi World&apos; for a change!How about &apos;Hi World&apos; for a change! </xsl:copy></xsl:copy> </xsl:template></xsl:template>

</xsl:stylesheet></xsl:stylesheet>

Page 56: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Il risultatoIl risultato

<?xml version="1.0" encoding="UTF-8"?><?xml version="1.0" encoding="UTF-8"?>

<myMessage><myMessage>

<message><message>

How about 'Hi World' for a How about 'Hi World' for a change!change!

</message></message>

</myMessage></myMessage>

Page 57: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

EserciziEsercizi

Page 58: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Esercizio 1Esercizio 1

Scrivere un XSLT che trasformi il Scrivere un XSLT che trasformi il documento della figura 12.28 in documento della figura 12.28 in quello della figura 12.29 seguentiquello della figura 12.29 seguenti

Page 59: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono
Page 60: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono
Page 61: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Esercizio 2Esercizio 2

Fare il viceversa (trasformare il doc Fare il viceversa (trasformare il doc di fig. 12.29 in quello di fig. 12.28)di fig. 12.29 in quello di fig. 12.28)

Page 62: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Esercizio 3Esercizio 3

Trasformare in HTML i due Trasformare in HTML i due documenti precedentidocumenti precedenti

Page 63: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Esercizio 4Esercizio 4

Trasformare il file planner XML nella Trasformare il file planner XML nella struttura mostrata in figura 12.30struttura mostrata in figura 12.30

Page 64: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Il file dati PLANNER.XMLIl file dati PLANNER.XML<?xml version="1.0"?><?xml version="1.0"?><!-- Fig. 5.9 : planner.xml --><!-- Fig. 5.9 : planner.xml --><!-- Day Planner XML document --><!-- Day Planner XML document --><planner><planner>

<year value="2000"><year value="2000"><date month="7" day="15"><date month="7" day="15">

<note time="1430">Doctor&apos;s <note time="1430">Doctor&apos;s appointment</note>appointment</note>

<note time="1620">Physics class at <note time="1620">Physics class at BH291C</note>BH291C</note>

</date></date><date month="7" day="4"><date month="7" day="4">

<note>Independence Day</note><note>Independence Day</note></date></date><date month="7" day="20"><date month="7" day="20"> <note time="0900">General Meeting in room 32-<note time="0900">General Meeting in room 32-

A</note>A</note></date></date>

Page 65: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Il file dati Il file dati PLANNER.XMLPLANNER.XML

<date month="7" day="20"><date month="7" day="20"> <note time="1900">Party at <note time="1900">Party at

Joe&apos;s</note>Joe&apos;s</note></date></date><date month="7" day="20"><date month="7" day="20"> <note time="1300">Financial Meeting in <note time="1300">Financial Meeting in

room 14-C</note>room 14-C</note></date></date>

</year></year></planner></planner>

Page 66: XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo dell'Extensible Markup Language è la facilità con cui si possono

Figura 12.30