I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo...

37
I fogli di stile XSL – 2 –

Transcript of I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo...

Page 1: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

I fogli di stile

XSL – 2 –

Page 2: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

Selezioni multiple

<xsl:for-each>: serve per applicare una regola in modo ricorsivo a nodi figli dell’elemento contestuale. Attributo select obbligatorio

<xsl:value-of>: serve per selezionare a quali fra gli elementi selezionati da <xsl:for-each> si deve applicare la regola. Attributo select obbligatorio

Page 3: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

Un esempio<?xml version="1.0"?><xsl:stylesheet

xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"><xsl:output method="html" indent="yes" /><xsl:template match="/">

<html><head><title>Antologia</title></head><body> <xsl:apply-templates /></body></html></xsl:template><xsl:template match="titolo"><p><center><xsl:apply-templates /></center></p></xsl:template>

<xsl:template match="stanza"><xsl:for-each select="verso"> <xsl:value-of select="." /><br/></xsl:for-each><br/> </xsl:template>

</xsl:stylesheet>

Alternativa:<xsl:template match=“stanza"><xsl:apply-templates /><br/> </xsl:template>

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

Alternativa 2:<xsl:template match=“stanza|verso"><xsl:apply-templates /><br/> </xsl:template>

Page 4: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

Nel dettaglio…<xsl:template match="stanza">

“stanza” nodo contestuale

<xsl:for-each select="verso"> “verso” figlio dell’elemento contestuale e nuovo nodo contestuale

<xsl:value-of select="." />”.” = tutti i nodi selezionati

<br/>a capo dopo un verso

</xsl:for-each><br/> riga vuota dopo una stanza

</xsl:template>

Page 5: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

Selezionare nodi per l’attributo select:XPathDove:

<xsl:apply-templates> <xsl:for-each> <xsl:value-of> <xsl:when> <xsl:if> <xsl:sort> <xsl:copy-of> …

Page 6: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

XPath Raccomandazione W3C (16 novembre

1999) Consta di espressioni Oltre a quelle viste per l’attributo match

consente di: Trovare nodi anche per padri/antenati e

fratelli del nodo contestuale. Restituire valori booleani, stringhe, valori

numerici.

Page 7: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

Espressioni XPath: percorsi di locazione Un percorso di locazione è costituito da

passi di locazione separati da / o da // Locazioni:

Assolute: cominciano con / parte dal nodo radice

Es: “/verso” tutti gli elementi <verso> figli diretti dell’elemento radice

Relative: cominciano senza / parte dal nodo contestuale

Es: “verso” tutti gli elementi <verso> figli del nodo contestuale

Page 8: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

Un passo di locazione è costituito da: un asse: esprime la relazione di parentela

del nodo da selezionare rispetto al nodo contestuale o all’elemento radice

un nodo test: il nodo di cui si vuole testare l’esistenza e a cui si vuole applicare una regola

zero o più predicati: una caratteristica del nodo selezionato

Page 9: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

Esempiochild::verso[position() = 1]

child:: è l’asse (qui: figlio del nodo contestuale) verso è il nodo test (il nodo da selezionare) [position() =1] è il predicato (qui: il primo

elemento)

= “fra tutti gli elementi <verso> figli del nodo contestuale, selezionare il primo”

Page 10: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

Tipi di Assi

Asse Sintassi abbreviata

ancestor

ancestor-or-self

attribute @

child nome_figlio

descendant

descendant-or-self //

following

following-sibling

namespace

parent ..

preceeding

preceding-sibling

self .

Page 11: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

Esempi di assiEsempio Sintassi abbreviata

child::verso verso

child::* *

attribute::rima @rima

descendant::verso //verso

ancestor::stanza

ancestor-or-self::stanza

descendant-or-self::verso

self::verso

child::stanza/descendant::verso stanza//verso

/

/descendant::stanza

/descendant::stanza/child::verso //stanza/verso

self::* .

Page 12: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

Esempio<?xml version="1.0"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"><xsl:output method="html" indent="yes" /><xsl:template match="/">

<html><head><title>Antologia</title></head><body> <xsl:apply-templates /></body></html></xsl:template>

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

<xsl:template match="stanza"><xsl:for-each select="child::verso"> <xsl:value-of select="self::*" /><br/></xsl:for-each><br/> </xsl:template></xsl:stylesheet> antologia4.xml

Page 13: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

Visualizzare il teiHeader: la root<xsl:template match="/"><html>

<head><title> <xsl:apply-templates select="//titleStmt/title" /></title>

</head><body>

<xsl:apply-templates /></body>

</html></xsl:template>

Page 14: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

Visualizzare il teiHeaderPossibilità 1: ogni elemento un template

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

<xsl:template match="titleStmt"><xsl:apply-templates select="title | author" />

