45
eXtensible Stylesheet eXtensible Stylesheet Language Transformations Language Transformations (XSLT) (XSLT) Giuseppe Della Penna Università degli Studi di L’Aquila [email protected] http://dellapenna.univaq.it

eXtensible Stylesheet Language Transformations (XSLT)

  • Upload
    ravi

  • View
    62

  • Download
    0

Embed Size (px)

DESCRIPTION

eXtensible Stylesheet Language Transformations (XSLT). Giuseppe Della Penna Università degli Studi di L’Aquila [email protected] http://dellapenna.univaq.it . CSS e XSL. - PowerPoint PPT Presentation

Citation preview

Page 1: eXtensible Stylesheet Language Transformations  (XSLT)

eXtensible Stylesheet Language eXtensible Stylesheet Language Transformations Transformations

(XSLT)(XSLT)

Giuseppe Della PennaUniversità degli Studi di L’Aquila

[email protected]://dellapenna.univaq.it

Page 2: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 2

CSS e XSL Attualmente, molti creatori di parser XML

supportano l’applicazione 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.

Page 3: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 3

XSL e XSLT XSLT (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 un’altra struttura XML, o persino in un semplice testo.

XSLT possiede molte delle caratteristiche di un linguaggio di programmazione imperativo!

Page 4: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 4

XSLT come formattaore Per quel che riguarda l’abilità 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.

Page 5: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 5

XSLT come trasformatore Questa 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).

Page 6: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 6

XPath XPath è 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.

Page 7: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 7

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 dell’albero. Le relazioni tra i nodi sono semplici:

– Un elemento annidato è un nodo figlio dell’elemento che lo contiene.

– Un attributo è figlio del suo elemento.– Commenti e PI e testo sono figli dell’elemento che li

contiene (o del documento*).

Page 8: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 8

Le espressioni XPath: Gli Assi Muovendosi sull’albero 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).

L’asse degli elementi figli diretti è l’asse predefinito, ed esistono scorciatoie per raggiungere l’asse degli attributi.

Page 9: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 9

Le espressioni XPath: Gli Assi ancestor

– Contiene il padre del nodo, il padre del padre, ecc… ancestor-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).

Page 10: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 10

Le espressioni XPath: Gli Assi descendant-or-self

– Come descendant, ma contiene anche il nodo corrente. following

– Contiene tutti i nodi che si trovano dopo quello corrente all’interno 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 nell’elemento padre di quello corrente e sono posti dopo di esso (“fratelli”).

namespace – Contiene i nodi namespace dichiarati per l’elemento

corrente.

Page 11: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 11

Le espressioni XPath: Gli Assi parent

– Contiene il padre dell’elemento corrente. preceding

– Contiene tutti i nodi che si trovano prima quello corrente all’interno 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 nell’elemento padre di quello corrente e sono posti prima di esso.

self– Contiene il nodo corrente.

Page 12: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 12

Le gerarchie secondo XPath <a>

<c><b/>

</c>

</a>

<d xmlns:y=“…” x=“…”><e/>

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]

</d>

<g/><f>

</f>

<i/>

<h/>

Nodo C

orre

nte

Nodo C

orre

nte

Page 13: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 13

Le espressioni XPath: I Node Tests Per 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 sull’asse 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 è l’insieme dei nodi risultanti dalle applicazioni.

Page 14: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 14

Le espressioni XPath: I Tipi I tipi di nodo sono:

– elemento– attributo– namespace– commento– processing-instruction

Ogni asse ha un tipo predefinito:– se l’asse contiene elementi, il tipo predefinito è

“elemento”– se l’asse non contiene elementi ma contiene attributi,

il tipo predefinito è “attributo”– se l’asse non contiene elementi ma contiene

namespaces, il tipo predefinito è “namespace”

Page 15: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 15

Le espressioni XPath: I Tipi Per indicare tutti i nodi con un particolare tipo, si

