260 likes | 423 Views
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"?>
E N D
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: • 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> <xsl:template match=“qui un nodo”> </xsl:template> <xsl:template match=“qui un nodo”> </xsl:template> <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>
<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>) Il processore XSLT
Attenzione! Tutto ciò che è scritto dentro <xsl:template> viene scrittonell’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> <xsl:template match="verso"> <xsl:apply-templates /><br/> </xsl:template> </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 • @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> <xsl:template match="verso"> (<b><xsl:apply-templates select="@rima"/></b>) <xsl:text> </xsl:text> <xsl:apply-templates /><br/> </xsl:template> </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> <xsl:template match=“stanza"> <xsl:apply-templates /><br/> </xsl:template> <xsl:template match="verso"> <xsl:apply-templates /><br/> </xsl:template> </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"> ... </xsl:template>
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 |