4
Introduzione
Il Web ha reso possibile comunicare con chiunque e in qualunque luogo. L‟evoluzione delle
tecnologie web ha portato allo sviluppo di diversi standard per la fruizione da parte degli utenti dei
contenuti pubblicati sul web. Esaminando le tecnologie disponibili a livello di interfaccie utente, gli
standard attuali quali HTML, CSS e JavaScript consentono di creare una pagina e di visualizzarla
sul browser degli utenti. Sebbene tali standard costituiscano uno strumento necessario per la
definizione delle interfacce utente, essi però non costituiscono strumenti sufficienti a rappresentare
e gestire i dati.
In passato Internet è stata un mero mezzo di accesso a immagini e testi. Non esistevano standard per
effettuare la ricerca intelligente, lo scambio o la presentazione adattabile e personalizzata dei dati.
Oggi Internet deve fare molto più che fornire accesso a informazioni e fissare standard di
visualizzazione. Deve fissare uno standard per la comprensione delle informazioni, un modo
comune di rappresentare i dati cosicché i programmi software possano eseguire con più efficienza le
ricerche, possano spostare, visualizzare e manipolare le informazioni nascoste nell'oscurità
contestuale. Lo standard HTML non può fare tutto questo perché esso è stato progettato
semplicemente per descrivere l'aspetto di una pagina Web, e non per definire un modo per
strutturare i dati. Sebbene il linguaggio HTML sia molto ricco dal punto di vista della
visualizzazione, esso però non fornisce un modo standard per definire e gestire i dati. Uno standard
per definire la strutturazione dei dati diventerebbe il veicolo delle transazioni aziendali, della
pubblicazione dei profili personali, della collaborazione automatizzata e della condivisione dei
database. Le diagnosi cliniche, i dati della ricerca farmaceutica, le schede sui semiconduttori e gli
ordini di acquisto verrebbero descritti in questo formato. Ciò aprirebbe nuove prospettive d'utilizzo,
tutte basate su una rappresentazione standard per trasferire dati strutturati sul Web con la stessa
facilità con cui oggi si trasferiscono le pagine HTML. In effetti oggi non ha più senso usare il
condizionale perché questo standard in realtà esiste ed è rappresentato dal linguaggio XML.
Per XML si intende un meta linguaggio di markup che fornisce un formato per la descrizione di dati
strutturati. Ciò consente di dichiarare con maggiore precisione il contenuto dei dati, e rende
possibile creare una nuova generazione di applicazioni Web per la visualizzazione e la
manipolazione di dati. il linguaggio XML assicura che i dati strutturati siano uniformi e
indipendenti dalle applicazioni o dai produttori. L'interoperabilità che ne risulta costituisce un punto
di partenza per la nascita di nuove applicazioni Web per le aziende e il commercio elettronico. Il
5
linguaggio XML è di enorme valore per Internet ma anche per gli ambienti intranet delle grandi
aziende, poiché fornisce interoperabilità tra le piattaforme mediante l'utilizzo di un formato
flessibile, aperto e standardizzato, dotato di nuovi modi di accedere ai database e in grado di fornire
dati ai client Web. Le applicazioni possono essere create in maniera più rapida, possono essere
gestite più facilmente e infine possono fornire più modi di visualizzazione dei dati strutturati.
Lo scopo principale di questo lavoro di tesi è descrivere le caratteristiche principali del linguaggio
XML, ed analizzare le possibilità offerte da un moderno linguaggio di programmazione per il web
quale è il PHP, per l‟analisi (parsing) e la manipolazione dei documenti descritti in questo nuovo
paradigma per la strutturazione dei dati.
Nel primo capitolo descriveremo la storia dei linguaggi di markup, e le ragioni che hanno portato
all‟evoluzione di tali linguaggi verso lo standard XML.
Nel secondo capitolo descriveremo le caratteristiche principali del linguaggio XML, la sua struttura
sintattica e il modello concettuale di un documento XML. Definiremo i concetti di documento ben
formato e di validazione di un documento; infine nel contesto della validazione descriveremo il
concetto di schema e i due principali linguaggi di definizione di schemi: DTD e XML Schema.
Nel terzo capitolo analizzeremo il legame tra il linguaggio XML e i linguaggi di programmazione di
uso generale. Descriveremo i due principali paradigmi per la elaborazione dei dati contenuti nei
documenti XML: lo standard DOM come modello di analisi di documenti XML che vengono
rappresentati tramite strutture ad albero, e lo standard SAX come modello di analisi di documenti
XML la cui dimensione impedisce il loro completo caricamento in memoria.
Nel quarto capitolo esamineremo come manipolare effettivamente un documento XML attraverso
un linguaggio di programmazione specifico, il PHP, e dopo avere descritto brevemente la storia ed
il suo utilizzo nel contesto dello sviluppo web, analizzeremo le librerie che PHP mette a
disposizione per il parsing di documenti XML. Di ognuna di tali librerie descriveremo le
caratteristiche principali, le modalità di lettura e di manipolazione del documento, il supporto ai
namespace e la possibilità, laddove essa è offerta, di validare il documento rispetto ad uno schema
fornito.
Infine nel quinto capitolo faremo un confronto tra le librerie di parsing analizzate nel precedente
capitolo. Analizzeremo i punti di forza e di debolezza di ciascuna di esse, con l‟obiettivo di definire
un possibile criterio di scelta della libreria più adatta per le esigenze di una data applicazione.
6
Capitolo 1 Evoluzione dei linguaggi a marcatori
Le origini di XML sono intrecciate a quelle di HTML: per comprendere appieno le decisioni che ne
hanno influenzato il progetto, esamineremo in questo capitolo il panorama storico in cui sono nati i
linguaggi di markup, le ragioni che hanno portato allo sviluppo dei linguaggi HTML e SGML, e
l‟evoluzione dei linguaggi di markup verso lo standard XML.
1.1 Linguaggi di markup
Il termine markup [1] (o marcatura) deriva dall'ambiente editoriale dove la segnalazione delle
correzioni o delle evidenziazioni da apportare ad una bozza venivano effettuate aggiungendovi delle
annotazioni che “marcavano” le parti da segnalare al dattilografo o al tipografo per la
composizione. Con tali annotazioni era possibile riferirsi all'aspetto dei caratteri, all'allineamento
dei paragrafi, alle spaziature, e via dicendo.
In generale, la tecnica di descrizione di un testo mediante l'uso di marcatori richiede una serie di
regole e convenzioni che definiscono un linguaggio a marcatori o linguaggio di markup.
Un tale linguaggio specifica ad esempio quale tipo di marcatura è utilizzabile, quale è richiesta e
dove, in che modo si distingua dal testo e quale sia il suo significato.
Più in generale un linguaggio di markup descrive quindi dei meccanismi di rappresentazione del
testo al fine di descriverne la struttura, la semantica o per finalità di “presentazione”.
I diversi linguaggi di markup esistenti si distinguono fondamentalmente in:
ξ linguaggi di markup di tipo procedurale;
ξ linguaggi di markup di tipo descrittivo.
Nei primi il testo è arricchito da marcatori che, riferiti a singole parti, rappresentano delle vere e
proprie “procedure da eseguire”, ossia sequenze di istruzioni, per stabilire come, ad esempio,
visualizzare, stampare o formattare tali parti nel documento finale.
Un esempio classico di linguaggio di tale tipo è TeX, creato da Donald Knuth nel 1978, e
ampiamente utilizzato nell‟editoria elettronica di testi scientifici e matematici in particolare.
Alla seconda categoria appartengono invece i linguaggi che usano i marcatori per individuare e
delimitare nel documento le varie parti classificandole così per categorie. Ciò che si ottiene
mediante l‟aggiunta dei marcatori è quindi una descrizione strutturale del documento anziché una
7
descrizione dell‟aspetto finale. La scelta del tipo di rappresentazione “visiva” da applicare al testo
dipenderà dal software che di volta in volta lo riprodurrà.
I linguaggi del secondo tipo risultano più vantaggiosi perché si concentrano sui problemi strutturali
di leggibilità e prescindono in fase di lettura dal software con cui sono stati generati. Sono, in altre
parole, quelli che permettono di garantire una corretta separazione tra struttura e visualizzazione (o
presentazione, non necessariamente visuale: ad esempio, parlata).
Esempi di linguaggi di markup descrittivo: sono SGML, HTML e il linguaggio XML, oggetto di
questa tesi.
1.2 SGML
I linguaggi di markup, che forniscono una notazione per dotare i documenti di testo di una struttura
formale, nascono da un‟idea del ricercatore statunitense Charles Goldfarb, che nel 1970 discusse i
vantaggi di notazioni simili descrivendo un sistema di nome INTIME. Questa linea di ricerca è
culminata nello Standard Generalized Markup Language (SGML), che è stato il primo linguaggio
di markup descrittivo standardizzato a livello internazionale (ISO 8879 del 1986) che ha definito dei
metodi di rappresentazione del testo in formato elettronico in modo indipendente dall'hardware e
dal sistema utilizzato.
L'SGML è basato sul concetto di “definizione del tipo di documento” o Document Type Definition
(DTD), che richiede per ogni documento la definizione del modo in cui i vari elementi del testo
possono essere utilizzati. Come vedremo, XML ha ereditato parte della sua sintassi da SGML.
1.3 HTML
Le origini di XML [2] sono intrecciate a quelle di HTML (Hyper-Text Markup Language), il
linguaggio che è alla base del successo del World Wide Web, e che in effetti deriva dalla
combinazione dei due concetti indipendenti di ipertesto e linguaggio di markup.
La storia del Web, del successo esplosivo della combinazione vincente di un protocollo di alto
livello per la trasmissione dei documenti ( HTTP ) e di un linguaggio SGML per la definizione di
ipertesti che fosse semplice da usare (HTML) è nota a tutti. Quello che va sottolineato di questa
storia, perché riguarda da vicino la „genesi‟ del linguaggio XML, è che l'assalto commerciale ad
Internet degli anni '90 e la rapida diffusione del Web scatenarono una delle lotte più agguerrite sul
8
piano tecnico e commerciale: la guerra dei browser tra Netscape e Microsoft. Ciascun contendente
introduceva, con ogni nuova versione del proprio browser, una estensione proprietaria all'HTML
ufficiale. Il risultato di tale battaglia era che un sito Web che voleva utilizzare le estensioni
proprietarie di un browser rischiava di risultare inaccessibile agli altri browser. In questo panorama
il W3C1 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.
In questo contesto cominciò a delinearsi la necessità di un linguaggio di markup che offrisse
maggiore libertà nella definizione dei tag (marcatori), pur rimanendo nell'ambito del rispetto di
uno standard.
Ci si rese conto che l‟HTML andava bene per costruire semplici ipertesti, ma non rappresentava
uno standard solido su cui basare la pubblicazione di dati generali sul web. Il linguaggio era stato
progettato dall‟inizio con l‟unico scopo di descrivere ipertesti, e comprendeva una collezione fissata
di tag con una semantica fissa, ma molti tipi di informazione non si adattano a questo modello.
Serviva un linguaggio in grado di strutturare liberamente (senza un insieme predefinito di tag)
l‟informazione di uno specifico dominio applicativo.
1.4 Dall‟SGML al linguaggio XML
Fu così che nel 1996 si costituì l'XML Working Group nell'ambito del W3C1 . Lo scopo del gruppo
di lavoro era quello di definire un linguaggio che salvasse gli standard e offrisse libertà di
estensione. La ricerca partì, come era già accaduto in passato per l'HTML, dal linguaggio SGML.
Questo linguaggio risultava però troppo complesso per gli scopi della ricerca e pertanto fu snellito
da alcune caratteristiche e semplificato in alcuni punti per renderlo adatto allo scopo.
Nel dicembre 1997 le specifiche di XML venivano pubblicate come Proposed Recommendation.
Nel febbraio 1998 XML 1.0 [3] divenne uno standard del W3C. 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. Esso risultava essere
abbastanza generale per poter essere utilizzato nei più disparati contesti: dalla definizione della
1
World Wide Web Consortium (W3C) , consorzio istituito nel 1994 e che raccoglie esponenti delle principali aziende
ed organizzazioni del mondo scientifico ed informatico con l'obiettivo di definire standard accettati dai maggiori
produttori di software e tecnologie per il Web ( http://www.w3.org/TR/ )
9
struttura di documenti allo scambio di informazioni tra sistemi diversi, dalla rappresentazione di
immagini alla definizione di formati di dati; questo aspetto rappresentò una rivoluzione. Al
momento l‟ultima versione di XML 1.0 è la quarta edizione [4], pubblicata nel settembre 2006, che
incorpora un gran numero di correzioni degli errori presenti nella prima; alla versione 1.0 si è
aggiunta, nel febbraio 2004, la versione 1.1 di XML, che offre un supporto più esteso e „aggiornato‟
all‟ultima versione dello standard Unicode (oggi alla versione 4.0).
10
Capitolo 2 Il linguaggio XML
In questo capitolo descriveremo le caratteristiche principali del linguaggio XML. Parleremo della
struttura sintattica e del modello concettuale di un documento XML, definiremo i concetti di
documento ben formato e di validazione di un documento. Nel contesto della validazione
descriveremo il concetto di schema e i due principali linguaggi di definizione di schemi: DTD e
XML Schema. Nel contesto della descrizione di XML Schema analizzeremo il concetto dei
namespace ed il loro utilizzo nei documenti XML in generale, e nel linguaggio XML Schema in
particolare.
2.1 Caratteristiche generali del linguaggio XML
Il linguaggio XML, da Extensible Markup Language, è un framework per la definizione di
linguaggi di markup. Esso è in effetti un metalinguaggio, cioè un linguaggio sulla cui base
vengono creati altri linguaggi. In particolare, XML definisce le regole base per la creazione di
linguaggi di markup, cioè linguaggi il cui contenuto (testuale) è strutturato tramite particolari
delimitatori detti tag.
A differenza di HTML, la collezione dei tag marcatori non è prefissata: al contrario XML permette
di definirne di nuovi, adatti al tipo di informazioni che si desidera rappresentare.
Ogni linguaggio XML è rivolto a un particolare dominio applicativo, ma tutti utilizzano la stessa
sintassi base per il markup, e tutti sfruttano lo stesso insieme di strumenti per la elaborazione dei
documenti. L‟aggettivo “estensibile” in effetti può essere fuorviante: XML non è un singolo
linguaggio che può essere esteso per adattarsi ad altri usi, ma è piuttosto una notazione comune con
cui è possibile costruire linguaggi di markup. Non è una estensione di HTML, e non ha lo scopo di
sostituirlo: anzi, HTML dovrebbe essere considerato uno dei tanti linguaggi di markup. Alcune
differenze sintattiche impediscono ad HTML di potersi definire un linguaggio XML „puro‟; per
ovviare a questo il W3C ha progettato XHTML, una variante XML di HTML.
XML è un insieme standard di regole sintattiche per modellare la struttura di documenti e dati.
Le applicazioni possono elaborare i dati descritti con un linguaggio XML, e questo è un fattore
chiave in due aspetti dello sviluppo di applicazioni per il Web:
- la creazione di documenti;
- lo scambio dei dati.
11
La creazione di documenti usando l‟XML permette di renderli indipendenti dal formato di
pubblicazione e dai dispositivi su cui i documenti verranno visualizzati. 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. Sarà compito delle applicazioni interpretare il documento XML
e trasformarlo in modo opportuno per la pubblicazione e la visualizzazione sui vari terminali. In
effetti intorno ad XML ruotano una serie di tecnologie e linguaggi che supportano l'uso di questo
meta-linguaggio e lo rendono affidabile e flessibile per gli usi più disparati.
L‟XML può essere utilizzato come piattaforma per lo scambio di dati tra le applicazioni perché
permette di definire una sola modalità con cui rappresentare le informazioni. Senza un formato
comune per lo scambio di dati, le applicazioni dovrebbero conoscere tutti i formati proprietari dei
diversi database e dei sistemi operativi su cui sono registrati i dati. Avendo definito un unico
modello XML, le applicazioni si possono basare su questo formato.
2.2 Struttura di un documento XML
XML è dunque un meta-linguaggio per definire la struttura di documenti e dati. Il termine
“documento” ricorre spesso nella terminologia XML. Anche se esso può far pensare a pagine Web
o altri prodotti dell'elaborazione di testo, è utilizzato nella sua accezione più ampia di contenitore
di informazioni. Da un punto di vista „fisico‟, un documento XML è un file di testo con
estensione .xml che contiene una serie di tag, attributi e testo secondo regole sintattiche ben
definite. Dal punto di vista della struttura logica, un documento XML è rappresentato da una
struttura gerarchica chiamata albero XML, che consiste in una serie di nodi di tipo diverso a
seconda del contenuto che il nodo rappresenta. Sfortunatamente la terminologia usata per
descrivere tali alberi non è omogenea ed esistono vari data models che descrivono un modello
concettuale dell‟albero; quello di maggior successo è l’XPath Data Model, secondo il quale un
documento XML è un albero ordinato (l‟ordinamento è espresso relativamente ad una visita in pre-
ordine da sinistra a destra dell‟albero) i cui nodi possono appartenere alle seguenti categorie:
1) Nodo di testo: un nodo di testo corrisponde a un frammento dell‟informazione rappresentata
dal documento XML, e rappresenta un nodo foglia dell‟albero;
2) Nodo elemento: un nodo elemento (o semplicemente elemento) definisce il raggruppamento
logico dell‟informazione rappresentata dai suoi discendenti. Ogni elemento ha un nome che
lo identifica nell‟albero;
12
3) Nodo attributo: un nodo attributo è associato ad un nodo elemento, del quale descrive una
qualche proprietà, ed è costituito da una coppia chiave-valore, in cui il nome descrive la
proprietà e il valore è una stringa di testo;
4) Nodo commento: esso è un nodo foglia il cui scopo è analogo a quello dei commenti nei
linguaggi di programmazione;
5) Nodi di istruzione per l‟elaborazione o Processing Instruction: anch‟essi sono speciali
nodi foglia che rappresentano direttive o istruzioni specializzate da passare ad un strumento
specifico (chiamato target ) in grado di elaborarle;
6) Nodo radice: ogni albero XML ha inizio con un singolo nodo radice, che rappresenta
l‟intero documento. I figli della radice possono comprendere un numero arbitrario di
commenti e di istruzioni per l‟elaborazione ed un singolo nodo elemento, chiamato elemento
radice; quest‟ultimo è la radice del sottoalbero che racchiude tutta l‟informazione contenuta
nel documento.
E‟ da osservare che l‟XPath Data Model presenta delle incongruenze sulla relazione padre-figlio,
che non è simmetrica; in altre parole secondo tale modello il padre di un nodo attributo è sempre un
elemento, ma gli attributi non fanno parte dei figli di un elemento: i figli di un elemento
costituiscono una sequenza ordinata che contiene nodi testo, elemento, commenti e istruzioni per
l‟elaborazione; in aggiunta a ciò ad un elemento è associato un insieme di nodi attributo.
Esistono altri modelli dei dati che hanno un punto di vista leggermente diverso sulla natura dei
documenti XML, prevedendo ad esempio altre categorie di nodi oltre a quelle specificate prima,
volte a rappresentare altre informazioni che possono figurare all‟interno di un documento XML.
A prescindere dal modello concettuale dei dati, la rappresentazione testuale concreta è sempre la
stessa: un file di testo con estensione .xml contenente tag di markup e altra meta-informazione che
rappresenta elementi, attributi o altri nodi dell‟albero del documento.
Per fissare le idee prendiamo ad esempio il problema di rappresentare tramite XML la struttura di
un elenco di libri :