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

III.11. LA PRODUZIONE DEGLI OUTPUT

vedi: appendice 1 e appendice 2

Sebbene XML sia fatto in modo da poter essere intellegibile anche agli esseri umani, è stato in primo luogo concepito per permettere un trattamento ottimale dei dati alle applicazioni informatiche. La codifica elettronica da noi operata è stata portata avanti sulla base del presupposto che il codice sarebbe poi stato sottoposto ad elaborazione automatica dei dati. Si ricorderà quanto gia detto nelle parti precedenti della trattazione sull'importanza della separazione del contenuto dalla sua rappresentazione; mediante la codifica TEI abbiamo sostanzialmente identificato e demarcato la struttura del testo secondo un ben determinato livello descrittivo. Per il trattamento dei dati ci siamo giovati degli strumenti offerti dall'Extensible Stylesheet Language (XSL) ed in particolar modo dal suo componente Extensible Stylesheet Language Trasformations (XSLT). Abbiamo già parlato in termini teorici di XSL e della sua genesi nella prima parte di questa relazione, ci accingiamo adesso a mostrare nella pratica, sulla base del lavoro svolto per il romanzo di Collura, come questa tecnologia possa essere impiegata per la creazione di output destinati alla fruizione o addirittura all'analisi del testo.

III.11.1. L'output HTML dell'Header

Intraprendiamo la nostra esposizione con la descrizione della produzione di un output HTML per l'Header del nostro file TEI/XML. In appendice vengono forniti sia il codice completo del foglio di stile XSLT adoperato per la trasformazione, sia il codice HTML prodotto ed una sua rappresentazione[161] grafica. Ove non indicato diversamente si precisa che il processore XSLT da noi adottato è stato Istant Saxon 6.5.2.

Sostanzialmente XSLT è un linguaggio di estrazione dei dati. Questo significa che l'applicazione, in base alle istruzioni del documento, estrae i dati di un altro documento, nel nostro caso il file XML di Baltico, e li posiziona all'interno di una nuova struttura, nello specifico quella del file HTML con i dati dell'HEADER TEI.

Passando all'analisi del codice salta subito all'occhio che un foglio di stile XSLT è anche un file XML ben formato. Il documento si apre con la consueta dichiarazione XML

<?xml version="1.0" encoding="UTF-8"?> cui segue l'elemento radice del foglio XSLT <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">, subito dopo incontriamo <xsl:output method="html" encoding="iso-8859-1" version="4.01" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"/> con cui si specifica il formato dell'output, in questo caso HTML 4.01. tralasciando i due elementi <xsl:strip-space elements="*"/> <xsl:preserve-space elements="author"/> entriamo nel vivo del foglio di stile; il cuore della sintassi XSLT è costituito dalle dichiarazioni di modello (template), mediante le quali si mettono in corrispondenza i nodi, ovvero gli elementi, del sorgente XML con le istruzioni definite nel foglio XSLT. Tornando all'esempio concreto vediamo che il primo modello definito è:

<xsl:template match="/">
<html>
<head>
<title>
<xsl:value-of select="/TEI.2/teiHeader/fileDesc/titleStmt/author"/> - <xsl:value-of select="/TEI.2/teiHeader/fileDesc/titleStmt/title"/> [FRONTESPIZIO]</title>
</head>
<body>
<hr/>
<h1>
<xsl:value-of select="/TEI.2/teiHeader/fileDesc/titleStmt/title"/>
<hr/>
</h1>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>

Questo primo modello, mediante l'attributo match, mette in relazione il nodo radice[162] del file sottoposto ad elaborazione, nel nostro caso[163] <TEI.2>...</TEI.2>, con le istruzioni definite nel foglio di stile. Ecco nel concreto cosa avviene: il processore dopo aver trovato corrispondenza nel file sorgente con il nodo identificato nel modello, ossia <TEI.2>, manda in output le istruzioni del modello: in pratica comincia a creare un file HTML scrivendo gli opportuni tag: <html> <head> <title>, arrivato a questo punto l'espressione <xsl:value-of select="TEI.2/teiHeader/fileDesc/titleStmt/author"/>[164] ordina al processore di mandare in output, di scrivere, il contenuto dell'elemento identificato dall'espressione XPath (TEI.2/teiHeader/fileDesc/titleStmt/author), la quale può essere così tradotta: "il contenuto di <author> figlio di <titleStmt> il quale è figlio di <fileDesc> il quale è figlio di <teiHeader> il quale è figlio di <TEI.2>", il lettore forse ricorderà che questo elemento così si presenta nella testata di Baltico:

