XML

Introduzione

Contrariamente a quanto comunemente si pensa, l’eXtensible Markup Language (XML) non è l’ennesimo linguaggio di markup né l’evoluzione dell’ormai vecchio, ma sempre vivo, HTML. Esso è un meta-linguaggio di markup, cioè un linguaggio che permette di definire altri linguaggi di markup. 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.

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.

Ma perché si sente tanto parlare di XML? Perché tutti ne parlano quasi come una rivoluzione in ambito informatico? Cosa è possibile fare con questo meta-linguaggio? Come è possibile definire ed utilizzare un proprio linguaggio di markup?

A queste domande cercherà di dare una risposta la presente guida, il cui obiettivo consiste nel fornire le idee generali delle tecnologie che ruotano intorno ad XML. Ma andiamo per ordine e cominciamo a vedere perché si è sentita l’esigenza di introdurre XML.

Storia e applicazioni di XML

Un po’di storia

Internet ed il Web, per la loro stessa natura non centralizzata ed aperta a macchine e persone di diversa natura, hanno bisogno di standard per poter essere utilizzabili e per poter evolvere senza forzature. A questo scopo è stato istituito il Worl Wide Web Consortium nel dicembre del 1994 con l’obiettivo di definire standard accettati dai maggiori produttori di software per il Web, primo fra tutti il linguaggio HTML.

Tuttavia, l’assalto commerciale ad Internet degli anni ’90 e la rapida diffusione del Web ha scatenato una delle lotte più agguerrite sul 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. La situazione peggiorò con l’introduzione del Dynamic HTML, le cui implementazioni erano quasi totalmente arbitrarie.

In questo panorama 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.

In questo contesto cominciò a delinearsi la necessità di un linguaggio di markup che offrisse maggiore libertà nella definizione dei tag pur rimanendo nell’ambito del rispetto di uno standard. Fu così che nel 1996 si costituì l’XML Working Group nell’ambito del W3C. 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 (Standard Generalized Markup Language), un meta-linguaggio per la definizione di linguaggi di markup. 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 ’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. Esso risulta essere abbastanza generale per poter essere utilizzato nei più disparati contesti: dalla definizione della struttura di documenti allo scambio di informazioni tra sistemi diversi, dalla rappresentazione di immagini alla definizione di formati di dati. Questo aspetto rappresentava una rivoluzione.

Il mondo di XML: XHTML e oltre

A questo punto, dopo aver conosciuto la storia dell’origine di XML, la domanda che generalmente viene fatta è: allora XML sostituirà l’HTML?

Anche se il dubbio risulta legittimo, possiamo dire che XML e HTML non sono in diretta concorrenza. È vero che le specifiche di HTML sono ferme alla versione 4.0 del dicembre 1997 (se si ignorano le piccole revisioni che hanno dato origine alla versione 4.01) e che non subiranno ulteriori evoluzioni. Tuttavia XML contribuisce proprio all’evoluzione dell’HTML.

Infatti, l’evoluzione del linguaggio HTML è XHTML (eXtensible HTML), una ridefinizione di HTML in termini di XML. 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 possiamo così riassumere brevemente:

  • 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 (per esempio, il tag <br> diventa <br/>)
  • utilizzare l’attributo id al posto di name per identificare gli elementi di un documento

Possono sembrare differenze di poco conto, soprattutto perché la tolleranza dei browser ci ha abituato a commettere errori sintattici, ma sono molto importanti soprattutto 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 o gli innumerevoli altri dispositivi portatili e/o wireless che si stanno affacciando su Internet.

Abbiamo detto all’inizio che XML è un insieme standard di regole sintattiche per modellare la struttura di documenti e dati. Due parole di questa definizione sono di fondamentale importanza: standard e struttura.

Le regole in questione sono standard e questo garantisce l’indipendenza da una specifica piattaforma hardware e software o da uno specifico produttore. Pertanto, se definiamo un nostro linguaggio di markup tramite XML possiamo stare sicuri che esistono già strumenti per le diverse piattaforme in grado di comprendere ed elaborare correttamente il nostro linguaggio.

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, a dimostrarne la flessibilità ed universalità.

Viene fuori quindi che 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.

Ad esempio, tramite le definizioni di Dtd e XML Schema possiamo creare grammatiche che definiscono formalmente la struttura dei dati e ne consentono di verificare la correttezza; tramite CSS, XSL, XSL-FO possiamo controllare la presentazione dei dati e la loro trasformazione in altri formati; con XLink e XPointer possiamo collegare documenti XML mentre con XQuery e XQL possiamo estrarre informazioni secondo determinati criteri.

Questi pochi esempi ci fanno capire come XML non sia semplicemente un modo nuovo di ridefinire cose vecchie, ma c’è tutto un mondo che consente di ottenere risultati in diversi contesti ed in maniera standard.

Documenti, dati e rappresentazioni

Struttura dei Documenti 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 pagine Web o altri prodotti dell’elaborazione di testo, è utilizzato nella sua accezione più ampia di contenitore di informazioni.

