Linguaggi di markup

Preview:

DESCRIPTION

Linguaggi di markup. Marco Mesiti mesiti@disi.unige.it. Esempio: contatti in rubrica. Laura Papaleo 123.2342323232 papaleo@disi.unige.it Franco Tallero Via degli Ulivi 19/19 Genova, 16100 010.28389239 (preferito) 346.92938281 tallero@mioindirizzo.com. Esempio: address book in XML. - PowerPoint PPT Presentation

Citation preview

Linguaggi di markupLinguaggi di markup

Marco Mesiti mesiti@disi.unige.it

Esempio: contatti in rubricaEsempio: contatti in rubrica

Laura Papaleo123.2342323232papaleo@disi.unige.it

Franco TalleroVia degli Ulivi 19/19 Genova, 16100010.28389239 (preferito)346.92938281tallero@mioindirizzo.com

Esempio: address book in XMLEsempio: address book in XML<?xml version="1.0"?>

<address-book> <entry> <name>Laura Papaleo </name> <tel> 123.2342323232 </tel> <email href=" papaleo@disi.unige.it"/> </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="tallero@mioindirizzo.com "/> </entry></address-book>

XML Sintassi: ElementoXML Sintassi: Elemento

Un elemento è un blocco elementare dei documenti XML

Un elemento è una parte del documento delimitata da 2 TAG Esempio: <AUTHOR> Laura Papaleo </AUTHOR>

ElementoElemento

Contenuto

Start-tagStart-tag

End-tagEnd-tag

XML Sintassi: Tag (1/2)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><NOME_TAG> Laura Papaleo </NOME_TAG>

Il tag rappresenta il nome dell’elemento

XML:XML:Struttura gerarchica degli elementiStruttura gerarchica degli elementi

LibroLibro

CapitoloCapitolosezionesezione

CapitoloCapitolosezionesezione

librolibro

CapitoloCapitolo CapitoloCapitolo

sezionesezione sezionesezione

Struttura gerarchica degli elementiStruttura gerarchica degli elementi

Ogni elemento Ogni elemento deve essere deve essere

completamente completamente incluso da incluso da

un altro un altro elementoelemento

No!No! LibroLibro

CapitoloCapitolo

CapitoloCapitolosezionesezione

sezionesezione

Contenuto di un ElementoContenuto 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 Elemento documento (Document Element) (Document Element)

E’ l’elemento più esterno in un documento XML

Viene anche detto elemento radiceelemento radice

Contiene tutti gli elementi del documento esempio:

<libro><libro> … … … … </libro> </libro>

Deve sempre esistere Deve sempre esistere

Elemento documento Elemento documento (Document Element)(Document Element)

Non è possibile Non è possibile avere avere

più elementi a più elementi a livello radicelivello radice CapitoloCapitolo

sezionesezione

CapitoloCapitolosezionesezione

No!No!

Elemento vuoto (Empty Elements)Elemento vuoto (Empty Elements)

E’ un elemento senza contenuto Non ha il tag finaleHa una particolare rappresentazione del Tag

iniziale

Esempio:<foto source=“ciao.gif”/> <foto source=“ciao.gif”/>

<email indirizzo=“pippo@pippo.com”/><email indirizzo=“pippo@pippo.com”/>

XML: Definire gli attributiXML: Definire gli attributi

Un elemento può avere degli attributi

Gli attributi possono essere pensati come aggettivi che descrivono gli elementi

Ogni attributo ha nomenome e valorevalore

Tutti gli attributi di un elemento devono essere distinti

<AUTHOR <AUTHOR nome_attributo=”valore_attributo"nome_attributo=”valore_attributo"> >

Marco Mesiti Marco Mesiti</AUTHOR> </AUTHOR>

Esempio di elemento con attributiEsempio 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 AttributiElementi Vs Attributi

Un elementoUn elemento, quando: Si richiede di recuperare i

dati velocemente E’ visibile a tutti E’ rilevante per il

significato del documento

Un attributoUn attributo, quando: Esprime una scelta E’ utilizzato dal sistema Non è rilevante per il

significato del documento

Quando è meglio usare elementi o attributi per rappresentare un’informazione?

Sicuramente elementi se si tratta di informazione strutturata

Un documento XMLUn documento XML

Un file XML è un semplice file di testo con tag XML al suo interno

Esso ha una estensione .xml.xml nome_file.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)Un esempio di documento XML (1)

