Codifica elettronica dei testi letterari ed e-book:
la marcatura XML TEI ed il trattamento informatico del romanzo Baltico di Matteo Collura

I.5. XML

Il linguaggio di markup HTML, insieme al protocollo http, è stato la colonna portante su cui ha basato il proprio sviluppo il World Wide Web, tuttavia ha ben presto mostrato alcuni importanti limiti in relazione all'evoluzione della rete.

Nato come linguaggio per l'interscambio di documenti di testo reticolarmente collegati fra di loro per mezzo di link ipertestuali, HTML è stato negli ultimi anni piegato ed adattato come strumento per la visualizzazione di dati. Tuttavia la potenza rappresentazionale di HTML non è elevata, all'atto della sua creazione non c'era l'intenzione di includervi aspetti stilistici, basti pensare che anche marcatori per stili assai comuni come il grassetto (<B>) o il corsivo (<I>) sono stati aggiunti solo in seguito. L'impossibilità di avere un controllo puntuale della visualizzazione è un importante limite di HTML, è alquanto problematico progettare pagine web per monitor con risoluzioni diverse, inoltre nel caso si desideri fornire una versione stampabile della stessa pagina occorre crearla ex novo.

HTML è un linguaggio di rappresentazione chiuso che permette di scegliere soltanto tra un insieme prefissato di elementi. Il linguaggio manca della flessibilità sufficiente a descrivere tipi differenti e specifici di informazioni e non permette la pubblicazione di un singolo insieme di informazioni su supporti diversi oppure la trasmissione delle informazioni in differenti formati.

Come ha giustamente notato Bill Gates in una intervista nel 2001 "Le pagine web sono ancora un'immagine, una rappresentazione dei dati e non sono i dati sottostanti"[29].

Ci si è presto accorti della necessità di una separazione del contenuto dallo stile. Questa separazione è la principale caratteristica di SGML, il progenitore di HTML, tuttavia SGML, sebbene flessibile e potente, è eccessivamente complesso, inoltre per via di certe caratteristiche del linguaggio, SGML può essere assai esigente in termini di risorse computazionali e tempo di elaborazione. Su Internet la velocità di elaborazione è molto importante, un formato di documento deve essere progettato in modo che il navigatore possa acquisire ed elaborare veloce­mente i documenti.

Per tutti questi motivi nacque XML (Extensible Markup Language), XML è una revisione/semplificazione del linguaggio SGML. Il gruppo di lavoro originale si era prefisso un obiettivo di "80/20", ossia l'ottanta percento delle funzionalità di SGML con solo il venti percento della sua complessità.

Il progetto XML prese l'avvio nel 1996 in seno al World Wide Web Consortium (W3C), lo sviluppo fu curato dal XML Working Group (originariamente noto come SGML Editorial Review Board), esso era presieduto da Jon Bosak della Sun Microsystems con la partecipazione attiva dell'XML Special Interest Group (precedentemente noto come SGML Working Group) anch'esso organizzato dal W3C.

Nel febbraio del 1998, dopo oltre un anno di lavoro, le specifiche sono state rilasciate come raccomandazione ufficiale, con il titolo Extensible Markup Language (XML) 1.0.

Gli obiettivi progettuali di XML, leggiamo nelle specifiche, sono:

  1. XML deve essere utilizzabile in modo semplice su Internet.
  2. XML deve supportare un gran numero di applicazioni.
  3. XML deve essere compatibile con SGML.
  4. Deve essere facile lo sviluppo di programmi che elaborino documenti XML.
  5. Il numero di caratteristiche opzionali deve essere mantenuto al minimo possibile, idealmente a zero.
  6. I documenti XML dovrebbero essere leggibili da un uomo e ragionevolmente chiari.
  7. La progettazione XML dovrebbe essere rapida.
  8. La progettazione XML deve essere formale e concisa.
  9. I documenti XML devono essere facili da creare.
  10. Non è di nessuna importanza l'economicità nel markup XML.[30]

