54
1 Titolo Presentazione / Data / Confidenziale / Elaborazione di ... XML Elaborazione di Franco Grivet Chin

1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

Embed Size (px)

Citation preview

Page 1: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

1Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

XML

Elaborazione di Franco Grivet Chin

Page 2: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

2

XML vs HTML

Partiamo da qualcosa che già conosciamo: HTML

• HTML (HyperText Mark-up Language) nasce nel 1991, come applicazione del linguaggio SGML (Standard Generalized Mark-up Language), per strutturare documenti di carattere tecnico scientifico;

• Nasce come linguaggio di strutturazione/presentazione dei contenuti da trasmettere attraverso il protocollo HTTP (HyperText Transfer Protocol);

• HTML doveva servire per garantire la portabilità delle pagine web da un programma di navigazione all’altro;

• I comandi (tag e attributi) sono un insieme fisso e limitato;

• Non serviva una grande rigidità di utilizzo dei comandi (è stato un fattore positivo!)• HTML non è case-sensitive;• Non esiste una gerarchia tra i tag;• Non è cruciale chiudere i tag;

Page 3: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

3

XML vs HTML

Con HTML non si può fare tutto…è ottimo per strutturare pagine web, ma il web ospita esigenze per le quali è necessario qualcosa in più.

Servono:• Linguaggi di mark-up personalizzati;• Linguaggi e protocolli di descrizione dei dati che consentano la

massima interoperabilità tra applicazioni;• Comandi che non si limitino ad indicare ad un programma

come rappresentare il testo, ma che aiutino a trasmettere il significato delle informazioni (meta-informazioni);

• Comandi che diano ai dati una rigorosa strutturazione;

In sintesi: serve un insieme di regole condivise che diano sia libertà agli sviluppatori sia compatibilità tra applicazioni sia una forte integrazione ai dati;

Page 4: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

4Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

XML

La prima versione di XML (1.0) raggiunge lo status di reccomendation nel 1998;

La caratteristica fondamentale di XML è l’indipendenza dei dati dalle applicazioni;

