Introduzione a XSL (eXtensible Stylesheet Language) Introduzione a XSL Tutte le volte che abbiamo l’esigenza, non solo di colorare o spostare a schermo i contenuti di un documento XML, ma anche di filtrarli, riorganizzarli come gerarchia, eseguire dei calcoli, e altro ancora, i CSS non possono esserci d’aiuto. I CSS si occupano solo della formattazione del testo contenuto all’interno dei tag di un documento XML. Per superare questo limite dei CSS, il W3C ha prodotto un linguaggio di stile pensato specificatamante per XML: eXtensible Stylesheet Language (XSL). CSS e XSL I fogli di stile CSS applicano le regole di formattazione direttamente al contenuto del documento per creare i risultati desiderati e possono essere utilizzati sia con i documenti HTML sia con i documenti XML. I fogli di stile XSL eseguono invece una trasformazione (in altri formati, es. PDF, XML, HTML) del contenuto del documento e possono essere usati solo con documenti XML. Un'altra differenza significativa consiste nel fatto che i CSS contengono solo regole di formattazione, mentre i fogli XSL contengono anche regole di trasformazione. XSL (1) I fogli di stile XSL offrono lo stesso livello di formattazione e di flessibilità dei fogli di stile CSS, ma utilizzano metodi diversi. XSL consiste di un insieme di strumenti: • XSLT (eXtensible Stylesheet Language for Transformation): un linguaggio per la trasformazione di documenti XML in altri documenti (es: per trasformare un XML in un HTML o in un XML di un altro DTD) • Xpath: un linguaggio per riferire o definire parti di un documento XML (es: il contenuto di un tag <pippo> all’interno di un tag <pluto>) • XSL FO (Formatting Object): un linguaggio per la formattazione di documenti XML (simile a CSS) Nota: XSL FO non è supportato dai browser ed esistono solo pochi strumenti che oggi lo sfruttano (es: esiste uno strumento che è in grado di trasformare dei file XML in PDF sulla base della specifica XSL FO). Ci si aspetta che in un breve futuro sia supportato dai browser direttamente... XSL (2) L’idea è quella di partire da un documento sorgente XML e trasformarlo in un differente documento destinazione XML. A questo scopo: XSLT sono le regole che dicono come i vari pezzi devono essere trasformati Xpath sono le indicazioni che dicono a quali pezzi gli XSLT devono fare riferimento Poiché un foglio di stile XSL è a sua volta un documento XML (ben formato), deve iniziare con la dichiarazione (nel prologo) <?xml version="1.0"?> XSL (3) Un documento XSL è costituito secondo il seguente schema: <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl=“http://www.w3.org/1999/XSL/Transform” version=“1.0”> <!-- Qui sarà caricato il contenuto del documento XSL --> </xsl:stylesheet> Namespace alias per il Namaspace versione di XSLT XSL: esempio primo.xsl <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform" version="1.0"> <xsl:template match="/"> applica a tutto il documento <html> <head> <title>Prima trasformazione da XML a HTML</title> </head> <body> <h1>Prova di scrittura documento HTML</h1> </body> </html> </xsl:template> </xsl:stylesheet> XSLT Per provare le trasformazioni XSLT sfruttiamo il supporto nativo fornito a XSLT da Microsoft Internet Explorer 6.0 e da Mozilla. Produrremo quindi trasformazioni da XML a HTML. E’ sufficiente inserire nel prologo di documento XML una processing instruction che colleghi l’XSL all’XML nel modo seguente: <?xml version="1.0"?> <?xml-stylesheet type=“text/xsl” href=“primo.xsl” ?> <documento /> primo.xml In questo caso al documento (praticamente vuoto tranne che per il tag root di nome documento) verrà applicata la trasformazione primo.xsl. Esempio Applichiamo la trasformazione XSLT descritta nel file primo.xsl al documento primo.xml e visualizziamo il risultato con un browser: primo.xml Elaborazione XSL (primo.xsl) Direttive XSL (1) XSL usa uno o più template per individuare un elemento o un gruppo di elementi del documento XML attraverso la seguente sintassi: <xsl:template match="valore"> che permette di associare il template specificato con un elemento XML (specificando il valore "/" si associa il template all'intero documento XML). Un tag molto usato è <xsl:apply-templates />; ad esempio, con il modello abbinato alla radice si può scrivere: <xsl:template match="/"> <xsl:apply-templates /> </xsl:template> Il tag <xsl:apply-templates/> indica al parser di continuare a scandire il documento XSL alla ricerca di altri modelli da applicare ai nodi sottostanti, ovvero i nodi figli. Direttive XSL (2) All’interno del template che abbiamo associato al nodo root possiamo leggere e scrivere in uscita il valore di un qualsiasi nodo utilizzando il comando value-of: <xsl:value-of select=“....” /> Per esempio la scrittura (inserita nella template che fa il matching del nodo root): <xsl:value-of select=“/clienti/cliente/id” /> restuisce il contenuto testuale del tag di nome id, del primo tag cliente del figlio clienti. Direttive XSL (3) Elemento XSL Descrizione Direttive XSL (4) Elemento XSL Descrizione