Come SGML, da cui deriva, XML è un metalinguaggio che fa dell'astrattezza e della generalità la sua forza, cito un documento del W3C: "XML è un metodo per mettere dati strutturati in un file di testo. Per "dati strutturati" pensate a cose come fogli elettronici, agende, parametri di configurazione, transazioni finanziarie, disegni tecnici, ecc. I programmi che producono questi dati li salvano anche su disco, per cui possono usare sia il formato binario o sia quello testuale. Quest'ultimo permette, se necessario, di guardare i dati senza l'ausilio del programma che li ha creati. XML è un insieme di regole, di linee guida, convenzioni, in qualsiasi modo li vogliate chiamare, per progettare file di testo per questi dati, in un modo che produca file che siano facili da generare e leggere (da parte di un computer), che siano non ambigui, e che tenga lontano da pericoli comuni, come mancanza di estensibilità, mancanza del supporto per l'internazionalizzazione/localizzazione, e dipendenza dalla piattaforma [...] Come l'HTML, XML fa uso di tag (parole racchiuse tra '<' e '>') e attributi (della forma name="value"), ma mentre l'HTML specifica cosa ogni tag e attributo significhi (e spesso come un testo tra essi apparirà in un browser), XML usa i tag solo per delimitare pezzi di dati, e lascia l'interpretazione dei dati completamente all'applicazione che li legge. In altri termini, se vedi "<p>" in un file XML, non è detto che sia un paragrafo. A seconda del contesto, può essere un prezzo, un parametro, una persona, una p..."[31]

XML eredita da SGML il concetto di tipo di documento e utilizza ancora le Document Type Definition DTD per definire le regole sintattiche con cui rappresentare la struttura dati.[32] XML è retrocompatibile con SGML, un documento XML valido è anche un documento SGML valido, d'altra parte è spesso abbastanza semplice la conversione di un documento SGML in XML.

Un concetto nuovo di XML è quello di "ben formato". Un documento SGML per poter essere utilizzato deve essere di norma associato ad una DTD che ne specifica i vincoli sintattici, se il documento rispetta le norme stabilite nella DTD è detto "valido". A differenza di SGML, XML permette anche di distribuire documenti non associati ad una DTD, tali documenti sono detti "ben formati".

Per essere ben formata una istanza XML deve rispettare alcuni vincoli formali:

Una istanza XML per essere valida oltre a rispettare i vincoli imposti dalla sua DTD deve anche essere ben formata, l'analisi della validità e della "corretta formazione" del documento è affidata a software detti parser.

Tutti questi vincoli sono stati posti ai documenti XML al fine di ridurre al minimo la difficoltà di implementazione di questa tecnologia nelle applicazioni, e facilitare l'apprendimento del linguaggio.

Le istanze XML sono costituite da documenti di testo codificati secondo le tabelle caratteri Unicode/ISO10646. Di default la codifica dei documenti XML è UTF-8 o UTF-16.

In XML è possibile definire qualsiasi carattere come entità numerica facendo riferimento alla posizione dei caratteri nelle tavole di codifica Unicode/ISO10646, le entità numeriche sono identificate dalla combinazione &#numero_nella_tavola_Unicode; ad esempio "&#200;" sta per il carattere È.

XML è una tecnologia di pubblico dominio, non occorre pagare licenze ad alcuno per il suo utilizzo, disponibile per tutte le implementazioni, la sua adozione da parte di chiunque è completamente gratuita ed anche le tecnologie componenti sono di pubblico dominio.

Grazie alla sua indipendenza dalla piattaforma informatica, alla sua astrattezza e generalità nella rappresentazione dei dati, XML si è ormai avviato a diventare il formato universale per l'interscambio di dati, basti pensare che la prossima suite Office della Microsoft adotterà XML come formato per i propri file[33]. Ben si esprimeva Tim Bray,uno dei collaboratori alla stesura delle specifiche XML 1.0, quando definiva XML come l'ASCII del futuro.

I.5.1. XSL

Una delle caratteristiche principali di XML è la separazione dei dati dalla loro rappresentazione. Per formattare e visualizzare i dati contenuti in un file XML si ricorre ad XSL.

Con l'acronimo XSL (Extensible Stylesheet Language) si è soliti indicare una famiglia di tecnologie sviluppate, e formalizzate da raccomandazioni ufficiali del W3C, finalizzate alla rappresentazione e trasformazione di dati strutturati per mezzo di XML.

