Informatica Umanistica
A.A. 2009/2010
eXtensible Markup Language
(XML)
XML - Acronimo
XML (eXtensible Markup Language):
è l'abbreviazione di Linguaggio Estensibile di Markup
ed è l'acronimo dell'espressione inglese Extensible
Markup Language.
Guida:
http://www.html.it/xml/guida/index.html
Cosa è XML?

è un "markup language" molto simile all'HTML

è pensato per descrivere dati.



non esistono tag predefiniti . Lo sviluppatore definisce i suoi tag
personali
utilizza un documento di definizione dei tipi (Document Type
Definition - DTD) per descrivere i dati.
attraverso l'uso di un DTD diviene auto-descrittivo
Principali differenze fra HTML e XML

XML è pensato per trasportare dati.

XML non è un sostituto del HTML.

XML e HTML sono stati pensati per scopi diversi.



XML è pensato per descrivere dati e porre l'attenzione su cosa
sono.
HTML è pensato per visualizzare dati e porre l'attenzione su come
presentarli.
HTML si occupa di visualizzare dati, mentre XML di descrivere le
informazioni
HTML vs XML


In HTML informazione e sua visualizzazione
NON sono separate
In XML informazione e sua visualizzazione
sono separate
Un documento XML è composto da tre
parti

XML



DTD



i dati (struttura fisica - document istance)
Quale informazione e' contenuta nel file?
lo schema dei dati (struttura logica)
Quali tag posso usare? Dove? Come?
XSL


la presentazione dei dati (stylesheet)
Come visualizzo questi dati?
XML – DTD – XSL
Nel file XML c’è il contenuto “vero e
proprio” semanticamente strutturato
La DTD (o lo Schema)
definiscono la sintassi dell’XML
Il file XSL definisce la
visualizzazione
XML – HTML
XML, come HTML è un
dialetto di SGML
orientato al web, ma
non è un’alternativa a
HTML.
Il file XML viene
trasformato da un
programma in un altro
linguaggio, tipicamente
HTML ma non solo
(testo, PDF, VoiceML,
..., qualsiasi formato)
Piccolo esempio
<lettera>
Cara Beatrice, ti scrivo per comunicarti …
<saluti> cari saluti,
<firma> Dante </firma>
</saluti>
</lettera>
Questo e' il file XML (dati). I tag sono liberi e non definiti
dal W3C.
“lettera” e' l'elemento radice (root).
Come viene visualizzato? Lo vediamo dopo
La dichiarazione XML

La dichiarazione XML è obbligatoria e deve essere posta
all’immediato inizio del documento (ovvero come primo carattere!
Niente spazi!!!):
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>

Gli attributi sono:
 version: (obbligatorio) la versione di XML usata.
 encoding: (opzionale) nome della codifica dei caratteri usata nel
documento. (default: UTF-8 o 16)
 UTF-8 (8-bit UCS/Unicode Transformation Format) e' un character
encoding for Unicode.
 standalone: (opzionale) (default: no)
 standalone=yes - il file non fa riferimento ad altri file esterni, ovvero
il solo file XML contiene dati e DTD
 Noi useremo sempre standalone=”yes”
 standalone=no – e' necessario un file esterno (che contiere il DTD)
Piccolo esempio (2)
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<lettera>
Caro Beatrice, ti scrivo per comunicarti…
<saluti> cari saluti,
<firma> Dante </firma>
</saluti>
</lettera>

Quale e' differenza con HTML?

Quale e' l'elemento radice?


Come facciamo a sapere che “saluti” e' un tag valido? O che ci
deve essere una sola “firma”?
E' well formed? E' valido?
Elementi



Gli elementi sono le parti di documento dotate di un senso
proprio.
Un elemento è individuato da un tag iniziale, un contenuto ed
un tag finale.
Non confondere i tag con gli elementi!
<TITOLO> Primo file XML </TITOLO>
elemento TITOLO, racchiuso dai tag TITOLO e /TITOLO
<saluti> cari saluti <firma> Marianna </firma></saluti>
elemento saluti (contiene un elemento firma)
Elementi - esempio


Gli elementi sono
alla base della
strutturazione dei
documenti XML.
Un elemento è un
frammento di
dati, limitato ed
identificato
(tramite un nome)
da un tag.
Tag di
apertura
<album>
<artist>
Elemento
“artist”
Santana
</artist>
<title>
Elemento
“title”
Supernatural
</title>
Tag di
chiusura
</album>
Elemento
“album”
Commenti
I documenti di markup possono contenere commenti,
ovvero note da un autore all’altro, da un editore
all’altro, ecc.
 Queste note non fanno parte del contenuto del