</xsl:template>

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

</xsl:template>

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

</xsl:template>

Page 15: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

Visualizzare il teiHeaderPossibilità 2: un template unico

<xsl:template match="fileDesc"><h2>

<xsl:apply-templates select="titleStmt/title" /></h2><h3>

<xsl:apply-templates select="titleStmt/author" /></h3></xsl:template> fileDesc.xml

Page 16: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

Gestire più entrate omogeneeEs:<change> <date>20 aprile 2004</date> <respStmt> <resp>Codifica a cura di</resp> <name>Elena Pierazzo</name> </respStmt> <item>Correzione della Codifica</item> </change><change> <date>15 aprile 2004</date> <respStmt> <resp>Codifica a cura di</resp> <name>Elena Pierazzo</name> </respStmt> <item>Codifica TEI Lite</item> </change>

Page 17: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

Questo:<xsl:template match="revisionDesc"><h4>Storia del documento:</h4><ul>

<li><b><xsl:apply-templates select="change/date" /></b>: <xsl:apply-templates select="change/respStmt/resp" /> <xsl:text> </xsl:text> <xsl:apply-templates

select="change/respStmt/name"/> &#x2014; <xsl:apply-templates select="change/item" /> </li>

</ul></xsl:template>

Dà prova.xml

Page 18: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

<xsl:apply-templates/> in questo caso non va bene perché mettere ogni occorrenza del medesimo elemento una di seguito all’altra

<xsl:for-each>!

Page 19: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

Invece quest’altro…<xsl:template match="revisionDesc"><h4>Storia del documento:</h4><ul><xsl:for-each select="change">

<li><b><xsl:value-of select="date" /></b>: <xsl:value-of select="respStmt/resp" /> <xsl:text> </xsl:text> <xsl:value-of select="respStmt/name" /> &#x2014; <xsl:value-of

select="item" /></li>

</xsl:for-each></ul></xsl:template>

Dà prova2.xml!

Page 20: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

<xsl:apply-templates> quando:1. Quando si vuole processare tutti i nodi

figlio allo stesso modo

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

Page 21: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

<xsl:apply-templates> quando:2. Quando si vuole selezionare un particolare nodo figlio e si

vuole ignorare gli altri

<xsl:template match="fileDesc"><h2>

<xsl:apply-templates select="titleStmt/title" /></h2><h3>

<xsl:apply-templates select="titleStmt/author" /></h3><!-- manca respStmt --><p><b>Edizione pubblicata da:</b><xsl:apply-templates select="publicationStmt/publisher" /></p>

<xsl:apply-templates select="sourceDesc" /></xsl:template>

Page 22: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

<xsl:apply-templates> quando:3. Quando si vuole selezionare i figli di un nodo e disporli in

ordine diverso rispetto a quello che hanno nel documento XML

<xsl:template match="fileDesc"><h3>

<xsl:apply-templates select="titleStmt/author" /></h3><h2>

<xsl:apply-templates select="titleStmt/title" /></h2>

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

<p><b>Edizione pubblicata da:</b><xsl:apply-templates select="publicationStmt/publisher" /></p>

</xsl:template>

Page 23: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

<xsl:apply-templates> quando:4. Quando si vuole richiamare un template definito

dopo

<xsl:template match="fileDesc"><h2>

<xsl:apply-templates select="titleStmt/title" /></h2><xsl:apply-templates select="sourceDesc" /></xsl:template>

<xsl:template match="sourceDesc"><xsl:for-each select="bibl"> <b>Fonte:</b><br /> <xsl:value-of select="author" /> <br /></xsl:for-each></xsl:template>

Page 24: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

<xsl:for-each> quando: Quando si vuole processare tutte le istanze di un figlio di un

nodo separatamente e ricorsivamente

<xsl:template match="revisionDesc"><h4>Storia del documento:</h4><ul><xsl:for-each select="change"><li><b><xsl:value-of select="date" /></b>:<xsl:value-of select="respStmt/resp" /> <xsl:text> </xsl:text><xsl:value-of select="respStmt/name" /> &#x2014;<xsl:value-of select="item" /></li>

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

</xsl:template>

Page 25: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

Perché questo non va:<xsl:template match="revisionDesc"><h4>Storia del documento:</h4><ul>

<li><b><xsl:apply-templates select="change/date" /></b>: <xsl:apply-templates select="change/respStmt/resp" /> <xsl:text> </xsl:text> <xsl:apply-templates select="change/respStmt/name"/> &#x2014; <xsl:apply-templates select="change/item" /> </li>

</ul></xsl:template>

Page 26: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

Nel dettaglio:<li><b><xsl:apply-templates select="change/date" /> prende tutte le <date>