Lo sviluppo di XSL prese l'avvio nel 1997 in seno al W3C, in origine gli autori[34] usavano l'acronimo XSL per Extensible Style Language, ma ben presto la denominazione è divenuta Extensible Stylesheet Language, definizione che può essere tradotta come "linguaggio espandibile per fogli di stile". Predecessore diretto di XSL è il Document Style Semantics and Specification Language (DSSSL), un linguaggio utilizzato soprattutto in ambito SGML per manipolare documenti contenenti dati strutturati e convertirli in un formato adatto alla visualizzazione o alla stampa. Quella dei DSSSL è una tecnologia molto onerosa dal punto di vista della risorse computazionali richieste e dei costi di licenza; DSSSL, anche a causa della difficoltà di implementazione, non ha avuto una grande diffusione, è stato usato soltanto in alcune applicazioni associate a sistemi per la composizione tipografica di alta qualità. XSL ricava soltanto alcune sue caratteristiche da DSSSL, a differenza di XML con SGML. XSL non può essere considerato un sottoinsieme di DSSSL in quanto certe caratteristiche di XSL non esistono in DSSSL.

Durante il lavoro di sviluppo di XSL, col crescere delle specifiche, è divenuto evidente che "l'attribuzione di stili a documenti XML comporta due processi distinti, anche se strettamente correlati. Il primo comporta una trasformazione strutturale, in cui gli elementi vengono selezionati, raggruppati e riordinati; il secondo genera spesso un processo di formattazione che produce la semantica di rendering per specifici agenti utente che presentano i documenti su schermo, su carta, in voce o con altri mezzi"[35]. In sostanza ci si è resi conto che con i fogli di stile sono possibili due tipi di approccio per la rappresentazione dei dati, da una parte si possono associare delle regole di formattazione agli elementi XML, dall'altra si è visto come sia anche possibile creare, a partire dai dati del sorgente XML, un documento completamente nuovo che raffigura i dati in una nuova struttura. Per queste ragioni nelle prime bozze delle specifiche XSL si parlava, a proposito delle istruzioni che avrebbero dovuto esser presenti in un foglio di stile, di norme di stile e norme di costruzione. Per norma di stile si intende la specifica di un modello e di un'azione che la norma applica quando viene individuato il modello specificato, in pratica si stabilisce che ogni qual volta nel documento XML è presente un determinato elemento occorre intraprendere un'azione specificata (per lo più l'applicazione di regole di formattazione). La norma di costruzione invece comporta la specifica di un modello, che fa riferimento agli elementi del sorgente XML, e che attiva la creazione di un nuovo elemento quando viene individuato il modello specificato.

Nel corso della definizione delle specifiche tale distinzione è stata abbandonata a favore della divisione dello sviluppo di XSL in tre filoni separati, che ha poi prodotto tre distinte raccomandazioni: una per un linguaggio per trasformare documenti XML (XSLT), una per un vocabolario per formattare documenti XML (XSL-FO) ed una per un linguaggio per definire parti di un documento XML (XPath), perciò oggi XSL consta di tre specifiche distinte: XSLT, XSL-FO[36] e XPath[37].

Le raccomandazioni ufficiali di XSLT e XPath sono state rilasciate nel novembre del 1999, mentre quelle di XSL-FO nell'ottobre del 2001.

Come detto XSL è composto da XSL Formatting Objects (XSL-FO), XML Path (XPath) e XSL Transformations (XSLT), grazie a questi tre strumenti XSL definisce regole per specificare come estrarre informazioni da un documento XML e come formattare queste informazioni in modo da poterle visualizzare.

I.5.2. XSL-FO

XSL Formatting Objects (XSL-FO) è un vocabolario XML[38] che definisce dei tag, detti Formatting Objects, che sono adoperati per specificare come visualizzare un documento XML. I documenti XSL-FO vengono utilizzati in accoppiata con il Formatting Object Processor (FOP), una applicazione software la quale si occupa di effettuare il rendering (la formattazione grafica) del documento e produrre un nuovo documento di output adatto alla visualizzazione. I file XSL-FO possono essere usati in associazione ad un processore FOP per creare, ad esempio, documenti Adobe PDF, oppure in numerosi formati grafici o ancora per inviare l'output direttamente ad una stampante.

