Linguaggi per la rete: XML Università degli studi di Venezia Ca' Foscari Dipartimento di Informatica a.a 2007-2008 Alessandro Sorato
XML: storia Internet, la Rete delle reti e l'oramai comune World Wide Web, per la loro stessa natura non centralizzata ed aperta a macchine e persone, necessitano della definizione di alcuni standard per poter essere utilizzabili ed evolvere senza forzature di carattere soprattutto commerciale. Nel dicembre 1994 è stato istituito il Worl Wide Web Consortium (W3C) con l'obiettivo di definire standard accettati dai maggiori produttori di software per il Web, primo fra tutti il linguaggio HTML. Negli anni '90 si è verificata una rapida diffusione del Web (WWW HTTP) che ha scatenato la cosiddetta guerra dei browser tra Netscape e Microsoft, con Internet Explorer contrapposto a Netscape, Mosaic era già praticamente scomparso.
XML: storia Sappiamo tutti oggi che fine ha fatto Netscape, per logiche commerciali spesso anche condannate dall'anti trust. In entrambi i casi erano introdotte, con ogni nuova versione del proprio browser, delle estensioni proprietarie all'html ufficiale. Il risultato, che ancora oggi è spesso visibile in molti siti Internet, è che un sito Web che voleva utilizzare le estensioni proprietarie di un browser rischiava di risultare inaccessibile agli altri browser. La situazione peggiorò con l'introduzione del Dynamic HTML - DHTML, le cui implementazioni erano quasi totalmente arbitrarie con l'utilizzo di Javascript e CSS, la cui sintassi e le funzioni ammissibili variavano notevolmente. Il W3C era costretto a rincorrere le evoluzioni de facto dell'html e doveva scegliere quali caratteristiche standardizzare e quali invece lasciare fuori dalle specifiche ufficiali dell'html, spesso favorendo di fatto quelle introdotte da Internet Explorer.
XML: storia Era necessario un linguaggio di markup che offrisse maggiore libertà nella definizione dei tag pur rimanendo nell'ambito del rispetto di uno standard. Nel 1996 si costituì l'xml Working Group nell'ambito del W3C. Punto di partenza: SGML (Standard Generalized Markup Language), un meta-linguaggio per la definizione di linguaggi di markup. Dicembre '97 le specifiche di XML venivano pubblicate come Proposed Recommendation. Tuttavia, anche se gli obiettivi iniziali della nascita di XML erano rivolti alla soluzione di un problema di standard per il Web, ben presto ci si accorse che XML non era limitato al solo contesto Web.
XML: storia XML infatti risulta essere abbastanza generale per poter essere utilizzato nei più disparati contesti: definizione della struttura di documenti scambio di informazioni tra sistemi diversi rappresentazione di immagini definizione di formati di dati Questo aspetto ha di fatto rappresentato una vera e propria rivoluzione. Oggi XML contribuisce all'evoluzione di HTML, le cui specifiche sono ferme da quasi dieci anni alla versione 4.0 che con piccole revisioni è arrivata alla 4.0.1. Siamo quasi alla definizione 5.0 HTML -> XHTML (extensible HTML), una ridefinizione di HTML in termini di XML.
XML: storia In altre parole, XHTML è HTML definito secondo le regole di XML. Le differenze più evidenti per chi vuole passare da HTML a XHTML consistono in alcune regole sintattiche che analizzeremo a breve. La tolleranza dei browser che utilizziamo oggi per mantenere soprattutto la compatibilità con i milioni di siti Web esistenti, ci ha abituato a commettere errori sintattici, ma le differenze sostanziali sono molto importanti perché le pagine strutturate in XHTML possono essere elaborate molto più facilmente da software diversi dai classici browser, come ad esempio gli spider dei motori di ricerca, i sintetizzatori vocali, i palmari o cellulari ed altri dispositivi di dimensioni ridotte con connessioni wireless.
XML XML = EXtensible Markup Language XML è un linguaggio di markup come HTML XML è progettato per contenere dati, non per visualizzarli I tag XML tags non sono predefiniti. XML è progettato per essere autodescrittivo XML è una W3C Recommendation XML da solo non fa assolutamente nulla.
XML: da HTML a XHTML tutti i tag e i loro attributi sono espressi in minuscolo è obbligatorio inserire il tag di chiusura, ad esempio, se usiamo <p> dobbiamo chiudere con </p> i valori degli attributi devono essere specificati tra doppi apici o singoli apici, ad esempio <table width="30%"> i tag vuoti seguono la cosiddetta sintassi minimizzata, ad esempio il tag <br> diventa <br/> utilizzare l'attributo id al posto di name per identificare gli elementi di un documento
XML: di cosa si tratta XML - extensible Markup Language è un meta-linguaggio di markup, cioè un linguaggio che permette di definire altri linguaggi di markup, una attualizzazione del vecchio SGML. A differenza di HTML, XML non ha tag predefiniti e non serve per definire pagine Web né per programmare. Esso serve esclusivamente per definire altri linguaggi o documenti.
XML: di cosa si tratta XML - extensible Markup Language MARKUP: un meccanismo di annotazione dei documenti in formato testo che permette di: strutturare il contenuto in componenti logiche dette elementi etichettare (tag) gli elementi in modo utile, dandogli un nome Un linguaggio di markup è quindi utile per organizzare documenti testuali dotati di una certa struttura.
XML: di cosa si tratta XML - extensible Markup Language In realtà, XML di per sè non è altro che un insieme standard di regole sintattiche per modellare la struttura di documenti e dati. Questo insieme di regole, dette più propriamente specifiche, definiscono le modalità secondo cui è possibile crearsi un proprio linguaggio di markup. Le specifiche ufficiali sono state definite dal W3C (Worl Wide Web Consortium) e sono consultabili a partire dall'indirizzo http://www.w3.org/xml.
XML: di cosa si tratta XML - extensible Markup Language I dati sono autodescrittivi (Self-Describing Data) I tag che delimitano del contenuto XML, danno il nome allo specifico elemento di dati che delimitano Ogni elemento ha il proprio nome che può essere relazionato ad un modello esterno riguardante il problema del mondo reale che il documento descrive <persona> <nomecognome> <nome>alessandro</nome> <cognome>sorato</cognome> </nomecognome> </persona>
XML: di cosa si tratta XML - extensible Markup Language DIZIONARI - GRAMMATICHE (vocabulary) Un dizionario XML è una descrizione dei dati XML che viene utilizzato come mezzo per lo scambio di informazioni, spesso all'interno di uno specifico ambito dell'attività umana (chimica, legge, lavoro, musica etc...) Per fare solo alcuni esempi... CML Chemical Markup Language EDI Electronic Data Interchange XFDL Extensible Forms Description Language SGF Structured Graph Format XUL XML-based User interface Language
XML: di cosa si tratta Le regole di XML consentono di definire la struttura di documenti e dati, ma non altre caratteristiche come il tipo o la presentazione dei dati o documenti. Questo compito non è di XML ma è delegato ad altre tecnologie, alcune delle quali sono basate sullo stesso XML Ad esempio, tramite le definizioni di DTD e XML Schema è possibile creare grammatiche che definiscano formalmente la struttura dei dati e che consentano di verificarne la correttezza; tramite XSL, CSS XSL-FO è possibile controllare la presentazione dei dati e la loro trasformazione in altri formati (HTML, PDF etc...); con XLink e XPointer è possibile collegare documenti XML; con XQuery e XQL è possibile estrarre informazioni sulla base di criteri determinati.
XML: sintassi XML tuttavia richiede un certo rigore sugli aspetti sintattici. Tutti i documenti XML devono essere ben formati (well formed). Questo concetto è assimilabile in qualche modo alla correttezza ortografica di una lingua ed è un principio a cui i documenti XML non possono sottrarsi. La struttura di un documento well formed è la seguente PROLOGO (PROLOG) opzionale CORPO (BODY) contenete uno o più ELEMENTI (ELEMENTS) nella forma di un albero gerarchico che può contenre CHARACTER DATA EPILOGO (EPILOG) opzionale contenente spazi, commenti, processing instructions
XML: sintassi - ELEMENTS SI PUO' PENSARE AGLI ELEMENTI COME AI NOMI DI XML Gli elementi sono il blocco di base per costruire XML Un elemento è il contenitore XML per il contenuto Un elemento può contenere altri elementi, caratteri ammissibili o altri elementi di markup (commenti, processing instructions PIs entity refernces etc...)
XML: sintassi - ELEMENTS <H1 ALIGN=CENTER>Heading</H1> <H1 ALIGN=CENTER> Tag ALIGN=CENTER Attributo Heading Contenuto </H1> Tag <H1 ALIGN=CENTER>Heading</H1> Elemento
XML: sintassi - ATTRIBUTES SI PUO' PENSARE AGLI ATTRIBUTI COME AGLI AGGETTIVI DI XML Spesso è necessario aggiungere alcune informazioni riguardanti un elemento Un attributo è composto di una coppia nomevalore nome-atttributo= valore-attributo nome-atttributo='valore-attributo'
XML: sintassi - ATTRIBUTES A differenza di HTML, in XML non sono ammessi: Attributi numerici <img width=300> Attributi non delimitati <p align=left> Inoltre E' permessa una sola istanza <img src= 1.gif src= 2.jpg >
XML: sintassi WHITE SPACE Caratteri trattati come white space (spazi bianchi): 09 Horizontal Tab (HT) 0A Line-feed (LF) 0D Carriage-return (CR) 20 ASCII space character Non è prevista espansione nel caso dei tab o formattazione nel caso degli a capo, tutti vengono trattati come un singolo carattere.
XML: sintassi WHITE SPACE Tutti i caratteri che indicano un white space all'interno del contenuto vengono preservati dal parser e passati senza modifiche all'applicazione. Tutti i caratteri che indicano un white space all'interno di element tag e valori di attributi possono essere rimossi.
XML: sintassi well formed Perché un documento XML sia ben formato deve rispettare le seguenti regole: Ogni documento XML deve contenere un unico elemento di livello massimo o nodo radice (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 prologo ed epilogo); Ogni elemento deve avere un tag di chiusura o, se vuoti, possono prevedere la forma abbreviata (/>); Gli elementi devono essere opportunamente annidati, cioè i tag di chiusura devono seguire l'ordine inverso dei rispettivi tag di apertura; XML è case sensitive ovvero fa distinzione tra lettere maiuscole e minuscole, per cui i nomi dei tag e degli attributi devono coincidere nei tag di apertura e chiusura anche per questo aspetto; I valori degli attributi devono sempre essere racchiusi tra singoli o doppi apici.
XML: sintassi well formed La violazione di una qualsiasi di queste regole fa in modo che il documento risultante non venga considerato ben formato. Codice del tipo: <news titolo=test>... </News> darà qualche problema, e lo stesso dicasi per situazioni analoghe alla seguente: <titolo> <testo>kjsdahfkdsbfabfagb </titolo> </testo>
XML: sintassi well formed Anche la scelta dei nomi dei tag deve seguire alcune regole: Un tag può iniziare con un lettera o un underscore (_); Un tag può contenere lettere, numeri, il punto, l'underscore (_) o il trattino (-); Non sono ammessi spazi o altri caratteri; XML è case sensitive, quindi i tag <news> e <News> sono a tutti gli effetti tag diversi.
XML: sintassi Un documento XML può contenere potenzialmente qualsiasi carattere dell'alfabeto latino, cifre e punteggiatura. Normalmente vengono accettati come caratteri validi in un documento XML i primi 128 caratteri della codifica ASCII (lettere del nostro alfabeto minuscole e maiuscole, cifre, segni di punteggiatura, ecc.). Se un documento contiene caratteri che non rientrano tra questi (es.: lettere accentate, simboli di valuta, ecc.) è necessario specificare lo schema di codifica utilizzato. Lo schema di codifica ed altre informazioni dirette al software incaricato di elaborare il documento XML sono indicate tramite elementi speciali detti direttive di elaborazione o processing instruction. <?xml version="1.0" encoding="iso-8859-1"?> (parte del prologo) abilita l'uso del set di caratteri Latin 1 o codifica occidentale contenente anche le lettere accentate ed altri simboli. Le specifiche di XML prevedono esplicitamente la possibilità di utilizzare la codifica Unicode per rappresentare i caratteri greci, cirillici, gli ideogrammi cinesi, coreani e giapponesi.
XML: sintassi - COMMENTI In un documento XML possiamo trovare i commenti, che vengono ignorate dai software che lo interpretano. I commenti XML hanno la medesima sintassi di quelli HTML, sono cioè racchiusi tra le sequenze di caratteri <!-- e --> e possono trovarsi in qualsiasi punto del documento. Esistono dei caratteri non ammessi all'interno di un documento XML. A questo scopo si usano degli oggetti speciali detti entità (ENTITY - ENTITIES) che consentono di sostituire altri caratteri, come dopotutto avviene in HTML.
XML: sintassi ENTITY REFERENCE Cinque entità sono predefinite e consentono l'uso di altrettanti caratteri riservati all'interno di un documento: < diventa < > diventa > & diventa & ' diventa ' '' diventa " Ad esempio: diventa <company> PIPPO & C. </company> <company> PIPPO & C. </company>
XML: sintassi - CDATA Una sezione CDATA (CHARACTER DATA) è un blocco di testo che viene considerato sempre come testo, anche se contiene codice XML o altri caratteri speciali. Per indicare una sezione CDATA è sufficiente racchiuderla tra le sequenze di caratteri <! [CDATA[ e ]]>. <![CDATA[ <autore> <titolo> <testo> </testo> </titolo> </autore> ]]>
XML: sintassi - PIs <?target... istruzioni...?> <?xml-stylesheet...?> Le PI contengono informazioni utili per un'applicazione esterna che elaborerà il file XML. La sintassi del loro contenuto è significativa per l'applicazione che le elaborerà.
XML: sintassi - PROLOGO XML Declaration <xml version= 1.0 encoding= UTF-8 standalone= yes > encoding e standalone sono attributi opzionali, mentre version è obbligatorio. Encoding indica la codifica di caratteri utilizzata all'interno del documento Standalone indica se tutte le definizioni di entità si trovano all'interno del documento stesso o meno
XML: sintassi - PROLOGO Document Type Declaration da non confondere con il DTD o Document Type Definition <!DOCTYPE root-element SYSTEM sysident > <!DOCTYPE root-element PUBLIC pubident sysident > sysident e pubident sono URI (Uniform Resource Identifier) URI ~ URL Qualsiasi nome univoco che venga riconosciuto dall'applicazione che processa il file Esempio
XML: sintassi - URI Un URI è un identificatore univoco per una risorsa. schema: dettagli specifici dello schema isbn:8807460289 che identifica uno specifico libro di Tim Berners-Lee L'architettura del nuovo Web edito da Feltrinelli nel 2001 http://nodo:porta/path?query#ancora
XML: VALID 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 di markup. Dunque se un documento XML rispetta le regole definite da una grammatica è detto valido per un particolare linguaggio. Quindi risulta di fondamentale importanza ai fini dell'elaborazione automatica dei documenti XML, oltre al concetto di documento well formed (ben formato) anche quello di documento valid (valido).
XML: VALID un documento ben formato può non essere valido rispetto ad una grammatica un documento valido è necessariamente ben formato un documento valido per una grammatica può non essere valido per un'altra grammatica Attualmente gli approcci più diffusi alla creazione di grammatiche per documenti XML sono DTD - Document Type Definition XML Schema
XML: PARSER I software che si occupano di queste elaborazioni sono detti PARSER e sono degli strumenti standard disponibili su diverse piattaforme. I parser possono essere suddivisi in due categorie (talvolta può essere lo stesso parser che assume due ruoli): 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.
XML: PARSER Event-driven parsers: expat, expatpp XML::parser Pyexpat SAX Tree-based parsers: DOM MSXML
XML: ELEMENTI - ATTRIBUTI E' meglio usare elementi o attributi? ELEMENTI Sempre elementi quando si vogliono modellare informazioni strutturate. Sono visibili a tutti Sono recuperabili facilmente Sono importanti per il significato del documento Sono estensibili ATTRIBUTI Vengono utilizzati dal sistema Esprimono una scelta NON sono importanti per il significato del documento
XML: Un esempio (http://www.w3schools.com/xml/) <bookstore> <book category="cooking"> <title lang="en">everyday Italian</title> <author>giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book>... </book> </bookstore>
XML: Un esempio DOM (http://www.w3schools.com/xml/)
XML: ALCUNI VANTAGGI XML semplifica l'interscambio / condivisione di dati (solo testo) XML semplifica il trasporto dei dati tra sistemi eterogenei XML semplifica il cambiamento di piattaforma (SW/HW) XML rende i dati facilmente disponibili (vari lettori) XML è utilizzato per creare altri linguaggi per Internet (XHTML, WSDL, WAP e WML, RSS, RDF e OWL, SMIL)