capitolo primo

annuncio pubblicitario
002cap01.fm Page 3 Wednesday, July 10, 2002 6:06 AM
Giorno 1
Introduzione all’XSLT
Con un numero sempre crescente di persone che utilizzano l’Extensible Markup
Language (XML) nelle loro applicazioni, sorge la necessità di un linguaggio generale che permetta di manipolare i documenti XML. Questo linguaggio è l’Extensible Stylesheet Language Transformations (XSLT), che è stato sviluppato dal
W3 Consortium (W3C) e che ora ha ottenuto lo status di Raccomandazione,
cioè la posizione più vicina a uno standard nel World Wide Web.
Poiché i documenti XML di per sé non contengono informazioni di formattazione, c’è bisogno di qualcos’altro per formattare e visualizzare i dati in modo da
renderli più gradevoli. L’XSLT è il linguaggio che permette di manipolare un documento XML. Da quel documento, si può poi creare un altro documento che
contenga informazioni di formattazione, come lo Hypertext Markup Language
(HTML), il Portable Document Format (PDF) o il Rich Text Format (RTF). Inoltre, è possibile utilizzare XSLT per ristrutturare i documenti XML.
Oggi impareremo quanto segue:
●
Che cos’è XSLT
●
Quali sono i vantaggi di XSLT
Come XSLT esegue le trasformazioni
●
●
Quali strumenti utilizzare per creare documenti XSLT
●
Come utilizzare i processori per eseguire trasformazioni
Generalità su XSLT
Negli ultimi anni, le dimensioni del World Wide Web sono enormemente aumentate. Il mero numero dei siti e delle pagine Web è inimmaginabile. Poiché
queste pagine contengono solo informazioni di formattazione e quasi nessuna
informazione riguardante il loro contenuto, trovare le informazioni necessarie
diventa sempre più difficile man mano che il Web cresce. Scegliete un motore
di ricerca sul Web e inserite un argomento. Molto probabilmente otterrete mi-
002cap01.fm Page 4 Wednesday, July 10, 2002 6:06 AM
4
Giorno 1
gliaia di risposte, la maggior parte delle quali irrilevante. Oltre a questo problema, quasi tutte le informazioni sul Web sono codificate in HTML, che è stato appositamente progettato per formattare testo da visualizzare nei browser. Utilizzare questo formato è conveniente, quando si esaminano le pagine con un
browser, ma le applicazioni progettate per elaborare informazioni incontrano
molte difficoltà a operare con HTML perché i dati in un documento HTML non
hanno significato e HTML è troppo non strutturato per reperire facilmente i dati
in esso immagazzinati.
Prendiamo l’Extensible Markup Language o XML. Sebbene sia molto simile
all’HTML, non contiene informazioni di formattazione, bensì informazioni circa
il significato dei dati in un documento. Ciò in effetti significa che, in ogni documento scritto in XML, il significato dei suoi dati fa parte del documento stesso.
Lungo tutto il libro, utilizzerò il termine documento XML sia per i file
XML sia per l’XML immagazzinato in altre forme, come una stringa in
memoria o in un database.
Il vantaggio sicuro è che i dati di XML possono essere estratti e confrontati in
modo più accurato con una query di ricerca. La query visualizza così le informazioni che si desiderano effettivamente, scartando tutto ciò che è irrilevante.
Un motore di ricerca che utilizzi le informazioni di XML può anche chiedervi di
specificare meglio la query – per esempio, per determinare se intendevate computer chips (chip per computer) o French fries (patatine fritte) quando avete introdotto la parola di ricerca chips. L’idea è che col tempo il Web passi da pagine
di testo a Web semantico, dove tutte le pagine avranno un significato non solo
per le persone, ma anche per le applicazioni.
Sebbene XML sia orientato verso il Web e introdotto dal W3C, non è previsto
che venga utilizzato solo sul Web. Può essere utilizzato in tutti i tipi di applicazione, sia per immagazzinare dati sia come mezzo di comunicazione fra applicazioni. Questo uso potrebbe sembrare un po’ strano, poiché c’è sempre stata
differenza fra immagazzinare e comunicare dati. Invece è effettivamente del tutto naturale: i dati sono dati, indipendentemente da dove si utilizzano. Questo
concetto sta diffondendosi un po’ alla volta, man mano che aumenta il numero
dei fornitori che utilizzano XML nelle loro applicazioni. Microsoft, per esempio,
attualmente supporta in un modo o nell’altro XML nella maggior parte dei suoi
prodotti. Infatti, il .NET Framework, che è stato sviluppato per gestire la maggior parte delle applicazioni e dei servizi futuri, è più o meno costruito attorno
a XML. Altri fornitori che hanno adottato XML comprendono Sun e IBM, che lo
utilizzano in varie applicazioni.
Introduzione a XML e XSLT
Un documento XML assomiglia molto a un documento HTML. Come HTML,
XML utilizza tag che hanno influenza sul loro contenuto, come in questo esempio:
002cap01.fm Page 5 Wednesday, July 10, 2002 6:06 AM
Introduzione all’XSLT
5
<title>Teach Yourself XSLT in 21 Days</title>
Un vantaggio importante è che XML è solo testo, non un qualche formato proprietario o binario. Ciò significa che potete leggerlo e visualizzarlo con un editor di testi; un altro vantaggio è che ogni computer può leggerlo e reperire dati
dal documento. Quest’ultimo vantaggio è reso possibile dal fatto che i tag attorno ai dati comunicano al computer il significato di quei dati. Il lato negativo è
che la formattazione delle informazioni non è più associata con i dati, per cui
presentare i dati in modo gradevole per un lettore umano non è possibile quando si utilizza solo XML. Si può capire e visualizzare XML, ma non ha un aspetto
gradevole e sicuramente non viene visualizzato in modo consono agli scopi per
i quali lo si utilizza. Consideriamo questo libro, per esempio. Se ogni capoverso, titolo e così via, fosse accompagnato da tag XML, la lettura sarebbe molto
più difficile di quello che è con l’attuale formattazione. Pertanto, per formattare
i dati in modo appropriato, è necessario manipolarli prima di poterli visualizzare.
Cos’è XSLT?
Senza uno strumento o linguaggio di tipo generale per manipolare XML, formattarlo per la visualizzazione sarebbe molto difficile. Bisognerebbe scrivere
un’apposita applicazione per leggere XML e visualizzarlo nel modo desiderato.
Bisognerebbe indicare all’applicazione come formattare ogni diverso tag XML.
E cosa succederebbe se si volesse cambiare la formattazione? Bisognerebbe ricominciare tutto daccapo. Per ovviare a questo problema, il W3C cominciò a
sviluppare l’Extensible Stylesheet Language (XSL), che è un linguaggio generale
per manipolare e visualizzare dati in un documento XML.
XSL consiste in XSL Formatting Objects (XSLFO) e XSL Transformations (meglio
conosciuto come XSLT). Il primo, ancora ufficialmente chiamato XSL, è un vocabolario XML che definisce elementi utilizzati per specificare come visualizzare
un documento XML. Un vocabolario XML è un insieme di tag XML definite per
un certo scopo. XHTML è un altro esempio di vocabolario XML.
XSLT è un linguaggio utilizzato per manipolare strutture o documenti XML. È
anche un vocabolario XML. L’effettiva manipolazione di un documento XML
con XSLT viene chiamata trasformazione.La trasformazione è il processo di creazione di un nuovo documento basato sul documento originale. Questo processo non cambia il documento sorgente.
XSLT è estremamente versatile e può essere utilizzato per convertire XML in
molti altri formati. Tutte le trasformazioni generano una nuova struttura ad albe-
002cap01.fm Page 6 Wednesday, July 10, 2002 6:06 AM
6
Giorno 1
ro. XSL può anche essere utilizzato per creare documenti XSLFO, che sono utili
per creare documenti su cui possono operare applicazioni native. I documenti
XSLFO possono essere utilizzati, per esempio, per creare file Adobe PDF o Microsoft Word. L’idea principale, in questo caso, è che XSLFO abbia carattere generale e possa essere utilizzato per formattare su diverse “superfici”, per così dire.
XSLFO ha molte capacità per la formattazione di alta qualità, ma questo argomento esula dagli scopi di questo libro, che copre solo XSLT.
Che cosa fa XSLT?
XSLT trasforma un documento XML in un altro documento, che può contenere
tag XSLFO per formattare i dati del documento per la visualizzazione, ma ciò
non è obbligatorio. Infatti, non siamo affatto obbligati a utilizzare XSLT come
parte di XSL. Come XSL è progettato per essere utilizzato da molte applicazioni,
XSLT è progettato per trasformare in molti output diversi. Perciò, come XSL,
XSLT è un linguaggio generale creato per essere utilizzato da molte applicazioni
su molte piattaforme. Con XSLT, si possono creare documenti HTML, XHTML,
testo semplice, PDF e diversi altri tipi di documenti. Possiamo anche utilizzare
XSLT per trasformare un documento XML in un altro documento XML con una
struttura diversa. Adesso i vantaggi di questa possibilità possono non essere evidenti, perché possiamo semplicemente utilizzare i dati dal documento originale.
Vedremo, tuttavia, che la capacità di trasformare il documento XNL originale in
un documento XML diverso è effettivamente una funzionalità molto potente e
utile per molte applicazioni.
Come si presenta XSLT?
XSLT è un linguaggio di programmazione che trasforma documenti XML; tuttavia è diverso da altri linguaggi. Differisce nell’aspetto, nello stile e nel funzionamento. XSLT è in sé XML e, come XSLFO, è un vocabolario XML. Tuttavia, i suoi
tag non dicono a un programma come visualizzare qualcosa, ma piuttosto che
cosa fare quando trova un certo tag. Se avete già programmato in precedenza,
alcuni di questi tag hanno nomi e funzioni che vi saranno familiari. Altri tag vi
saranno del tutto sconosciuti, come potete vedere nel Listato 1.1.
Listato 1.1
Esempio di XSLT
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8"
omit-xml-declaration="yes" indent="yes" />
<xsl:template match="/">
002cap01.fm Page 7 Wednesday, July 10, 2002 6:06 AM
Introduzione all’XSLT
7
<xsl:apply-templates />
</xsl:template>
<xsl:template match="books">
<xsl:for-each select="book">
<xsl:value select="title" />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Capire la funzione del Listato 1.1 non è in questo momento importante.
Questo esempio semplicemente mostra come si presenta XSLT.
Se utilizzate Internet Explorer versione 5.0 o successive, potete scrivere il
codice precedente e visualizzarlo. Vedrete che un foglio stile è XML e ha
una struttura ad albero.
ANALISI
Ciascun tag in XSLT esprime un comando per il programma che esegue la trasformazione. In XSLT, a differenza della maggior parte dei linguaggi di programmazione, questi comandi possono occupare molte righe. Infatti, poiché
XSLT è in sé XML, esso deve conformarsi alle stesse regole di sintassi di ogni altro documento XML. Se avete esperienza di programmazione con Visual Basic,
C++, Java, eccetera, questa codifica può sembrarvi piuttosto strana perché manca il concetto di righe che compiono una certa azione. XSLT, in effetti, opera in
modo diverso da quei linguaggi. Non preoccupatevi di questo per ora; ne parlerò con maggior particolari più avanti.
XSLT e la famiglia di XML
XSLT si basa su XML e interagisce con molti degli altri membri della famiglia di
XML. La conoscenza della posizione di XSLT nella famiglia di XML e della sua
origine ci aiuterà a capire meglio XSLT e come utilizzarlo. Poiché la famiglia di
XML è diventata piuttosto grande ed è in continua evoluzione, i paragrafi che
seguono non forniranno la mappa di tutti i membri della famiglia di XML.
Breve storia di XML e XSLT
Non vi annoierò con una lunga e particolareggiata storia di XML e XLST. Vi farò
solo un breve resoconto in modo che possiate vederli in prospettiva. Dopo tutto, non sono proprio nati dal nulla. XML è basato in effetti su concetti che sono
stati sviluppati nei primi tempi dell’elaborazione.
002cap01.fm Page 8 Wednesday, July 10, 2002 6:06 AM
8
Giorno 1
Origini di XML
XML è basato sullo Standard Generalized Markup Language (SGML), ma SGML
è molto più complesso. In questo senso, XML è più basato su HTML, perché il
progetto per XML mirava a renderlo generale come SGML, ma facile come HTML, in modo da agevolarne l’adozione. SGML fu effettivamente sviluppato come Generalized Markup Language (GML) nel 1969 da Ed Mosher, Ray Lorie e
Charles F. Goldfarb alla IBM Research. Nonostante l’International Standards Organization (ISO) abbia adottato SGML come standard per immagazzinamento e
scambio di dati nel 1986, era troppo complesso per ottenere un riconoscimento
generale. HTML, d’altra parte, è il linguaggio di marcatura più diffuso che esista,
soprattutto per la sua semplicità.
XML è in effetti un sottoinsieme semplificato di SGML e come tale è molto più
facile da capire e da utilizzare nella programmazione. Questa facilità, inoltre,
permette di creare più agevolmente un parser per XML che per SGML; questo
può giustificare in gran parte la diffusione di XML. Un parser è un programma
in grado di leggere e capire la sintassi e la grammatica di un linguaggio.
Due anni dopo l’inizio, nel febbraio 1998, XML 1.0 diventò una Recommendation del W3C. Da allora, il lavoro su linguaggi e sistemi basati su XML ha cominciato a diffondersi rapidamente. XHTML, WML, SVG, Xpath, Xpointer e XML
Query sono solo alcune delle tecnologie XML che sono state sviluppate. XSLT è
anch’esso uno di questi linguaggi, che è diventato una Recommendation del
W3C il 16 novembre 1999.
Origini di XSLT
Come XML, anche XSLT è basato su concetti già esistenti. Nei primi anni Novanta, venne creato uno standard basato su SGML che venne chiamato Document
Style Semantics and Specification Language (DSSSL). Questo linguaggio generale doveva essere utilizzato per manipolare documenti SGML, convertendoli in
un formato adatto alla visualizzazione o alla stampa. Tuttavia, poiché questa
tecnologia era molto complessa e difficile da utilizzare (e molto costosa), soltanto alcune grandi case editrici poterono permettersi di creare applicazioni da
utilizzare per la composizione tipografica di alta qualità. Gli approcci SGML e
DSSSL sono ancora utilizzati e tali rimarranno finché non verranno sviluppate
applicazioni XML/XSLT che li possano sostituire.
XSLT ha le sue origini nel DSSSL, ma è molto più semplice. Sebbene XSLT sia
basato sul DSSSL, non è un vero sottoinsieme del DSSSL, poiché alcune caratteristiche di XSLT non esistono nel DSSSL.
002cap01.fm Page 9 Wednesday, July 10, 2002 6:06 AM
Introduzione all’XSLT
9
Altri componenti della famiglia XML
Oltre a XML e XSL, ci sono parecchi altri componenti della famiglia XML: alcuni
specifici di XML, altri condivisi da tecnologie come HTML.
Definire strutture XML
Per definire una struttura o vocabolario XML, esistono due opzioni. Si può utilizzare una Document Type Definition (DTD) o il più recente XML Schema. Il
vantaggio di definire tale struttura è che tutti i documenti che corrispondono alla definizione avranno una struttura predefinita, rendendo più facile scrivere
applicazioni che utilizzano questi documenti. Le definizioni DTD o XML Schema possono essere inserite nel file XML stesso (definizioni interne) o in un file
esterno (definizioni esterne). Nel secondo caso, il documento XML deve fare riferimento al file DTD o XML Schema.
Vi sono due tipi di parser:
●
Parser validanti
Parser non validanti
●
Un parser validante segnala errore se un documento XML non si conforma alle
regole nella DTD o nello Schema associato; un parser non validante no.
La maggior parte dei parser validanti ha l’opzione di poter disabilitare
la convalida, rendendoli così parser non validanti.
Una DTD in sé non è XML e come tale non può essere utilizzata da un parser
per compiti diversi dalla convalida di un documento XML. La DTD non può essere consultata come XML. Alcuni parser offrono funzioni per ottenere informazioni dalla DTD, ma queste sono separate dalle funzioni che si applicano a
XML. Inoltre, le DTD danno poche informazioni circa il tipo di dati dei valori.
Solo alcuni tipi di dati sono noti nelle DTD, ma la maggior parte delle applicazioni ne hanno molti di più. Non è possibile definire nuovi tipi di dati, perciò si
è limitati ai soli tipi di dati disponibili nella DTD.
Ciascun documento XML può avere una sola DTD che ad esso corrisponde. Si
possono creare DTD complesse per aggregare altre DTD, ma il documento XML
in sé è associato con una singola DTD.
Per rimediare alla maggior parte dei problemi delle DTD, il W3C ha creato gli
XML Schema. Gli XML Schema, che hanno ottenuto lo status di Recommendation il 2 maggio 2001, sono XML e anche molto più flessibili delle DTD. Questi
definiscono inoltre più tipi di dati delle DTD. Molti sviluppatori adottarono rapidamente gli XML Schema, anche prima che diventassero una Recommendation
del W3C.
002cap01.fm Page 10 Wednesday, July 10, 2002 6:06 AM
10
Giorno 1
Distinguere fra i vocabolari
Utilizzando gli XML Schema (o le DTD), si possono definire vocabolari XML.
Tuttavia, se si mescolano i vocabolari, si possono avere vocabolari che hanno
elementi con gli stessi nomi. Questo problema non può essere risolto solo definendo i vocabolari. Per risolvere questo problema sono stati aggiunti alla famiglia di XML i namespace (aree semantiche). I namespace XML servono a distinguere i vocabolari XML. Per ciascun vocabolario utilizzato in un documento, si
può definire un diverso namespace con un nome univoco entro il documento
stesso. Questa definizione di namespace può puntare a un XML Schema o a una
DTD esistente, ma ciò non è necessario. Il vantaggio di puntare il namespace a
una DTD o a un XML Schema effettivo è che tutti sanno quale aspetto dovrà
avere il documento.
Possiamo identificare un namespace in un documento XML perché il namespace compare davanti al nome di elemento o di attributo. Il namespace e l’elemento o attributo sono separati dal segno di due punti. Supponiamo di definire
un namespace per i libri. Un elemento titolo che utilizzi il namespace book apparirebbe come segue:
<book:title>Teach Yourself XSLT in 21 Days</book:title>
Ricorderete l’esempio di XSLT nel Listato 1.1. In quell’esempio, tutti gli elementi
che facevano parte di XSLT erano preceduti dal namespace xsl Lo stesso XSLT
utilizza un namespace XML per operare. Un namespace per un documento viene definito come attributo di un elemento: nella maggior parte dei casi, l’elemento radice. Per XSLT, il namespace viene definito come segue:
xmlns:xsl=http://www.w3.org/1999/XSL/Transform
La definizione di namespace ha tre parti. Il nome dell’attributo ha due parti: la
dichiarazione di namespace xmlns (un namespace predefinito), seguita dal namespace che si vuole introdurre (in questo caso, xsl).
Il namespace introdotto non deve necessariamente essere lo stesso in
ogni documento. Il namespace xsl in XSLT è solo una convenzione. Volendo, si può creare un altro namespace (per esempio, transform) e utilizzarlo al posto di xsl.
L’ultimo pezzo della dichiarazione è un Uniform Resource Identifier (URI), che
deve essere univoco per ogni vocabolario. Un URI è un nome o indirizzo univoco per una risorsa. Può essere un Uniform Resource Locator (URL) o un Uniform Resource Name (URN).
L’URI potrebbe puntare a una DTD o a un XML Schema per definire il vocabolario che il namespace rappresenta, ma ciò non è necessario. Inoltre, se non è
implicata alcuna convalida, il namespace può contenere qualsiasi nome di ele-
002cap01.fm Page 11 Wednesday, July 10, 2002 6:06 AM
Introduzione all’XSLT
11
mento. La dichiarazione di namespace all’inizio di questo paragrafo punta specificamente a un URI che lo definisce come XSLT. Se si utilizza un altro namespace per XSLT, l’unico requisito è che punti allo stesso URI.
Maggiori particolari circa i namespace di XML saranno presentati nel
Giorno 15, “Uso dei namespace”.
Il Document Object Model
Se si vuole programmare con XML, ovviamente occorre un modo per arrivare ai
dati. Si può scrivere un programma che legga XML da un file e lo utilizzi. Questo approccio genererebbe probabilmente una soluzione proprietaria. Il concetto principale che sta alla base di XML è che si tratta di uno standard che tutti
possono utilizzare, per cui creare una soluzione proprietaria non è il modo migliore di procedere. Ciò che serve è una Application Programming Interface
(API) standard per interagire con XML. Il W3C ha creato il Document Object
Module (DOM) da utilizzare come API standard. L’idea che sta alla base del
DOM è che un documento XML è un albero gerarchico di elementi e attributi
che può essere rappresentato in memoria e manipolato attraverso un meccanismo standard. L’utilizzo del DOM non è limitato a XML; opera anche con HTML
4.0. Tuttavia, poiché HTML è meno strutturato di XML, può nascere qualche
problemi a utilizzarlo con HTML.
Come gli altri membri della famiglia di XML, il DOM sta progredendo. Fin dal 13
novembre 2000, il DOM Level 2 ha status di Recommendation. Il DOM Level 3 è
attualmente in corso di sviluppo.
Simple API for XML
Il DOM è uno standard per decreto del W3 Consortium. Tuttavia, già prima che
apparisse il DOM si sentiva la necessità di un metodo standard per utilizzare
XML. Il metodo che è diventato automaticamente uno standard, Simple API for
XML (SAX), segue una strada completamente diversa dal DOM quando lavora
con un documento XML. Invece di leggere l’intero documento, SAX legge il documento un elemento alla volta. Ogni elemento che il parser incontra innesca
un evento. Se volete, potete collegare una routine all’evento per agire sull’elemento e generare output.
Un grande vantaggio di questo approccio è che praticamente non utilizza memoria, perché non è necessario costruire l’intero documento in memoria. Questo approccio è estremamente utile quando lavorate con grandi documenti.
Molti parser utilizzano il modello SAX. Altri utilizzano DOM o, come il parser
MSXML della Microsoft, consentono di scegliere fra i due.
002cap01.fm Page 12 Wednesday, July 10, 2002 6:06 AM
12
Giorno 1
Indirizzare elementi e attributi
Poiché i documenti XML hanno una struttura gerarchica ad albero, è possibile
raggiungere gli elementi specificando un percorso, che è simile al percorso che
indirizza un file in un file system o in un sito Web.
XPath è stato sviluppato per indirizzare elementi e attributi in un documento
XML. Sebbene XPath sia un linguaggio separato, non viene utilizzato da solo;
viene sempre utilizzato insieme a XSLT o a XPointer. Lo scopo di XPath è quello
di indirizzare parti di un documento XML. Con XPath si può scegliere una singola voce o creare un’espressione di percorso che corrisponda a diverse voci.
Questa capacità di stabilire una corrispondenza è molto importante per XSLT; è
la base su cui gli elementi vengono selezionati da XSLT per essere trasformati.
XPointer è l’equivalente XML dei collegamenti ipertestuali in HTML. Un collegamento in XPointer è definito per mezzo di XPath.
XPath è una parte essenziale di XSLT. Maggiori particolari al riguardo
si troveranno nel Giorno 3, “Scelta dei dati”.
I vantaggi di XSLT
I vantaggi dell’utilizzo di XSLT sono strettamente collegati ai vantaggi dell’utilizzo di XML. Supponendo che i dati siano immagazzinati o comunicati come XML
(che è ciò a cui serve XML), i vantaggi di XSLT sono i seguenti:
Richiamare dati da dati in un documento XML
●
●
Formattare dati da un documento XML per la visualizzazione
Tradurre fra un documento XML utilizzato per la comunicazione e un
●
formato utilizzato entro un sistema
XML e XSLT nell’immagazzinamento dati
Quando bisogna immagazzinare dati, XML è molto flessibile. È possibile modificarlo per adattarlo facilmente al tipo di dati che deve immagazzinare. A questo
riguardo, è molto più comodo di un database relazionale, perché un database è
limitato alle tabelle che lo costituiscono. Ciascuna tabella contiene righe con un
numero fisso di colonne, dove ciascuna colonna ha un significato fisso. La conseguenza è che, entro un database, i dati sono costretti ad avere un formato fisso. L’inconveniente è che non tutti i dati si adattano esattamente a questo formato fisso. XML ha una struttura gerarchica flessibile che può riprodurre molte,
se non tutte, le strutture di dati esistenti. Per esempio, si può creare facilmente
un documento XML contenente un intero database.
Quando i dati sono immagazzinati in formato XML, XSLT può essere utilizzato
per reperire dati da quel documento. Il formato fisso di un database rende diffi-
002cap01.fm Page 13 Wednesday, July 10, 2002 6:06 AM
Introduzione all’XSLT
13
cile interrogare dati da tabelle differenti con una sola operazione. Poiché XML
non ha questa struttura rigida, un documento XSLT può facilmente raccogliere
dati da diverse sezioni di un documento XML.
Poiché XML è così flessibile, può anche immagazzinare dati relativamente non
strutturati, come documenti di testo con una certa formattazione. Come ho ricordato all’inizio di questa lezione, il vantaggio di separare le informazioni dalla
formattazione è che potete fare una ricerca basata su un significato contestuale.
Con la maggior parte dei linguaggi di programmazione, creare un output formattato da un tale formato con segni di marcatura (tag) è difficile, mentre XSLT
è effettivamente adatto a questo scopo. Il Listato 1.2 mostra un esempio di documento con tag di questo tipo che può essere formattato con XSLT.
Listato 1.2
Articolo con segni di marcatura in XML
<document xmlns:code="http://www.aspnl.com/xmlns/code" xml:lang="en-us">
<title>Hello world sample</title>
<text>
This sample shows how to use <keyword>Response</keyword>.
<keyword>Write</keyword> to write text to a <device>browser</device>
</text>
<code:block multiline="yes" type="lesson" subject="ASP"
name="write" language="ASP">
<code:html>
<html>
<tab /><body>
</code:html>
<code:asp>
<code:keyword>Option</code:keyword>
<code:keyword>Explicit</code:keyword><br />
<br />
<code:comment>'declare variable(s)</code:comment>
<code:keyword>Dim</code:keyword> strWrite<br />
strWrite = "Hello World!"<br />
<code:object>Response</code:object>.
<code:method>Write</code:method> strWrite
</code:asp>
<code:html>
<tab /></body>
</html>
</code:html>
</code:block>
</document>
ANALISI
XML nel Listato 1.2 fa parte di un documento utilizzato per creare HTML per un
sito Web con esempi di codice con codifica a colori. Potete chiedervi come mai
002cap01.fm Page 14 Wednesday, July 10, 2002 6:06 AM
14
Giorno 1
non ho creato HTML direttamente invece di crearlo da XML, dato che creare
HTML da XML richiede un passaggio in più. La risposta è che XML non è utilizzato solamente per creare file HTML, ma anche il file dell’indice analitico ed
esempi di codice che le persone possono eseguire per vedere il risultato. Inoltre, lo stesso XML può essere utilizzato per creare un manuale stampato che potrebbe essere utilizzato in un corso. I file separati vengono creati utilizzando
XSLT. Ciascun tipo di output viene creato utilizzando un diverso documento
XSLT e ciascun documento XSLT è un modello per il suo tipo di output. Qualsiasi documento che utilizza gli stessi tag XML può essere trasformato in quel tipo
di output utilizzando lo stesso documento XSLT, come illustrato nella Figura
1.1. Sebbene all’inizio dobbiate fare un po’ di lavoro in più per creare XML e
XSLT, alla fine risparmierete un sacco di tempo perché potrete riutilizzare XSLT
per creare tutti i file che vi servono. Ciò rende XML e XSLT molto utili nella gestione dei documenti e negli scenari di gestione dei siti Web. Quest’ultimo caso
è particolarmente vero per i siti Web che si rivolgono a più piattaforme, come i
dispositivi palmari, in aggiunta ai normali browser.
Oltre a rivolgervi a più piattaforme utilizzando un solo documento XML e diversi documenti XSLT, potete anche creare una modalità di presentazione unificata
per più documenti XML. Ciò significa che dovete creare un solo documento
XSLT che assicuri la stessa modalità di presentazione in un intero sito. Un ulteriore vantaggio in questo caso è che potete farlo per più linguaggi. Perciò, crea-
XSLT
XSLT
HTML
INDEX
XML
Figura 1.1
Trasformazione XML in più output.
XSLT
Code
Samples
XSLT
Other
formats
002cap01.fm Page 15 Wednesday, July 10, 2002 6:06 AM
Introduzione all’XSLT
15
re un sito Web che possa essere visualizzato in più linguaggi è molto più facile
che con altri approcci. Dopo tutto, l’immagazzinamento dei dati è lo stesso e
così è il documento XSLT.
Un ulteriore vantaggio di immagazzinare dati in un documento XML è che questo può essere consultato utilizzando XPath. Questa procedura funziona un po’
come selezionare dati da un database utilizzando lo Structured Query Language
(SQL). Il documento XML viene perciò utilizzato un po’ come un database.
Un problema con questo tipo di utilizzo si verifica quando si cominciate a lavorare con più utenti. Se chi fa modifica un documento blocca l’accesso, qualcun
altro non può leggerlo o consultarlo. Ciò rende XML inadatto all’impiego in ambiente multiutente. I database (e i server dei database in particolare) sono adatti
all’impiego in ambiente multiutente, ma non possono gestire molto bene XML.
Si può scaricare un documento XML in un database come campo testo, ma poi
bisogna estrarlo dal database prima di poterlo consultare. Per questa ragione, il
supporto di XML si sta introducendo sempre di più nella tecnologia dei database. Alcuni database permettono di estrarre i dati relazionali in essi immagazzinati come XML. Sebbene questa capacità sia solo all’inizio, non è altrettanto valida
quanto un database che permette un supporto nativo per immagazzinamento
XML e rende l’intero XML consultabile con XPath. Tuttavia, questi tipi di database sono diffusi e stanno lentamente evolvendo. Non si avvicinano ancora alla
velocità dei sistemi di database relazionali, ma stanno migliorando rapidamente.
Con questi database, molti tipi di applicazioni esistenti potrebbero essere create
più facilmente e forse potrete creare nuove applicazioni che sono ancora fuori
dalla vostra portata. Potete trovare maggiori particolari sui database XML all’indirizzo http://www.rpbourret.com/xml/XMLDatabaseProds.htm
XML e XSLT nella comunicazione
Poiché XML è un formato dati non proprietario, basato su uno dei principali tipi
di dati, la stringa, può essere letto da quasi tutti i computer. Ciò lo rende il formato dati più utilizzato per la comunicazione tra sistemi. Qualsiasi sistema dotato di un parser XML può consumare e utilizzare XML. I Web Services sono basati su questo concetto. Un Web Service è una funzione fornita da un sistema e utilizzabile da un altro sistema attraverso Internet.
Un Web Service differisce da una pagina Web per il fatto che una pagina Web è
prevista per la visualizzazione, mentre il risultato di un Web Service nella maggior parte dei casi non è diretto. I risultati di un Web Service possono non vedere la luce del giorno per molto tempo dopo che il servizio è stato utilizzato, ma
è ugualmente possibile che il risultato venga utilizzato per visualizzare immediatamente un risultato composito.
002cap01.fm Page 16 Wednesday, July 10, 2002 6:06 AM
16
Giorno 1
I Web Services possono essere implementati con diverse tecnologie. Due delle
tecnologie più diffuse sono XML Remote Procedure Calling (XML-RPC) e Simple
Object Access Protocol (SOAP). Entrambi definiscono un protocollo (o formato
di messaggio) che permette a un sistema di utilizzare una funzione o un altro sistema, come illustrato nella Figura 1.2. Sebbene le due tecnologie siano essenzialmente le stesse, utilizzano due diversi formati XML. Fintantoché un’applicazione che utilizza il servizio sa quale protocollo gestisce, può reperire dati da
quel formato. Se l’applicazione deve manipolare i dati, deve contare su XML
DOM o utilizzare XSLT.
Il tipo di comunicazione implementato da XML-RPC e SOAP non è nuovo. Alcune tecnologie esistenti hanno la stessa funzione. Tuttavia, queste tecnologie, incluse CORBA/IIOP, Microsoft COM/DCOM e Java Remote Method Invocation,
sono tutte molto specifiche del sistema. Inoltre, queste tecnologie non utilizzano l’Hypertext Transfer Protocol (HTTP) per la comunicazione fra sistemi e perciò non passano attraverso un normale firewall di protezione delle reti. Questi
metodi lavorano solo se il firewall è specificamente configurato per permettere
altri protocolli. I sistemi di comunicazione basati su XML non sono specifici del
sistema, perché ogni sistema può trattare dati in forma di stringhe. Con XML-
<?xml version="1.0"?>
<MethodCall>
Application
<methodName>add</methodName>
<params>
Function
<param>
Local function call
Add(5, 2)
<value><int>5</int></value>
</param>
</params>
Local response
Add = 7
</methodCall>
Local response
Add = 7
Local function
XML-RPC call
Add(5, 2)
XML-RPC
Remote
Translatiion
server
XML-RPC response
<?xml version="1.0"?>
<methodResponse>
<params>
<param>
<value><int>7</int></value>
</param>
</methodResponse>
Figura 1.2
Applicazione che fa una chiamata di funzione attraverso Internet.
002cap01.fm Page 17 Wednesday, July 10, 2002 6:06 AM
Introduzione all’XSLT
17
RPC e SOAP, la comunicazione può avvenire attraverso HTTP, per cui funzionerà bene perfino se c’è un firewall installato. XML-RPC e SOAP non sono limitati all’HTTP; tuttavia, sono anche possibili l’e-mail o qualche altro sistema per
comunicare i messaggi.
BizTalk
BizTalk è un’architettura che sviluppa ulteriormente il concetto di comunicazione
fra sistemi con XML. È un’architettura per Enterprise Application Integration, basata
su XML. È progettata per interagire con diversi sistemi in un processo commerciale.
Ciascun sistema coinvolto nel processo può utilizzare diversi formati XML, ognuno
dei quali viene interpretato da un server che dirige il processo. Se necessario, questo server può trasformare i messaggi in un altro formato in modo che possano
essere compresi da un altro sistema. Un’implementazione dell’architettura BizTalk
sarebbe difficilmente possibile senza che XML per interagire fra i sistemi e XSLT
per trasformare i messaggi da un formato all’altro. Per saperne di più su BizTalk, si
consulti il sito http://www.biztalk.org.
Alcuni vecchi protocolli, come Electronic Data Interchange (EDI), stanno anch’essi adottando XML per la comunicazione. Applicazioni chat che utilizzano
XML sono già disponibili. Un giorno o l’altro la maggior parte dei protocolli di
comunicazione verrà sostituita da un singolo protocollo basato su XML.
XML può essere utilizzato anche per comunicare entro un’applicazione. Un importante vantaggio di questo approccio è che ogni componente nel sistema può
accedere nella stessa maniera a dati passati entro il sistema, indipendentemente
dal tipo di componente. Anche dati da fonti diverse possono essere rappresentati nello stesso modo. Perciò, indipendentemente dal fatto che il dato venga da
un database, da un server di posta o da altra fonte, la rappresentazione dei dati
è la stessa. XSLT può essere utilizzato per eliminare le differenze e trasformare i
dati in un formato adatto per tutte i sorgenti. Il vantaggio è che le applicazioni
non devono affrontare le differenze d’interfaccia del sistema sottostante. Ciò vale anche per le funzioni che interagiscono attraverso XML.
Quando non utilizzare XSLT
Sebbene XSLT sia un potente strumento nelle moderne applicazioni guidate dai
dati, non è affatto la risposta a tutti i vostri problemi. In alcune situazioni, altri
approcci sono molto più logici. Non è possibile fornire un elenco completo delle situazioni, ma tratterò alcune delle più comuni applicazioni nei paragrafi seguenti. Queste informazioni daranno un’idea delle situazioni da che dovete evitare o almeno pensarci su due volte. Dovrete utilizzare queste informazioni insieme alla vostra esperienza per giudicare se XSLT è la giusta soluzione per il
problema che state cercando di affrontare.
002cap01.fm Page 18 Wednesday, July 10, 2002 6:06 AM
18
Giorno 1
Problemi di prestazioni di XSLT
XSLT è estremamente utile nelle applicazioni in cui la conversione dei dati è essenziale, come nella gestione dei documenti e nelle applicazioni per l’editoria.
A causa delle sue prestazioni, XSLT è meno utile in applicazioni che richiedono
molta elaborazione. Le prestazioni di XML e XSLT cambieranno, tuttavia, mano
a mano che le applicazioni diventeranno sempre più centrate attorno ad essi. Le
applicazioni che non soffrono molto per i problemi di prestazione sono quelle
di tipo distribuito, in cui la trasformazione può essere effettuata sul client. Con i
principali fornitori di browser che inseriscono il supporto XML e XSLT nei loro
prodotti, le applicazioni Web che utilizzano XML e XSLT possono utilizzare la
potenza del client e così probabilmente ridurre il traffico di rete. Questo approccio è molto meglio di un server che deve effettuare tutta la trasformazione
in un formato che possa essere letto dal client, poiché il processo di trasformazione in una tale applicazione potrebbe diventare un importante collo di bottiglia.
Uno specifico scenario che soffre per problemi di prestazione è costituito dai siti Web che utilizzano XML e XSLT. Fino a questo momento, i principali browser
non supportano adeguatamente XSLT. Perciò, operare trasformazioni nel browser, distribuendo il carico, non è ancora possibile. Trasformare tutto l’XML in fase di esecuzione in un sito Web in attività è una soluzione troppo lenta per essere fattibile. Benchmark preliminari con il processore XSLT nel .NET Framework della Microsoft suggeriscono, tuttavia, che questa situazione può cambiare anche prima del previsto.
Applicazioni di immagazzinamento dati
Attualmente, problemi sia di prestazione sia di concorrenza rendono XML e
XSLT meno adatti per applicazioni di immagazzinamento dati. Sebbene esistano
database XML nativi, essi non possono competere con i principali database relazionali che sono stati per un po’ sulla cresta dell’onda. Se potete strutturare i vostri dati per immagazzinarli in un database relazionale, tuttavia, è possibile
estrarre i dati come XML se si utilizza qualcuno dei database relazionali correnti.
SQL Server 7 e Oracle forniscono aggiornamenti che permettono di restituire il
risultato di una query in formato XML. SQL Server 2000 offre questa possibilità
per default e può essere configurato per farlo sul Web.
Applicazioni di elaborazione
XSLT è carente anche nelle applicazioni a forte carico elaborativo. Sebbene
XSLT offra certamente capacità di elaborazione, la maggior parte dei linguaggi,
come C e FORTRAN, tanto per citarne alcuni, offrono molte più funzioni per
elaborazioni complesse e con prestazioni molto superiori.
002cap01.fm Page 19 Wednesday, July 10, 2002 6:06 AM
Introduzione all’XSLT
19
Utilizzare CSS invece di XSLT
In scenari in cui i documenti XML sono indirizzati al Web, XSLT potrebbe essere
eccessivo. Se i dati non hanno bisogno di essere filtrati e sono nel giusto ordine,
i Cascading Stylesheets (CSS) fa molto bene il suo lavoro. I CSS non sono affatto
limitati all’utilizzo con HTML. Infatti, potete “inventare” tag in HTML e associarli
a uno stile. Poiché, a tutti gli effetti, i tag XML possono essere considerati come
tag HTML inventati da voi stessi, collegarvi uno stile è facile come in HTML. In
questo scenario, utilizzare XSLT è in realtà controproducente. Utilizzare i CSS è
una soluzione rapida, che non richiede la conoscenza di XSLT e che può essere
probabilmente gestita dalla maggior parte degli sviluppatori Web.
Come opera XSLT?
Una volta afferrato il quadro generale di XSLT, è ora di passare alle applicazioni
effettive del linguaggio. Prima di cominciare a lavorare effettivamente con
XSLT, tuttavia, bisogna capire alcuni concetti fondamentali sul suo modo di
operare.
Il processo di trasformazione di un documento XML viene effettuato da un processore, che è un’applicazione (o componente software) che legge un documento XML e un documento XSLT e applica XSLT a XML. I processori esistono
sia come applicazioni eseguibili dalla riga comandi, sia come componenti software che possono essere utilizzati in un’applicazione. Nel prossimo paragrafo
parlerò di alcuni dei processori più diffusi e del modo in cui vengono utilizzati.
Un processore consuma XML e, come tale, è costruito su un parser XML. Questo parser può caricare i documenti XML e XSLT per mezzo del DOM e quindi
applicare XSLT a XML. Un’altra opzione è un processore basato su SAX.
La mia discussione sulla trasformazione di XSLT a questo punto è puramente teorica e liberamente basata sull’approccio DOM. I processori effettivi molto probabilmente non seguono esattamente questo processo.
Spiegazione della trasformazione XSLT
Per capire l’effettivo processo di trasformazione, esaminiamo un esempio di trasformazione. I Listati 1.3 e 1.4 mostrano un esempio di documento XML e il documento XSLT da applicare ad esso.
Listato 1.3
XXXXXXXXXXXXXXXXXXXXXXXXXXX
<?xml version="1.0" encoding="UTF-8" ?>
<pets>
002cap01.fm Page 20 Wednesday, July 10, 2002 6:06 AM
20
Giorno 1
<pet type="cat">Max</pet>
<pet type="parrot" color="red">Peter</pet>
</pets>
ANALISI
Il Listato 1.3 è un semplice documento XML che rappresenta i miei animali preferiti (pets) (in realtà non ho un pappagallo). I nomi degli animali preferiti compaiono fra i tag <pet>, che hanno un attributo type che denota il tipo di animale preferito (in questo caso, un gatto (cat) e un pappagallo (parrot)). Per il pappagallo, ho anche definito un attributo color. La Figura 1.3 mostra una rappresentazione ad albero del Listato 1.3.
Nella Figura 1.3, i cerchi rappresentano elementi (tags) nel sorgente XML. Le losanghe rappresentano gli attributi (di un tag). I rettangoli rappresentano i valori
dell’elemento o dell’attributo cui sono associati. Entro questo albero, i cerchi e
le losanghe sono chiamati nodi. Quando quest’albero viene trasformato utilizzando XSLT, il processore parte dal nodo radice e “percorre l’albero”nella direzione indicata dalle frecce. Quando il processore trova un nodo, cerca una regola nel documento XSLT corrispondente al nome e alla posizione di quel par-
root node
pets
element
pet
Max
type
pet
Cat
value
Peter
type
Parrot
color
green
attribute
color
Figura 1.3
Albero a nodi che rappresenta il Listato 1.3.
red
002cap01.fm Page 21 Wednesday, July 10, 2002 6:06 AM
Introduzione all’XSLT
21
ticolare nodo entro l’albero. Se trova la regola, quella regola viene poi applicata
a quel nodo. Ciò significa che l’esecuzione di XSLT non la una sequenza passo
per passo che è comune a linguaggi come C, FORTRAN e COBOL. Questi linguaggi sono procedurali di natura e quindi seguono una successione predeterminata di comandi. I linguaggi orientati agli oggetti, come C++, Java e Visual
Basic, sono basati sullo stesso modello, salvo che le sequenze fanno parte delle
operazioni su oggetti. Una caratteristica che i linguaggi orientati agli oggetti aggiungono a questa è l’esecuzione guidata dagli eventi, che significa che il codice viene eseguito quando si verifica qualche evento: per esempio, quando fate
clic su un pulsante.
L’esecuzione di XSLT è simile all’esecuzione guidata dagli eventi. In questo tipo
di esecuzione, un evento determina la sequenza in cui il codice viene eseguito.
Nell’XSLT, questa sequenza è determinata dai dati che incontra. Questa è la ragione per cui XSLT è basato sull’esecuzione guidata dai dati, che significa che
il codice viene eseguito quando si incontra un certo dato.
Il Listato 1.4 contiene un semplice documento XSLT che potete utilizzare per
trasformare l’XML del Listato 1.3. Consiste in quattro regole che determinano se
il codice deve essere eseguito o meno.
Listato 1.4
Esempio di documento XSLT per Pets
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"
omit-xml-declaration="yes" />
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="pets">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="pet">
My <xsl:value-of select="@type" /> is called <xsl:value-of select="."
/>.
<xsl:apply-templates select="@color" />
</xsl:template>
<xsl:template match="@color">
<xsl:value-of select=".." /> is <xsl:value-of select="." />.
</xsl:template>
</xsl:stylesheet>
002cap01.fm Page 22 Wednesday, July 10, 2002 6:06 AM
22
Giorno 1
L’output del Listato 1.4 appare come Listato 1.5.
Listato 1.5
Output quando si applica il Listato 1.4 al Listato 1.3
My cat is called Max.
My parrot is called Peter.
Peter is red.
A meno che non sia diversamente specificato, tutti gli output sono il risultato dell’utilizzo di (Instant) Saxon versione 6.2.2. Questo programma e parecchi altri saranno trattati più avanti in questa lezione.
Lo spazio bianco fra le righe di testo nel Listato 1.5 deve esserci. Sembra
basato sul modo in cui XSLT tratta lo spazio bianco per default. Nel
Giorno 7, “Controllo dell’output”, si imparerà come eliminare lo spazio
bianco.
La prima regola <xsl:template match=” /”> viene applicata quando comincia
l’elaborazione, poiché corrisponde alla radice del documento. Entro questa regola, il comando <xsl:apply-templates /> dice al processore di proseguire
verso un nodo o nodi figlio. In questo esempio, il nodo figlio è pets, che dice al
processore di rifare la stessa cosa. Questo porta il processore su al primo nodo
pet, innescando il modello appropriato, il primo dei quali effettivamente genera
output. Il secondo nodo figlio viene elaborato dalla stessa regola, che procede a
innescare la regola dell’attributo color.
Come si può vedere, l’output è diverso per il primo e il secondo pet, perché il
primo non ha un attributo color. Questa è la caratteristica essenziale di XSLT.
Se non c’è un nodo (elemento o attributo), non accade nulla. Ma se c’è, la regola viene applicata. Se avete esperienza di programmazione, potreste pensare
che ciò non sia molto diverso da un programma che legge l’input e opera su di
esso. Tale programma, tuttavia, contiene comandi espliciti che spiegano cosa
fare con un certo input. XSLT funziona nel modo opposto: i comandi sono là,
ma vengono utilizzati solo quando si possono applicare.
Programmare codice guidato dagli eventi può essere difficile perché non si sa in
quale ordine possano presentarsi gli eventi; così, non si sa in che sequenza sarà
eseguito il codice. Per contro, il modello guidato dagli eventi è molto più simile
a ciò che avviene nella maggior parte delle applicazioni. Scrivere codice guidato dai dati può essere ancora più difficile, perché il codice viene eseguito in modo non deterministico, a seconda che certi dati esistano e della posizione dei
dati entro l’albero del documento. Se la posizione di qualche dato è diversa, diverso è anche l’ordine di esecuzione. Il risultato, tuttavia, non deve essere necessariamente diverso.
002cap01.fm Page 23 Wednesday, July 10, 2002 6:06 AM
Introduzione all’XSLT
23
Comprendere la programmazione dichiarativa
Finora, abbiamo visto che XSLT è un linguaggio di programmazione basato su
regole. Un’altra differenza importante fra XSLT e alcuni dei linguaggi di programmazione più comuni è che XSLT è anche un linguaggio di programmazione dichiarativo. Con un linguaggio di programmazione dichiarativo, si dice al
computer che cosa fare invece di come fare qualcosa.
I linguaggi di programmazione dichiarativi distinguono i passi che il computer
deve eseguire da ciò che si vuole che il computer faccia. Invece di programmare i passi che il computer deve eseguire, si specifica cosa si vuole che avvenga.
Probabilmente il linguaggio dichiarativo più utilizzato è lo Structured Query
Language (SQL). SQL specifica quali dati si vogliono ottenere da un database.
Non dice al database come ottenere i dati. Questo compito è riservato al processore delle query. In modo analogo, XSLT riserva il “come” al processore. Ciò
effettivamente tiene conto dei diversi modelli parser/processore. La differenza
rispetto al “come” dei processori basati su DOM e SAX è grandissima, ma XSLT
opera ugualmente bene su entrambi i tipi senza alcuna modifica. Analogamente, i server dei database possono implementare un immagazzinamento dati
completamente diverso l’uno dall’altro. Purché possano capire SQL, il risultato è
lo stesso.
Come per la programmazione basata su regole, la programmazione dichiarativa
richiede un po’ di tempo per familiarizzarsi. Con i linguaggi non dichiarativi, si
ha un controllo effettivo su ciò che accade perché si specifica ogni passo del
processo. Poiché non si specifica ogni passo in un linguaggio dichiarativo, c’è
un minor controllo sul risultato (o questo è ciò che si pensa, in ogni caso). Il
vantaggio della programmazione dichiarativa è che, in generale, il processo di
programmazione procede più rapidamente. Quando occorre un risultato leggermente diverso dal caso generale, la programmazione richiede un impegno
maggiore, perché si deve operare con un corredo diverso di strumenti. Laddove
nei linguaggi tradizionali è possibile cambiare un passo dell’elaborazione, qui ci
si deve accontentare di ciò che il processore offre. Bisogna trovare il modo di
utilizzare gli strumenti forniti dal linguaggio.
Si può paragonare la programmazione dichiarativa all’allenamento di una squadra di calcio. Come allenatore, non giocate effettivamente in una partita. Vi limitate a dire ai giocatori ciò che volete che facciano. Come lo fanno dipende da
ciò che accade durante la partita. La differenza fra un computer e una squadra
di calcio è che il computer farà esattamente quello che gli dite di fare, mentre
una squadra non è detto che lo faccia. Tuttavia, anche se il computer fa esattamente ciò che gli dite di fare, il risultato può essere diverso da quello che vi
aspettavate. Ricordate i Listati 1.3 e 1.4. Volevo solo due righe di testo; invece
ho ottenuto più righe e uno spazio bianco che non avevo previsto. Per elimina-
002cap01.fm Page 24 Wednesday, July 10, 2002 6:06 AM
24
Giorno 1
re lo spazio bianco, ovviamente devo specificare ciò che voglio con maggior
precisione.
Creare file XSLT
Prima di fare qualsiasi cosa, bisogna creare documenti XML e XSLT. Per creare
entrambi, si hanno molte opzioni; le più comuni verranno trattate nei prossimi
paragrafi. La maggior parte sono applicazioni Windows, ma alcune sono disponibili per altre piattaforme o sono basate su Java e potranno essere eseguite su
qualsiasi piattaforma che utilizza il Java Runtime Enviroment.
Utilizzare un editor di testi
Si può creare un file XML con diversi strumenti. Poiché è solo testo, va bene
qualsiasi editor di testi, come Blocco note, Textpad o UltraEdit. Il vantaggio di
utilizzare un editor di testi è chiaramente quello di poter fare cambiamenti rapidi, perché questi programmi sono leggeri e si caricano velocemente. Inoltre, i
testi sono facili da modificare. Tuttavia, l’utilizzo di un editor di testi non è l’approccio migliore per scrivere XSLT (o XML). Lo svantaggio principale è che XML
e XSLT devono essere adeguatamente strutturati e che i comandi devono essere
precisi. Quando si utilizza un editor di testi è facile fare errori di battitura e spesso dimenticare un tag di chiusura.
Utilizzare un editor di XML
Gli editor di XML si presentano in diverse forme. I più elementari offrono una
visualizzazione con codifica a colori e talvolta il controllo della sintassi. Questi
editor fanno spesso parte di un ambiente di sviluppo utilizzato per creare siti
Web. Un buon esempio di editor di questo tipo è Allaire Homesite. A partire
dalla versione 4.5.2, supporto i tag XML standard e, per le versioni precedenti,
sono disponibili espansioni.
Altri tipi di editor offrono un’interfaccia in è facile modificare i nodi entro un
documento. Questi editor rappresentano il documento XML come una diagramma ad albero che si può manipolare. Il più semplice editor di questo tipo è XML
Notepad, che è possibile scaricare gratuitamente da http://msdn.microsoft.com/xml/. Anche XML Pro version 2.01 della Vervet Logic ( http://www.vervet.com) supporta questo tipo di interfaccia e ha supporto DTD.
Il terzo tipo di editor combina la modifica del codice sorgente con quello
dell’albero dei nodi. Questo tipo di editor dà il vantaggio di una manipolazione
dell’albero meno soggetta a errori, ma allo stesso tempo offre un maggior controllo sul codice sorgente effettivo. Quando si ha a che fare con un output più
specifico, questo controllo è molto importante. Nel momento in cui scrivo, uno
dei migliori editor è XML Spy (http://www.xmlspy.com), che offre molte opzio-
002cap01.fm Page 25 Wednesday, July 10, 2002 6:06 AM
Introduzione all’XSLT
25
ni. Con l’utile opzione di completamento automatico, è facile raccogliere elementi e attributi XSLT. Poiché il completamento automatico è sensibile al contesto, mostra solamente gli elementi o gli attributi che valgono per quella posizione in un documento. XML Spy è componibile con altri strumenti, per cui potete
configurarlo con il parser che volete.
Il problema della maggior parte dei normali editor XML è che non hanno il supporto XSLT incorporato. Ciò significa che non possono convalidare in modo
predefinito i tag XSLT. Se supportano la convalida contro uno Schema o una
DTD, potete implementare questa convalida voi stessi. Convalidare i vostri documenti XSLT è di capitale importanza se volete essere in grado di creare rapidamente questo tipo di documenti. La convalida riduce gli errori tipo tag XSLT
sbagliati o attributi che non sono supportati da un tag specifico.
Editor e debugger XSLT
Sono attualmente disponibili alcuni editor e debugger XSLT. Queste applicazioni offrono molto di più di un’interfaccia che permetta la rapida creazione di documenti XSLT. Offrono opzioni di debugging; per esempio, permettono di eseguire una trasformazione passo per passo, dove ciascun passo indica quale regola viene innescata. Il principale vantaggio di questa capacità è che consente
di vedere che cosa sta accadendo e talvolta dove si sta sbagliando.
eXcelon Stylus Studio
eXcelon Stylus Studio (http://www.stylusstudio.com) permette di scrivere
XSLT completamente a mano, aiutati da uno strumento di completamento automatico che mostra gli elementi e attributi XSLT disponibili. Un’altra opzione è
quella di scrivere il documento XSLT solo parzialmente a mano, sulla base di un
file XML esistente. Dalla rappresentazione ad albero del file XML, si possono
anche creare regole che dovrebbero essere applicate a quell’elemento. Con il
parser incorporato, si può poi attraversare il processo di trasformazione. Altri
processori possono essere associati, ma in questo caso non viene supportato il
percorso passo per passo.
Marrowsoft Xselerator
Marrowsoft Xselerator (http://www.marrowsoft.com) non ha così tante caratteristiche come Stylus Studio, ma offre un completamento automatico sensibile al
contesto. Offre solo quegli elementi XSLT che dovrebbero essere disponibili in
quella parte del documento su cui state lavorando. Come Stylus Studio, fornisce
processori passo per passo e incorporabili. Xselerator è molto facile da utilizzare e fornisce rapidi risultati.
002cap01.fm Page 26 Wednesday, July 10, 2002 6:06 AM
26
Giorno 1
Debugger XSL
Un’alternativa interessante ai prodotti commerciali descritti nei precedenti paragrafi è il Debugger XSL, sviluppato da TopXML.com (http://www.topxml.com),
un sito Web di comunità su XML. Sebbene limitato come editor, fornisce un solido debugging, che lo rende utile come strumento di sviluppo addizionale per
chi sta già utilizzando un editor come XML Spy.
Visual Studio.NET
Visual Studio.NET in sé non fornisce alcuna capacità di debugging XSLT. Tuttavia, Visual Studio.NET è altamente inseribile, dando ai venditori terzi l’opportunità di creare qualcosa. Active State (http://www.activestate.com) ha sviluppato Visual XSLT come elemento aggiuntivo per Visual Studio.NET. Questo elemento aggiuntivo fornisce un debugging tipo XSL Debugger e la convalida dei
tag.
Strumenti di progettazione XSLT
L’ultimo tipo di editor disponibile va alla creazione di XSLT dalla direzione opposta. Utilizzando un documento XML esistente, potete creare documenti XSLT
in ambiente WYSIWYG. Utilizzare questo editor è un po’ come lavorare con un
editor HTML WYSIWYG, ma con alcune funzioni aggiunte per lavorare con documenti XML. Whitehall <xsl> Composer (http://www.whitehall.com) è l’unico
prodotto di questo tipo disponibile sul mercato. <xsl> Composer è straordinario
perché non dovete avere alcuna conoscenza di XSLT per utilizzarlo. Tuttavia,
come con tutti questi ambienti, è molto difficile ottenere esattamente ciò che si
vuole.
Processori per trasformazione di XML
con XSLT
Attualmente sono disponibili molti processori e molti altri sono in via di sviluppo. Non è necessario trattarli tutti, per cui ci limitiamo qui a parlare di quelli più
conosciuti: MSXML, Saxon e Xalan. Sebbene questi processori siano gratuiti, vi
consigliamo di leggere l’accordo di licenza prima di utilizzarli. Potete trovare un
elenco di altri parser disponibili all’indirizzo http://www.w3.org/Style/XSL/.
Un altro processore destinato a diventare popolare è il processore XSLT .NET
Framework. Qui non viene trattato perché non può ancora essere chiamato dalla riga comandi. Lo cito, tuttavia, perché i test preliminari mostrano che questo
processore supera tutti i processori esistenti con un notevole margine.
002cap01.fm Page 27 Wednesday, July 10, 2002 6:06 AM
Introduzione all’XSLT
27
MSXML
MSXML è il parser/processore disponibile da Microsoft. La prima versione è stata distribuita insieme con Internet Explorer 5.0. Poiché è stata distribuita prima
che la specifica XSLT fosse definitiva, questa versione non è completamente
conforme. Le versioni 2.0 e 2.6 sono un passo avanti nella giusta direzione, ma
sono ancora carenti in alcune aree. MSXML 3.0 e versioni successive funzionano bene e vengono spesso utilizzate dagli sviluppatori Visual Basic e Active Server Pages (ASP). L’ultima versione è disponibile all’indirizzo http://msdn.microsoft.com/xml/.
MSXML è un componente, per cui non può essere eseguito come applicazione
separata. Se volete utilizzarlo, dovete scrivere un’applicazione. Dover affrontare
tutti questi fastidi suona piuttosto male, ma nove volte su dieci XML e XSLT verranno ad ogni modo utilizzati in un’applicazione personalizzata. Tuttavia, Microsoft ha fornito un eseguibile dalla riga comandi chiamato MSXSL, che potete
anche scaricare dall’indirizzo http://msdn.microsoft.com/xml/.
Installazione di MSXML e MSXSL
MSXML viene offerto in un package di installazione Windows. Per installarlo,
aprite il package e seguite la procedura di installazione. Poiché non ha opzioni,
la vostra installazione non può che riuscire.
MSXML viene fornito senza alcuna documentazione. La documentazione fa parte del MSXML Software Developers Kit (SDK), che potete scaricare da http://msdn.microsoft.com/xml.
MSXML viene fornito in un file ZIP. Salvo aprire il package, non dovete fare alcuna installazione. Potete eseguirlo dalla riga comandi, ma assicuratevi che sia
nella stessa directory o che sia definito un percorso alla directory che contiene
l’eseguibile. Il modo più facile per assicurarvi di ciò è quello di mettere MSXSL.exe nella directory System o System32 di Windows. Il file ZIP contiene anche
un documento Word che riporta tutte le opzioni della riga di comando.
Esecuzione di MSXSL
Per eseguire MSXSL, seguire questa procedura:
1. Aprire il prompt dei comandi di MS-DOS.
2. Passare alla directory che contiene i file XML e XSL. Si può anche specificare l’intero percorso ai file quando si chiama MSXSL.
3. Al prompt dei comandi, scrivere:
msxsl source.xml stylesheet.xsl
Se la sintassi dei documenti è corretta, viene visualizzato l’output.
002cap01.fm Page 28 Wednesday, July 10, 2002 6:06 AM
28
Giorno 1
Come si può vedere, la trasformazione dal prompt dei comandi è abbastanza facile. Le opzioni dalla riga comandi di MSXSL saranno trattate nell’Appendice C,
“Opzioni dalla riga comandi per i parser comuni”.
Saxon
Saxon è un processore XSLT basato su Java che è stato sviluppato da Michael
Kay. Viene distribuito con un parser SAX, ma può operare anche con altri parser SAX. Poiché funziona su Java, potrà lavorare su tutti i sistemi che hanno Java
Runtime Environment installato. Per gli utenti di Windows, è anche disponibile
un eseguibile che può essere eseguito dal prompt dei comandi. Per i programmatori, Saxon offre un’API che può essere utilizzata con Java.
Installazione di Saxon
Potete scaricare Saxon da http://users.iclway.co.uk/mhkay/saxon/ . In questo caso, potete scegliere fra due versioni: la versione completa e Instant Saxon.
Dovete eseguire la versione completa sotto Java, mentre la Instant Saxon può
essere eseguita dal prompt dei comandi di Windows. Entrambe richiedono che
sia installato Java Runtime Environment versione 1.1 o superiori.
Dopo aver aperto il package di Instant Saxon, mettetelo in una directory a vostra scelta. Quindi eseguite Instant Saxon dalla riga dei comandi, o nella stessa
directory come eseguibile o da un’altra directory se avete definito il percorso
all’eseguibile.
Se installate la versione completa, assicuratevi che la variabile d’ambiente della
classpath Java abbia un riferimento a saxon.jar.
Esecuzione di Saxon
Per eseguire Saxon, seguie questa procedura:
1. A seconda del sistema operativo, aprire il prompt dei comandi, una finestra di comando o la shell.
2. Se si utilizza Instant Saxon, scrivere:
saxon source.xml stylesheet.xsl
Se si utilizza Saxon con Java, scrivere
java com.icl.saxon.StyleSheet source.xml stlesheet.xsl
Se l’input è corretto, dovrebbe essere visualizzato l’output.
Xalan
Xalan è un processore sviluppato da Apache XML Project ( http://xml.apaLa prima versione Xalan-C++, non è più disponibile ed è stata sostitu-
che.org).
002cap01.fm Page 29 Wednesday, July 10, 2002 6:06 AM
Introduzione all’XSLT
29
ita da Xalan-Java. Potete scaricarlo da http://xml.apache.org/xalan-j/index.html.
Xalan lavora sul parser Xerces-Java. È inseribile, per cui può girare anche con
altri parser. Come Saxon, Xalan offre un’API che permette di utilizzare Xalan
entro le applicazioni Java.
Installazione di Xalan-Java
Il parser Xalan-Java viene offerto in un package ZIP o GNU-ZIP, che può essere
estratto nella directory che si preferisce. Bisogna poi aggiungere un riferimento
nella variabile d’ambiente classpath Java che punta a xalan.jar nella directory
bin del package estratto.
Esecuzione di Xalan-Java
Per eseguire Xalan-Java, seguire questa procedura:
1. A seconda del sistema operativo, aprire il prompt dei comandi, una finestra di comando o la shell.
2. Dal prompt dei comandi, eseguire Xalan, scrivendo
java org.apache.xalan.xslt.Process
stylesheet.xsl
-in source.xml
-xsl
Riepilogo
Oggi abbiamo imparato che XSLT è un linguaggio per manipolare e trasformare
i documenti XML. XSLT, che è esso stesso XML, offre un vocabolario di comandi che esegue certe funzioni su un documento XML. XSLT è stato sviluppato come parte di XSL, ma può essere utilizzato per conto suo. XSLT incorpora XPath
per selezionare e filtrare elementi e attributi entro un documento XML.
XML e XSLT hanno le loro origini in SGML e DSSSL, ma sono molto più semplici. Altre tecnologie sono state aggiunte alla famiglia di XML, per cui è ancora in
crescita. Alcune di queste tecnologie, come i namespace XML, hanno grande influenza su XSLT.
XSLT è utile in scenari di gestione di documenti in cui occorrono più output
dello stesso documento. Questi documenti di destinazione possono essere di
vari tipi, come per esempio testo semplice, HTML, XML e PDF. Quando il Web
è l’unica destinazione, il CSS può essere una possibile alternativa. A causa dei
problemi di concorrenza e di prestazione, l’XML è meno utile per l’immagazzinamento dati di livello superiore e per scenari in cui è richiesta la trasformazione dal lato server.
Molti processori sono disponibili per XSLT, basati su diversi parser e su diversi
tipi di parser (cioè, DOM e SAX). I parser basati su Java possono essere utilizzati
nelle applicazioni Java e dalla riga di comando. Anche la Microsoft offre un par-
002cap01.fm Page 30 Wednesday, July 10, 2002 6:06 AM
30
Giorno 1
ser/processore e un componente addizionale per eseguirlo dalla riga di comando.
Domani imparerete i fondamenti di XSLT e comincerete a lavorare sulla prima
trasformazione.
Domande e risposte
D. XSLT sostituirà CSS?
R. Probabilmente no. XSLT è più complesso di CSS, per cui per documenti
semplici CSS è una buona soluzione che molti sanno come utilizzare.
Inoltre, CSS può creare effetti che XSLT non sa creare. XSLT e CSS possono essere utilizzati insieme per creare documenti in Rich Text Format.
Un problema di CSS è che opera soltanto su dati elemento. I dati immagazzinati negli attributi non possono essere visualizzati con CSS, mentre
possono esserlo con XSLT.
D. Sembra che XML/XSLT abbia alcuni difetti che devono essere eliminati. Perché dovrei cominciare a imparare XSLT proprio ora?
R. XML/XSLT è uno dei campi della tecnologia a più rapido sviluppo in
questo momento, con il supporto della maggior parte delle principali
aziende. Molti dei problemi sono noti e sotto esame. Al più presto si
cercherà di risolverli. Un buon esempio è rappresentato dai debugger
XSLT. Fino a poco tempo fa, non era disponibile alcun debugger XSLT e
non molti avevano un’idea di come crearne uno, perché XSLT opera in
modo diverso dai linguaggi come Visual Basic. Ora sono invece disponibili molti buoni prodotti.
Quando cominciate a operare con XSLT, anche voi vedrete che può risolvere problemi che ora richiedono un grande sforzo. XSLT, in questo
senso, è solo un altro strumento a vostra disposizione.
Aree in cui XSLT sarà molto utile sono le applicazioni orientate verso
più piattaforme, applicazioni in più linguaggi, conversione fra diversi
formati di immagazzinamento dati e applicazioni che lavorano con dati
relativamente non strutturati che richiedono di essere consultati.
Esercizi
Questi esercizi vi permetteranno di mettere alla prova i concetti appresi in questa lezione. Vi sarà utile conoscere e capire le risposte prima di iniziare la prossima lezione. Potete trovare le risposte al quiz e agli esercizi nell’Appendice A.
002cap01.fm Page 31 Wednesday, July 10, 2002 6:06 AM
Introduzione all’XSLT
Quiz
1. Vero o falso: XSLT può trasformare XML in XML, HTML e diversi formati
di file basati su testo.
2. Vero o falso: dovete utilizzare xsl come namespace per XSLT.
3. Cosa vi serve per eseguire XSLT?
4. XSLT è basato su un modello di programmazione guidato dai dati. Cosa
vuol dire?
5. XSLT è un linguaggio di programmazione dichiarativo. Qual è la differenza fra linguaggi dichiarativi e linguaggi come C, Java e Visual Basic?
6. Quale tipo di strumenti potete utilizzare per creare documenti XSLT?
Esercizio
1. Create un documento XML con il seguente codice:
<?xml version="1.0" encoding="UTF-8" ?>
<pets>
<pet type="cat">Max</pet>
<pet type="parrot" color="red">Peter</pet>
</pets>
Adesso create un documento XSLT col seguente codice:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"
omit-xml-declaration="yes" />
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="pets">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="pet">
My <xsl:value-of select="@type" /> is called
<xsl:value-of select="." />.
<xsl:apply-templates select="@color" />
</xsl:template>
<xsl:template match="@color">
<xsl:value-of select=".." /> is <xsl:value-of select="." />.
31
002cap01.fm Page 32 Wednesday, July 10, 2002 6:06 AM
32
Giorno 1
</xsl:template>
</xsl:stylesheet>
Eseguire i file utilizzando qualcuno dei processori trattati oggi. Se utilizzate due
diversi processori, l’output sarà il medesimo?
Scarica