XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno...

Post on 01-May-2015

214 views 1 download

Transcript of XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno...

XSLTXSLT

UNIVERSITA’ DI CAMERINOCorso di laurea in Informatica

Barbara Rebarbara.re@unicam.it

Anno Accademico 2006-07

Barbara Re 2

Introduzione

XML è un metalinguaggioIn quanto permette tramite la sua sintassi di descrivere altri linguaggi

XSLT (eXtensible Stylesheet Language for Transformation) è un esempio di linguaggio scritto con sintassi XML cioè una grammatica XML

Un documentoXML è innanzitutto XML Ben formattatoContiene al suo interno elementi ed attributi che fanno riferimento alla grammatica XSLT

Tale grammatica rappresenta una raccomandazione W3C

Namespace: http://www.w3.org/1999/XSL/Transform

Barbara Re 3

L’approccio

L’approccio generico di un documento XSLT alla trasformazione di contenuti XML può essere schematizzato con una frase

Cerca – Trova – Trasforma

L’approccio a XSLT dovrà essere orientato allo studio di una grammatica che ci permetta di cercare all’interno dell’albero di un documento XML dei contenuti e, una volta trovati, qualora esistano, li trasformi in qualcosa di diverso

Albero Originale Albero RisultanteTrasformazione

XSLT

Barbara Re 4

Il modello di XSLT

processore XSLT

input

output

Barbara Re 5

Documento XSLT

Stylesheet è il tag root

In ogni caso occorre che l’intero doocumento faccia riferimento al Namespace corretto, partendo dal tag root e scegliendo un alias per il Namespace, di solito xsl

Un documento XSLT quindi contiene all’interno del tag root indicato, una serie di altri nodi elemento che corrispondono a istruzioni del linguaggio

<xsl:stylesheet version="1.0"

xmlns:xsl=http://www.w3.org/1999/XSL/Transform>

<!– Qui sarà carocato il cotenuto del documento XSLT-->

</xsl:stylesheet>

Barbara Re 6

Dichiarazione

Per provare istruzioni XSLT sarà sufficiente inserire in testa a un documento xml una seconda processing-instruction dopo il prologo che colleghi l’XSLT all’XML

<?xml version="1.0" ?>

<?xml-stylesheet type=“text/xsl” href=“prima.xsl” >

<documento/>

Barbara Re 7

Definizione di Template

La prima istruzione per eccellenza di un documento XSLT è quella che ci permette di definire dei template

Cioè dei modelli di trasformazione

<?xml version="1.0" ?>

<xsl:stylesheet version="1.0"

xmlns:xsl=“http://www.w3.org/1999/XSL/Transform”>

<xsl:template match=“/”>

<!– Istruzioni che lavorano sui contenuti trovati-->

</xsl:template>

</xsl:stylesheet>

Barbara Re 8

Comando template

Il comando template lavora con un attributo di nome match

Match permette di definire a quali nodi si debba applicare il template stesso

L’attibuto match rappresenta una regola XPath quindi la condizione match=“/” indica che vogliamo definire un template per il nodo root del documento

Barbara Re 9

Esempio: HTML in output

<?xml version="1.0" ?>

<xsl:stylesheet

version="1.0"

xmlns:xsl=“http://www.w3.org/1999/XSL/Transform”>

<xsl:template match=“/”>

<html>

<head>

<title> prima trasformazione da XML a HTML </title>

</head>

</html>

<body>

<h1> Prova di scrittura del documento HTML </h1>

</body>

</xsl:template>

</xsl:stylesheet>

Barbara Re 10

XML di riferimento

<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="trasformazione.xsl"?> <clienti>

<cliente id="C1001"><ragioneSociale> Cliente1 </ragioneSociale><indirizzo> Via Roma, 1 </indirizzo><fatturato anno="2000"> 2000 </fatturato><fatturato anno="2001"> 3000 </fatturato>

</cliente><cliente id="C1002">

<ragioneSociale> Cliente2 </ragioneSociale><indirizzo> Via Roma, 2 </indirizzo><fatturato anno="2000">4000 </fatturato><fatturato anno="2001">5000 </fatturato>

</cliente><cliente id="C1003">