documento, e le applicazioni di markup li ignorano.
 Sono molto comodi per passare informazioni tra un
autore e l’altro, o per trattenere informazioni per se
stessi, nel caso le dimenticassimo.
<!-- Questo è ignorato dal parser -->

Elementi - Regole



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.
<a>
<b>
</a>
</b>

e' ERRATO poiche' non sono chiusi dell'ordine corretto
Un documento XML deve avere un unico elemento
“radice”, in cui tutti gli altri sono nidificati
Elementi - Sintassi

Il tag di apertura di un elemento ha la forma seguente:
<nome attributi>



Il tag di chiusura corrispondente ha la forma seguente:
</nome>


nome è il nome dell’elemento.
attributi è una lista di attributi per l’elemento (che può non apparire).
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 nel
modo seguente (empty tag):
<nome attributi />
Elementi - Gerarchia

<a>
<b>

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:
Testo
</b>
<c>
<d/>
</c>
</a>
• a è il nodo radice
• 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.
Attributi
Gli elementi possono contenere uno o più attributi, che sono
termini aggiuntivi che definiscono con più precisione l’elemento,
es. <section id=”uno”>
 Il valore degli attributi è racchiuso tra virgolette (singole: ‘uno’,
o doppie: “uno”). N.B. Le virgolette devono essere entrambe
singole o entrambe doppie.
 Un attributo non può essere usato due volte all’interno dello
stesso elemento.
 Un elemento può contenere più di un attributo.
<romanzo file=“Nicola.doc”> …</romanzo>
<capitolo N=“1”>Capitolo primo</capitolo>

Attributi - Regole






I nomi degli attributi sono case-sensitive.
Lo stesso tag non può contenere due attributi con lo stesso
nome.
Non sono ammessi attributi senza valore (solo nome).
Il valore degli attributi deve essere specificato tra virgolette
semplici o doppie.
Il valore può contenere riferimenti ad entità.
Il valore non può contenere markup, sezioni CDATA o virgolette
uguali a quelle iniziali.
Attributi - Sintassi

Sintassi di base da usare all’interno dei tag di apertura:
<nome attributo=“valore”>

Una lista di attributi si ottiene elencando più attributi separati da uno
o più spazi:
<nome att1=“vl1” att2=“vl2”>

Per includere virgolette nel valore, è necessario usare un tipo diverso
da quello usato per delimitare il valore stesso:
<nome att1=‘ “virgolette” ’>

Si possono includere riferimenti a entità nel valore:
<nome att1=“&quot; salve &quot;”>
Entità


Le entità sono frammenti di documento memorizzati
separatamente e richiamabili all’interno del
documento.
Esse permettono di riutilizzare lo stesso frammento in
molte posizioni garantendo sempre l’esatta
corrispondenza dei dati, e permettendo una loro
modifica semplificata.
Oggi &egrave; una bella giornata.
Come dice &NP;: “divertitevi!”
#PCDATA



Rappresenta il contenuto vero e proprio del
documento.
Esso corrisponde alle parole, gli spazi e la
punteggiatura che costituiscono il testo.
Viene anche detto #PCDATA (Parsed Character
DATA) perché i linguaggi di markup definiscono
character data (CDATA) il contenuto testuale vero e
proprio, e quello degli elementi è soggetto ad azione
di parsing (perlopiù per identificare e sostituire le
entità).
Regole nella creazione di un file XML

Un documento XML è well formed (ben formato)







tutti i tag sono chiusi nell'ordine corretto
esiste un solo elemento radice
i valori degli attributi sono scritti fra virgolette
gli elementi non hanno due attributi con lo stesso nome
i nomi degli elementi e degli attributi non contengono
caratteri speciali (&,<,> ...)
i nomi degli elementi non contengono spazi
Un documento XML è valido se è ben formato e
rispetta le regole del DTD associato.
 Cosa e' un DTD? Lo vediamo adesso...
Struttura di un XML

Radice (Documento)
 Elemento

Nodi intermedi (figli): elementi
 con

principale
sottoalberi di elementi, attributi e valori
Nodi foglia: attributi e valori
 attributi:
coppie (nome, valore)
 valori: stringhe, numeri, date, ecc.

