1 Il linguaggio XML per la rappresentazione dei dati Lo Extensible Markup Language o XML è stato concepito da un gruppo di lavoro del World Wide Web Consortium (W3C) a metà degli anni ’90 XML è un «metalinguaggio» che consente di definire altri linguaggi E’ uno strumento utilizzato principalmente per definire: - documenti con marcatori in cui i tag non sono predefiniti - collezioni di dati semi-strutturati rappresentati in formato testuale. È lo standard più utilizzato per l’interscambio di documenti prodotti con applicazioni software diverse e di dati tra DBMS di diversi produttori. A differenza di HTML, XML è un linguaggio finalizzato solo alla memorizzazione e all’interscambio di dati, non alla loro visualizzazione
2 Il seguente file di testo è un documento XML che rappresenta gli indirizzi di posta elettronica e le password degli utenti di un sistema informatico: Pippo 0A1B2C3D4E5F Pluto A9B8C7D6E5F4
3 I documenti in formato XML hanno una struttura ad albero Esempio: struttura ad albero del documento XML precedente Pippo 0A1B2C3D4E5F Pluto A9B8C7D6E5F4
4 Sintassi dell’XML 1.riga iniziale: 2.tag iniziano con caratteri alfabetici o _ (es.:Sì:,, NO:, ) 3.tag: solo simboli alfanumerici. Ammessi: “-” “_” “.” NO spazi. 4.chiusura tag obbligatoria: 5.nidificazione tag gerarchica, es: tutto il documento XML deve essere compreso in unico tag radice aperto e chiuso,es:... 7.i tag possono avere attributi, i cui valori sono compresi tra apici o doppi apici, es: ciao 8.commenti compresi tra 9.simboli chiave: << >> && “" ‘'
5 Giorgio Fiorenzo C'erano molti alunni a scuola? Esempio: documento XML che rappresenta un messaggio SMS Qui l’elemento radice è MESSAGE; timestamp è un suo attributo Un elemento XML è ciò che è compreso tra un tag di apertura e il corrispondente tag di chiusura. Un elemento può contenere: testo (es.: gli elementi from,to, text contengono testo) attributi (es.: l’elemento MESSAGE contiene l’attributo timestamp) altri elementi (es.: l’elemento MESSAGE contiene tre elementi: from, to, text) nulla (elemento vuoto) (es: )
6 Sintassi abbreviata per elementi vuoti: ( anziché ) Attributo predefinito xml:lang per specificare la lingua usata in un elemento (possibili valori: it,es,en,fr,de, ecc.) Giorgio Fiorenzo Giorgio Fiorenzo C'erano molti alunni a scuola? La riga: equivale a:
7 Giorgio Fiorenzo C'erano molti alunni a scuola? Attributo o elemento ? In generale gli attributi dovrebbero essere utilizzati solo per fornire informazioni accessorie e non per rappresentare i dati Esempio: Se la data/ora del messaggio è un dato che lo caratterizza bisognerebbe trasformare l'attributo timestamp negli elementi date e time 07/10/ :00:00 Giorgio Fiorenzo C'erano molti alunni a scuola?
8 Per qualificare il contenuto di un elemento come CDATA (Character Data) lo si inserisce tra Giorgio Fiorenzo <!CDATA[ Ti invio un esempio di XML:... ]]> In questo modo il contenuto dell’elemento non viene analizzato. Ad esempio così è possibile inserire del codice HTML all’interno di un elemento in un file XML.
9 Se nel documento XML ci sono caratteri non standard ASCII (es.caratteri accentati), bisogna specificare il tipo di codifica utilizzata. Windows-1252Codifica a 8 bit dei caratteri dell’Europa occidentale adottata dai sistemi operativi Windows ISO Codifica standard a 8 bit dei caratteri dell’Europa occidentale UTF-8Codifica Unicode che utilizza da 8 a 32 bit per il singolo carattere UTF-16Codifica Unicode che utilizza 16 bit per il singolo carattere adottata dal linguaggio Java Giorgio Fiorenzo Perché... più di così...
10 E’ sempre possibile rappresentare la struttura di un documento XML mediante un diagramma ad albero Stefano Benni Terra! Feltrinelli 1983
11 Un documento XML che rispetta le regole sintattiche di base è denominato ben formato La verifica del rispetto delle regole sintattiche di un documento XML può essere effettuata utilizzando specifici strumenti software: molti browser o editor specializzati per programmatori sono in grado di verificare che un documento XML sia ben formato. All’URL validator.w3.org è disponibile uno strumento utilizzabile on-line per la verifica sintattica di documenti XML e di pagine HTML. Anche se un documento XML è ben formato (cioè sintatticamente corretto) rimane il problema di verificare che impieghi effettivamente i tag previsti e in modo corretto; inoltre il contenuto di un elemento rappresenta spesso un dato che deve rispettare regole di tipizzazione.
12 Perché un documento XML sia ben formato deve rispettare le seguenti regole: 1.Ogni documento XML deve contenere un unico elemento di massimo livello (root) che contenga tutti gli altri elementi del documento. Le sole parti di XML che possono stare all'esterno di questo elemento sono i commenti e le direttive di elaborazione (per esempio, la dichiarazione della versione di XML) 2.Ogni elemento deve avere un tag di chiusura o, se vuoti, possono prevedere la forma abbreviata (/>) 3.Gli elementi devono essere opportunamente nidificati, cioè i tag di chiusura devono seguire l'ordine inverso dei rispettivi tag di apertura 4.XML fa distinzione tra maiuscole e minuscole, per cui i nomi dei tag e degli attributi devono coincidere nei tag di apertura e chiusura anche in relazione a questo aspetto 5.I valori degli attributi devono sempre essere racchiusi tra singoli o doppi apici
13... abcdefghi... </testo Nel codice XML seguente ci sono diversi errori e il documento pertanto non è ben formato.
14 Stefano Benni Terra! Feltrinelli 83 Mark Twain Le avventure di Huckleberry Finn 1884 Herman Melville Moby Dick milleottocentocinquantuno Il seguente documento XML che rappresenta una collezione di libri è ben formato Tuttavia i dati relativi ai singoli libri non sono presenti in modo coerente. Riesci a individuare le 5 anomalie? (Se no, fai click) libro 3: elemento editore vuoto libro 3: l’anno è espresso in caratteri libro 2: manca elemento editore libro 2: usa il tag anziché libro 1: l’anno è in forma abbreviata
15 Abbiamo dunque bisogno di definire una grammatica per il linguaggio di markup che abbiamo ideato. Una grammatica è un insieme di regole che indica quali vocaboli (elementi) possono essere utilizzati e con che struttura è possibile comporre frasi (documenti). Una grammatica definisce uno specifico linguaggio “linguaggio di markup”. Dunque se un documento XML rispetta le regole definite da una grammatica è detto valido per un particolare linguaggio. Un documento ben formato può non essere valido rispetto ad una grammatica, mentre un documento valido è necessariamente ben formato. Gli approcci più diffusi alla creazione di grammatiche per documenti XML sono: DTD (Document Type Definition) e XSD (XML Schema Definition) Grammatica di un linguaggio di markup e validità di un documento Per evitare i problemi dell’esempio precedente, ci vuole un metodo per: a)definire la struttura che un dato documento XML deve avere; b)definire la tipologia che i dati contenuti negli elementi devono rispettare.
16 Un documento XML può essere all'origine di diversi tipi di elaborazione: generazione di altri documenti, eventualmente in formati diversi, controllo delle impostazioni di programmi, rappresentazione di immagini, ecc. Tutti i possibili impieghi di XML, però, si fondano su due tipi di elaborazione preliminare: la verifica che un documento sia ben formato e la sua validità rispetto ad una grammatica. I software che si occupano di queste elaborazioni sono detti parser e sono degli strumenti standard disponibili sulle diverse piattaforme. Possiamo suddividere i parser in due categorie: Parser per XML e validazione di un documento -parser non validante è un parser che verifica soltanto se un documento è ben formato -parser validante è un parser che, oltre a verificare che un documento è ben formato, verifica se è corretto rispetto ad una data grammatica La maggior parte degli editor XML più recenti hanno un parser integrato o si appoggiano su parser esterni per effettuare la convalida dei documenti. Per la validazione di un documento XML tramite codice è possibile utilizzare diverse librerie. Tra le più note: MSXML (componente di Internet Explorer dalla versione 4.0 in poi, quindi è presente su tutte le macchine)
17 Il metodo più recente e oggi preferito per definire uno schema di validazione per un documento XML è XSD (XML Schema Definition). Uno schema XSD definisce: gli elementi di un documento XML e la loro relazione gerarchica; gli eventuali attributi degli elementi; il numero e l’ordinamento degli elementi; gli eventuali elementi vuoti; il tipo dei dati contenuti negli elementi e negli attributi; i valori predefiniti o costanti del contenuto degli elementi e degli attributi. Note: il linguaggio XSD per definire lo schema è a sua volta un linguaggio XML prima di XSD si usava DTD (Document Type Definition), che però presenta diverse limitazioni XSD supera alcune limitazioni presenti nel DTD, tra cui il fatto di non avere una sintassi XML compatibile, non consentire di specificare il tipo di dato per gli attributi, il numero minimo e massimo di occorenze di un tag, ecc.
18 Un possibile schema XSD per un documento XML che rappresenta un singolo libro potrebbe essere il seguente: Se il precedente schema XSD è salvato nel file libro.xsd, un documento XML che si attiene a tale schema potrebbe essere il seguente: <libro xmlns:xsi=" xsi:noNamespaceSchemaLocation="libro.xsd"> Stefano Benni Terra! Feltrinelli 1983 Schema di riferimento elemento radice
19 Progettare un linguaggio XML significa definirne lo schema, cioè la sintassi che un qualsiasi documento XML deve rispettare per appartenere al linguaggio. Un documento XML valido è un documento XML ben formato che rispetta le regole dello schema che riferisce. La validazione di un documento XML rispetto allo schema riferito viene normalmente effettuata mediante strumenti software automatici (es.: software open source XSV) E’ possibile effettuare la validazione di un documento XML rispetto a uno schema XSD collegandosi al seguente indirizzo:
20 Un elemento semplice è un elemento XML che può contenere solo testo: non può contenere attributi o altri elementi. Dato che XML è un formato testuale, il testo può rappresentare stringhe di caratteri, oppure valori numerici, date, orari ecc. Tipi principali xs:stringStringhe di caratteri xs:decimalValori numerici non necessariamente interi xs:integerValori numerici interi xs:booleanBoolean xs:dateData nel formato aaaa-mm-gg (a: anno, m: mese, g: giorno) xs:timeOra nel formato oo-mm-ss (o: ora, m: minuti, s: secondi) xs:uriReferenceURL
21 Esempi Elementi XML validi in base alle definizioni precedenti: Walt Disney Elementi XML invalidi: 5/12/1901 sessantacinque
22 Attribuiti opzionali di un elemento: default e fixed Elementi XML validi in base alle definizioni precedenti: verde Elementi XML invalidi:
23 Il successo di XML è legato alla sua flessibilità: spesso le aziende e gli sviluppatori software definiscono schemi XML per i file che costituiscono l’input o l’output delle applicazioni che realizzano. Per esempio, i formati dei file prodotti dalle applicazioni Office di Microsoft sono in formato XML (docx, xslx, ecc.) CML (Chemical Markup Language), che è usato per la definizione di strutture molecolari; EPUB (Electronic Publication), che è un formato aperto per la pubblicazione di e-book; GML (Geographic Markup Language) In alcuni casi sono stati definiti dei veri e propri linguaggi XML aventi scopi specifici; tra questi ricordiamo:
24 Il linguaggio di programmazione Java prevede una API (Application Program Interface) standard per la gestione di documenti XML denominata JAXP (Java API for XML Processing). Le classi del package JAXP consentono di effettuare le seguenti elaborazioni: validazione di un documento XML rispetto a uno schema XSD; produzione di un nuovo documento XML ed eventuale salvataggio in un file di testo; lettura di un documento XML contenuto in un file di testo o reso disponibile come risorsa in rete ed eventuale verifica della correttezza; trasformazione di un documento XML La lettura di un documento XML in una struttura dati che è possibile gestire da parte del codice di un programma è tecnicamente definita parsing.
25 Il parsing di un documento XML può avere 2 modalità: SAX (Simple API for XML) DOM (Document Object Model) I package JAXP consentono di effettuare il parsing sia con modalità SAX che con modalità DOM SAX lettura sequenziale del documento non consente di modificare il documento analizzato più efficiente ma piuttosto rigido DOM memorizzazione dell’intero albero del documento maggiore flessibilità consente di modificare il documento analizzato e/o costruirne uno nuovo richiede molta più memoria