Laboratorio di Ingegneria Informatica

Transcript

Laboratorio di Ingegneria Informatica
eXtensible Markup Language (XML)
Laboratorio di Ingegneria
Informatica
n
n
XML
Parser per XML
Corso di laurea specialistica in
Ingegneria Informatica
XML: cosa è
n
XML: le origini
n
XML: Extensible Markup Language:
q
q
q
è un linguaggio che consente la
rappresentazione di documenti e dati strutturati
su supporto digitale
è uno dei più potenti e versatili sistemi per la
creazione, archiviazione, preservazione e
disseminazione di documenti digitali…
… ma la sua sintassi rigorosa e al contempo
flessibile ne rende possibile l’applicazione
anche nella rappresentazione di dati strutturati,
fornendo una soluzione alternativa ai
tradizionali sistemi DBMS relazionali
La Famiglia di XML
n
n
n
XML: principi fondamentali
SGML
HTML
XHTML
n
XML è stato sviluppato dal World Wide Web
Consortium (http://www.w3.org)
Le specifiche sono state rilasciate come W3C
Recommendation nel 1998 e aggiornate nel 2004
XML deriva da SGML, un linguaggio di mark-up
dichiarativo sviluppato dalla International
Standardization Organization (ISO), e pubblicato
ufficialmente nel 1986 con la sigla ISO 8879
XML nasce come un sottoinsieme semplificato di
SGML orientato alla utilizzazione su World Wide
Web…
… ma ha assunto ormai un ruolo autonomo e una
diffusione ben maggiore del suo progenitore
XML
n
n
n
WML
XML adotta un paradigma di codifica
dichiarativo e descrittivo
XML descrive un documento come una
struttura ad albero
XML introduce il concetto di “tipo di
documento” e di “sintassi del documento”
MathML
SOAP
1
XML: caratteristiche
n
n
XML è un metalinguaggio, che permette di
definire sintatticamente linguaggi di markup (nuovi linguaggi)
Un linguaggio XML permette di esplicitare
la (le) struttura(e) di un documento in
modo formale mediante marcatori (markup) che vanno inclusi all’interno del testo
(character data)
XML: caratteristiche
XML: caratteristiche
n
n
n
XML: caratteristiche
XML è indipendente dal tipo di piattaforma
hardware e software su cui viene utilizzato
XML permette la rappresentazione di qualsiasi
tipo di documento (e di struttura testuale)
indipendentemente dalle finalità applicative
XML è indipendente dai dispositivi di archiviazione
e visualizzazione
n
n
n
On-line
WWW
File
XML
n
XML può essere usato per la
rappresentazione di dati strutturati (archivi,
tabelle, matrici) in alternativa ai formati di
database tradizionali
XML può essere usato come formato di
scambio dati in applicazioni middleware
CD-ROM
<p>Paragarafo ..
<p>Paragrafo
DBMS NATIVI O
RELAZIONALI
DOCUMENT MANAGEMENT SYSTEMS
XML: caratteristiche
n
n
Carta
<Title> Titolo </title>
un documento XML può essere archiviato su qualsiasi
tipo di supporto digitale (attuale e… futuro!)
un documento XML può essere visualizzato su qualsiasi
dispositivo di output
XML: caratteristiche
XML adotta un formato di file di tipo
testuale: sia il mark-up sia il testo sono
stringhe di caratteri
XML si basa sul sistema di codifica dei
caratteri ISO 10646/UNICODE
Un documento XML è “leggibile” da un
utente umano senza la mediazione di
software specifico
n
n
n
XML è uno standard di pubblico dominio
ogni software “conforme XML” è in grado di
gestire dati in formato XML
sono disponibili numerose applicazioni e
librerie open source per la manipolazione di
dati in formato XML basate su diversi
linguaggi di programmazione (Java, C,
Python, Perl…)
una applicazione in grado di elaborare dati in
formato XML viene definita elaboratore XML
2
XML: Vantaggi
XML permette agli sviluppatori di creare facilmente
strutture ad-hoc per contenere informazione strutturata.
I parser XML sono diffusi su tutte le piattaforme e free.
Gli sviluppatori possono appoggiarsi a questi per
decodificare e validare le strutture XML, limitandosi poi a
gestire solo l'informazione contenuta usando API
specifiche (DOM, SAX).
•
•
XML è completamente text-based, quindi leggibile anche
dagli esseri umani e facilmente editabile anche a mano.
Supporta UNICODE, quindi è adatto a ogni tipo di
scrittura.
Essendo dati testuali strutturati esattamente come HTML,
i dati XML possono essere trasportati usando il
protocollo HTTP anche attraverso firewall (SOAP).
•
•
Il concetto di metalinguaggio
n
XML: Svantaggi
n
I documenti XML, a causa delle struttura
testuale e dei tag, tendono ad essere molto
più ingombranti di quelli in formato binario,
quindi la loro trasmissione sulla rete non è
ottimale.
n
I parser XML non sono veloci come quelli
scritti ad-hoc per formati specifici, soprattutto
se binari.
Il concetto di metalinguaggio
XML è un metalinguaggio
q
q
q
q
XML definisce un insieme regole (meta)sintattiche,
attraverso le quali è possibile descrivere
formalmente un linguaggio di markup, detto
“applicazione XML”
ogni applicazione XML eredita un insieme di
caratteristiche sintattiche comuni
ogni applicazione XML a sua volta definisce una
sintassi formale particolare
ogni applicazione XML è dotata di una semantica
specificata in modo non formale
Il concetto di tipo di documento
n
n
n
La definizione di una applicazione XML si
basa su un determinato tipo di documento
Un tipo di documento descrive le
caratteristiche di una classe di documenti
strutturalmente omogenei
Il tipo di documento è il fondamento della
sintassi e della semantica di una
applicazione XML
XML
metalinguaggio
metasintassi
linguaggi
TEI
XHTML
DocBook
sintassi
documenti
Il concetto di tipo di documento
n
n
Un tipo di documento descrive la struttura
della classe di documenti cui si riferisce
come un albero ordinato di componenti
testuali o elementi
Un tipo di documento è caratterizzato da
q
q
q
un insieme di elementi strutturali
le relazioni di dipendenza tra gli elementi
le relazioni di ricorrenza degli elementi
3
La struttura gerarchica ordinata
Il concetto di tipo di documento
testo
n
corpo
?
?
frontespizio
introduzione
?
+
n
appendice
capitolo
+
+
titolo
?
paragrafo titolo
titolo
autore
PCDATA
+
*
enfasi
titolo
paragrafo
+
paragrafo
*
citazione PCDATA
enfasi
citazione
La Document Type Definition
n
n
Una DTD è costituita da un elenco di
dichiarazioni (markup declaration) che
descrivono la struttura del documento
Le dichiarazioni di una DTD definiscono:
q
q
q
n
gli elementi strutturali (element) di un documento
mediante un identificatore generico
il modello di contenuto di ogni elemento (content
model) ovvero gli elementi che contiene ed i loro
rapporti (un elemento può essere vuoto)
la lista degli attributi associati a ciascun elemento
e il loro tipo
Strutture XML: gli elementi
La Document Type Definition
n
n
n
n
n
I componenti strutturali di un documento sono
denominati elementi (element)
Ogni nodo dell’albero del tipo di documento è
un (tipo di) elemento
Ogni (tipo di) elemento è dotato di un nome
(detto identificatore generico) che lo identifica
XML non fornisce alcun modo per definire la
semantica di una DTD
ogni elemento è definito esclusivamente
interamente dal suo nome e dal suo
contenuto
ogni altra specificazione semantica va fornita
mediante documentazione in lingua naturale
o in altre notazioni logiche
Strutture XML: gli elementi
n
n
La struttura ad albero del tipo di documento
determina la sintassi del linguaggio di markup XML
La sintassi di un tipo di documento deve
essere espressa implicitamente (mediante il
mark-up) in ogni documento XML
La definizione formale della sintassi di un tipo
di documento XML può essere espressa
esplicitamente in una Document Type
Definition (DTD) o un XML Schema
n
n
Esiste uno e uno solo elemento, detto elemento
radice (corrispondente al nodo radice dell’albero),
che non è contenuto da nessun altro e che contiene
direttamente o indirettamente tutti gli altri
Ogni elemento, escluso l’elemento radice, deve
essere contenuto da un solo elemento (elemento
padre) e può contenere altri sotto-elementi (elementi
figli) e/o stringhe di caratteri
Esiste un sottoinsieme di elementi che non
contengono altri elementi e che possono
q
q
essere vuoti
contenere esclusivamente stringhe di caratteri
4
Strutture XML: gli attributi
n
A ogni elemento possono essere associati
uno o più attributi (attribute) che ne
specificano ulteriori caratteristiche o proprietà
non strutturali. Ad esempio:
q
q
q
q
q
il tipo rispetto a una data tassonomia
la lingua del suo contenuto testuale
un identificatore univoco
un numero di ordine
etc.
Strutture XML: le entità
Strutture XML: gli attributi
n
q
q
n
n
n
n
Un documento XML (in quanto oggetto
digitale) ha una struttura fisica
Dal punto di vista fisico un documento è
composto da unità di archiviazione che sono
denominate entità (entity)
Esiste almeno una entità in ogni documento
XML: la document entity, che contiene il
documento stesso
Strutture XML: le entità
un nome che li identifica
un valore
Il valore di un attributo può avere un tipo
esplicitato nella DTD
Se un documento XML è solo ben formato,
tutti i valori degli attributi sono di tipo CDATA
Strutture XML: le entità
n
n
Gli attributi XML hanno sono caratterizzati da
In generale una entità è qualsiasi sequenza di
byte considerata indipendentemente dalla sua
funzione strutturale
q
q
q
q
n
un singolo carattere UNICODE
una stringa di testo XML (caratteri e mark-up)
un intero file XML esterno
un intero file non XML (es. immagini digitali, etc.)
È possibile ad esempio rappresentare nel
contenuto di un documento caratteri non
presenti sulla tastiera mediante entità
Un Documento XML
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" h r e f ="C:\Documenti \ Collection.xsl"?>
n
n
n
n
Le entità vanno definite con apposite
dichiarazioni nella DTD
Una entità ha un nome e un contenuto
In un documento l’inserimento di una entità
avviene mediante un riferimento a entità che
ne specifica il nome
Un processore XML sostituirà
automaticamente il contenuto dell’entità al
posto del riferimento
<!DOCTYPE collection SYSTEM "C:\DocumentiCollection.dtd">
<collection x m l n s="www.univaq.it/ ~gdellape/esempio/">
<CD number="1">
<song album ="santana1" track ="11">
<title> African Bamba</ title>
<length >4 : 4 2</length >
</song>
<song album ="santana1" track ="9">
<artist >Santana &amp; Mana</artist>
<title> Corazon Espinado</title>
<comment> <!CDATA[First Hit from the Album]]>
</comment>
<length >4 : 3 6</length >
</song>
<album ID="santana1">
<artist >Santana</artist>
<title> Supernatural</title>
<year>1999</year>
</album>
</CD></ collection>
5
Elementi
n
n
Elementi: Regole
Gli elementi sono alla base della strutturazione dei
documenti XML.
Un elemento è un frammento di dati, limitato ed
indentificato (tramite un nome) da un tag.
Tag di apertura
Elemento
“artist”
Elemento
“title”
Tag di chiusura
<album>
<artist>
Santana
</artist>
<title >
Supernatural
</title >
</album >
n
Elemento
“album”
Elementi: Sintassi
n
n
n
Il tag di apertura di un elemento ha la forma seguente:
n
Elementi: Gerarchia
n
<nome attributi >
q
q
n
nome è il nome dell’elemento.
attributi è una lista opzionale di attributi per l’elemento.
n
<a>
<b>
Testo
</b>
<c>
<d/>
</c>
</a >
</nome>
n
nome è lo stesso identificatore usato nell’apertura.
Alcuni elementi possono essere privi di contenuto; in
questo caso è possibile omettere il tag di chiusura
scrivendo quello di apertura come segue (empty tag):
<nome attributi />
Attributi
n
n
n
n
Gli attributi permettono di specificare
proprietà degli elementi come coppie
nome-valore.
Sono usati per definire proprietà che non
possono o non si vogliono inserire nel
contenuto dell’elemento.
Vengono specificati all’interno dei tag di
apertura degli elementi.
Al contrario degli elementi, per gli attributi
l’ordine di presentazione non è significativo.
Gli elementi, nidificandosi, creano la struttura ad albero
tipica dei documenti XML.
All’interno di questa struttura si definiscono alcuni
“rapporti di parentela” utili per individuare gli elementi:
• a è il nodo radice
Il tag di chiusura corrispondente ha la forma seguente:
q
I nomi degli elementi sono case-sensitive.
Ogni elemento aperto deve essere chiuso
entro la fine del documento.
Gli elementi possono essere nidificati, e in tal
caso vanno chiusi esattamente nell’ordine
inverso a quello di apertura.
Un documento XML deve avere un unico
elemento “radice”, in cui tutti gli altri sono
nidificati
• b e c sono figli di a, il testo è figlio di b, d è figlio
di c
• c è il padre di d, b è il padre del testo, a è il padre
di b e c
• b e c sono fratelli
• b, c, d e il testo sono discendenti di a, d è un
discendente di c, il testo è un discendente di b
• a è un predecessore di b, c, d e del testo, b è un
predecessore del testo, c è un predecessore di d.
Namespaces
n
n
n
I namespaces servono a dichiarare
l’appartenenza degli elementi a particolari
linguaggi XML. Sono particolarmente utili se
più linguaggi vengono mescolati nello stesso
documento, con possibili di collisioni tra nomi.
Ogni elemento può contenere dichiarazioni
di namespaces, la cui validità è estesa a tutto il
contenuto dell’elemento stesso.
La dichiarazione del namespace viene inserita
nei tag di apertura, in modo simile a un attributo.
6
Entità
n
n
n
n
XML: documenti ben formati e validi
I documenti XML sono costituiti da una serie
di entità. Il documento stesso è una entità.
Tutte le entità, tranne il documento e il DTD
esterno, hanno un nome.
Le entità parsed sono quelle più comuni, e il
parser XML le sostituisce sempre col loro
testo di definizione.
Le entità unparsed possono contenere
qualsiasi tipo di dato, anche non testuale. Il
parser XML non le analizza, e sono
accessibili solo usando le notazioni.
XML: documenti ben formati e validi
n
n
Un documento XML può essere valido
Un documento è valido se
q
q
n
n
q
q
n
n
Il controllo di validità viene effettuato da un
apposito programma detto parser
n
Esistono parser validanti e non validanti. Questi
ultimi possono ignorare tutto l’eventuale DTD, tranne le
dichiarazioni di entità generali .
n
La parte del documento XML all’interno del nodo
radice viene definita document instance
Un DTD
se la sua struttura è implicita nel markup
e se rispetta i vincoli di buona formazione
indicati nelle specifiche
Un documento XML ben formato non
richiede la presenza di una DTD
Le Document Type Definition (DTD)
n
si riferisce a una DTD esplicita mediante una Doctype
declaration
ne soddisfa i vincoli sintattici (nome, sequenza
occorrenze ed attributi degli elementi)
Ogni documento XML deve essere ben
formato
Un documento è ben formato
n
Sono utilizzate per validare i documenti XML.
E’ possibile infatti definire una speciale grammatica
che dichiara:
q
q
q
n
tutti gli elementi utilizzabili;
quali elementi possono essere nidificati in altri, in che
ordine e con quante occorrenze;
quali attributi sono applicabili a ciascun elemento, se sono
obbligatori e quali sono i loro valori predefiniti.
Si possono inoltre definire entità e notazioni poi
utilizzabili all’interno del documento XML o del DTD
stesso.
Un DTD
<?xml version= "1.0" encoding= "UTF- 8"?>
<!ENTITY % HTMLlat1 PUBLIC
"- //W3C//ENTITIES Latin 1 for XHTML//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent">
<!ELEMENT song (artist ?, title , year?, comment?, length )>
<!ATTLIST song
genre (Rock|Pop|Classical|Jazz|Dance|Tecno) #IMPLIED
ID ID #IMPLIED
%HTMLlat1;
album IDREF #IMPLIED
track CDATA #IMPLIED
<!ELEMENT artist (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT year (#PCDATA)>
<!ELEMENT comment (#PCDATA)>
<!ELEMENT length (#PCDATA)>
>
<!ELEMENT CD (album | song)+>
<!ATTLIST CD
number CDATA #REQUIRED
owner CDATA #FIXED ”Giuseppe Della Penna"
<!ELEMENT album (artist, title, year?, copyright?)>
<!ATTLIST album
ID ID #REQUIRED
media CDATA #IMPLIED "CompactDisc “
>
>
<!ELEMENT collection (CD+)>
Continua...
Continua...
7
Come si crea un documento XML
n
n
n
Un documento XML contiene il mark-up
(sottoforma di coppie di tag) che
rappresenta linearmente la struttura
gerarchica degli elementi, i loro eventuali
attributi, e i caratteri del testo
L’inserimento di mark-up e caratteri deve
rispettare i vincoli di buona formazione
indicati nelle specifiche XML
Un documento valido deve rispettare anche
i vincoli sintattici definiti nella DTD
Vincoli di buona formazione
n
n
n
n
Esiste un solo elemento radice
Tutti gli elementi non vuoti devono presentare
sia il tag iniziale sia il tag finale
Tutti gli elementi devono essere
correttamente annidati
Tutti i valori di attributo devono essere
racchiusi tra apici doppi o singoli
XML declaration
n
Forme di XML declaration:
q
q
n
n
n
n
Un documento XML è una stringa di caratteri
UNICODE in codifica UTF -8 o UTF-16
I nomi di elementi, attributi e entità sono sensibili
alla differenza tra maiuscolo e minuscolo
Il mark-up è separato dal contenuto testuale
mediante caratteri speciali:
q
n
<>&
I caratteri speciali non possono comparire come
contenuto testuale e devono essere eventualmente
sostituiti mediante i riferimenti a entità
q
&lt; &gt; &amp;
La forma di un documento XML
n
Ogni documento XML inizia con un prologo
che contiene:
q
q
q
una XML declaration
eventualmente una Doctype declaration (la
dichiarazione della DTD a cui il documento si
riferisce)
eventualmente una serie di processing instruction
Doctype declaration
n
<?xml version="1.0"?>
<?xml version="1.0“ encoding=“UTF-8”?>
Se se le dichiarazioni della DTD sono inserite
all’interno della entità documento è
obbligatoria una dichiarazione di documento
autonomo:
q
Aspetti di sintassi generale
Se la definizione della DTD si trova in una entità esterna
q
<!DOCTYPE nome_DTD SYSTEM “sys-id” >
n
n
<!DOCTYPE Antologia SYSTEM
“c:\sgml\dtd\antologia.dtd” >
Se la DTD è dotata di un identificatore pubblico
q
<!DOCTYPE nome_DTD PUBLIC “pub-id” “sys-id”>
n
<!DOCTYPE TEI.2 PUBLIC “-//TEI P4//DTD Main
Document Type//EN” “tei2.dtd”>
n
n. b. il nome della DTD corrisponde al nome del suo elemento
radice
<?xml version="1.0" standalone="yes"?>
8
Doctype declaration
n
La codifica degli elementi
Se la definizione della DTD si trova nella stessa
entità del document instance essa va direttamente
della Doctype declaration in una sezione
denominata internal DTD subset
<!DOCTYPE nome_DTD
[
dichiarazione 1
dichiarazione 2
dichiarazione 3
...]
>
n
Internal DTD
subset
La codifica degli elementi
n
Del. Finale Start tag
Del. Iniziale End tag
<nome>contenuto dell’elemento</nome>
Del. Finale End tag
La codifica degli elementi
n
n
n
Nel documento ogni elemento non vuoto
(contenente cioè altri elementi o caratteri)
deve essere marcato da un tag iniziale e da
un tag finale
Ogni tag è costituito da caratteri delimitatori e
dal nome dell'elemento
La codifica degli elementi
Sintassi di un elemento
Del. Iniziale Start tag
n
La relazione lineare tra i tag rappresenta la
relazione gerarchica tra gli elementi
Per ogni elemento, se il suo tag iniziale è nel
contenuto di un elemento P allora il suo tag
finale deve essere nel contenuto del
medesimo elemento P
Detto altrimenti le coppie di tag devono
annidarsi correttamene e mai sovrapporsi
<text>
<div1>
<p>Subito, con le prime parole che le rivolse, volle
avvisarla che non intendeva compromettersi in una
relazione troppo seria…</p>
<p>La sua famiglia? Una sola sorella non ingombrante
né fisicamente né moralmente, piccola e pallida, di
qualche anno più giovane di lui…</p>
…
</div1>
</text>
La codifica degli elementi
SBAGLIATO!!!
<p>Subito, con le prime parole che le rivolse, volle
avvisarla che non intendeva compromettersi in
<emph>una relazione troppo seria… </p>
<p>La sua famiglia?</emph>Una sola sorella non
ingombrante né fisicamente né moralmente,
piccola e pallida, di qualche anno più giovane di
lui… </p>
9
La codifica degli elementi
CORRETTO!!!
La codifica degli elementi
n
Gli elementi vuoti
q
o sono rappresentati da entrambi i tag
q
o assumono la seguente forma
q
Esempio:
n
<p>Subito, con le prime parole che le rivolse,
volle avvisarla che non intendeva compromettersi
in <emph>una relazione troppo seria… </emph>
</p>
<p> <emph>La sua famiglia?</emph> Una sola
sorella non ingombrante né fisicamente né
moralmente, piccola e pallida, di qualche anno
più giovane di lui… </p>
La codifica degli attributi
n
Ogni elemento XML può avere uno o più
attributi
n
Un attributo ha un nome e un valore, che può
assumere diverse tipologie
n
n
…<nome_elemento> </nome_elemento>…
<nome_elemento/>
<img src=‘foo.gif’/>
La codifica degli attributi
n
Gli attributi devono essere associati agli
elementi all'interno del tag iniziale dopo
l’identificatore
q
<nome_elemento nome_attributo = "valore">
contenuto… </nome_elemento>
Altri eventuali attributi vanno collocati dopo il
primo separati da uno o più spazi
n Non possono esservi più istanze dello stesso
attributo per un elemento
n
La codifica degli attributi
<text resp=“Italo Svevo” n=“Senilità”>
<div n=“1”>
<p id=“C1P1”>Subito, con le prime parole che le
rivolse, volle avvisarla che non intendeva
compromettersi in una relazione troppo
seria…</p>
<p id=“C1P2”>La sua famiglia? Una sola sorella
non ingombrante né fisicamente né moralmente,
piccola e pallida, di qualche anno più giovane di
lui…</p>
<pb n=“5”/>
Il riferimento alle entità
n
L’inclusione di una entità all’interno di un
documento SGML si effettua mediante un
riferimento a entità (entity reference)
n
La sintassi di un riferimento, valida sia per
entità esterne sia interne, è la seguente:
&nome_entità;
Delimitatore di
apertura
Delimitatore di
chiusura
10
Il riferimento alle entità
n
In questo esempio i caratteri accentati sono
stati sostituiti da riferimenti a entità carattere
Validazione
n
<p>La sua famiglia? Una sola sorella non
ingombrante n&eacute; fisicamente n&eacute;
moralmente, piccola e pallida, di qualche anno
pi&ugrave; giovane di lui…</p>
Documento XML Valido
n
n
Un documento XML si dice valido se
conforme alle specifiche del DTD associato o
dello schema.
Un documento non valido non
cessa di essere un documento XML.
Quando un documento XML viene controllato
sintatticamente da un parser. Questo
processo viene chiamato validazione.
Schemi e DTD
n
Gli Schemi XML sono nati con lo stesso
scopo dei DTD:
q
Specificare la struttura dei documenti.
q
Specificare il tipo dei dati utilizzabili all’interno di
elementi e attributi.
n
n
Perché gli Schemi?
n
I DTD usano una sintassi non XML.
Perché costringere gli sviluppatori ad imparare le
regole di un nuovo linguaggio?
q Perché scrivere parser XML che debbano leggere
anche formati non XML per la validazione?
n
n
I DTD hanno pochi tipi di dato.
Il controllo sui domini dei dati è parte integrante
del controllo di un documento “ben formato”.
q Esistono tipi di dato molto noti che si vorrebbero
poter sfruttare (interi, reali, data/ora, ecc.).
Nei DTD, il tipo di dato per gli elementi poteva essere
solo testo e/o un particolare modello di contenuto.
Novità negli Schemi
q
n
Modelli di contenuto, elementi radice, …
q
n
n
Sono supportati più tipi di dato (44 contro
10) e la possibilità di definirne di nuovi o
derivarne altri da tipi già esistenti applicando
regole e restrizioni.
Sono presenti nuovi modelli di contenuto,
tra cui l’insieme (“tutti questi elementi, in
qualsiasi ordine”).
Si possono definire più campi chiave diversi.
Si possono dichiarare classi di equivalenza
tra elementi.
11
Vantaggi degli Schemi
n
n
n
Cosa Forniscono gli Schemi
Generalmente, le applicazioni che devono
basarsi su documenti o dati provenienti
dall’esterno “sprecano” una grossa quantità
di codice per controllarne la validità.
Più complessi sono i dati, più il codice sarà
laborioso da scrivere.
Se i dati sono strutturati secondo un preciso
Schema XML, l’applicazione potrà avvalersi
delle funzionalità di un qualsiasi validatore di
schemi in commercio!
Cosa Forniscono gli Schemi
n
n
q
n
n
Cioè un protocollo molto specifico per lo scambio
di informazioni.
Un insieme di Metadati.
q
Lo schema contiene molte informazioni valide per
l’interpretazione dei dati strutturati sulla sua base.
Un DTD di esempio…
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
Creazione automatica di interfacce per la
compilazione dei documenti XML associati.
q Creazione di interfacce grafiche per la
rappresentazione dei dati.
q Uso degli schemi per definire strutture dati e
protocolli per la loro manipolazione e
trasmissione.
…e lo Schema Corrispondente…
artist (#PCDATA)>
title (#PCDATA)>
year (#PCDATA)>
comment (#PCDATA)>
length (#PCDATA)>
<xs:element name="song">
<xs:complexType>
<xs:sequence>
<xs:element ref="artist" minOccurs ="0"/>
<!ELEMENT song
<xs:element ref="title"/>
(artist?, title, year?, comment ?, length)
<xs:element ref="year" minOccurs ="0"/>
<xs:element ref="comment" minOccurs ="0"/> >
<xs:element ref="length "/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CD">
<!ELEMENT CD song+>
<xs:complexType>
<xs:sequence>
<xs:element ref="song" maxOccurs ="unbounded "/> Questo Schema definisce lo
stesso linguaggio del DTD visto in
</xs:sequence>
precedenza. I frammenti del DTD
</xs:complexType>
sono affiancati alla parte di
</xs:element>
schema che li sostituisce.
artist (#PCDATA)>
title (#PCDATA)>
year (#PCDATA)>
comment (#PCDATA)>
length (#PCDATA)>
<!ELEMENT song (artist?, title, year?, comment ?, length)>
<!ELEMENT CD song+>
q
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
Descrivono cioè l’organizzazione e i tipi
dell’informazione.
Un contratto.
q
Oltre che per validare i documenti istanza, si
possono immaginare molti altri impieghi per
gli schemi:
<xs:element name="artist" type="xs:string"/>
<xs:element name="comment" type="xs:string"/>
<xs:element name="length" type="xs:string "/>
<xs:element name="title" type="xs:string"/>
<xs:element name="year" type="xs:string"/>
Un modello per i dati.
n
n
n
Gli elementi blu fanno parte della sintassi DTD.
Gli elementi neri fanno parte della nuova sintassi
che stiamo definendo.
Poiché i DTD sono stati creati prima dei
namespaces, non esiste questo concetto nei DTD e
gli elementi delle due sintassi sono mescolati.
Validare un documento XML:
n
n
n
La validazione è un processo, il controllo sintattico è
un altro (ben formato e NON ben formato)
Un documento XML può essere non valido, ma
rimanere ugualmente well-formatted.
N.B.:tutti i documenti XML (in quanto documenti
XML) sono per forza ben formati ma niente ci dice
se sono conformi al proprio DTD (se lo possiedono).
12
Well-formatted
Riprendendo l’esempio:
FILE DTD
Un file XML è anche normalmente
well-formatted, cioè ben formattato e quindi
rispetta le regole di XML
Ø
Ø
Ø
Ø
Tutti i tag di apertura e di chiusura corrispondono.
I tag vuoti utilizzano una sintassi XML speciale.
Tutti i valori degli attributi sono racchiusi tra virgolette.
Tutte le entità sono dichiarate.
XML non è sempre corretto …
n
n
Ø
Ø
Le specifiche del W3C indicano che i parser
di XML possono fermarsi al primo errore di
analisi del documento(non tollerano errori);
Motivi:
Rendere i parser più facili da scrivere;
I documenti XML sono compatibili e
indipendenti dal tipo di parser.
FILE XML
libro.dtd:
<?xml encoding="UTF-8"?>
<!ELEMENT libro (prefazione?,indice,capitolo+)>
<!ATTLIST libro titolo CDATA #REQUIRED>
<!ATTLIST libro autore CDATA #REQUIRED>
<!ATTLIST libro editore CDATA #REQUIRED>
<!ELEMENT prefazione (#PCDATA)>
<!ATTLIST prefazione autore CDATA #IMPLIED>
<!ELEMENT indice (titolo+ )>
<!ELEMENT capitolo (#PCDATA)>
<!ELEMENT titolo (#PCDATA)>
libro.xml:
<?xml version="1.0" encoding= "UTF- 8"?>
<!DOCTYPE libro SYSTEM "libro.dtd">
<libro titolo="1984" autore="G.Orwell"
editore= "Mondadori">
<prefazione autore="Bill Gates">Questo libro non
dice il vero. Orwell ha sbagliato...</prefazione>
<indice>
<titolo>Parte prima</titolo>
<titolo>Parte seconda</titolo>
</indice>
<capitolo>1. Era una notte buia e
tempestosa...</capitolo>
<capitolo>2. Testo del secondo capitolo...</capitolo>
<capitolo>3. Testo del terzo capitolo...</capitolo>
</libro>
Gli errori dei parser:
n
Fatal Error: grave violazione di una regola
della specifica; il processore notifica
all’applicazione l’errore rilevato e può o meno
continuare l’analisi del documento per
cercare altri errori; Non deve però continuare
a fornire il contenuto del documento
dell’applicazione.
Esempio di FATAL ERROR:
n
n
Impossibile visualizzare la pagina XML
Impossibile visualizzare l'input XML tramite il foglio di stile XSL.
Correggere l'errore, quindi fare clic su Aggiorna, oppure riprovare in un
momento successivo.
Il tag finale "item2" non corrisponde al tag iniziale "item1". Errore durante
l'elaborazione della risorsa
<indice>
<capitolo>1. Era una notte buia e tempestosa... </indice> </capitolo>
Error: violazione di una regola della
specifica;
Il processore notifica all’applicazione l’errore
rilevato e continua sia ad analizzare il
documento, sia a fornire il contenuto
all’applicazione, che deciderà il
comportamento rispetto all’errore( ignorarlo,
cercare di correggerlo, etc..)
13
Esempio di ERROR:
I parser
<capitolo>1. Era una notte buia e tempestosa...</capitolo>
<bibliografia> libro1 </bibliografia>
L’errore è dato da <bibliografia> perché non è definito come elemento di “libro” nel
DTD;
Ma se ci saranno altre righe di comando con altri errori, verranno riportati di seguito,
senza fermarsi.
Che cosa vuol dire “parsing” e cosa sono i
parser ?
Per poter usare un file XML occorre farne il
"parsing", ovvero prendere un documento Xml e
scandirlo, estraendone tutte le parti che lo
compongono.
Un parser XML è un modulo software che si
colloca tra l'applicazione e il documento XML.
Esso permette all'applicazione di accedere al
contenuto e alla struttura del documento XML.
Esistono due tipi di parser: validanti e non validanti.
n
n
n
Fare il parsing a mano
n
Vantaggi
q
q
n
Controllo completo
Buono per semplici cose non ha bisogno di pacchetti
software ausiliari
Svantaggi
q
q
q
Deve essere scritto tutto sempre
Noioso e facile all’errore
Diventa difficile quando si usa uno schema o una DTD per
validare
Parsing XML
n
Goal: tradurre un file XML nelle strutture dati
utilizzabili nei linguaggi di programmazione
n
Strategie possibili
q
q
q
Fare il parsing a mano con alcune librerie riutilizzabili
Fare il parsing mettendo I dati in una struttura generica ad
albero
Fare il parsing come una sequenza di eventi
Rimangono…
n
I parser XML si dividono in due categorie per quel
che riguarda i modelli di elaborazione
q
q
q
Parser DOM (Documento Object Model): è un modello
gerarchico, che fornisce accesso all'intero documento
DOPO il completamento del parsing. DOM è una serie di
raccomandazioni W3C implementate in varia maniera su
tutte le architetture
Parser SAX (Simple API for XML): è un modello ad eventi,
attraverso il quale è possibile associare funzioni callback ai
vari elementi significativi del documento XML. SAX 2.0 non
è uno standard, ma una proposta originariamente per
JAVA poi adottata su molte architetture
(http://www.saxproject.org/)
.
14
Fare il parsing in una generica struttura ad
albero (parser DOM)
n
Vantaggi
q Esiste un linguaggio standard neutro: DOM (Document Object
Model)
q Imparare a fare il DOM per un linguaggio rende facile impararlo
per un altro
q Si deve scrivere meno codice per avere XML in qualcosa che si
vuole utilizzare nei programmi
Fare il parsing come una sequenza di eventi
(parser SAX)
nVantaggi
q
q
q
SAX richiede pochissima memoria d'uso: il documento non è mai tutto
in memoria contemporaneamente. E' ideale per documenti MOLTO
grandi.
SAX è velocissimo: non ha praticamente overhead di parsing.
SAX è ideale per cercare velocemente un'informazione specifica
all'interno di un documento XML, poiché lo si può fermare appena l'ha
trovata.
nSvantaggi
n
q
Svantaggi
q Non-intuitive API
q Non e’ a costo di lavoro /tempo nullo
q
q
Elaborazione DOM
Il Document Object Model è un interfaccia di
programmazione (API) per documenti sia HTML sia
XML.
nDefinisce la struttura logica dei documenti ed il
modo in cui si accede e si manipola un documento.
nUtilizzando DOM i programmatori possono costruire
documenti, navigare attraverso la loro struttura, e
aggiungere, modificare o cancellare elementi.
nOgni componente di un documento HTML o XML
può essere letto, modificato, cancellato o aggiunto
utilizzando il Document Object Model.
n
Strumenti del DOM
n
n
n
Usando le API del DOM un programmatore
può creare documenti XML, navigarne la
struttura, aggiungere, eliminare o modificare
tutte le componenti (elementi, commenti,
testo…)
Ovviamente il DOM fornisce un’interfaccia
“generica” implementabile in vari linguaggi di
programmazione.
Tuttavia, la specifica è esposta usando l’IDL
definito nella Corba 2.2 specification.
SAX non può essere usato per cercare e ricercare informazioni su un
documento XML (navigare sulla struttura del documento)
SAX non può essere usato per modificare o aggiornare la struttura del
documento XML (aggiungere o togliere nodi).
SAX non è implementato dai browser, ma solo come libreria di
linguaggi server-side (o in Java anche come applet)
Definizione di DOM
Document Object Model (DOM)
n
n
n
Il DOM è un’Application Programming
Interface (API) per documenti XML (e HTML).
Il DOM definisce una modalità di
rappresentazione dei documenti XML sotto
forma di strutture dati accessibili da un
linguaggio di programmazione, e le
operazioni per la loro manipolazione.
Standard W3C
La vista del DOM su XML
<song>
<artist>
<title>
<name>
Corazon
Espinado
track=9
<comment > <length>
<minutes > <seconds >
Santana
<song track="9">
<artist>
<name>Santana</ name>
</artist>
<title>Corazon Espinado</title>
<comment >First Hit from the Album </comment >
<length>
<minutes >4</minutes >
<seconds >36</seconds >
</length>
</song>
4
36
First Hit
from the
Album
15
La vista del DOM su XML
n
n
n
n
Il DOM vede i documenti come una struttura
ad albero.
In realtà, la struttura è una “foresta” perché può
anche contenere più alberi distinti.
Il DOM definisce solo la sua vista logica sui dati:
non specifica come debbano essere
effettivamente strutturati in memoria.
Tuttavia, l’utente che accede al documento
tramite l’interfaccia DOM, lo vedrà effettivamente
come un albero.
Oggetti del DOM
L’oggetto principale di DOM è DOMNode, che però è
una interfaccia (cioè viene solo usata per crearne
classi)
nIl core del DOM definisce alcune classi fondamentali
per i documenti HTML e XML, e ne specifica proprietà
e metodi.
nGlli oggetti principali definiti nel DOM sono:
n
q
q
q
q
q
DOMDocument : il documento di cui si sta parlando
DOMElement: ogni singolo elemento del documento
DOMAttr: ogni singolo attributo del documento
DOMText: ogni singolo nodo di testo del documento
DOMComment, DOMProcessingInstruction,
DOMCDATASection, DOMDocumentType, ecc.
I Modelli a Oggetti
n
Il DOM, come modello ad oggetti, definisce:
q
q
q
q
Gli oggetti usati per rappresentare e manipolare
un documento XML.
Le interfacce usate per interagire con gli oggetti
definiti.
La semantica richiesta dagli oggetti e dalle
interfacce definite.
Le relazioni e interazioni tra le interfacce e gli
oggetti definiti.
Gli oggetti Node: la base del DOM
n
Il DOM presenta i documenti come una
struttura gerarchica di oggetti di tipo Node.
n
Ciascun oggetto nel documento in realtà
implementa una interfaccia più specifica per il
suo tipo, che è sempre derivata da Node.
I Node possono avere zero o più nodi figli.
L’interfaccia di Node include le operazioni di
base eseguibili su ogni tipo di oggetto
(indipendentemente dal suo tipo specifico) in
un documento XML.
n
n
Tipi di Nodi
n Ci
sono molti tipi di nodi e
sottoclassi di nodi
Attr, CDATASection, Comment, Document,
DocumentFragment, DocumentType, Element,
Entity, EntityReference, Notation,
ProcessingInstruction, Text
Ognuna di queste ha associato uno tipo , valore o
nome.
Nella slide seguente vediamo gli standard
Node
nodeName ()
nodeValue Attributes nodeType
()
()
null
2
Attr
Attr name
Value of attribute
CDATASection
#c d a t a-section
CDATA cotnent
null
4
Comment
#comment
Comment content
null
8
Document
#document
Null
null
9
DocumentFragment
#document fragment
null
null
11
DocumentType
Doc type
name
null
null
10
Element
Tag name
null
NamedNodeMap
1
Entity
Entity name
null
null
6
EntityReference
Name entitry
referenced
null
null
5
Notation
Notation name
null
null
1
ProcessingInstruction
target
Entire string
null
7
Text
#text
Actual text
null
3
16
Fare il parsing come una sequenza di
eventi: SAX
n
Peter Murray-Rust. (XML browser JUMBO)
Tim Bray (Lark XML parser)
David Megginson (Microstar's Ælfred XML parser)
n
XML-DEV mailing list
SAX 1.0 rilasciato nel 1998 (attuale SAX 2.0)
Lo sviluppo continua ospitato da SourceForge
Licenza GPL
n
q
q
n
n
n
Eventi SAX
n
n
n
Nasce nel Dicembre 1997
q
n
Introduzione a SAX Simple API for XML
SAX basa il suo sistema di parsing sugli
eventi.
Mentre il parser SAX legge (e valida) il
documento XML, il codice viene avvisato di
una serie di eventi fondamentali, quali
q
q
q
q
q
L’inizio e la fine del documento;
L’apertura e la chiusura di un elemento;
L’apertura e la chiusura di una sezione CDATA;
L’inizio e la fine dello scope di ogni namespace;
La lettura di caratteri, Processing Instructions,
spazi non significativi.
Utilità e Limiti di SAX
Il parser Sax non costruisce documenti XML,
né conserva alcuna struttura in memoria alla
fine del parsing.
n
q
Anche se si ritenesse il DOM come la scelta
migliore per la propria applicazione Java,
capire SAX è importante per vari motivi:
q
q
q
Il sistema di gestione degli errori del DOM è
“ereditato” da SAX.
Essendo SAX la prima API XML per Java, resta
alla base anche dell’implementazione DOM.
Le librerie Java usano SAX per leggere un file
XML e creare il DOM corrispondente!
Se il programmatore vuole operare sul documento
letto, dovrà scrivere manualmente tutto il codice,
basandosi sui dati passati con gli eventi SAX.
In generale SAX necessita di molto più codice
di DOM, ma è molto più leggero.
n
q
SAX e DOM
n
SAX, o Simple API for XML, in origine è
stata sviluppata come API alternativa per
accedere ad XML in Java.
A partire dalla versione 2, esistono versioni di
SAX utilizzabili anche in altri ambienti di
programmazione (ad esempio nella libreria
msxml di Microsoft).
La homepage del progetto SAX
(SourceForge) è http://www.saxproject.org/
Il programmatore può implementare solo quello che
è strettamente utile, e non è necessario allocare il
documento in memoria.
Events vs. Trees
Concetti base
n
Events (SAX)
Vengono notificati dal
parser al client i singoli
eventi che
contraddistinguono il
documento XML
n
Tree (DOM)
Carica in memoria la
struttura ad albero del
documento XML. Tale
struttura è accessibile
da parte del client.
17
Tree-based API
n
n
n
Favorevoli
Navigazione del
documento XML
Visione d’insieme del
documento
Facilità di gestione
della struttura dei
documenti: aggiunta ,
eliminazione,
spostamento dei nodi
n
n
n
Sfavorevoli
Notevole occupazione di
memoria
Prestazioni dipendenti dalla
dimensione del documento
Prima di iniziare ad
utilizzare le informazione
del documento il parser
deve completare il
caricamento in memoria
Event-based API
n
n
n
Favorevoli
Poche risorse utilizzate
Uniformità di
prestazioni
Veloce ricerca di un
elemento in un ampio
documento
Rappresentazione grafica delle due
tipologie
n
DOM e SAX: differenze
approccio
DOM &diSAX
DOM
CONTRO
PRO
Approccio del Modello
Esempio eventi
Documento XML
<?xml version="1.0"?>
<doc>
<para>Hello,
world!</para>
</doc>
Eventi Notificati
start document
start element: doc
start element: para
characters: Hello, world!
end element: para
end element: doc
end document
Sfavorevoli
Più difficile gestione
della struttura del
documento; l’eventuale
creazione di un albero
è a carico del client.
SAX
Approccio ad Eventi
• Struttura ad albero
• Scansione dell’intero file
• API per navigare l’albero
• Ogni elemento informa
l’applicazione con un Callback
• fornisce all’applicazione un
modello ricco del documento
• Molto “leggero”
• mantiene una rappresentazione
completa e durevole in memoria
• Richiede un’occupazione di
memoria per tutto il
documento
• Implementazione delle sole
funzionalità necessarie
• Interfaccia troppo semplice
quindi più codice
• Nessun supporto per
operare
sul documento
Gestione dei NameSpace
n
n
Il nome di elementi e attributi e composto da due
parti : URI e LocalName
Puo’ essere gestito un Namespace, un Namespaceprefixes oppure entrambi
18
Vediamo un esempio (Caso Default per
SAX2)
Riferimenti
n
<?xml version="1.0"?>
<h:hello xmlns:h="http://www.greeting.com/ns/" id="a1" h: person= "David"/>
n
Se namespaces è vero e namespace-prefixes è falso (the default), allora a
SAX2 XML reader interpreterà come segue
n
un elemento con Namespace URI "http://www.greeting.com/ns/" e il
localName "hello ";
n
un attributo senza Namespace URI (empty string) and the qName (and
usually localName) "id"; and
n
Un attributo con il Namespace URI "http://www.greeting.com/ns/" and e
il localName "person ".
n
n
n
Specifica di XML dal W3C
http://www.w3c.org/TR/XML/
Apache XML Project (xalan, xerces)
http://xml.apache.org
Java JAXP Tutorial
http://java.sun.com/xml/jaxp/dist/1.1/docs/tutorial/
index.html
SAX
http://www.saxproject.org/
Specifica DOM level 1 dal W3C
http://www.w3.org/TR/REC- DOM-Level-1/
Esempi di parser implementati in Java
n
n
n
n
XML4J: La tecnologia alla base del parser XML di IBM è stata donata
all'Apache Group per lo sviluppo del parser Xerces . L'ultima versione di
XML4J attualmente disponibile, la 3.0.1, è derivata dalla release 1.0.3
di Xerces . (www.alphaworks.ibm.com/tech/xml4j)
Xerces: è un parser sviluppato dal team di Apache all'interno
dell'Apache XML Project. E' basato sui sorgenti di XML4J, implementa
DOM (livello 1 e 2) e SAX (versione 2) e ha un supporto preliminare per
gli schema XML. E' disponibile inoltre una versione in C++ con i
wrapper Perl e COM.
XP: XP è un parser non validante sviluppato da James
Clark (http://www.jclark.com)conforme alle specifiche 1.0 di XML.
Oltre a una normale API ad alto livello fornisce anche una API a basso
livello per sviluppare nuovi parser. XP è sviluppato principalmente
per ottenere alte prestazioni.
Java Standard Extension for XML: Poiché XML e Java di Sun
Microsystem sono un binomio molto collaudato, Sun ha prodotto un
proprio package Java per XML (java.sun.com /products/xml/)
IL PARSER XERCES
n
n
n
Si tratta di un prodotto free sofware (GPL) scritto in
Java
E’ prodotto dal team di Apache all'interno
dell'Apache XML Project .
E’ un parser validande tra i più robusti ed affidabili.
Come funziona XERCES
n
Modalità DOM (Document Object Model)
n
Modalità SAX (Simple API for XML)
19
Installazione
n
Scaricate il file xerces -j-bin.X.Y.Z.zip (dove X_Y_Z rappresenta l'ultima
versione disponibile) a partire dalla pagina di download
http://xml.apache.org/dist/xerces -j/ e decomprimetelo. La struttura delle
directory creata contiene tutte le classi necessarie e la documentazione.
n
Impostate la variabile CLASSPATH del vostro sistema in modo da
includere i files xercesImpl.jar, xercesSamples.jar,xmlais.jar,xmlparserapis.jar,resolver.jar posti nella directory di xerces .
20