<author><name type="forename">Matteo</name>
<name type="surname">Collura</name></author>

Come vediamo il tag <author> ha due elementi figli <name>, tuttavia il comportamento di value-of prevede che venga mandato in output il valore di stringa (in parole povere il contenuto testuale) dell'elemento selezionato e dei suoi figli, in questo caso <name>. Procedendo nell'analisi del foglio di stile osserviamo che il modello prevede che si inserisca un trattino e poi, allo stesso modo di quanto già fatto con il nome dell'autore, si trasmetta il valore del tag <title> del <titleStmt>, contenente il titolo dell'opera. Dopo queste operazioni si prescrive al template di scrivere [FRONTESPIZIO], e di seguito </title> </head> <body> <hr/> <h1>, marcatori con cui si chiude la testata ed inizia il contenuto del file HTML, dopo si manda nuovamente in output il titolo dell'opera sempre grazie all'ausilio di espressioni xsl:value-of, dopodiché l'elaborazione prosegue scrivendo <hr/></h1>, finché non incontra <xsl:apply-templates/> ed allora si arresta temporaneamente; <xsl:apply-templates/> impone al processore di bloccarsi e chiamare i modelli per gli elementi figli dell'elemento selezionato, solo dopo aver effettuato queste operazioni il modello torna attivo ed esegue le restanti operazioni, nello specifico scrivere i tag di chiusura del file HTML </body> </html>. Ecco l'output prodotto dal modello appena illustrato fino al suo arresto al momento in cui incontra <xsl:apply-templates/>:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Matteo Collura - Baltico. Un'epopea siciliana: edizione elettronica [FRONTESPIZIO]</title>
</head>
<body>
<hr>
<h1>Baltico. Un'epopea siciliana: edizione elettronica</h1>
<hr>

Come si può vedere all'interno del tag <title> sono stati inseriti i valori dei tag <author> e <title> della testata TEI, lo stesso è stato fatto anche per il marcatore <h1> che apre il corpo del file HTML. Di seguito mostriamo come appare nel browser Internet Explorer 6.0 questo output HTML:

Output HTML (parziale) prodotto da eleborazione XSLT visualizzato nel browser Internet Explorer

Proseguendo nell'analisi del foglio di stile il secondo modello che incontriamo è:

<xsl:template match="teiHeader">
<xsl:apply-templates/>
</xsl:template>

Il contenuto di questo template si limita a dire al processore di chiamare gli altri modelli per gli elementi figli del nodo corrente; si ricorderà che in effetti l'elemento <teiHeader> non è altro che un contenitore per tutta una serie di sotto elementi contenenti i dati veri e propri. Una impostazione analoga al modello adottato per il <teiHeader> la ritroviamo nel modello del suo primo figlio <fileDesc> ed a sua volta per il figlio di questi <titleStmt>: entrambi, infatti, sono elementi che, come sappiamo, racchiudono un gruppo di tag che marcano informazioni strutturate, pertanto i modelli che interverranno saranno quelli facenti riferimento ai loro sottocomponenti di livello più basso.

Una precisazione occorre fare in merito al comportamento di <xsl:apply-templates/>, questo elemento come abbiamo visto viene usato per invocare i modelli per gli elementi figli dell'elemento contesto, tuttavia come si potrà notare proseguendo nell'analisi del foglio XSLT, in taluni casi questo comando è presente anche in modelli i quali fanno riferimento ad elementi nel sorgente il cui contenuto è costituito esclusivamente da testo e che si trovano al livello più basso dell'albero del documento XML, ci si domanderà quindi il perché dell'adozione di <xsl:apply-templates/> in questi contesti. In realtà, oltre ai modelli esplicitamente dichiarati nel foglio di stile XSLT, il processore prevede dei modelli, per così dire impliciti, definiti in un foglio di stile di default che interviene quando si incontra un elemento non messo in corrispondenza con un template[165] definito nel foglio di stile principale. Sulla base dei comportamenti di default, allorché il processore XSLT raggiunge il contenuto di un elemento per cui non è stato definito un modello, viene mandato in output il contenuto dell'elemento, in sostanza è come se fosse presente il comando <xsl:value-of select="."/>[166].