Albero XML (radice, foglie, ...)
 ribaltato
Una rubrica in XML
<RUBRICA>
<PERSONA>
<DATI_ANAGRAFICI>
<NOME>Giulio</NOME>
<COGNOME>Cesare</COGNOME>
<INDIRIZZO>
<PIAZZA>Bruto</PIAZZA>
<N_CIVICO>10</N_CIVICO>
<CITTA>Roma</CITTA>
<CAP>10100</CAP>
</INDIRIZZO>
</DATI_ANAGRAFICI>
<TELEFONO>
<FISSO>
<NUMERO prefisso="06">321654</NUMERO>
</FISSO>
<MOBILE>
<NUMERO compagnia="blu">32557684785</NUMERO>
</MOBILE>
</TELEFONO>
</PERSONA>
<PERSONA>
<DATI_ANAGRAFICI>
<NOME>Giovanni</NOME>
<COGNOME>Pompeo</COGNOME>
<INDIRIZZO>
<PIAZZA>Catilina</PIAZZA>
<N_CIVICO>12</N_CIVICO>
<CITTA>Milano</CITTA>
<CAP>12100</CAP>
</INDIRIZZO>
</DATI_ANAGRAFICI>
<TELEFONO>
<FISSO>
<NUMERO prefisso="02">96877564</NUMERO>
</FISSO>
<MOBILE>
<NUMERO compagnia="tim">3356545342</NUMERO>
</MOBILE>
</TELEFONO>
</PERSONA>
</RUBRICA>
La rubrica, vista come albero
La struttura ad albero di XML
1. Hanno necessariamente
un elemento radice (root)
che dev’essere unico
Importanza DTD


Quali tag posso usare? Quante volte? Un tag puo'
contenere un altro tag? Quale?
Queste cose si specificano nel DTD (Document Type
Definition).
Importanza DTD




La DTD (Document Type Definition) è una procedura che consente di
dichiarare in maniera univoca e formale la struttura di markup
mediante la definizione dello schema dei tags.
 Ovvero Quali tag posso usare? Quante volte? Un tag puo' contenere
un altro tag? Quale?
Questo tipo di procedura consente una rapida interpretazione del
materiale pubblicato sia dalla macchina che dall’utente umano.
Un file XML e' valido se rispetta la DTD
CHI scrive il DTD? Tu! (ovvero chi definisce cosa e' valido e cosa no per
un certo tipo di documento XML!)
L'HTML e' XML?

Dipende, l'xHTML si'.

Chi definisce il DTD per l'xHTML?
Chi definisce il DTD dell'xHTML?

Per il linguaggio HTML, il W3C definisce il DTD, ad esempio
dice che

L'element root e' <html> (in realta' <html> e' il tag)

Che deve contenere uno e un solo <head>

Che deve contenere uno e un solo <body>

Che dentro a <body> ci possono essere un numero
qualunque di <p> (da 0 a n)

....
La rubrica, vista come albero
La dichiarazione DOCTYPE


La dichiarazione DOCTYPE è obbligatoria (se il documento deve essere
validato)
Vari modi, noi useremo il seguente
<!DOCTYPE RootElement [InternalDTDSubset ]>


