XSL:Rappresentare i documenti XML

52
1 XSL:Rappresentare XSL:Rappresentare i documenti XML i documenti XML Marco Mesiti [email protected] XSL, XSLT, XPath

description

XSL:Rappresentare i documenti XML. Marco Mesiti [email protected] 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 - PowerPoint PPT Presentation

Transcript of XSL:Rappresentare i documenti XML

Page 1: XSL:Rappresentare  i documenti XML

1

XSL:Rappresentare XSL:Rappresentare i documenti XML i documenti XML

Marco [email protected]

XSL, XSLT, XPath

Page 2: XSL:Rappresentare  i documenti XML

2

XSL - eXstensible Stylesheet LanguageXSL - 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)(XSLT) un vocabolario per definire la formattazione (XSL)(XSL) una sintassi per indirizzare parti di un documento ad una

certa formattazione (XPath)(XPath)

Page 3: XSL:Rappresentare  i documenti XML

3

XSL è uno Standard W3CXSL è 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

Page 4: XSL:Rappresentare  i documenti XML

4

XSLT, XPath: Scopi e funzionalitàXSLT, XPath: Scopi e funzionalità

XSLT è in pratica un linguaggio dedicato alla trasformazione di documenti XML in trasformazione di documenti XML in documenti XMLdocumenti 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

Page 5: XSL:Rappresentare  i documenti XML

5

Internet Explorer 5 e 6Internet 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

Page 6: XSL:Rappresentare  i documenti XML

6

Netscape 6 e 7Netscape 6 e 7

Netscape 6 non supporta completamente la raccomandazione XSL del W3C

Netscape 7 invece supporta completamente la raccomdazione XSL del W3C

Page 7: XSL:Rappresentare  i documenti XML

8

XpathXpath

Page 8: XSL:Rappresentare  i documenti XML

9

XPathXPath

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

Page 9: XSL:Rappresentare  i documenti XML

10

XPathXPath

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

Page 10: XSL:Rappresentare  i documenti XML

11

XPathXPath

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

Page 11: XSL:Rappresentare  i documenti XML

12

AxesAxes

Page 12: XSL:Rappresentare  i documenti XML

13

Node testsNode 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: name nodes with that name * any node

Page 13: XSL:Rappresentare  i documenti XML

14

PredicatesPredicates

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

Page 14: XSL:Rappresentare  i documenti XML

15

Xpath - abbreviazioniXpath - abbreviazioni

Sintassi di base Abbreviazione child:: niente

attribute:: @

/descendant-or-self::node()/ //

self::node() .

parent::node() ..

Page 15: XSL:Rappresentare  i documenti XML

16

EsempioEsempio

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

Page 16: XSL:Rappresentare  i documenti XML

17

EsempiEsempi

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)]

Page 17: XSL:Rappresentare  i documenti XML

18

EsempiEsempi

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

Page 18: XSL:Rappresentare  i documenti XML

19

EsempiEsempi

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"]

Page 19: XSL:Rappresentare  i documenti XML

20

XSLTXSLT

Page 20: XSL:Rappresentare  i documenti XML

21

XSLT XSLT Trasformare documenti XMLTrasformare 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

XSLTXSLT

XMLXML

XHTMLXHTML

Page 21: XSL:Rappresentare  i documenti XML

22

Come funziona?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.

Page 22: XSL:Rappresentare  i documenti XML

23

Una trasformazioni XSLTUna trasformazioni XSLT

La trasformazione viene attuata associando patternspatterns con templatestemplates

Un patternpattern deve coincidere con un elemento dell’input tree

Un templatetemplate serve per formare parte dell’albero in output

Page 23: XSL:Rappresentare  i documenti XML

24

XSLT - Regole di Template 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

Page 24: XSL:Rappresentare  i documenti XML

25

XSLT - I PatternsXSLT - 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

Page 25: XSL:Rappresentare  i documenti XML

26

XSLT - I Patterns - EsempiXSLT - I Patterns - Esempi

paragrafoparagrafo ogni elemento <paragrafo>

** qualsiasi elemento

lista/elementolista/elemento ogni elemento con una <lista> come genitore

// il nodo radice

text()text() ogni nodo text

node()node() ogni nodo

id(“unico")id(“unico") l’elemento con ID uguale a unico

para[1]para[1] ogni <para> elemento primo nel contesto genitore

@*@* ogni attributo

Page 26: XSL:Rappresentare  i documenti XML

27

Procediamo con un esempio (XML)Procediamo con un esempio (XML)

