+ All Categories
Home > Documents > XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2...

XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2...

Date post: 01-May-2015
Category:
Upload: romolo-pepe
View: 216 times
Download: 0 times
Share this document with a friend
Popular Tags:
44
XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale Laurea Magistrale in Informatica in Informatica Reti 2 (2005/06) Reti 2 (2005/06) dott. Francesco De Angelis [email protected]
Transcript
Page 1: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT (eXtensible Stylesheet

Language Transformation)

Laurea Magistrale Laurea Magistrale in Informaticain Informatica

Reti 2 (2005/06)Reti 2 (2005/06)

dott. Francesco De [email protected]

Page 2: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 2

Agenda

XSL e XSLT Modello XSLT I template Creazione di Elementi Creazione di Attributi Prelievo di valori Definizione della struttura di destinazione Iterazione Istruzioni condizionali Ordinamento Stile Iterativo e ricorsivo Esempi…

Page 3: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 3

CSS e XSL

CSS (Cascading Style Sheets) è un linguaggio puramente descrittivo. Assegna ai nodi del documento XML una caratterizzazione tipografica senza nessuna modifica strutturale o organizzativa

XSL (eXtensible Stylesheet Language), invece, permette sia caratterizzazione tipografica che riscrittura, ovvero la possibilità di organizzare il contenuto finale in maniera diversa dall'originale

Page 4: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 4

XSL e XSLT

XSLT (XSL Transformation) 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!

La proposta è divisa in due parti: un linguaggio di trasformazione, XSLT un vocabolario di elementi XML con semantica di

formattazione, XSL-FO (XSL Formatting Object) XSLT, inoltre, si basa su XPath

Page 5: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 5

XSLT come formattatore

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 Object, che definiscono il formato di visualizzazione senza presupporre la trasformazione in HTML o in altri linguaggi di presentazione.

Page 6: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 6

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

Page 7: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 7

Il modello di XSLT

processore XSLT

input

output

Page 8: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 8

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 namespace 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 9: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 9

I fogli di stile XSLT

Un foglio di stile XSL è composto sostanzialmente di template di costruzione, che permettono di riscrivere, modificandola, una selezione del documento XML d’origine nel documento destinazione Ogni template individua un pattern da ricercare nel documento di partenza, e vi associa un blocco di elementi e testo da inserire nel documento di destinazione Un template è indicato dall’elemento template

<xsl:template match=pattern name=qname priority=number mode=qname > <!-- azione -->

</xsl:template>

Page 10: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 10

I template

Ad esempio, dato il frammento:Questo deve essere <emph>importante</emph>

Il seguente template: <xsl:template match=“emph”>

<html:b> <xsl:apply-templates/> </html:b></xsl:template>

Fa match con l’elemento emph e scrive un elemento b di HTML ed inserisce tutti i nodi figlio del nodo di match nella lista dei nodi correnti Il pattern in questo caso è un XPath relativo (equivalente a child::emph). Qualunque XPath che ritorni un nodeset può essere inserito nell'attributo match.

Page 11: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 11

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="/">

All’interno dell’elemento template vi sono una varietà di istruzioni che servono o per modificare la lista di nodi o per scrivere frammenti dell’albero di destinazione.

Page 12: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 12

I template

<xsl:apply-templates select="e" mode="m"/><xsl:apply-templates/>

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

Nel corso del processing qualunque nodo può essere inserito, anche più volte, nel documento, e in qualunque ordine (non è uno stack!).

il parser sospende il processing del template in corso e procede ricorsivamente ad esaminare i figli.

Page 13: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 13

Questo template trasforma un “para” in un “p” di HTML:

<xsl:template match=”PARA"> <P><xsl:apply-templates/></P> </xsl:template>

Esempio <xsl:apply-templates>

Page 14: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 14

Dentro il template scrivere direttamente il frammento XML richiesto.

Ogni elemento che non appartiene al namespace di XSL viene direttamente scritto nell’albero di destinazione così come appare nel template