<?xml version="1.0"?><?xml version="1.0"?><BOOKLIST> <BOOKLIST>

<BOOK><BOOK> <TITLE edition=”2000">XML Tutorial</TITLE><TITLE edition=”2000">XML Tutorial</TITLE>

<AUTHOR>Laura Papaleo</AUTHOR><AUTHOR>Laura Papaleo</AUTHOR></BOOK></BOOK>

……<BOOK><BOOK>

<TITLE edition=”2003" type=”XML"><TITLE edition=”2003" type=”XML">Strutturare le informazioni nel webStrutturare le informazioni nel web

</TITLE></TITLE><AUTHOR>Laura Papaleo</AUTHOR><AUTHOR>Laura Papaleo</AUTHOR><AUTHOR>Franco Tallero</AUTHOR><AUTHOR>Franco Tallero</AUTHOR><AUTHOR>Marco Mesiti</AUTHOR><AUTHOR>Marco Mesiti</AUTHOR>

</BOOK></BOOK></BOOKLIST> </BOOKLIST>

BOOKS.xmlBOOKS.xml

Un esempio di documento XML (2)Un esempio di documento XML (2)<?xml version="1.0"?><?xml version="1.0"?> <Orders> <Orders>

<SalesOrder SONumber="12345"> <SalesOrder SONumber="12345"> <Customer CustNumber="543"> <Customer CustNumber="543"> <CustName>ABC Industries</CustName> <CustName>ABC Industries</CustName> <Street>123 Main St.</Street> <Street>123 Main St.</Street> <City>Chicago</City> <City>Chicago</City> <State>IL</State> <State>IL</State> <PostCode>60609</PostCode><PostCode>60609</PostCode> </Customer> </Customer> <OrderDate>981215</OrderDate> <OrderDate>981215</OrderDate> <Line LineNumber="1"> <Line LineNumber="1"> <Part PartNumber="123"><Part PartNumber="123"> <Description> Turkey wrench: Stainless steel, <Description> Turkey wrench: Stainless steel, one piece construction, lifetime guarantee. one piece construction, lifetime guarantee. </Description> </Description> <Price>9.95</Price> <Price>9.95</Price> </Part> </Part> <Quantity>10</Quantity> <Quantity>10</Quantity> </Line> </Line> </SalesOrder></SalesOrder>

</Orders> </Orders>

ORDERS.xmlORDERS.xml

Un semplice esempio (3)Un semplice esempio (3)

<?xml version="1.0"?><?xml version="1.0"?><Lease><Lease>

<Leasee>ABC Industries </Leasee> <Leasee>ABC Industries </Leasee> agrees to lease the property at agrees to lease the property at <Address> <Address> 123, Main St., Chicago, IL 123, Main St., Chicago, IL </Address> </Address> from from <Lessor> <Lessor> XYZ Properties XYZ Properties </Lessor> </Lessor> for a term of not less than for a term of not less than <LeaseTerm TimeUnit=“Months”> 18 </LeaseTerm> <LeaseTerm TimeUnit=“Months”> 18 </LeaseTerm> at the cost of the at the cost of the <Price Currency=“USD” TimeUnit=“Months”> <Price Currency=“USD” TimeUnit=“Months”> 1000 1000 </Price> </Price>

</Lease></Lease>

LEASE.xmlLEASE.xml

Dichiarazione di documento XML 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"?><?xml version="1.0"?>

Dichiarazione di documento XMLDichiarazione di documento XML

Oltre all’indicazione della versione può essere inserito: il set di caratteri utilizzato attributo encodingencoding il fatto che l’interpretazione del documento dipende

da altri documenti attributo standalonestandalone

<?xml version="1.0” encoding = “UTF-8” standalone = “no”?>

Questi sono i valori di default. E’ possibile non specificarli

Dichiarazione della DTD del Dichiarazione della DTD del documentodocumento

Prima del root element (l’elemento radice) può essere dichiarata la DTD che verrà utilizzata

Es: <!DOCTYPE Libro SYSTEM “libro.dtd”><!DOCTYPE Libro SYSTEM “libro.dtd”>

Vedremo in seguito come può essere strutturata tale dichiarazione

DTDDTDDocument Type DefinitionDocument Type Definition

Sintassi Di Una DTD

DTD - Document Type DefinitionDTD - 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?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 alberoDTD - rappresentazione ad albero

Un DTD può essere visto come un albero