<?xml version="1.0" encoding="ISO-8859-1" ?> <?xml version="1.0" encoding="ISO-8859-1" ?> <catalog><catalog> <cd><cd> <title><title>

Empire Burlesque Empire Burlesque</title> </title>

<artist>Bob Dylan</artist> <artist>Bob Dylan</artist> <country>USA</country> <country>USA</country> <company>Columbia</company> <company>Columbia</company> <price>22.23</price> <price>22.23</price> <year>1985</year> <year>1985</year> </cd></cd>

……</catalog></catalog>

catalog.xmlcatalog.xml

Page 27: XSL:Rappresentare  i documenti XML

28

Procediamo con un esempio (XSL)Procediamo con un esempio (XSL)

<?xml version="1.0" encoding="ISO-8859-1"?><?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0" <xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"><xsl:template match="/"> <html><html> <body><body> <h2>My CD Collection</h2><h2>My CD Collection</h2> <table border="1"><table border="1"> <tr bgcolor="#9acd32"><tr bgcolor="#9acd32"> <td align="left">Title</td><td align="left">Title</td> <td align="left">Artist</td><td align="left">Artist</td> </tr></tr> <xsl:for-each select="catalog/cd"><xsl:for-each select="catalog/cd"> <tr><tr> <td><xsl:value-of select="title"/><td><xsl:value-of select="title"/>

</td> </td> <td><xsl:value-of select="artist"/></td><td><xsl:value-of select="artist"/></td> </tr></tr> </xsl:for-each></xsl:for-each> </table></table> </body></body> </html></html></xsl:template></xsl:stylesheet></xsl:template></xsl:stylesheet> catalog.xslcatalog.xsl

Page 28: XSL:Rappresentare  i documenti XML

29

Associare il Associare il foglio di stile a un documento XMLfoglio di stile a un documento XML

<?xml version="1.0" encoding="ISO-8859-1"?> <?xml version="1.0" encoding="ISO-8859-1"?>

<?xml-stylesheet type="text/xsl“ <?xml-stylesheet type="text/xsl“ href="cdcatalog.xsl"?> href="cdcatalog.xsl"?>

<catalog> <catalog> <cd> <cd> <title>Empire Burlesque</title> <title>Empire Burlesque</title> <artist>Bob Dylan</artist> <artist>Bob Dylan</artist> <country>USA</country> <country>USA</country> <company>Columbia</company> <company>Columbia</company> <price>10.90</price> <price>10.90</price> <year>1985</year> <year>1985</year> </cd> </cd> … …</catalog></catalog>

Page 29: XSL:Rappresentare  i documenti XML

30

L’elemento <xsl:template>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

Page 30: XSL:Rappresentare  i documenti XML

31

XSL usa TemplatesXSL 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

Page 31: XSL:Rappresentare  i documenti XML

32

XSLT - Definire una regola di templateXSLT - 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

Page 32: XSL:Rappresentare  i documenti XML

33

XSLT - Definire una regola di templateXSLT - 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

Page 33: XSL:Rappresentare  i documenti XML

34

XSLT - Applicare una regola TemplateXSLT - 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

Page 34: XSL:Rappresentare  i documenti XML

35

XSLT - Applicare una regola TemplateXSLT - 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>

Qui c’è la selectQui c’è la selectQui c’è la selectQui c’è la select

Page 35: XSL:Rappresentare  i documenti XML

36

XSLT - Applicare una regola TemplateXSLT - 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>

Page 36: XSL:Rappresentare  i documenti XML

37

L’elemento <xsl:value-of>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> <tr>

<td><xsl:value-of select="catalog/cd/title"/></td> <td><xsl:value-of select="catalog/cd/title"/></td> <td><xsl:value-of select="catalog/cd/artist"/></td> <td><xsl:value-of select="catalog/cd/artist"/></td>

</tr></tr>

Page 37: XSL:Rappresentare  i documenti XML

38

XSLT – RipetizioniXSLT – 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

Page 38: XSL:Rappresentare  i documenti XML

39

L’elemento <xsl:for-each>L’elemento <xsl:for-each>

<xsl:for-each select="catalog/cd"> <xsl:for-each select="catalog/cd">

<tr> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="title"/></td>

<td><xsl:value-of select="artist"/></td> <td><xsl:value-of select="artist"/></td> </tr> </tr>

</xsl:for-each> </xsl:for-each>

Page 39: XSL:Rappresentare  i documenti XML

