Linguaggi di markup

Download Report

Transcript Linguaggi di markup

Linguaggi di markup
Marco Mesiti
[email protected]
Esempio: contatti in rubrica
Laura Papaleo
123.2342323232
[email protected]
Franco Tallero
Via degli Ulivi 19/19
Genova, 16100
010.28389239 (preferito)
346.92938281
[email protected]
Esempio: address book in XML
<?xml version="1.0"?>
<address-book>
<entry>
<name>Laura Papaleo </name>
<tel> 123.2342323232 </tel>
<email href=" [email protected]"/>
</entry>
<entry>
<name>Franco Tallero</name>
<address>
<street>Via degli Ulivi 19/19</street>
<postal-code>16100</postal-code>
<locality> Genova</locality>
</address>
<tel preferred="true"> 010.28389239</tel>
<tel> 346.92938281</tel>
<email href="[email protected] "/>
</entry>
</address-book>
XML Sintassi: Elemento
Un elemento è un blocco elementare dei
documenti XML
Elemento
Start-tag
Contenuto
End-tag
Un elemento è una parte del documento
delimitata da 2 TAG
Esempio:
<AUTHOR> Laura Papaleo </AUTHOR>
XML Sintassi: Tag (1/2)
I tag appaiono, normalmente, in
coppia,
 tag di apertura (start-tag)
 tag di chiusura (end-tag)
<NOME_TAG> Laura Papaleo </NOME_TAG>
Il tag rappresenta il nome dell’elemento
XML:
Struttura gerarchica degli elementi
Libro
libro
Capitolo
sezione
Capitolo
Capitolo
Capitolo
sezione
sezione
sezione
Struttura gerarchica degli elementi
No!
Libro
Capitolo
sezione
Capitolo
sezione
Ogni elemento
deve essere
completamente
incluso da
un altro
elemento
Contenuto di un Elemento
altri elementi (sub-elements)
<address>
<street> 33, Terry Dr.</street>
<city> Morristown </city>
</address>
testo (data content)
<street> 33, Terry Dr.</street>
contenuto misto (mixed content)
<par>Today,
<date>05-06-2000</date> Mr.
<name>Bill Gates</name>
is in California to talk to ...
</par>
Elemento documento
(Document Element)
E’ l’elemento più esterno in un
documento XML
Viene anche detto elemento radice
Contiene tutti gli elementi del
documento esempio:
<libro>
… …
</libro>
Deve sempre esistere
Elemento documento
(Document Element)
No!
Capitolo
sezione
Capitolo
sezione
Non è possibile
avere
più elementi a
livello radice
Elemento vuoto (Empty Elements)
E’ un elemento senza contenuto
 Non ha il tag finale
 Ha una particolare rappresentazione del Tag iniziale
Esempio:
<foto source=“ciao.gif”/>
<email indirizzo=“[email protected]”/>
XML: Definire gli attributi
Un elemento può avere degli attributi
Gli attributi possono essere pensati come
aggettivi che descrivono gli elementi
Ogni attributo ha nome e valore
Tutti gli attributi di un elemento devono
essere distinti
<AUTHOR nome_attributo=”valore_attributo">
Marco Mesiti
</AUTHOR>
Esempio di elemento con attributi
<AUTHOR laurea=”informatica">
Laura Maria Rita
</AUTHOR>
<AUTHOR laurea=”informatica">
<name>Laura</name>
<name>Maria Rita</name>
<lastname>Papaleo</lastname>
</AUTHOR>
<AUTHOR laurea=”informatica”
name1=”Laura” name2=”Maria Rita”
lastname=”Papaleo”/>
Elementi Vs Attributi
Quando è meglio usare elementi o attributi
per rappresentare un’informazione?
Sicuramente elementi se si tratta di
informazione strutturata
Un elemento,
quando:



Si richiede di recuperare i
dati velocemente
E’ visibile a tutti
E’ rilevante per il significato
del documento
Un attributo,
quando:
 Esprime una scelta
 E’ utilizzato dal sistema
 Non è rilevante per il
significato del documento
Un documento XML
Un file XML è un semplice file di testo
con tag XML al suo interno
Esso ha una estensione .xml
nome_file.xml
Un file XML contiene tre sezioni
 Una dichiarazione che si tratta di un file XML
 Una dichiarazione (opzionale) del tipo di documento e
sul nome della DTD associata
 Il contenuto del documento con tag XML
