Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML...

45
Lezione 4 XML

Transcript of Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML...

Page 1: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

Lezione 4 XML

Page 2: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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.

Page 3: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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)

Page 4: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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)

Page 5: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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>

Page 6: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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

Page 7: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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)

Page 8: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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

Page 9: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

SGML

XMLXHTMLHTML

Page 10: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

Le parti di un progetto XMLUn 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.

Page 11: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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.

Page 12: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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.

Page 13: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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

Page 14: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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>

Page 15: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

<?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 dellasintassi XML, ma un modo per aiutare gli esseri umani nella identificazione della struttura. Idem per l’uso dei colori, di grassetto, font, ecc.

Page 16: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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 bla

bla bla

Page 17: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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.

Page 18: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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;

Page 19: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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

Page 20: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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.

Page 21: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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

Page 22: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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

Page 23: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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>

Page 24: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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>

Page 25: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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.

Page 26: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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.

Page 27: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

Esempio DTD: Antologia

<!ELEMENT antologia (poesia+)><!ELEMENT poesia (titolo?,

strofa+)><!ELEMENT titolo (#CDATA) ><!ELEMENT strofa (verso+) ><!ELEMENT verso (#CDATA) >

Page 28: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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

Page 29: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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.

Page 30: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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").

Page 31: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

Esempio di una DTD

Per esempio, dato la seguente DTD personale:

<!DOCTYPE persona [ <!ELEMENT persona (nome,cognome)>

<!ELEMENT nome (#PCDATA)> <!ELEMENT cognome (#PCDATA)>

]>

Page 32: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

Documento type valid

il seguente documento risulta TYPE VALID:

<persona> <nome> Luigi </nome> <cognome> Rossi </cognome>

</persona>

Page 33: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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

]>

Page 34: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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");

Page 35: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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>

Page 36: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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.

Page 37: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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

Page 38: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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)

Page 39: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

Altri tipi di content specification

TIPO CONTENUTO PERMESSO

EMPTY (vuoto) nessuno

ANY qualsiasi

MIXED Dati o sotto-elementi

ELEMENT SOLO sotto elementi

Page 40: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

EsempioTIPO 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à,)>

Page 41: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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.

Page 42: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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 per lo meno UNA volta. L' elemento "note" può essere ripetuto infinite volte oppure essere totalmente assente.

Page 43: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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.

Page 44: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

Esempio Antologia

<!ELEMENT antologia (poesia+)><!ELEMENT poesia (titolo?,

strofa+)><!ELEMENT titolo (#CDATA) ><!ELEMENT strofa (verso+) ><!ELEMENT verso (#CDATA) >

Page 45: Lezione 4 XML. LXML (eXtensible Markup Language) è un linguaggio di markup sviluppato dallo XML Working Group del W3C a partire dal 1996W3C XML è uno.

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?)+ ))) >