Riprendendo l'analisi del nostro foglio di stile incontriamo i modelli per gli elementi <title> ed <author> del <titleStmt> del <fileDesc>:

<xsl:template match="fileDesc/titleStmt/title">
<p><b>Titolo dell'Opera</b>: &#160;<xsl:apply-templates/></p>
</xsl:template>
<xsl:template match="fileDesc/titleStmt/author">
<p><b>Autore</b>:  <xsl:apply-templates/></p>
</xsl:template>

come vediamo questi template per ognuno dei due elementi creano un paragrafo (delimitato dai tag <p>...</p>) poi scrivono del testo, rispettivamente "Titolo dell'opera" ed "Autore", racchiudendolo dentro tag <b>[167] in modo che venga reso in grassetto nell'output HTML ed infine invocano eventuali altri modelli mediante <xsl:apply-templates/>, tuttavia non essendovi modelli definiti per i figli di questi elementi interviene il foglio di stile di default che manda in output il contenuto del nodo corrente.

La medesima impostazione dei modelli appena illustrati la ritroviamo nei template definiti per gli altri elementi dell'Header TEI presenti nel resto del foglio di stile, di seguito, pertanto, descriveremo soltanto quei modelli che in qualche modo si discostano da questa organizzazione di base.

Hanno richiesto una programmazione leggermente diversa i template per le dichiarazioni di responsabilità, che nel sorgente XML sono racchiuse dentro il tag <respStmt>. Si rammenterà che dentro questo marcatore il ruolo ed il nome dei responsabili dell'edizione elettronica vengono indicati per mezzo della coppia di tag <resp> e <name>, il primo contenente un'espressione che descrive per esteso la natura della responsabilità, il secondo il nome del responsabile. Nell'Header del file XML di Baltico queste coppie di elementi ricorrono due volte, la prima per registrare la responsabilità della digitalizzazione e codifica nella persona di Salvatore Salzillo, la seconda invece per la dichiarazione di responsabilità della supervisione nella figura della prof. Lucrezia Lorenzini. Nell'output HTML desideravamo che ognuna delle due dichiarazioni di responsabilità (ossia il contenuto dei due elementi <resp> e <name>) fosse inserita dentro un paragrafo distinto, tuttavia non essendo, dentro <respStmt>, racchiuse le coppie di tag <resp> e <name> dentro un ulteriore elemento contenitore[168], siamo dovuti ricorrere, per così dire, ad un espediente per l'ottenimento di questo tipo di struttura HTML. Riportiamo di seguito il codice dei tre modelli in questione:

<xsl:template match="fileDesc/titleStmt/respStmt">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="fileDesc/titleStmt/respStmt/resp">
<xsl:text disable-output-escaping="yes"> <p></xsl:text>
<b><xsl:apply-templates/></b>: &#160;
</xsl:template>
<xsl:template match="fileDesc/titleStmt/respStmt/name">
<xsl:apply-templates/>
<xsl:text disable-output-escaping="yes"> </p></xsl:text>
</xsl:template>

Il modello del primo elemento <respStmt>[169] si limita ad invocare i modelli degli elementi figli; il secondo modello, per l'elemento <resp>, prima manda in output la sequenza di caratteri <p>, che sappiamo corrispondere al tag HTML di apertura paragrafo, grazie all'espressione:

<xsl:text disable-output-escaping="yes"><p></xsl:text>[170]

successivamente mediante <xsl:apply-templates/> scrive nell'output il valore dell'elemento contesto (ossia <resp>) racchiudendolo dentro tag <b>...</b> e facendolo seguire dal segno di due punti ed uno spazio bianco.

Il template dell'elemento <name> invece subito dopo aver trasmesso nell'output il proprio valore scrive il tag HTML di chiusura paragrafo </p> sempre grazie all'espressione:

<xsl:text disable-output-escaping="yes"></p></xsl:text>.

Grazie alla tecnica appena illustrata siamo riusciti ad aprire il paragrafo HTML prima di scrivere il valore del tag <resp> ed a chiuderlo subito dopo che nell'output si è inserito il valore di <name>, ottenendo così il risultato da noi voluto di divisione in paragrafi separati delle dichiarazioni di responsabilità[171]. Mostriamo di seguito la porzione di codice HTML prodotto dai modelli appena illustrati:

<p><b>Digitalizzazione e codifica elettronica a cura di</b>: &nbsp;[172] Salvatore Salzillo</p>
<p><b>Supervisione</b>: &nbsp; prof. Lucrezia Lorenzini </p>

Precisiamo che abbiamo adottato il comando <xsl:text disable-output-escaping="yes"> per creare i paragrafi esclusivamente per mantenere la "buona formazione"[173] XML del nostro foglio di stile XSLT.

Anche l'elemento <availability> ha richiesto una cura particolare nella programmazione del suo template. Il lettore forse ricorderà la nostra decisione di adoperare le tecniche di firma digitale per l'attestazione della provenienza dell'originalità e dell'integrità dei sorgenti XML di opere codificate elettronicamente e rammenterà probabilmente la decisione di inserire la chiave pubblica del codificatore all'interno del file di Baltico, che appunto è stata posta nell'Header all'interno del tag <availability>. Avendo noi preferito non inserire nell'output HTML dell'Header, sotto forma di testo, il codice della chiave pubblica (cosa comunque possibile) così come fatto nel file XML, ma piuttosto come collegamento ad un file esterno, abbiamo creato due modelli, il cui codice riportiamo di seguito, uno per l'elemento <availability> ed uno per il suo ultimo paragrafo:

<xsl:template match="publicationStmt/availability">
<p><b>Copyright</b>:  <xsl:apply-templates/><br/>
<a href="chiave_codificatore.asc">Download chiave pubblica per la verifica della firma digitale</a>
</p>
</xsl:template>
<xsl:template match="availability/p[position() = last()]"/>

Il primo modello, sulla scorta del comportamento degli altri template, invoca mediante <xsl:apply-templates/> i modelli per i figli dell'elemento contesto <availability>, che nello specifico nel nostro file XML è costituito da due paragrafi (<p>), il primo contenente le dichiarazioni di disponibilità del documento ed il secondo la chiave pubblica del codificatore. Per il primo paragrafo il processore non trova corrispondenza con alcun modello pertanto sulla base del foglio di stile di default manda in output il contenuto del primo elemento <p>, tuttavia per il secondo <p> è stato precisato un modello: <xsl:template match="availability/p[position() = last()]"/>, questo template trova corrispondenza con l'ultimo paragrafo (<p>) di <availability>, come si può notare non ha alcun contenuto, infatti questo template indica al processore di non compiere alcuna azione allorché l'elaborazione giunge all'elemento selezionato, in pratica ordina di ignorarlo. L'espressione XPath "availability/p[position() = last()]" selezionerà sempre l'ultimo paragrafo di <availability>, indipendentemente dal numero di paragrafi presenti nell'elemento, pertanto il codificatore per escludere dall'elaborazione il paragrafo con la sua chiave pubblica, dovrà soltanto aver cura di porla nell'ultimo paragrafo[174].

Un template analogo a questo appena illustrato è quello posto alla fine del documento con cui si fa in modo che l'elaborazione si limiti al TEI Header e non proceda nel resto del file XML: <xsl:template match="text"/>.

Nella trasformazione dei documenti XML il linguaggio XSLT dà anche la possibilità di compiere delle elaborazioni condizionali sui dati, ossia consente di stabilire che determinate operazioni vengano compiute soltanto al verificarsi di specifiche condizioni. Anche nel foglio di stile che stiamo esaminando è stata inserita una semplice elaborazione condizionale, infatti il modello per tutti i figli dell'elemento <bibl>[175], contenente la citazione bibliografica del testo fonte all'interno del diario di codifica (<revisionDesc>), esegue comandi differenti sulla base del verificarsi di certe condizioni, di seguito ne riportiamo il codice:

<xsl:template match="revisionDesc/change/item/bibl/*">
<xsl:choose>
<xsl:when test="position() = 1">: &#160;<xsl:apply-templates/>,</xsl:when>
<xsl:when test="position() != last()"> &#160;<xsl:apply-templates/>,</xsl:when>
<xsl:otherwise> &#160;<xsl:apply-templates/>.</xsl:otherwise>
</xsl:choose>
</xsl:template>

