linguaggi di markup
DESCRIPTION
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. - PowerPoint PPT PresentationTRANSCRIPT
Linguaggi di markupLinguaggi di markup
Marco Mesiti [email protected]
Esempio: contatti in rubricaEsempio: contatti in rubrica
Laura [email protected]
Franco TalleroVia degli Ulivi 19/19 Genova, 16100010.28389239 (preferito)[email protected]
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=" [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: 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=“[email protected]”/><email indirizzo=“[email protected]”/>
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> [email protected] </email><email> [email protected] </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:< ‘<’> ‘>’& ‘&’' ‘ ‘ ’" ‘ “ ’
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: < è uguale a ‘<’ in ASCII;   = 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
& < > ' "
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)>