XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re [email protected] Anno...

24
XSLT XSLT UNIVERSITA’ DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07

Transcript of XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re [email protected] Anno...

Page 1: XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

XSLTXSLT

UNIVERSITA’ DI CAMERINOCorso di laurea in Informatica

Barbara [email protected]

Anno Accademico 2006-07

Page 2: XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.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

Page 3: XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

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

Page 4: XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

Barbara Re 4

Il modello di XSLT

processore XSLT

input

output

Page 5: XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

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>

Page 6: XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

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

Page 7: XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

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>

Page 8: XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

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

Page 9: XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

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>

Page 10: XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

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>

Page 11: XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

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>

Page 12: XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

Barbara Re 12

Proviamo…………..

base

trasformazione

Page 13: XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

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

Page 14: XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

Barbara Re 14

Proviamo…………..

ricorrobase

ricorro

Page 15: XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

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

Page 16: XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

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>

Page 17: XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

Barbara Re 17

Proviamo…………..

Page 18: XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

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>

Page 19: XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

Barbara Re 19

Proviamo…………..

Page 20: XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

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>

Page 21: XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

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

Page 22: XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

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

Page 23: XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

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

Page 24: XSLT UNIVERSITA DI CAMERINO Corso di laurea in Informatica Barbara Re barbara.re@unicam.it Anno Accademico 2006-07.

Barbara Re 24

Ci sono domande?