Analogamente viene fatto per ogni nodo di testo<xsl:template match=“pippo”>

<b>Pippo</b></xsl:template>

Creazione di Elementi

Page 15: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 15

Se è necessario scrivere un elemento complesso o calcolato si usa <xsl:element> Ad esempio può servire per trasformare il valore di un attributo del documento di partenza nel nome di un tag nel documento destinazione Dato il frammento

<persona tipo=”studente” nome=”Mario Rossi”/> e il template

<xsl:template match=“persona”> <xsl:element name=“{@tipo}”> <xsl:value-of select=“@nome”/> </xsl:element></xsl:template>

ottengo il frammento<studente>Mario Rossi</studente>

Creazione di Elementi

Page 16: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 16

All’interno di un elemento è possibile specificare degli attributi in maniera esplicita con il tag <xsl:attribute> E’ più chiaro e più potente delle parentesi graffe. Lo si può usare per stabilire con espressione anche il nome dell’attributo. Dato il frammento

<persona id=”1678.1245” nome=”Mario Rossi”/> e il template

<xsl:template match=“persona”> <A><xsl:attribute name=“HREF”> <xsl:value-of select=“@id”/>.html </xsl:attribute> <xsl:value-of select=“@nome”/></A></xsl:template>

ottengo il frammento<A HREF=“1678.1245.html”>Mario Rossi</A>

Creazione di Attributi

Page 17: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 17

<xsl:value-of> crea un nodo di testo nell’albero di destinazione. L’attributo select (obbligatorio) contiene un espressione XPath che viene valutata e convertita in stringa. La stringa viene combinata con gli altri nodi di testo intorno L’uso tipico è per convertire markup in testo (ad esempio il valore di attributi in contenuto). Dato il frammento

<persona nome=”Mario” cognome=”Rossi”/> e il template

<xsl:template match=“persona”> <p><xsl:value-of select=“@nome”/> <xsl:text> </xsl:text> <xsl:value-of select=“@cognome”/></p></xsl:template>

ottengo il frammento<p>Mario Rossi</p>

Prelievo di valori

Page 18: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 18

Laddove non sia possibile usare del markup (ad esempio come valore di un attributo), è possibile usare le parentesi graffe, che hanno in questo senso lo stesso significato di <xsl:value-of> L’uso tipico è per convertire markup in altro markup (ad esempio il valore di un attributo nel nome di un tag). Dato il frammento

<persona nome=”Mario” cognome=”Rossi”/> e il template

<xsl:template match=“persona”> <a href=“mailto:{@nome}.{@cognome}@unicam.it”>

<xsl:value-of select=“@nome”/> </a></xsl:template>

ottengo il frammento<a href=“mailto:[email protected]”>Mario</a>

Uso delle graffe {}

Page 19: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 19

<xsl:text> Inserisce esplicitamente il testo contenuto dentro al documento E’ vantaggioso rispetto a mettere il testo letterale perché rispetta il white

space. Inoltre con l'attributo disable-output-escaping="yes" rispetta anche i caratteri speciali (“&” e “<“)

<xsl:processing-instruction> Altrimenti le processing instruction dentro al foglio di stile vengono

ignorate, non trasferite Ad esempio,

<xsl:processing-instruction name="xml-stylesheet"> href="book.css" type="text/css”</xsl:processing-instruction>genera il seguente output:<?xml-stylesheet href="book.css" type="text/css"?>

<xsl:comment> Inserisce esplicitamente del commento dentro al documento

Definire l’albero di destinazione

Page 20: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 20

<xsl:namespace-alias> Permette di specificare esplicitamente il namespace di

arrivo <xsl:copy>

Copia nell’output il nodo di riferimento, insieme al suo namespace, ma non al suo contenuto e ai suoi attributi, che vanno copiati esplicitamente.

<xsl:number> Viene usato per inserire esplicitamente numeri formattati

dentro all’albero dei risultati.

Definire l’albero di destinazione