XSL-FO è assai potente per la formattazione di alta qualità tuttavia è una tecnologia ancora giovane e per questo ad oggi non molto diffusa.

I.5.3. XPath

XML Path (XPath) è un linguaggio di espressione utilizzato per accedere a parti di un documento XML e farvi riferimento. Abbiamo rilevato che un documento XML può essere rappresentato come una struttura ad albero con un nodo radice ed una serie di nodi figli. XPath offre gli strumenti per identificare nodi specifici in un albero di documento XML. La sintassi di XPath usa una notazione a percorso simile a quella usata per la risoluzione degli URL degli indirizzi Internet. Una espressione XPath può essere usata nella manipolazione di stringhe, nei calcoli numerici e nella logica boleana.

I.5.4. XSLT

Il cuore della tecnologia XSL è rappresentato da XSL Transformations (XSLT). XSLT è un linguaggio[39] utilizzato per manipolare documenti XML. XSLT estrae i dati da un documento XML per produrre un nuovo documento. Il processo di creazione di un nuovo documento a partire da un sorgente XML è detto trasformazione, questo processo non cambia il documento originale. XSLT è un linguaggio di programmazione dichiarativo. Nella programmazione di tipo tradizionale si stabiliscono accuratamente i passi che il computer deve eseguire; nella programmazione dichiarativa si dice al computer cosa fare, invece di come fare qualcosa. La programmazione dichiarativa è un tipo di programmazione guidata dai dati, in cui il computer è istruito su quali operazioni intraprendere allorché incontra determinati dati. La sintassi di XSLT è basata su modelli, detti template, che fanno riferimento per mezzo di espressioni XPath agli elementi del documento sorgente. I template attivano determinate azioni, quando incontrano nel sorgente gli elementi individuati dall'espressione XPath. Per operare XSLT si appoggia ad un processore; un processore è un'applicazione software che applica l'XSLT all'XML. Il processore lavora assieme al parser che in primo luogo analizza la sintassi dell'XML e dell'XSLT e se questa è corretta, ossia i documenti sono ben formati ed eventualmente, se associati ad una DTD, validi, permette la trasformazione. Quando viene attivato, il processore XSLT inizia a leggere il sorgente XML ed il documento XSLT, quest'ultimo contiene le regole per trasformare il documento originale in un nuovo documento. Le regole sono espresse come insieme di modelli messi in relazione con gli elementi del documento XML originale. Ogni modello contiene espressioni XPath che indicano al processore quali siano il nodo o il gruppo di nodi obiettivo nel documento sorgente. Quando si verifica una corrispondenza, le regole del modello vengono applicate al contenuto dell'elemento corrispondente trovato. Il processo prosegue fino a quando tutti i modelli e tutte le corrispondenze sono state elaborate correttamente.

Il codice precedentemente illustrato nel capitolo quattro può anche esser considerato una istanza XML ben formata, grazie ad XSLT può essere trasformato in un documento HTML adatto alla visualizzazione. Di seguito riportiamo, a titolo di esempio, il codice XSLT che permette ciò:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<head>
<title>
Matteo Collura BALTICO capitolo <xsl:value-of select="/capitolo/@id"/>
</title>
</head>
<body bgcolor="#FFFFFF">
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="titolo[@tipo='convenzionale']">
<div align="center">
<h1>
<xsl:apply-templates/>
</h1>
</div>
</xsl:template>
<xsl:template match="titolo[@tipo='tematico']">
<div align="center">
<h2>
<xsl:apply-templates/>
</h2>
<hr/>
</div>
<br/>
</xsl:template>
<xsl:template match="paragrafo">
<p>
<xsl:apply-templates/>
</p>
</xsl:template>
<xsl:template match="nome">
<i>
<xsl:apply-templates/>
</i>
</xsl:template>
</xsl:stylesheet>

