1 / 34

Lezione 6

Lezione 6. XSL, Xpath Slide adattate da http://nwalsh.com/docs/tutorials/xsl/ e http:// bfp.sp.unipi.it/~didonato/ovre/xmldocbook/corso_xmldocbook5.ppt Si ringraziano Walsch e Grosso. X… di oggi. Xpath : un modo per identificare univocamente uno più nodi in un albero XML

elon
Download Presentation

Lezione 6

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. Lezione 6 XSL, Xpath Slide adattate da http://nwalsh.com/docs/tutorials/xsl/ e http://bfp.sp.unipi.it/~didonato/ovre/xmldocbook/corso_xmldocbook5.ppt Si ringraziano Walsch e Grosso

  2. X… di oggi • Xpath: un modo per identificare univocamente uno più nodi in un albero XML • XSLT “XSL Transformations” un linguaggio per trasformare un albero XML in un’altra struttura arbitraria (spesso HTML, o un’altra struttura XML, o altro) • XSL “eXtensible Stylesheet Language”: XSLT più la descrizione di un insieme di istruzioni di formattazione (FO “Formatting Objects” e di proprietà di formattazione)

  3. Opzioni per visualizzare XML

  4. Caso tipico: da XSL a (X)HTML = eXtensible Stylesheet Language = Hyper Text Mark-up Language

  5. Cosa fa un “foglio di stile” (stylesheet)? Due tecniche di base: • Trasformare un documento input in un altro documento con una diversa struttura • Descrivere come presentare la informazione che è stata trasformata (associando delle proprietà a ciascuna parte della informazione trattata)

  6. Possibilità di trasformazione • Generazione di testo fisso Es.: testo  <tag>testo</tag> • Eliminazione di contenutiEs.: testo, commento, altro testo  testo, altro testo • Movimento di contenutiEs.: nome cognome  cognome nome • Duplicazione di contenutiEs.: autore titolo  titolo autore titolo • Ordinamento (sorting) di contenuti B A F C  A B C F • Altre trasformazioni complesse che calcolano nuova informazione a partire dalla vecchia

  7. Specifica della presentazione Tre livelli di informazioni di formattazione: • Specificare dell’aspetto generale della pagina. • Assegnare il contenuto trasformato a vari “contenitori” (liste, paragrafi, ecc.) • Definire le proprietà di formattazione di basso livello (font, margini, allineamento, spaziatura, ecc.)

  8. Da XML ad un “result tree”

  9. Da XML ad un “result tree”: cosa va dove

  10. Uno stylesheet XSL • Formato essenzialmente da una serie di template (“modelli”?) • Ciascun template trova (“match”) un qualche insieme di elementi marcati nell’albero XML di input e descrive il contributo di quegli elementi al documento output, il “result tree”. NB: In generale, gli elementi nello stylesheet con il namespace “xsl:” sono istruzioni del linguaggio XSLT, tutti gli altri sono ciò che verrà messo nell’ output.

  11. Struttura di uno stylesheet • Il file XSLT sono documenti XML; i namespace (namespaces (http://www.w3.org/TR/REC-xml-names) sono usati per identificare gli elementi significativi • La maggior parte degli stylesheet sono documenti stand-alone (senza DTD) il cui elemento radice è <xsl:stylesheet> o <xsl:transform> (sinonimi)

  12. Esempio minimo di stylesheet <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> ... </xsl:stylesheet>

  13. Esempio 2 <html xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <head> <title>Esempio inutile</title> </head> <body> <h1>Esempio inutile</h1> <p>Tutto quello che dice questo file è che 3+4 è <xsl:value-of select="3+4"/>. </p> </body> </html>

  14. Esempio completo • Questo stylesheet trasforma gli elementi <para> ed <emphasis> dell’input in tag HTML <?xml version='1.0'?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="para"> <p><xsl:apply-templates/></p> </xsl:template> <xsl:template match="emphasis"><i><xsl:apply-templates/></i> </xsl:template> </xsl:stylesheet>

  15. Input e output • Con questo stylesheet, l’ XML: <?xml version='1.0'?> <para>This is a <emphasis>test</emphasis>.</para> • verrebbe trasformato in: <?xml version="1.0" encoding="utf-8"?> <p>This is a <i>test</i>.</p>

  16. Capire i template • La maggior parte dei template hanno la forma: <xsl:template match="emphasis"> <i><xsl:apply-templates/></i> </xsl:template> • L’intero elemento <xsl:template> è un template • Il match pattern determina dove si applica il template • Gli elementi letterali risultanti (Literal result element(s)) derivano dai namespace non XSL • Gli elementi XSLT derivano invece dal namespace XSL

  17. Match pattern (come trovare il contenuto) • Ogni template deve avere un modo per descrivere univocamente a quale parte del documento input si applica. • Ciò viene ottenuto tramite la sintassi Xpath (XML Path Language (XPath) (http://www.w3.org/TR/xpath), ispirata al modo per descrivere la posizione (assoluta o relativa) dei file in un sistema di directory.

  18. Esempi di pattern

  19. Esempio di albero XML / .. <para> . <emphasis> <para> <para> <para> <para> <para> <emphasis> <emphasis>

  20. Pattern complessi

  21. Pattern con predicati

  22. Riferimento relativo al nodo contesto:

  23. Pattern con riferimenti relativi

  24. Applicazione recursiva degli stili • Viene crata una serie di template, uno per ogni contesto; questi vengono applicati ricorsivamente (uno chiama l’altro) a partire dalla radice. • <xsl:template match="section/title"> <h2><xsl:apply-templates/></h2> </xsl:template> • <xsl:apply-templates select="th|td"/>

  25. Esempio ricorsivo 1 <doc> <para>questo è <emphasis>testo</emphasis>. <emphasis>enfasi <emphasis>annidata</emphasis></emphasis>.</para> </doc>

  26. Esempio ricorsivo <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="doc"> <html><head><title>A Document</title></head> <body><xsl:apply-templates/></body></html> </xsl:template><xsl:template match="para"> <p><xsl:apply-templates/></p> </xsl:template> <xsl:template match="emphasis"> <i><xsl:apply-templates/></i> </xsl:template><xsl:template match="emphasis/emphasis"> <b><xsl:apply-templates/></b> </xsl:template> </xsl:stylesheet>

  27. Output HTML <html> <head><title>A Document</title> </head> <body> <p>This is a <i>test</i>. <i>Nested <b>emphasis</b></i>.</p> </body> </html>

  28. Applicazione sequenziale degli stili • Viene creata una serie di template che processano sequenzialmente gli elementi desiderati • Costruzione For-each: <xsl:for-each select="row"> <tr><xsl:apply-templates/></tr> </xsl:for-each> • Possibili anche template con nome (non trattati qui)

  29. Esempio di For-each: file xml <?xml version='1.0'?> <table> <row> <entry>a1</entry> <entry>a2</entry> </row> <row> <entry>b1</entry> <entry>b2</entry> </row> <row> <entry>c1</entry> <entry>c2</entry> </row> </table>

  30. Esempio di For-each: file XSL <?xml version='1.0'?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html"/> <xsl:template match="table"> <table> <xsl:for-each select="row"> <tr> <xsl:for-each select="entry"> <td><xsl:apply-templates/></td> </xsl:for-each> </tr> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet>

  31. Output HTML <table> <tr> <td>a1</td> <td>a2</td> </tr> <tr> <td>b1</td> <td>b2</td> </tr> <tr> <td>c1</td> <td>c2</td> </tr> </table>

  32. Creare il “result tree” • Literal Result Elements (Elementi risultanti letterali): qualsiasi elemento che non abbia la estensione del namespace XSL (normalmente “xsl:”) • Vengono copiati così come sono nell’albero risultante • <xsl:value-of> : inserisce il valore di una espressione nell’albero<xsl:value-of select=“$count +1”/>

  33. Creare il “result tree” • <xsl:copy> : copia il valore del nodo corrente nell’albero. • <xsl:element> : inserisce l’elemento con un certo nome nell’albero. Esempio: <xsl:param name="header">h3</xsl:param> ... <xsl:element name="{$header}"> <xsl:apply-templates/> </xsl:element>  <h3>…</h3> • <xsl:attribute> : aggiunge un attributo con un certo nome al più vicino nodo che lo contiene. <table> <xsl:if test="@pgwide='1'"> <xsl:attribute name="width">100%</xsl:attribute> </xsl:if> ... </table>

  34. Contare il numero di elementi <xsl:number> : conta gli elementi nell’albero di input e converte il risultato in una stringa formattata. <xsl:number count="listitem" format="i. "/> <xsl:number count="chapter" from="book" level="any" format="1. "/> <xsl:number count="h1|h2|h3" level="multiple" from="chapter|appendix" format="1."/>

More Related