Page 21: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 21

Per applicare un comportamento specifico ad ognuno dei figli direttamente dentro al template si utilizza <xsl:for-each> Ad esempio il template: <xsl:template match=”BODY"> <xsl:apply-templates select=“H1”/></xsl:template><xsl:template match=”H1"> <P><xsl:value-of select=“.”/></P></xsl:template> viene più facilmente realizzato così: <xsl:template match=”BODY"> <xsl:for-each select=“H1”/> <P><xsl:value-of select=“.”/></P> </xsl:for-each></xsl:template>

Iterazione <xsl:for-each>

Page 22: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 22

<xsl:if> attiva condizionalmente dei comportamenti a seconda della verità di un XPath di test. Ad esempio il template seguente colora di giallo lo sfondo di una riga ogni due di una tabella HTML: <xsl:template match="item"> <tr> <xsl:if test="position() mod 2 = 0"> <xsl:attribute name="bgcolor"> yellow </xsl:attribute> </xsl:if> <xsl:apply-templates/> </tr></xsl:template>

Istruzioni condizionali <xsl:if>

Page 23: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 23

<xsl:choose> seleziona una tra molte alternative (la funzione di switch in java)<xsl:template match="item"> <tr> <xsl:choose> <xsl:when test="position() mod 3 = 0"> <xsl:attribute name="bgcolor">blue</xsl:attribute> </xsl:when> <xsl:when test="position() mod 3 = 1"> <xsl:attribute name="bgcolor">green</xsl:attribute> </xsl:when> <xsl:otherwise> <xsl:attribute name="bgcolor">red</xsl:attribute> </xsl:otherwise> </xsl:choose> <xsl:apply-templates/> </tr> </xsl:template>

Istruzioni condizionali <xsl:choose>

Page 24: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 24

<xsl:sort> ordina i nodi nella lista dei nodi correnti. Esso può essere soltanto figlio di un <xsl:apply-templates> o di un <xsl:for-each>

Gli elementi <xsl:sort> possono annidarsi Vari attributi:

Select: l’espressione in base alla quale fare il sort Data-type: il tipo di dato da ordinare (numero o

testo o altro) Order: il tipo ascendete o discendente di ordine Case-order: come trattare le maiuscole e le

minuscole

Ordinamento <xsl:sort>

Page 25: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 25

<xsl:template match=”lista"> <ul> <xsl:apply-templates select=“persona”> <xsl:sort select=”cognome"/> <xsl:sort select="nome"/> </xsl:apply-templates> </ul></xsl:template><xsl:template match=”persona"> <li> <xsl:value-of select=”nome"/> <xsl:text> </xsl:text> <xsl:value-of select=”cognome"/> </li></xsl:template>

Esempio di ordinamento

Page 26: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 26

Fogli di stile Pull o Push

Nel documento XSLT si usano dunque elementi provenienti da almeno due namespace: quello di XSLT e quello del modello di documenti di destinazione Esistono due filosofie di riscrittura disponibili in XSLT

Iterativo, o Pull: basata su template, viene usata tipicamente per trasformare dati. In un documento pre-formattato per l’output, si vanno ad inserire le parti di documento tratte dal file XML d’origine

Ricorsivo, o Push: basata su regole, usata tipicamente per trasformare documenti

Page 27: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 27

Stile iterativo (Pull)

I fogli di stile tipo pull sono adatti per riscrivere documenti XML dalla struttura di database, molto ripetitivi:<portfolio> <stock exchange="nyse"> <name>zacx corp</name> <sym>ZCXM</sym> <pr>28.875</pr> </stock> <stock exchange="nasdaq"> <name>zaffymat inc</name> <sym>ZFFX</sym> <pr>92.250</pr> </stock> <stock exchange="nasdaq"> <name>zysmergy inc</name> <sym>ZYSZ</sym> <pr>20.313</pr> </stock> </portfolio>

Page 28: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 28

Stile iterativo (Pull)