Fulcro di XSLT sono i modelli identificati dal tag xsl:template, ogni tag template è accompagnato da un attributo match="espressione_XPath" il quale contiene l'espressione XPath che mette in corrispondenza le regole del modello con gli elementi del sorgente XML. All'interno di ogni template sono contenute le regole del modello, nel nostro caso i tag HTML necessari per produrre l'output voluto. L'elemento <xsl:apply-templates> dice al processore di invocare i modelli per gli elementi figli dell'elemento selezionato e solo allora di concludere l'elaborazione del modello.[40]

Ecco l'output prodotto dal foglio XSLT dell'esempio applicato al sorgente XML riportato nel capitolo 4 utilizzando il processore Istant Saxon 6.22:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Matteo Collura BALTICO capitolo I.1</title>
</head>
<body bgcolor="#FFFFFF">
<div align="center">
<h1>I</h1>
</div>
<div align="center">
<h2>L'ubriaco che sapeva auscultare la terra</h2>
<hr>
</div><br>
<p> Dalle parti di <i>Montedoro</i> dicono che fu un pastore, per caso.
</p>
</body>
</html>

Come si può vedere i dati del file XML sono stati inseriti in una struttura completamente nuova. Il precedente documento è un sorgente HTML, ecco di seguito come questo viene visualizzato da un browser quale Internet Explorer 6.0:

esempio di output XSLT html visualizzato nel browser Internet Explorer

Nella trasformazione dei dati dei documenti XML, XSLT consente una serie di attività di manipolazione dei dati stessi.

Il grosso vantaggio di XSLT consiste nel consentire di creare a partire da un unico sorgente XML innumerevoli output atti a soddisfare le esigenze più diverse, ad esempio possiamo ottenere un file contenente tag XSL-FO per formattare i dati del documento oppure un file HTML o XHTML per permettere la visualizzazione dei dati con un browser web, ma gli stessi dati possono anche essere utilizzati per inviare le informazioni a un programma di sintesi del discorso che legge il testo a una persona con problemi visivi. Oppure, è anche possibile creare l'output per un dispositivo di lettura del Braille. Sono innumerevoli le possibilità offerte dai fogli di stile al trattamento dei dati. Grazie ad XML ed XSLT si è finalmente attuata la separazione dei dati dalla loro rappresentazione, ciò produce effetti positivi in numerosi campi applicativi, per tal motivo queste tecnologie si vanno sempre più affermando, candidandosi seriamente a diventare il formato universale per l'interscambio dei dati, "l'ASCII del ventunesimo secolo".

Nel momento in cui scriviamo è incorso di elaborazione una evoluzione-revisione del linguaggio XSLT, la versione 2.0.

I.5.5. CSS

Un altro linguaggio per la visualizzazione di documenti XML è quello dei CSS (Cascading Style Sheets - Fogli di stile a cascata), nato per l'utilizzo con HTML, viene in taluni casi usato anche per associare regole di formattazione a documenti XML. A differenza di XSLT, i CSS si limitano ad associare norme di visualizzazione ai tag XML senza produrre un nuovo documento. La prima specifica ufficiale di CSS (CSS1) risale al dicembre del 1996. Nel maggio 1998 è stata rilasciata la seconda versione CSS2 in cui sono state effettuate numerose aggiunte alla prima versione del linguaggio. È attualmente in corso di sviluppo una nuova specifica CSS3.

I.5.6. Tecnologie correlate a XML

Attorno ad XML è fiorita tutta una famiglia di tecnologie ad esso correlate. XML Schema Definition (XSD) è un linguaggio che, analogamente alle definizioni dei tipi di documento (DTD), consente di descrivere la struttura dei documenti XML in termini di elementi attributi e dati in essi contenuti. A differenza del linguaggio delle DTD, XSD è espresso usando una sintassi XML[41], inoltre un ulteriore vantaggio di XSD è che permette di specificare il tipo di dati da utilizzare negli elementi. In realtà, in ambito prettamente umanistico non sono particolarmente rilevanti i vantaggi portati da XML Schema Definition rispetto alle DTD. XML Link Language (Xlink) è un linguaggio che descrive un modo standard per inserire collegamenti ipertestuali in un file XML, mentre HTML consente soltanto collegamenti unidirezionali nei quali l'unico modo per tornare alla pagina di partenza è quello di utilizzare l'apposito pulsante del browser, Xlink permette link multi direzionali grazie ai quali un utente può tornare indietro utilizzando lo stesso link che gli ha permesso di arrivare a destinazione. Consente inoltre Link a destinazione multipla per mezzo dei quali, un utente, partendo da un singolo link può scegliere fra differenti destinazioni. Sono molte altre le opzioni che Xlink permette di applicare ai collegamenti ipertestuali, tuttavia ad oggi il linguaggio non è ampiamente supportato dai browser, pertanto per il momento il suo uso e la sua diffusione sono estremamente limitati.