<ragioneSociale> Cliente3 </ragioneSociale><indirizzo> Via Roma, 3 </indirizzo><fatturato anno="2000">6000 </fatturato><fatturato anno="2001">7000 </fatturato>

</cliente><cliente id="C1004">

<ragioneSociale> cliente4 </ragioneSociale><indirizzo> Via Roma, 4 </indirizzo><fatturato anno="2000">9000 </fatturato><fatturato anno="2001">1000 </fatturato>

</cliente><cliente id="C1005">

<ragioneSociale> cliente5 </ragioneSociale><indirizzo> Via Roma, 5 </indirizzo><fatturato anno="2000">10 </fatturato><fatturato anno="2001">30 </fatturato>

</cliente></clienti>

Barbara Re 11

Lettura e copia dei valori

Comandi per la lettura e copia dei documenti in ingresso

Per leggere in uscita il valore di un qualsiasi nodo con il comando value-of-select<xsl:value-of select="Path o XSLT function">

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

<xsl:value-of select="/clienti/cliente" /></xsl:template></xsl:stylesheet>

Barbara Re 12

Proviamo…………..

base

trasformazione

Barbara Re 13

Soluzioni iterative

Nel caso in cui si vogliono leggere però i nomi di tutti i clienti e non solo del primo cliente dobbiamo appoggiarci o ad un costrutto iterativo oppure al comando apply-templates che richiama ricorsivamente il template associato a ciascuno dei nodi che fanno parte di una collezione di nodi

<xsl:apply-templates select=“XPath">

Barbara Re 14

Proviamo…………..

ricorrobase

ricorro

Barbara Re 15

Costrutti condizionali ed iterativi

Possiamo creare costrutti condizionali per valutare il contenuto del documento XML in ingresso prima di trasformarlo

IfChoose

<xsl:if test="condizione"><!--Codice da eseguire se la condizione all'interno di test è prova--></xsl:if>

<xsl:choose><xsl:when test="condizione"><!--Codice da eseguire se la condizione di test è vera--></xsl:when><xsl:when test="condizione"><!--Codice da eseguire se la condizione di test è vera--></xsl:when><xsl:otherwise test="condizione"><!--Codice da eseguire se la condizione di test è falsa--></xsl:otherwise></xsl:choose>

La differenza fra i due costrutti è che il blocco if può valutare una sola condizione e non presenta un’alternativa elseif come spesso accade nei linguaggi tradizionali

Se prevediamo anche un blocco otherwise questo costituisce la condizione di default nel caso in cui nessuna delle precedenti si verifichi

Barbara Re 16

Esempio costrutto if

<xsl:template match="cliente"><li> <xsl:value-of select="ragioneSociale" /> <xsl:if test="fatturato/@anno=2000">

<i> (Cliente dal 2000) </i></xsl:if></li>

</xsl:template>

Barbara Re 17

Proviamo…………..

Barbara Re 18

Esempio costrutto choose

<xsl:template match="cliente"><li>

<xsl:choose><xsl:when test="position() mod 2 = 0"><font color="red" size="4"><xsl:value-of select="ragionesociale" /></font></xsl:when>

<xsl:otherwise> <font color="black" size="2">

<xsl:value-of select="ragionesociale" /> </font></xsl:otherwise></xsl:choose>

</li></xsl:template>

Barbara Re 19

Proviamo…………..

Barbara Re 20

Istruzione for-each

Nel caso in cui sia necessario eseguire delle interazioni su collezioni di nodi presenti nel documento XML di input possiamo usare l’istruzione for-each

<xsl:for-each select="XPath"><!-- codice relativo al nodo corrente -->

</xsd:for-each>

<xsl:for-each select="XPath"><xsl:value-of select="ragione sociale">

</xsd:for-each>

Barbara Re 21

Ordinamento

Qualora volessimo ordinare il contenuto secondo un qualche valore prima di scriverlo in output possiamo far riferimento all’istruzione sort

Select indica un’espressione secondo la quale ordinare i contenuti

Data-type ci permette di indicare al processore se vogliamo un ordinamento tra stringhe o numeri

Order ci permette di definire se vogliamo un ordinamento crescente o decrescente dei dati

<xsl:sort select="Espressione" data-type="text|number" order="ascending|descending" />

Barbara Re 22

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

Barbara Re 23

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

Barbara Re 24

Ci sono domande?