Come si può rilevare l'espressione XPath seleziona tutti gli elementi[176] figli di <bibl>, il template mediante il comando <xsl:choose> sulla base del verificarsi di condizioni diverse prescrive al processore di eseguire azioni differenti; nello specifico quando il nodo elaborato è il primo (la condizione è data dall'espressione test="position() = 1") il processore scrive nell'output il carattere due punti e successivamente due spazi bianchi[177], dopo aver mandato in output il contenuto dell'elemento (<xsl:apply-templates/>) scrive una virgola. Allorché invece l'elemento selezionato non è l'ultimo (test="position() != last()"), analogamente al comportamento precedente scrive due spazi bianchi, in questo caso non preceduti dai due punti, ed in fine dopo il contenuto dell'elemento pone una virgola. L'ultimo comportamento (<xsl:otherwise>) stabilisce che in tutti gli altri casi, ed in pratica soltanto quando l'elemento selezionato è l'ultimo, si mandino in output due spazi bianchi ed il contenuto dell'elemento seguito dal punto. Nel file XML di Baltico così si presenta la citazione bibliografica del testo di riferimento contenuta nell'elemento deputato alla descrizione della revisione:

<bibl>
<author>Matteo Collura</author>
<title>Baltico : un'epopea siciliana</title>
<publisher>Luigi Reverdito Editore</publisher>
<date>1988</date>
</bibl>

Ecco, invece, come tale citazione viene riprodotta nel browser dopo la trasformazione con XSLT:


digitalizzazione e correzione del testo in base alla edizione di riferimento[178]: Matteo Collura, Baltico: un'epopea siciliana, Luigi Reverdito Editore, 1988.


Sebbene la finalità del foglio di stile appena descritto sia prevalentemente la dimostrazione delle potenzialità di XSLT nel trattamento dei testi, piuttosto che un suo uso pratico, ci teniamo a sottolineare come con pochi eventuali aggiustamenti[179] sarebbe possibile applicare il nostro foglio di stile ad innumerevoli testi codificati secondo le regole della TEI-Lite, è questo infatti uno dei pregi principali della codifica dichiarativa dei testi. Concludendo possiamo dire che in queste pagine abbiamo dato una prima dimostrazione pratica di alcune delle potenzialità che si hanno nella rappresentazione di dati identificati funzionalmente mediante una marcatura di tipo dichiarativo. Come si ricorderà al momento della codifica XML-TEI abbiamo racchiuso le varie porzioni di testo entro tag che hanno specificato cosa identificassero, cosa fossero, entro una data struttura funzionale i diversi blocchi testuali. Potremmo dire che con la codifica abbiamo espresso cosa un tag contenesse e solo ora grazie ad XSLT stabiliamo come quel contenuto vada rappresentato; ma la grande novità sta nel fatto che il contenuto non è più vincolato ad un'unica rappresentazione è bensì pronto ad infinite raffigurazioni atte a soddisfare le esigenze più diverse; nelle pagine che seguiranno vedremo come partendo sempre dallo stesso nucleo di dati, pur nel nostro piccolo, siamo stati in grado di produrre output in formati rappresentazionali per gli scopi e gli usi più vari.