Un esempio di documento XML (1)
BOOKS.xml
<?xml version="1.0"?>
<BOOKLIST>
<BOOK>
<TITLE edition=”2000">XML Tutorial</TITLE>
<AUTHOR>Laura Papaleo</AUTHOR>
</BOOK>
…
<BOOK>
<TITLE edition=”2003" type=”XML">
Strutturare le informazioni nel web
</TITLE>
<AUTHOR>Laura Papaleo</AUTHOR>
<AUTHOR>Franco Tallero</AUTHOR>
<AUTHOR>Marco Mesiti</AUTHOR>
</BOOK>
</BOOKLIST>
Un esempio di documento XML (2)
ORDERS.xml
<?xml version="1.0"?>
<Orders>
<SalesOrder SONumber="12345">
<Customer CustNumber="543">
<CustName>ABC Industries</CustName>
<Street>123 Main St.</Street>
<City>Chicago</City>
<State>IL</State>
<PostCode>60609</PostCode>
</Customer>
<OrderDate>981215</OrderDate>
<Line LineNumber="1">
<Part PartNumber="123">
<Description> Turkey wrench: Stainless steel,
one piece construction, lifetime guarantee.
</Description>
<Price>9.95</Price>
</Part>
<Quantity>10</Quantity>
</Line>
</SalesOrder>
</Orders>
Un semplice esempio (3)
LEASE.xml
<?xml version="1.0"?>
<Lease>
<Leasee>ABC Industries </Leasee>
agrees to lease the property at
<Address>
123, Main St., Chicago, IL
</Address>
from
<Lessor>
XYZ Properties
</Lessor>
for a term of not less than
<LeaseTerm TimeUnit=“Months”> 18 </LeaseTerm>
at the cost of the
<Price Currency=“USD” TimeUnit=“Months”>
1000
</Price>
</Lease>
Dichiarazione di documento XML
Un file XML comincia sempre con una
dichiarazione XML
Sta ad indicare che
il documento è un file XML
la versione di XML usata (attualmente sempre 1.0)
La dichiarazione XML è del tipo:
<?xml version="1.0"?>
Dichiarazione di documento XML
Oltre all’indicazione della versione può
essere inserito:
 il set di caratteri utilizzato  attributo encoding
 il fatto che l’interpretazione del documento dipende da
altri documenti  attributo standalone
<?xml version="1.0” encoding = “UTF-8”
standalone = “no”?>
Questi sono i valori di default. E’
possibile non specificarli
Dichiarazione della DTD del documento
Prima del root element (l’elemento
radice) può essere dichiarata la DTD
che verrà utilizzata
Es: <!DOCTYPE Libro SYSTEM “libro.dtd”>
Vedremo in seguito come può essere
strutturata tale dichiarazione
DTD
Document Type Definition
Sintassi Di Una DTD
DTD - Document Type Definition
E’ opzionale, ma è consigliabile la presenza
E’ un insieme di regole per definire la
struttura di un documento XML
Tali regole:



stabiliscono gli elementi che possono essere usati
stabiliscono gli attributi da inserire negli elementi
impongono vincoli sulle relazioni tra gli elementi (fratelli,
elemento-sottoelemento,...)
Il DTD è un modo per fare un check sulla
strutturazione corretta di un documento XML
Perché è importante usare i DTD?
Sono utili per i programmatori. E’ la
definizione del tipo di documento che
andranno a processare
Utili per definire fogli di stile
Utile per creare documenti “corretti”.
Il DTD può essere visto come un vincolo
sull’informazione da inserire nel documento
Utili per creare interfacce dinamiche per i
documenti XML
DTD - rappresentazione ad albero
Un DTD può essere visto come un albero
Libro
Capitolo +
I nodi dell’albero rappresentano:
 elementi
 attributi
Par +
Sezioni
I nomi di elementi e attributi possono essere seguiti
da caratteri speciali (+,*,?)
Gli archi dell’albero permettono di rappresentare la
relazione
elemento-sottoelemento, elemento-attributo
Document Type Definition: Elementi
Gli elementi possono essere contenitori o
essere vuoti
Gli elementi contenitori possono contenere:
 testo
 altri elementi (sottoelementi)
 un mix dei precedenti
