Introduzione a XML:
Document Type Definition;
parser XML;
XML-schema;
eXtensible Stylesheet Language
a.a. 2004/05
Tecnologie Web
1
XML - I
XML (eXStensible Markup Language):
XML è un formato standard, definito dal W3C
(http://www.w3.org) indipendente dalla piattaforma,
utilizzato per la rappresentazione di dati e di
contenuti strutturati
XML viene spesso presentato come il successore di
HTML; in realtà:
a.a. 2004/05
•
HTML è un linguaggio per il markup di
documenti (pagine Web)
•
XML è un meta-linguaggio, consente cioè la
definizione di nuovi linguaggi
Tecnologie Web
2
XML - II
Vantaggi di XML:
• Si è imposto come standard per la condivisione di
dati su Internet
• E` basato su una rappresentazione dei dati come
stringhe di caratteri ⇒ facilmente trasferibili via
HTTP
• Sono stati sviluppati strumenti per la scrittura,
l’interpretazione, la gestione di documenti XML
• E` utilizzato per la condivisione e lo scambio di dati
tra applicazioni
a.a. 2004/05
Tecnologie Web
3
XML - III
Che cos'è un meta-linguaggio?
Un meta-linguaggio è un linguaggio per definire nuovi
linguaggi (in questo senso è “estensibile”)
Per es: supponiamo di avere una ditta che importa e
rivende caffè e di voler rappresentare il nostro listino
prezzi; vorremmo un linguaggio che ci metta a
disposizione i seguenti tag:
<listinoPrezzi>
<caffe>
<nome>Mocha Java</nome>
<prezzo>11.95</ prezzo>
</caffe>
<caffe>
<nome>Sumatra</nome>
<prezzo>12.50</ prezzo>
</caffe>
</listinoPrezzi>
a.a. 2004/05
Tecnologie Web
Listino prezzi caffè
nome
prezzo
Mocha Java 11.95
Sumatra
12.50
4
XML: DTD - I
Possiamo definirlo!
Utilizziamo una DTD (Document Type Definition), per
definire il nuovo linguaggio (cioè l'insieme di tag di
cui abbiamo bisogno):
Definisco un tag
"listinoPrezzi",
<!ELEMENT listinoPrezzi (caffe)*>
costituito da un
<!ELEMENT caffe (nome, prezzo)>
numero arbitrario
<!ELEMENT nome (#PCDATA)>
di tag "caffe"
<!ELEMENT prezzo (#PCDATA)>
Definisco un tag "caffe",
costituito da un tag "nome"
e da un tag "prezzo"
a.a. 2004/05
I tag "nome" e "prezzo"
non sono a loro volta
costituiti da altri tag, ma
contengono solo testo
Tecnologie Web
5
XML: DTD - II
coffees.dtd
<?xml version='1.0' encoding='utf-8'?>
<!ELEMENT listinoPrezzi (caffe)*>
<!ELEMENT caffe (nome, prezzo)>
<!ELEMENT nome (#PCDATA)>
<!ELEMENT prezzo (#PCDATA)>
prologo: specifica la
versione di XML e il
set di caratteri usato
listino.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE listino SYSTEM “coffees.dtd">
<listinoPrezzi>
<caffe>
<nome>Mocha Java</nome>
<prezzo>11.95</ prezzo>
</caffe>
<caffe>
<nome>Sumatra</nome>
<prezzo>12.50</ prezzo>
</caffe>
</listinoPrezzi>
a.a. 2004/05
Tecnologie Web
all’inizio del documento
XML dichiariamo la
DTD di riferimento
6
XML: DTD - III
Una caratteristica fondamentale di XML è la possibilità
di rappresentare la struttura delle informazioni
(mediante i tag); in particolare i tag in un documento
XML definiscono una struttura gerarchica:
listinoPrezzi
listinoPrezzi
caffè nome
prezzo
caffè
…
caffè
caffè nome
prezzo
nome
prezzo
nome
prezzo
…
a.a. 2004/05
Tecnologie Web
7
XML: documenti ben formati
• Un documento XML è ben formato se rispetta le regole
sintattiche dell’XML
• Intuitivamente, un documento è ben formato sse:
– contiene tutte le componenti necessarie (1 prologo, 1
solo elemento radice, ...)
– i suoi tag sono bilanciati, cioè
ƒ ogni tag aperto viene chiuso: <TAG>bla</TAG>
Se l’elemento è vuoto: <TAG></TAG> ≡ <TAG/>
• i tag sono “annidati” correttamente, cioè l’ultimo tag
aperto è il primo ad essere chiuso:
<TAG1><TAG2><TAG3>...</TAG3></TAG2></TAG1>
• NB: XML (a differenza di HTML) è case-sensitive!
a.a. 2004/05
Tecnologie Web
8
XML: documenti validi - I
• Abbiamo detto che, utilizzando una DTD (Document
Type Definition) possiamo definire nuovi linguaggi
(cioè insiemi di tag) basati su XML
• Un documento XML è valido se è ben formato
(sintassi XML) e se rispetta la DTD; per es, dato il
frammento di DTD visto prima:
<!ELEMENT listinoPrezzi (caffe)*>
<!ELEMENT caffe (nome, prezzo)>
<!ELEMENT nome (#PCDATA)>
<!ELEMENT prezzo (#PCDATA)>
…
a.a. 2004/05
Tecnologie Web
9
XML: documenti validi - II
struttura errata: l’elemento prezzo NON
è figlio di listinoPrezzi (ma di caffe)
<listinoPrezzi>
<caffe>
<nome>Mocha Java</nome>
<prezzo>11.95</ prezzo>
</caffe>
<caffe>
<nome>Sumatra</nome>
<prezzo>12.50</ prezzo>
</caffe>
</listinoPrezzi>
è un documento valido
a.a. 2004/05
tag non definito nella DTD
<listinoPrezzi>
<caffe>
<marca>Mocha Java</marca>
</caffe>
<prezzo>11.95</ prezzo>
<caffe>
<marca>Sumatra</marca>
</caffe>
<prezzo>12.50</ prezzo>
</listinoPrezzi>
NON è un documento valido
Tecnologie Web
10
Parser XML: SAX - I
• Parser XML = strumento (programma) che verifica se un
documento XML è ben formato
• Alcuni parser XML sono anche “validanti”, cioè verificano
se un documento XML è ben formato e se è valido rispetto
alla DTD (o XML-schema) di riferimento
• Per costruire applicazioni che usano documenti XML il
parser deve offrire delle API per invocare l’analisi sintattica,
restituire risultati, validare, ecc. Per es. esistono i parser
SAX (Simple API for XML), sviluppati per vari linguaggi di
programmazione tra cui Java (JAXP: parser SAX di Sun
Microsystems, offre API in Java)
• Ci sono anche dei parser utilizzabili via web, per es. il
validatore di W3C: http://validator.w3.org/
a.a. 2004/05
Tecnologie Web
11
Parser XML: SAX - II
Quando “lanciamo” un parser (validante) su un documento
XML, il parser
• analizza il file xml
• se trova un errore (per es: manca prologo, tag aperto ma
non chiuso, tag non bilanciati, tag sconosciuto, …) lo
segnala e si ferma (documento non ben formato e/o non
valido)
• altrimenti, arriva fino a fine documento (e si ferma)
Esempio di segnalazione di errore:
org.xml.sax.SaxParseException: Element type “marca” must be declared.
at org.apache.xerces.parsers.AbstractSaxParser.parse…
at ….
a.a. 2004/05
Tecnologie Web
12
Parser XML: SAX - III
Come funziona un parser XML?
• legge il documento XML in modo sequenziale,
carattere per carattere, partendo dall’inizio
• “lancia eventi” che contengono informazioni sui
caratteri appena letti; per es: quando incontra un tag
aperto, lancia l’evento startElement() che indica l’inizio
di un elemento XML; quando incontra un tag chiuso
lancia l’evento endElement(), ecc.
doc.
XML
a.a. 2004/05
Stream
XML
Parser
t
n
e
um
c
o
tD ent
r
a
t
s
ev
nt
e
m
e
El
start event
endDocument
event
Tecnologie Web
Applicazione Java
startDocument()
startElement()
..
endDocument()
13
Parser XML: SAX - IV
Si può scrivere un’applicazione (Java) che
• “cattura” gli eventi lanciati dal parser durante l’analisi
del documento
• li gestisce (per es. estrae dati e li salva, stampa a video,
ecc.)
⇒ i parser possono essere usati per estrarre
informazioni da documenti XML; per es. JAXP (il
parser SAX di Sun Microsystems), offre API in Java
per “catturare” gli eventi e gestirli
a.a. 2004/05
Tecnologie Web
14
Parser XML: DOM - I
• I parser SAX fanno l’analisi sintattica del documento XML
basandosi sul concetto di “evento”
• W3C ha definito le specifiche per una rappresentazione
alternativa di documenti XML, maggiormente strutturata
⇒ permette di analizzare e modificare il contenuto del
documento
L’idea di base è quella di utilizzare il fatto che
l’annidamento dei tag definisce una struttura gerarchica
che permette una rappresentazione ad albero, in cui gli
elementi sono “oggetti” che rappresentano i nodi
dell’albero
⇒ DOM (Document Object Model) = W3C standard per
gestione di documenti XML
a.a. 2004/05
Tecnologie Web
15
Parser XML: DOM - II
DOM (Document Object Model):
• rappresenta i documenti con un modello ad oggetti
• rappresenta i documenti come strutture ad albero
• specifica delle interfacce (API) per “navigare”
all’interno del documento (albero) e per accedere alle
varie parti
DOCUMENT Document
(listino)
listino.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE listino SYSTEM “coffees.dtd">
<listinoPrezzi>
<caffe>
<nome>Mocha Java</nome>
<prezzo>11.95</ prezzo>
</caffe>
<caffe>
<nome>Sumatra</nome>
<prezzo>12.50</ prezzo>
</caffe>
</listinoPrezzi>
a.a. 2004/05
Root
listinoPrezzi element
caffè
nome
Tecnologie Web
…
caffè
child elements
prezzo
nome
prezzo
16
Parser XML: DOM - III
• Molti parser (es. JAXP) sono conformi a DOM ⇒ usano la
rappresentazione DOM (libreria org.w3c.dom) per gestire
documenti
• La librearia org.w3c.dom offre un supporto completo per
creare, “navigare” e modificare un albero (documento) a
partire dalla radice;
a.a. 2004/05
Tecnologie Web
17
Parser XML: DOM - IV
DOM è nato per trattare documenti:
• è document-oriented (focalizzato sulle parti di cui un
documento si compone)
• la gestione di strutture dati è possibile, ma un po’ ostica
⇒ sono stati sviluppati altri modelli di rappresentazione che
facilitano l’accesso e la modifica; per es: JDOM,
DOM4J, JAXB
• JAXB (Java Architecture for XML Binding) è nato
apposta per trattare la rappresentazione XML di strutture
dati
a.a. 2004/05
Tecnologie Web
18
XML Schema - I
• XML-Schema è una specifica di W3C
(www.w3.org/TR/xmlschema-0/) alternativa (e più
recente) di DTD, per definire linguaggi basati su XML;
XML-Schema permette di:
– specificare la struttura dei dati
– specificare il tipo del contenuto dei dati
• NB: DTD permette di specificare la struttura, ma non il
(tipo del) contenuto!
• Es: coffeeOrder.xsd definisce la struttura di documenti
XML che descrivono ordini di caffè (definisce un
linguaggio XML per descrivere ordini di caffè)
a.a. 2004/05
Tecnologie Web
19
XML Schema - II
coffeeOrder.xsd [prima parte]
namespace per XML-Schema
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="coffeeOrder" type="CoffeeOrderType"/>
<xsd:complexType name="CoffeeOrderType">
dichiarazione dell’elemento
<xsd:sequence>
(tag) coffeOrder (di tipo
<xsd:element name="billTo" type="Address"/> CoffeOrderType)
<xsd:element name="items" type="Items"/>
<xsd:element name= "comment" type= "xsd:string" minOccurs= "0"/>
</xsd:sequence>
elemento
opzionale
<xsd:attribute name="orderDate" type="xsd:date"/>
</xsd:complexType>
…
definizione del tipo complesso CoffeeOrderType
come sequenza di elementi:
• un elemento di tipo (complesso) Address
• un elemento di tipo (complesso) Items
• un
elemento di tipo (semplice,
predefinito)
string
a.a.
2004/05
Tecnologie
Web
definizione
dell’attributo
orderDate, di
elementi di tipo
CoffeeOrderType
20
XML Schema - III
coffeeOrder.xsd [seconda parte]
…
<xsd:complexType name="Address">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="street" type="xsd:string"/>
<xsd:element name="city" type="xsd:string"/>
</xsd:sequence>
<xsd:attribute name="country" type="xsd:string"/>
</xsd:complexType>
<xsd:complexType name="Items"> definizione del tipo
…
complesso Items
</xsd:complexType>
</xsd:schema>
definizione del tipo complesso Address come
sequenza di 3 elementi (name, street, city) di
tipo (semplice, predefinito) string
a.a. 2004/05
Tecnologie Web
21
XML Schema - IV
ESEMPIO: coffeeOrder.xml
<?xml version="1.0"?>
<coffeeOrder orderDate="1999-10-20"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<billTo country="Italy">
<name>Paolo Bianchi</name> all’inizio del documento XML
<street>123 via Po</street>
dichiariamo L’XML-Schema
<city>Torino</city>
di riferimento
</billTo>
<items>
<item partNum="242-NO" >
<coffeeName>Lavazza Oro</coffeeName>
<quantity>5</quantity>
<price>19.99</price>
</item>
<item partNum="242-MU" >
<coffeeName>Nescafe</coffeeName>
<quantity>3</quantity>
<price>19.98</price>
</item>
</items>
a.a.</coffeeOrder>
2004/05
Tecnologie Web
22
XML Schema - V
Per gestire schemi grossi o condividere definizioni è possibile
importare uno schema esterno
Supponiamo, per es, di definire il tipo Address in un
documento (file) separato, address.xsd e poi di importarlo in
coffeeOrder.xsd (dichiarandone una URI):
<include
schemaLocation=“http://www.example.com/schemas/address.xsd”/>
in questo modo coffeeOrder.xsd può dichiarare elementi di
tipo Address come se la definizione fosse interna
NB: uno schema può importare più schemi esterni mediante
clausole include
a.a. 2004/05
Tecnologie Web
23
XML: XSL - I
La principale caratteristica di XML è la separazione del
contenuto del documento dal suo aspetto (grafico):
• Il documento XML rappresenta unicamente il
contenuto informativo che si intende pubblicare
• L'aspetto finale del documento è prodotto per
mezzo di fogli di stile scritti in XSL (eXstensible
Stylesheet Language):
<listinoPrezzi>
<caffe>
<nome>Mocha Java</nome>
<prezzo>11.95</ prezzo>
</caffe>
<caffe>
<nome>Sumatra</nome>
<prezzo>12.50</ prezzo>
</caffe>
</listinoPrezzi>
documento XML
a.a. 2004/05
Listino prezzi caffè
XSL
marca
prezzo
Mocha Java
11.95
Sumatra
12.50
doc. finale (per es. brochure)
Tecnologie Web
24
XML: XSL - II
Grazie a questa caratteristica possiamo gestire un’unica
versione del contenuto (dati) che vogliamo rappresentare
e poi generare visualizzazioni diverse (in formati diversi:
word, pdf, excel, html, …) ⇒ riutilizzo del contenuto in
contesti diversi:
pagina Web (HTML)
documento
XML
record in un database
brochure
a.a. 2004/05
Tecnologie Web
ecc…
25
XML: XSL - III
Un processore XSLT legge in input il file XML che
rappresenta il contenuto + il foglio di stile XSL (che è un
file di testo con estesione .xsl, per es: stile1.xsl) ed esegue
la trasformazione e produce il risultato (un file di testo
che può essere a sua volta interpretato come pagina
HTML, record di database, ecc.)
documento
XML
stylesheet
XSL
a.a. 2004/05
pagina Web (HTML)
processore
XSLT
Tecnologie Web
record in un database
brochure
ecc…
26
XML: XSL - IV
Modalità per applicare una trasformazione XSL ad un
documento XML (cioè per invocare il processore XSLT):
1. Il browser (per es. IE6) contiene un processore
XSLT: il file XML viene caricato come una normale
pagina; il foglio di stile da applicare è indicato nel
file XML; il risultato viene visualizzato dal browser
stesso
2. Un programma (per es. Java) standalone applica il
foglio di stile XSL al file XML
3. Un Web Server applica il foglio di stile XSL al file
XML e spedisce il risultato al client (browser) che ha
originato l'applicazione
Vediamo un esempio della prima modalità
a.a. 2004/05
Tecnologie Web
27
XML: XSL - V
Il browser (per es. IE6) contiene un processore XSLT:
• il file XML viene caricato come una normale pagina
• nel file XML indichiamo qual è il foglio di stile da
applicare: <?xml-stylesheet type="text/xsl"
href="listinoWeb.xsl"?>
•
nel file XSL indichiamo il namespace specifico usato
dal browser: <xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/TR/WD-xsl">
Files: coffees.dtd, listino.xml, listinoWeb.xsl, listinoCarta.xsl
Per provare l’applicazione di diversi fogli di stile XSL allo stesso
documento XML:
- in listino.xml mettere il riferimento a listinoWeb.xsl
- aprire listino.xml con IE per vedere il risultato della trasformazione
- modificare il riferimento in listino.xml (a listinoCarta.xsl)
- aprire listino.xml con IE per vedere il risultato della trasformazione
a.a. 2004/05
Tecnologie Web
28
Scarica

Slides delle lezioni (parte II)