Il W3C ha redatto un documento introduttivo al nuovo linguaggio: “XML in ten points”• (http://www.w3.org/XML/1999/XML-in-10-points)

Page 5: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

5Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

XML

1. È un metodo per inserire dati strutturati in un file di testo;

2. Sembra HTML ma non lo è:

Usa i tag per delimitare porzioni di testo;

I tag non servono per formattare, ma per descrivere e dare significato all’informazione;

Ha regole molto più rigorose;

È estensibile;

Page 6: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

6Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

XML

3. I documenti XML sono file di testo:

I file contengono dati e meta-dati;

Sono universali: qualsiasi applicazione può ricevere, aprire e interpretare file di testo;

Per creare un file XML è sufficiente il blocco-note o qualsiasi altro editor di testo;

Non si dipende da formati di compressione né da software di authoring proprietari;

I file XML possono essere facilmente letti anche da un programmatore inesperto;

Page 7: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

7

XML4. XML è uno, nessuno, centomila…

• XML è un insieme di regole;

• XML non è un linguaggio preciso, ma uno strumento per generare nuovi linguaggi;

• In pochi anni si sono moltiplicati “vocabolari XML” specifici: linguaggi di mark-up costruiti con le regole di XML e pensati per ambiti di applicazione ben definiti;

• XML va inteso come una famiglia di linguaggi:• XSL;• XML Schema;• SOAP / WSDL / UDDI;• X-Link;• Voice-XML;• XHTML;• WML;• …

Page 8: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

8Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

XML

5. XML è “prolisso” per scelta:

In termini di efficienza non è la soluzione ideale: la compresenza di dati e meta-dati aumenta le dimensioni dei file;

Un file XML è sempre più grande di un file binario;

Tuttavia i costi delle memorie sono in netto calo e le tecnologie di archiviazione sono in continua evoluzione;

Tuttavia i file possono essere compressi per la trasmissione (HTTP 1.1);

Page 9: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

9

XML

XML è un meta-linguaggio modulare:

Seguendo le regole di XML posso generare nuovi tag (elementi) e attributi;

Lo sviluppatore può creare i comandi che più gli sono congeniali: per nome, significato, gerarchia, occorrenza…;

Si può prendere un vocabolario esistente (es. RSS) ed estenderlo con i comandi provenienti da un altro vocabolario (es. XHTML);

Page 10: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

10Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

XMTL

XML trasforma HTML in XHTML

• Uno dei primi risultati di XML è stata l’applicazione delle regole di validità XML al linguaggio XHTML;

• XHTML è formalmente più rigoroso e strutturante;• La presentazione del documento viene affidata ai fogli di

stile, XHTML pensa a organizzare l’informazione;• Se XHTML è un linguaggio della famiglia XML allora gode

di tutti i vantaggi portati da questa tecnologia;• Dedicheremo una lezione a questo argomento.

Page 11: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML

Grazie ad XML sono nati linguaggi di:

• Strutturazione dei contenuti:• XHTML;• RSS;• XLink;

• Trasporto dei dati:• SOAP / WSDL / UDDI;

• Programmazione:• XSL• Voice-XML;

11Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 12: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML

Un documento XML si divide in due parti:

1. Un prologo:1. Indicazione della versione;2. Indicazione di una DTD: quali comandi e quali regole dovrà

seguire il mio documento;3. Informazioni sullo stile di presentazione;

2. Istanze, formate da:1. Dati;2. Mark-up;

12Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 13: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML

Indicazione della versione:

• Un documento XML deve iniziare con l’istruzione

<?xml version=“1.0” encoding="iso-8859-1"?>

=> serve per indicare al programma che interpreterà il file quale set di regole XML il documento dovrà seguire;

=> se il documento segue senza errori queste regole, è detto well formed;

=> è presente anche l’indicazione del set di caratteri che sarà utilizzato nel documento (attributo opzionale);

13Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 14: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML

Un documento XML è well formed (sintatticamente conforme) se:

1. È presente un solo elemento radice;

2. Gli elementi hanno un tag di apertura e un tag di chiusura;

3. I tag sono appropriatamente annidati;

4. I valori degli attributi sono racchiusi da virgolette;

5. Nomi di tag e attributi sono costituiti da una sola parola;

6. Gli attributi hanno sempre un valore;

Inoltre XML è case-sensitive: c’è differenza tra lettere maiuscole e minuscole.

=> <nome> != <Nome> != <NOME> != <nOmE> …=> un tag di chiusura deve essere scritto in modo identico a quello di apertura (ad eccezione dello slash iniziale);

14

Page 15: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML<?xml version="1.0" encoding="iso-8859-1"?><!-- Proviamo a scrivere un file xml che gestisca una rubrica di indirizzi --><!-- apertura del tag radice --><rubrica>

<!-- istanze dell'elemento contatto --><contatto>

<nome>Andrea</nome><cognome>Crevola</cognome><telefono>011-555-1234</telefono><email>[email protected]</email>

</contatto>

<contatto><nome>Mario</nome><cognome>Rossi</cognome><telefono>011-555-5678</telefono><email>[email protected]</email>

</contatto><contatto>

<nome>Carlo</nome><cognome>Bianchi</cognome><telefono>011-555-2468</telefono><email>[email protected]</email>

</contatto> <!-- chiusura del tag radice --></rubrica>

15Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 16: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML

Potremmo fermarci qui… in realtà la forza di XML risiede nel rigore e nella struttura fornita da una serie di regole ulteriori;

Queste regole sono contenute in una DTD (Document Type Definition);

Nella DTD si dichiara quali elementi, quali attributi e quali entità saranno accettate nei documenti XML che si dichiareranno conformi ad essa;

La DTD è essenziale per condividere dati tra applicazioni diverse, che devono avere uno un comune riferimento circa struttura e composizione dei documenti scambiati;

16

Page 17: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML

Le specifiche della DTD possono essere inserite direttamente nel prologo del documento (DTD interna):

<!DOCTYPE rubrica [<!ELEMENT rubrica (contatto)+ ><!ELEMENT contatto (nome, cognome,telefono,email) ><!ELEMENT nome (#PCDATA) ><!ELEMENT cognome (#PCDATA) ><!ELEMENT telefono (#PCDATA) ><!ELEMENT email (#PCDATA) >

]

(vedremo il significato di questi comandi…)

La DTD interna vale solo per il documento a cui appartiene e non per altri file… questo significa che la dovrei riscrivere ogni volta… a meno che non la sposti al di fuori del file e la condivida tra tutti i documenti XML che ne hanno necessità.

17Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 18: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XMLLe specifiche della DTD possono essere collocate in un file esterno (es. rubrica.dtd);

La DTD esterna viene richiamata con un comando presente nel prologo del documento XML;

<!DOCTYPE rubrica SYSTEM “rubrica.dtd”><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

In questo modo tutti i file di cui si vuole verificare la validità possono riferirsi ad un unico insieme di regole;

Se decido di modificare le regole, non dovrò riportare i cambiamenti su tutti i file su cui sto lavorando;

I file sono decisamente più leggeri;

Applicazioni diverse possono fare riferimento ad un’unica DTD per valutare la validità dei file elaborati;

18

Page 19: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML

Definito il tipo di documento (conformità) e le regole di validità (DTD), manca un comando per dire alle applicazioni come rappresentare i dati.

<?xml-stylesheet type="text/css" href=“stile.css"?>

<?xml-stylesheet type="text/xsl" href=“transform.xsl"?>

19Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 20: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML

<?xml version="1.0" encoding="iso-8859-1"?>

<!-- Inserisco il riferimento alla DTD esterna -->

<!DOCTYPE rubrica SYSTEM "rubrica.dtd">

<!-- Inserisco il riferimento ad un foglio di stile esterno -->

<?xml-stylesheet type="text/css" href="stile.css"?>

<rubrica>

<contatto>

<nome>Andrea</nome>

<cognome>Crevola</cognome>

<telefono>011-555-1234</telefono>

<email>[email protected]</email>

</rubrica>

20Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 21: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML

<!ELEMENT nome_elemento (contenuto_del_tag)occorrenza>

<!ELEMENT rubrica (contatto)>

<!ELEMENT contatto (nome,cognome,indirizzo,telefono,email,foto)>

=> la sequenza conta!

<!ELEMENT nome (#PCDATA)>

=> la parola chiave #PCDATA si usa per indicare che il tag può contenere direttamente i dati

21Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 22: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML

22

DTD: occorrenze degli elementi

+

*

?

L’elemento può ripetersi più volte, ma deve essere utilizzato almeno una volta

L’elemento facoltativo e che può ripetersi più volte

L’elemento facoltativo ma, se utilizzato, può comparire una sola volta

Esempio:

<!ELEMENT contatto (nome,cognome,telefono+,email*,foto?)>

Page 23: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML -DTD

Non è detto che un elemento debba contenere altri elementi o dati;

XML consente di creare elementi “vuoti”:

<!ELEMENT foto EMPTY>

Nel documento XML potrò usare due sintassi:

1. <foto></foto>

2. <foto /> (sintassi abbreviata)

23Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 24: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML -DTD

XML consente di specificare se un elemento deve comparire in alternativa ad un altro:

<!ELEMENT telefono (fisso | mobile) >

24Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 25: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML -DTD

Come in HTML, gli elementi XML possono contenere altri comandi, detti attributi, che possono specificare proprietà ulteriori degli elementi:

<foto src=“andrea.jpg” alt=“Foto di Andrea Crevola” />

Nella DTD scriverò:

<!ATTLIST foto src CDATA #REQUIRED>

<!ATTLIST foto alt CDATA #REQUIRED>

In generale

<!ATTLIST nome_elemento nome_attributo TIPO #OCCORRENZA “default”>

25Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 26: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML -DTD

Esistono tre tipi di attributi:1. CDATA: stringhe di testo (sono ammessi tutti i caratteri tranne <,>,&,’ e

”);<!ATTLIST foto src CDATA>

2. Attributi di tipo token: l’attributo ha valori limitati;1. ID: nel documento non possono esistere due occorrenze dell’attributo con valore identico;

<!ATTLIST contatto id ID>2. IDREF: il valore dell’attributo deve fare riferimento ad un valore di un attributo di tipo ID;3. ENTITY: il valore è un entità esterna non soggetta al parsing;4. ENTITIES: il valore dell’attributo è costituito da più entità;5. NMTOKEN: il valore è composto da lettere, cifre, punti, caratteri di sottolineatura, due

punti e trattini;6. NMTOKENS: come NMTOKEN, ma sono possibili più stringhe separate da uno spazio;

3. Attributi enumerati:1. Si indicano tra parentesi i valori in alternativa e tra virgolette l’eventuale valore di default

<!ATTLIST contatto sesso (M|F) “F”>

26Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 27: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

27Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

DTD: occorrenza degli attributi

#REQUIRED

#IMPLIED

#FIXED

L’attributo è obbligatorio

L’attributo è facoltativo, se non indicato acquisisce il valore deciso dall’applicazione che elabora il documento XML;

L’attributo ha valore fisso, anche se non viene specificato nel documento XML

<!ATTLIST indirizzo cap #FIXED “10100” >

Page 28: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML - XSLT

L’eXtensible Stylesheet Language (XSL) è un insieme di tre linguaggi che forniscono gli strumenti per l’elaborazione e la presentazione di documenti XML in maniera molto flessibile.

Possiamo individuare i seguenti meccanismi di base:

- un meccanismo per l’individuazione dei dati da presentare

- un meccanismo per il controllo dell’elaborazione dei dati e di come la presentazione deve essere effettuata

- un meccanismo per la definizione della formattazione da applicare ai dati per la presentazione vera e propria

28Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 29: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML - XSLT

A ciascuno di questi tre meccanismi, XSL associa uno specifico linguaggio:

XPath consente di individuare gli elementi e gli attributi di un documento XML sui quali verranno applicate le operazioni necessarie per la presentazione dei dati

XSLT (XSL transformation) consente di controllare le operazioni che rendono i dati presentabili

XSL-FO (XSL Formatting Objects) definisce un insieme di tag di formattazione

29Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 30: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML - XSLT

Questa suddivisione dei compiti ne garantisce la flessibilità.

Infatti, questi tre linguaggi non sono strettamente dipendenti l’uno dall’altro.

Potremmo decidere di non utilizzare affatto XSL-FO per formattare i dati di un documento XML e produrre direttamente codice HTML, o meglio XHTML, cioè la versione di HTML basata su XML.

La presentazione dei dati racchiusi in un documento XML è basata su due elementi:

un documento che descrive come i dati devono essere elaborati per la presentazione, chiamato foglio di stile XSLT

un componente software, chiamato processore XSLT, in grado di prendere in input un documento XML e un foglio di stile XSLT e di produrre in output i dati secondo il formato di presentazione prescelto (XSL-FO, XHTML, testo, ecc.)

30Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 31: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML - XSLT

Individuare gli elementi di un documento XML rappresenta il primo passo di un’elaborazione per la presentazione dei dati. Nei CSS questo ruolo è svolto dal selettore, cioè l’elemento sintattico di una regola CSS che individua gli elementi da formattare.

In XSL questo passo viene descritto tramite il linguaggio XPath. A differenza dei selettori CSS, però, XPath è molto più potente e flessibile.

Questo linguaggio consente di creare espressioni dichiarative, chiamate espressioni XPath o pattern, che individuano i vari nodi dell’albero di rappresentazione di un documento XML.

La sua sintassi è molto compatta e, per certi versi, ricorda un po’ le espressioni perindividuare il percorso di un file o una cartella su un file system.

Il simbolo ‘/’ rappresenta il root element di un documento XML. facendo riferimento al seguente documento XML, l’espressione ‘/’ rappresenta l’elemento articolo:

31Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 32: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML - XSLT

<?xml version=”1.0″ ?><articolo titolo=”"> <paragrafo titolo=”Titolo del primo paragrafo”>  <testo>   Blocco di testo del primo paragrafo  </testo>  <immagine file=”immagine1.jpg”>  </immagine> </paragrafo></articolo>

Per individuare l’elemento <testo> all’interno del nostro esempio di documento XML dobbiamo specificare un percorso di questo tipo:

/articolo/paragrafo/testo

Se siamo interessati all’attributo titolo dell’elemento <paragrafo> possiamo specificarlo nel modo seguente:

/articolo/paragrafo/@titolo

32Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 33: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML - XSLT

La trasformazione avviene in base alle informazioni contenute in un particolare tipo di documento e interpretate da un processore XSLT. Questo documento di trasformazione, chiamato foglio di stile XSLT, non è altro che un documento XML che fa uso di tag appartenenti alla grammatica di XSLT in grado di controllare il processo di trasformazione.

In generale, un foglio di stile XSLT ha la seguente struttura:

<?xml version=”1.0″?><xsl:stylesheet version=”1.0″ xmlns:xsl=”http://www.w3.org/1999/XSL/transorm”>… template di trasformazione …</xsl:stylesheet>

All’interno del root element <xsl:stylesheet> vengono definite le istruzioni di trasformazione da applicare al documento XML origine

33Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 34: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML - XSLT

Il processo di trasformazione controllato da XSLT si basa sull’uso del linguaggio XPath per individuare gli elementi del documento origine, sui quali viene applicato un template (o modello) di trasformazione.

Da un punto di vista sintattico, un template è un elemento del linguaggio XSLT che ha la seguente forma di base:

<xsl:template match=”espressione XPath”>… Definizione dellìoutput…</xsl:template>

Un primo esempio

<xsl:template match=”/”> <xsl:value-of select=”articolo/@titolo”/> <xsl:apply-templates/></xsl:template>

34Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 35: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML - XSLT

 Per selezionare uno specifico elemento, ad esempio il paragrafo con titolo Titolo del secondo paragrafo, possiamo farlo con l’espressione seguente:

/articolo/paragrafo/[@titolo=‘Titolo del secondo paragrafo’]

In pratica, all’interno delle parentesi quadre specifichiamo la condizione che deve essere soddisfatta dall’elemento.

Per selezionare un elemento specifico è possibile utilizzare anche alcune funzioni predefinite, come position(), che specifica la posizione di un elemento, e last(), che specifica l’ultima posizione di una sequenza di elementi. Ad esempio, le due espressioni seguenti specificano rispettivamente il secondo paragrafo e l’ultimo paragrafo dell’articolo:

/articolo/paragrafo[position()=2]/articolo/paragrafo[position()=last()]

35Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 36: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML - XSLT

Per fare un altro esempio, facendo riferimento al documento XML che descrive un articolo, il seguente template restituisce in output il titolo del secondo paragrafo:

<xsl:template match=”/articolo/paragrafo[position()=2]“> <xsl:value-of select=”@titolo”/></xsl:template>

36Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 37: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML - XSLT

La doppia barra ‘//’ consente di individuare tutti i discendenti di un particolare elemento. Ad esempio, l’espressione

/articolo/paragrafo//immagine

individua tutti gli elementi <immagine> contenuti nell’elemento <paragrafo>, a qualsiasi livello.

Per individuare tutti i sottoelementi di un certo elemento possiamo utilizzare l’asterisco (*). Ad esempio, per selezionare tutti gli elementi del secondo paragrafo possiamo scrivere la seguente espressione XPath:

/articolo/paragrafo[position()=2]/

37Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 38: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML - XSLT

XSLT è un linguaggio potente e flessibile con costrutti analoghi a quelli dei linguaggi di programmazione.

Per ottenere questo risultato possiamo utilizzare l’elemento <xsl:if> di XSLT il cui comportamento è analogo all’istruzione if dei linguaggi di programmazione tradizionali. Possiamo quindi sfruttare questo elemento come nel seguente codice:

<xsl:template match=”paragrafo”>  <h3>  <xsl:if test=”@tipo=bibliografia’”>    Bibliografia  </xsl:if>  <xsl:value-of select=”@titolo”/>  </h3>  <xsl:apply-templates/></xsl:template>

L’attributo test dell’elemento <xsl:if> specifica la condizione da valutare e può essere una condizione booleana o un’espressione XPath che individua un insieme di nodi. In quest’ultimo caso la condizione viene considerata vera se l’insieme dei nodi individuati non è vuoto.

38Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 39: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML - XSLT

Se vogliamo in qualche modo analizzare il contenuto dei diversi nodi all’interno di un template possiamo fare ricorso all’elemento <xsl:for-each>, il cui funzionamento è analogo alle istruzioni for dei linguaggi di programmazione tradizionali.

Vediamo come sfruttare l’elemento <xsl:for-each> nel nostro caso. Immaginiamo di voler produrre in output nel documento XHTML risultante un sommario iniziale in cui vengono elencati i titoli dei paragrafi dell’articolo. Possiamo scrivere il template di elaborazione dell’elemento <articolo> nel seguente modo:

<xsl:template match=”/”>  <h1><xsl:value-of select=”articolo/@titolo”/></h1>  <h2>Sommario</h2>  <xsl:for-each select=”paragrafo”>    <h3><xsl:value-of select=”@titolo”/></h3>  </xsl:for-each>  <xsl:apply-templates/></xsl:template>

39Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 40: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML – XML SCHEMA

Uno XML Schema è un documento XML che utilizza un insieme di tag speciali per definire la struttura di un documento XML

Il vincolo da rispettarsi nella creazione di uno schema è l’uso dei tag definiti dall’XML Schema Language definito dal W3C nei documenti www.w3.org/TR/xmlschema-0, www.w3.org/TR/xmlschema-1 e www.w3.org/TR/xmlschema-2

Uno XML Schema ha la seguente struttura generale:

L’elemento root del documento è rappresentato dal tag <xs:schema>, il quale specifica tramite l’attributo xmlns che in questo documento saranno utilizzati dei tag definiti da uno specifico standard del W3C.

40Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 41: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML – XML SCHEMA

Tipi di Dato

Una delle principali differenze che intercorrono tra XML Schema e DTD è la possibilità non solo di definire il tipo di dato di un elemento, ma anche di poter personalizzare un tipo di dato. Esistono due categorie di tipi di dato: semplici e complessi.

I tipi di dato semplici sono relativi a quegli elementi che non possono contenere altri elementi e non prevedono attributi. Sono previsti numerosi tipi di dato predefiniti; a titolo d’esempio, possiamo imporre il vincolo che un elemento contenga informazioni di tipo stringa, intero, booleano, data, ecc.

È possibile definire tipi semplici personalizzati derivandoli da quelli predefiniti. Ad esempio, possiamo definire un tipo di dato come restrizione del tipo stringa, vincolando i valori ad uno specifico insieme di stringhe o ad un pattern individuato da un’espressione regolare.

I tipi di dato complessi si riferiscono alla definizione degli elementi con attributi e che possono contenere altri elementi. La definizione del tipo complesso consiste generalmente nella definizione della struttura prevista dall’elemento. Se l’elemento può contenere altri elementi possiamo definire l’insieme degli elementi che possono stare al suo interno come sequenza, come insieme di valori alternativi o come gruppo.

41Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 42: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML – XML SCHEMA

XML Schema prevede il tag <xs:element> per la definizione degli elementi utilizzabili in un documento XML, specificando nell’attributo name il nome del relativo tag. All’interno di ciascun tag <xs:element> possiamo indicare il tipo di dato dell’elemento e possiamo definire gli eventuali attributi.

Ad esempio, la seguente definizione specifica l’elemento testo che può contenere soltanto stringhe:

Mentre la seguente specifica l’elemento quantita che può contenere soltanto numeri interi

42Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Tipi di dato semplici personalizzati: derivazione dei tipi semplici predefiniti

Es:

la dichiarazione indica che l’elemento <quantita> è di tipo semplice e prevede una restrizione sul tipo di dato intero predefinito accettando valori compresi tra 1 e 100

Page 43: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML – XML SCHEMA

43Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Tipi di dato complessi personalizzati: possono contenere altri elementi e definire attributi. Lo schema generale per la definizione di un elemento di tipo complesso è il seguente:

Se l’elemento può contenere altri elementi possiamo definire la sequenza di elementi che possono stare al suo interno utilizzando uno dei costruttori di tipi complessi previsti:

<xs:sequence> Consente di definire una sequenza ordinata di sottoelementi

<xs:choice> Consente di definire un elenco di sottoelementi alternativi

<xs:all> Consente di definire una sequenza non ordinata di sottoelementi

Per ciascuno di questi costruttori e per ciascun elemento è possibile definire il numero di occorrenze previste utilizzando gli attributi minOccurs e maxOccurs.

Page 44: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML – XML SCHEMA

44Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Esempio di xml schema che include tipi complessi:

Page 45: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML – XML SCHEMA

45Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

La definizione degli attributi è basata sull’uso del tag <xs:attribute>, come nel seguente esempio:

L’attributo use consente di specificare alcune caratteristiche come la presenza obbligatoria (required) o un valore predefinito (default) in combinazione con l’attributo value. Ad esempio, la seguente definizione indica un attributo il cui valore di predefinito è test:

Se non si specifica esplicitamente l’obbligatorietà dell’attributo, esso è considerato opzionale.

Es. di xml schema che include attributi di tipi complessi:

Page 46: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML – XML SCHEMA

Dichiarazione di tipi

XML Schema prevede la possibilità di rendere modulare la definizione della struttura di un documento XML tramite la dichiarazione di tipi e di elementi.

Nel corso della creazione di uno schema XML possiamo analizzare ciascun sottoelemento significativamente complesso e fornire una definizione separata come elemento o come tipo di dato.

Questo contribuisce a fornire una struttura modulare allo schema, più ordinata, più comprensibile e semplice da modificare. Sfruttando la struttura modulare delle dichiarazioni, il contenuto di uno XML Schema diventa una sequenza di dichiarazioni di tipi ed elementi.

Possiamo definire un tipo complesso in base al seguente schema:

46Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 47: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML – XML SCHEMA

Dichiarazione di tipi

Il riferimento ad una dichiarazione di tipo viene fatta come se fosse un tipo predefinito, come mostrato nel seguente esempio:

La possibilità di dichiarare elementi e tipi di dato implica l’esistenza di un ambito di visibilità o contesto dei componenti dichiarati. I componenti di uno schema dichiarati al livello massimo, cioè come sottoelementi diretti dell’elemento root, sono considerati dichiarati a livello globale e possono essere utilizzati nel resto dello schema.

Nella dichiarazione di un tipo complesso è possibile fare riferimento ad elementi già esistenti dichiarati a livello globale oppure si possono definire nuovi elementi. La definizione di nuovi elementi all’interno di una definizione di tipo o di elemento costituisce una dichiarazione a livello locale. Ciò vuol dire che l’utilizzo di questi elementi è limitato alla definizione del tipo complesso in cui sono dichiarati e non possono essere utilizzati in altri punti dello schema.

I nomi degli elementi devono essere univoci nel contesto in cui compaiono. Questo significa, però, che in contesti diversi possiamo avere elementi con lo stesso nome ma con struttura diversa senza rischio di conflitti.

47Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 48: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML – XML SCHEMA

48Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Esempio di xml schema che include la definizione di tipi complessi con visibilità globale:

Page 49: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML – XML SCHEMA

Integrazione di grammatiche e namespaces

A partire da una grammatica definita tramite uno XML Schema, è possibile sfruttare un parser XML validante per verificare la validità di un documento XML. Il parser avrà bisogno, quindi, sia del documento XML da validare, sia dello schema XML rispetto a cui effettuare la validazione.

Ci sono diversi modi per fornire al parser informazioni sullo schema da utilizzare per la validazione. Uno di questi modi consiste nell’inserire nel documento XML un riferimento allo schema da utilizzare. Questo riferimento viene associato all’elemento root come nel seguente esempio:

Oltre all’attributo titolo sono stati aggiunti due attributi predefiniti. L’attributo xmlns:xsi indica un URL che specifica la modalità con cui si indicherà il riferimento allo schema XML. L’attributo xsi:noNamespaceSchemaLocation indica il nome e l’eventuale percorso del file contenente lo schema XML di riferimento.

49Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 50: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML – XML SCHEMA

Integrazione di grammatiche e namespaces

Una delle caratteristiche auspicabili nella creazione di un nuovo linguaggio è la possibilità di integrare elementi derivanti da grammatiche diverse. Questa caratteristica consente di riutilizzare parti di grammatiche già definite evitando di dover rifare parte di lavoro già fatto in altri ambiti.

In questo modo, ad esempio, sarebbe possibile integrare un linguaggio per la descrizione di articoli tecnici con un linguaggio pre-esistente per la descrizione di bibliografie, ottenendo un nuovo linguaggio composto. Tuttavia la composizione di linguaggi pone almeno due tipi di problemi:

• un documento che utilizza due grammatiche presenta il problema della validazione: a quale schema si deve fare riferimento per validare un documento XML “ibrido”?•due linguaggi potrebbero avere tag ed attributi con lo stesso nome, anche se utilizzabili in contesti diversi: come fare a risolvere questo tipo di ambiguità?

La soluzione a questi problemi deriva dai namespaces. Un namespace è un insieme di nomi di elementi e nomi di attributi identificati univocamente da un identificatore.

50Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 51: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML – XML SCHEMA

Integrazione di grammatiche e namespaces

L’identificatore univoco individua l’insieme dei nomi distinguendoli da eventuali omonimie in altri namespace. Per fare un esempio, se nell’ambito di una grammatica per descrivere dei dati anagrafici è stato definito un elemento indirizzo, questo nome potrebbe essere confuso con l’elemento indirizzo definito nell’ambito di una grammatica che descrive messaggi di posta elettronica. L’identificatore del relativo namespace consente di distinguere i due elementi omonimi.

Un XML Schema definisce implicitamente un namespace degli elementi e degli attributi che possono essere usati in un documento XML.

Se in un documento XML si utilizzano elementi definiti in schemi diversi abbiamo bisogno di un meccanismo che permetta di identificare ciascun namespace e il relativo XML Schema che lo definisce.

51Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 52: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML – XML SCHEMAIntegrazione di grammatiche e namespaces

In un documento XML si fa riferimento ad un namespace utilizzando un attributo speciale (xmlns) associato al root element, come nel seguente esempio:

Questo indica che l’elemento articolo ed i suoi sottoelementi utilizzano i nomi definiti nel namespace identificato dall’identificatore http://www.dominio.it/xml/articolo. L’identificatore di un namespace può essere rappresentato da una qualsiasi stringa, purché sia univoca. Proprio per garantirne l’univocità, è prassi ormai consolidata utilizzare un URI (Uniform Resource Identifier) come identificatore.

È bene evidenziare che non è necessario che l’indirizzo specificato come identificatore di namespace corrisponda ad un file pubblicato sul Web. Esso è utilizzato semplicemente come identificatore ed il parser non accederà al Web per verificare l’esistenza dell’URL.

E’ possibile combinare più namespace facendo in modo che ciascun elemento utilizzato faccia riferimento al proprio namespace.

Occorre tener presente che quando si fa riferimento ad un namespace, questo riferimento vale per l’elemento corrente e per tutti gli elementi contenuti, a meno che non venga specificato un diverso namespace.

52Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Page 53: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

XML – XML SCHEMA

53Titolo Presentazione / Data / Confidenziale / Elaborazione di ...

Prefissi

Nell’esempio soprastante il documento xml dichiara a livello di root element che relativamente ai tags con prefisso xr e prefisso xb, si farà riferimento rispettivamente al namespace http://www.html.it/XMLRicette ed al namespace http://www.altrodominio.it/XMLBiblio. I due namespaces sono dichiarati nei files XMLRicette.xsd e XMLBiblio.xsd come illustrato nell’esempio sottostante:

Page 54: 1 Titolo Presentazione / Data / Confidenziale / Elaborazione di... XML Elaborazione di Franco Grivet Chin

54Titolo Presentazione / Data / Confidenziale / Elaborazione di ...