Breve Introduzione a XML Breve Introduzione a XML Origini ! XML (eXtensible Markup Language) deriva da SGML (Standard Generalized Markup Language). ! Sia con XML che con SGML è possibile definire linguaggi di markup specifici per vari domini, come la finanza o la matematica. ! Ad esempio, HTML è uno dei linguaggi derivati da SGML. ! XML, rispetto a SGML, è di più semplice utilizzo, e nasce per specificare linguaggi di markup da utilizzare su Internet. ! Inizialmente, XML nasce come formato di scambio di dati. ! Ci occuperemo di XML dal punto di vista della memorizzazione e ricerca di dati. ! Di conseguenza, non ne vedremo tutti i dettagli, ma solo gli aspetti rilevanti per la gestione di dati. 2 Breve Introduzione a XML Un esempio di documento XML <?xml version="1.0"?> <?tex doctype[report] ?> <doc isbn="2-266-04744-2"> <!-- manca l’editore! --> <autore>T. Harris</autore> <titolo xml:lang="en">The silence of the lambs</titolo> <titolo xml:lang="fr">Le silence des agneaux</titolo> <commento> Un libro pieno di <i>suspance</i>. </commento> <prezzo valuta="euro">7</prezzo> </doc> 3 Breve Introduzione a XML Markup e character data <?xml version="1.0"?> <?tex doctype[report] ?> <doc isbn="2-266-04744-2"> <!-- manca l’editore! --> <autore>T. Harris</autore> <titolo xml:lang="en">The silence of the lambs</titolo> <titolo xml:lang="fr">Le silence des agneaux</titolo> <commento> Un libro pieno di <i>suspance</i>. </commento> <prezzo valuta="euro">7</prezzo> </doc> 4 Breve Introduzione a XML Prologo <?xml version="1.0"?> PROLOGO <?tex doctype[report] ?> <doc isbn="2-266-04744-2"> <!-- manca l’editore! --> <autore>T. Harris</autore> <titolo xml:lang="en">The silence of the lambs</titolo> <titolo xml:lang="fr">Le silence des agneaux</titolo> <commento> Un libro pieno di <i>suspance</i>. </commento> <prezzo valuta="euro">7</prezzo> </doc> 5 Breve Introduzione a XML Prologo ! Il prologo contiene informazioni utili per l’interpretazione del documento. ! In particolare, esso può contenere: ! Una dichiarazione che il documento è in formato xml (opzionale). ! Una grammatica che permette di validare il contenuto del documento (opzionale). ! Commenti e informazioni per applicazioni software che utilizzeranno il documento (Processing Instructions, o PI) (zero o più). 6 Breve Introduzione a XML Corpo del documento <?xml version="1.0"?> <?tex doctype[report] ?> <doc isbn="2-266-04744-2"> CORPO DEL <!-- manca l’editore! --> DOCUMENTO <autore>T. Harris</autore> <titolo xml:lang="en">The silence of the lambs</titolo> <titolo xml:lang="fr">Le silence des agneaux</titolo> <commento> Un libro pieno di <i>suspance</i>. </commento> <prezzo valuta="euro">7</prezzo> </doc> 7 Breve Introduzione a XML Corpo del documento ! Il corpo del documento è composto da un elemento, che può contenere a sua volta altri elementi annidati al suo interno, nonché commenti. ! Vedremo tramite qualche esempio come si scrivono elementi ben formati. 8 Breve Introduzione a XML Elementi ! Un elemento può avere due forme: <nome lista_attributi> contenuto… </nome> (forma estesa) <nome lista_attributi /> (forma contratta) 9 Breve Introduzione a XML Elementi e attributi ben formati (1) ! Ogni elemento deve essere contenuto tra un tag di apertura ed un /tag di chiusura o con una forma contratta. <?xml version="1.0"?> <?tex doctype[report] ?> <doc isbn="2-266-04744-2"> <titolo xml:lang="en"> The silence of the lambs </titolo> <prezzo euro="7"/> </doc> <BR> ERRORE: questo tag (BR) è aperto ma non chiuso 10 Breve Introduzione a XML Elementi e attributi ben formati (2) ! I nomi degli elementi e degli attributi sono case-sensitive. ERRORE <?xml version="1.0"?> <?tex doctype[report] ?> <doc isbn="2-266-04744-2"> <titolo xml:lang="en"> The silence of the lambs </titolo> <prezzo euro="7"/> </DOC> 11 Breve Introduzione a XML Elementi e attributi ben formati (3) ! Gli elementi devono essere annidati correttamente, e c’è un solo elemento che contiene tutti gli altri. <?xml version="1.0"?> <?tex doctype[report] ?> <doc isbn="2-266-04744-2"> <b><i>Libro assente</b></i> </doc> ERRORE 12 Breve Introduzione a XML Elementi e attributi ben formati (4) ! I valori degli attributi devono essere compresi tra apici o doppi apici. <?xml version="1.0"?> <?tex doctype[report] ?> <doc isbn="2-266-04744-2"> <titolo xml:lang=en> The silence of the lambs </titolo> <prezzo euro="7"/> </doc> ERRORE 13 Breve Introduzione a XML Elementi e attributi ben formati (5) ! Un elemento non può avere più attributi con lo stesso nome. SCORRETTO <libro autore=“Rossi” autore=“Verdi”/> CORRETTO <libro> <autore>Rossi</autore> <autore>Verdi</autore> </libro> 14 Breve Introduzione a XML Document Type Declaration ! All’inizio di un documento XML può essere presente una dichiarazione del tipo di documento. ! Essa contiene una grammatica, detta Document Type Definition, o DTD, con il doppio scopo di vincolare e completare i documenti. ! Il DTD è composto da dichiarazioni di markup, che definiscono cio' che puo' e non puo' essere scritto nel relativo documento XML. ! I DTD determinano quali elementi possono essere contenuti nel documento, come possono essere usati, quali sono i valori di default degli attributi, e altri vincoli. 15 Breve Introduzione a XML Documenti validi – ben formati ! Un documento XML è valido se: ! Contiene un DTD ! Ne è conforme Documenti validi Documenti ben formati Documento ben formato ma non valido, perchè non possiede un DTD: <saluti>Ciao, mondo!</saluti> 16 Breve Introduzione a XML Esempi di Document Type Declaration (1) ! Definiamo un tipo di documento chiamato saluti che contiene un elemento <saluti>, che non contiene altri elementi. Vengono poi dichiarati gli attributi di <saluti>, in questo caso il solo id. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE saluti [ <!ELEMENT saluti (#PCDATA)> <!ATTLIST saluti id ID #REQUIRED> ]> <saluti id="0001">Ciao, mondo!</saluti> DTD 17 Breve Introduzione a XML Esempi di Document Type Declaration (2) ! Gli stessi vincoli possono essere specificati in un file esterno (ciao.dtd) e dichiarati nel seguente modo. <?xml version="1.0"?> <!DOCTYPE saluti SYSTEM "ciao.dtd"> <saluti>Ciao, mondo!</saluti> 18 Breve Introduzione a XML DTD e XML Schema ! Un DTD vincola un documento XML. ! E’ possibile però specificare vincoli più complessi di quelli definibili con un DTD. ! Ad esempio, chiavi importate, o vincoli di unicità, o domini di elementi e attributi (come in SQL). ! XML Schema permette di specificare tali vincoli, ed è quindi una alternativa al DTD. ! Inoltre, i vincoli di XML Schema sono espressi in XML. 19 Breve Introduzione a XML Usi propri e impropri di XML ! XML permette una grande libertà al creatore di documenti. ! Egli può decidere quali tag e attributi utilizzare, e dove memorizzare i dati. ! Quando si utilizza XML per memorizzare dati, bisogna però fare attenzione all’utilizzo corretto degli elementi del modello dei dati: elementi, attributi, contenuti, gerarchie. ! Forniamo alcune linee guida. 20 Breve Introduzione a XML 1 – Dati nel contenuto degli elementi ! I dati devono essere memorizzati nel contenuto degli elementi. ! Ad esempio, <libro> <titolo>I Promessi sposi</titolo> </libro> Va preferito a <libro titolo="I Promessi sposi" /> DA EVITARE 21 Breve Introduzione a XML 2 – Metadati negli attributi o nei nomi degli elementi <libro> <caratteristica> DA EVITARE <nome>titolo</nome> <valore>I Promessi sposi</valore> </caratteristica> </libro> ! In questo caso, titolo è un metadato, per cui non deve apparire come contenuto. 22 Breve Introduzione a XML 3 – Uso (s)corretto delle gerarchie <db> DA EVITARE <titolo>I Promessi sposi</titolo> <autore>Manzoni</autore> <titolo>Notre-Dame de Paris</titolo> <autore>Hugo</autore> </db> ! I due titoli e i due autori sono separati solo dall’ordine degli elementi, mentre compongono oggetti ben distinti (si riferiscono a due libri diversi). ! <titolo> e <autore> devono essere figli di un elemento <libro>, non di un elemento <db>. 23 Breve Introduzione a XML 4 – Uso corretto delle gerarchie <db> <libro> <titolo>I Promessi sposi</titolo> <autore>Manzoni</autore> </libro> <libro> <titolo>Notre-Dame de Paris</titolo> <autore>Hugo</autore> </libro> </db> 24