usano opportuni test:– comment()– node()– processing-instruction() – text()

I test restituiscono l’insieme dei nodi con quel particolare tipo presenti sull’asse.

Il risultato è un insieme di nodi, ciascuno dei quali può essere ulteriormente attraversato usando XPath.

Page 16: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 16

Le espressioni XPath: I Nomi Alcuni nodi possiedono anche un loro nome:

– I nodi elemento e attributo hanno il nome dell’elemento e dell’attributo 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 sull’asse, con qualunque nome. I test restituiscono l’insieme dei nodi con quel

particolare nome presenti sull’asse.

Page 17: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 17

Le espressioni XPath: Gli Step Una 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/artista Ogni passo agisce sull’insieme 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

Page 18: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 18

Le espressioni XPath: Gli Step Negli esempi proposti prima l’asse di movimento

era sempre quello di default (child). Per muoversi su un altro asse, basta prefissare il

nome del nodo con il nome dell’asse:collezione/descendant::cd/attribute::ID

Esistono 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/@ID– self:: si abbrevia con un punto ‘.’

Page 19: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 19

Le espressioni XPath: I Filtri I 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 è l’insieme dei nodi filtrati.

In ciascuno step si possono inserire un numero arbitrario di filtri, che vengono richiamati nell’ordine in cui si presentano.– I filtri vanno posti nello step sempre dopo il suo node

test.

Page 20: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 20

Le espressioni XPath: I Filtri All’interno del filtro si possono usare espressioni

che abbiano valore booleano (vero / falso). L’espressione del filtro viene valutata usando

ciascun nodo del set come contesto, e se vale true il nodo viene aggiunto all’insieme dei risultati.

Esistono due eccezioni:– Se l’espressione restituisce un numero, viene

selezionato il nodo in quella posizione nell’insieme (gli insiemi di nodi sono ordinati).

– Se l’espressione restituisce un insieme di nodi, allora vale true se l’insieme non è vuoto.

Page 21: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 21

Le espressioni XPath: Operandi nei Filtri All’interno dei filtri si possono usare come

operandi:– Espressioni XPath (compresi altri filtri nidificati!),

che vengono valutate usando come contesto ciascun nodo dell’insieme di input.

– Il “valore” di una espressione XPath, se usata con operatori di confronto, è il testo in essa contenuto (valore dell’attributo o testo all’interno dell’elemento). Se l’espressione è un insieme, XPath restituisce true se c’è almeno un suo elemento che soddisfi il test.

– Costanti numeriche o stringhe tra virgolette.

Page 22: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 22

Le espressioni XPath: I Filtri - Esempi/collection/album[title = “Supernatural”]/@ID

• gli 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]/title

• i titoli di tutte le song nella collection che hanno un attributo album uguale all’ID di uno degli elementi album (presenti in qualunque punto tra i discendenti del contesto corrente) che hanno come title “Supernatural”.

Page 23: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 23

/collection/song[@album = //album[title = “S”]/@ID]/title

<collection>

<song>

</collection>

<title/>

</song>

<song>

<title/>

</song>

<album>

<title/>

</album>

<album>

<title/>

</album>

<song>

<title/>

</song>

<song>

<title/>

</song>

collection/songcollection/song

<album>

<title/>

</album>

<album>

<title/>

</album>

//album//album

<album>

<title/>

</album>

//album[title=“S”]//album[title=“S”]

<song>

<title/>

</song>

collection/song[…]collection/song[…]

<title/>

collection/collection/song[…]/song[…]/

titletitle

Page 24: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 24

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”.

Page 25: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 25

Le espressioni XPath: I Filtri - Esempi//cd[owner = “myself”]/song[@album =

“santana1”]/title• i 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.

Page 26: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 26

Le espressioni XPath: Operatori nei Filtri All’interno dei filtri si possono usare operatori:

– Confronto: ‘=’ (uguale), ‘!=’ (diverso), ‘>’ (maggiore), ‘>=’ (maggiore o uguale), ‘<’ (minore), ‘<=’ (minore o uguale).

– Logici (tra espressioni filtro valide): and, or, not(…)– Insiemistici: (da usare tra insiemi di nodi, ma

all’esterno dei filtri!): ‘|’ (unione).– Raggruppamento (per dare precedenza a certe

espressioni, si possono usare anche all’esterno dei filtri!): ‘(…)’

– Matematici: ‘+’, ‘-’, ‘*’, ‘/’, mod

Page 27: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 27

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.

Page 28: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 28

Le espressioni XPath: Funzioni nei Filtri All’interno dei filtri si possono usare vari tipi di

funzioni:– funzioni su insiemi di nodi– funzioni su stringhe– funzioni numeriche– funzioni booleane– funzioni XSLT - Specifiche (non presenti nella

specifica XPath)

Page 29: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 29

Le espressioni XPath: Funzioni su Nodi Principali funzioni sugli insiemi di nodi:

– count(ns): dimensione dell’insieme di nodi ns.– last(): indice dell’ultimo elemento nell’insieme di nodi

corrente.– position(): posizione del nodo corrente all’interno del

suo genitore.– document(...): permette di accedere a documenti XML

esterni.– id(“…”): restituisce il nodo con l’attributi di tipo ID

avente il valore dato.

Page 30: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 30

Le espressioni XPath: Funzioni sulle Stringhe Principali funzioni sulle stringhe:

– string(o): converte l’oggetto 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 t– substring-before(s,t): la sottostringa di s che arriva

