idul11-part4-4xclic.cimec.unitn.it/roberto/corsi/IDUL/11-12/idul11-part4-4x.pdf · In un testo i...

19
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 del contesto l’autore, 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?

Transcript of idul11-part4-4xclic.cimec.unitn.it/roberto/corsi/IDUL/11-12/idul11-part4-4x.pdf · In un testo i...

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 del contesto�l’autore, 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 | 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…

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/modifiche6.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 CODIFICAi 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

� 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

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: SciteVedi 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: EMACSVedi 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 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)� 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ò u n pezzo di legno, che piangeva e rideva come un bambi no. </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

<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>

markup per la codifica di informazione strutturale +

markup (parziale) per la codifica di informazione linguistica

XML� Un documento XML è costituito dacomposizioni 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 documentofile 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.

�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”).

XML - struttura ad albero

[email protected]

memo from

to

body

oggetto

name

email

name

email

paragrafo

paragrafo

Rossi

[email protected]

Verdi

esempio in XML

bla blabla 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;�Commentiignorati 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.

� 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 - ATTRIBUTI 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></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. 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.

Esempio DTD: Antologia

<!ELEMENT antologia (poesia+)><!ELEMENT poesia (titolo?, strofa+)><!ELEMENT titolo (#CDATA) ><!ELEMENT strofa (verso+) ><!ELEMENT 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 2Consideriamo 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");

OsservazioniUna 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)>

L' elemento “sottotitolo“, se c’è, è unico. L' elemento "paragrafo" deve essere presente almeno 1 volta. L' elemento "note" può essere ripetuto oppure 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. 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.

Esempio Antologia

<!ELEMENT antologia (poesia+)><!ELEMENT poesia (titolo?, strofa+)><!ELEMENT titolo (#CDATA) ><!ELEMENT strofa (verso+) ><!ELEMENT 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 #IMPLIEDstatus (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 valori1.#REQUIRED: un valore deve essere specificato.2.#IMPLIED: non deve essere specificato nessun particolare valore.3."valore di default“

Esempi:

<!ATTLIST poesiaiden ID #IMPLIEDstatus (bozza | rivisto | pubblicato) #REQUIREDlingua 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 EMPTY ><!ATTLIST poesiaRef

target IDREF #REQUIRED >

Blake’s poem on the sick rose<poesiaRef target=’ROSE’/>

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 predefiniteEntità 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.sgPUBLIC "-//TEI//TEXT Guidelines Chapter on XML//EN""p4chap2.xml">