I nodi dell’albero rappresentano: elementi attributi

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

LibroLibro Capitolo +Capitolo +

SezioniSezioni

Par +Par +

Document Type Definition: Elementi 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: Document Type Definition: occorrenza di un sottoelementooccorrenza 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

Usando la grammatica della DTD

<!ELEMENT libro (… titolo …)><!ELEMENT libro (… titolo …)>

titolotitolo

Document Type Definition: Document Type Definition: Occorrenza di un sottoelementoOccorrenza 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

Usando la grammatica della DTD

<!ELEMENT libro (… sottotitolo? …)><!ELEMENT libro (… sottotitolo? …)>

sottotitolosottotitolo

Document Type Definition: Document Type Definition: Occorrenza di un sottoelementoOccorrenza 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

Usando la grammatica della DTD

<!ELEMENT libro (… autore+ …)><!ELEMENT libro (… autore+ …)>

autoreautore

DTD - occorrenza di un sottoelementoDTD - 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

Usando la grammatica della DTD <!ELEMENT libro (… traduttore* …)><!ELEMENT libro (… traduttore* …)>

traduttoretraduttore

DTD - Sequenze di sottoelementiDTD - 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

Usando la grammatica della DTD <!ELEMENT libro (titolo, autore*, sottotitolo?, …)><!ELEMENT libro (titolo, autore*, sottotitolo?, …)>

Nota: è rilevante l’ordine

titolotitolo sottotitolosottotitoloautoreautore

DTD - Alternative di sottoelementiDTD - Alternative di sottoelementi

Un libro può avere un IBDN oppure un codice

Usando la grammatica della DTD <!ELEMENT libro (… ISBN | codice …)><!ELEMENT libro (… ISBN | codice …)>

ISBNISBN

codicecodice

DTD - RiassumendoDTD - 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, D?)><!ELEMENT A (B | C+)><!ELEMENT A (B | C+)><!ELEMENT A (B, (C | D+)?, E*)><!ELEMENT A (B, (C | D+)?, E*)>

DTD per una ricettaDTD per una ricetta

DTD ricettario.dtdDTD 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 unDichiarare unelemento non vuoto (1/2)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 unDichiarare unelemento non vuoto (2/2)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 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 ANYDichiarazione 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

DichiarazioneDichiarazioneelemento “mixed-content”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 regoleviene dichiarato una alternativa di sottoelementi il primo sottoelemento deve essere #PCDATAL’alternativa di sottoelementi deve essere

ripetibile

DichiarazioneDichiarazioneelemento “mixed-content”elemento “mixed-content”

Vediamo un esempio:

<!ELEMENT emph (#PCDATA|sub|super)*><!ELEMENT emph (#PCDATA|sub|super)*><!ELEMENT sub (#PCDATA)><!ELEMENT sub (#PCDATA)><!ELEMENT super (#PCDATA)><!ELEMENT super (#PCDATA)>

<emph><emph> H <sub>2</sub> O è l’acqua H <sub>2</sub> O è l’acqua </emph></emph>

Dichiarazione di attributi 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 cellulareil valore di default è 'casa’

Tipi degli attributi (1/2)Tipi degli attributi (1/2)

CDATACDATA Stringhe di caratteri.

IDID nome che occorre unico all'interno dello stesso documento

IDREFIDREF E' un riferimento ad un elemento che ha un attributo di

tipo ID con valore IDREF

IDREFSIDREFS E' una lista di IDREF separati da uno spazio bianco

Tipi degli attributi (2/2)Tipi degli attributi (2/2)

ENTITYENTITYnome di una entità dichiarata

ENTITIESENTITIES E' una lista di ENTITY separati da uno spazio bianco

NMTOKENNMTOKEN E' una stringa di una parola

NMTOKENSNMTOKENS E' una lista di NKTOKEN separati da uno spazio bianco

EnumerazioneEnumerazione E' una lista di nomi come valori che l'attributo può assumereI nomi sono separati da virgola e la lista è racchiusa tra par. tonde

Valori di default per gli attributiValori di default per gli attributi

#REQUIREDREQUIRED Obbligatorio

#IMPLIEDIMPLIED Non obbligatorio e non viene assegnato un valore di default

"valorevalore" Non è obbligatorio specificare un valore per l'attributo

#FIXEDFIXED "valorevalore" Non è obbligatorio specificare un valore per l'attributo ma se

lo si specifica, il valore può essere solo quello prefissato

Uso di identificatori e riferimentiUso di identificatori e riferimenti

<!ELEMENT <!ELEMENT biblioteca (autori,libri)>biblioteca (autori,libri)><!ELEMENT autori (autore)*><!ELEMENT autori (autore)*><!ELEMENT libri (libro)*><!ELEMENT libri (libro)*><!ELEMENT autore (nome,cognome,dataNascita)><!ELEMENT autore (nome,cognome,dataNascita)><!ATTLIST <!ATTLIST autore ident ID #REQUIRED>autore ident ID #REQUIRED>

<!-- … dichiarazione elementi di autore --><!-- … dichiarazione elementi di autore --><!ELEMENT libro (titolo, scrittoDa, data)><!ELEMENT libro (titolo, scrittoDa, data)><!ELEMENT scrittoDa (#PCDATA)><!ELEMENT scrittoDa (#PCDATA)><!-- … dichiarazione elementi di libro --><!-- … dichiarazione elementi di libro --><!ATTLIST <!ATTLIST scrittoDa autore IDREFS>scrittoDa autore IDREFS> … …

Uso di identificatori e riferimentiUso di identificatori e riferimenti

<biblioteca> <biblioteca> <autori> <autori> <autore ident=“001”> … </autore><autore ident=“001”> … </autore> <autore ident=“002”> … </autore><autore ident=“002”> … </autore> <autore ident=“003”> … </autore><autore ident=“003”> … </autore> … … </autori></autori> <libri> <libri> <libro scrittoDa=“001”> … </libro><libro scrittoDa=“001”> … </libro> <libro scrittoDa=“002 003”> … </libro><libro scrittoDa=“002 003”> … </libro> <libro scrittoDa=“003 001 002”> z<libro scrittoDa=“003 001 002”> z … … </libro></libro>

… … </libri></libri>

Un esempio completo - la DTDUn esempio completo - la DTD

DTD agenda.dtdDTD agenda.dtd<!ELEMENT agenda (contatto*)><!ELEMENT agenda (contatto*)><!ELEMENT contatto (nome, indirizzo+, <!ELEMENT contatto (nome, indirizzo+,

telefono*, email*,foto?)*>telefono*, email*,foto?)*><!ELEMENT nome (#PCDATA)><!ELEMENT nome (#PCDATA)><!ELEMENT indirizzo (via, numero, citta, <!ELEMENT indirizzo (via, numero, citta,

cap, provincia?)>cap, provincia?)><!ELEMENT via (#PCDATA)><!ELEMENT via (#PCDATA)><!ELEMENT numero (#PCDATA)><!ELEMENT numero (#PCDATA)><!ELEMENT citta (#PCDATA)> <!ELEMENT citta (#PCDATA)> <!ELEMENT cap (#PCDATA)><!ELEMENT cap (#PCDATA)><!ELEMENT provincia (#PCDATA)><!ELEMENT provincia (#PCDATA)><!ELEMENT telefono<!ELEMENT telefono (#PCDATA)>(#PCDATA)> Dati Dati

ParsedParsed

Un esempio completo - la DTDUn esempio completo - la DTD

… … continuacontinua

<!ATTLIST <!ATTLIST telefono telefono tipo (casa |ufficio tipo (casa |ufficio | cellulare)'casa'>| cellulare)'casa'>

<!ELEMENT <!ELEMENT email (#PCDATA)>email (#PCDATA)><!ELEMENT <!ELEMENT foto foto EMPTY>EMPTY>

<!ATTLIST <!ATTLIST foto src foto src CDATA #REQUIRED desc CDATA #REQUIRED desc CDATA #IMPLIED>CDATA #IMPLIED>

<!ENTITY BO "40100"> <!ENTITY BO "40100"> <!ENTITY MO "41100"> <!ENTITY MO "41100"> <!ENTITY RE "42100"><!ENTITY RE "42100">

Elemento vuotoElemento vuoto

Valore Valore predefinitopredefinito

EntitàEntitàDichiarateDichiarate

Un esempio completo - XMLUn esempio completo - XML

Agenda.xmlAgenda.xml<?XML version="1.0" encoding="ISO-8859-1"?><?XML version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE agenda SYSTEM "agenda.dtd"><!DOCTYPE agenda SYSTEM "agenda.dtd">

<agenda><agenda> <contatto> <contatto> <nome>Pinco Pallino</nome> <nome>Pinco Pallino</nome> <indirizzo> <indirizzo> <via>Via Incognita</via><via>Via Incognita</via><numero>10</numero><numero>10</numero><citta>Bologna</citta><citta>Bologna</citta><cap>&BO;</cap><cap>&BO;</cap> </indirizzo> </indirizzo>

…continua…continua

RadiceRadice DTD associataDTD associata

Richiamo entità Richiamo entità della DTDdella DTD

Un esempio completo - XMLUn esempio completo - XML

… … continuacontinua

<telefono>051-123456</telefono><telefono>051-123456</telefono><telefono tipo="ufficio"><telefono tipo="ufficio">

051-654321</telefono> 051-654321</telefono> <email> pinco@pallino.org </email><email> pinco@pallino.org </email><foto src="pinco.gif" <foto src="pinco.gif"

desc="Una foto di Pinco Pallino"/> desc="Una foto di Pinco Pallino"/></contatto></contatto>

</agenda></agenda>

Elemento vuoto fotoElemento vuoto foto

Un altro esempioUn altro esempio<!DOCTYPE Orders[<!DOCTYPE Orders[<!ELEMENT Orders(SalesOrder)+><!ELEMENT Orders(SalesOrder)+><!ELEMENT SalesOrder(Customer,OrderDate,Line*)><!ELEMENT SalesOrder(Customer,OrderDate,Line*)><!ELEMENT <!ELEMENT

Customer(CustName,Street,City,State,PostCode,tel*)>Customer(CustName,Street,City,State,PostCode,tel*)><!ELEMENT CustName (#PCDATA)><!ELEMENT CustName (#PCDATA)><!ELEMENT Street (#PCDATA)><!ELEMENT Street (#PCDATA)><!ELEMENT State (#PCDATA)><!ELEMENT State (#PCDATA)><!ELEMENT PostCode (#PCDATA)><!ELEMENT PostCode (#PCDATA)><!ELEMENT tel (#PCDATA)><!ELEMENT tel (#PCDATA)><!ELEMENT OrderDate (#PCDATA)><!ELEMENT OrderDate (#PCDATA)><!ELEMENT Line (Part,Quantity)><!ELEMENT Line (Part,Quantity)><!ELEMENT Part(Description,Price)><!ELEMENT Part(Description,Price)><!ELEMENT Quantity (#PCDATA)><!ELEMENT Quantity (#PCDATA)><!ELEMENT Description (#PCDATA)><!ELEMENT Description (#PCDATA)><!ELEMENT Price (#PCDATA)><!ELEMENT Price (#PCDATA)><!ATTLIST SalesOrder SONumber CDATA #REQUIRED><!ATTLIST SalesOrder SONumber CDATA #REQUIRED><!ATTLIST Customer CustNumer CDATA #REQUIRED><!ATTLIST Customer CustNumer CDATA #REQUIRED><!ATTLIST Line LineNumber CDATA #IMPLIED><!ATTLIST Line LineNumber CDATA #IMPLIED><!ATTLIST Part PartNumber CDATA #REQUIRED><!ATTLIST Part PartNumber CDATA #REQUIRED>

Un altro esempio 2Un altro esempio 2

<!DOCTYPE WorldLawBulletin[<!DOCTYPE WorldLawBulletin[ <!ELEMENT WorldLawBulletin (Law*,BluePageReport?)><!ELEMENT WorldLawBulletin (Law*,BluePageReport?)> <!ELEMENT Law (Topic,Summary)> <!ELEMENT Law (Topic,Summary)> <!ELEMENT Topic (#PCDATA)><!ELEMENT Topic (#PCDATA)> <!ELEMENT Summary ANY> <!ELEMENT Summary ANY> <!ELEMENT BluePageReport (Section+)><!ELEMENT BluePageReport (Section+)> <!ELEMENT Section (Law+)><!ELEMENT Section (Law+)>

<!ATTLIST WorldLawBulletin Date CDATA <!ATTLIST WorldLawBulletin Date CDATA #REQUIRED> #REQUIRED>

<!ATTLIST Law Id ID #REQUIRED <!ATTLIST Law Id ID #REQUIRED Country CDATA #REQUIRED Country CDATA #REQUIRED RelatedLaws IDREFS #IMPLIED>RelatedLaws IDREFS #IMPLIED>

<!ATTLIST Section GeoArea CDATA #REQUIRED><!ATTLIST Section GeoArea CDATA #REQUIRED>]>]>

Un altro esempio 2Un altro esempio 2<WorldLawBulletin Date=“8/8/1999”><WorldLawBulletin Date=“8/8/1999”>

<Law Country=“USA” RelatedLaws = “LK75”/><Law Country=“USA” RelatedLaws = “LK75”/> <Topic>Taxation</Topic> <Summary>...</Summary><Topic>Taxation</Topic> <Summary>...</Summary>

</Law></Law><Law Id=“LK75” Country=“Italy”/><Law Id=“LK75” Country=“Italy”/> <Topic>Import-Export</Topic> <Summary>...</Summary><Topic>Import-Export</Topic> <Summary>...</Summary>

</Law></Law><BluePageReport><BluePageReport> <Section GeoArea=“Europe”><Section GeoArea=“Europe”>

<Law Country=“Germany”/><Law Country=“Germany”/> <Topic>Guns</Topic> <Summary>...</Summary><Topic>Guns</Topic> <Summary>...</Summary>

</Law>...</Law>... </Section></Section> <Section GeoArea=“NorthAmerica”><Section GeoArea=“NorthAmerica”> <Law Country=“USA”/><Law Country=“USA”/> <Topic>Transportation</Topic> <Summary>...</Summary><Topic>Transportation</Topic> <Summary>...</Summary>

</Law> ...</Law> ... </Section></Section></BluePageReport></BluePageReport>

</WorldLawBulletin></WorldLawBulletin>

Struttura fisica di un Struttura fisica di un documento XMLdocumento XML

Le entità

XML: XML: Dichiarazione ed utilizzo di Entità Dichiarazione ed utilizzo di Entità

Abbiamo visto come organizzare logicamente logicamente l’informazione

Al fine di razionalizzare, riusare e rendere modularemodulare l’informazione dal punto di vista fisico, vengono introdotte le entità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 macromacro

XML: XML: Dichiarazione ed utilizzo di Entità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: XML: Definizione di EntitàDefinizione di Entità

EntitàEntitàUnità di informazione identificata da un nome

Entità documento 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: XML: Dichiarazione ed utilizzo di EntitàDichiarazione ed utilizzo di Entità

Dichiarare entità all'interno di una DTD

<!ENTITY xml "eXtensible Markup Language"><!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"><!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à

nomenome valorevalore

XML: Nome di un’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à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-inXML: 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à carattereXML: 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 interneXML: Entità testuali interne

DTD

<!ENTITY WWW "World Wide Web"><!ENTITY WWW "World Wide Web">

XML

<p>We all use the &WWW;.</p><p>We all use the &WWW;.</p>

<p>We all use the World Wide Web.</p><p>We all use the World Wide Web.</p>

Internal Text Entity DeclarationInternal Text Entity Declaration

Logically equivalent to Logically equivalent to actually appearingactually appearing

Entity ReferenceEntity Reference

External Text Entities External Text Entities

Gli elementi logiciGli elementi logicipossono esserepossono essere

divisidivisiin entità fisichein entità fisiche

distintedistinte

Mylife.xmlMylife.xml

DTDDTD……<mylife><mylife>Chap1.xmlChap1.xml

Chap2.xmlChap2.xml

</mylife></mylife>

<teen>yada yada</teen><teen>yada yada</teen>

<adult>… … … … </adult><adult>… … … … </adult>

External Text EntitiesExternal Text Entities

DTD

<!ENTITY chap1 SYSTEM "http://...chap1.xml"> <!ENTITY chap1 SYSTEM "http://...chap1.xml">

XML

<mylife> &chap1; &chap2;</mylife><mylife> &chap1; &chap2;</mylife>

<mylife> <mylife>

<teen>yada yada</teen> <teen>yada yada</teen> <adult> blah blah</adult><adult> blah blah</adult>

</mylife></mylife>

External Text Entity DeclarationExternal Text Entity Declaration

Entity ReferenceEntity Reference

Logically equivalent toLogically equivalent toinlining file contentsinlining file contents

URLURL

Entità: Unparsed (& "Binary")Entità: Unparsed (& "Binary")

DTD<!ENTITY fusion SYSTEM "http://... <!ENTITY fusion SYSTEM "http://... fusion.ps" NDATA ps>fusion.ps" NDATA ps>

<!attlist fullPaper source ENTITY #REQUIRED><!attlist fullPaper source ENTITY #REQUIRED>

<!NOTATION ps SYSTEM "ghostview.exe"><!NOTATION ps SYSTEM "ghostview.exe">

XML<fullPaper source="fusion"/><fullPaper source="fusion"/>

XML Entità:XML Entità:Dichiarazione di notazioni 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à:XML Entità:Dichiarazione Entità ParametricheDichiarazione Entità Parametriche

Vengono espanse e interpretate nella DTD e non espanse e passate all’applicazione

Presenti solo nella DTD con % davanti

<!ENTITY % indr_corto ‘<!ELEMENT indirizzo (via, <!ENTITY % indr_corto ‘<!ELEMENT indirizzo (via, citta)>’>citta)>’>

<!ENTITY % indr_lungo ‘<!ELEMENT indirizzo (via, <!ENTITY % indr_lungo ‘<!ELEMENT indirizzo (via, numero, citta, cap, provincia)>’>numero, citta, cap, provincia)>’>

poi utilizzo... <!ELEMENT contatto (nome, cognome,%indr_corto;)> …<!ELEMENT contatto (nome, cognome,%indr_corto;)> …

XML Entità:XML Entità:Esempio di entità parametricheEsempio di entità parametriche

<!ENTITY % alarmStatusType "UnderRepair | Critical | … "><!ENTITY % alarmStatusType "UnderRepair | Critical | … ">

<!ENTITY % availabilityStatusType "InTest | Failed | <!ENTITY % availabilityStatusType "InTest | Failed | PowerOff | OffLine | … ">PowerOff | OffLine | … ">

… … … … <!ENTITY % statusAttributes <!ENTITY % statusAttributes "alarmStatus (%alarmStatusType;) #REQUIRED "alarmStatus (%alarmStatusType;) #REQUIRED

availabilityStatus (%availabilityStatusType;) #REQUIREDavailabilityStatus (%availabilityStatusType;) #REQUIRED

controlStatus (%controlStatusType;) #REQUIREDcontrolStatus (%controlStatusType;) #REQUIRED

standByStatus (%standByStatusType;) #REQUIREDstandByStatus (%standByStatusType;) #REQUIRED

unknownStatus (%boolean;) #REQUIRED">unknownStatus (%boolean;) #REQUIRED">

Common.dtdCommon.dtd

Character SetCharacter Set

Set di caratteriSet 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 CaratteriDocumento XML: I Caratteri

Un documento XML è una sequenza di caratteri (characters) che descrivono:Contenuto del documentoTags

Le macchine “non capiscono” i caratteri

Per memorizzare i caratteri si usano codici

TT 8484

Character SetCharacter Set

Character setinsieme di corrispondenze numero-carattere

Fontinsieme 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 ASCII: American Standard Code for Information InterchangeCode for Information Interchange

Standard per un set di caratteri

Assegna un significato comune per i caratteri utilizzati

Esempioin ASCII il numero 84 rappresenta la ‘T’

ASCII definisce un valore per solo 127 caratteri (rappresentazione a 7-bit)

American Standard American Standard Code for Information InterchangeCode 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 ASCIIExtended ASCII

Nei sistemi più moderni non è necessario un bit di controllo

rappresentazione a 8 bit (255 caratteri)

Nuovo problemanon c’era accordo su quali caratteri rappresentare con i “nuovi” 128 numeri

Esempio:

Apple: è – 142MS-DOS: è – 130

Extended ASCIIExtended 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 ASCIIExtended 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 + ArabicISO 8859/7 ASCII + Greco moderno

Problema:Problema:Si riescono a rappresentare ancora “pochi caratteri”

UNICODE e ISO/IEC 10646UNICODE 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 standardnuovi standard:

UNICODE

ISO/IEC 10646

Standard UNICODE: CaratteristicheStandard 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 10646ISO/IEC 10646

ISO 10646 è formato da un insieme di schemi di codifica:

UCS (Universal Character Set)

BMP (Basic Multilanguage Plane)

UTF (UCS Trasformation Format)

UTF-8

UTF-16

SchemaSchemafissofisso

SchemaSchemavariabilevariabile

Dichiarazione set di caratteri in XMLDichiarazione 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 XMLDichiarazione set di caratteri in XML

Si richiede la dichiarazione della codifica del documento per gli standard diversi da UTF-8 e UTF-16

EsempioPer dichiarare ISO 8859 occorre:

<?xml ... encoding=“ISO-8859-1” ... ?><?xml ... encoding=“ISO-8859-1” ... ?>

Riferimenti per gli standard di codificaRiferimenti 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-formedDocumenti well-formede documenti validie documenti validi

Documento XML ben formato (1/2)Documento XML ben formato (1/2)

Presenza “elemento radice”cioè un elemento che contiene tutti gli elementi

del documento

Bilanciamento dei marcatoriAd 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)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!Un esempio SI!

<?XML version="1.0"?><?XML version="1.0"?><!DOCTYPE ricettario<!DOCTYPE ricettario[[

<!ENTITY g "grammi"><!ENTITY g "grammi">]>]>

<ricettario><ricettario><ricetta numero="1"><ricetta numero="1">

<titolo>...</titolo><titolo>...</titolo><ingred>200 &g; di ... </ingred><ingred>200 &g; di ... </ingred><ingred>...</ingred><ingred>...</ingred><passo numero="1">...</passo><passo numero="1">...</passo><passo numero="2">...</passo><passo numero="2">...</passo>

</ricetta></ricetta></ricettario></ricettario>

Un esempio NO!Un esempio NO!

<?XML version="1.0"?><?XML version="1.0"?><!DOCTYPE ricettario SYSTEM “ricettario.dtd”><!DOCTYPE ricettario SYSTEM “ricettario.dtd”>

<ricettario><ricettario><ricetta numero="1"><ricetta numero="1">

<titolo>...<titolo>... <ingred>200 &g; di ... </ingred> <ingred>200 &g; di ... </ingred> <ingred>...</ingred> <ingred>...</ingred> <passo numero=1>...</passo> <passo numero=1>...</passo> <passo numero=2>...</passo> <passo numero=2>...</passo>

</ricetta></ricetta></ricettario></ricettario>

Tag non Tag non chiusochiuso

Entità speciale Entità speciale non dichiaratanon dichiarata

Valori non tra Valori non tra virgolettevirgolette

Documento XML ValidoDocumento 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)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 XMLParser per XML

Un non-validating parsernon-validating parser controlla che un documento segua le regole di sintassi XML costruisce un albero dai TAG del documento

Un validatingvalidating parserparser 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

NamespaceNamespace

XML:XML:Namespace (Namespace (Raccom.Raccom. W3C 1999) 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: NamespaceXML: 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 NamespacesDichiarare e usare i Namespaces

A livello di documento

<document xmlns:name_sp=“fixed_URL”><document xmlns:name_sp=“fixed_URL”><name_sp:tag_nm> content </tag_nm><name_sp:tag_nm> content </tag_nm>

<Info><Info><person><person><name>Rosalie Panelli</name><name>Rosalie Panelli</name><address>33 Terry Dr.</address><address>33 Terry Dr.</address></person></person><webSite><webSite><name>XML Italia</name><name>XML Italia</name><address>http://www.xml.it</address><address>http://www.xml.it</address></webSite></webSite>

</Info></Info>

ambiguitàambiguità

Dichiarare e usare i NamespacesDichiarare e usare i NamespacesSoluzione all’esempioSoluzione all’esempio

<Info><Info><person xmlns:person=“http://namespaces.xml.it/person”><person xmlns:person=“http://namespaces.xml.it/person”>

<person:name>Rosalie Panelli</person:name><person:name>Rosalie Panelli</person:name><person:address>33 Terry Dr.</person:address><person:address>33 Terry Dr.</person:address>

</person></person><webSite <webSite xmlns:webSite=“http://namespaces.xml.it/webSite”> xmlns:webSite=“http://namespaces.xml.it/webSite”>

<webSite:name> <webSite:name> XML Italia XML Italia </webSite:name> </webSite:name>

<webSite:address><webSite:address> http://www.xml.ithttp://www.xml.it

</webSite:address> </webSite:address></webSite></webSite>

</Info></Info>

Dichiarare e usare Dichiarare e usare i Namespaces all’interno di DTDi 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 <!ELEMENT person (person:name, person:address)> (person:name, person:address)>

<!ATTLIST person xmlns:person CDATA #FIXED <!ATTLIST person xmlns:person CDATA #FIXED “http://namespaces.xml.it/person”>“http://namespaces.xml.it/person”>

<!ELEMENT person:name (#PCDATA)><!ELEMENT person:name (#PCDATA)><!ELEMENT person:address (#PCDATA)><!ELEMENT person:address (#PCDATA)>

Recommended