IDUL 2011
Marcature ad alto livello, XML
MOTIVI DELLA CODIFICA AD ALTO
LIVELLO
In
un testo i dati linguistici sono correlati secondo piani di
organizzazione multipli
struttura del testo
l’
articolazione in sezioni, capitoli, titoli, ecc.
struttura
l’autore,
del contesto
la data di produzione, la finalità del testo, ecc.
struttura
linguistica (implicita nel testo!!)
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
---------------NSG
NPL
PROP
---------------ADJSG
ADJPL
---------------VAUXINF
VAUXF
VAUXGER
VAUXGER_CLIT
VAUXIMP
VAUXIMP_CLIT
VAUXPPSG
VAUXPPPL
VAUXPPSG_CLIT
VAUXPPPL_CLIT
VAUXPRPARTSG
VAUXPRPARTPL
---------------VINF
VINF_CLIT
…
| DESCRIPTION
+--------------------------------------| singular noun
| plural noun
| proper name
+--------------------------------------| singular adjective
| plural adjective
+--------------------------------------| infinitive auxiliary "essere"/"avere"
| finite auxiliary "essere" or "avere"
| gerund auxiliary "essere" or "avere"
| gerund auxiliary + clitic
| imperative auxiliary
| imperative auxiliary + clitic
| singular past participle auxiliary
| plural past participle auxiliary
| sg. past part. auxiliary + clitic
| pl. past part. auxiliary + clitic
| singular present participle auxiliary
| plural present participle auxiliary
+--------------------------------------| verb infinitive
| verb infinitive + clitic
| EXAMPLE
+--------------------| casa, balsamo
| case, ventottesimi
| Bernardo, Monte Isola
+--------------------| buono, narcisistico
| belle, trecentocinquesimi
+--------------------| esser, essere, aver, avere
| è, sarò, saranno, avrete
| essendo, avendo
| essendogli
| sii, sia, abbi, abbiamo
| siategliene, abbiatemi
| stato/a, avuto/a
| stati/e, avuti/e
| statone, avutavela
| statine, avutiti
| essente, avente
| essenti, aventi
+--------------------| sciupare, trascinar
| spulciarsi, risucchiarsi
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.Permettere
di scorporare testo e annotazione;
3.Avere annotazioni ragionevolmente autoesplicative;
4.Non consumare troppo spazio;
5.Permettere all’utente facili aggiunte/modifiche
6.Permettere l’uso del testo annotato su una varietà di sistemi
informatici (tramite “formati aperti”)
7.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 “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

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 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 metamarkup 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)
 Maiuscole e minuscole sono distinte (<p>…</P> è un
errore)
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!!!
(neanche quella dell’ HTML, ma i browser sono a
molto accomodanti su questo punto)

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.Un documento dei contenuti cioé la parte che l’autore vuole
esporre a chi la visualizza o utilizza;
2.Un documento DTD (Document Type Definition) che
specifica i macatori usati e la loro sintassi;
3.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:
"PROLOG“ contiene:
dichiarazione della versione di XML;
commenti (facoltativi);
dichiarazione del DOCUMENT TYPE.
il
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>
N.B. L’uso del rientro variabile
<to>
(“indentation”) non è parte
<name>Verdi</name>
<email>[email protected]</email>
</to>
<oggetto>Esempio in
XML</oggetto>
<body>
<paragrafo>bla bla</paragrafo>
<paragrafo>bla bla</paragrafo>
</body>
</memo>
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”).
name
memo
from
email
to
name
email
oggetto
body
Rossi
[email protected]
Verdi
[email protected]
esempio in XML
paragrafo
paragrafo
bla bla
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
ignorati dal processore, utili per l’autore
Attributi (e loro valori)
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; (non necessario se Latin-1)
> 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>
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”
Una antologia contiene un certo numero
di poesie e nient'altro.
2. Una poesia contiene a volte un singolo
elemento di titolo che precede la prima
strofa, e non contiene mai nessun altro
elemento.
3.A parte il titolo, una poesia consiste solo di
strofe.
4. Una strofa consiste solo di versi ed ogni
verso è contenuto in una strofa.
5. Una strofa non può essere seguita da nulla
tranne che da un'altra strofa, oppure dalla
fine della poesia.
6. Un verso non può essere seguito da nulla
se non da un altro verso, oppure dall'inizio
di una nuova strofa.
1.
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
i
un solo elemento radice
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">
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)
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
(titolo, sottotitolo?, paragrafo+)>
<!ELEMENT PARAGRAFO
(#PCDATA | note)*>
<!ELEMENT note
(#PCDATA)>
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”
Una antologia contiene un certo numero di poesie
e nient'altro.
2. Una poesia contiene a volte un singolo elemento
di titolo che precede la prima strofa, e non contiene
mai nessun altro elemento.
3.A parte il titolo, una poesia consiste solo di strofe.
4. Una strofa consiste solo di versi ed ogni verso è
contenuto in una strofa.
5. Una strofa non può essere seguita da nulla tranne
che da un'altra strofa, oppure dalla fine della
poesia.
6. Un verso non può essere seguito da nulla se non
da un altro verso, oppure dall'inizio di una nuova
strofa.
1.
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:
<!ELEMENT
quartina (verso-1, verso-2, verso-3, verso-4)>
<!ELEMENT poesia (titolo?, (strofa+ | quartina+ | verso+))>
Notare la differenza tra:
<!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: esempi 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;
Obbligatorietà dei valori
1.#REQUIRED:
un valore deve essere specificato.
2.#IMPLIED: non deve essere specificato nessun particolare
valore.
3."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
IDREF
Blake’s poem on the sick rose
<poesiaRef target=’ROSE’/>
EMPTY >
#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;"> <!-- less than, < -->
<!ENTITY gt "&#62;">
<!-- greater than, > -->
<!ENTITY amp "&#38;">
<!-- ampersand, & -->
<!ENTITY apos "&#39;">
<!-- apostrophe, ’ -->
<!ENTITY quot "&#34;">
<!-- 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 >
Con
Nome parametro
elenco attributi
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:
Titolo
Autore1
Personaggio: battuta
Descrizione di scena
Personaggio: battuta
Personaggio: battuta
Epilogo
Postfazione
T2:
Titolo
Autore1, autore2
Personaggio: battuta
Descrizione di scena
Personaggio: battuta
Personaggio: battuta
Descrizione di scena
Epilogo
T5:
Titolo
Autore1
Monologo
Postfazione
T3:
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
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
Scarica

idul11-part4 - clic