all’interno di <change> e le mette una di seguito all’altra</b>: <xsl:apply-templates select="change/respStmt/resp" />prende tutte i <resp> all’interno di <change> e di <respStmt> e li mette uno

di seguito all’altro <xsl:text> </xsl:text> <xsl:apply-templates select="change/respStmt/name"/>prende tutte i <name> all’interno di <change> e di <respStmt> e li mette

uno di seguito all’altro &#x2014; <xsl:apply-templates select="change/item" />prende tutte i <resp>

all’interno di <change> e li mette uno di seguito all’altro </li>

Esercizio 36

Page 27: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

<xsl:element> <xsl:attribute><xsl:element>: crea un nuovo elemento

nell’output

<xsl:attribute>: crea un nuovo attributo per un elemento dichiarato

Page 28: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

Esempio<xsl:template match=“/”><html><xsl:apply-templates/></html></xsl:template>

<xsl:template match="teiHeader"><table border='1‘><tr><td><xsl:apply-templates /></td></tr></table></xsl:template>

<xsl:template match=“/”><xsl:element name=“html”><xsl:apply-templates/><xsl:element></xsl:template>

<xsl:template match="teiHeader"><table><xsl:attribute

name=“border”>1</xsl:attribute><tr><td><xsl:apply-templates /></td></tr></table></xsl:template>

Page 29: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

Inserire le immagini in un file TEI<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="es25.xsl"?><!DOCTYPE TEI.2 PUBLIC "-//TEI//DTD TEI Lite XML ver. 1//EN""c:/TEI-EMACS/xml/dtds/tei/teixlite.dtd" [

<!ENTITY mummie1.jpg SYSTEM "mummie1.jpg" NDATA JPEG><!ENTITY mummie2.jpg SYSTEM "mummie2.jpg" NDATA JPEG><!ENTITY mummie3.jpg SYSTEM "mummie3.jpg" NDATA JPEG><!ENTITY mummie4.jpg SYSTEM "mummie4.jpg" NDATA JPEG><!ENTITY mummie5.jpg SYSTEM "mummie5.jpg" NDATA JPEG>

]>

Page 30: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

Elemento <figure>

<head type="numerale">XIV <figure entity="mummie1.jpg">

<figDesc>Pagina 1</figDesc> </figure></head>

Page 31: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

Visualizzazione<xsl:template match="figure"><img><xsl:attribute name="src"><xsl:apply-templates select="@entity" /></xsl:attribute><xsl:attribute name="alt"><xsl:apply-templates select="figDesc" /></xsl:attribute><xsl:attribute name="border">0</xsl:attribute><xsl:attribute name="width">100%</xsl:attribute><xsl:attribute name="heigth">100%</xsl:attribute></img></xsl:template>

Page 32: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

Risultato

<img src=“mummie1.jpg” alt=“Pagina 1” border=“0” width=“100%” height=“100%”>

mummie.xml

Page 33: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

Visualizzare le note: il testo

<head type="descrittivo">DIALOGO DI <name>FEDERICO RUYSCH</name> E DELLE SUE

MUMMIE<note n="39" place="end">Vedi, tra gli altri, circa queste

famose mummie, che in linguaggio scientifico si direbbero preparazioni anatomiche, il

<bibl><author>Fontenelle</author> <title lang="fra">Eloge de <abbr expan="monsignore"

type="title">mons.</abbr> <name>Ruysch</name></title></bibl>.</note>

</head>

Page 34: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

HTML da ottenere<h3>DIALOGO DI FEDERICO RUYSCH E DELLE SUE MUMMIE<sup><a href=“#39”>39</a></sup></h3>

<!-- qui tutto il testo -->

<div> <hr><p><a name=“39”><b>39.</b></a> Vedi, tra gli

altri…</p></div>

Page 35: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

Il rimando…<xsl:template match="note"><sup><a><xsl:attribute name="href">#<xsl:apply-templates select="@n"/></xsl:attribute><xsl:apply-templates select="@n"/></a></sup></xsl:template>

Page 36: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

…e il testo<xsl:template match="body"><body><xsl:apply-templates /><div><hr/><xsl:for-each select="//note"><p><a><xsl:attribute name="name"><xsl:value-of select="@n" /></xsl:attribute></a><b><xsl:value-of select="@n" />.</b><xsl:text> </xsl:text> <xsl:value-of select="." /></p></xsl:for-each></div></body></xsl:template> mumm 22xmlie

Page 37: I fogli di stile XSL – 2 –. Selezioni multiple : serve per applicare una regola in modo ricorsivo a nodi figli dellelemento contestuale. Attributo select.

Attenzione: non usare due <body>!<xsl:template match="/"><html>

<head><title> <xsl:apply-templates select="//titleStmt/title" /></title>

</head><body>

<xsl:apply-templates /></body>

</html></xsl:template>

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

…</body></xsl:template>