38
Lezione 5 DTD, Entità, Parametri, Namespace

Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

Embed Size (px)

Citation preview

Page 1: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

Lezione 5 DTD, Entità, Parametri, Namespace

Page 2: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

la DTD

La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento. Essa associa, cioè, una struttura logica al testo.

La DTD non è un elemento obbligatorio in un file XML (a differenza che in un file SGML)

Page 3: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

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 4: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

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 5: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

DTD type valid

I documenti con le specifiche del 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 un DTD personale, allora si dice che è TYPE VALID ("valido").

Page 6: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

Esempio di un DTD

Per esempio, dato il seguente DTD personale:

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

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

]>

Page 7: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

Documento type valid

il seguente documento risulta TYPE VALID:

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

</persona>

Page 8: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

Esempio 2Consideriamo il 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 9: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

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 10: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

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 11: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

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 12: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

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

Page 13: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

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 14: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

Altri tipi di content specification

TIPO CONTENUTO PERMESSO

EMPTY (vuoto) nessuno

ANY qualsiasi

MIXED Dati o sotto-elementi

ELEMENT SOLO sotto elementi

Page 15: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

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 16: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

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 17: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

<!ELEMENT testo (paragrafo+, autore)><!ELEMENT paragrafo #PCDATA><!ELEMENT autore #PCDATA>…..… <testo>

<paragrafo>djkla;jdksla;jdlks;jkf;</paragrafo><paragrafo>djskl;wueoruoireweui</paragrafo><autore> jdksla;fjkdls;a</autore>

</testo>

Page 18: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

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 19: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

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 20: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

Esempio Antologia

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

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

Page 21: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

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

Page 22: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

Contenuti misti

<!ELEMENT verso (#CDATA | name )* >

Vincoli sul modo per esprimere contenuti “misti”:

1. #CDATA, se appare, deve essere la prima delle alternative.

2. #CDATA deve apparire solo una volta e solo nel gruppo più esterno.

3. Se il gruppo che lo contiene viene ripetuto, bisogna usare la notazione “*”.

Page 23: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

Attributi Come definire attributi in XML:

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

Page 24: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

Attributi: tipi di valori possibiliCDATA: (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;

Page 25: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

Obbligatorietà dei valori1. #REQUIRED: un valore deve essere specificato.2. #IMPLIED: non deve essere specificato nessun particolare

valore.3. "valore di default“

Esempi:

<!ATTLIST poesia iden ID

#IMPLIEDstatus (bozza | rivisto | pubblicato)

#REQUIREDlingua CDATA

“italiano”>

Page 26: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

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>

Page 27: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

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

Page 28: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

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;"> <!-- less than, < --><!ENTITY gt "&#62;"> <!-- greater than, > --><!ENTITY amp "&#38;"> <!-- ampersand, & --><!ENTITY apos "&#39;"> <!-- apostrophe, ’ --><!ENTITY quot "&#34;"> <!-- quote, " -->

Page 29: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

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

Page 30: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

Entità dentro definizioni

Un esempio di entità definita in una DTD ed usata alla riga successiva, per definire una nuova entità:

<!ENTITY xml-url "http://www.w3.org/XML/"><!ENTITY xml-ref "<A

href=’&xml-url;’>&xml-url;</A>">

Page 31: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

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)

Page 32: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

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;

Page 33: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

Parametri: esempio<!ENTITY % a.global

’iden ID #REQUIREDRend CDATA #IMPLIED’>

<!ATTLIST myElement %a.global;another CDATA #IMPLIED >

Con questo sistema i due attributi iden e rend vengono assgnati insieme a myElement.

Nome parametro

elenco attributi

Page 34: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

Un esempio di documento completoUn 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>

Page 35: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

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

Page 36: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

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>

Page 37: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

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

Page 38: Lezione 5 DTD, Entità, Parametri, Namespace. la DTD La DTD (Document Type Definition) ha il compito di fornire informazioni su come sarà fatto un documento

Altro esempio di uso di namespace<?xml version="1.0" ?><html xmlns="http://www.w3.org/HTML/1998/html4"

xmlns:nms="http://www.names.net/address"><head><title>Addresses</title></head><body>

<nms:addresses nms:version="1.0"><hr/><nms:person>

<nms:title>Mr.</nms:title><nms:first>Simon</nms:first><nms:last>Schuster</nms:last>

</nms:person><hr/>

<!-- ... --></body></html>