INVITO ALLO STUDIO - ITIS "Luigi di Savoia"

Transcript

INVITO ALLO STUDIO - ITIS "Luigi di Savoia"
XML
INVITO ALLO STUDIO
EUROPEAN NETWORK OF INNOVATIVE SCHOOLS
CSS e XML
Per formatare i documenti XML è possibile seguire due
strade:
1)ricorrere a CSS;
2) ricorrere a XSL.
Nelle prossime slides vedremo brevemente come
utilizzare CSS per agire esternamente al documento
XML e predisporre una specifica formattazione per
ogni suo elemento.
Quando non c’è bisogno della potenza elaborativa di
XSL, l’utilizzo di CSS può rilevarsi una soluzione
ottimale, specialmente perché più gestibile dal
pubblico meno esperto.
Senza entrare nei dettagli della
sintassi del linguaggio CSS vediamo
subito praticamente come può
avvenire l’interazione fra XML e CSS.
Il seguente esempio è relativo a un
documento XML che descrive la
struttura dei nuovi articoli pronti per la
vendita in un negozio di informatica.
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/css" href="catalogo.css"?>
<database nome="Negozio" server="http://www.mioserver.it">
<articoli descrizione="articoli venduti" numero="20"/>
<clienti descrizione="nuovilienti" numero="3"/>
<nuoviarticoli>
<articolo>
<codice>C099</codice>
<codcat tipo="C" />
<descrizione>CPUDoppiaVentola</descrizione>
<prezzo>200</prezzo>
<quantita>12</quantita>
</articolo>
<articolo>
<codice>BO1 1</codice>
<codcat tipo="S" />
<descrizione>ScheaVideo4500plus</descrizione>
<prezzo> 150</prezzo>
<quantita>9</quantita>
</articolo>
</nuoviarticoli>
</database>
catalogo.xml
Osserviamo in particolare la seconda riga, che indica il tipo di
documento di stile che si vuole utilizzare e il suo URL mediante
l’elemento xml-stylesheet, avente la seguente sintassi:
<?xml-stylesheet type=”TipoDocumentoStyle”href=”URLDocumentoDiStyle”?>
dove l’attributo type può essere: text/css per indicare un
documento CSS oppure text/xsl per indicare un documento xsl,
mentre l’attributo href riporta l’URL di tale documento di stile.
Il file CSS catalogo.css utilizzato per la presentazione del
documento XML del nostro esempio ha il seguente contenuto:
nuoviarticoli
{background-color: #ffffff; width: 100 % ;}
Articolo
{display: block; margin-bottom: 3Opt; margin-left: 0;}
codice
{color: #FF0000; font-size: 2Opt;}
descrizione
{color: #0000FF; font-size: 2Opt; }
prezzo,quantita
{display: block;color: #000000;margin-left: 2Opt;}
catalogo.css
Sintassi CSS
La sintassi di CSS è composta da tre parti:
•Un selettore (tipicamente il tag XML da formattare)
•Una proprietà (un attributo da cambiare)
•Un Valore (valore ammissibile per la proprietà)
selector {property: value}
La proprietà e il valore sono divise da i “due punti” e
dentro le parentesi graffe. body {color: black}
Se il valore è un parola con spazi va messo tra
virgolette. p {font-family: "sans serif"}
XSL(T)
L’utilizzo diretto del linguaggio HTML è certamente un modo
efficace per formattare , ma esiste un’alternativa.
Il consorzio W3C ha creato infatti il linguaggio
XSL (eXtensible Stylesheet Language)
ossia un linguaggio che consente di scandire un documento XML
e trasformarlo in un altro documento con un diverso formato.
Per esempio, è possibile partire da un documento XML per
ottenerne uno di Microsoft Word, uno in formato PDF, oppure un
documento HTML e via dicendo.
Il nome attribuito a XSL deriva dal fatto che tale linguaggio si basa
su un meccanismo di fogli di stile.
I fogli di stile vengono generalmente usati per applicare
in modo coerente stili o formattazione ai documenti. Il
tipo di foglio di stile più utilizzato sul Web è basato sulla
specifica dei fogli di stile CSS.
Tramite CSS è possibile definire classi di stile che
possono essere applicate al documento XML
concentrandosi sul suo aspetto grafico.
L’XSL, per contro, offre un livello di formattazione e di
flessibilità superiore rispetto ai fogli di stile CSS; gode
poi di molte altre caratteristiche, in quanto sfrutta una
metodologia diversa rispetto al CSS.
L’XSL, infatti, si basa su modelli (template), che sono
per alcuni aspetti analoghi alle regole dei fogli di stile;
con essi si dispone di un meccanismo per l’applicazione
di informazioni di formattazione ai dati che rispondono,
appunto, a un particolare modello.
Il linguaggio XSL è costituito da tre
componenti:
1)XSLT (XML Transformations), un linguaggio per trasformare un documento
XML in un altro documento XML;
2) XPath (XML Path Language), un linguaggio per espressioni usato da XSLT
per accedere o riferirsi a parti di un documento;
3) XSLFO (XML Formatting Object), un linguaggio di formattazione per
aspetti tipica-mente tipografici.
Noi ci occuperemo solo di XSLT e XPath, tralasciando il linguaggio XSLFO perché ciò
esula dagli scopi di questo corso.
XSLT
XSLT converte un documento XML da una
struttura semantica a una struttura di
visualizzazione
ciò che accade per esempio nella
conversione di un documento XML in
documento HTML, oppure in uno di Microsoft
Word ecc.
XSLT può inoltre trasformare un documento
XML in un altro documento XML, dimostrando
una notevole flessibilità nella creazione di
nuovi formati per uno stesso documento.
Funzionamento di XSLT
XSLT scandisce un documento XML vedendolo
come una struttura ad albero, ossia una struttura
di tipo ricorsivo, composta da sottoalberi che
sono a loro volta degli alberi.
La struttura ad albero di un documento XML
viene analizzata livello per livello sfruttando
proprio tale natura ricorsiva.
XSLT permette di definire un insieme di regole
che devono essere applicate a un insieme di
nodi: nessuno, uno o più di un nodo.
Funzionamento di XSLT (segue)
Quando XSLT analizza il nodo corrente dell’albero, verifica
se esiste una regola riferita a un insieme di nodi che può
essere applicata al nodo corrente. L’abbinamento regolanodo corrente prende il nome di matching.
Se XSLT trova un matching, applica la regola al nodo
corrente e ai suoi figli. La regola incorpora la
trasformazione che deve essere eseguita, indica cioè in
cosa deve essere trasformato il nodo corrente e come
bisogna elaborarne i figli.
Consideriamo ora la struttura ad albero relativa al nostro
esempio, catalogo.xml (vedi figura seguente).
catalogo.xml
Applicare trasformazioni ai nodi
Le regole che si applicano per effettuare la
trasformazione sui nodi di un documento XML sono
contenute in un foglio di stile.
Un foglio di stile è un documento XML come molti altri
ma, a differenza dei documenti XML “normali” che
contengono le informazioni da visualizzare, contiene
un vero e proprio programma scritto in XSLT, che
indica come trasformare il documento XML cui si
riferisce.
Applicare trasformazioni ai nodi
(segue)
In effetti, l’espressione “foglio di stile” impiegata in XSLT è
leggermente diversa da quella utilizzata per CSS.
Un foglio di stile per XSLT crea un output che potrebbe o
meno contenere informazioni di formattazione.
L’output potrebbe infatti contenere solo un sottoinsieme dei
dati presenti nel documento XML, dati che potrebbero essere
ristrutturati, riordinati ecc.
Pertanto, un foglio di stile per XSLT è un documento che
trasforma un documento XML in un altro documento XML,
che può anche essere un documento HTML o testo.
I PROCESSORI XSLT
Abbiamo detto che XSLT trasforma un documento
XML in un altro documento XML.
Questa trasformazione non è necessariamente legata
al browser, nel senso che occorre semplicemente un
processore XSLT, cioè un software che interpreti il
documento XSLT e sappia come applicare le regole di
trasformazione al documento XML avuto in input per
generarne un altro.
I PROCESSORI XSLT (segue)
Esistono varie tipologie di processori: un processore può essere
un’applicazione eseguibile, un plug-in, un ambiente di sviluppo
ecc. In ogni caso, esso viene costruito con un parser XML capace
di caricare documenti XML e XSLT per mezzo di strutture quali
DOM e SAX.
Alcuni noti processori XSLT sono:
. Saxon, sviluppato da Michael Kay;
. Xalan, facente parte del progetto Apache;
. MSXML, sviluppato da Microsoft.
Tali processori sono incorporati nei browser recenti; ad esempio,
com’è ovvio, Mi- crosoft Internet Explorer utilizza il processore
MSXML.
I FOGLI DI STILE
Un foglio di stile è contenuto tra il tag di apertura <xsl:stylesheet>
e quello di chiusura, </xsl:stylesheet>; al suo interno contiene
dichiarazioni XSLT:
<xsl: stylesheet xmlns :xsl= ”
http://wwww3.org/1999/XSL/Trasform” version= ” 1 .0”>
DichiarazioniXSLT
</xsl: stylesheet>
I FOGLI DI STILE
(SEGUE)
xmlns :xsl= ” http://wwww3.org/1999/XSL/Trasform :
serve per definire lo spazio dei nomi. La definizione spazio
dei nomi è utilizzata dal programmatore tradizionale per
indicare un gruppo di nomi in cui non esistono duplicati.
Poiché la natura del linguaggio XML consente di definire set
di tag personalizzati, che potrebbero dar luogo a nomi
duplicati nei documenti XML, nel linguaggio XML gli spazi
dei nomi offrono una metodologia per la creazione di nomi
univoci in un documento XML. Nel linguaggio XML uno
spazio dei nomi è pertanto una raccolta di nomi identificata
da un URL.
version= ”1 .0” :
indica invece il numero di versione che serve a distinguere
un foglio di stile che usa un determinato standard da
eventuali revisioni future.
Template(sagoma)
•Il processore scorre i nodi di cui è composto il documento XML
•Quando un albero (nodo o insieme di nodi)
combacia (match) con il modello (pattern) di una regola di
template (sagoma) viene applicata la trasformazione specificata
<xsl:template match=“modello">
… trasformazione …
</xsl:template>
sagoma = modello
trasformazione
L’ELEMENTO TEMPLATE
Per definire regole di comportamento all’interno di un foglio dì stile
utilizziamo l’elemento template.
Nella terminologia informatica spesso i termini Pattern e Template
si confondono e vengono tradotti con l’italiano “Modello”
Nel seguito useremo i termini modelli e template come sinonimi.
Un elemento template è caratterizzato dalla seguente sintassi:
<xsl:template Attributi>
Contenuto
</xsl:template>
Un template opera mettendo in corrispondenza
l’elemento o attributo corrente che il processore trova
analizzando il sorgente XML con la regola
corrispondente del modello XSLT.
Se una regola del modello XSLT corrisponde
all’elemento corrente XML, l’elemento sarà trasformato
in base a al contenuto del template.
<xsl:template Attributi>
Contenuto
</xsl:template>
La corrispondenza tra elementi XML e regole XSLT
è definita tramite l’attributo match.
Si dice anche che l’attributo match specifica il
pattern che indica il sottoalbero cui va applicata la
regola.
L’attributo match può selezionare sia un solo
elemento, sia più elementi. Facciamo un semplice
esempio:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="catalogo.xsl"?>
<database nome="Negozio" server="http://www.mioserver.it">
<articoli descrizione="articoli venduti" numero="20"/>
<clienti descrizione="nuovilienti" numero="3"/>
<nuoviarticoli>
<articolo>
<codice>C099</codice>
<codcat tipo="C" />
<descrizione>CPUDoppiaVentola</descrizione>
<prezzo>200</prezzo>
<quantita>12</quantita>
</articolo>
<articolo>
<codice>BO1 1</codice>
<codcat tipo="S" />
<descrizione>ScheaVideo4500plus</descrizione>
<prezzo> 150</prezzo>
<quantita>9</quantita>
</articolo>
</nuoviarticoli>
</database>
catalogo1.xml
Come possiamo notare, la seconda dichiarazione,
analoga a quella vista per i fogli di stile CSS, indica il
nome del file esterno che contiene il foglio di stile XSL
da applicare a questo documento XML.
I due elementi XML articoli e clienti contengono
informazioni sulle vendite che vogliamo estrapolare e
visualizzare in HTML.
Vediamo ora il file catalogo1.xsl contenente il foglio di
stile.
<?xml version= “1.0”?>
<xsl: stylesheet xmlns:xsl=”http://www.w3.org/1999/XSL/Transform” version=”l.0”>
<xsl: output method=”text” encoding=”UTF-8”/>
<xsl: template match=”articoli”>
Visualizzazione degli
<xsl: value-of select=”@descrizione”/>
- numero
<xsl: value-of select=”@numero”/>
</xsl:template>
<xsl: template match=”clienti”>
Visualizzazione dei <xsl: value-of select=”@descrizione”/>
- numero
<xsl: value-of select=”@numero”/>
</xsl:template>
</xsl: stylesheet>
catalogo1.xsl
Dal codice del file catalogo.xsl possiamo fare le seguenti
osservazioni.
•Anche questo è un documento XML, lo si capisce dalla
prima dichiarazione che è un elemento XML prologo:
<?xml version= “1.0”?>
•All’interno dell’elemento XSL slylesheet abbiamo due
template che selezionano i nodi elemento, articoli e clienti:
<xsl:template match=“articoli”>
pattern
<xsl:template match=“clienti”>
La prima di queste due regole viene applicata quando si
incontra il nodo articoli, la seconda successivamente, quando
si incontra il nodo clienti.
•Il contenuto di un template può essere composto da testo e
altri elementi xsl.
Il primo elemento xsl del nostro semplice esempio è xsl:output e
specifica, tramite il suo attributo method, di che tipo deve essere
l’output per la visualizzazione.
Il valore di method con la seguente dichiarazione:
<xsl: output method=”html”/>
Ci permette di utilizzare nel documento XSLT anche elementi
propri di HTML, come l’elemento <BR>, che va però scritto come
<BR/>
Il secondo e il terzo elemento XSL è xsl:value-of, che serve
a produrre un output calcolato. Nel caso dell’esempio, il
valore da produrre in output è quello specificato tramite
l’attributo select. Tale attributo indica di prelevare le
informazioni relative agli attributi XML “descrizione” e
“numero”.
Per selezionare tali attributi, si utilizzano le espressioni XPath
(@descrizione e @numero) come valori di select
Un valore spesso utilizzato all’interno della select è “.“, che significa
valore del nodo corrente.
Il valore del nodo corrente è uguale al testo del nodo se il nodo è di tipo
testo, è uguale alla concatenazione dei valori dei nodi contenuti se il
nodo è di tipo tag (cioè senza testo interno).
Elaborazione iterativa: l’elemento
xsl:for-each
Il costrutto per l’elaborazione iterativa è
implementato attraverso l’elemento xsl:foreach. Tale elemento serve per applicare lo
stesso template nel quale è contenuto agli
elementi selezionati tramite l’attributo
select.
Applichiamo al nostro catalogo il seguente
foglio XSL:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html"/>
<xsl:template match="articoli">
Visualizzazione degli
<xsl:value-of select="@descrizione" />
-numero
<xsl:value-of select="@numero" />
<BR/>
</xsl:template>
<xsl:template match="clienti">
Visualizzazione dei
<xsl:value-of select="@descrizione" />
-numero
<xsl:value-of select="@numero"/>
<BR/>
</xsl:template>
segue
<xsl:template match="nuoviarticoli">
<HTML>
<BODY>
Visualizzazione dei nuovi articoli <BR/>
<TABLE BORDER="2">
<TR>
<TD>Codice</TD> <TD>Descrizione</TD><TD>Prezzo</TD><TD>Quantita</TD>
</TR>
<xsl:for-each select="articolo">
<TR>
<TD><xsl:value-of select="codice"/></TD>
<TD><xsl:value-of select="descrizione"/></TD>
<TD><xsl:value-of select="prezzo" /></TD>
<TD><xsl:value-of select="quantita" /></TD>
</TR>
</xsl:for-each>
</TABLE>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>
cataogo2.xml
Eseguire Calcoli
E’ possibile anche eseguire calcoli inserendo vere e proprie
espressioni come valori di una select
<?xml version="1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" encoding="UTF-8"/>
<xsl:template match="nuoviarticoli">
<xsl:for-each select="articolo"><br/>
<xsl:value-of select="prezzo*quantita"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
catalogo3.xml
Elaborazione dichiarativa
XSLT è un linguaggio di dichiarazioni basato su
regole.
Questo modo di procedere rende XSL un
linguaggio di dichiarazioni, in contrapposizione ai
linguaggi basati sulle procedure.
I linguaggi di programmazione dichiarativi (come
Prolog o SQL) 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 cioè cosa si vuole che
avvenga.