Questo è un foglio di stile XSLT di tipo pull per generare un documento HTML con quei dati:

<HTML xmlns:xsl=“http://www.w3.org/1999/XSL/Transform” xmlns=“http://www.w3.org/HTML4/”> <BODY> <TABLE BORDER="2"> <TR><TD>Simbolo</TD><TD>Nome</TD><TD>Prezzo</TD></TR> <xsl:for-each select="portfolio/stock"> <TR> <TD><xsl:value-of select="sym"/></TD> <TD><xsl:value-of select="name"/></TD> <TD><xsl:value-of select="pr"/></TD> </TR> </xsl:for-each> </TABLE> </BODY> </HTML>

Page 29: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 29

Stile iterativo (Pull)

Questo è sostanzialmente un documento HTML con qualche tag strano

xsl:for-each va a cercare uno ad uno una sequenza di elementi ed applica le istruzioni al suo interno per ciascun elemento

xsl:value-of va a cercare il valore (cioè il contenuto) di ogni elemento all’interno di xsl:foreach, e lo inserisce al suo posto

Page 30: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 30

Stile ricorsivo (Push)

Supponiamo di avere questo documento XML dalla struttura di documento, molto diversificato:

<document> <title>To the Pole and Back</title> <section> <title>The First Day</title> <para>It was the <emph>best</emph> of days, it was the <emph>worst </emph> of days.</para> <para><emph>Best</emph> in that the sun was out, but <emph>worst</emph> in that it was 39 degrees below zero.</para> </section> ...</document>

Page 31: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 31

Stile ricorsivo (Push)

Questo è un foglio di stile XSLT di tipo push:<xsl:stylesheet version="1.0" xmlns:xsl=“http://www.w3.org/1999/XSL/Transform” xmlns=“http://www.w3.org/HTML4/”> <xsl:template match="/"> <HTML> <BODY> <H1><xsl:value-of select="document/title"/></H1> <xsl:apply-templates select="document/section"/> </BODY> </HTML> </xsl:template> <xsl:template match="section"> <HR/><H2><xsl:value-of select="title"/></H2> <xsl:apply-templates select="para"/> </xsl:template> <xsl:template match="para"> <P><xsl:apply-templates /></P> </xsl:template> <xsl:template match="emph"> <I><xsl:apply-templates /></I> </xsl:template> </xsl:stylesheet>

Page 32: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 32

Questo non assomiglia ad un documento HTML, ma ad una serie di istruzioni di riscrittura separate:

xsl:template è la regola da applicare se l’elemento in esame corrisponde al valore dell’attributo match. Di volta in volta verrà applicato il template della radice (“/”), dell’elemento “section”, dell’elemento “para”, dell’elemento “emph”, ecc

xsl:apply-templates spinge a cercare, all’interno dell’elemento che stiamo considerando, se esistono altri template applicabili. E’ il modo per far ripartire ricorsivamente la ricerca di altri template

Stile ricorsivo (Push)

Page 33: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 33

Uso di variabili

E’ possibile definire delle variabili. Il valore di una variabile è quello di qualunque espressione.

La variabile può essere usata nel sottoalbero in cui è definita e deve essere richiamata con l’uso delle graffe e del segno $<xsl:variable name=”fs">12pt</xsl:variable><xsl:template match="para"> <fo:block font-size="{$fs}"> <xsl:apply-templates/> </fo:block></xsl:template>

Attenzione: la variabile XSLT non è variabile!!!, ovvero il suo valore non può essere cambiato durante la computazione. E' una costante ottenuta attraverso la valutazione di un'espressione, non una variabile.

Page 34: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 34

Merging E’ possibile porre frammenti di fogli di stile in file esterni. Con gli

elementi <xsl:import> e <xsl:include> è possibile inserire frammenti esterni con due significati leggermente diversi: <xsl:import> modifica, diminuendola, la priorità degli elementi inclusi, mentre <xsl:include> la mantiene

Metodi di output E’ possibile specificare che il documento risultante è XML, HTML o testo

