XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo...

Preview:

Citation preview

XSLTXSLT

Trasformazioni XSLTrasformazioni XSL

Ing. Luca Sabatucci

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).

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

Processo di Processo di trasformazionetrasformazione

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

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

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’

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

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>

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…

OutputOutput

LucaSabatucci1621976PalermoIngegnereMarioRossi471982Milano

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

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

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”

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

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>

OutputOutput

Output XMLOutput XML

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

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

Una personaUna persona

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

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>

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

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.

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

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>

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.

OutputOutput

Output XMLOutput XML

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

</p><p>

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

</p>

OutputOutput

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

Cognome: SabatucciNome: Luca

Cognome: RossiNome: Mario

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

<html><head>

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

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

</html></xsl:template>

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>

Creazione di Creazione di attributiattributi

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

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>

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>

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>

Iterazioni e Iterazioni e ordinamentoordinamento

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

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>

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

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>

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>

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>

Il risultato della Il risultato della trasformazionetrasformazione

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>

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>

Istruzioni Istruzioni CondizionaliCondizionali

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>

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>

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>

<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/>

<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)

<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

Il risultatoIl risultato

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>

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>

Copiare i nodiCopiare i nodi

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

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>

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>

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>

EserciziEsercizi

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

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)

Esercizio 3Esercizio 3

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

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

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>

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>

Figura 12.30