IDUL 09

XML
DATA BASE E LINGUAGGI DI
MARCATURA


Una base di dati organizza dati altamente
strutturati ed interconnessi in modo non
sequenziale.
Poco adatta a rappresentare informazioni
non strutturate, o altamente sequenziali
(come quelle di un testo), o con scarse
dipendenze interne.
DATA BASE E LINGUAGGI DI
MARCATURA

Nel caso di un testo, le informazioni in esso
contenute possono essere organizzate
tramite linguaggi di marcatura.



Con tali linguaggi si può effettuare una “codifica
ad alto livello”
Contrapposta alla “codifica a livello zero” = resa
dei caratteri tramite ascii, unicode, ecc.
Invece di inserire i dati in un DB, si inserisce una
codifica “intorno” alla informazione da segnalare.
MOTIVI DELLA CODIFICA AD ALTO
LIVELLO

In un testo i dati linguistici sono correlati secondo piani di
organizzazione multipli
 struttura del testo


struttura del contesto


l’autore, la data di produzione, la finalità del testo, ecc.
struttura linguistica (implicita nel testo!!)




l’ articolazione in sezioni, capitoli, titoli, ecc.
Lingua del testo, differenza testo/citazione …
informazioni morfologiche, sintattiche, semantiche
Strutture retoriche, argomentative, …
La codifica esplicita di informazione su un testo viene
detta annotazione (o “markup”) del testo.
COME CODIFICARE?

Quali passi seguire per effettuare una
annotazione?



Individuare il livello di informazione da
codificare
(p.es. strutturale, linguistica, ecc.)
Definire il repertorio dei tratti giudicati rilevanti
per la codifica
Scegliere un formato per associare la
annotazione al testo
SCELTA DELLE INFORMAZIONI DA
ANNOTARE: ESEMPIO
Codifica morfo-sintattica oggetto: codificare esplicitamente la
categoria grammaticale e le proprietà morfologiche delle parole
di un testo.
Da definire:
 quali attributi codificare (cat. grammaticale, persona, genere,
numero, caso, ecc.)
 quali attributi sono compatibili (p.es. non ha senso marcare “Caso”
su un elemento marcato “avverbio”)
 quali valori possono avere i diversi attributi (numero = SING,
PLUR; caso = NOM, GEN, ecc.)
 Cosa fare con elementi ambigui (per es. come codificare “che” in
“Che roba!”, “dico che piove”?) e come specificare eventuali valori
disgiuntivi (“X è CONG oppure PRON”)
 Quali criteri di applicazione al testo delle categorie selezionate:


attribuire la codifica a tutto il testo, o a una parte?
Fino a che livello di dettaglio?
Esempio: categorie morfologiche per l’italiano
(Rank Xerox Research Centre)
TAG
| DESCRIPTION
| EXAMPLE
---------------- +--------------------------------------+--------------------NSG
| singular noun
| casa, balsamo
NPL
| plural noun
| case, ventottesimi
PROP
| proper name
| Bernardo, Monte Isola
---------------- +--------------------------------------+--------------------ADJSG
| singular adjective
| buono, narcisistico
ADJPL
| plural adjective
| belle, trecentocinquesimi
---------------- +--------------------------------------+--------------------VAUXINF
| infinitive auxiliary "essere"/"avere"
| esser, essere, aver, avere
VAUXF
| finite auxiliary "essere" or "avere"
| è, sarò, saranno, avrete
VAUXGER
| gerund auxiliary "essere" or "avere"
| essendo, avendo
VAUXGER_CLIT
| gerund auxiliary + clitic
| essendogli
VAUXIMP
| imperative auxiliary
| sii, sia, abbi, abbiamo
VAUXIMP_CLIT
| imperative auxiliary + clitic
| siategliene, abbiatemi
VAUXPPSG
| singular past participle auxiliary
| stato/a, avuto/a
VAUXPPPL
| plural past participle auxiliary
| stati/e, avuti/e
VAUXPPSG_CLIT
| sg. past part. auxiliary + clitic
| statone, avutavela
VAUXPPPL_CLIT
| pl. past part. auxiliary + clitic
| statine, avutiti
VAUXPRPARTSG
| singular present participle auxiliary
| essente, avente
VAUXPRPARTPL
| plural present participle auxiliary
| essenti, aventi
---------------- +--------------------------------------+--------------------VINF
| verb infinitive
| sciupare, trascinar
VINF_CLIT
| verb infinitive + clitic
| spulciarsi, risucchiarsi
VF
| finite verb form
| blatereremo, rantolo
VF_CLIT
| finite verb + clitic
| trattansi, leggevansi
…
|…
|…
REQUISITI PER LA CODIFICA
Dovendo associare altre informazioni al testo, alcuni
requisiti generali:
1.
Mantenere una chiara divisione tra il testo e la annotazione
relativa (informazione vs. metainformazione); Esempio
negativo:
“Come Cong. andò V_intr che Cong. Maestro N … “
2.
3.
4.
5.
6.
7.
Permettere di scorporare testo e annotazione;
Avere annotazioni ragionevolmente autoesplicative;
Non consumare troppo spazio;
Permettere all’utente facili aggiunte/modifiche
Permettere l’uso del testo annotato su una varietà di sistemi
informatici (tramite “formati aperti”)
Limitare la obsolescenza (del formato dati e del supporto di
registrazione)
ASSOCIARE TESTO E CODIFICA
i linguaggi di marcatura
Codifica di alto livello con linguaggi di markup (linguaggi di
marcatura)