Concretamente, un documento XML è un file di testo che contiene una serie di tag, attributi e testo secondo regole sintattiche ben definite.

Analizziamo ora XML dal punto di vista logico e sintattico e i documenti che con esso si possono creare dando uno sguardo alla struttura logica. Introduciamo alcuni concetti fondamentali per la corretta comprensione di questo meta-linguaggio.

Un documento XML è intrinsecamente caratterizzato da una struttura gerarchica. Esso è composto da componenti denominati elementi.Ciascun elemento rappresenta un componente logico del documento e può contenere altri elementi (sottoelementi) o del testo.

Gli elementi possono avere associate altre informazioni che ne descrivono le proprietà. Queste informazioni sono chiamate attributi.

L’organizzazione degli elementi segue un ordine gerarchico o arboreo che prevede un elemento principale, chiamato root element o semplicemente root o radice.

La radice contiene l’insieme degli altri elementi del documento. Possiamo rappresentare graficamente la struttura di un documento XML tramite un albero, generalmente noto come document tree.

Per fissare le idee prendiamo in considerazione la rappresentazione di un generico articolo a carattere tecnico e proviamo a rappresentarlo secondo il modello XML, come mostrato in figura.

Figura 1. Struttura gerarchica di un documento XML
Struttura arborea di un documento XML

Nella figura abbiamo un root element denominato articolo che contiene una lista di elementi che rappresentano i vari paragrafi dell’articolo. Ciascun paragrafo a sua volta contiene del testo, degli esempi di codice e delle immagini. La maggior parte degli elementi di questo document tree possiede degli attributi: titolo, tipo, file.

La struttura logica di un documento XML dipende dalle scelte progettuali. Siamo noi a decidere come organizzare gli elementi all’interno di un documento XML. Non esistono regole universali per l’organizzazione logica di un documento se non il buon senso e l’esperienza.

La struttura logica di un documento XML viene tradotta in una corrispondente struttura fisica composta di elementi sintattici chiamati tag. Questa struttura fisica viene implementata tramite un file di testo creato con un qualsiasi editor. La rappresentazione fisica del documento XML visto prima può essere la seguente:

<?xml version=”1.0″ ?>
<articolo titolo=”Titolo dell’articolo”>
   <paragrafo titolo=”Titolo del primo paragrafo”>
      <testo>
         Blocco di testo del primo paragrafo
      </testo>
      <immagine file=”immagine1.jpg”>
      </immagine>
   </paragrafo>
   <paragrafo titolo=”Titolo del secondo paragrafo”>
      <testo>
         Blocco di testo del secondo paragrafo
      </testo>
      <codice>
         Esempio di codice
      </codice>
      <testo>
         Altro blocco di testo
      </testo>
   </paragrafo>
   <paragrafo tipo=”bibliografia”>
      <testo>
         Riferimento ad un articolo
      </testo>
   </paragrafo>
</articolo>

Analizziamo il contenuto del documento per trarre alcune considerazioni. La prima riga del documento lo identifica come un documento XML e ne specifica la versione (in questo caso la 1.0):

<?xml version=”1.0″ ?>

Il corpo vero e proprio del documento segue questa prima riga, rappresentando gli elementi tramite tag, cioè sequenze di caratteri delimitate dai segni ‘<‘ e ‘>’ proprio come avviene per l’HTML.

A differenza dell’HTML in cui i tag sono predefiniti, XML ci lascia liberi di definire i tag che vogliamo. Per specificare un attributo per un elemento inseriamo il nome dell’attributo con il relativo valore all’interno del tag di apertura dell’elemento. L’organizzazione gerarchica degli elementi viene rappresentata in XML tramite il loro annidamento.

Alcuni elementi possono essere vuoti, cioè possono essere privi di contenuto testuale. A differenza di quanto avviene per l’HTML, che consente l’utilizzo di elementi senza tag di chiusura, XML prevede che vengano sempre specificati i tag di apertura e chiusura. È questo il caso del tag immagine.

Tuttavia, XML prevede una sintassi abbreviata per gli elementi vuoti che evita di dover specificare il tag di chiusura. È infatti sufficiente terminare il tag di apertura con la sequenza di caratteri “/>”, come nel seguente esempio:

<immagine file=”immagine1.jpg” />

Le due notazioni per gli elementi vuoti sono equivalenti.

Documenti ben formati

XML richiede un certo rigore sugli aspetti sintattici. Abbiamo visto nel paragrafo precedente che un tag vuoto deve necessariamente prevedere il tag di chiusura o in alternativa la versione abbreviata del tag.

Questo non è altro che un aspetto di un principio fondamentale a cui tutti i documenti XML devono sottostare: 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.

Perché un documento XML sia ben formato deve rispettare le seguenti regole:

  • 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)
  • Ogni elemento deve avere un tag di chiusura o, se vuoti, possono prevedere la forma abbreviata (/>)
  • Gli elementi devono essere opportunamente nidificati, cioè i tag di chiusura devono seguire l’ordine inverso dei rispettivi tag di apertura
  • 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
  • I valori degli attributi devono sempre essere racchiusi tra singoli o doppi apici

