La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis

Presentazioni simili


Presentazione sul tema: "XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis"— Transcript della presentazione:

1 XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis francesco.deangelis@unicam.it

2 XSLT - eXtensible Stylesheet Language Transformation2 Agenda XSL e XSLT Modello XSLT I template Creazione di Elementi Creazione di Attributi Prelievo di valori Definizione della struttura di destinazione Iterazione Istruzioni condizionali Ordinamento Stile Iterativo e ricorsivo Esempi…

3 XSLT - eXtensible Stylesheet Language Transformation3 CSS e XSL CSS (Cascading Style Sheets) è un linguaggio puramente descrittivo. Assegna ai nodi del documento XML una caratterizzazione tipografica senza nessuna modifica strutturale o organizzativa XSL (eXtensible Stylesheet Language), invece, permette sia caratterizzazione tipografica che riscrittura, ovvero la possibilità di organizzare il contenuto finale in maniera diversa dall'originale

4 XSLT - eXtensible Stylesheet Language Transformation4 XSL e XSLT XSLT (XSL Transformation) estende il concetto di foglio di stile fino a permettere la manipolazione della struttura stessa del documento XSLT permette di trasformare un documento XML filtrandone i dati e riorganizzandoli in unaltra struttura XML, o persino in un semplice testo XSLT possiede molte delle caratteristiche di un linguaggio di programmazione imperativo! La proposta è divisa in due parti: un linguaggio di trasformazione, XSLT un vocabolario di elementi XML con semantica di formattazione, XSL-FO (XSL Formatting Object) XSLT, inoltre, si basa su XPath

5 XSLT - eXtensible Stylesheet Language Transformation5 XSLT come formattatore Per quel che riguarda labilità di generare una presentazione dei dati XML, XSLT dispone attualmente di due metodi: E possibile trasformare il documento XML in un documento XHTML, per poi farlo visualizzare in qualsiasi browser. E possibile usare gli XSL Formatting Object, che definiscono il formato di visualizzazione senza presupporre la trasformazione in HTML o in altri linguaggi di presentazione.

6 XSLT - eXtensible Stylesheet Language Transformation6 XSLT come trasformatore Questa funzionalità, del tutto nuova, è la più interessante Con XSLT è possibile modificare al volo la struttura che accoglie i dati, e in parte anche i dati stessi. Questo permette, ad esempio: di offrire viste differenti sugli stessi dati a utenti differenti di esportare i dati in un formato noto, come HTML o PDF di adattare i dati a diversi dispositivi di visualizzazione

7 XSLT - eXtensible Stylesheet Language Transformation7 Il modello di XSLT processore XSLT input output

8 XSLT - eXtensible Stylesheet Language Transformation8 Struttura generale Un documento XSLT, come ogni documento XML, inizia con una dichiarazione XML Lelemento root è stylesheet Se il documento deve emettere HTML o un altro linguaggio, bisogna dichiarare entrambi i namespace Di solito il linguaggio target viene usato come default namespace, quindi tutti gli elementi XSLT vanno prefissati con il loro namespace (xsl:) <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

9 XSLT - eXtensible Stylesheet Language Transformation9 I fogli di stile XSLT Un foglio di stile XSL è composto sostanzialmente di template di costruzione, che permettono di riscrivere, modificandola, una selezione del documento XML dorigine nel documento destinazione Ogni template individua un pattern da ricercare nel documento di partenza, e vi associa un blocco di elementi e testo da inserire nel documento di destinazione Un template è indicato dallelemento template

10 XSLT - eXtensible Stylesheet Language Transformation10 I template Ad esempio, dato il frammento: Questo deve essere importante Il seguente template: Fa match con lelemento emph e scrive un elemento b di HTML ed inserisce tutti i nodi figlio del nodo di match nella lista dei nodi correnti Il pattern in questo caso è un XPath relativo (equivalente a child::emph). Qualunque XPath che ritorni un nodeset può essere inserito nell'attributo match.

11 XSLT - eXtensible Stylesheet Language Transformation11 I template Un template è una subroutine di trasformazione LXPath fornito dallattributo match viene usato per filtrare il contesto: tutti i nodi filtrati vengono elaborati nel template... Ogni stylesheet deve avere un template con match=/, la sua procedura main, che viene chiamata allavvio con tutto il documento come insieme di nodi. Allinterno dellelemento template vi sono una varietà di istruzioni che servono o per modificare la lista di nodi o per scrivere frammenti dellalbero di destinazione.

12 XSLT - eXtensible Stylesheet Language Transformation12 I template richiama il template che fa match con i nodi selezionati da e nel contesto corrente (opzionale) e con attributo mode uguale a quello dato (opzionale) Con questa forma è possibile gestire documenti dalla struttura complessa e ricorsiva, lasciando al parser il compito di cercare il template adatto agli elementi che incontra Nel corso del processing qualunque nodo può essere inserito, anche più volte, nel documento, e in qualunque ordine (non è uno stack!). il parser sospende il processing del template in corso e procede ricorsivamente ad esaminare i figli.

13 XSLT - eXtensible Stylesheet Language Transformation13 Questo template trasforma un para in un p di HTML: Esempio

