150 likes | 312 Views
DTD Document Type Definition per XML. Cosa è una DTD. Una DTD è un documento Una DTD serve a definire i blocchi legali di un documento XML Definisce la struttura di un documento XML Un documento XML è well-formed se è conforme alla sintassi XML
E N D
Cosa è una DTD • Una DTD è un documento • Una DTD serve a definire i blocchi legali di un documento XML • Definisce la struttura di un documento XML • Un documento XML è well-formed se è conforme alla sintassi XML • Un documento XML è valido se è anche conforme ad una DTD.
Perché usare una DTD • Ogni documento XML può portare con sé, o riferirsi a, una descrizione del proprio formato corretto. • Gruppi di persone possono accordarsi su un formato comune per lo scambio di dati • Una applicazione può verificare automaticamente la validità dei dati scambiati sulla base della DTD.
Usare una DTD • Una DTD può essere dichiarata in linea: • <!DOCTYPE root-element [element-declarations]> • Esempio: <?xml version="1.0"?> <!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]> <note> <to>MyLove</to> <from>Gege</from> <heading>Reminder</heading> <body> Non ti scordar di me</body> </note>
Usare una DTD • Può essere definita mediante un riferimento esterno: • <!DOCTYPE root-element SYSTEM "filename"> • Esempio: • File XML: <?xml version="1.0"?> <!DOCTYPE note SYSTEM "note.dtd"> <note> <to>MyLove</to> <from>Gege</from> <heading>Reminder</heading> <body> Non ti scordar di me </body> </note> • DTD file: <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)>
I blocchi di una DTD • Elements body, messaggio – I blocchi che costituiscono un documento XML • Tags <element_name> </element_name> - Annotano (mark up) gli elementi • Attributes <element_name id=“1”> - Forniscono valori per gli elementi, qualificandoli • Entities < (<), > (>) , " (“) – definiscono testo comunemente usato • PCDATA Parsed Character Data – testo che verrà analizzato da un parser • CDATA Character Data – testo che non verrà analizzato da un parser
La dichiarazione di un elemento XML in una DTD • <!ELEMENT element-name category> oppure <!ELEMENT element-name (element-content)> • Esempi: • <!ELEMENT br EMPTY> <br /> • <!ELEMENT element-name (#PCDATA)> <!ELEMENT from (#PCDATA)> • <!ELEMENT element-name ANY> <!ELEMENT note ANY> • <!ELEMENT element-name (child-element-name)> oppure <!ELEMENT element-name (child-element-name,child-element-name,.....)> <!ELEMENT note (to,from,heading,body)>
<!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> Quando i figli vengono dichiarati in sequenza separata da virgole devono apparire nel medesimo ordine. I figli devono pure essere dichiarati e possono avere altri figli
Cardinalità degli elementi • <!ELEMENT element-name (child-name)> Cardinalità 1 • <!ELEMENT element-name (child-name+)> Cardinalità almeno 1 • <!ELEMENT element-name (child-name*)> Cardinalità 0 o più • <!ELEMENT element-name (child-name?)> Cardinalità 0 o 1 • Dichiarazioni e/o <!ELEMENT note (to,from,header,(message|body))> <!ELEMENT note (#PCDATA|to|from|header|message)*>
Attributi • <!ATTLIST element-name attribute-name attribute-type default-value> • Esempio DTD: • <!ATTLIST payment type CDATA "check"> • Esempio XML: • <payment type="check" />
Attributi attribute-type • CDATA character data • (en1|en2|..) lista enumerata • ID id univoco • IDREF id di un altro elemento • IDREFS Lista di altri id • NMTOKEN nome XML valido • NMTOKENS Lista di nomi XML validi • ENTITY Entità • ENTITIES Lista di entità • NOTATION Nome di una notation • xml: Valore XML predefinito
Value default value • #REQUIRED il valore deve essere presente • #IMPLIED il valore non deve essere presente • #FIXED value valore costante • Default: <!ELEMENT square EMPTY> <!ATTLIST square width CDATA "0"> <square width="100" /> • Implied: <!ATTLIST contact fax CDATA #IMPLIED> <contact fax="555-667788" /> • Required: <!ATTLIST person number CDATA #REQUIRED> <person number="5677" /> • Fixed: <!ATTLIST sender company CDATA #FIXED "Microsoft"> <sender company="Microsoft" />
Entità • Oltre a quelle standard possono essere definite in una DTD, sia internamente che come riferimento esterno • Interno:<!ENTITY entity-name "entity-value"> <!ENTITY writer "Donald Duck."> • <author>&writer;</author> • Esterno: <!ENTITY entity-name SYSTEM "URI/URL"> • <!ENTITY writer SYSTEM "http://www-ictserv.poliba.it/entita/entita.xml"> • <author>&writer;</author>
<h:html xmlns:ama="http://www.amazon.it/books”xmlns:h="http://www.w3.org/HTML/1998/html4"> • <h:head><h:title>Book Review</h:title></h:head> • <h:body> • <ama:bookreview style=“rilegato” h:style=“{font-size=18;}”> • <ama:title>3 Uomini in barca</ama:title> • <h:table> • <h:tr><h:td>Author</h:td> <h:td>Price</h:td> • <h:td>Pages</h:td> <h:td>Date</h:td> </h:tr> • <h:tr> • <h:td><ama:author>Jerome K. Jerome</ama:author></h:td> • <h:td><ama:price>25.000</ama:price></h:td> • <h:td><ama:pages>352</ama:pages></h:td> • <h:td><ama:publisher>Mondadori</ama:publisher></h:td> • </h:tr> • </h:table> • </ama:bookreview> • </h:body> • </h:html>
I namespace sono stati introdotti dopo i DTD, e quindi esprimere namespace nei DTD non è facile. L'unico modo è di esprimere come nomi validi i nomi qualificati, bloccando il prefisso. • <!DOCTYPE a:item [ • <!ELEMENT a:item (a:title, a:publisher)> • <!ATTLIST a:item • xmlns:a CDATA #FIXED "http://www.betterbooks.org"> • <!ELEMENT a:title (#PCDATA) > • <!ELEMENT a:publisher (#PCDATA) > • ]> • <a:item xmlns:a="http://www.betterbooks.org"> • <a:title>The Importance of Namespaces</a:title> • <a:publisher>BestPublishersInTheWorld</a:publisher> • </a:item> • Da notare che la dichiarazione di namespace va sia nel DTD (viene considerata un attributo), sia nel documento (come dichiarazione vera e propria)