I fogli di stile XSL
Allegare un foglio di stile a un documento XML XSL <?xml-stylesheet type=”text/xsl” href=”mioxsl.xsl”?> CSS <?xml-stylesheet type=”text/css” href=”miocss.css”?>
Esempio <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="prova.xsl"?> <!DOCTYPE TEI.2 PUBLIC "-//TEI//DTD TEI Lite XML ver. 1//EN" "c:/TEI-EMACS/xml/dtds/tei/teixlite.dtd" []>
XSL: due linguaggi in uno XSLT un potente linguaggio di trasformazione (html, xml, txt) XSL:FO formattazione di oggetti
XSLT: uso Serve a: Cosa fa: visualizzare un documento XML come se fosse un documento HTML, XML, TXT trasformare un documento XML in un documento XML, HTML, TXT Cosa fa: Trasforma un NODO XML di input in un NODO (XML | HTML | TXT) di output
TIPI DI NODI Document root (Radice del documento) Attribute (Attributo) Comment (Commento) Element (Elemento) Namespace Processing instruction (Istruzione di elaborazione) Text (Testo)
Elemento ROOT di un XSL <?xml version=”1.0”?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"?> <!-- qui il contenuto del foglio di stile --> </xsl:stylesheet>
Template Per selezionare i nodi XSL usa dei template Un template è costituito da una serie di regole che contengono delle istruzioni. Quando si compara o si seleziona un nodo, un template dice al processore XSLT quale insieme di regole usare per trasformare il nodo per l’output.
xsl:template <xsl:template match=“qui il nodo”> <!--Qui le regole per il nodo selezionato --> </xsl:template>
Un foglio XSL <?xml version=”1.0”?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"?> <xsl:template match=“qui un nodo”> </xsl:template> <!-- qui altri nodi --> </xsl:stylesheet>
Un esempio <?xml version="1.0" encoding="iso-8859-1"?> <?xml-stylesheet type="text/xsl" href="antologia.xsl"?> <antologia> <poesia><titolo>I</titolo> <stanza> <verso>Voi ch'ascoltate in rime sparse il suono</verso> <verso>di quei sospiri ond'io nudriva 'l core</verso> <verso>in sul mio primo giovenile errore</verso> <verso>quand'era in parte altr'uom da quel ch'i' sono,</verso> </stanza> <!-- altre stanze --> </poesia> </antologia>
Un esempio: il foglio di stile <?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> <body> <xsl:apply-templates /> </body> </html> </xsl:template> </xsl:stylesheet> antologia1.xml
<xsl:output method="html" indent="yes" /> Ciò che vogliamo ottenere in output Attributi method=“html” | “xml” | “txt” indent=“yes” | “no”
La regola per l’elemento root <xsl:template match="/"> <html> <body> <xsl:apply-templates /> </body> </html> </xsl:template>
Il processore XSLT <xsl:template match="/"> <html> <body> <xsl:apply-templates /> </body> </html> </xsl:template> Trova l’elemento root (<xsl:template match="/">) Scrive due start-tag (<html> e <body>) Mette tutto il contenuto dell’elemento dell’elemento root (<xsl:apply-templates />) Scrive due end-tag (</body> e </html>)
Attenzione! Tutto ciò che è scritto dentro <xsl:template> viene scritto nell’output (testo, tag HTML…) Tutti gli elementi che appartengono al namespace xsl: vengono eseguiti.
xsl:apply-templates Serve per applicare le regole descritte al nodo selezionato e a tutti i suoi figli. Se si vuole che i figli abbiano una visualizzazione diversa, bisogna dichiarare una nuova regola
Es. 2 <?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> <body> <xsl:apply-templates /> </body> </html> </xsl:template> <xsl:template match="titolo"> <p><center><xsl:apply-templates /></center></p> <xsl:template match="verso"> <xsl:apply-templates /><br/> </xsl:stylesheet> antologia2.xml
Applicare una regola selezionando <?xml version="1.0" encoding="iso-8859-1"?> <?xml-stylesheet type="text/xsl" href="antologia.xsl"?> <antologia> <poesia><titolo>I</titolo> <stanza> <verso rima="A">Voi ch'ascoltate in rime sparse il suono</verso> <verso rima="B">di quei sospiri ond'io nudriva 'l core</verso> <verso rima="B">in sul mio primo giovenile errore</verso> <verso rima="A">quand'era in parte altr'uom da quel ch'i' sono,</verso> </stanza> <!-- altre stanze --> </poesia> </antologia>
select Attributo select Selezionare un attributo select=“@rima” @nomeAttributo select=“@rima”
Il foglio di stile <?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> <body> <xsl:apply-templates /> </body> </html> </xsl:template> <xsl:template match="titolo"> <p><center><xsl:apply-templates /></center></p> <xsl:template match="verso"> (<b><xsl:apply-templates select="@rima"/></b>) <xsl:text> </xsl:text> <xsl:apply-templates /><br/> </xsl:stylesheet> antologia3.xml
Spazio fra le stanze <?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> <body> <xsl:apply-templates /> </body> </html> </xsl:template> <xsl:template match="titolo"> <p><center><xsl:apply-templates /></center></p> <xsl:template match=“stanza"> <xsl:apply-templates /><br/> <xsl:template match="verso"> </xsl:stylesheet> antologia4.xml
Selezionare nodi per l’attributo match di <xsl:template> Nodo radice <xsl:template match="/"> ... </xsl:template> Elementi <xsl:template match=“verso">
Selezionare nodi per l’attributo match di <xsl:template> -2- Figli nipoti o discendenti 1. <xsl:template match=“strofa/verso"> ... </xsl:template> operatore / 2. <xsl:template match=“poesia/*/verso"> </xsl:template> operatore * (salta un elemento) 3. <xsl:template match=“poesia//verso"> </xsl:template> // salta n elementi
Selezionare nodi per l’attributo match di <xsl:template> -3- Attributi 1. <xsl:template match=“verso[@rima]"> ... </xsl:template> tutti i “verso” con attributo “rima” 2. <xsl:template match=“verso[@rima=‘A’]"> </xsl:template> tutti i “verso” con attributo “rima” e valore “A”
Selezionare nodi per l’attributo match di <xsl:template> -4- OR <xsl:template match="strofa | verso"> ... </xsl:template> operatore |