14 XSLT - eXtensible Stylesheet Language Transformation14 Dentro il template scrivere direttamente il frammento XML richiesto. Ogni elemento che non appartiene al namespace di XSL viene direttamente scritto nellalbero di destinazione così come appare nel template Analogamente viene fatto per ogni nodo di testo Pippo Creazione di Elementi

15 XSLT - eXtensible Stylesheet Language Transformation15 Se è necessario scrivere un elemento complesso o calcolato si usa Ad esempio può servire per trasformare il valore di un attributo del documento di partenza nel nome di un tag nel documento destinazione Dato il frammento e il template ottengo il frammento Mario Rossi Creazione di Elementi

16 XSLT - eXtensible Stylesheet Language Transformation16 Allinterno di un elemento è possibile specificare degli attributi in maniera esplicita con il tag E più chiaro e più potente delle parentesi graffe. Lo si può usare per stabilire con espressione anche il nome dellattributo. Dato il frammento e il template.html ottengo il frammento Mario Rossi Creazione di Attributi

17 XSLT - eXtensible Stylesheet Language Transformation17 crea un nodo di testo nellalbero di destinazione. Lattributo select (obbligatorio) contiene un espressione XPath che viene valutata e convertita in stringa. La stringa viene combinata con gli altri nodi di testo intorno Luso tipico è per convertire markup in testo (ad esempio il valore di attributi in contenuto). Dato il frammento e il template ottengo il frammento Mario Rossi Prelievo di valori

18 XSLT - eXtensible Stylesheet Language Transformation18 Laddove non sia possibile usare del markup (ad esempio come valore di un attributo), è possibile usare le parentesi graffe, che hanno in questo senso lo stesso significato di Luso tipico è per convertire markup in altro markup (ad esempio il valore di un attributo nel nome di un tag). Dato il frammento e il template ottengo il frammento Mario Uso delle graffe {}

19 XSLT - eXtensible Stylesheet Language Transformation19 Inserisce esplicitamente il testo contenuto dentro al documento E vantaggioso rispetto a mettere il testo letterale perché rispetta il white space. Inoltre con l'attributo disable-output-escaping="yes" rispetta anche i caratteri speciali (& e <) Altrimenti le processing instruction dentro al foglio di stile vengono ignorate, non trasferite Ad esempio, href="book.css" type="text/css genera il seguente output: Inserisce esplicitamente del commento dentro al documento Definire lalbero di destinazione

20 XSLT - eXtensible Stylesheet Language Transformation20 Permette di specificare esplicitamente il namespace di arrivo Copia nelloutput il nodo di riferimento, insieme al suo namespace, ma non al suo contenuto e ai suoi attributi, che vanno copiati esplicitamente. Viene usato per inserire esplicitamente numeri formattati dentro allalbero dei risultati. Definire lalbero di destinazione

21 XSLT - eXtensible Stylesheet Language Transformation21 Per applicare un comportamento specifico ad ognuno dei figli direttamente dentro al template si utilizza Ad esempio il template: viene più facilmente realizzato così: Iterazione

22 XSLT - eXtensible Stylesheet Language Transformation22 attiva condizionalmente dei comportamenti a seconda della verità di un XPath di test. Ad esempio il template seguente colora di giallo lo sfondo di una riga ogni due di una tabella HTML: yellow Istruzioni condizionali

23 XSLT - eXtensible Stylesheet Language Transformation23 seleziona una tra molte alternative (la funzione di switch in java) blue green red Istruzioni condizionali

24 XSLT - eXtensible Stylesheet Language Transformation24 ordina i nodi nella lista dei nodi correnti. Esso può essere soltanto figlio di un o di un Gli elementi possono annidarsi Vari attributi: Select: lespressione in base alla quale fare il sort Data-type: il tipo di dato da ordinare (numero o testo o altro) Order: il tipo ascendete o discendente di ordine Case-order: come trattare le maiuscole e le minuscole Ordinamento

25 XSLT - eXtensible Stylesheet Language Transformation25 Esempio di ordinamento

26 XSLT - eXtensible Stylesheet Language Transformation26 Fogli di stile Pull o Push Nel documento XSLT si usano dunque elementi provenienti da almeno due namespace: quello di XSLT e quello del modello di documenti di destinazione Esistono due filosofie di riscrittura disponibili in XSLT Iterativo, o Pull: basata su template, viene usata tipicamente per trasformare dati. In un documento pre-formattato per loutput, si vanno ad inserire le parti di documento tratte dal file XML dorigine Ricorsivo, o Push: basata su regole, usata tipicamente per trasformare documenti

27 XSLT - eXtensible Stylesheet Language Transformation27 Stile iterativo (Pull) I fogli di stile tipo pull sono adatti per riscrivere documenti XML dalla struttura di database, molto ripetitivi: zacx corp ZCXM 28.875 zaffymat inc ZFFX 92.250 zysmergy inc ZYSZ 20.313

28 XSLT - eXtensible Stylesheet Language Transformation28 Stile iterativo (Pull) Questo è un foglio di stile XSLT di tipo pull per generare un documento HTML con quei dati: Simbolo Nome Prezzo