40

L’elemento <xsl:sort>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:for-each select="catalog/cd"> <xsl:sort select="artist"/> <xsl:sort select="artist"/> <tr> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> <td><xsl:value-of select="artist"/></td> </tr> </tr>

</xsl:for-each> </xsl:for-each>

Page 40: XSL:Rappresentare  i documenti XML

41

XSLTXSLTProcessare seguendo una condizione Processare 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à

Page 41: XSL:Rappresentare  i documenti XML

42

L’elemento <xsl:if>L’elemento <xsl:if>

Applicato solo se la condizione è vera

<xsl:if test="price &gt; 10"><xsl:if test="price &gt; 10">  some output ... </xsl:if>  some output ... </xsl:if>

<xsl:for-each select="catalog/cd"> <xsl:for-each select="catalog/cd"> <xsl:if test="price &gt; 10"> <xsl:if test="price &gt; 10"> <tr> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> <td><xsl:value-of select="artist"/></td>

</tr> </tr> </xsl:if> </xsl:if>

</xsl:for-each> </xsl:for-each>

Page 42: XSL:Rappresentare  i documenti XML

43

L’elemento <xsl:choose>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>

Page 43: XSL:Rappresentare  i documenti XML

44

Ancora Ancora l’elemento <xsl:apply-templates> 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

Page 44: XSL:Rappresentare  i documenti XML

45

Un foglio di stile XSLUn 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

Page 45: XSL:Rappresentare  i documenti XML

46

XSLT NamespaceXSLT 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

Page 46: XSL:Rappresentare  i documenti XML

47

XSLT:XSLT:Dichiarazione di Foglio di StileDichiarazione di Foglio di Stile

L’elemento root che dichiara un foglio di stile XSLT è <xsl:stylesheet> o <xsl:transform>.

Codice di dichiarazioneCodice di dichiarazione

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

oppure

<xsl:transform version="1.0" <xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

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"

Page 47: XSL:Rappresentare  i documenti XML

48

XSLT - xsl:stylesheetXSLT - xsl:stylesheet

Può contenere, ad esempio i seguenti elementi:

xsl:import xsl:import xsl:include xsl:include xsl:strip-spacexsl:strip-space xsl:preserve-space xsl:preserve-space xsl:outputxsl:output xsl:key xsl:key xsl:decimal-format xsl:decimal-format xsl:namespace-alias xsl:namespace-alias xsl:attribute-set xsl:attribute-set xsl:variable xsl:variable xsl:param xsl:param xsl:template xsl:template

top-level element: top-level element: elemento che compare come figlio di xsl:stylesheet

Page 48: XSL:Rappresentare  i documenti XML

49

Un esempioUn esempio

<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet version="1.0” <xsl:stylesheet version="1.0”

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:import href="..."/><xsl:import href="..."/>

<xsl:include href="..."/><xsl:include href="..."/>

<xsl:strip-space elements="..."/><xsl:strip-space elements="..."/>

<xsl:preserve-space elements="..."/><xsl:preserve-space elements="..."/>

<xsl:output method="..."/><xsl:output method="..."/>

… …… …

<xsl:variable name="...">...</xsl:variable><xsl:variable name="...">...</xsl:variable>

<xsl:param name="...">...</xsl:param><xsl:param name="...">...</xsl:param>

<xsl:template match="...">… </xsl:template><xsl:template match="...">… </xsl:template>

<xsl:template name="...">...</xsl:template><xsl:template name="...">...</xsl:template>

</xsl:stylesheet></xsl:stylesheet>

Se c’è un Se c’è un importimport

deve deve trovarsi per trovarsi per

primoprimo

Page 49: XSL:Rappresentare  i documenti XML

50

XSLT:XSLT:Combinare fogli di Stile diversiCombinare fogli di Stile diversi

Due meccanismi per combinare fogli di stile:

un meccanismo di inclusionemeccanismo 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 importazionemeccanismo di importazione che permette ai fogli di stile di sovrascriversi

<xsl:import href = “url-reference” />

Page 50: XSL:Rappresentare  i documenti XML

51

EsempioEsempio

Tag articoloTag articolo

Link ad altro fileLink ad altro file

Tag vuotoTag vuoto

Page 51: XSL:Rappresentare  i documenti XML

52

Esempio file .xslEsempio file .xsl

Lo trasforma in un file HTMLLo trasforma in un file HTML

Page 52: XSL:Rappresentare  i documenti XML

53

RisultatoRisultato

linkslinks