[161] Html è stato ideato per esser fruito principalmente a video, pertanto in sede di stampa abbiamo cercato di fornire una riproduzione il più fedele possibile dell'output prodotto.
[162] In Xpath la radice di un documento XML è rappresentata dallo slash (/).
[163] Si sta ovviamente facendo riferimento al file XML di Baltico.
[164] Quello qui illustrato è un percorso di posizione di tipo assoluto, ossia viene descritto tutto il percorso da seguire lungo l'albero del documento a partire dall'elemento radice, il più delle volte tuttavia si farà riferimento a percorsi di posizione relativi al nodo contesto dell'elaborazione.
[165] Si tenga presente che nella trattazione i termini modello e template vengono utilizzati come sinonimi.
[166] In XPath il punto (.) è l'espressione che fa riferimento al nodo contesto corrente.
[167] In questo documento si è fatto ricorso in più casi dei marcatori <b> per il grassetto ed <i> per il corsivo, l'uso di questi tag nell'HTML 4 è deprecato dal W3c Consortium a favore dei fogli di stile CSS, tuttavia in questa sede abbiamo preferito adoperarli al fine di non gravare eccessivamente la leggibilità del sorgente XSLT con ulteriori elementi ben più prolissi. Nostro obiettivo primario è stato l'esplicazione dei meccanismi di trasformazione di XSL più che la produzione di un output particolarmente efficiente.
[168] Applicare la consueta sintassi <p><xsl:apply-templates/></p> al modello di <respStmt> avrebbe fatto si che nel file HTML di output si producesse un unico paragrafo con il contenuto delle due dichiarazioni di responsabilità, non essendo queste distinte da un ulteriore elemento contenitore, che avrebbe potuto quindi permettere la creazione di un modello per le singole dichiarazioni di responsabilità.
[169] Nella sintassi XPath per l'invocazione di questi modelli abbiamo adoperato un percorso di posizione che parte da <fileDesc> al fine di evitare ambiguità nella programmazione, infatti la DTD TEI prevede, anche in contesti diversi da questi al momento da noi descritti, la presenza di tag dal nome <respStmt> <resp> e <name>. Nella pratica con tali percorsi di posizione si è specificato che i modelli in questione devono essere applicati esclusivamente agli elementi <respStmt> (e ai suoi figli <resp> e <name>) figli di <titleStmt> e di <fileDesc>.
[170] L'elemento <xsl:text> viene usato per inserire testo nell'output. L'attributo disable-output-escaping determina se il valore debba essere sottoposto o meno ad "escape" nell'output, ossia se le entità XML debbano essere sostituite con le rispettive entità del formato di output o meno. Nel nostro caso le due entità XML "&lt;" ed "&gt;" nel file HTML non vengono rimpiazzate dalle corrispettive entità HTML (che per altro hanno lo stesso nome) ma vengono mandate in output così come sono, ovvero come i due caratteri "<" e ">".
[171] È bene precisare che affinché questi modelli producano il risultato da noi illustrato è indispensabile che nel sorgente XML le dichiarazioni di responsabilità si presentino sempre come sequenze di elementi <resp> e <name>, ordine che non è espressamente specificato nella DTD TEI e che quindi è compito del codificatore eventualmente rispettare.
[172] Si noti come non essendo stato impostato per l'entità numerica XML &#160; lo sganciamento dell'output (come invece fatto per produrre i tag di paragrafo) questa venga sostituita nell'output dalla rispettiva entità HTML &nbsp;.
[173] Si ricordi che un file XSLT è anche una istanza XML e pertanto deve essere almeno "ben formata" prima ancora che "valida" (i concetti di buona formazione e validità XML sono stati chiariti nella prima parte di questa relazione). Se avessimo scritto semplicemente <p> nel primo modello e </p> nel secondo, avremmo compromesso la buona formazione del file in quanto avremmo avuto dei marcatori orfani o del tag di chiusura o di quello di apertura.
[174] La coppia di modelli definiti per <availability> richiede che dentro l'elemento siano presenti almeno due paragrafi, infatti se vi fosse un solo <p> questo sarebbe sia il primo sia l'ultimo, e quindi attiverebbe il template che blocca l'elaborazione; pertanto ove il codificatore decidesse di non adottare la firma digitale del documento oppure di racchiudere tutto dentro un unico paragrafo, dovrebbe provvedere o ad inserire un secondo paragrafo, anche vuoto, oppure ad eliminare il template per l'ultimo <p> dal foglio di stile.
[175] Tale elemento contiene una citazione bibliografica non strutturata, i cui componenti possono, o meno, essere marcati esplicitamente.
[176] L'asterisco [*] è un carattere jolly nella sintassi XPath che consente la selezione di tutti i nodi di elemento nel contesto corrente.
[177] Il secondo spazio bianco è definito mediante un'entità numerica XML che poi nell'output sarà sostituita dalla corrispondente entità HTML.
[178] L'output prodotto dal modello appena descritto inizia effettivamente dopo la parola riferimento.
[179] Il foglio appena illustrato è stato programmato sulla base del file XML di Baltico, per essere veramente universale sarebbe necessario creare dei templates per quegli elementi che pur previsti dalla DTD TEI-Lite non sono stati adoperati nella codifica del libro di Collura.
<DigiSic />
[ AccessKey: Top=T Precedente=Z Successiva=C Indice=X?]