XML Pointer Language (Xpointer) offre gli strumenti per indirizzare e localizzare informazioni all'interno di un documento XML. XML Data Island viene utilizzato per integrare dati XML all'interno di pagine HTML. Meritano anche una breve menzione anche alcuni dei numerosi vocabolari XML sviluppati in questi ultimi anni. MML (Matematical Markup Language) utilizzato per la definizione di formule matematiche complesse. CML (Chemical Markup Language) un linguaggio per la rappresentazione della struttura delle molecole. SVG (Scalable Vector Graphics) con cui è possibile disegnare grafici a due dimensioni usando il markup. XBRL (eXtensible Business Reporting Language) è un linguaggio che usa XML per la descrizione degli estratti conto.

Vi sono numerose altre tecnologie figlie di XML ma darne un elenco completo sarebbe tedioso e non opportuno in questa sede. Quanto detto basti per rendersi conto dell'attività di sviluppo che ferve attorno ad XML e per comprendere come ormai questa tecnologia si sia avviata a divenire un caposaldo in numerosi ambiti applicativi, non ultimo quello del trattamento informatico dei testi letterari.


[29] Laura Massacra, Come sarà il cybermondo del 2001. Bill Gates. Bilanci e previsioni sul futuro di Internet, in Mediamente Biblioteca Digitale
<http://www.mediamente.rai.it/biblioteca/prov/001229gates.asp>
(13 ottobre 2003).
[30] World Wide Web Consortium, Extensible Markup Language (XML) 1.0, traduzione ufficiale delle specifiche XML 1.0 effettuata da Andrea Marchetti
<http://www.w3c.it/traduzioni/xml-19980210/REC-xml-19980210-it.html>
[31] Bert Bos, XML in 10 punti, trad. it. Emiliano Tellina, in Latoserver.it
<http://www.latoserver.it/XML/in10punti/>
(ed. orig. XML in 10 points, <http://www.w3.org/XML/1999/XML-in-10-points>)
[32] Le DTD XML mancano di alcuni elementi ed opzioni delle DTD SGML
[33] Nel momento in cui scriviamo non è stata ancora rilasciata alla vendita la versione di Microsoft Office con supporto XML.
[34] Gli Autori della proposta iniziale di XSL sottoposta al W3C nell'agosto del 1997 sono: Microsoft Corporation, Inso Corporation, ArborText, University of Edinburg e James Clark.
[35] Devan Shepherd, XML Guida completa (vedi n.22) p.294.
[36] In realtà il nome della specifica è XSL 1.0 tuttavia è invalso l'uso di definire questa tecnologia XSL-FO.
[37] XPath è un linguaggio per identificare parti di un documento XML, sviluppato come parte integrante di XSLT, dove è ampiamente utilizzato, è stato adottato anche da altri linguaggi correlati ad XML, per tale motivo il W3C ha separato lo sviluppo di XPath da quello di XSLT.
[38] Un vocabolario XML è un insieme di tag XML definiti per un determinato scopo. Ad esempio XHTML (una riscrittura in XML dei tag HTML) è un altro caso di vocabolario XML.
[39] Come XSL-FO, XSLT è formalmente un vocabolario XML, si presenta infatti come un insieme di tag XML, tuttavia a differenza di XSL-FO, i suoi tag non dicono ad un programma come visualizzare qualcosa, ma piuttosto cosa fare quando incontra un certo tag.
[40] Nell'esempio ho dato soltanto una panoramica minima delle funzioni XSLT, non essendo obiettivo di questo lavoro una illustrazione completa del linguaggio.
[41] XSD si presenta come un vocabolario XML.
<DigiSic />
[ AccessKey: Top=T Precedente=Z Successiva=C Indice=X?]