un testo codificato con un linguaggio di marcatura è in formato
“solo testo” (tutti caratteri stampabili)
 buona interoperabilità
 Scarsa obsolescenza (specie se associato ad uno standard e non
semplicemente ad un software)

l’informazione strutturale è rappresentata attraverso l’aggiunta al
testo di etichette (o tag) di marcatura, chiaramente identificabili


Buona distinzione testo/metatesto
Non un buon modo per risparmiare spazio
(ma esiste sempre la possibilità di comprimere il file; non un
problema di conservazione con gli hardware attuali; problema, in
caso, di trasmissione via rete)
INSERIMENTO DELLA
MARCATURA
Editor di testo




Programmi per caricare, scrivere o modificare testi
in formato ASCII (Latin-1 / UNICODE)
Funzioni di stampa ridotte all’osso (niente
formattazione del carattere, paragrafo, …)
Funzioni anche molto sofisticate di manipolazione
del testo (ricerca/sostituzione avanzata, macro, …)
Sensibili alla sintassi di vari tipi di file di testo
(linguaggi di programmazione, HTML, …)
EDITOR DI TESTO
Editor di testo




Programmi per caricare, scrivere o modificare testi
in formato ASCII (Latin-1 / UNICODE)
Funzioni di stampa ridotte all’osso (niente
formattazione del carattere, paragrafo, …)
Funzioni anche molto sofisticate di manipolazione
del testo (ricerca/sostituzione avanzata, macro, …)
Sensibili alla sintassi di vari tipi di file di testo
(linguaggi di programmazione, HTML, …)
EDITOR DI TESTO “MINIMO”

“Blocco note” (ingl. “Notepad”) di Windows.





Editor minimalista, distribuito con Windows.
Legge di base file con suffisso .txt
Nessuna funzione sofisticata
Nessuna sensibilità al tipo di file
Conosce UNICODE
Problemi nel trattamento di file non-windows
EDITOR: Scite
Vedi http://www.scintilla.org/SciTE.html
Emacs







Probabilmente il più potente editor esistente.
Può essere esteso dagli utenti per usi vari; modulare
Sofisticata serie di comandi sul testo (macro,
espressioni regolari, …)
Gratuito, con codice a disposizione (“open source”)
Due versioni: GNU Emacs (1976 Richard Stallman)
e Xemacs
Disponibile per UNIX, Windows, Mac, …
Interfaccia prevalentemente non grafica; ben
documentata ma difficile da imparare
EDITOR: EMACS
Vedi http://www.gnu.org/software/emacs/
DUE TIPI DI MARCATURA DEL
TESTO

Marcatura procedurale (detta anche marcatura tipografica) che consiste in
una serie di istruzioni operative che forniscono le specifiche di
formattazione e impaginazione del testo per la visualizzazione e la stampa
(vedremo in seguito LaTeX)

Marcatura dichiarativa (detta anche marcatura logica o descrittiva) dove i
codici di marcatura indicano la funzione assolta dal blocco di testo a cui si
riferiscono, ad esempio titolo, paragrafo, nota, citazione ecc. senza fornire
indicazione di come tali elementi del testo dovranno apparire fisicamente
sulla pagina o sul video (es. SGML, XML)
Marcatura dichiarativa:
vantaggi




facilità nella creazione: l’autore si concentra sul ruolo
organizzativo delle singole parti di testo, piuttosto che sul
loro aspetto stampato
indipendenza dalla formattazione: riformattare un
documento secondo nuove regole richiede semplicemente
di ricodificare dei parametri esterni, non di modificare in
alcuna maniera il testo codificato
flessibilità: riusare un testo codificato in un nuovo
contesto è facile, perché non è necessario rimuovere la
vecchia informazione per far posto alla nuova
visioni di documenti dinamicamente riconfigurabili: è
possibile selezionare viste diverse dello stesso documento
L’XML (eXtensible Markup Language)

è un nuovo linguaggio di markup sviluppato dallo XML Working Group
del W3C a partire dal 1996

XML è uno dei più importanti sviluppi nella storia della computazione.
Negli ultimi anni è stato adottato in campi molto diversi tra loro: legge,
aeronautica, finanza, sicurezza, robotica, turismo, arte, design del
software, fisica, letteratura, …

XML è nato dallo sforzo di dare forza e struttura all’SGML (“Standard
Generalized Markup Language”, ISO standard: ISO 8879:1986) nel
web, in una forma che fosse però abbastanza semplice per gli utenti
non esperti.
L’XML (eXtensible Markup Language)

è un linguaggio di markup sviluppato dallo XML Working Group del
W3C a partire dal 1996

XML è uno dei più importanti sviluppi nella storia della computazione.
Negli ultimi anni è stato adottato in campi molto diversi tra loro: legge,
aeronautica, finanza, sicurezza, robotica, turismo, arte, design del
software, fisica, letteratura, …

XML è nato dallo sforzo di dare forza e struttura all’SGML (“Standard
Generalized Markup Language”, ISO standard: ISO 8879:1986) nel
web, in una forma che fosse però abbastanza semplice per gli utenti
non esperti.
XML

XML nasce dalla lunga storia dei sistemi di elaborazione di testi allo scopo di
permettere l’elaborazione delle informazioni piuttosto che la loro visualizzazione