29 XSLT - eXtensible Stylesheet Language Transformation29 Stile iterativo (Pull) Questo è sostanzialmente un documento HTML con qualche tag strano xsl:for-each va a cercare uno ad uno una sequenza di elementi ed applica le istruzioni al suo interno per ciascun elemento xsl:value-of va a cercare il valore (cioè il contenuto) di ogni elemento allinterno di xsl:foreach, e lo inserisce al suo posto

30 XSLT - eXtensible Stylesheet Language Transformation30 Stile ricorsivo (Push) Supponiamo di avere questo documento XML dalla struttura di documento, molto diversificato: To the Pole and Back The First Day It was the best of days, it was the worst of days. Best in that the sun was out, but worst in that it was 39 degrees below zero....

31 XSLT - eXtensible Stylesheet Language Transformation31 Stile ricorsivo (Push) Questo è un foglio di stile XSLT di tipo push:

32 XSLT - eXtensible Stylesheet Language Transformation32 Questo non assomiglia ad un documento HTML, ma ad una serie di istruzioni di riscrittura separate: xsl:template è la regola da applicare se lelemento in esame corrisponde al valore dellattributo match. Di volta in volta verrà applicato il template della radice (/), dellelemento section, dellelemento para, dellelemento emph, ecc xsl:apply-templates spinge a cercare, allinterno dellelemento che stiamo considerando, se esistono altri template applicabili. E il modo per far ripartire ricorsivamente la ricerca di altri template Stile ricorsivo (Push)

33 XSLT - eXtensible Stylesheet Language Transformation33 Uso di variabili E possibile definire delle variabili. Il valore di una variabile è quello di qualunque espressione. La variabile può essere usata nel sottoalbero in cui è definita e deve essere richiamata con luso delle graffe e del segno $ 12pt Attenzione: la variabile XSLT non è variabile!!!, ovvero il suo valore non può essere cambiato durante la computazione. E' una costante ottenuta attraverso la valutazione di un'espressione, non una variabile.

34 XSLT - eXtensible Stylesheet Language Transformation34 Merging E possibile porre frammenti di fogli di stile in file esterni. Con gli elementi e è possibile inserire frammenti esterni con due significati leggermente diversi: modifica, diminuendola, la priorità degli elementi inclusi, mentre la mantiene Metodi di output E possibile specificare che il documento risultante è XML, HTML o testo con lelemento. Se loutput è HTML o testo, il processore è meno rigoroso nel valutare la buona forma del documento risultante White space E possibile specificare quali elementi debbano preservare e quali debbano collassare il white space con due appositi elementi, e Altri aspetti di XSLT

35 XSLT - eXtensible Stylesheet Language Transformation35 Stranger in a strange land Starman Jones The Space Merchants Un esempio complesso

36 XSLT - eXtensible Stylesheet Language Transformation36 Robert Heinlein Cyril Kornbluth Frederick Pohl Judy-Lyn Del Rey Un esempio complesso

37 XSLT - eXtensible Stylesheet Language Transformation37 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:variable name="books_by_rh" select="//book[author-ref/@ref='rh']"/> <xsl:variable name="more_than_one_auth" select="//book[count(author-ref) > 1]"/> Total number of books by Robert Heinlein: Total number of books by several authors: Number of books in the union of the two sets <xsl:value-of select="count($books_by_rh | $more_than_one_auth)"/> Un esempio complesso

38 XSLT - eXtensible Stylesheet Language Transformation38 La trasformazione genera un documento XML composto da un solo nodo di testo Total number of books by Robert Heinlein: 2 Total number of books by several authors: 2 Number of books in the union of the two sets 3 Un esempio complesso

39 XSLT - eXtensible Stylesheet Language Transformation39 Un esempio complesso

40 XSLT - eXtensible Stylesheet Language Transformation40 Numerare i capitoli ed i paragrafi <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> …. Un esempio complesso

41 XSLT - eXtensible Stylesheet Language Transformation41... Chapter :... Paragraph :... Un esempio complesso

42 XSLT - eXtensible Stylesheet Language Transformation42 Risultato: Chapter I: It begins Paragraph I.a: First paragraph Paragraph I.b: 2nd paragraph Paragraph I.c: 3rd paragraph Chapter II: The sequel Paragraph II.a: Paragraph Paragraph II.b: Yet another paragraph Un esempio complesso

43 XSLT - eXtensible Stylesheet Language Transformation43 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

44 XSLT - eXtensible Stylesheet Language Transformation44 Riferimenti Deitel et al, XML Corso di programmazione, Apogeo Chris Bates, XML in theory and Practice, Wiley XML Path Language (XPath) Version 1.0 W3C Recommendation 16 November 1999 http://www.w3.org/TR/xpath W3Schools Online Web Tutorials http://www.w3schools.com/xsl/default.asp


Scaricare ppt "XSLT (eXtensible Stylesheet Language Transformation) Laurea Magistrale in Informatica Reti 2 (2005/06) dott. Francesco De Angelis"

Presentazioni simili


Annunci Google