La violazione di una qualsiasi di queste regole fa in modo che il documento risultante non venga considerato ben formato. Anche se queste regole possono sembrare semplici, occorre prestarvi molta attenzione se si usa un semplice editor di testo. Soprattutto se si è abituati a lavorare con HTML. Codice del tipo

<articolo titolo=test>

</Articolo>

darà qualche problema, e lo stesso dicasi per situazioni analoghe alla seguente:

<paragrafo>
<testo>abcdefghi…
</paragrafo>
</testo>

Anche la scelta dei nomi dei tag deve seguire alcune regole. Un tag può iniziare con un lettera o un underscore (_) e può contenere lettere, numeri, il punto, l’underscore (_) o il trattino (-). Non sono ammessi spazi o altri caratteri. XML è sensibile all’uso di maiuscolo e minuscolo, quindi i tag <prova> e <Prova> sono considerati diversi.

Per quanto riguarda il contenuto, 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 dell’alfabeto latino 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.

Ad esempio, la seguente direttiva di elaborazione:

<?xml version=”1.0″ encoding=”iso-8859-1″?>

abilita l’uso del set di caratteri noto come Latin 1 contenente le lettere accentate ed altri simboli.

Le specifiche di XML prevedono esplicitamente la possibilità di utilizzare la codifica Unicode per rappresentare anche caratteri non latini, come ad esempio i caratteri greci, cirillici, gli ideogrammi cinesi e giapponesi.

Oltre alle direttive di elaborazione, in un documento XML possiamo trovare i commenti, cioè informazioni rivolte agli esseri umani ed ignorate dai software che lo elaborano. I commenti XML seguono la stessa sintassi dell’HTML, sono cioè racchiusi tra le sequenze di caratteri <!– e –> e possono trovarsi in qualsiasi punto del documento.

Potrebbe essere necessario inserire in un documento XML dei caratteri particolari che potrebbero renderlo non ben formato. Ad esempio, se dobbiamo inserire del testo che contiene il simbolo <, corriamo il rischio che possa venire interpretato come l’inizio di un nuovo tag, come nel seguente esempio:

<testo>
   il simbolo < indica minore di
</testo>

Per evitare situazioni di questo tipo, XML prevede degli oggetti speciali detti entità che consentono di sostituire altri caratteri. Cinque entità sono predefinite e consentono l’uso di altrettanti caratteri riservati all’interno di un documento:

  • &amp; definisce il carattere &
  • &lt; definisce il carattere <
  • &gt; definisce il carattere >
  • &quot; definisce il carattere “
  • &apos; definisce il carattere ‘

Sfruttando le entità, l’esempio precedente diventa:

<testo>
   il simbolo &lt; indica minore di
</testo>

In determinate situazioni gli elementi da sostituire con le entità possono essere molti, il che rischia di rendere illeggibile il testo ad essere umano. Si consideri il caso in cui un blocco di testo illustri proprio del codice XML:

<codice>
   <libro>
      <capitolo>
      </capitolo>
   </libro>
</codice>

In questo caso, al posto di sostituire tutte le occorrenze dei simboli speciali con le corrispondenti entità è possibile utilizzare una sezione 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 ]]>. Il nostro esempio diventerà come segue:

<codice>
   <![CDATA[
      <libro>
         <capitolo>
         </capitolo>
      </libro>
   ]]>
</codice>

In certe situazioni non si conosce a priori il contenuto che può essere inserito in un blocco di testo e pertanto l’utilizzo delle sezioni CDATA risulta obbligatorio.

Documenti validi

XML offre la libertà di definire i tag a seconda delle necessità, ma perché non si generi confusione è necessario un meccanismo che ne vincoli l’utilizzo all’interno dei documenti. Si può stabilire quali tag possono essere utilizzati e come per rispecchiare una struttura logica predefinita.

In altre parole abbiamo 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.

La caratteristica di documento valido si affianca a quella di documento ben formato per costruire documenti XML adatti ad essere elaborati automaticamente.

C’è da sottolineare che un documento ben formato può non essere valido rispetto ad una grammatica, mentre un documento valido è necessariamente ben formato. tra l’altro, un documento valido per una grammatica può non essere valido per un’altra grammatica.

Ma come si definisce una grammatica per descrivere un linguaggio di markup? Attualmente due sono gli approcci più diffusi alla creazione di grammatiche per documenti XML: Dtd – Document Type Definition e XML Schema. Questi argomenti saranno affrontati in seguito.

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 (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

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 segnaliamo: MSXML (componente di Internet Explorer dalla versione 4.0 in poi, quindi è presente su tutte le macchine che hanno installato questo browser), Xerces e XML4J.

XMLultima modifica: 2008-03-09T17:35:00+01:00da guastastyle
Reposta per primo quest’articolo