RootElement (obbligatorio) è il nome dell’elemento radice del documento.
InternalDTDSubset (opzionale) è un DTD specificato inline al documento.
<!DOCTYPE RUBRICA [
....
qui i vari elementi che possono essere contenuti nel RootElement
....
]
Esempio di un DTD
<!DOCTYPE RUBRICA [
....
qui i vari elementi che possono essere contenuti nel RootElement
....
]>
Esempio di un DTD
<!DOCTYPE RUBRICA [
....
qui i vari elementi che possono essere contenuti nel RootElement
....
]>
Come li specifico? Lo vediamo la prossima volta.
Esempio di un DTD per la
rubrica
LO VEDIAMO LA PROSSIMA VOLTA
<!DOCTYPE RUBRICA [
<!ELEMENT RUBRICA (PERSONA)*>
<!ELEMENT PERSONA (DATI_ANAGRAFICI, TELEFONO)>
<!ELEMENT DATI_ANAGRAFICI (NOME*, COGNOME*, INDIRIZZO?)>
<!ELEMENT TELEFONO (FISSO?, MOBILE?)>
<!ELEMENT NOME (#PCDATA)>
<!ELEMENT COGNOME (#PCDATA)>
<!ELEMENT FISSO (NUMERO+)>
<!ELEMENT MOBILE (NUMERO+)>
<!ELEMENT NUMERO (#PCDATA)>
<!ELEMENT INDIRIZZO ((PIAZZA | VIA)?, N_CIVICO?, CITTA?, CAP?)>
<!ELEMENT PIAZZA (#PCDATA)>
<!ELEMENT VIA (#PCDATA)>
<!ELEMENT N_CIVICO (#PCDATA)>
<!ELEMENT CITTA (#PCDATA)>
<!ELEMENT CAP (#PCDATA)>
<!ATTLIST NUMERO
prefisso CDATA #IMPLIED
compagnia (wind | omnitel | tim | blu ) #IMPLIED>
]>
Validazione di un file XML





Un documento XML è ben formato se rispetta le regole generali di
sintassi viste nella parte precedente.
Un documento XML è valido se è ben formato e rispetta le regole
sintattiche e semantiche contenute del DTD associato.
Un documento senza DTD non è mai valido.
Esistono parser validanti e non validanti.
Per validare l'HTML
 http://validator.w3.org
Per validare l'XML
 Lo apriamo col browser che ci dice se e' valido
Ma qualcuno lo usa questo XML?

RSS!

http://www.repubblica.it/servizi/rss/index.html



Repubblica.it offre i suoi contenuti con il sistema RSS (Really
Simple Syndication)
E i blog? Anche.
Ci sono altri usi reali dell'XML? Si', ad esempio per
scambiarsi dati tra applicazioni
Esempio di file XML (completo di DTD)
<?xml version="1.0" standalone=“yes"?>
<?xml-stylesheet type="text/xsl" href="./rubrica.xsl"?>
<!DOCTYPE RUBRICA [
<!ELEMENT RUBRICA (PERSONA)*>
<!ELEMENT PERSONA (DATI_ANAGRAFICI, TELEFONO)>
<!ELEMENT DATI_ANAGRAFICI (NOME*, COGNOME*, INDIRIZZO?)>
<!ELEMENT TELEFONO (FISSO?, MOBILE?)>
<!ELEMENT NOME (#PCDATA)>
<!ELEMENT COGNOME (#PCDATA)>
<!ELEMENT FISSO (NUMERO+)>
<!ELEMENT MOBILE (NUMERO+)>
<!ELEMENT NUMERO (#PCDATA)>
<!ELEMENT INDIRIZZO ((PIAZZA | VIA)?, N_CIVICO?, CITTA?, CAP?)>
<!ELEMENT PIAZZA (#PCDATA)>
<!ELEMENT VIA (#PCDATA)>
<!ELEMENT N_CIVICO (#PCDATA)>
<!ELEMENT CITTA (#PCDATA)>
<!ELEMENT CAP (#PCDATA)>
<!ATTLIST NUMERO
prefisso CDATA #IMPLIED
compagnia (wind | omnitel | tim | blu ) #IMPLIED>
]>
Esempio di file XML (completo di DTD)
<RUBRICA>
<PERSONA>
<DATI_ANAGRAFICI>
<NOME>Giulio</NOME>
<COGNOME>Cesare</COGNOME>
<INDIRIZZO>
<PIAZZA>Bruto</PIAZZA>
<N_CIVICO>10</N_CIVICO>
<CITTA>Roma</CITTA>
<CAP>10100</CAP>
</INDIRIZZO>
</DATI_ANAGRAFICI>
<TELEFONO>
<FISSO>
<NUMERO prefisso="06">321654</NUMERO>
</FISSO>
<MOBILE>
<NUMERO compagnia="blu">32557684785</NUMERO>
</MOBILE>
</TELEFONO>
</PERSONA>
<PERSONA>
<DATI_ANAGRAFICI>
<NOME>Giovanni</NOME>
<COGNOME>Pompeo</COGNOME>
<INDIRIZZO>
<PIAZZA>Catilina</PIAZZA>
<N_CIVICO>12</N_CIVICO>
<CITTA>Milano</CITTA>
<CAP>12100</CAP>
</INDIRIZZO>
</DATI_ANAGRAFICI>
<TELEFONO>
<FISSO>
<NUMERO prefisso="02">96877564</NUMERO>
</FISSO>
<MOBILE>
<NUMERO compagnia="tim">3356545342</NUMERO>
</MOBILE>
</TELEFONO>
</PERSONA>
</RUBRICA>
Scarica

Elemento