in un documento XML, quindi, non e’ necessario fare alcun riferimento al modo
in cui le informazioni verranno visualizzate: le regole per la visualizzazione
saranno inserite in un foglio esterno chiamato foglio di stile (ingl. “Stylesheet”)

XML permette all’utente di definire il proprio insieme di tag (elementi) e in
questo senso può essere considerato un meta-markup language: i tag definiti
dall’utente possono avere dei nomi che rispecchiano il contenuto del documento
stesso

Le specifiche complete dell’ XML 1.0 sono sul web (in italiano a
http://www.xml.it:23456/XML/REC-xml-19980210-it.html)
Struttura logica generale dei tag
XML (HTML/SGML)





<marcatore>testo a cui si riferisce</marcatore>
<marcatore attributo=“valore”>testo a cui si
riferisce</marcatore>
<marcatore_aperto_e_chiuso/>
Oltre al termine “marcatore” si usa “etichetta” o l’inglese “tag”;
il termine tecnico è “elemento”
A differenza che in SGML ed in HTML, in XML ogni marcatore
aperto deve essere chiuso (XML è più restrittivo di SGML)
Markup XML per codifica
strutturale
<libro>
<titolo>Le avventure di Pinocchio
<sottotitolo>Storia di un burattino</sottotitolo>
</titolo>
<autore>Carlo Collodi</autore>
<parte p_id=”1”>
<titolo>Parte prima</titolo>
<capitolo c_id=”I”>
<titolo> Come andò che maestro Ciliegia, falegname, trovò un pezzo
di legno, che piangeva e rideva come un bambino.</titolo>
<capoverso num=”p1c1c1”>C'era una volta...</capoverso>
<capoverso num=”p1c1c2”>- Un re! - diranno subito i miei piccoli
lettori.</capoverso>
<capoverso num=”p1c1c3”>No, ragazzi, avete sbagliato. C'era una
volta un pezzo di legno.</capoverso>
<capoverso num=”p1c1c4”>Non era un legno di lusso, ma un semplice
pezzo da catasta, di quelli che d'inverno si mettono nelle stufe e
nei caminetti per accendere il fuoco e per riscaldare le
stanze.</capoverso> </capitolo></parte>
</libro>
Markup doppio
markup per la codifica di informazione strutturale
+
markup (parziale) per la codifica di informazione linguistica
<libro>
…
<parte>
<capitolo c_id=”I”>
<titolo>Come <parola cat=“V” tempo=“passRem”>andò</parola> che
<parola cat=“N” genere=“m” num=“s”>maestro</parola> Ciliegia,
falegname, trovò <sintagma tipo=”nominale”><parola cat=“artInd”
genere=m” num=“s”>un</parola> pezzo di legno</sintagma>, che
piangeva e rideva come un bambino.
</titolo>
…
</capitolo></parte>
</libro>
Problema: Markup incrociato

Con la presenza di markup multiplo si pone il
problema delle etichette incrociate

<pagina pag_n=“1”>…Non era un legno di lusso, ma un semplice pezzo da catasta, di
quelli <frase-rel>che d'inverno si mettono nelle stufe</pagina><pagina pag_n=“2> e nei
caminetti per accendere il fuoco e per riscaldare le stanze.</frase-rel>

<grassetto>AAA<corsivo>BBB</grassetto>CCC…</corsivo>

La sintassi dell’ XML non permette questi incroci!!!
(e neanche quella dell’ HTML, anche se i browser sono a questo proposito
molto accomodanti)
Principali differenze fra HTML e XML



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 (marcatura dichiarativa)
 HTML è pensato per visualizzare dati e porre l'attenzione su
come presentarli (marcatura mista procedurale/dichiarativa)
Tuttavia, è possibile tradurre tutto l’HTML in XML: il risultato si
chiama XHTML
HTML + Browser: sistema di visualizzazione di dati;
XML + Processore XML + Applicazione = formato dati generale
SGML
HTML
XHTML
XML
Le parti di un progetto XML
Un documento in XML è in realtà la combinazione di tre parti. Ci
riferiamo ad esse come tre documenti separati; spesso, ma
non necessariamente, sono anche file separati in maniera
fisica.
1.
2.
3.
Un documento dei contenuti cioé la parte che l’autore vuole
esporre a chi la visualizza o utilizza;
Un documento DTD (Document Type Definition) che specifica
i macatori usati e la loro sintassi;
Uno stylesheet (foglio di stile) che stabilisce come verrà
visualizzato e presentato il contenuto.
La DTD è opzionale e spesso viene caricata direttamente dal web
tramite una chiamata all’interno del documento dei contenuti
(meccanismo dei “Namespace”)
Il foglio di stile è opzionale, e superfluo se il contenuto non deve
essere visualizzato in modo particolare.
XML

Un documento XML è costituito da
composizioni di stringhe, ovvero sequenze di caratteri
UNICODE.

Caratteristica di XML è quella di essere CASE
SENSITIVE, ovvero di fare differenza tra lettere
maiuscole e minuscole.
Pertanto il tag "Pino" è diverso dai tag "pino", "pIno",
"PINO", ecc.
Parti di un documento XML

Un documento XML si compone di due parti
principali:

il "PROLOG“ contiene:
 dichiarazione della versione di XML;
 commenti (facoltativi);
 dichiarazione del DOCUMENT TYPE.

il "DOCUMENT INSTANCE“ contiene i dati veri e propri.
Esempio di Prolog

un documento XML dovrebbe iniziare con
<?xml version="1.0" encoding="…" standalone="yes" ?>

se non si specifica il valore dell’attributo encoding la codifica è quella
UNICODE

standalone può assumere valori "yes" o "no" (il cui significato sarà
chiaro in seguito)
<?xml version="1.0"?>
<!-- Documento di prova --!>
<!DOCTYPE MEMO SYSTEM "memo.dtd">
nome del documento
file con la descrizione della struttura
Esempio di Document
Instance

Un documento XML è un documento di testo ed è formato da tag
che una volta aperti devono SEMPRE essere chiusi
<memo>
<da> <nome>Ugo</nome>
<email>[email protected]</email>
</da>
<a> <nome>Pina</nome>
<email>[email protected]</email>
</a>
<oggetto>San Valentino</oggetto>
<testo><paragrafo>Pina.... ti amo moltissimo!
Tuo Ugo.</paragrafo>
</testo>
</memo>
<?xml version="1.0" standalone="no" ?>
<memo>
<from>
<name>Rossi</name>
<email>[email protected]</email>
</from>
<to>
<name>Verdi</name>
<email>[email protected]</email>
</to>
<oggetto>Esempio in XML</oggetto>
<body>
<paragrafo>bla bla</paragrafo>
<paragrafo>bla bla</paragrafo>
</body>
</memo>
N.B. L’uso del rientro variabile (“indentation”) non è parte della
sintassi XML, ma un modo per aiutare gli esseri umani nella
identificazione della struttura. Idem per l’uso dei colori, di grassetto,
font, ecc.
XML - struttura ad albero

Un documento XML definisce una struttura ad albero che si ottiene

esaminando le relazioni di annidamento che esistono tra i tag
Deve esistere un solo tag che non sia all’interno di nessun altro. Questo tag
definisce la radice dell’albero (“root”) (nellì’esempio, “memo”).
memo
name
Rossi
from
email
[email protected]
to
name
Verdi
email
oggetto
body
[email protected]
esempio in XML
paragrafo
bla bla
paragrafo
bla bla
ROOT (“RADICE”) E
COMPONENTI


Ogni documento XML ben formato (“well-formed”) ha un
solo elemento radice/root
Gli elementi non ROOT sono chiamati COMPONENTI
del documento.
INGREDIENTI PRINCIPALI DI UN
DOCUMENTO XML

Elementi:
identificano porzioni di testo o punti nel testo; possono
contenere testo puro e/o altre etichette (cf. le cartelle di
windows)

Entità
abbreviazioni per caratteri o espressioni varie;

Commenti

Attributi (e loro valori)
ignorati dal processore, utili per l’autore
definiti come proprietà degli elementi, ciascuno con un
insieme di possibili valori;
ENTITÀ PREDEFINITE



Servono per far sì che i caratteri normalmente interpretati come
MARKUP possano essere utilizzati come caratteri di testo (ad
esempio per scrivere un manuale HTML).
Sono i seguenti:
 &amp; = &
 &lt; = <
 &gt; = >
 &apos; = '
 &quot; = "
In generale le “entità” (sia predefinite che definite dall’utente
hanno la forma &nome; )
COMMENTi

All’interno di un documento XML posso aggiungere commenti,
definiti come:
“<!--” + Contenuto del commento + “-->”




Esempio:
<!-- dichiarazione per <head> & <body> -->
I commenti sono “invisibili” al processore XML e servono solo per
utenti umani.
Eventuali tag all’interno non vengono processati
Non possono essere inserite doppie linette “--” in un commento, se
non alla fine, per chiuderlo.
XML - ATTRIBUTI
 i tag XML possono avere uno o più attributi
 un attributo è una coppia nome="valori”, che viene associata al
tag (prima di chiuderlo con “>”)
<persona altezza="170cm" peso="60kg">
Mario Rossi
</persona>
 il valore di un attributo va tra virgolette semplici (‘) o doppie (“)
(attenzione alla sostituzione automatica di “ con ”!)
XML – da non dimenticare…




Virgolette necessarie nell’inserimento di attributi (“…” o ‘…’ ma mai
misti: “…’ o ‘…”)
Bilanciamento dei tags (se si apre il tag <img> deve essere anche
chiuso da </img>; oppure si utilizzano tag vuoti (<hr></hr>,
possibilmente compattati: <hr/>)
 Tag incassati - uso corretto:
<h1> <a href=“percorso”> ecco il link </a> </h1>
 Tag incassati – uso non corretto (tag incrociati)
<h1> <a href=“percorso”> ecco il link </h1> </a>
Caratteri speciali devono comparire sempre con la loro sequenza
vista in html:
à si scrive con &agrave;
> con
&gt;
etc…
XML è case sensitive: <img> è diverso da <IMG>!!!
Esempio (negozi.xml)
<?xml version="1.0" standalone="no" ?>
<negozi>
<citta nome="Trento"/>
<negozio apertura="8.30-12.30/15.00-19.00" domenica="no">
<nome> Supermercati Poli </nome>
<indirizzo tipo="completo">
<via> S.Pio X </via>
<numero> 2 </numero>
<zona> …… </zona>
</indirizzo>
<genere> Alimentare</genere>
</negozio>
<negozio apertura="8.00-12.00/15.00-19.00" domenica="si">
<nome> Ubiq </nome>
<indirizzo tipo="ridotto">
<via> Corso 3 Novembre </via>
<numero> 10 </numero>
</indirizzo>
<genere> Libreria </genere>
<descrizione> …… </descrizione>
</negozio>
</negozi>
Esempio 4: info come testo o come attributo?
<?xml version="1.0" standalone="no" ?>
<negozi>
<negozio domenica="si">
<nome> Ubiq </nome>
<indirizzo tipo="ridotto">
<via> Corso 3 Novembre </via>
<numero> 10 </numero>
</indirizzo>
<apertura domenica=“si”>8.00-12.00/15.00-19.00</apertura>
<genere> Libreria </genere>
<descrizione> …… </descrizione>
</negozio>
</negozi>

Un caso di informazione doppia:
<parola cat=“num” val=“44”>quarantaquattro</parola><parola cat=“N”>gatti</parola>
La DTD

L'XML non è limitato a un insieme fisso di tipi di
elementi, ma permette di definire e utilizzare elementi e
attributi personalizzati;

per far questo viene fornita una sintassi con cui è
possibile specificare gli elementi e gli attributi che
possono essere utilizzati all'interno dei documenti.

In altre parole è possibile creare un modello, chiamato
Document Type Definition (DTD), che descrive la
struttura e il contenuto di una classe di documenti.
DTD: Esempio antologia
<antologia>
<poesia><titolo>The SICK ROSE</titolo>
<strofa>
<verso>O Rose thou art sick.</verso>
<verso>The invisible worm,</verso>
<verso>That flies in the night</verso>
<verso>In the howling storm:</verso>
</strofa>
<strofa>
<verso>Has found out thy bed</verso>
<verso>Of crimson joy:</verso>
<verso>And his dark secret love</verso>
<verso>Does thy life destroy.</verso>
</strofa>
</poesia>
<!-- continua con altre poesie -->
</antologia>
Alcune caratteristiche per la definizione di
“antologia di poesie”
1.
2.
3.
4.
5.
6.
Una antologia contiene un certo numero di
poesie e nient'altro.
Una poesia contiene a volte un singolo
elemento di titolo che precede la prima
strofa, e non contiene mai nessun altro
elemento.
A parte il titolo, una poesia consiste solo di
strofe.
Una strofa consiste solo di versi ed ogni
verso è contenuto in una strofa.
Una strofa non può essere seguita da
nulla tranne che da un'altra strofa, oppure
dalla fine della poesia.
Un verso non può essere seguito da nulla
se non da un altro verso, oppure dall'inizio
di una nuova strofa.
Esempio DTD: Antologia
<!ELEMENT antologia
<!ELEMENT poesia
<!ELEMENT titolo
<!ELEMENT strofa
<!ELEMENT verso
(poesia+)>
(titolo?, strofa+)>
(#CDATA) >
(verso+) >
(#CDATA) >
XML – documenti “well formed”
un documento XML è ben formato se e solo se:

tutti i suoi tag sono chiusi, nell’ordine corretto

esiste un solo elemento radice

i valori degli attributi sono scritti tra virgolette

gli elementi non hanno due attributi con lo stesso nome

i nomi degli elementi e degli attributi non contengono i caratteri < > &
NB: i parser XML sono in grado di trattare solo i documenti XML ben
formati
la DTD

L'XML ha una propria DTD (attualmente descritto
nella specifica REC-xml-19980210) in cui vengono
elencate le regole della specifica stessa del
linguaggio.

Con l'XML è anche introdotta una classe di
documenti che fa riferimento alla sola DTD dell'XML;
la creazione di una DTD personale non è quindi
indispensabile.
DTD type valid
I documenti con le specifiche della DTD XML possono
essere trovati agli indirizzi:
http://www.w3c.org/XML/
La seguente URL contiene un controllore di validità
http://www.stg.brown.edu/service/xmlvalid/
Se un documento è conforme alle specifiche di una
DTD personale, allora si dice che è TYPE VALID
("valido").
Esempio di una DTD

Per esempio, dato la seguente DTD
personale:
<!DOCTYPE persona [
<!ELEMENT persona (nome,cognome)>
<!ELEMENT nome
(#PCDATA)>
<!ELEMENT cognome
(#PCDATA)>
]>
Documento type valid
il seguente documento risulta TYPE VALID:
<persona>
<nome> Luigi </nome>
<cognome> Rossi </cognome>
</persona>
Esempio 2
Consideriamo la seguente DTD, che definisce la
struttura di un documento che contiene un indirizzo
postale:
<!DOCTYPE indirizzo [
<!ELEMENT indirizzo (nome, via, citta, stato, CAP)>
<!ELEMENT nome
(#PCDATA)>
<!ELEMENT via
(#PCDATA)>
<!ELEMENT citta
(#PCDATA)>
<!ELEMENT stato
(#PCDATA)>
<!ELEMENT CAP
(#PCDATA)>
]>
Osservazioni
Osservazioni:
 il nome del document type ("indirizzo") è puramente
arbitrario, avremmo potuto scrivere anche “address"
o altro...;

il root element deve avere (obbligatoriamente) lo
stesso nome del document type (nell' esempio,
"indirizzo");
Osservazioni
Una volta definito la DTD, un documento TYPE
VALID di tipo "indirizzo“ avrà la seguente forma:
<indirizzo>
<nome> Giuseppe </nome>
<via> Garibaldi </via>
<città> Pinerolo (TO) </città>
<stato> Italia </stato>
<CAP> 12345 </CAP>
</indirizzo>
Dove si trova la DTD?
la DTD di un file XML può trovarsi:


DENTRO il file stesso (internal set): questo sistema
comporta uno svantaggio in termini di condivisione
in quanto la DTD non può essere usata per altri
documenti XML simili;
FUORI dal file (external set): qui, invece, la DTD è
condivisibile e riutilizzabile.
External set

In caso di external set la DTD di riferimento viene
caricata tramite il sistema operativo (SYSTEM)
<!DOCTYPE label SYSTEM "/URL/della/risorsa">.

La URL della risorsa può:

essere un percorso sul file system locale. Esempio:
<!DOCTYPE label SYSTEM "C:\mydocuments\xml\dtd\label.dtd">


oppure essere un indirizzo esterno:
<!DOCTYPE label SYSTEM "http://www.lt-2002.com/indirizzo.dtd">
Chiaramente la seconda soluzione offre
maggiore accessibilità.
Tipi di content specification

Abbiamo già visto un esempio di "content specification" quando abbiamo
elencato gli elementi di "indirizzo": "nome", "via", "citta", "stato", "CAP“:
<!ELEMENT nome (#PCDATA)>



#PCDATA (“Parsed characted data”) indica un contenuto “misto” (testo e/o
marcatori). Il processore XML analizzarà i marcatori, ma la DTD non ne
specifica la struttura.
Una specifica #CDATA, al contrario, indica al processore XML che non deve
analizzare il contenuto, ma è tuttavia formato da caratteri
Una specifica #NDATA indica invece che il contenuto di un tag potrebbe
essere anche un file binario arbitrario (p.es. una immagine)
Altri tipi di content specification
TIPO
CONTENUTO PERMESSO
EMPTY (vuoto)
nessuno
ANY
qualsiasi
MIXED
Dati o sotto-elementi
ELEMENT
SOLO sotto elementi
Esempio
TIPO
COME SI DICHIARA
EMPTY (vuoto)
<!ELEMENT VUOTO1 EMPTY>
ANY (qualunque cosa)
<!ELEMENT QUI-QUO-QUA ANY>
MIXED
<!ELEMENT nome
(RILIEVO)>
<!ELEMENT RILIEVO (#PCDATA)>
MIXED
<!ELEMENT comm (#PCDATA | NOME)>
ELEMENT
<!ELEMENT label (nome,via,città,)>
Elementi alternativi

E` possibile specificare che un certo elemento può
essere composto da uno di due elementi in
alternativa:
<!ELEMENT FIGURA (DIDASCALIA, (IMMAGINE|CODICE))>

Questo esempio definisce l' elemento "figura" (per
esempio di un libro) dicendo che una figura ha
SEMPRE una didascalia più un'immagine o un
pezzo di codice a scelta.
Il numero degli elementi

Per indicare opzionalità o ripetizioni si usano i modificatori già
incontrati nelle espressioni regolari: ?




? = l' elemento che precede sarà presente da 0 a 1 volta
* = l' elemento che precede sarà presente 0 o più volte
+ = l' elemento che precede sarà presente 1 o più volte
Esempio:
<!ELEMENT CAPITOLO
<!ELEMENT PARAGRAFO
<!ELEMENT note
(titolo, sottotitolo?, paragrafo+)>
(#PCDATA | note)*>
(#PCDATA)>
L' elemento “sottotitolo“, se c’è, è unico. L' elemento "paragrafo" deve
essere presente per lo meno UNA volta. L' elemento "note" può essere
ripetuto infinite volte oppure essere totalmente assente.
DTD: Esempio antologia
<antologia>
<poesia><titolo>The SICK ROSE</titolo>
<strofa>
<verso>O Rose thou art sick.</verso>
<verso>The invisible worm,</verso>
<verso>That flies in the night</verso>
<verso>In the howling storm:</verso>
</strofa>
<strofa>
<verso>Has found out thy bed</verso>
<verso>Of crimson joy:</verso>
<verso>And his dark secret love</verso>
<verso>Does thy life destroy.</verso>
</strofa>
</poesia>
<!-- continua con altre poesie -->
</antologia>
Alcune caratteristiche per la definizione di
“antologia di poesie”
1.
2.
3.
4.
5.
6.
Una antologia contiene un certo numero di
poesie e nient'altro.
Una poesia contiene a volte un singolo
elemento di titolo che precede la prima
strofa, e non contiene mai nessun altro
elemento.
A parte il titolo, una poesia consiste solo di
strofe.
Una strofa consiste solo di versi ed ogni
verso è contenuto in una strofa.
Una strofa non può essere seguita da
nulla tranne che da un'altra strofa, oppure
dalla fine della poesia.
Un verso non può essere seguito da nulla
se non da un altro verso, oppure dall'inizio
di una nuova strofa.
Esempio Antologia
<!ELEMENT antologia
<!ELEMENT poesia
<!ELEMENT titolo
<!ELEMENT strofa
<!ELEMENT verso
(poesia+)>
(titolo?, strofa+)>
(#CDATA) >
(verso+) >
(#CDATA) >

Con questi elementi possiamo dichiarare una poesia
come composta da una o più strofe, versi liberi o
quartine, definite ad esempio come:



Notare la differenza tra:



<!ELEMENT quartina (verso-1, verso-2, verso-3, verso-4)>
<!ELEMENT poesia (titolo?, (strofa+ | quartina+ | verso+))>
<!ELEMENT poesia (titolo?, (strofa+ | distico+ | verso+) ) >
<!ELEMENT poesia (titolo?, (strofa | distico | verso)+ ) >
Altro esempio: ritornello


<!ELEMENT ritornello (verso+)>
<!ELEMENT poesia (titolo?, ( verso+ | (ritornello?, (strofa,
ritornello?)+ ))) >
Attributi

Come definire attributi in una DTD:
<!ELEMENT poesia
(titolo?, strofa+)>
<!ATTLIST
poesia
iden ID
#IMPLIED
status (bozza | rivisto | pubblicato) "bozza" >


L’attributo ident di “poesia” è di tipo ID e può mancare (essere
implicito)
L’attribito status di “poesia” ha 3 valori possibili: “bozza”, “rivisto”
e “pubblicato”; se non è presente in valore da assumere è
“bozza”
Attributi: tipi di valori possibili
CDATA: (character data) Il valore dell’attributo può contenere qualsiasi carattere valido, inclusi
spazi e punteggiatura;
PCDATA: (Parsed character data) Il valore dell’attributo può contenere qualsiasi carattere valido,
inclusi spazi e punteggiatura; eventuali etichette comprese nel valore, possono essere
riconosciute come tali dal parser XML;
NMTOKEN: (named token) Il valore dell’attributo può contenere solo i caratteri che sono validi
all’interno di un nome o di un identificatore generico;
NMTOKENS: (named tokens) Il valore dell’attributo può contenere uno o più valori NMTOKEN
separati da uno o più spazi bianchi;
ID: (identifier ) Il valore dell’attributo deve essere una singola parola iniziante con un carattere
alfabetico, che possa essere usata come identificatore univoco (un dato valore può essere
usato una volta sola come valore di qualsiasi attributo ID);
IDREF: (identifier reference) Il valore dell’attributo deve contenere una singola parola che è stata
usata altrove come identificatore univoco di qualche elemento;
IDREFS: (identifier references) Il valore dell’attributo può contenere uno o più valori IDREF
separati da uno o più spazi bianchi;
ENTITY: Il valore dell’attributo deve contenere un valore NMTOKEN precedentemente dichiarato
come il nome di una entità XML (vedi oltre);
ENTITIES: Il valore dell’attributo può contenere uno o più valori ENTITY, separati da uno o più
spazi bianchi;
Obbligatorietà dei valori
1.
2.
3.
#REQUIRED: un valore deve essere specificato.
#IMPLIED: non deve essere specificato nessun particolare valore.
"valore di default“
Esempi:
<!ATTLIST
poesia
iden
ID
#IMPLIED
status (bozza | rivisto | pubblicato) #REQUIRED
lingua
CDATA
“italiano”>
Identificatori e riferimento
<!ATTLIST poesia iden ID #IMPLIED >
Attributo utile solo per elementi a cui pensiamo di dover poi far riferimento
Esempio:
<poesia iden=’ROSE’>
<!-- Text of poem with identifier ’ROSE’ -->
</poesia>
<poesia iden=’P40’>
<!-- Text of poem with identifier ’P40’ -->
</poesia>
<poesia>
<!-- This poem has no identifier -->
</poesia>
Per far riferimento serve un elemento composto solo da un attributo di
tipo IDREF:
<!ELEMENT poesiaRef
<!ATTLIST poesiaRef
target
Blake’s poem on the sick rose
<poesiaRef target=’ROSE’/>
EMPTY >
IDREF
#REQUIRED >
Entità predefinite

Le entità predefinite possono spesso
rappresentare singoli caratteri, tramite il loro
numero di codice (esprimibile con la forma: “&#num;” dove
num è un numero di ASCII/Latin-1/UNICODE…)
<!ENTITY lt "&#38;#60;">
<!ENTITY gt "&#62;">
<!ENTITY amp "&#38;">
<!ENTITY apos "&#39;">
<!ENTITY quot "&#34;">
<!-- less than, < -->
<!-- greater than, > -->
<!-- ampersand, & -->
<!-- apostrophe, ’ -->
<!-- quote, " -->
Tre tipi di entità non
predefinite
Entità interne
<!ENTITY tei "Text Encoding Initiative">
&tei;  Text Encoding Initiative
Entità esterne
<!ENTITY ChapTwo SYSTEM "p4chap2.xml">
<!ENTITY ChapTwo SYSTEM
"http://www.tei-c.org/P4X/p4chap2.xml">
Entità pubbliche
<!ENTITY p3.sg
PUBLIC "-//TEI//TEXT Guidelines Chapter on XML//EN"
"p4chap2.xml">

Se una entità viene dichiarata più di una volta, solo
il primo valore dichiarato è valido
<!ENTITY personaggio ‘‘pluto’’>
<!ENTITY personaggio ‘‘paperino’’>
&personaggio; ==> pluto
NB: Ciò si discosta del normale comportamento delle
variabili nei linguaggi di programmazione;
normalmente l’ultima assegnazione è quella che
vale)
Parametri
Un parametro è un insieme di attributi a cui
viene dato un nome, in modo da poterlo
usare con più elementi.
 Per fare riferimento ad un parametro si usa la
forma:
%nomeparametro;

Parametri: esempio
<!ENTITY % a.global
’iden ID #REQUIRED
Rend CDATA #IMPLIED’>
<!ATTLIST myElement
%a.global;
another CDATA #IMPLIED >

Nome parametro
elenco attributi
Con questo sistema i due attributi iden e rend
vengono assegnati insieme a myElement.
Un esempio di documento
completo
Un documento marcato in XML consiste
di:



Una dichiarazione XML che indica
proprietà generali del documento.
Una Document Type Declaration (o
DOCTYPE), che assegna l'
elemento root e la DTD (necessaria
solo se si vuole che il documento
XML possa essere dichiarato
formalmente valido da un parser)
L' elemento root, che contiene il
testo e le successive marcature.
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE antologia [
<!ELEMENT antologia (poesia+)>
<!ELEMENT poesia (titolo?, strofa+)>
<!ELEMENT titolo (#PCDATA) >
<!ELEMENT strofa (verso+) >
<!ELEMENT verso (#PCDATA) >
]>
<antologia>
<poesia><titolo>The SICK ROSE</titolo>
<strofa>
<verso>O Rose thou art sick.</verso>
<verso>The invisible worm,</verso>
<verso>That flies in the night</verso>
<verso>In the howling storm:</verso>
</strofa>
<strofa>
<verso>Has found out thy bed</verso>
<verso>Of crimson joy:</verso>
<verso>And his dark secret love</verso>
<verso>Does thy life destroy.</verso>
</strofa>
</poesia>
</antologia>
Namespace
Il meccanismo dei “namespace” (spazi dei nomi) consente ad un
documento in XML di caricare ed usare più di una DTD, ciascuna con il
suo set di marcatori.
 I marcatori diventano disponibili all’interno del marcatore in cui la DTD è
stata caricata con la la istruzione xmlns
 Un opportuno sistema di prefissi distingue i marcatori di DTD diverse
(risolvendo eventuali omonimie)
Esempio:

<verso xmlns:gram="http://www.gram.org/morfo.dtd">...
<!-- in questa porzione di testo valgono tutte le etichette definite in
morfo.dtd -->
</verso>
<!-- qui fuori le etichette definite in morfo.dtd non valgono -->
Namespace con prefissi
<verso xmlns:gram=“http://www.gram.org/morfo.dtd”
xmlns:form=“http://www.shake.org/sonnet.dtd”>
<form:sonnet>
<gram:aux>Shall</gram:aux>
<gram:pron>I</gram:pron>
<gram:verb>compare</gram:verb>
<gram:pron>thee</gram:pron>
<gram:prep>to</gram:prep>
<gram:art>a</gram:art>
<gram:noun>summer</gram:noun>
’s
<gram:noun>day</gram:noun>
?
…
</form:sonnet>
</verso>

I marcatori che vengono caricati da un particolare namespace hanno
significato solo all’interno di quel namespace.
<text xmlns="http://www.tei-c.org">
<front>
<!– il prefisso gram non è disponibile qui -->
</front>
<body xmlns:gram="http://www.gram.org">
<!-- il prefisso gram qui è disponibile -->
</body>
</text>

Il significato dei prefissi dipende del namespace più interno in cui sono definiti
(se ci sono più namespace con prefissi con lo stesso nome, il particolare
prevale sul generale).

La URL data nella definizione del namespace non viene controllata in fase di
validazione
Esercizi di creazione DTD
Provate a creare una DTD che copra (almeno) testi teatrali della seguente forma:
T1:









Titolo
Autore1
Atto
Descrizione di scena
Personaggio : battuta
Personaggio: battuta
Atto
Personaggio: battuta
Epilogo
T4:








T3:
T2:








Titolo
Autore1, autore2
Personaggio: battuta
Descrizione di scena
Personaggio: battuta
Personaggio: battuta
Descrizione di scena
Epilogo
T5:
Titolo
Autore1
Personaggio: battuta
Descrizione di scena
Personaggio: battuta
Personaggio: battuta
Epilogo
Postfazione





T5:
Titolo
Autore1
Monologo
Postfazione










Titolo
Autore1
Atto
Personaggio: battuta
Personaggio: battuta
Atto
Personaggio: battuta
Personaggio: Battuta
Epilogo
Indice
Si ricordi:
A? = A è opzionale
A+ = A appare almeno 1 volta
A* = A appare 0 o più volte
(A | B) = o A o B
(A, B) = A seguito da B
Esercizi di creazione DTD
Provate a creare una DTD che copra le seguenti forme di indirizzo:



Mickey Mouse, via degli Aranci 12, Topolinia
Sig. Mickey Mouse, via degli Aranci n. 12.,
Topolinia (TO)
Fam. Mouse, via degli Aranci 12, 38160, Topolinia,
Italia
Esercizi di creazione DTD
Provate a creare una DTD che copra la (intricata) struttura di uno dei
primissimi libri di cucina italiani: La Scienza in Cucina e l’Arte di Mangiar
Bene, di Pellegrino Artusi.


Disponibile su
http://www.pellegrinoartusi.it/la_cucina_artusiana.h
tm
O sulla biblioteca di Liber liber, in HTML:
http://www.liberliber.it/biblioteca/index.htm
Scarica

Power Point - clic