1
Documenti XML validi
La Document Type Definition
Dichiarazione di elementi
2
LA DTD La DTD è una descrizione formale della
struttura di una classe di documenti.
Sono specificati: Elementi Attributi Entità Notation
3
Secondo livello di correttezza
Un documento che rispetta i vincoli della propria DTD si definisce VALIDOVALIDO
4
Inserire una DTD in un file XMLInternaInterna
<!DOCTYPE bibliografia [Dichiarazioni]>
EsternaEsterna
<!DOCTYPE bibliografia SYSTEM “bibliografia1.dtd”>
5
Priorità
Le dichiarazioni di una DTD interna vengono elaborate prima delle dichiarazioni di una DTD esterna
6
Esempio<antologia> <poesia><titolo>I</titolo> <stanza>
<verso>Voi ch'ascoltate in rime sparse il suono</verso><verso>di quei sospiri ond'io nudriva 'l core</verso><verso>in sul mio primo giovenile errore</verso><verso>quand'era in parte altr'uom da quel ch'i' sono,</verso>
</stanza> <stanza>
<verso>del vario stile in ch'io piango et ragiono</verso><verso>fra le vane speranze e 'l van dolore</verso><verso>ove sia chi per prova intenda amore</verso><verso>spero trovar pietà, nonché perdono.</verso>
</stanza> </poesia></antologia>
7
La sua DTD
<!ELEMENT antologia (poesia+)><!ELEMENT poesia (titolo?, stanza+)><!ELEMENT titolo (#PCDATA)><!ELEMENT stanza (verso+)><!ELEMENT verso (#PCDATA)>
8
DTD - SintassiDichiarazioneDichiarazione
<!KEYWORD nome contenuto>
KEYWORD:KEYWORD:ELEMENTATTLISTENTITYNOTATIONDOCTYPE
9
Dichiarazione di elementi
<!ELEMENT GenericIdentifier (content model)>
10
GIPuò contenere: Caratteri alfabetici maiuscoli o minuscoli Numeri Trattini Underscore Punti
11
GI 2Non può contenere: Spazi Altra punteggiatura (?^%&,;!\/) Virgolette Caratteri accentati Parentesi Operatori matematici
12
GI 3 = NMTOKENDeve cominciare con una lettera o
un underscore
ATTENZIONE!
UN GI DEVE ESSERE UNICO IN UNA UN GI DEVE ESSERE UNICO IN UNA DTDDTD
XML XML È È CASE SENSITIVE!!!CASE SENSITIVE!!!
13
Content ModelPuò essere espresso con:
Altri elementi<!ELEMENT antologia (poesia+)
Keyword: #PCDATA: Parsed Character Data<!ELEMENT verso (#PCDATA)>
EMPTY: elementi vuoti (SENZA parentesi) <!ELEMENT pagina EMPTY>
14
Indicatori di occorrenza
una occorrenza * zero o più occorrenze ? zero o una occorrenza + una o più occorrenze
15
Esempi<!ELEMENT antologia (poesia+)>= antologia deve contenere almeno una poesia
<!ELEMENT poesia (titolo?, stanza+)>= poesia può contenere un titolo (ma non due) e
deve contenere almeno una stanza
<!ELEMENT stanza (verso*)>= stanza può contenere dei versi
16
Connettori
| almeno uno degli elementi della lista deve comparire
, entrambi gli elementi devono comparire nell’ordine specificato
17
Esempi (titolo?, stanza+)= un titolo opzionale seguito da una o più stanze
(titolo? | stanza+)1. sequenza vuota2. una sequenza composta o da un titolo o da un certo numero di stanze, ma
non da un titolo seguito da stanze
(titolo? | stanza+)*1. sequenza vuota2. una sequenza composta da un titolo (ma mai più di uno alla volta!) e un
numero imprecisato di stanze, in qualsiasi ordine (titolo stanza stanza… titolo stanza titolo stanza stanza stanza titolo…)
3. un numero imprecisato di stanze senza titolo
Esercizio 3
18
Model Groups
Strutturazione complessa del contenuto di un elemento composto da sequenze di elementi o di testo
19
Esempio praticoantologia può contenere tre tipi di poesie:
1. Versi sciolti2. Stanze3. Distici
Ora:<!ELEMENT poesia (titolo?, stanza+)><!ELEMENT stanza (verso+)><!ELEMENT verso (#PCDATA)>
20
Elementi da aggiungere<!ELEMENT distico (primoVerso,
secondoVerso) >
<!ELEMENT primoVerso (#PCDATA) >
<!ELEMENT secondoVerso (#PCDATA)>
21
Tre tipi di poesia
<!ELEMENT poesia (titolo?, (stanza+ | distico+ | verso+))>
È diverso da
<!ELEMENT poesia (titolo?, (stanza | distico | verso )+ )>
22
Mixed Content Model
<!ELEMENT verso (#PCDATA | nome) *>
REGOLEREGOLE:1. #PCDATA deve occupare il primo posto2. | è l’unico connettore accettato3. * indicatore di occorrenza obbligatorio da
applicare al gruppo
23
ESEMPIO COMPLESSO<!ELEMENT ritornello (verso+)>
<!ELEMENT poesia (titolo?, (verso+ | (ritornello?, (stanza, ritornello?)+))) >
Esercizio 4 Esercizio 5 (a casa)
24
Documenti XML validi
Dichiarazione di attributi
25
Dichiarazione di attributi<!ELEMENT poesia (titolo?, stanza+)>
<!ATTLIST poesiaid ID #IMPLIEDstatus (bozza | revisionato | pubblicato) "bozza" >
26
Attributi - sintassi
<!ATTLIST nomeElementonomeAttributo valoriAttributo valoreDefault nomeAttributo2 valoriAttributo2 valoreDefault2 …>
27
Nomi Attributo<!ATTLIST poesia
id ID #IMPLIEDstatus (bozza | revisionato | pubblicato) "bozza" >
Stesse regole previste per i GI NomeAttributo = NMTOKEN
Il nome di un attributo deve essere UNICO all’interno di una lista
28
Valore attributo<!ATTLIST poesia
id ID #IMPLIEDstatus (bozza | revisionato | pubblicato) "bozza" >
1. Lista di valori fra parentesi, separati da |Es: (bozza | revisionato | pubblicato)
2. KeywordEs: ID
29
Keyword contenuto attributi CDATA NMTOKEN NMTOKENS ID IDREF IDREFS ENTITY ENTITIES
30
Valore di default<!ATTLIST poesia
id ID #IMPLIEDstatus (bozza | revisionato | pubblicato) "bozza" >
Un valore espresso fra virgoletteEs: “bozza”
#KeywordEs: #IMPLIED
31
Keyword valore di default attributi
#REQUIRED: un valore deve essere specificato necessariamente;
#IMPLIED: un valore non deve essere necessariamente specificato;
#FIXED "valore": (richiede un valore oltre alla parola chiave) se l’attributo compare con un valore diverso da quello indicato verrà considerato erroneo.
Esercizio 6
32
Attributi ID e IDREF(S): cross referencesEsempio Nella DTD:<!ATTLIST poesia
id ID #IMPLIED >
<!ELEMENT riferimento EMPTY ><!ATTLIST riferimento
target IDREF#REQUIRED>
33
Nel testo:
<poesia id="vita1">…Il primo sonetto del Canzoniere <riferimento
target="vita1" />...
Esercizio 7 (a casa)