Laboratorio di Programmazione Distribuita Document Type Definition () Dott. Marco Bianchi Università degli Studi di L'Aquila bianchi@di.univaq.it http://di.univaq.it/~bianchi
Relazione tra classi e oggetti in OO Definizione Classe Slide... Ennesima istanza di classe Slide String titolo= Overview ;...... Seconda istanza di classe Slide String titolo= Overview ;... Prima istanza di classe Slide String titolo= Wake up to WonderWidgets! ;...
Ruolo del Document Type Definition... <address> <name> <address> <name> <title>mr.</title> <first-name>sam</first-name> <last-name>fisher</last-name> </name> <street>2002 Main Street</street> <city state="nc">anytown</city> <postal-code>34829</postal-code> </address> <title>mrs.</title> <first-name>mary</first-name> <last-name>mcgoon</last-name> </name> <street>1401 Main Street</street> <city state="nc">anytown</city> <postal-code>34829</postal-code> </address>
Un e un documento che definisce in modo formale, utizzando una grammatica Extended Backus-Naur Form (EBNF), le regole di una classe di documenti XML In un si possono dichiarare: Gli elementi utilizzabili, in che ordine e con quante occorrenze possono essere nidificati tra loro Quali attributi sono applicabili a ciascun elemento, se sono obbligatori e quali sono i loro valori predefiniti Le entità e le annotazioni utilizzabili all interno del documento XML o del stesso
Perchè usare un Gruppi indipendenti di persone possono accordarsi su un comune per definire un formato per i dati Un puo essere usato per verificare la validita dei dati Avvertenza: il non e obbligatorio!
Dichiarazione di un Interna al documento XML: <!DOCTYPE root-element [element-declarations]> Esterna al documento XML : <!DOCTYPE root-element SYSTEM URI >
Esempio interno <?xml version="1.0"?> <!DOCTYPE nota [ <!ELEMENT nota (a,da,testo)> <!ELEMENT a (#PCDATA)> <!ELEMENT da (#PCDATA)> <!ELEMENT testo (#PCDATA)> ]> <nota> <a>carlo</a> <da>paolo</da> <testo>ci vediamo alle 12</testo> </nota>
Esempio esterno <?xml version="1.0"?> <!DOCTYPE nota SYSTEM nota.dtd > <nota> <a>carlo</a> <da>paolo</da> <testo>ci vediamo alle 12</testo> </nota> <!ELEMENT nota (a,da,testo)> <!ELEMENT a (#PCDATA)> <!ELEMENT da (#PCDATA)> <!ELEMENT testo (#PCDATA)> nota.dtd
Dichiarazione di elemento Esistono quattro categorie di contenuti degli elementi: ELEMENT EMPTY ANY MIXED Sintassi: <!ELEMENT element-name (element-content)> oppure <!ELEMENT element-name category>
Elementi contenenti solo character data Vengono dichiarati con la categoria (#PCDATA) <!ELEMENT element-name (#PCDATA)> Esempio : <!ELEMENT da (#PCDATA)> Esempio XML: <da>paolo</da>
Elementi con figli (in sequenza) Gli elementi con uno o piu figli sono dichiarati con il nome dei figli tra parentesi, separati da virgole che determinano il loro ordine nel documento <!ELEMENT element-name (child-element-name)> oppure <!ELEMENT element-name (child-elementname, child-element-name,...)> Esempio : <!ELEMENT nota (a,da,testo)>
Quante occorrenze dello stesso elemento? Esattamente una occorrenza: <!ELEMENT element-name (child-name)> Esempio : <!ELEMENT nota (messaggio)> Esempio XML: <nota> <messaggio>... </messaggio> </nota>
Quante occorrenze dello stesso elemento? Almeno una occorrenza: <!ELEMENT element-name (child-name+)> Esempio : <!ELEMENT nota (messaggio+)> Esempio XML errato: <nota></nota>
Quante occorrenze dello stesso elemento? Zero o piu occorrenze: <!ELEMENT element-name (child-name*)> Esempio : <!ELEMENT nota (messaggio*)> Esempio XML: <nota> <messaggio>... </messaggio> <messaggio>... </messaggio> </nota>
Quante occorrenze dello stesso elemento? Zero o una occorrenza: <!ELEMENT element-name (child-name?)> Esempio : <!ELEMENT nota (messaggio?)> Esempio XML errato: <nota> <messaggio>... </messaggio> <messaggio>... </messaggio> </nota>
Scelta fra contenuti Una occorrenza oppure un'altra: <!ELEMENT element-name (child1 child2)> Esempio : <!ELEMENT nota (a,da,(msg txt))> Esempi XML: <nota> <a>... </a> <da>... </da> <msg>... </msg> </nota> <nota> <a>... </a> <da>... </da> <txt>... </txt> </nota>
Esempi di dichiarazioni di elemento <!ELEMENT film((titolo anno)+)> <!ELEMENT film((titolo*, anno?, genere)* genere)> <!ELEMENT artist((firstname*, lastname) group)>
EMPTY Gli elementi vuoti vengono dichiarati con la parola chiave EMPTY <!ELEMENT element-name EMPTY> Esempio : <!ELEMENT br EMPTY> Esempio XML: <br/>
ANY Gli elementi generici vengono dichiarati con parola chiave ANY <!ELEMENT element-name ANY> Esempio : <!ELEMENT documento ANY> <!ELEMENT lettera (...)> <!ELEMENT libro (...)> <!ELEMENT appunti (...)> <!ELEMENT nota (...)>
Contenuto misto Testo oppure elementi non in sequenza: <!ELEMENT element-name (#PCDATA child1...)*> Esempio : <!ELEMENT nota (#PCDATA da a messaggio)*> Esempio XML <nota> <messaggio>... </messaggio> Un po' di testo <da>... </da> Ancora testo </nota>
Limitazioni <!ELEMENT item (#PCDATA (#PCDATA, item+)> Parser Error: Illegal mixed content model for 'item' <!ELEMENT item (#PCDATA)> <!ELEMENT item (#PCDATA, item+)> Parser Warning: Duplicate definition for 'item'
Dichiarazione di attributi Sintassi per la dichiarazione di attributo: <!ATTLIST element-name attribute-name attribute-type default-value> Esempio : <!ATTLIST pagamento type CDATA assegno"> Esempio XML: <pagamento type= assegno" />
Dichiarazione di attributi: note Tutte le dichiarazioni attlist per lo stesso elemento vengono fuse dal parser XML. In caso di conflitti su attributi ridefiniti, la prima definizione ha la precedenza. Si possono dichiarare un numero arbitrario di attributi in ogni ATTLIST.
Valori possibili di attribute-type Sintassi per la dichiarazione di attributo: <!ATTLIST element-name attribute-name attribute-type default-value> Possibili valori di attribute-type: CDATA character data (n1 n2 ) uno fra gli n1, n2, ID un identificatore unico IDREF riferimento ad un ID
Valori possibili di default-values Sintassi per la dichiarazione di attributo: <!ATTLIST element-name attribute-name attribute-type default-value> value valore di default se non esplicitamente specificato #REQUIRED valore obbligatorio #IMPLIED valore facoltativo #FIXED value valore di default unico ammissibile
Dichiarazioni interne di entita carattere Sintassi: <!ENTITY entity-name "entity-value"> Esempio : <!ENTITY autore "Paperino"> <!ENTITY copyright "Copyright Disney."> Esempio XML: <autore>&autore;©right;</autore>
Dichiarazioni esterne di entita carattere Sintassi: <!ENTITY entity-name SYSTEM URI > Esempio : <!ENTITY autore SYSTEM "http://www.w3c.org/entities.xml"> <!ENTITY copyright SYSTEM "http://www.w3c.org/entities.dtd"> Esempio XML: <autore>&autore;©right;</autore>
Entità parametriche Sintassi <!ENTITY % name content> Simili alle entità generali, possono essere usate solo all interno del, rendendolo parametrico. Per utilizzare un'entità parametrica: %name; Sono validi tutti i contenuti visti per le entità generali parsed (interne ed esterne).
Definire un namespace nel Nel : <!ELEMENT title ()> <!ATTLIST title xmlns CDATA #FIXED http://www.example.com/slideshow > Nel documento: <title xmlns= http://www.example.com/slideshow > Overview </title>
Validazione automatica Esistono programmi per la validazione automatica di documenti XML testano sia la ben formatezza che la validita Esempio: Sun Multi-Schema XML Validator
Progettare una struttura dati XML
Consigli per una buona progettazione Quando possibile, usare un già esistente: Si risparmia tempo Favorisce l'interscambio di dati Scegliere opportunamente attributi o elementi: <slide title= This is the title >...</slide> oppure <slide><title>this is the title</title>...</slide>
Attributi o Elementi: scelte forzate Elementi più convenienti quando: I dati contengono sottostrutture I dati contengono linee multiple Sono possibili occorrenze multiple I dati cambiano frequentemente Attributi più convenienti quando: Semplici stringhe che cambiano raramente Quando i possibili valori sono limitati
Attributi o Elementi: scelte stilistiche Le scelte stilistiche possono riguardare: Visibilità Dati visibili all'utente finale modellati come elementi Consumer/Provider Dati inseriti da utente modellati come elementi Container vs. Contents Caratteristiche del contenuto modellati come attributi
Esercizi & Laboratorio XML
Case Study: per agenda giornaliera <planner> <year value="2000"> <date month="7" day="15"> <note time="1430">doctor's appointment</note> <note time="1620">physics class at BH291C</note> </date> <date month="7" day="4"> <note>independence Day</note> </date> <date month="7" day="20"> <note time="1900">party at Joe's</note> </date> <date month="7" day="20"> <note time="1300">meeting in room 14-C</note> </date> </year> </planner>
Definizione degli elementi <planner> <year> <date> <note>doctor's appointment</note> <note>physics class at BH291C</note> </date> <date> <note>independence Day</note> </date>... </year> </planner> <!-- for day planner --> <!ELEMENT planner ( year* )> <!ELEMENT year ( date+ )> <!ELEMENT date ( note+ )> <!ELEMENT note ( #PCDATA )>
Aggiungere gli attributi <planner> <year value="2000"> <date month="7" day="15"> <note time="1430">doctor's appointment</note> <note time="1620">physics class at BH291C</note> </date> <date month="7" day="4"> <note>independence Day</note> </date>... </year> </planner> <!-- for day planner -->... <!ATTLIST year value CDATA #REQUIRED> <!ATTLIST date month CDATA #REQUIRED> <!ATTLIST date day CDATA #REQUIRED> <!ATTLIST note time CDATA #IMPLIED>
Il completo <!-- for day planner --> <!ELEMENT planner ( year* )> <!ELEMENT year ( date+ )> <!ATTLIST year value CDATA #REQUIRED> <!ELEMENT date ( note+ )> <!ATTLIST date month CDATA #REQUIRED> <!ATTLIST date day CDATA #REQUIRED> <!ELEMENT note ( #PCDATA )> <!ATTLIST note time CDATA #IMPLIED>
Documento valido <!DOCTYPE planner SYSTEM planner.dtd > <planner> <year value="2000"> <date month="7" day="15"> <note time="1430">doctor's appointment</note> <note time="1620">physics class at BH291C</note> </date> <date month="7" day="4"> <note>independence Day</note> </date> <date month="7" day="20"> <note time="1900">party at Joe's</note> </date>... </year> </planner>
Esercizio: Drugs Scrivere una per il seguente documento; poi, cambiate la sequenza di due elementi nel documento sorgente. Convalidate il documento e apportate le modifiche necessarie al affinchè risulti valido. <?xml version="1.0"?> <!DOCTYPE planner SYSTEM drugs01.dtd > <drugs> <drug> <name>aspirin</name> <content>0.4 g. acetisalicil acid, 0.24g. ascorbine acid</content> <therapy>analgetic </therapy> <available>yes</available> <analogon>andol</analogon> <contraindication>ulcer</contraindication> </drug> </drugs>
Risorse on-line www.oasis-open.org Per cercare standard industriali www.dtd.com Un repository di per documenti XML www.xml101.com/dtd Contiene tutorial e spiegazioni per creare www.w3schools.com/dtd Contiene tutorial ed esempi sulle www.schema.net Un repository di con link e risorse correlate ad XML
Domande?