eXtensible Stylesheet Language Transformations (XSLT)

  • Published on
    11-Feb-2016

  • View
    28

  • Download
    0

DESCRIPTION

eXtensible Stylesheet Language Transformations (XSLT). Giuseppe Della Penna Universit degli Studi di LAquila gdellape@univaq.it http://dellapenna.univaq.it . CSS e XSL. - PowerPoint PPT Presentation

Transcript

  • eXtensible Stylesheet Language Transformations (XSLT)Giuseppe Della PennaUniversit degli Studi di LAquila

    gdellape@univaq.ithttp://dellapenna.univaq.it

    XSL Transformations

  • CSS e XSLAttualmente, molti creatori di parser XML supportano lapplicazione diretta di fogli di stile CSS (Cascading Style Sheets) a documenti XML, per definirne un formato di visualizzazione.XSL o eXtensible Stylesheet Language, un linguaggio XML creato inizialmente per fornire a XML un supporto per la formattazione simile a CSS, ma potenziato per riflettere il linguaggio su cui viene applicato, che non pi HTML.

    XSL Transformations

  • XSL e XSLTXSLT (XSL Transformations) il successore di XSL, ed estende il concetto di foglio di stile fino a permettere la manipolazione della struttura stessa del documento.XSLT permette di trasformare un documento XML filtrandone i dati e riorganizzandoli in unaltra struttura XML, o persino in un semplice testo.XSLT possiede molte delle caratteristiche di un linguaggio di programmazione imperativo!

    XSL Transformations

  • XSLT come formattaorePer quel che riguarda labilit di generare una presentazione dei dati XML, XSLT dispone attualmente di due metodi:E possibile trasformare il documento XML in un documento XHTML, per poi farlo visualizzare in qualsiasi browser.E possibile usare gli XSL Formatting Objects, che definiscono il formato di visualizzazione senza presupporre la trasformazione in HTML o in altri linguaggi di presentazione.

    XSL Transformations

  • XSLT come trasformatoreQuesta funzionalit, del tutto nuova, la pi interessante.Con XSLT possibile modificare al volo la struttura che accoglie i dati, e in parte anche i dati stessi. Questo permette, ad esempio:di offrire viste differenti sugli stessi dati a utenti differenti.di esportare i dati in un formato noto, come HTML o PDF.di adattare i dati a diversi dispositivi di visualizzazione (vedasi HTML e WML).

    XSL Transformations

  • XPathXPath una parte fondamentale di XSLT e di altre specifiche come XLink. XPath un linguaggio che permette di indirizzare parti di un documento XML.XPath dispone anche di primitive per eseguire semplici operazioni su stringhe, numeri e valori booleani.Le espressioni XPath possono avere come valore numeri, stringhe, booleani e insiemi di nodi.

    XSL Transformations

  • Il documento secondo XPath Dal punto di vista di XPath, il documento XML un albero.Ogni elemento, commento, attributo, PI o stringa di testo (non-markup) un nodo dellalbero.Le relazioni tra i nodi sono semplici: Un elemento annidato un nodo figlio dellelemento che lo contiene.Un attributo figlio del suo elemento.Commenti e PI e testo sono figli dellelemento che li contiene (o del documento*).

    XSL Transformations

  • Le espressioni XPath: Gli AssiMuovendosi sullalbero del documento, XPath permette di scegliere non solo tra i figli del nodo corrente, ma anche tra una serie di altri insiemi di nodi che sono in relazione con esso.Questi insiemi di nodi si dicono assi. Ogni passo di una espressione XPath pu avvenire su un asse arbitrario a partire dal nodo corrente (o contesto). Lasse degli elementi figli diretti lasse predefinito, ed esistono scorciatoie per raggiungere lasse degli attributi.

    XSL Transformations

  • Le espressioni XPath: Gli AssiancestorContiene il padre del nodo, il padre del padre, eccancestor-or-self Come ancestor, ma contiene anche il nodo corrente. attribute Contiene gli attributi del nodo corrente. child Contiene gli elementi direttamente annidati nel nodo corrente. descendant Contiene tutti gli elementi annidati nel nodo corrente (con livello di annidamento arbitrario).

    XSL Transformations

  • Le espressioni XPath: Gli Assidescendant-or-self Come descendant, ma contiene anche il nodo corrente. following Contiene tutti i nodi che si trovano dopo quello corrente allinterno del documento, esclusi i discendenti, gli attributi del nodo e i namespaces. following-sibling Contiene tutti i nodi che hanno lo stesso livello di nidificazione nellelemento padre di quello corrente e sono posti dopo di esso (fratelli).namespace Contiene i nodi namespace dichiarati per lelemento corrente.

    XSL Transformations

  • Le espressioni XPath: Gli AssiparentContiene il padre dellelemento corrente.preceding Contiene tutti i nodi che si trovano prima quello corrente allinterno del documento, esclusi i suoi antenati (ancestors), gli attributi del nodo e i namespaces.preceding-sibling Contiene tutti i nodi che hanno lo stesso livello di nidificazione nellelemento padre di quello corrente e sono posti prima di esso. selfContiene il nodo corrente.

    XSL Transformations

  • Le gerarchie secondo XPath

    ancestor: [c,a]ancestor-or-self: [d,c,a] attribute: [x]child: [f]descendant: [f,g]descendant-or-self: [d,f,g]following: [i,h]following-sibling: [i]namespace: [y]parent: [c]preceding: [b,e]preceding-sibling: [e]self: [d]

    Nodo Corrente

    XSL Transformations

  • Le espressioni XPath: I Node TestsPer individuare un particolare nodo su un asse, si usano il suo tipo e/o il suo nome tramite i cosiddetti node tests.In entrambi i casi, il risultato pu anche essere un insieme di nodi, nel caso sullasse siano disponibili pi nodi con lo stesso tipo e/o nome.Nel caso si lavori su un insieme di nodi, tutte le operazioni vengono applicate iterativamente a ciascun nodo, e il risultato linsieme dei nodi risultanti dalle applicazioni.

    XSL Transformations

  • Le espressioni XPath: I TipiI tipi di nodo sono:elementoattributonamespacecommentoprocessing-instructionOgni asse ha un tipo predefinito:se lasse contiene elementi, il tipo predefinito elementose lasse non contiene elementi ma contiene attributi, il tipo predefinito attributose lasse non contiene elementi ma contiene namespaces, il tipo predefinito namespace

    XSL Transformations

  • Le espressioni XPath: I TipiPer indicare tutti i nodi con un particolare tipo, si usano opportuni test:comment()node()processing-instruction() text()I test restituiscono linsieme dei nodi con quel particolare tipo presenti sullasse.Il risultato un insieme di nodi, ciascuno dei quali pu essere ulteriormente attraversato usando XPath.

    XSL Transformations

  • Le espressioni XPath: I NomiAlcuni nodi possiedono anche un loro nome:I nodi elemento e attributo hanno il nome dellelemento e dellattributo stessi.Per indicare il nodo con un particolare nome, si usa semplicemente il nome stesso come test.Lo speciale test * fa match con tutti i nodi accessibili sullasse, con qualunque nome.I test restituiscono linsieme dei nodi con quel particolare nome presenti sullasse.

    XSL Transformations

  • Le espressioni XPath: Gli StepUna espressione XPath consiste in una serie di step (passi) costituiti da node tests, ognuno su un proprio asse, separati da uno slash /, in maniera simile agli URI.collezione/node()/cd/artistaOgni passo agisce sullinsieme di nodi (contesto) ottenuto dal passo precedente.Il primo passo ha un contesto fornito dall ambiente, o la radice del documento se il path inizia esso stesso con uno slash./collezione/cd/artista

    XSL Transformations

  • Le espressioni XPath: Gli StepNegli esempi proposti prima lasse di movimento era sempre quello di default (child).Per muoversi su un altro asse, basta prefissare il nome del nodo con il nome dellasse:collezione/descendant::cd/attribute::IDEsistono delle scorciatoie per i tre assi pi usati:descendants:: si abbrevia con uno slash / (/descendants:: si scrive // )attribute:: si abbrevia con una chiocciola @.collezione//cd/@IDself:: si abbrevia con un punto .

    XSL Transformations

  • Le espressioni XPath: I FiltriI Filtri in XPath corrispondono grossolanamente alla parte where delle query SQL.I Filtri agiscono sugli insiemi di nodi, selezionandone una parte secondo particolari criteri.Il risultato di un filtro linsieme dei nodi filtrati.In ciascuno step si possono inserire un numero arbitrario di filtri, che vengono richiamati nellordine in cui si presentano.I filtri vanno posti nello step sempre dopo il suo node test.

    XSL Transformations

  • Le espressioni XPath: I FiltriAllinterno del filtro si possono usare espressioni che abbiano valore booleano (vero / falso).Lespressione del filtro viene valutata usando ciascun nodo del set come contesto, e se vale true il nodo viene aggiunto allinsieme dei risultati.Esistono due eccezioni:Se lespressione restituisce un numero, viene selezionato il nodo in quella posizione nellinsieme (gli insiemi di nodi sono ordinati).Se lespressione restituisce un insieme di nodi, allora vale true se linsieme non vuoto.

    XSL Transformations

  • Le espressioni XPath: Operandi nei FiltriAllinterno dei filtri si possono usare come operandi:Espressioni XPath (compresi altri filtri nidificati!), che vengono valutate usando come contesto ciascun nodo dellinsieme di input.Il valore di una espressione XPath, se usata con operatori di confronto, il testo in essa contenuto (valore dellattributo o testo allinterno dellelemento). Se lespressione un insieme, XPath restituisce true se c almeno un suo elemento che soddisfi il test.Costanti numeriche o stringhe tra virgolette.

    XSL Transformations

  • Le espressioni XPath: I Filtri - Esempi/collection/album[title = Supernatural]/@IDgli ID di ogni album nella collection che abbia un (figlio) title contenente il testo Supernatural./collection/album[@ID = 123]tutti gli album nella collection con ID uguale a 123./collection/song[@album = //album[title = Supernatural]/@ID]/titlei titoli di tutte le song nella collection che hanno un attributo album uguale allID di uno degli elementi album (presenti in qualunque punto tra i discendenti del contesto corrente) che hanno come title Supernatural.

    XSL Transformations

  • /collection/song[@album = //album[title = S]/@ID]/title

    collection/song

    //album

    //album[title=S]

    collection/song[]

    collection/ song[]/ title

    XSL Transformations

  • Le espressioni XPath: I Filtri - Esempi//album/title[ . = Supernatural]il title di tutti gli album intitolati Supernatural (!)./collection/song[comment]tutte le song nella collection che hanno un comment./collection/song[comment[1] = Hit]tutte le song nella collection il cui primo comment contiene il testo Hit (non sottostringa!).//album[3]il terzo elemento album presente in tutto il file XML.//song[1][@album = santana1]la prima song nel documento, se ha un attributo album con valore santana1.

    XSL Transformations

  • Le espressioni XPath: I Filtri - Esempi//cd[owner = myself]/song[@album = santana1]/titlei title di tutte le song aventi un attributo album con valore santana1 che si trovano in un cd avente un elemento figlio owner con valore myself.//*[self::song or self::album]tutti i nodi song o album nel documento corrente, a qualsiasi livello di nidificazione.

    XSL Transformations

  • Le espressioni XPath: Operatori nei FiltriAllinterno dei filtri si possono usare operatori:Confronto: = (uguale), != (diverso), > (maggiore), >= (maggiore o uguale),
  • Le espressioni XPath: I Filtri - Esempi//album[@tracks >= 5]tutti gli album con attributo tracks avente valore maggiore di cinque.//song[title and artist]tutte le song aventi (almeno) un figlio title e un figlio artist.//song[@album != santana1 and not(comment)]tutte le song con un attributo album con valore diverso da santana1 e senza figli comment.//cd/song[1]la prima song di tutti i cd.(//cd/song)[1]la prima di tutte le song in tutti i cd.

    XSL Transformations

  • Le espressioni XPath: Funzioni nei FiltriAllinterno dei filtri si possono usare vari tipi di funzioni:funzioni su insiemi di nodifunzioni su stringhefunzioni numerichefunzioni booleanefunzioni XSLT - Specifiche (non presenti nella specifica XPath)

    XSL Transformations

  • Le espressioni XPath: Funzioni su NodiPrincipali funzioni sugli insiemi di nodi:count(ns): dimensione dellinsieme di nodi ns.last(): indice dellultimo elemento nellinsieme di nodi corrente.position(): posizione del nodo corrente allinterno del suo genitore.document(...): permette di accedere a documenti XML esterni.id(): restituisce il nodo con lattributi di tipo ID avente il valore dato.

    XSL Transformations

  • Le espressioni XPath: Funzioni sulle StringhePrincipali funzioni sulle stringhe:string(o): converte loggetto o in una stringa.concat(s1,s2,...): concatena pi stringhe.substring(s,x,y): sottostringa di s che inizia al carattere x ed lunga y (opzionale)substring-after(s,t): la sottostringa di s che inizia dopo i caratteri tsubstring-before(s,t): la sottostringa di s che arriva fino ai caratteri tcontains(s,t): vero se s contiene t.starts-with(s,t): vero se s inizia con t.string-length(s): la lunghezza della stringa s.

    XSL Transformations

  • Le espressioni XPath: Funzioni BooleanePrincipali funzioni sui valori booleani:boolean(o): converte loggetto o in un valore booleano.true(): vale sempre true.false(): vale sempre false.not(e): vale lopposto di e.

    XSL Transformations

  • Le espressioni XPath: Funzioni NumerichePrincipali funzioni sui valori numerici:number(o): converte loggetto o in un valore numerico.ceiling(x): restituisce lintero pi piccolo che non sia minore di x.floor(x): restituisce lintero pi grande che non sia maggiore di x.round(x): arrotonda x a un intero.sum(ns): converte in numeri (usando number()) tutti i nodi nellinsieme ns, e ne restituisce la somma.

    XSL Transformations

  • Le espressioni XPath: Funzioni XSLTLa funzione pi importante in questo insieme current().Allinterno dei filtri, spesso necessario fare riferimento al contesto esterno in cui il filtro inserito (fornito da XSLT, come si vedr dopo).Poich i path relativi (che non iniziano con /) nei filtri hanno sempre come contesto linsieme di nodi selezionato fino a quel momento, necessario usare current() per accedere al contesto XSLT.

    XSL Transformations

  • Le espressioni XPath: I Filtri - Esempi//song[position() = last()]lultima song nel documento.//cd[sum(song/length) > 60]/titlei titoli di tutti i cd in cui la durata totale delle song maggiore di 60.//cd[count(song) < 12]i cd con meno di 12 song.//album[substring-after(substring-after(@date),/),/) = 2000]gli album in cui lattributo date del tipo //2000//album[@ID = current()/@album]gli album il cui attributo ID uguale allattributo album del contesto esterno corrente.

    XSL Transformations

  • Un Documento XSLT

    Continua...

    XSL Transformations

  • Un Documento XSLT
  • Struttura generaleUn documento XSLT, come ogni documento XML, inizia con una dichiarazione XML.

    Lelemento root stylesheet. Se il documento deve emettere HTML o un altro linguaggio, bisogna dichiarare entrambi i namespaces. Di solito il linguaggio target viene usato come default namespace, quindi tutti gli elementi XSLT vanno prefissati con il loro namespace (xsl:).

    XSL Transformations

  • I TemplateUn template una subroutine di trasformazione.LXPath fornito dallattributo match viene usato per filtrare il contesto: tutti i nodi filtrati vengono elaborati nel template....Ogni stylesheet deve avere un template con match=/, la sua procedura main, che viene chiamata allavvio con tutto il documento come insieme di nodi.

    E anche possibile passare parametri a un template quando viene chiamato!

    XSL Transformations

  • I TemplateUn template pu venir chiamato d...

Recommended

View more >