XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo...
-
Upload
donata-rosso -
Category
Documents
-
view
222 -
download
1
Transcript of XSLT Trasformazioni XSL Ing. Luca Sabatucci. XSLT Uno dei vantaggi principali nell'utilizzo...
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's XML Primer</title><title>Deitel'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's <note time="1430">Doctor'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's</note>Joe'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 > '0500' and @time < '1200'"> Morning (<xsl:value-of select = "@time"/>):<xsl:when>
<xsl:when test = "@time > '1200' and @time < '1700'"> Afternoon (<xsl:value-of select = "@time"/>):</xsl:when>
<xsl:when test = "@time > '1200' and @time < '1700'"> Evening (<xsl:value-of select = "@time"/>):<xsl:when> <xsl:when test = "@time > '1200' and @time < '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 'Hi World' for a change!How about 'Hi World' 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's <note time="1430">Doctor'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's</note>Joe'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