con l’elemento <xsl:output>. Se l’output è HTML o testo, il processore è meno rigoroso nel valutare la buona forma del documento risultante

White space E’ possibile specificare quali elementi debbano preservare e quali

debbano collassare il white space con due appositi elementi, <xsl:preserve-space> e <xsl:strip-space>

Altri aspetti di XSLT

Page 35: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 35

<publisher><books>

<book><title>Stranger in a strange land</title><author-ref ref="rh"/></book>

<book><title>Starman Jones</title><author-ref ref="rh"/><author-ref ref="jldr"/></book>

<book><title>The Space Merchants</title><author-ref ref="fp"/><author-ref ref="ck"/></book>

</books>

Un esempio complesso

Page 36: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 36

<authors><author id="rh">

<name>Robert Heinlein</name></author><author id="ck">

<name>Cyril Kornbluth</name></author><author id="fp">

<name>Frederick Pohl</name></author><author id="jldr">

<name>Judy-Lyn Del Rey</name></author></authors></publisher>

Un esempio complesso

Page 37: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 37

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

<xsl:variable name="books_by_rh"select="//book[author-ref/@ref='rh']"/>

<xsl:variable name="more_than_one_auth"select="//book[count(author-ref) &gt; 1]"/>

<xsl:template match="/">Total number of books by Robert Heinlein: <xsl:value-of select="count($books_by_rh)" />Total number of books by several authors: <xsl:value-of select="count($more_than_one_auth)" />Number of books in the union of the two sets<xsl:value-of select="count($books_by_rh |

$more_than_one_auth)"/></xsl:template></xsl:stylesheet>

Un esempio complesso

Page 38: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 38

La trasformazione genera un documento XML composto da un solo nodo di testo

<?xml version="1.0" encoding="utf-8"?>Total number of books by Robert Heinlein: 2Total number of books by several authors: 2Number of books in the union of the two sets 3

Un esempio complesso

Page 39: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 39

<?xml version="1.0"?> <book>

<chapter title="It begins"><para title="First paragraph"/><para title="2nd paragraph"/><para title="3rd paragraph"/>

</chapter><chapter title="The sequel">

<para title="Paragraph"/><para title="Yet another paragraph"/>

</chapter></book>

Un esempio complesso

Page 40: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 40

Numerare i capitoli ed i paragrafi

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

<formatted-book><xsl:apply-templates select="book/chapter"/>

</formatted-book></xsl:template>….

</xsl:stylesheet>

Un esempio complesso

Page 41: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 41

...<xsl:template match="chapter">

Chapter <xsl:number format="I"/>:<xsl:value-of select="@title"/><xsl:apply-templates select="para"/>

</xsl:template>...

<xsl:template match="para">Paragraph <xsl:number count="para|chapter" format="I.a"/>:<xsl:value-of select="@title"/>

</xsl:template>...

Un esempio complesso

Page 42: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 42

Risultato:

<?xml version="1.0" encoding="utf-8"?><formatted-book>

Chapter I: It beginsParagraph I.a: First paragraphParagraph I.b: 2nd paragraphParagraph I.c: 3rd paragraph

Chapter II: The sequelParagraph II.a: ParagraphParagraph II.b: Yet another paragraph

</formatted-book>

Un esempio complesso

Page 43: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 43

XSLT consente di trasformare documenti XML in altri documenti con struttura diversa

Funziona con un meccanismo di pattern matching e si basa su Xpath

Implementa istruzioni condizionali e meccanismi di iterazione

Conclusione

Page 44: XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it.

XSLT - eXtensible Stylesheet Language Transformation 44

Riferimenti

Deitel et al, XML Corso di programmazione, Apogeo

Chris Bates, XML in theory and Practice, Wiley

XML Path Language (XPath) Version 1.0W3C Recommendation 16 November 1999http://www.w3.org/TR/xpath

W3Schools Online Web Tutorialshttp://www.w3schools.com/xsl/default.asp


Recommended