eXtensible Markup Language (XML) Laboratorio di Ingegneria Informatica n n XML Parser per XML Corso di laurea specialistica in Ingegneria Informatica XML: cosa è n XML: le origini n XML: Extensible Markup Language: q q q è un linguaggio che consente la rappresentazione di documenti e dati strutturati su supporto digitale è uno dei più potenti e versatili sistemi per la creazione, archiviazione, preservazione e disseminazione di documenti digitali… … ma la sua sintassi rigorosa e al contempo flessibile ne rende possibile l’applicazione anche nella rappresentazione di dati strutturati, fornendo una soluzione alternativa ai tradizionali sistemi DBMS relazionali La Famiglia di XML n n n XML: principi fondamentali SGML HTML XHTML n XML è stato sviluppato dal World Wide Web Consortium (http://www.w3.org) Le specifiche sono state rilasciate come W3C Recommendation nel 1998 e aggiornate nel 2004 XML deriva da SGML, un linguaggio di mark-up dichiarativo sviluppato dalla International Standardization Organization (ISO), e pubblicato ufficialmente nel 1986 con la sigla ISO 8879 XML nasce come un sottoinsieme semplificato di SGML orientato alla utilizzazione su World Wide Web… … ma ha assunto ormai un ruolo autonomo e una diffusione ben maggiore del suo progenitore XML n n n WML XML adotta un paradigma di codifica dichiarativo e descrittivo XML descrive un documento come una struttura ad albero XML introduce il concetto di “tipo di documento” e di “sintassi del documento” MathML SOAP 1 XML: caratteristiche n n XML è un metalinguaggio, che permette di definire sintatticamente linguaggi di markup (nuovi linguaggi) Un linguaggio XML permette di esplicitare la (le) struttura(e) di un documento in modo formale mediante marcatori (markup) che vanno inclusi all’interno del testo (character data) XML: caratteristiche XML: caratteristiche n n n XML: caratteristiche XML è indipendente dal tipo di piattaforma hardware e software su cui viene utilizzato XML permette la rappresentazione di qualsiasi tipo di documento (e di struttura testuale) indipendentemente dalle finalità applicative XML è indipendente dai dispositivi di archiviazione e visualizzazione n n n On-line WWW File XML n XML può essere usato per la rappresentazione di dati strutturati (archivi, tabelle, matrici) in alternativa ai formati di database tradizionali XML può essere usato come formato di scambio dati in applicazioni middleware CD-ROM <p>Paragarafo .. <p>Paragrafo DBMS NATIVI O RELAZIONALI DOCUMENT MANAGEMENT SYSTEMS XML: caratteristiche n n Carta <Title> Titolo </title> un documento XML può essere archiviato su qualsiasi tipo di supporto digitale (attuale e… futuro!) un documento XML può essere visualizzato su qualsiasi dispositivo di output XML: caratteristiche XML adotta un formato di file di tipo testuale: sia il mark-up sia il testo sono stringhe di caratteri XML si basa sul sistema di codifica dei caratteri ISO 10646/UNICODE Un documento XML è “leggibile” da un utente umano senza la mediazione di software specifico n n n XML è uno standard di pubblico dominio ogni software “conforme XML” è in grado di gestire dati in formato XML sono disponibili numerose applicazioni e librerie open source per la manipolazione di dati in formato XML basate su diversi linguaggi di programmazione (Java, C, Python, Perl…) una applicazione in grado di elaborare dati in formato XML viene definita elaboratore XML 2 XML: Vantaggi XML permette agli sviluppatori di creare facilmente strutture ad-hoc per contenere informazione strutturata. I parser XML sono diffusi su tutte le piattaforme e free. Gli sviluppatori possono appoggiarsi a questi per decodificare e validare le strutture XML, limitandosi poi a gestire solo l'informazione contenuta usando API specifiche (DOM, SAX). • • XML è completamente text-based, quindi leggibile anche dagli esseri umani e facilmente editabile anche a mano. Supporta UNICODE, quindi è adatto a ogni tipo di scrittura. Essendo dati testuali strutturati esattamente come HTML, i dati XML possono essere trasportati usando il protocollo HTTP anche attraverso firewall (SOAP). • • Il concetto di metalinguaggio n XML: Svantaggi n I documenti XML, a causa delle struttura testuale e dei tag, tendono ad essere molto più ingombranti di quelli in formato binario, quindi la loro trasmissione sulla rete non è ottimale. n I parser XML non sono veloci come quelli scritti ad-hoc per formati specifici, soprattutto se binari. Il concetto di metalinguaggio XML è un metalinguaggio q q q q XML definisce un insieme regole (meta)sintattiche, attraverso le quali è possibile descrivere formalmente un linguaggio di markup, detto “applicazione XML” ogni applicazione XML eredita un insieme di caratteristiche sintattiche comuni ogni applicazione XML a sua volta definisce una sintassi formale particolare ogni applicazione XML è dotata di una semantica specificata in modo non formale Il concetto di tipo di documento n n n La definizione di una applicazione XML si basa su un determinato tipo di documento Un tipo di documento descrive le caratteristiche di una classe di documenti strutturalmente omogenei Il tipo di documento è il fondamento della sintassi e della semantica di una applicazione XML XML metalinguaggio metasintassi linguaggi TEI XHTML DocBook sintassi documenti Il concetto di tipo di documento n n Un tipo di documento descrive la struttura della classe di documenti cui si riferisce come un albero ordinato di componenti testuali o elementi Un tipo di documento è caratterizzato da q q q un insieme di elementi strutturali le relazioni di dipendenza tra gli elementi le relazioni di ricorrenza degli elementi 3 La struttura gerarchica ordinata Il concetto di tipo di documento testo n corpo ? ? frontespizio introduzione ? + n appendice capitolo + + titolo ? paragrafo titolo titolo autore PCDATA + * enfasi titolo paragrafo + paragrafo * citazione PCDATA enfasi citazione La Document Type Definition n n Una DTD è costituita da un elenco di dichiarazioni (markup declaration) che descrivono la struttura del documento Le dichiarazioni di una DTD definiscono: q q q n gli elementi strutturali (element) di un documento mediante un identificatore generico il modello di contenuto di ogni elemento (content model) ovvero gli elementi che contiene ed i loro rapporti (un elemento può essere vuoto) la lista degli attributi associati a ciascun elemento e il loro tipo Strutture XML: gli elementi La Document Type Definition n n n n n I componenti strutturali di un documento sono denominati elementi (element) Ogni nodo dell’albero del tipo di documento è un (tipo di) elemento Ogni (tipo di) elemento è dotato di un nome (detto identificatore generico) che lo identifica XML non fornisce alcun modo per definire la semantica di una DTD ogni elemento è definito esclusivamente interamente dal suo nome e dal suo contenuto ogni altra specificazione semantica va fornita mediante documentazione in lingua naturale o in altre notazioni logiche Strutture XML: gli elementi n n La struttura ad albero del tipo di documento determina la sintassi del linguaggio di markup XML La sintassi di un tipo di documento deve essere espressa implicitamente (mediante il mark-up) in ogni documento XML La definizione formale della sintassi di un tipo di documento XML può essere espressa esplicitamente in una Document Type Definition (DTD) o un XML Schema n n Esiste uno e uno solo elemento, detto elemento radice (corrispondente al nodo radice dell’albero), che non è contenuto da nessun altro e che contiene direttamente o indirettamente tutti gli altri Ogni elemento, escluso l’elemento radice, deve essere contenuto da un solo elemento (elemento padre) e può contenere altri sotto-elementi (elementi figli) e/o stringhe di caratteri Esiste un sottoinsieme di elementi che non contengono altri elementi e che possono q q essere vuoti contenere esclusivamente stringhe di caratteri 4 Strutture XML: gli attributi n A ogni elemento possono essere associati uno o più attributi (attribute) che ne specificano ulteriori caratteristiche o proprietà non strutturali. Ad esempio: q q q q q il tipo rispetto a una data tassonomia la lingua del suo contenuto testuale un identificatore univoco un numero di ordine etc. Strutture XML: le entità Strutture XML: gli attributi n q q n n n n Un documento XML (in quanto oggetto digitale) ha una struttura fisica Dal punto di vista fisico un documento è composto da unità di archiviazione che sono denominate entità (entity) Esiste almeno una entità in ogni documento XML: la document entity, che contiene il documento stesso Strutture XML: le entità un nome che li identifica un valore Il valore di un attributo può avere un tipo esplicitato nella DTD Se un documento XML è solo ben formato, tutti i valori degli attributi sono di tipo CDATA Strutture XML: le entità n n Gli attributi XML hanno sono caratterizzati da In generale una entità è qualsiasi sequenza di byte considerata indipendentemente dalla sua funzione strutturale q q q q n un singolo carattere UNICODE una stringa di testo XML (caratteri e mark-up) un intero file XML esterno un intero file non XML (es. immagini digitali, etc.) È possibile ad esempio rappresentare nel contenuto di un documento caratteri non presenti sulla tastiera mediante entità Un Documento XML <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" h r e f ="C:\Documenti \ Collection.xsl"?> n n n n Le entità vanno definite con apposite dichiarazioni nella DTD Una entità ha un nome e un contenuto In un documento l’inserimento di una entità avviene mediante un riferimento a entità che ne specifica il nome Un processore XML sostituirà automaticamente il contenuto dell’entità al posto del riferimento <!DOCTYPE collection SYSTEM "C:\DocumentiCollection.dtd"> <collection x m l n s="www.univaq.it/ ~gdellape/esempio/"> <CD number="1"> <song album ="santana1" track ="11"> <title> African Bamba</ title> <length >4 : 4 2</length > </song> <song album ="santana1" track ="9"> <artist >Santana &amp; Mana</artist> <title> Corazon Espinado</title> <comment> <!CDATA[First Hit from the Album]]> </comment> <length >4 : 3 6</length > </song> <album ID="santana1"> <artist >Santana</artist> <title> Supernatural</title> <year>1999</year> </album> </CD></ collection> 5 Elementi n n Elementi: Regole Gli elementi sono alla base della strutturazione dei documenti XML. Un elemento è un frammento di dati, limitato ed indentificato (tramite un nome) da un tag. Tag di apertura Elemento “artist” Elemento “title” Tag di chiusura <album> <artist> Santana </artist> <title > Supernatural </title > </album > n Elemento “album” Elementi: Sintassi n n n Il tag di apertura di un elemento ha la forma seguente: n Elementi: Gerarchia n <nome attributi > q q n nome è il nome dell’elemento. attributi è una lista opzionale di attributi per l’elemento. n <a> <b> Testo </b> <c> <d/> </c> </a > </nome> n nome è lo stesso identificatore usato nell’apertura. Alcuni elementi possono essere privi di contenuto; in questo caso è possibile omettere il tag di chiusura scrivendo quello di apertura come segue (empty tag): <nome attributi /> Attributi n n n n Gli attributi permettono di specificare proprietà degli elementi come coppie nome-valore. Sono usati per definire proprietà che non possono o non si vogliono inserire nel contenuto dell’elemento. Vengono specificati all’interno dei tag di apertura degli elementi. Al contrario degli elementi, per gli attributi l’ordine di presentazione non è significativo. Gli elementi, nidificandosi, creano la struttura ad albero tipica dei documenti XML. All’interno di questa struttura si definiscono alcuni “rapporti di parentela” utili per individuare gli elementi: • a è il nodo radice Il tag di chiusura corrispondente ha la forma seguente: q I nomi degli elementi sono case-sensitive. Ogni elemento aperto deve essere chiuso entro la fine del documento. Gli elementi possono essere nidificati, e in tal caso vanno chiusi esattamente nell’ordine inverso a quello di apertura. Un documento XML deve avere un unico elemento “radice”, in cui tutti gli altri sono nidificati • b e c sono figli di a, il testo è figlio di b, d è figlio di c • c è il padre di d, b è il padre del testo, a è il padre di b e c • b e c sono fratelli • b, c, d e il testo sono discendenti di a, d è un discendente di c, il testo è un discendente di b • a è un predecessore di b, c, d e del testo, b è un predecessore del testo, c è un predecessore di d. Namespaces n n n I namespaces servono a dichiarare l’appartenenza degli elementi a particolari linguaggi XML. Sono particolarmente utili se più linguaggi vengono mescolati nello stesso documento, con possibili di collisioni tra nomi. Ogni elemento può contenere dichiarazioni di namespaces, la cui validità è estesa a tutto il contenuto dell’elemento stesso. La dichiarazione del namespace viene inserita nei tag di apertura, in modo simile a un attributo. 6 Entità n n n n XML: documenti ben formati e validi I documenti XML sono costituiti da una serie di entità. Il documento stesso è una entità. Tutte le entità, tranne il documento e il DTD esterno, hanno un nome. Le entità parsed sono quelle più comuni, e il parser XML le sostituisce sempre col loro testo di definizione. Le entità unparsed possono contenere qualsiasi tipo di dato, anche non testuale. Il parser XML non le analizza, e sono accessibili solo usando le notazioni. XML: documenti ben formati e validi n n Un documento XML può essere valido Un documento è valido se q q n n q q n n Il controllo di validità viene effettuato da un apposito programma detto parser n Esistono parser validanti e non validanti. Questi ultimi possono ignorare tutto l’eventuale DTD, tranne le dichiarazioni di entità generali . n La parte del documento XML all’interno del nodo radice viene definita document instance Un DTD se la sua struttura è implicita nel markup e se rispetta i vincoli di buona formazione indicati nelle specifiche Un documento XML ben formato non richiede la presenza di una DTD Le Document Type Definition (DTD) n si riferisce a una DTD esplicita mediante una Doctype declaration ne soddisfa i vincoli sintattici (nome, sequenza occorrenze ed attributi degli elementi) Ogni documento XML deve essere ben formato Un documento è ben formato n Sono utilizzate per validare i documenti XML. E’ possibile infatti definire una speciale grammatica che dichiara: q q q n tutti gli elementi utilizzabili; quali elementi possono essere nidificati in altri, in che ordine e con quante occorrenze; quali attributi sono applicabili a ciascun elemento, se sono obbligatori e quali sono i loro valori predefiniti. Si possono inoltre definire entità e notazioni poi utilizzabili all’interno del documento XML o del DTD stesso. Un DTD <?xml version= "1.0" encoding= "UTF- 8"?> <!ENTITY % HTMLlat1 PUBLIC "- //W3C//ENTITIES Latin 1 for XHTML//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent"> <!ELEMENT song (artist ?, title , year?, comment?, length )> <!ATTLIST song genre (Rock|Pop|Classical|Jazz|Dance|Tecno) #IMPLIED ID ID #IMPLIED %HTMLlat1; album IDREF #IMPLIED track CDATA #IMPLIED <!ELEMENT artist (#PCDATA)> <!ELEMENT title (#PCDATA)> <!ELEMENT year (#PCDATA)> <!ELEMENT comment (#PCDATA)> <!ELEMENT length (#PCDATA)> > <!ELEMENT CD (album | song)+> <!ATTLIST CD number CDATA #REQUIRED owner CDATA #FIXED ”Giuseppe Della Penna" <!ELEMENT album (artist, title, year?, copyright?)> <!ATTLIST album ID ID #REQUIRED media CDATA #IMPLIED "CompactDisc “ > > <!ELEMENT collection (CD+)> Continua... Continua... 7 Come si crea un documento XML n n n Un documento XML contiene il mark-up (sottoforma di coppie di tag) che rappresenta linearmente la struttura gerarchica degli elementi, i loro eventuali attributi, e i caratteri del testo L’inserimento di mark-up e caratteri deve rispettare i vincoli di buona formazione indicati nelle specifiche XML Un documento valido deve rispettare anche i vincoli sintattici definiti nella DTD Vincoli di buona formazione n n n n Esiste un solo elemento radice Tutti gli elementi non vuoti devono presentare sia il tag iniziale sia il tag finale Tutti gli elementi devono essere correttamente annidati Tutti i valori di attributo devono essere racchiusi tra apici doppi o singoli XML declaration n Forme di XML declaration: q q n n n n Un documento XML è una stringa di caratteri UNICODE in codifica UTF -8 o UTF-16 I nomi di elementi, attributi e entità sono sensibili alla differenza tra maiuscolo e minuscolo Il mark-up è separato dal contenuto testuale mediante caratteri speciali: q n <>& I caratteri speciali non possono comparire come contenuto testuale e devono essere eventualmente sostituiti mediante i riferimenti a entità q &lt; &gt; &amp; La forma di un documento XML n Ogni documento XML inizia con un prologo che contiene: q q q una XML declaration eventualmente una Doctype declaration (la dichiarazione della DTD a cui il documento si riferisce) eventualmente una serie di processing instruction Doctype declaration n <?xml version="1.0"?> <?xml version="1.0“ encoding=“UTF-8”?> Se se le dichiarazioni della DTD sono inserite all’interno della entità documento è obbligatoria una dichiarazione di documento autonomo: q Aspetti di sintassi generale Se la definizione della DTD si trova in una entità esterna q <!DOCTYPE nome_DTD SYSTEM “sys-id” > n n <!DOCTYPE Antologia SYSTEM “c:\sgml\dtd\antologia.dtd” > Se la DTD è dotata di un identificatore pubblico q <!DOCTYPE nome_DTD PUBLIC “pub-id” “sys-id”> n <!DOCTYPE TEI.2 PUBLIC “-//TEI P4//DTD Main Document Type//EN” “tei2.dtd”> n n. b. il nome della DTD corrisponde al nome del suo elemento radice <?xml version="1.0" standalone="yes"?> 8 Doctype declaration n La codifica degli elementi Se la definizione della DTD si trova nella stessa entità del document instance essa va direttamente della Doctype declaration in una sezione denominata internal DTD subset <!DOCTYPE nome_DTD [ dichiarazione 1 dichiarazione 2 dichiarazione 3 ...] > n Internal DTD subset La codifica degli elementi n Del. Finale Start tag Del. Iniziale End tag <nome>contenuto dell’elemento</nome> Del. Finale End tag La codifica degli elementi n n n Nel documento ogni elemento non vuoto (contenente cioè altri elementi o caratteri) deve essere marcato da un tag iniziale e da un tag finale Ogni tag è costituito da caratteri delimitatori e dal nome dell'elemento La codifica degli elementi Sintassi di un elemento Del. Iniziale Start tag n La relazione lineare tra i tag rappresenta la relazione gerarchica tra gli elementi Per ogni elemento, se il suo tag iniziale è nel contenuto di un elemento P allora il suo tag finale deve essere nel contenuto del medesimo elemento P Detto altrimenti le coppie di tag devono annidarsi correttamene e mai sovrapporsi <text> <div1> <p>Subito, con le prime parole che le rivolse, volle avvisarla che non intendeva compromettersi in una relazione troppo seria…</p> <p>La sua famiglia? Una sola sorella non ingombrante né fisicamente né moralmente, piccola e pallida, di qualche anno più giovane di lui…</p> … </div1> </text> La codifica degli elementi SBAGLIATO!!! <p>Subito, con le prime parole che le rivolse, volle avvisarla che non intendeva compromettersi in <emph>una relazione troppo seria… </p> <p>La sua famiglia?</emph>Una sola sorella non ingombrante né fisicamente né moralmente, piccola e pallida, di qualche anno più giovane di lui… </p> 9 La codifica degli elementi CORRETTO!!! La codifica degli elementi n Gli elementi vuoti q o sono rappresentati da entrambi i tag q o assumono la seguente forma q Esempio: n <p>Subito, con le prime parole che le rivolse, volle avvisarla che non intendeva compromettersi in <emph>una relazione troppo seria… </emph> </p> <p> <emph>La sua famiglia?</emph> Una sola sorella non ingombrante né fisicamente né moralmente, piccola e pallida, di qualche anno più giovane di lui… </p> La codifica degli attributi n Ogni elemento XML può avere uno o più attributi n Un attributo ha un nome e un valore, che può assumere diverse tipologie n n …<nome_elemento> </nome_elemento>… <nome_elemento/> <img src=‘foo.gif’/> La codifica degli attributi n Gli attributi devono essere associati agli elementi all'interno del tag iniziale dopo l’identificatore q <nome_elemento nome_attributo = "valore"> contenuto… </nome_elemento> Altri eventuali attributi vanno collocati dopo il primo separati da uno o più spazi n Non possono esservi più istanze dello stesso attributo per un elemento n La codifica degli attributi <text resp=“Italo Svevo” n=“Senilità”> <div n=“1”> <p id=“C1P1”>Subito, con le prime parole che le rivolse, volle avvisarla che non intendeva compromettersi in una relazione troppo seria…</p> <p id=“C1P2”>La sua famiglia? Una sola sorella non ingombrante né fisicamente né moralmente, piccola e pallida, di qualche anno più giovane di lui…</p> <pb n=“5”/> Il riferimento alle entità n L’inclusione di una entità all’interno di un documento SGML si effettua mediante un riferimento a entità (entity reference) n La sintassi di un riferimento, valida sia per entità esterne sia interne, è la seguente: &nome_entità; Delimitatore di apertura Delimitatore di chiusura 10 Il riferimento alle entità n In questo esempio i caratteri accentati sono stati sostituiti da riferimenti a entità carattere Validazione n <p>La sua famiglia? Una sola sorella non ingombrante n&eacute; fisicamente n&eacute; moralmente, piccola e pallida, di qualche anno pi&ugrave; giovane di lui…</p> Documento XML Valido n n Un documento XML si dice valido se conforme alle specifiche del DTD associato o dello schema. Un documento non valido non cessa di essere un documento XML. Quando un documento XML viene controllato sintatticamente da un parser. Questo processo viene chiamato validazione. Schemi e DTD n Gli Schemi XML sono nati con lo stesso scopo dei DTD: q Specificare la struttura dei documenti. q Specificare il tipo dei dati utilizzabili all’interno di elementi e attributi. n n Perché gli Schemi? n I DTD usano una sintassi non XML. Perché costringere gli sviluppatori ad imparare le regole di un nuovo linguaggio? q Perché scrivere parser XML che debbano leggere anche formati non XML per la validazione? n n I DTD hanno pochi tipi di dato. Il controllo sui domini dei dati è parte integrante del controllo di un documento “ben formato”. q Esistono tipi di dato molto noti che si vorrebbero poter sfruttare (interi, reali, data/ora, ecc.). Nei DTD, il tipo di dato per gli elementi poteva essere solo testo e/o un particolare modello di contenuto. Novità negli Schemi q n Modelli di contenuto, elementi radice, … q n n Sono supportati più tipi di dato (44 contro 10) e la possibilità di definirne di nuovi o derivarne altri da tipi già esistenti applicando regole e restrizioni. Sono presenti nuovi modelli di contenuto, tra cui l’insieme (“tutti questi elementi, in qualsiasi ordine”). Si possono definire più campi chiave diversi. Si possono dichiarare classi di equivalenza tra elementi. 11 Vantaggi degli Schemi n n n Cosa Forniscono gli Schemi Generalmente, le applicazioni che devono basarsi su documenti o dati provenienti dall’esterno “sprecano” una grossa quantità di codice per controllarne la validità. Più complessi sono i dati, più il codice sarà laborioso da scrivere. Se i dati sono strutturati secondo un preciso Schema XML, l’applicazione potrà avvalersi delle funzionalità di un qualsiasi validatore di schemi in commercio! Cosa Forniscono gli Schemi n n q n n Cioè un protocollo molto specifico per lo scambio di informazioni. Un insieme di Metadati. q Lo schema contiene molte informazioni valide per l’interpretazione dei dati strutturati sulla sua base. Un DTD di esempio… <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT Creazione automatica di interfacce per la compilazione dei documenti XML associati. q Creazione di interfacce grafiche per la rappresentazione dei dati. q Uso degli schemi per definire strutture dati e protocolli per la loro manipolazione e trasmissione. …e lo Schema Corrispondente… artist (#PCDATA)> title (#PCDATA)> year (#PCDATA)> comment (#PCDATA)> length (#PCDATA)> <xs:element name="song"> <xs:complexType> <xs:sequence> <xs:element ref="artist" minOccurs ="0"/> <!ELEMENT song <xs:element ref="title"/> (artist?, title, year?, comment ?, length) <xs:element ref="year" minOccurs ="0"/> <xs:element ref="comment" minOccurs ="0"/> > <xs:element ref="length "/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="CD"> <!ELEMENT CD song+> <xs:complexType> <xs:sequence> <xs:element ref="song" maxOccurs ="unbounded "/> Questo Schema definisce lo stesso linguaggio del DTD visto in </xs:sequence> precedenza. I frammenti del DTD </xs:complexType> sono affiancati alla parte di </xs:element> schema che li sostituisce. artist (#PCDATA)> title (#PCDATA)> year (#PCDATA)> comment (#PCDATA)> length (#PCDATA)> <!ELEMENT song (artist?, title, year?, comment ?, length)> <!ELEMENT CD song+> q <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT Descrivono cioè l’organizzazione e i tipi dell’informazione. Un contratto. q Oltre che per validare i documenti istanza, si possono immaginare molti altri impieghi per gli schemi: <xs:element name="artist" type="xs:string"/> <xs:element name="comment" type="xs:string"/> <xs:element name="length" type="xs:string "/> <xs:element name="title" type="xs:string"/> <xs:element name="year" type="xs:string"/> Un modello per i dati. n n n Gli elementi blu fanno parte della sintassi DTD. Gli elementi neri fanno parte della nuova sintassi che stiamo definendo. Poiché i DTD sono stati creati prima dei namespaces, non esiste questo concetto nei DTD e gli elementi delle due sintassi sono mescolati. Validare un documento XML: n n n La validazione è un processo, il controllo sintattico è un altro (ben formato e NON ben formato) Un documento XML può essere non valido, ma rimanere ugualmente well-formatted. N.B.:tutti i documenti XML (in quanto documenti XML) sono per forza ben formati ma niente ci dice se sono conformi al proprio DTD (se lo possiedono). 12 Well-formatted Riprendendo l’esempio: FILE DTD Un file XML è anche normalmente well-formatted, cioè ben formattato e quindi rispetta le regole di XML Ø Ø Ø Ø Tutti i tag di apertura e di chiusura corrispondono. I tag vuoti utilizzano una sintassi XML speciale. Tutti i valori degli attributi sono racchiusi tra virgolette. Tutte le entità sono dichiarate. XML non è sempre corretto … n n Ø Ø Le specifiche del W3C indicano che i parser di XML possono fermarsi al primo errore di analisi del documento(non tollerano errori); Motivi: Rendere i parser più facili da scrivere; I documenti XML sono compatibili e indipendenti dal tipo di parser. FILE XML libro.dtd: <?xml encoding="UTF-8"?> <!ELEMENT libro (prefazione?,indice,capitolo+)> <!ATTLIST libro titolo CDATA #REQUIRED> <!ATTLIST libro autore CDATA #REQUIRED> <!ATTLIST libro editore CDATA #REQUIRED> <!ELEMENT prefazione (#PCDATA)> <!ATTLIST prefazione autore CDATA #IMPLIED> <!ELEMENT indice (titolo+ )> <!ELEMENT capitolo (#PCDATA)> <!ELEMENT titolo (#PCDATA)> libro.xml: <?xml version="1.0" encoding= "UTF- 8"?> <!DOCTYPE libro SYSTEM "libro.dtd"> <libro titolo="1984" autore="G.Orwell" editore= "Mondadori"> <prefazione autore="Bill Gates">Questo libro non dice il vero. Orwell ha sbagliato...</prefazione> <indice> <titolo>Parte prima</titolo> <titolo>Parte seconda</titolo> </indice> <capitolo>1. Era una notte buia e tempestosa...</capitolo> <capitolo>2. Testo del secondo capitolo...</capitolo> <capitolo>3. Testo del terzo capitolo...</capitolo> </libro> Gli errori dei parser: n Fatal Error: grave violazione di una regola della specifica; il processore notifica all’applicazione l’errore rilevato e può o meno continuare l’analisi del documento per cercare altri errori; Non deve però continuare a fornire il contenuto del documento dell’applicazione. Esempio di FATAL ERROR: n n Impossibile visualizzare la pagina XML Impossibile visualizzare l'input XML tramite il foglio di stile XSL. Correggere l'errore, quindi fare clic su Aggiorna, oppure riprovare in un momento successivo. Il tag finale "item2" non corrisponde al tag iniziale "item1". Errore durante l'elaborazione della risorsa <indice> <capitolo>1. Era una notte buia e tempestosa... </indice> </capitolo> Error: violazione di una regola della specifica; Il processore notifica all’applicazione l’errore rilevato e continua sia ad analizzare il documento, sia a fornire il contenuto all’applicazione, che deciderà il comportamento rispetto all’errore( ignorarlo, cercare di correggerlo, etc..) 13 Esempio di ERROR: I parser <capitolo>1. Era una notte buia e tempestosa...</capitolo> <bibliografia> libro1 </bibliografia> L’errore è dato da <bibliografia> perché non è definito come elemento di “libro” nel DTD; Ma se ci saranno altre righe di comando con altri errori, verranno riportati di seguito, senza fermarsi. Che cosa vuol dire “parsing” e cosa sono i parser ? Per poter usare un file XML occorre farne il "parsing", ovvero prendere un documento Xml e scandirlo, estraendone tutte le parti che lo compongono. Un parser XML è un modulo software che si colloca tra l'applicazione e il documento XML. Esso permette all'applicazione di accedere al contenuto e alla struttura del documento XML. Esistono due tipi di parser: validanti e non validanti. n n n Fare il parsing a mano n Vantaggi q q n Controllo completo Buono per semplici cose non ha bisogno di pacchetti software ausiliari Svantaggi q q q Deve essere scritto tutto sempre Noioso e facile all’errore Diventa difficile quando si usa uno schema o una DTD per validare Parsing XML n Goal: tradurre un file XML nelle strutture dati utilizzabili nei linguaggi di programmazione n Strategie possibili q q q Fare il parsing a mano con alcune librerie riutilizzabili Fare il parsing mettendo I dati in una struttura generica ad albero Fare il parsing come una sequenza di eventi Rimangono… n I parser XML si dividono in due categorie per quel che riguarda i modelli di elaborazione q q q Parser DOM (Documento Object Model): è un modello gerarchico, che fornisce accesso all'intero documento DOPO il completamento del parsing. DOM è una serie di raccomandazioni W3C implementate in varia maniera su tutte le architetture Parser SAX (Simple API for XML): è un modello ad eventi, attraverso il quale è possibile associare funzioni callback ai vari elementi significativi del documento XML. SAX 2.0 non è uno standard, ma una proposta originariamente per JAVA poi adottata su molte architetture (http://www.saxproject.org/) . 14 Fare il parsing in una generica struttura ad albero (parser DOM) n Vantaggi q Esiste un linguaggio standard neutro: DOM (Document Object Model) q Imparare a fare il DOM per un linguaggio rende facile impararlo per un altro q Si deve scrivere meno codice per avere XML in qualcosa che si vuole utilizzare nei programmi Fare il parsing come una sequenza di eventi (parser SAX) nVantaggi q q q SAX richiede pochissima memoria d'uso: il documento non è mai tutto in memoria contemporaneamente. E' ideale per documenti MOLTO grandi. SAX è velocissimo: non ha praticamente overhead di parsing. SAX è ideale per cercare velocemente un'informazione specifica all'interno di un documento XML, poiché lo si può fermare appena l'ha trovata. nSvantaggi n q Svantaggi q Non-intuitive API q Non e’ a costo di lavoro /tempo nullo q q Elaborazione DOM Il Document Object Model è un interfaccia di programmazione (API) per documenti sia HTML sia XML. nDefinisce la struttura logica dei documenti ed il modo in cui si accede e si manipola un documento. nUtilizzando DOM i programmatori possono costruire documenti, navigare attraverso la loro struttura, e aggiungere, modificare o cancellare elementi. nOgni componente di un documento HTML o XML può essere letto, modificato, cancellato o aggiunto utilizzando il Document Object Model. n Strumenti del DOM n n n Usando le API del DOM un programmatore può creare documenti XML, navigarne la struttura, aggiungere, eliminare o modificare tutte le componenti (elementi, commenti, testo…) Ovviamente il DOM fornisce un’interfaccia “generica” implementabile in vari linguaggi di programmazione. Tuttavia, la specifica è esposta usando l’IDL definito nella Corba 2.2 specification. SAX non può essere usato per cercare e ricercare informazioni su un documento XML (navigare sulla struttura del documento) SAX non può essere usato per modificare o aggiornare la struttura del documento XML (aggiungere o togliere nodi). SAX non è implementato dai browser, ma solo come libreria di linguaggi server-side (o in Java anche come applet) Definizione di DOM Document Object Model (DOM) n n n Il DOM è un’Application Programming Interface (API) per documenti XML (e HTML). Il DOM definisce una modalità di rappresentazione dei documenti XML sotto forma di strutture dati accessibili da un linguaggio di programmazione, e le operazioni per la loro manipolazione. Standard W3C La vista del DOM su XML <song> <artist> <title> <name> Corazon Espinado track=9 <comment > <length> <minutes > <seconds > Santana <song track="9"> <artist> <name>Santana</ name> </artist> <title>Corazon Espinado</title> <comment >First Hit from the Album </comment > <length> <minutes >4</minutes > <seconds >36</seconds > </length> </song> 4 36 First Hit from the Album 15 La vista del DOM su XML n n n n Il DOM vede i documenti come una struttura ad albero. In realtà, la struttura è una “foresta” perché può anche contenere più alberi distinti. Il DOM definisce solo la sua vista logica sui dati: non specifica come debbano essere effettivamente strutturati in memoria. Tuttavia, l’utente che accede al documento tramite l’interfaccia DOM, lo vedrà effettivamente come un albero. Oggetti del DOM L’oggetto principale di DOM è DOMNode, che però è una interfaccia (cioè viene solo usata per crearne classi) nIl core del DOM definisce alcune classi fondamentali per i documenti HTML e XML, e ne specifica proprietà e metodi. nGlli oggetti principali definiti nel DOM sono: n q q q q q DOMDocument : il documento di cui si sta parlando DOMElement: ogni singolo elemento del documento DOMAttr: ogni singolo attributo del documento DOMText: ogni singolo nodo di testo del documento DOMComment, DOMProcessingInstruction, DOMCDATASection, DOMDocumentType, ecc. I Modelli a Oggetti n Il DOM, come modello ad oggetti, definisce: q q q q Gli oggetti usati per rappresentare e manipolare un documento XML. Le interfacce usate per interagire con gli oggetti definiti. La semantica richiesta dagli oggetti e dalle interfacce definite. Le relazioni e interazioni tra le interfacce e gli oggetti definiti. Gli oggetti Node: la base del DOM n Il DOM presenta i documenti come una struttura gerarchica di oggetti di tipo Node. n Ciascun oggetto nel documento in realtà implementa una interfaccia più specifica per il suo tipo, che è sempre derivata da Node. I Node possono avere zero o più nodi figli. L’interfaccia di Node include le operazioni di base eseguibili su ogni tipo di oggetto (indipendentemente dal suo tipo specifico) in un documento XML. n n Tipi di Nodi n Ci sono molti tipi di nodi e sottoclassi di nodi Attr, CDATASection, Comment, Document, DocumentFragment, DocumentType, Element, Entity, EntityReference, Notation, ProcessingInstruction, Text Ognuna di queste ha associato uno tipo , valore o nome. Nella slide seguente vediamo gli standard Node nodeName () nodeValue Attributes nodeType () () null 2 Attr Attr name Value of attribute CDATASection #c d a t a-section CDATA cotnent null 4 Comment #comment Comment content null 8 Document #document Null null 9 DocumentFragment #document fragment null null 11 DocumentType Doc type name null null 10 Element Tag name null NamedNodeMap 1 Entity Entity name null null 6 EntityReference Name entitry referenced null null 5 Notation Notation name null null 1 ProcessingInstruction target Entire string null 7 Text #text Actual text null 3 16 Fare il parsing come una sequenza di eventi: SAX n Peter Murray-Rust. (XML browser JUMBO) Tim Bray (Lark XML parser) David Megginson (Microstar's Ælfred XML parser) n XML-DEV mailing list SAX 1.0 rilasciato nel 1998 (attuale SAX 2.0) Lo sviluppo continua ospitato da SourceForge Licenza GPL n q q n n n Eventi SAX n n n Nasce nel Dicembre 1997 q n Introduzione a SAX Simple API for XML SAX basa il suo sistema di parsing sugli eventi. Mentre il parser SAX legge (e valida) il documento XML, il codice viene avvisato di una serie di eventi fondamentali, quali q q q q q L’inizio e la fine del documento; L’apertura e la chiusura di un elemento; L’apertura e la chiusura di una sezione CDATA; L’inizio e la fine dello scope di ogni namespace; La lettura di caratteri, Processing Instructions, spazi non significativi. Utilità e Limiti di SAX Il parser Sax non costruisce documenti XML, né conserva alcuna struttura in memoria alla fine del parsing. n q Anche se si ritenesse il DOM come la scelta migliore per la propria applicazione Java, capire SAX è importante per vari motivi: q q q Il sistema di gestione degli errori del DOM è “ereditato” da SAX. Essendo SAX la prima API XML per Java, resta alla base anche dell’implementazione DOM. Le librerie Java usano SAX per leggere un file XML e creare il DOM corrispondente! Se il programmatore vuole operare sul documento letto, dovrà scrivere manualmente tutto il codice, basandosi sui dati passati con gli eventi SAX. In generale SAX necessita di molto più codice di DOM, ma è molto più leggero. n q SAX e DOM n SAX, o Simple API for XML, in origine è stata sviluppata come API alternativa per accedere ad XML in Java. A partire dalla versione 2, esistono versioni di SAX utilizzabili anche in altri ambienti di programmazione (ad esempio nella libreria msxml di Microsoft). La homepage del progetto SAX (SourceForge) è http://www.saxproject.org/ Il programmatore può implementare solo quello che è strettamente utile, e non è necessario allocare il documento in memoria. Events vs. Trees Concetti base n Events (SAX) Vengono notificati dal parser al client i singoli eventi che contraddistinguono il documento XML n Tree (DOM) Carica in memoria la struttura ad albero del documento XML. Tale struttura è accessibile da parte del client. 17 Tree-based API n n n Favorevoli Navigazione del documento XML Visione d’insieme del documento Facilità di gestione della struttura dei documenti: aggiunta , eliminazione, spostamento dei nodi n n n Sfavorevoli Notevole occupazione di memoria Prestazioni dipendenti dalla dimensione del documento Prima di iniziare ad utilizzare le informazione del documento il parser deve completare il caricamento in memoria Event-based API n n n Favorevoli Poche risorse utilizzate Uniformità di prestazioni Veloce ricerca di un elemento in un ampio documento Rappresentazione grafica delle due tipologie n DOM e SAX: differenze approccio DOM &diSAX DOM CONTRO PRO Approccio del Modello Esempio eventi Documento XML <?xml version="1.0"?> <doc> <para>Hello, world!</para> </doc> Eventi Notificati start document start element: doc start element: para characters: Hello, world! end element: para end element: doc end document Sfavorevoli Più difficile gestione della struttura del documento; l’eventuale creazione di un albero è a carico del client. SAX Approccio ad Eventi • Struttura ad albero • Scansione dell’intero file • API per navigare l’albero • Ogni elemento informa l’applicazione con un Callback • fornisce all’applicazione un modello ricco del documento • Molto “leggero” • mantiene una rappresentazione completa e durevole in memoria • Richiede un’occupazione di memoria per tutto il documento • Implementazione delle sole funzionalità necessarie • Interfaccia troppo semplice quindi più codice • Nessun supporto per operare sul documento Gestione dei NameSpace n n Il nome di elementi e attributi e composto da due parti : URI e LocalName Puo’ essere gestito un Namespace, un Namespaceprefixes oppure entrambi 18 Vediamo un esempio (Caso Default per SAX2) Riferimenti n <?xml version="1.0"?> <h:hello xmlns:h="http://www.greeting.com/ns/" id="a1" h: person= "David"/> n Se namespaces è vero e namespace-prefixes è falso (the default), allora a SAX2 XML reader interpreterà come segue n un elemento con Namespace URI "http://www.greeting.com/ns/" e il localName "hello "; n un attributo senza Namespace URI (empty string) and the qName (and usually localName) "id"; and n Un attributo con il Namespace URI "http://www.greeting.com/ns/" and e il localName "person ". n n n Specifica di XML dal W3C http://www.w3c.org/TR/XML/ Apache XML Project (xalan, xerces) http://xml.apache.org Java JAXP Tutorial http://java.sun.com/xml/jaxp/dist/1.1/docs/tutorial/ index.html SAX http://www.saxproject.org/ Specifica DOM level 1 dal W3C http://www.w3.org/TR/REC- DOM-Level-1/ Esempi di parser implementati in Java n n n n XML4J: La tecnologia alla base del parser XML di IBM è stata donata all'Apache Group per lo sviluppo del parser Xerces . L'ultima versione di XML4J attualmente disponibile, la 3.0.1, è derivata dalla release 1.0.3 di Xerces . (www.alphaworks.ibm.com/tech/xml4j) Xerces: è un parser sviluppato dal team di Apache all'interno dell'Apache XML Project. E' basato sui sorgenti di XML4J, implementa DOM (livello 1 e 2) e SAX (versione 2) e ha un supporto preliminare per gli schema XML. E' disponibile inoltre una versione in C++ con i wrapper Perl e COM. XP: XP è un parser non validante sviluppato da James Clark (http://www.jclark.com)conforme alle specifiche 1.0 di XML. Oltre a una normale API ad alto livello fornisce anche una API a basso livello per sviluppare nuovi parser. XP è sviluppato principalmente per ottenere alte prestazioni. Java Standard Extension for XML: Poiché XML e Java di Sun Microsystem sono un binomio molto collaudato, Sun ha prodotto un proprio package Java per XML (java.sun.com /products/xml/) IL PARSER XERCES n n n Si tratta di un prodotto free sofware (GPL) scritto in Java E’ prodotto dal team di Apache all'interno dell'Apache XML Project . E’ un parser validande tra i più robusti ed affidabili. Come funziona XERCES n Modalità DOM (Document Object Model) n Modalità SAX (Simple API for XML) 19 Installazione n Scaricate il file xerces -j-bin.X.Y.Z.zip (dove X_Y_Z rappresenta l'ultima versione disponibile) a partire dalla pagina di download http://xml.apache.org/dist/xerces -j/ e decomprimetelo. La struttura delle directory creata contiene tutte le classi necessarie e la documentazione. n Impostate la variabile CLASSPATH del vostro sistema in modo da includere i files xercesImpl.jar, xercesSamples.jar,xmlais.jar,xmlparserapis.jar,resolver.jar posti nella directory di xerces . 20