Corso di Laurea Specialistica in Ingegneria Informatica
Corso di Linguaggi e Tecnologie Web
XSL (eXtensible Stylesheet Language)
Eufemia TINELLI
A. A. 2011 - 2012
Contenuti
• XSL = XSLT + XSL-FO (+ XPath)
• Struttura di un documento XSLT
– modelli, documento di destinazione, variabili, iterazioni e istruzioni
condizionali
• XSL-FO (cenni)
E. TINELLI – LTW A. A. 20112011-2012
2
Usare i CSS con XML
• Per ciascun elemento del documento XML che si intende
formattare occorre definire una regola del tipo:
• Nel documento XML si inserisce un riferimento al CSS con
un'apposita direttiva di elaborazione (processing instruction):
<?xml-stylesheet type="text/css" href=“myCSS4XML.css" ?>
• XSL è 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 estende il concetto di foglio di stile fino a permettere la
manipolazione della struttura stessa del documento
E. TINELLI – LTW A. A. 20112011-2012
3
XSL: un linguaggio di stylesheet (1)
• XSL è un insieme di tre linguaggi che forniscono gli strumenti per
l'elaborazione e la presentazione di documenti XML in modo molto
flessibile e si basa su tre meccanismi di base:
– un meccanismo per l'individuazione dei dati da presentare
– un meccanismo per il controllo dell'elaborazione dei dati e di come la
presentazione deve essere effettuata
– un meccanismo per la definizione della formattazione da applicare ai dati per
la presentazione vera e propria
• A ciascuno di questi tre meccanismi, XSL associa uno specifico linguaggio:
– XPath consente di individuare gli elementi e gli attributi di un documento XML
sui quali verranno applicate le operazioni necessarie per la presentazione dei
dati
– XSLT (XSL transformation) consente di controllare le operazioni che rendono i
dati presentabili
– XSL-FO (XSL Formatting Objects) definisce un insieme di tag di formattazione
E. TINELLI – LTW A. A. 20112011-2012
4
XSL: un linguaggio di stylesheet (2)
• Poiché nessun elemento di XML possiede un significato predefinito, il
linguaggio di stylesheet si occupa di dare un significato agli elementi di
un documento XML.
• XSL è un working group di W3C che si occupa di definire un'insieme di
specifiche volte a gestire in maniera altamente flessibile la presentazione
e la trasformazione di documenti XML
• La proposta è divisa in due parti:
– un linguaggio di trasformazione da documenti XML a documenti XML
– un vocabolario di elementi XML con semantica di formattazione
• XSLT 1.0 è una recommendation W3C del novembre 1999
• XSLT 2.0 è una recommendation W3C di gennaio 2007
• XSL-FO è recommendation dell'ottobre 2001, la versione corrente di
XSL-FO è la 1.1, da specifica W3C del dicembre 2006
E. TINELLI – LTW A. A. 20112011-2012
5
XSLT: il funzionamento
• La presentazione dei dati racchiusi in un documento XML è basata su due
elementi:
– un documento che descrive come i dati devono essere elaborati per la presentazione,
chiamato foglio di stile XSLT
– un componente software, chiamato processore XSLT, in grado di prendere in input un
documento XML e un foglio di stile XSLT e di produrre in output i dati secondo il formato
di presentazione prescelto (XSL-FO, XHTML, testo, ecc.)
<book>
<title>…</title>
<chapter n=“1”>
<title> …</title>
…
</chapter>
</book>
c.
c
e
,
h2”
“
,
”
”h1
,
”
l
m
t
-> “h
XSL
XSL
XSL
-> “fo:block”,”fo:inline”, ecc.
-> “
libr
o”,”
capi
tolo
”, e
cc.
E. TINELLI – LTW A. A. 20112011-2012
<libro>
<titolo>…</titolo>
<capitolo n=“1”>
<titolo> …</titolo>
…
</capitolo>
</libro>
6
XSLT: Input e Output
• Nella terminologia di XSLT, il documento da trasformare è chiamato
source document (documento di origine), mentre il documento
generato dal processo di trasformazione è chiamato result document
(documento risultante).
• Il documento risultante di una trasformazione XSLT può essere un
documento XML o un documento di altro tipo. Ad esempio, a partire da
un documento XML possiamo generare un documento HTML, PDF, RTF,
XML stesso o altri formati testuali.
• La trasformazione avviene in base alle informazioni contenute in un
particolare tipo di documento e interpretate da un processore XSLT.
Questo documento di trasformazione, chiamato foglio di stile XSLT, non
è altro che un documento XML che fa uso di tag appartenenti alla
grammatica di XSLT in grado di controllare il processo di trasformazione.
E. TINELLI – LTW A. A. 20112011-2012
7
XSLT: modelli o template
• Il processo di trasformazione controllato da XSLT si basa
sull’uso di XPath per individuare gli elementi del documento
origine, sui quali viene applicato un template (o modello) di
trasformazione. Ogni template:
1. seleziona un nodo della struttura del documento XML;
2. indica al processore XSLT come trasformare il nodo selezionato in 1
(ossia indica quale sostituzione deve essere eseguita)
• Da un punto di vista sintattico, un template è un elemento del
linguaggio XSLT che ha la seguente forma di base:
<xsl:template
match=“XPath pattern”
name=“qname”
priority=“number”
mode=“qname”>
<!-- azione -->
</xsl:template>
E. TINELLI – LTW A. A. 20112011-2012
8
XSLT: i fogli di stile
• Un foglio di stile XSL è composto sostanzialmente di template di
costruzione, che permettono di riscrivere una selezione di elementi del
documento XML d’origine in altri elementi del documento destinazione.
• Ogni template individua un pattern (XPath) da ricercare nel documento di
partenza, e vi associa un blocco di elementi e testo da inserire nel
documento di destinazione
• Il processore XSLT :
– va alla ricerca dei template da applicare partendo dal root element e
seguendo l’albero di rappresentazione logica del documento stesso
– Se il foglio di stile contiene diversi template che devono essere
applicati è necessario specificare all’interno del template corrente
l’elemento <xsl:apply-templates/> (è un modo per far ripartire
ricorsivamente la ricerca di altri template)
E. TINELLI – LTW A. A. 20112011-2012
9
Un esempio di documento XSLT
• Un documento XSLT è un documento XML ben formato:
– Un Prologo XML
– Un unico root element che contiene tutti gli altri nodi del documento
– All'interno del documento tutti i tag devono essere chiusi
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="http://sisinflab.poliba.it/ltw"
xmlns="http://www.w3.org/TR/xhtml1" >
<xsl:output method= "html" version="1.0" encoding="UTF-8"
indent="yes"/>
…identificare i template….
</xsl:stylesheet>
E. TINELLI – LTW A. A. 20112011-2012
10
XSLT: child dell’elemento <xsl:stylesheet>
•
•
•
•
•
•
•
•
•
•
•
•
xsl:import
xsl:include
xsl:strip-space
xsl:preserve-space
xsl:output
xsl:key
xsl:decimal-format
xsl:namespace-alias
xsl:attribute-set
xsl:variable
xsl:param
xsl:template
E. TINELLI – LTW A. A. 20112011-2012
11
Elemento <xsl:template>
• All’interno dell’elemento template si possono annidare
elementi che servono per scrivere frammenti del documento
di destinazione o per modificare la lista di nodi.
• Modificare il documento di destinazione
•
•
•
•
•
elementi letterali
<xsl:element>
<xsl:text>
<xsl:comment>
<xsl:copy>
•
•
•
•
•
<xsl:value-of>
<xsl:attribute>
<xsl:processing-instruction>
<xsl:namespace-alias>
<xsl:number>
• Modificare la lista di nodi correnti
• <xsl:apply-templates>
• <xsl:if>
• <xsl:sort>
• <xsl:for-each>
• <xsl:choose>
E. TINELLI – LTW A. A. 20112011-2012
12
Elementi letterali
– Si scrive direttamente il frammento XML richiesto
– Ogni elemento che non appartiene al namespace di xsl viene
direttamente scritto nel documento di destinazione così come
appare nel template
– Analogamente viene fatto per ogni nodo di testo
<xsl:template match=“emph”>
<html:b>
<xsl:apply-templates/>
</html:b>
</xsl:template>
E. TINELLI – LTW A. A. 20112011-2012
Qualunque
espressione XPath
che ritorni un
insieme di nodi può
essere inserito
nell'attributo match
13
Identificare i template
•
Un template può essere identificato in due modi: con l’attributo match o per nome
<xsl:template match=“xsl">
<h1>XSL tutorial di <xsl:value-of
select=“autore"/></h1>
…
</xsl:template>
•
<xsl:template name=“xml">
<i>Lezione XML</i>
…
</xsl:template>
Template di default
– NODI E ROOT
<xsl:template match="*|/">
<xsl:apply-templates/>
</xsl:template>
– TESTO E ATTRIBUTI
<xsl:template match="text()|@*">
<xsl:value-of select="."/>
</xsl:template>
– PIs E COMMENTI
<xsl:template match="processing-instruction()|comment()"/>
E. TINELLI – LTW A. A. 20112011-2012
14
Elemento <xsl:value-of>
• Scrive in output il valore di una qualsiasi espressione XPath valida
• Permette di estrarre informazioni da elementi ed attributi del documento
di origine, combinandoli in maniera complessa
• Permette l’uso delle funzioni XPath per ottenere nuove informazioni a
partire da quelle contenute nel documento di origine e di documenti ad
esso legati (fn:doc())
• L’uso tipico è per convertire markup in testo (ad esempio il valore di
attributi in contenuto)
<persona nome=”Mario” cognome=“Rossi”/>
<p>Mario Rossi</p>
<xsl:template match=“persona”>
<p><xsl:value-of select=“@nome”/>
<xsl:text> </xsl:text>
<xsl:value-of select=“@cognome”/></p>
</xsl:template>
E. TINELLI – LTW A. A. 20112011-2012
15
Elemento <xsl:element>
• Si usa se è necessario scrivere un elemento complesso o calcolato
• Ad esempio può servire per trasformare nel nome di un tag nel
documento destinazione il valore di un attributo del dcumento di
partenza
<persona tipo=”studente” nome=”Mario Rossi”/>
<studente>Mario Rossi</studente>
<xsl:template match=“persona”>
<xsl:element name=“{@tipo}”>
<xsl:value-of select=“@nome”/>
</xsl:element>
</xsl:template>
E. TINELLI – LTW A. A. 20112011-2012
16
Cambiare la lista di nodi correnti: <xsl:apply-templates/>
• Inserisce nella lista dei nodi correnti i figli diretti dell’elemento
considerato, nell’ordine in cui appaiono
• Se usato con l’attributo select (con un XPath per selezionare i nodi
richiesti), inserisce i nodi che fanno match con il pattern
• Nel momento in cui incontra un elemento <xsl:apply-templates>, il
parser sospende il processing del template in corso e procede
ricorsivamente ad esaminare i figli
<xsl:apply-templates
select="XPath expression"
mode="mode name">
E. TINELLI – LTW A. A. 20112011-2012
17
<xsl:apply-templates/>: file XML di Esempio
E. TINELLI – LTW A. A. 20112011-2012
18
<xsl:apply-templates/>: XSLT + output
E. TINELLI – LTW A. A. 20112011-2012
19
Iterazioni: <xsl:for-each>
•
<xsl:for-each select="XPath expression">
Forma un template all'interno di un template, quindi essendo un template vero e
proprio, va a modificare il context node
E. TINELLI – LTW A. A. 20112011-2012
20
Istruzioni condizionali: <xsl:if>
<xsl:if test="Boolean expression">
…
</xsl:if>
•
N.B Anche se “test” valuta una espressione XPath <xsl:if> non modifica il context node,
come invece fa template match
E. TINELLI – LTW A. A. 20112011-2012
21
Istruzioni condizionali: <xsl:choose>
<xsl:choose>
<xsl:when test="Boolean expression">
…
</xsl:when>
…
<xsl:otherwise>
…
</xsl:otherwise>
</xsl:choose>
E. TINELLI – LTW A. A. 20112011-2012
22
Le variabili
<xsl:variable name="PI">3.14</xsl:variable>
La variabile può essere utilizzata in una espressione XPath:
<math pi="{$PI}"/> oppure <xsl:value-of select="$PI"/>
Le variabili possono contenere non solo valori ma anche XML markup o XSLT.
Le variabili XSLT sono in realtà identificatori associati a particolari valori (per poterli poi
richiamare con più facilità all’interno di espressioni complesse) Æ più simili a costanti
E. TINELLI – LTW A. A. 20112011-2012
23
CSS vs XSLT
E. TINELLI – LTW A. A. 20112011-2012
24
XSL-FO (1)
• Scopi del linguaggio:
– definire la fase di formattazione
– definire un vocabolario di elementi di formattazione indipendenti dal
tipo di supporto utilizzato per l’output
• L’idea alla base di XSL-FO è che l’utente non deve scrivere
direttamente in linguaggio FO: è sufficiente creare un
semplice documento XML e quindi trasformarlo utilizzando
un opportuno XSLT. L’XSLT converte l’XML in XSL-FO.
• Una volta che l’XSL-FO è stato generato, viene quindi
passato ad una applicazione denominata XSL-FO processor,
responsabile della creazione del documento in oggetto: PDF
o PS, HTML, documenti RTF, ecc.
E. TINELLI – LTW A. A. 20112011-2012
25
XSL-FO (2)
La fase di formattazione è schematizzabile in cinque passi:
1. Trasformazione del documento XML attraverso un documento XSLT in un
documento XSLFO
2. Trasformazione dell’albero in uno costituito, non da elementi e attributi,
ma da oggetti di formattazione e loro proprietà
– Ogni elemento genera un oggetto, ogni attributo genera un proprietà
dell'albero
3. Raffinamento dell’albero degli oggetti di formattazione ovvero mapping
dalle proprietà nelle caratteristiche (es. calcolo del valore espresso in
unità di misura utilizzate dall'output)
4. Scioglimento dei valori relativi, ereditati, calcolati, raggruppati
5. Costruzione dell’albero delle aree. Identificazione degli elementi ripetuti,
fissi, ecc.
6. Rendering finale
E. TINELLI – LTW A. A. 20112011-2012
26
Riferimenti
• Specifiche
– http://www.w3.org/TR/xslt20/
– http://www.w3.org/TR/xsl/
• Testi consigliati
– A. Moller and M. Schwartzbach, An Introduction to XML and Web
Technologies, Addison Wesley, 2006 [cap. 5]
– H. M. and P.J. Deitel, T. R. Nieto, T. M. Lin and P. Sadhu, XML Corso di
programmazione, Apogeo, 2002 [cap. 12-13]
E. TINELLI – LTW A. A. 20112011-2012
27