fino ai caratteri t– contains(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.

Page 31: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 31

Le espressioni XPath: Funzioni Booleane Principali funzioni sui valori booleani:

– boolean(o): converte l’oggetto o in un valore booleano.

– true(): vale sempre true.– false(): vale sempre false.– not(e): vale l’opposto di e.

Page 32: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 32

Le espressioni XPath: Funzioni Numeriche Principali funzioni sui valori numerici:

– number(o): converte l’oggetto o in un valore numerico.

– ceiling(x): restituisce l’intero più piccolo che non sia minore di x.

– floor(x): restituisce l’intero 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 nell’insieme ns, e ne restituisce la somma.

Page 33: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 33

Le espressioni XPath: Funzioni XSLT

La funzione più importante in questo insieme è current().

All’interno 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 l’insieme di nodi selezionato fino a quel momento, è necessario usare current() per accedere al contesto XSLT.

Page 34: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 34

Le espressioni XPath: I Filtri - Esempi//song[position() = last()]

• l’ultima song nel documento.//cd[sum(song/length) > 60]/title

• i 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 l’attributo date è del tipo “…/…/2000”//album[@ID = current()/@album]

• gli album il cui attributo ID è uguale all’attributo album del contesto esterno corrente.

Page 35: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 35

Un Documento XSLT<?xml version="1.0" encoding="UTF-8"?><!-- edited with XML Spy v3.0 by Giuseppe Della Penna --><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

xmlns="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><xsl:template match="/">

<html><body><table width="100%"><xsl:for-each select="//CD">

<xsl:apply-templates/><xsl:sort select="artist" order="ascending"/>

</xsl:apply-templates></xsl:for-each></table></body></html>

</xsl:template>

Continua...

Page 36: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 36

Un Documento XSLT<xsl:template match=”song"><tr><xsl:attribute name="bgcolor">

<xsl:if test="position() mod 2 = 1">aqua</xsl:if></xsl:attribute><td><xsl:value-of select="artist"/></td><td><b><xsl:value-of select="title"/></b></td><td><xsl:choose>

<xsl:when test="@album"><xsl:value-of select="//album[@ID = current()/@album]/title"/>

</xsl:when><xsl:when test="album-title">

<xsl:value-of select="album-title"/></xsl:when><xsl:otherwise>&#160;</xsl:otherwise>

</xsl:choose></td></tr></xsl:template></xsl:stylesheet> Continua...

Page 37: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 37

Struttura generale Un documento XSLT, come ogni documento

XML, inizia con una dichiarazione XML.<?xml version="1.0" encoding="UTF-8"?>

L’elemento 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:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Page 38: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 38

I Template Un template è una subroutine di

trasformazione. L’XPath fornito dall’attributo match viene usato

per filtrare il contesto: tutti i nodi filtrati vengono elaborati nel template.

<template match="song">...</template> Ogni stylesheet deve avere un template con

match=“/”, la sua procedura main, che viene chiamata all’avvio con tutto il documento come insieme di nodi.

<template match="/"> E’ anche possibile passare parametri a un

template quando viene chiamato!

Page 39: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 39

I Template Un template può venir chiamato da un altro in

due modi: per nome o per selezione.<call-template name="..."/>

– richiama il template con l’attributo name dato. In questo caso l’attributo match del template è ignorato.

<apply-templates select="e" mode="m"/>– richiama il template che fa match con i nodi

selezionati da e nel contesto corrente (opzionale) e con attributo mode uguale a quello dato (opzionale).

– Con questa forma è possibile gestire documenti dalla struttura complessa e ricorsiva, lasciando al parser il compito di cercare il template adatto agli elementi che incontra.

Page 40: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 40

Output di Valori Per trascrivere nel documento di output i

valori dei nodi XML si usa la funzione<value-of select="e"/>

e è un XPath. Il valore del suo risultato, come definito nella specifica XPath, viene trascritto nel documento.

Page 41: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 41

Output di Markup In generale, tutto ciò che non è un elemento

XSLT nel foglio di stile viene copiato in output quando il parser lo incontra. In questo modo è possibile inserire markup HTML o di un altro linguaggio direttamente nello stylesheet.– Se il valore di un attributo o il nome di un elemento

devono essere generati dinamicamente (in base al contenuto del documento), si possono usare gli elementi

<attribute name="nome">…valore…</attribute><element name="{espressione}">...</element>

– notare che all’interno delle virgolette è possibile avere valori interpretati dal parser XSLT se posti tra graffe.

Page 42: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 42

Iterazione Per iterare sugli elementi di un insieme di nodi

è disponibile la funzione<for-each select="xpath">...</for-each>

Il frammento di stylesheet all’interno dell’elemento viene applicato a tutti i nodi selezionati dall’XPath specificato.

E’ possibile ordinare l’insieme dei nodi prima di applicarvi il frammento di stylesheet inserendo, immediatamente dopo il tag di apertura (anche nelle chiamate ai template), elementi del tipo:<sort select= "xpath-ordinamento" order="ascending"/>

Page 43: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 43

Applicazione condizionale Esistono due costrutti XSLT che consentono di

eseguire frammenti di stylesheet solo se particolari condizioni sono vere.

<if test="xpath-filter">...</if> All’interno dell’attributo select valgono le regole

dei filtri di XPath. Se il filtro ha valore vero, il frammento di stylesheet contenuto nell’elemento if viene eseguito. In caso contrario, tutto il contenuto dell’elemento viene ignorato.

Page 44: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 44

Applicazione condizionale / 2<choose>

<when test="xpath-filter">…</when>...<otherwise>…</otherwise>

</choose> L’elemento select equivale all’istruzione switch

del C. Vengono applicati nell’ordine al contesto corrente tutti i filtri XPath degli elementi when. Viene valutato solo il frammento di codice contenuto nel primo when che ha test positivo. Se nessun when è positivo, viene valutato il frammento contenuto in otherwise, se presente.

Page 45: eXtensible Stylesheet Language Transformations  (XSLT)

XSL Transformations / 45

Riferimenti

Specifica di XSLT dal W3Chttp://www.w3c.org/TR/xslt/

Specifica di XPath dal W3Chttp://www.w3c.org/TR/xpath/