1 / 52

XSL:Rappresentare i documenti XML

XSL:Rappresentare i documenti XML. Marco Mesiti mesiti@disi.unige.it XSL, XSLT, XPath. XSL - eXstensible Stylesheet Language. XSL Raccomandazione del W3C (2001) Per aumentare la flessibilità dello standard XML Più sofisticato di CSS Contiene specifiche di CSS e DSSSL

gurit
Télécharger la présentation

XSL:Rappresentare i documenti XML

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. XSL:Rappresentare i documenti XML Marco Mesitimesiti@disi.unige.itXSL, XSLT, XPath

  2. XSL - eXstensible Stylesheet Language • XSL Raccomandazione del W3C (2001) • Per aumentare la flessibilità dello standard XML • Più sofisticato di CSS • Contiene specifiche di CSS e DSSSL • XSL consiste di tre parti: • Un linguaggi o per trasformare i documenti XML (XSLT) • un vocabolario per definire la formattazione (XSL) • una sintassi per indirizzare parti di un documento ad una certa formattazione (XPath)

  3. XSL è uno Standard W3C • XSL è uno standard del World Wide Web Consortium • XSLT ed XPath sono diventate Raccomandazioni nel Novembre 1999 • Il linguaggio completo che include “XSL formatting” è diventato raccomandazione al W3C nell’Ottobre 2001

  4. XSLT, XPath: Scopi e funzionalità • XSLT è in pratica un linguaggio dedicato alla trasformazione di documenti XML in documenti XML • XPath è un linguaggio dedicato alla definizione ed al recupero di parti di documenti XML (Indirizzamento di documenti XML) • Useremo XSLT per trasformare XML in XHTML e XPath per il recupero di parti da trasformare

  5. Internet Explorer 5 e 6 • XSL in Internet Explorer 5 NON è compatibile con la raccomandazione ufficiale del W3C su XSL. • Internet Explorer 5.0 uscito nel Marzo 1999, Lo standard XSL era ancora un W3C Working Draft. • Internet Explorer 6 supporta completamente XSL • Il Parser XML 3.0 è basato sulla Raccomandazione • http://msdn.microsoft.com/xml/general/xmlparser.asp

  6. Netscape 6 e 7 • Netscape 6 non supporta completamente la raccomandazione XSL del W3C • Netscape 7 invece supporta completamente la raccomdazione XSL del W3C

  7. Xpath

  8. XPath • Linguaggio per esprimere espressioni di cammino sulla struttura gerarchica dei documenti XML • Basato sul concetto di context node. • Un context node è il nodo a partire dal quale viene valutata un’espressione • Esempi • /books/book/author • /child::books/child::book/child::author

  9. XPath • Il costrutto di base è il location path, sequenza di location steps separati da / • Un location step viene valutato rispetto ad un contesto che restituisce un insieme di nodi • Un location path viene valutato composizionalmente, da sinistra a destra, iniziando da un contesto iniziale • Ogni nodo risultante dalla valutazione di un passo viene usato come contesto per la valutazione del passo successivo

  10. XPath • Un location step has the form axis:: node-test [ predicate ] • Esempio: child::section[position()<6]/descendant::cite/attribute::href • seleziona tutti gli attributi href attributes contenuti in elementi cite nelle prime 5 sezioni di un articolo

  11. Axes

  12. Node tests • Testing by node type: • text()chardata nodes • comment()comment nodes • processing-instruction()processing instruction nodes • node()all nodes (not including attributes and namespace decl.s) • Testing by node name: • namenodes with that name • *any node

  13. Predicates • expressions coerced to type boolean • A predicate filters a node-set by evaluating the predicate expression on each node in the set with that node as the context node • Different predefined predicates are available • Predicates can be conjunction, disjunction, negation of other predicates

  14. Xpath - abbreviazioni Sintassi di baseAbbreviazione child::niente attribute::@ /descendant-or-self::node()/// self::node(). parent::node()..

  15. Esempio <?xml version=“1.0”?> <costumers> <costumer costumerID=“ALFKI”> <order orderID=“1”> …</order> <order orderID=“2”> …</order> … </costumer> <costumer costumerID=“BIKNE”> <contactName>S. Franzoni</ContactName> <order orderID=“1”> …</order> <order orderID=“2”> …</order> </costumer> … </costumers>

  16. Esempi • Seleziona dalla radice (elemento più esterno), I clienti con attributo ClientID = ="ALFKI" • /Customers/Customer[@CustomerID="ALFKI"] • supponendo che Customer abbia come sottoelemento Order, seleziona tutti gli ordini in cui OrderID = 1 • /Customers/Customer/Order[@OrderID="1"] • Supponendo che Customer ammetta come sottoelemento ContactName, selezionare tutti i Customer che: • hanno almeno un ContactName • /Customers/Customer[ContacName] • non hanno ContactName • /Customers/Customer[not(ContacName)]

  17. Esempi • Selezionare gli ordini che si riferiscono al cliente identificato da "ALFKI" • /Customers/Customer/Order[../@CustomerID="ALFKI"] • /Customers/Customer[@CustomerID="ALFKI"]/Order • selezionare l’ordine identificato da "Ord-10643”, relativo al cliente identificato da "ALFKI" • /Customers/Customer[@CustomerID="ALFKI"]/Order[@OrderID="Ord-10643"] • selezionare i clienti che hanno effettuato almeno un ordine di un prodotto inquantità superiore a 5 • /Customers/Customer[Order/OrderDetail[@Quantity>5]]

  18. Esempi • Selezionare I vari prodotti ordinati, che complessivamente costano più di 2000 • //OrderDetail[@UnitPrice * @Quantity = 2000] • seleziona il cliente "ALFKI" e il cliente “ANATR” • /Customers/Customer[@CustomerID="ALFKI" or @CustomerID="ANATR"]

  19. XSLT

  20. XSLT Trasformare documenti XML • XSLT è sicuramente la parte più interessante dello standard XSL • XSLT, nella trasformazione, può anche aggiungere nuovi elementi o rimuoverne di vecchi • XSLT può ordinare i dati, può prendere decisioni su quali elementi mostrare e molto di più • Formalmente il processo di trasformazione XSLT prende in input un albero XML sorgente e produce un nuovo albero XML XML XSLT XHTML

  21. Come funziona? • Nel processo di trasformazione XSLT utilizza XPath per determinare le parti dell’albero sorgente che corrispondono a determinati template operativi (identificazione di “match”) • Quando un “match” viene trovato XSLT trasforma la parte interessata nel pattern stabilito che restituisce in output • Le parti che non trovano matching con alcun template non verranno modificate nel risultato o addirittura non compariranno nell’albero di output.

  22. Una trasformazioni XSLT La trasformazione viene attuata associando patterns con templates • Un pattern deve coincidere con un elemento dell’input tree • Un template serve per formare parte dell’albero in output

  23. XSLT - Regole di Template • L’albero in output viene creato appendendo i nodi processati partendo dal nodo radice • Un nodo viene processato cercando tutti le regole di template con il pattern corrispondente • Un template contiene, tipicamente istruzioni di selezione di nuovi nodi da processare • Il processo di matching, la creazione di nodi e la selezione continuano ricorsivamente fino a quando non esistono nuovi nodi da aggiungere

  24. XSLT - I Patterns • Le regole di Template identificano i nodi • I patterns sono usati anche per la numerazione e per la dichiarazione di chiavi • Un pattern specifica un insieme di condizioni su un nodo • Un nodo che soddisfa quelle condizioni corrisponde al pattern • La sintassi di patterns è un sottoinsieme della sintassi di espressioni in XPath

  25. XSLT - I Patterns - Esempi paragrafo ogni elemento <paragrafo> * qualsiasi elemento lista/elemento ogni elemento con una <lista> come genitore /il nodo radice text()ogni nodo text node()ogni nodo id(“unico")l’elemento con ID uguale a unico para[1] ogni <para> elemento primo nel contesto genitore @*ogni attributo

  26. Procediamo con un esempio (XML) <?xml version="1.0" encoding="ISO-8859-1" ?> <catalog> <cd> <title> Empire Burlesque</title> <artist>Bob Dylan</artist> <country>USA</country> <company>Columbia</company> <price>22.23</price> <year>1985</year> </cd> … </catalog> catalog.xml

  27. Procediamo con un esempio (XSL) <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <td align="left">Title</td> <td align="left">Artist</td> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/> </td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template></xsl:stylesheet> catalog.xsl

  28. Associare il foglio di stile a un documento XML <?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet type="text/xsl“ href="cdcatalog.xsl"?> <catalog> <cd> <title>Empire Burlesque</title> <artist>Bob Dylan</artist> <country>USA</country> <company>Columbia</company> <price>10.90</price> <year>1985</year> </cd> … </catalog>

  29. L’elemento <xsl:template> • Come abbiamo detto un foglio di stile corrisponde ad una serie di regole dette templates • Ogni regola è definita da un elemento <xsl:template> • Questo contiene regole da applicare ai nodi che fanno “match” con l’espresisone di XPath

  30. XSL usa Templates • L’attributo match viene usato per associare il template ad un elemento XML • L’attributo match viene anche usato per definire un template da applicare ad un intero ramo dell’albero XML di input • Ad esempio match="/" definisce l’intero documento

  31. XSLT - Definire una regola di template <!-- Category: top-level-element --><xsl:template match = pattern name = qname priority = number mode = qname > <!-- Content: (xsl:param*, template) --></xsl:template> • viene specificata da un elemento xsl:template • match è un pattern che identifica il nodo (nodi) sorgente a cui applicare la regole

  32. XSLT - Definire una regola di template • Esempio:This is an <emph>important</emph> point. <xsl:template match="emph"> <B> <xsl:apply-templates/> </B></xsl:template> • l’xsl:apply-templates ricorsivamente processa i figli dell’elemento sorgente

  33. XSLT - Applicare una regola Template <!-- Category: instruction --><xsl:apply-templates select = node-set-expression mode = qname><!-- Content:(xsl:sort | xsl:with-param)* --> </xsl:apply-templates> <xsl:template match="chapter"><my_rules> <xsl:apply-templates/></my_rules> </xsl:template> • in assenza di select xsl:apply-templates processa tutti i figli del nodo corrente

  34. Qui c’è la select XSLT - Applicare una regola Template • ESEMPIO: Processa tutti gli elementi <author> figli dell’elemento <author-group> <xsl:template match="author-group"> <b> <xsl:apply-templates select="author"/> </b> </xsl:template>

  35. XSLT - Applicare una regola Template • Più xsl:apply-templates possono essere usati in un singolo template per fare ordinamenti • Ad esempio per creare due tabelle HTML • La prima riempita da domestic sales • la seconda da foreign sales <xsl:template match="product"> <table> <xsl:apply-templates select="sales/domestic"/> </table> <table> <xsl:apply-templates select="sales/foreign"/> </table> </xsl:template>

  36. L’elemento <xsl:value-of> • <xsl:value-of> viene utilizzato per selezionare il valore di un elemento XML ed aggiungerlo all’albero di output <tr> <td><xsl:value-of select="catalog/cd/title"/></td> <td><xsl:value-of select="catalog/cd/artist"/></td> </tr>

  37. XSLT – Ripetizioni <!-- Category: instruction --><xsl:for-each select = node-set-expression> <!-- Content: (xsl:sort*, template) --></xsl:for-each> • Quando il documento ha una struttura più o meno regolare è utili selezionare un certo template per nodi dello stesso genere • l’istruzione xsl:for-each contiene un template, che viene creato per ogni nodo selezionato • L’attributo select è obbligatorio

  38. L’elemento <xsl:for-each> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each>

  39. L’elemento <xsl:sort> • Serve per ordinare le informazioni • Occorre inserire un sort all’interno di un elemento for-each nel file XSL. <xsl:for-each select="catalog/cd"> <xsl:sort select="artist"/> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each>

  40. XSLTProcessare seguendo una condizione • Esistono due istruzioni in XSLT che supportano il processing condizionale in un template • xsl:if L’istruzione xsl:if fornisce un semplice if-then • xsl:choose l’istruzione xsl:choose supporta la selezione di una scelta quando esistono varie possibilità

  41. L’elemento <xsl:if> • Applicato solo se la condizione è vera <xsl:if test="price &gt; 10">  some output ... </xsl:if> <xsl:for-each select="catalog/cd"> <xsl:if test="price &gt; 10"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:if> </xsl:for-each>

  42. L’elemento <xsl:choose> • Insieme a <xsl:when> ed <xsl:otherwise> per test condizionali multipli <xsl:choose><xsl:when test="price &gt; 10">... some code ...</xsl:when><xsl:otherwise>... some code .... </xsl:otherwise></xsl:choose> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <xsl:choose> <xsl:when test="price &gt; 10"> <td bgcolor="#ff00ff"> <xsl:value-of select="artist"/></td> </xsl:when> <xsl:otherwise> <td><xsl:value-of select="artist"/></td> </xsl:otherwise> </xsl:choose> </tr> </xsl:for-each>

  43. Ancora l’elemento <xsl:apply-templates> • Applica la regola all’elemento corrente o ai figli. • Se aggiungiamo un attributo select processerà solo i figli che match-ano con la richiesta. • Si può usare le select per selezionare in che ordine processare i figli

  44. Un foglio di stile XSL • E’ un documento XML. • Deve iniziare con la dichiarazione di documento XML <?xml version="1.0" encoding="ISO-8859-1"?> • Il TAG <xsl:stylesheet> è l’elemento radice del foglio di stile

  45. XSLT Namespace http://www.w3.org/1999/XSL/Transform • I parser XSLT devono usare il concetto di namespaces XML per riconoscere elementi e attributi del Linguaggio XSLT • Tali elementi sono riconosciuti solo nello stylesheet e non nel documento sorgente

  46. XSLT:Dichiarazione di Foglio di Stile • L’elemento root che dichiara un foglio di stile XSLT è <xsl:stylesheet> o <xsl:transform>. Codice di dichiarazione <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">oppure <xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> • xmlns:xsl="http://www.w3.org/1999/XSL/Transform"identifica il namespace per XSL • Occorre includere l’attributo version="1.0"

  47. XSLT - xsl:stylesheet • Può contenere, ad esempio i seguenti elementi: xsl:import xsl:include xsl:strip-space xsl:preserve-space xsl:output xsl:key xsl:decimal-format xsl:namespace-alias xsl:attribute-set xsl:variable xsl:param xsl:template • top-level element: elemento che compare come figlio di xsl:stylesheet

  48. Un esempio <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0” xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:import href="..."/> <xsl:include href="..."/> <xsl:strip-space elements="..."/> <xsl:preserve-space elements="..."/> <xsl:output method="..."/> … … <xsl:variable name="...">...</xsl:variable> <xsl:param name="...">...</xsl:param> <xsl:template match="...">… </xsl:template> <xsl:template name="...">...</xsl:template> </xsl:stylesheet> Se c’è un import deve trovarsi per primo

  49. XSLT:Combinare fogli di Stile diversi Due meccanismi per combinare fogli di stile: • un meccanismo di inclusione che permette agli stylesheet di essere combinati senza cambiare la loro semantica e <!-- Category: top-level-element --> <xsl:include href =“url-reference”/> • un meccanismo di importazione che permette ai fogli di stile di sovrascriversi <xsl:import href = “url-reference” />

  50. Tag articolo Tag vuoto Link ad altro file Esempio

More Related