1 XSL:Rappresentare i documenti XML Marco Mesiti XSL, 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: (XSLT) Un linguaggi o per trasformare i documenti XML (XSLT) (XSL) un vocabolario per definire la formattazione (XSL) (XPath) 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à trasformazione di documenti XML in documenti XML 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
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 Internet Explorer MSXML Parser MSXML Parser 2.0 è il parser XML fornito insieme a IE 5.0. MSXML Parser 2.5 è il parser XML fornito insieme a Windows 2000 e IE 5.5. MSXML Parser 3.0 è il parser XML fornito insieme a IE 6.0 e Windows XP. Secondo Microsoft, MSXML Parser 3.0 è pienamente compatibile con la raccomandazione Per maggiori info:
8 Xpath
9 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
10 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
11 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
12 Axes
13 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: name nodes with that name * any node
14 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
15 Xpath - abbreviazioni Sintassi di baseAbbreviazione child:: niente /descendant-or-self::node()/ // self::node(). parent::node()..
16 Esempio … S. Franzoni … …
17 Esempi Seleziona dalla radice (elemento più esterno), I clienti con attributo ClientID = ="ALFKI" supponendo che Customer abbia come sottoelemento Order, seleziona tutti gli ordini in cui 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)]
18 Esempi Selezionare gli ordini che si riferiscono al cliente identificato da "ALFKI" selezionare l’ordine identificato da "Ord ”, relativo al cliente identificato da "ALFKI" ="Ord-10643"] selezionare i clienti che hanno effettuato almeno un ordine di un prodotto inquantità superiore a 5
19 Esempi Selezionare I vari prodotti ordinati, che complessivamente costano più di 2000 = 2000] seleziona il cliente "ALFKI" e il cliente “ANATR”
20 XSLT
21 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 XSLT XML XHTML
22 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.
23 Una trasformazioni XSLT patternstemplates La trasformazione viene attuata associando patterns con templates pattern Un pattern deve coincidere con un elemento dell’input tree template Un template serve per formare parte dell’albero in output
24 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
25 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
26 XSLT - I Patterns - Esempi paragrafo paragrafo ogni elemento * * qualsiasi elemento lista/elemento lista/elemento ogni elemento con una 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 elemento primo nel ogni attributo
27 Procediamo con un esempio (XML) <catalog> Empire Burlesque Empire Burlesque Bob Dylan Bob Dylan USA USA Columbia Columbia …</catalog> catalog.xml
28 Procediamo con un esempio (XSL) My CD Collection My CD Collection Title Title Artist Artist </xsl:template></xsl:stylesheet> catalog.xsl
29 Associare il foglio di stile a un documento XML <catalog> Empire Burlesque Empire Burlesque Bob Dylan Bob Dylan USA USA Columbia Columbia …</catalog>
30 L’elemento L’elemento Come abbiamo detto un foglio di stile corrisponde ad una serie di regole dette templates Ogni regola è definita da un elemento Questo contiene regole da applicare ai nodi che fanno “match” con l’espresisone di XPath
31 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
32 XSLT - Definire una regola di template XSLT - Definire una regola di template viene specificata da un elemento xsl:template match è un pattern che identifica il nodo (nodi) sorgente a cui applicare la regole
33 XSLT - Definire una regola di template XSLT - Definire una regola di template Esempio: This is an important point. l’ xsl:apply-templates ricorsivamente processa i figli dell’elemento sorgente
34 XSLT - Applicare una regola Template in assenza di select xsl:apply-templates processa tutti i figli del nodo corrente
35 XSLT - Applicare una regola Template XSLT - Applicare una regola Template ESEMPIO: Processa tutti gli elementi figli dell’elemento Qui c’è la select
36 XSLT - Applicare una regola Template 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
37 L’elemento L’elemento viene utilizzato per selezionare il valore di un elemento XML ed aggiungerlo all’albero di output </tr>
38 XSLT – Ripetizioni XSLT – Ripetizioni 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
39 L’elemento L’elemento </xsl:for-each>
40 L’elemento L’elemento Serve per ordinare le informazioni Occorre inserire un sort all’interno di un elemento for-each nel file XSL. </xsl:for-each>
41 XSLT 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à
42 L’elemento L’elemento Applicato solo se la condizione è vera some output... some output... </xsl:for-each>
43 L’elemento L’elemento Insieme a ed per test condizionali multipli... some code some code....
44 Ancora l’elemento Ancora l’elemento 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
45 Un foglio di stile XSL E’ un documento XML. Deve iniziare con la dichiarazione di documento XML Il TAG è l’elemento radice del foglio di stile
46 XSLT Namespace 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
47 XSLT: Dichiarazione di Foglio di Stile L’elemento root che dichiara un foglio di stile XSLT è o. Codice di dichiarazione oppure xmlns:xsl=" xmlns:xsl=" identifica il namespace per XSL Occorre includere l’attributo version="1.0"
48 XSLT - xsl:stylesheet Può contenere, ad esempio i seguenti elementi: xsl:import xsl:include xsl:strip-spacexsl:preserve-space xsl:outputxsl:key xsl:decimal-format xsl:namespace-alias xsl:attribute-set xsl:variable xsl:param xsl:template top-level element: top-level element: elemento che compare come figlio di xsl:stylesheet
49 Un esempio <xsl:stylesheet version="1.0” xmlns:xsl=" xmlns:xsl=" … … … … … … </xsl:stylesheet> Se c’è un import deve trovarsi per primo
50 XSLT: Combinare fogli di Stile diversi Due meccanismi per combinare fogli di stile: meccanismo di inclusione un meccanismo di inclusione che permette agli stylesheet di essere combinati senza cambiare la loro semantica e meccanismo di importazione un meccanismo di importazione che permette ai fogli di stile di sovrascriversi
51 Esempio Tag articolo Link ad altro file Tag vuoto
52 Esempio file.xsl Lo trasforma in un file HTML
53 Risultato links