Nel caso di elementi che contengono
sottoelementi, con il DTD si può specificare
come i “sottoelementi occorrono”
Document Type Definition:
occorrenza di un sottoelemento
Un sottoelemento potrebbe essere
obbligatorio
Ad esempio un libro deve avere un titolo,
quindi l’elemento libro deve avere un
sottoelemento titolo
titolo
Usando la grammatica della DTD
<!ELEMENT libro (… titolo …)>
Document Type Definition:
Occorrenza di un sottoelemento
Un sottoelemento può essere opzionale
Ad esempio, un libro può avere un
sottotitolo, quindi l’elemento sottotitolo è
opzionale per l’elemento libro
sottotitolo
Usando la grammatica della DTD
<!ELEMENT libro (… sottotitolo? …)>
Document Type Definition:
Occorrenza di un sottoelemento
Un sottoelemento può essere ripetibile
Ad esempio, un libro ha degli autori, almeno
uno
Quindi l’elemento libro può avere una lista di
elementi autore, comunque almeno uno
autore
Usando la grammatica della DTD
<!ELEMENT libro (… autore+ …)>
DTD - occorrenza di un sottoelemento
Un sottoelemento può essere ripetibile e
opzionale
Ad esempio, un libro può avere dei
traduttori, oppure no
Quindi l’elemento libro può avere una lista di
elementi traduttore, ma anche nessuno
traduttore
Usando la grammatica della DTD
<!ELEMENT libro (… traduttore* …)>
DTD - Sequenze di sottoelementi
Un libro presenta diverse informazioni: gli
autori, il titolo, eventualmente i traduttori e
così via. L’elemento libro può contenere
quindi una sequenza di sottoelementi
titolo
autore
sottotitolo
Usando la grammatica della DTD
<!ELEMENT libro (titolo, autore*, sottotitolo?, …)>
Nota: è rilevante l’ordine
DTD - Alternative di sottoelementi
Un libro può avere un IBDN oppure un
codice
ISBN
codice
Usando la grammatica della DTD
<!ELEMENT libro (… ISBN | codice …)>
DTD - Riassumendo
I costrutti visti possono essere
combinati nel modo preferito,
al fine di modellare l’informazione
<!ELEMENT A (B*, C, D?)>
<!ELEMENT A (B | C+)>
<!ELEMENT A (B, (C | D+)?, E*)>
DTD per una ricetta
DTD ricettario.dtd
<!ELEMENT ricettario (ricetta)*>
<!ELEMENT ricetta (titolo, ingred+,
passo+, note?)>
<!ATTLIST ricetta numero ID #REQUIRED>
<!ELEMENT titolo (#PCDATA)>
<!ELEMENT ingred (#PCDATA)>
<!ELEMENT passo (#PCDATA)>
<!ELEMENT note ANY>
<!ATTLIST passo numero ID #REQUIRED>
Dichiarare un
elemento non vuoto (1/2)
<!ELEMENT agenda (contatto*)>
<!ELEMENT contatto (nome, indirizzo+, telefono*,
email*, foto?)>
L'agenda sarà composta da zero o più
contatti con:
un nome;
uno o più (simbolo +) indirizzi;
zero o più numeri di telefono;
zero o più indirizzi di email;
una o nessuna (simbolo ?) fotografia.
Dichiarare un
elemento non vuoto (2/2)
<!ELEMENT nome (#PCDATA)>
Il nome è semplicemente una stringa
di caratteri,
Eventuali entità presenti nella stringa
vengono trasformate nei caratteri
corrispondenti
Dichiarazione di un elemento vuoto
<!ELEMENT foto EMPTY>
Ad esempio l’oggetto foto potrebbe
pensarsi equivalente al tag HTML
<IMG>
Pertanto non ha un marcatore di
chiusura né tantomeno un contenuto
Possiede solo degli attributi
Dichiarazione di un elemento ANY
<!ELEMENT note ANY>
Indica che il contenuto dell’elemento
può essere arbitrario
In altre parole, non viene fissato alcun
vincolo sul contenuto dell’elemento
Dichiarazione
elemento “mixed-content”
Abbiamo detto che un elemento può
avere un contenuto misto
Questo può essere richiesto a livello di
DTD
La dichiarazione di un elemento a
contenuto misto deve seguire le
seguenti regole
 viene dichiarato una alternativa di sottoelementi
 il primo sottoelemento deve essere #PCDATA
 L’alternativa di sottoelementi deve essere ripetibile
Dichiarazione
elemento “mixed-content”
Vediamo un esempio:
<!ELEMENT emph (#PCDATA|sub|super)*>
<!ELEMENT sub (#PCDATA)>
<!ELEMENT super (#PCDATA)>
<emph>
H <sub>2</sub> O è l’acqua
</emph>
Dichiarazione di attributi
<!ATTLIST foto src CDATA #REQUIRED desc
CDATA #IMPLIED>
src, nome del file bitmap necessario (#REQUIRED)
desc, descrizione è opzionale (#IMPLIED)
<!ATTLIST telefono tipo (casa | ufficio |
cellulare) 'casa'>
l’elemento telefono ha un attributo tipo,
che indica se il numero è di casa, dell'ufficio o di un
cellulare
il valore di default è 'casa’
Tipi degli attributi (1/2)
CDATA
Stringhe di caratteri.
ID
nome che occorre unico
all'interno dello stesso
documento
IDREF
E' un riferimento ad un
elemento che ha un attributo di
tipo ID con valore IDREF
IDREFS
E' una lista di IDREF separati
da uno spazio bianco
Tipi degli attributi (2/2)
ENTITY
nome di una entità dichiarata
ENTITIES
E' una lista di ENTITY separati
da uno spazio bianco
NMTOKEN
E' una stringa di una parola
NMTOKENS
E' una lista di NKTOKEN
separati da uno spazio bianco
Enumerazione
E' una lista di nomi come
valori che l'attributo può
assumere
I nomi sono separati da virgola
e la lista è racchiusa tra par.
tonde
Valori di default per gli attributi
#REQUIRED
Obbligatorio
#IMPLIED
Non obbligatorio e non viene
assegnato un valore di default
"valore"
Non è obbligatorio specificare un
valore per l'attributo
#FIXED "valore"
Non è obbligatorio specificare un
valore per l'attributo ma se lo
specifica, il valore può essere
quello prefissato
si
solo
Uso di identificatori e riferimenti
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ATTLIST
biblioteca (autori,libri)>
autori (autore)*>
libri (libro)*>
autore (nome,cognome,dataNascita)>
autore ident ID #REQUIRED>
<!-- … dichiarazione elementi di autore -->
<!ELEMENT libro (titolo, scrittoDa, data)>
<!ELEMENT scrittoDa (#PCDATA)>
<!-- … dichiarazione elementi di libro -->
<!ATTLIST scrittoDa autore IDREFS>
…
Uso di identificatori e riferimenti
<biblioteca>
<autori>
<autore ident=“001”> … </autore>
<autore ident=“002”> … </autore>
<autore ident=“003”> … </autore>
…
</autori>
<libri>
<libro scrittoDa=“001”> … </libro>
<libro scrittoDa=“002 003”> … </libro>
<libro scrittoDa=“003 001 002”> z
…
</libro>
…
</libri>
Un esempio completo - la DTD
DTD agenda.dtd
<!ELEMENT agenda (contatto*)>
<!ELEMENT contatto (nome, indirizzo+,
telefono*, email*,foto?)*>
<!ELEMENT nome (#PCDATA)>
<!ELEMENT indirizzo (via, numero, citta,
cap, provincia?)>
<!ELEMENT via (#PCDATA)>
<!ELEMENT numero (#PCDATA)>
<!ELEMENT citta (#PCDATA)>
<!ELEMENT cap (#PCDATA)>
<!ELEMENT provincia (#PCDATA)>
<!ELEMENT telefono (#PCDATA)>
Dati
Parsed
Un esempio completo - la DTD
… continua
<!ATTLIST telefono tipo (casa |ufficio
| cellulare)'casa'>
Valore
predefinito
<!ELEMENT email (#PCDATA)>
<!ELEMENT foto EMPTY>
Elemento vuoto
<!ATTLIST foto src CDATA #REQUIRED desc
CDATA #IMPLIED>
<!ENTITY BO "40100">
Entità
<!ENTITY MO "41100">
Dichiarate
<!ENTITY RE "42100">
Un esempio completo - XML
Agenda.xml
<?XML version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE agenda SYSTEM "agenda.dtd">
Radice
<agenda>
DTD associata
<contatto>
<nome>Pinco Pallino</nome>
<indirizzo>
<via>Via Incognita</via>
<numero>10</numero>
<citta>Bologna</citta>
<cap>&BO;</cap>
</indirizzo>
Richiamo entità
della DTD
…continua
Un esempio completo - XML
… continua
<telefono>051-123456</telefono>
<telefono tipo="ufficio">
051-654321</telefono>
<email> [email protected] </email>
<foto src="pinco.gif"
desc="Una foto di Pinco Pallino"/>
</contatto>
</agenda>
Elemento vuoto foto
Un altro esempio
<!DOCTYPE Orders[
<!ELEMENT Orders(SalesOrder)+>
<!ELEMENT SalesOrder(Customer,OrderDate,Line*)>
<!ELEMENT
Customer(CustName,Street,City,State,PostCode,tel*)>
<!ELEMENT CustName (#PCDATA)>
<!ELEMENT Street (#PCDATA)>
<!ELEMENT State (#PCDATA)>
<!ELEMENT PostCode (#PCDATA)>
<!ELEMENT tel (#PCDATA)>
<!ELEMENT OrderDate (#PCDATA)>
<!ELEMENT Line (Part,Quantity)>
<!ELEMENT Part(Description,Price)>
<!ELEMENT Quantity (#PCDATA)>
<!ELEMENT Description (#PCDATA)>
<!ELEMENT Price (#PCDATA)>
<!ATTLIST SalesOrder SONumber CDATA #REQUIRED>
<!ATTLIST Customer CustNumer CDATA #REQUIRED>
<!ATTLIST Line LineNumber CDATA #IMPLIED>
<!ATTLIST Part PartNumber CDATA #REQUIRED>
Un altro esempio 2
<!DOCTYPE WorldLawBulletin[
<!ELEMENT WorldLawBulletin (Law*,BluePageReport?)>
<!ELEMENT Law (Topic,Summary)>
<!ELEMENT Topic (#PCDATA)>
<!ELEMENT Summary ANY>
<!ELEMENT BluePageReport (Section+)>
<!ELEMENT Section (Law+)>
<!ATTLIST WorldLawBulletin Date CDATA
#REQUIRED>
<!ATTLIST Law Id ID #REQUIRED
Country CDATA #REQUIRED
RelatedLaws IDREFS #IMPLIED>
<!ATTLIST Section GeoArea CDATA #REQUIRED>
]>
Un altro esempio 2
<WorldLawBulletin Date=“8/8/1999”>
<Law Country=“USA” RelatedLaws = “LK75”/>
<Topic>Taxation</Topic> <Summary>...</Summary>
</Law>
<Law Id=“LK75” Country=“Italy”/>
<Topic>Import-Export</Topic> <Summary>...</Summary>
</Law>
<BluePageReport>
<Section GeoArea=“Europe”>
<Law Country=“Germany”/>
<Topic>Guns</Topic> <Summary>...</Summary>
</Law>...
</Section>
<Section GeoArea=“NorthAmerica”>
<Law Country=“USA”/>
<Topic>Transportation</Topic> <Summary>...</Summary>
</Law> ...
</Section>
</BluePageReport>
</WorldLawBulletin>
Struttura fisica di un
documento XML
Le entità
XML:
Dichiarazione ed utilizzo di Entità
Abbiamo visto come organizzare logicamente
l’informazione
Al fine di razionalizzare, riusare e rendere
modulare l’informazione dal punto di vista
fisico, vengono introdotte le entità
Inoltre, le entità vengono utilizzate per



rappresentare dati non XML (ad esempio: dati binari)
caratteri non standard
abbreviazioni per frasi e markup
Generalizzando le entità possono essere viste
come delle macro
XML:
Dichiarazione ed utilizzo di Entità
Le entità risultano utili quando l’informazione:
è utilizzata in posti diversi e la duplicazione può
causare errori e spreco di tempo
può essere rappresentata differentemente in
sistemi eterogenei
è parte di un documento di grandi dimensioni e
per ragioni pratiche è meglio spezzarla in più
parti
è di un formato diverso da quello di XML
XML:
Definizione di Entità
Entità
Unità di informazione identificata da un nome
Entità documento (document entity)
file utilizzato per rappresentare l’intero
documento
L’entità documento, a differenza delle altre
entità, non ha nome
L’entità documento può:


essere un contenitore di altre entità (entità componenti)
contenere direttamente tutto il documento
XML:
Dichiarazione ed utilizzo di Entità
Dichiarare entità all'interno di una DTD
valore
nome
<!ENTITY xml "eXtensible Markup Language">

Ogni qual volta il parser incontra l'entità &xml; questa viene
sostituita con la stringa associata.
<!ENTITY cap1 SYSTEM ”/book/capitolo1.xml">
 Ogni qual volta il parser incontra l'entità &cap1; al suo posto
viene inserito il contenuto del file specificato
Dichiarazione di entità Vs riferimento ad
entità
XML: Nome di un’entità
Il nome di un’entità deve seguire la
seguente grammatica
[ L | - | : ]{ L | . | _ | - | : | D }*
dove L è un lettera dell’alfabeto e D un
digit
 Es: :myEnt, my.Ent12
 Il nome è case-sensitive
 Es: myEnt è diverso da MyEnt
XML: Valore di un’entità
Il valore di un’entità è racchiuso tra
“ ” oppure ‘ ’
 Esempio
“World Wide Web” o ‘World Wide Web’
Si usano ‘ ’ quando all’interno si
usano “ ”
 Esempio
‘Egli disse “Arrivederci” e se ne andò’
XML: Entità built-in
Ogni processore XML ha un piccolo
insieme di entità predefinite
Ad esempio:
 &lt;
 &gt;
 &amp;
 &apos;
 &quot;





‘<’
‘>’
‘&’
‘‘’
‘“’
Queste entità sono usate per non
creare problemi al processore XML
XML: Entità carattere
Una entità carattere viene introdotta per
rappresentare un carattere in un certo set di
caratteri
Un riferimento ad entità carattere ha lo
stesso formato di un riferimento ad entità
testuale
Viene aggiunto un # tra & e il nome
dell’entità

Es: &#60 è uguale a ‘<’ in ASCII; &nbsp = blank_space
XML: Entità testuali interne
DTD
Internal Text Entity Declaration
<!ENTITY WWW "World Wide Web">
XML
Entity Reference
<p>We all use the &WWW;.</p>
Logically equivalent to
actually appearing
<p>We all use the World Wide Web.</p>
External Text Entities
Mylife.xml
DTD…
<mylife>
Chap1.xml
<teen>yada yada</teen>
Chap2.xml
<adult>… … … … </adult>
</mylife>
Gli elementi logici
possono essere
divisi
in entità fisiche
distinte
External Text Entities
DTD
External Text Entity Declaration
<!ENTITY chap1 SYSTEM "http://...chap1.xml">
XML
Entity Reference
URL
<mylife> &chap1; &chap2;</mylife>
<mylife>
<teen>yada yada</teen>
<adult> blah blah</adult>
</mylife>
Logically equivalent to
inlining file contents
Entità: Unparsed (& "Binary")
DTD
<!ENTITY fusion SYSTEM "http://...
fusion.ps" NDATA ps>
<!attlist fullPaper source ENTITY #REQUIRED>
<!NOTATION ps SYSTEM "ghostview.exe">
XML
<fullPaper source="fusion"/>
XML Entità:
Dichiarazione di notazioni
<!NOTATION GIF SYSTEM "GIF">
Quando ci si riferisce a dati binari esterni,
occorre dichiarare una notation che
identifichi il tipo di dati a cui ci si riferisce
L'applicazione che riceve l'informazione di
notazione provvederà ad utilizzarla per
interpretare correttamente l'entità esterna
XML Entità:
Dichiarazione Entità Parametriche
Vengono espanse e interpretate nella DTD e
non espanse e passate all’applicazione
Presenti solo nella DTD con % davanti
<!ENTITY % indr_corto
citta)>’>
‘<!ELEMENT indirizzo (via,
<!ENTITY % indr_lungo ‘<!ELEMENT indirizzo (via,
numero, citta, cap, provincia)>’>
poi utilizzo...
<!ELEMENT contatto (nome, cognome,%indr_corto;)> …
XML Entità:
Esempio di entità parametriche
Common.dtd
<!ENTITY % alarmStatusType "UnderRepair | Critical | … ">
<!ENTITY % availabilityStatusType "InTest | Failed |
PowerOff | OffLine | … ">
…
…
<!ENTITY % statusAttributes
"alarmStatus (%alarmStatusType;) #REQUIRED
availabilityStatus (%availabilityStatusType;) #REQUIRED
controlStatus (%controlStatusType;) #REQUIRED
standByStatus (%standByStatusType;) #REQUIRED
unknownStatus (%boolean;) #REQUIRED">
Character Set
Set di caratteri
I markup di XML e il contenuto dei documenti
possono essere riconosciuti solo quando i
caratteri utilizzati conformano a uno schema
di codifica standard
Gli standard più importanti:
 ASCII
 ISO 8859
 UNICODE
 ISO 10646
Documento XML: I Caratteri
Un documento XML è una sequenza di
caratteri (characters) che descrivono:
 Contenuto del documento
 Tags
Le macchine “non capiscono” i
caratteri
Per memorizzare i caratteri si usano
codici
T
84
Character Set
Character set
insieme di corrispondenze numero-carattere
Font
insieme di corrispondenze
numero-“formato carattere”
Ci possono essere dei problemi quando si
passa da una macchina all’altra perché
cambia il legame numero-carattere
ASCII: American Standard
Code for Information Interchange
Standard per un set di caratteri
Assegna un significato comune per i
caratteri utilizzati
Esempio
in ASCII il numero 84 rappresenta la
‘T’
ASCII definisce un valore per solo 127
caratteri (rappresentazione a 7-bit)
American Standard
Code for Information Interchange
L’ottavo bit viene lasciato come
check-bit
ASCII è uno standard ISO/IEC 646
Problema: Come faccio a
rappresentare altri caratteri, oltre ai
127?
Extended ASCII
Nei sistemi più moderni non è necessario un
bit di controllo
 rappresentazione a 8 bit (255 caratteri)
Nuovo problema
non c’era accordo su quali caratteri
rappresentare con i “nuovi” 128 numeri
Esempio:
Apple:
MS-DOS:
è – 142
è – 130
Extended ASCII
Questo problema è stato affrontato da
ISO 8859 che definisce (tra gli altri)
un character set standard per
l’alfabeto latino (chiamato 8859/1)
Questo standard è utilizzato da Web
browsers, Microsoft Windows, Sun OS
UNIX
Compatibile con ISO 646. L’ottavo bit è
0 per i primi 127 caratteri
Extended ASCII
‘/1’ identifica solo una versione di 8859
Ci sono però altre varianti per coprire i
requisiti di altre lingue
Esempio:
ISO 8859/6 ASCII + Arabic
ISO 8859/7 ASCII + Greco moderno
Problema:
Si riescono a rappresentare ancora “pochi
caratteri”
UNICODE e ISO/IEC 10646
Per affrontare i problemi dei
precedenti standard si è pensato di
usare più di un byte per codificare ogni
carattere
Nascono così due nuovi standard:
UNICODE
ISO/IEC 10646
Standard UNICODE: Caratteristiche
Versione attuale 2.1
Primo tentativo ad usare 2 byte per
rappresentare caratteri (65.535 caratteri)
...ma continua ad avere problemi per
rappresentare il cinese
 viene introdotto ISO/IEC 10646: usa fino a
4 byte (oltre 2 milioni di caratteri)
XML ha adottato lo standard ISO 10646 come
formato di codifica dei caratteri
ISO/IEC 10646
ISO 10646 è formato da un insieme di
schemi di codifica:
UCS (Universal Character Set)
BMP (Basic Multilanguage Plane)
Schema
fisso
UTF (UCS Trasformation Format)
UTF-8
UTF-16
Schema
variabile
Dichiarazione set di caratteri in XML
Nella dichiarazione di “documento XML”
<?xml ... encoding=“UTF-8” ... ?>
Questo è il formato di default (questo
attributo non è obbligatorio)
Curiosità
si assume che il formato di un documento è
XML se i primi 4 byte del file sono
‘3C 3F 78 6D’ (corrispondono a ‘<?xm’)
Dichiarazione set di caratteri in XML
Si richiede la dichiarazione della
codifica del documento per gli
standard diversi da UTF-8 e UTF-16
Esempio
Per dichiarare ISO 8859 occorre:
<?xml ... encoding=“ISO-8859-1” ... ?>
Riferimenti per gli standard di codifica
ISO (International Organization for Standardization).
ISO/IEC 10646-1993 (E). Information technology -- Universal Multiple-Octet
Coded Character Set (UCS) -- Part 1: Architecture and Basic Multilingual Plane.
[Geneva]: International Organization for Standardization, 1993 (plus
amendments AM 1 through AM 7). ISO/IEC 10646-2000
ISO (International Organization for Standardization).
ISO/IEC 10646-1:2000. Information technology -- Universal Multiple-Octet Coded
Character Set (UCS) -- Part 1: Architecture and Basic Multilingual Plane.
[Geneva]: International Organization for Standardization, 2000. Unicode
The Unicode Consortium.
The Unicode Standard, Version 2.0. Reading, Mass.: Addison-Wesley Developers
Press, 1996. Unicode3
The Unicode Consortium.
The Unicode Standard, Version 3.0. Reading, Mass.: Addison-Wesley Developers
Press, 2000. ISBN 0-201-61633-5.
Documenti well-formed
e documenti validi
Documento XML ben formato (1/2)
Presenza “elemento radice”
 cioè un elemento che contiene tutti gli elementi del
documento
Bilanciamento dei marcatori
 Ad ogni marcatore di apertura deve corrisponderne
uno di chiusura
 a meno di un elemento vuoto --> in questo caso <tagvuoto/>
Valori degli attributi tra virgolette
<img src="image.gif" width="50"
height="40" border="0"/>
Documento XML ben formato (2/2)
Uso di entità dichiarate
L'utilizzo di entità è consentito solo previa
dichiarazione delle stesse all'inizio del documento XML
o nella DTD
Al posto dei caratteri speciali &, <, >, ', ", devono
essere usate le entità interne predefinite

&amp; &lt; &gt; &apos; &quot;
Tutti gli altri caratteri speciali devono
essere dichiarati prima di poter essere
usati
Un esempio SI!
<?XML version="1.0"?>
<!DOCTYPE ricettario
[
<!ENTITY g "grammi">
]>
<ricettario>
<ricetta numero="1">
<titolo>...</titolo>
<ingred>200 &g; di ... </ingred>
<ingred>...</ingred>
<passo numero="1">...</passo>
<passo numero="2">...</passo>
</ricetta>
</ricettario>
Un esempio NO!
<?XML version="1.0"?>
<!DOCTYPE ricettario SYSTEM “ricettario.dtd”>
Entità speciale
<ricettario>
non dichiarata
<ricetta numero="1">
<titolo>...
<ingred>200 &g; di ... </ingred>
<ingred>...</ingred>
Tag non
<passo numero=1>...</passo>
chiuso
<passo numero=2>...</passo>
</ricetta>
</ricettario>
Valori non tra
virgolette
Documento XML Valido
Un documento XML è valido se
E’ ben formato
Rispetta una struttura descritta in una
Document Type Definition
I documenti XML devono essere validi nel caso di
strutturazione di documenti di una certa importanza
Esempio:
in una azienda dove è fondamentale mantenere una
stessa struttura
Document Type Definitions (DTDs)
Quando un documento XML viene processato,
esso viene confrontato con la DTD associata
(se ce ne è una)
Questo confronto è un processo che viene
definito validazione e viene attuato dal
parser
Un parser è un software che fa un check per
assicurarsi che il documento XML segua una
particolare sintassi
Parser per XML
Un non-validating parser controlla che un
documento segua le regole di sintassi XML

costruisce un albero dai TAG del documento
Un validating parser
 controlla la sintassi corretta del documento
 costruisce l'albero dei tag
 confronta l'uso dei tag nel documento per essere conforme alle
regole della DTD
la DTD è necessaria solo nel caso in cui si
voglia creare un documento XML valido
Namespace
XML:
Namespace (Raccom. W3C 1999)
Attraverso i Namespace è possibile dichiarare
un insieme di nomi il cui significato non è
ambiguo, cioè tutti sono d’accordo sul loro
significato
i Namespace permettono di distinguere 2
elementi con stesso nome, ma con significato
diverso
Un Namespace XML è una collezione di nomi
identificati da un URL
vengono usati nel doc. XML come nomi di
elementi e di attributi
XML: Namespace
Identificare i namespaces che verranno usati
Identificare dove i tag che hanno bisogno di
namespace sono posizionati
Il tag lo si fa precedere dal namespace
relativo
Il nome di un elemento/attributo è
composto da 2 parti: prefix:name
Dichiarare e usare i Namespaces
A livello di documento
<document xmlns:name_sp=“fixed_URL”>
<name_sp:tag_nm> content </tag_nm>
ambiguità
<Info>
<person>
<name>Rosalie Panelli</name>
<address>33 Terry Dr.</address>
</person>
<webSite>
<name>XML Italia</name>
<address>http://www.xml.it</address>
</webSite>
</Info>
Dichiarare e usare i Namespaces
Soluzione all’esempio
<Info>
<person xmlns:person=“http://namespaces.xml.it/person”>
<person:name>Rosalie Panelli</person:name>
<person:address>33 Terry Dr.</person:address>
</person>
<webSite
xmlns:webSite=“http://namespaces.xml.it/webSite”>
<webSite:name>
XML Italia
</webSite:name>
<webSite:address>
http://www.xml.it
</webSite:address>
</webSite>
</Info>
Dichiarare e usare
i Namespaces all’interno di DTD
Il namspace può essere dichiarato a
livello di DTD
Tutti i documenti che conformano con
il DTD usano tale namespace
<!ELEMENT person
(person:name, person:address)>
<!ATTLIST person xmlns:person CDATA #FIXED
“http://namespaces.xml.it/person”>
<!ELEMENT person:name
(#PCDATA)>
<!ELEMENT person:address (#PCDATA)>