1 / 37

I fogli di stile

I fogli di stile. XSL – 2 – . Selezioni multiple. <xsl:for-each> : serve per applicare una regola in modo ricorsivo a nodi figli dell’elemento contestuale. Attributo select obbligatorio

phoebe
Download Presentation

I fogli di stile

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. I fogli di stile XSL – 2 –

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

  3. <?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> Un esempio

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

  5. Selezionare nodi per l’attributo select:XPath Dove: • <xsl:apply-templates> • <xsl:for-each> • <xsl:value-of> • <xsl:when> • <xsl:if> • <xsl:sort> • <xsl:copy-of> • …

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

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

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

  9. Esempio child::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”

  10. Tipi di Assi

  11. Esempi di assi

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

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

  14. Visualizzare il teiHeader Possibilità 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>

  15. Visualizzare il teiHeader Possibilità 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

  16. Gestire più entrate omogenee Es: <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>

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

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

  19. 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!

  20. <xsl:apply-templates> quando: • 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>

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

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

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

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

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

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

  27. <xsl:element> <xsl:attribute> <xsl:element>: crea un nuovo elemento nell’output <xsl:attribute>: crea un nuovo attributo per un elemento dichiarato

  28. <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> Esempio

  29. 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> ]>

  30. Elemento <figure> <head type="numerale">XIV <figure entity="mummie1.jpg"> <figDesc>Pagina 1</figDesc> </figure> </head>

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

  32. Risultato <img src=“mummie1.jpg” alt=“Pagina 1” border=“0” width=“100%” height=“100%”>  mummie.xml

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

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

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

  36. …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>  mummie2.xml

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

More Related