[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 460.   Introduzione a TEI

TEI (Text encoding initiative), è un sistema di codifica SGML/XML per testi, nato e sviluppato con l'intento di dare la possibilità di trascrivere in forma elettronica, un documento che originariamente è disponibile solo in forma cartacea.

A prima vista non si comprende il significato di questa precisazione, se non si considera lo studio di un testo dal punto di vista linguistico, storico e artistico. Tanto per fare un esempio, TEI prevede anche la possibilità di annotare dove si trovano i salti pagina e le interruzioni di riga, nell'ambito di una certa edizione del documento che viene trascritto.

In generale, TEI potrebbe essere usato per realizzare qualunque tipo di documento elettronico, ma la sua caratteristica lo porta a essere più adatto alla trascrizione di ciò che non nasce in forma elettronica.

Il DTD di TEI prevede una grande quantità di elementi, con scopi molto particolari. Sta comunque a chi lo utilizza (per scrivere un'opera originale o per trascrivere un altro documento), stabilire come analizzare e suddividere le informazioni, in base all'obiettivo che si prefigge con il suo lavoro.

TEI offre anche un sottoinsieme del DTD completo, denominato TEI Lite. In generale i sistemi di composizione basati su TEI potrebbero non essere in grado di gestire tutte le situazioni, pertanto conviene avvicinarsi a questo sistema iniziando dal modello semplificato.

Lo sviluppo di TEI è sostenuto da associazioni letterarie, linguistiche e umanistiche che hanno dato vita a un consorzio: il consorzio TEI.

Questo capitolo offre solo una panoramica superficiale delle caratteristiche di TEI, assieme a qualche piccolo esempio pratico. La documentazione citata alla fine del capitolo può servire per approfondirne lo studio.

460.1   Strumenti per la composizione

In un sistema GNU esistono due modi per comporre un documento scritto secondo il formato XML di TEI: attraverso dei fogli di stile XSLT che permettono di ottenere un file XSL-FO da comporre successivamente, oppure attraverso PassiveTeX (e di conseguenza XMLTeX). In generale, nessuno dei due modi dà risultati perfetti, pertanto conviene considerarli entrambi.

<?xml version="1.0" encoding="UTF-8" ?>
<TEI.2>
    <teiHeader>
        <fileDesc>
            <titleStmt>
                <title>Esempio elementare con TEI</title>
            </titleStmt>
            <publicationStmt>
                <p/>
            </publicationStmt>
            <sourceDesc>
                <p/>
            </sourceDesc>
        </fileDesc>
    </teiHeader>
    <text>
        <body>
            <p>Ciao a tutti!</p>
        </body>
    </text>
</TEI.2>

L'esempio che si vede rappresenta il minimo necessario per scrivere una piccola frase. Supponendo di avere chiamato questo file tei-001.xml, dovrebbe essere possibile ottenere la sua composizione con l'aiuto di PassiveTeX e XMLTeX in questo modo:

latex "&xmltex" tei-001.xml[Invio]

Dal momento che non ci sono riferimenti incrociati, non serve ripetere il procedimento. Eventualmente, si può convertire il file DVI ottenuto in PostScript:

dvips -o tei-001.ps tei-001.dvi[Invio]

In alternativa a questi passaggi si potrebbe generare direttamente un file PDF in questo modo:

pdflatex "&pdfxmltex" tei-001.xml[Invio]

Se invece si vuole percorrere la strada della trasformazione XSLT e della composizione del file XSL-FO che si genera, occorre procurarsi i fogli di stile, dall'indirizzo <http://www.tei-c.org/Stylesheets/teixsl-fo.zip>. I fogli di stile vanno estratti dall'archivio teixsl-fo.zip, oppure prelevati uno per uno seguendo i riferimenti contenuti in questa pagina: <http://www.tei-c.org/Stylesheets/teic/>.

Una volta ottenuti tutti i file che compongono il pacchetto dei fogli di stile per la composizione per la stampa, si può procedere alla trasformazione con strumenti come Xalan (capitolo 451):

xalan -IN tei-001.xml -XSL tei.xsl -OUT tei-001.fo[Invio]

Si dovrebbe ottenere così il file tei-001.fo da rielaborare ulteriormente.

Il lavoro di realizzazione dei fogli di stile XSLT potrebbe essere incompleto, tanto da far sì che Xalan riveli degli errori. Durante le prove fatte per realizzare questo capitolo il file teicommon.xsl, del pacchetto già citato, conteneva un errore relativo alla chiamata di un modello non dichiarato (precisamente si trattava di makeURL). È stato sufficiente circoscrivere con un commento l'elemento xsl:call-template che provocava l'errore per completare la trasformazione in modo corretto.

La composizione del file XSL-FO generato si può ottenere per mezzo di FOP, oppure sempre con PassiveTeX e XMLTeX. Qui si mostra il secondo caso; per l'uso di FOP si può consultare il capitolo 452:

pdflatex "&pdfxmltex" tei-001.fo[Invio]

460.2   Struttura generale di un documento TEI

Un documento TEI è contenuto nell'elemento TEI.2, che si compone necessariamente degli elementi teiHeader e text. A sua volta, l'elemento teiHeader si scompone in altri elementi, parte dei quali sono obbligatori. Il modello seguente si riferisce al minimo della struttura complessiva:

<TEI.2>
    <teiHeader>
        <fileDesc>
            <titleStmt>
                <title>titolo</title>
                [<author>autore</author>]
                ...
                [<editor>editore</editor>]
                ...
            </titleStmt>
            <publicationStmt>
                dichiarazione_relativa_alla_pubblicazione
            </publicationStmt>
            <sourceDesc>
                descrizione_della_fonte
            </sourceDesc>
        </fileDesc>
    </teiHeader>
    <text>
        <body>
            corpo
        </body>
    </text>
</TEI.2>

Il contenuto del documento, circoscritto dall'elemento text, può contenere, oltre all'elemento body, gli elementi front e back, per inserire rispettivamente, qualcosa da mettere all'inizio (come una prefazione) e alla fine (come un'appendice o un indice analitico). Al posto dell'elemento body si può mettere un elemento group, che a sua volta può contenere un elemento text con la sua suddivisione. Queste possibilità vengono solo accennate, ma non si mostrano esempi di questo tipo.

460.2.1   Suddivisione del testo

L'elemento body (così come front e back) può contenere del testo senza suddivisioni, composte per esempio da elementi p (paragrafi, come per HTML), oppure una suddivisione in sezioni, ma forse è più appropriato definirle «divisioni», delineate da elementi div o divn:

<div>
    ...
    <div>
        ...
        <div>
            ...
            ...
        </div>
    </div>
</div>
<div1>
    ...
    <div2>
        ...
        <div3>
            ...
            ...
        </div3>
    </div2>
</div1>

I due modelli sintattici dovrebbero permettere di capire che esiste un modo di usare gli elementi div, annidandoli, lasciando intendere il livello in base all'annidamento, mentre è anche possibile usare elementi divn che devono essere collocati in modo appropriato in base all'annidamento. In pratica, il secondo modo consente di avere un controllo maggiore rispetto agli errori che si possono fare involontariamente. È anche evidente che le due forme di suddivisione non sono miscelabili.

I vari attributi di questi elementi consentono di inserire informazioni che possono tornare utili per descrivere le caratteristiche della divisione, ma in linea di principio non intervengono nel modificare l'aspetto della composizione finale.

Una divisione ha probabilmente un titolo, che si definisce utilizzando l'elemento head prima del testo che si vuole inserire al suo interno:

<div[n]>
    <head>titolo</head>
    contenuto
    [<div[n]>
        ...
    </div[n]>]
</div[n]>

Segue un esempio molto semplice, con l'uso di divisioni non numerate:

<?xml version="1.0" encoding="UTF-8" ?>
<TEI.2>
    <teiHeader>
        <fileDesc>
            <titleStmt>
                <title>Esempio elementare con TEI</title>
            </titleStmt>
            <publicationStmt>
                <p/>
            </publicationStmt>
            <sourceDesc>
                <p/>
            </sourceDesc>
        </fileDesc>
    </teiHeader>
    <text>
        <body>
            <div>
                <head>Sezione bla bla</head>
                <p>Bla bla bla bla</p>
                <div>
                    <head>Sottosezione bla bla</head>
                    <p>Bla bla bla bla</p>
                    <div>
                        <head>Sotto-sottosezione bla bla</head>
                        <p>Bla bla bla bla</p>
                    </div>
                </div>
                <div>
                    <head>Un'altra sottosezione</head>
                    <p>Bla bla bla bla</p>
                </div>
            </div>
        </body>
    </text>
</TEI.2>

Si può osservare il risultato della composizione ottenuta con PassiveTeX e XMLTeX nella figura successiva:

tei-002.xml

460.2.2   Blocchi comuni

Dagli esempi mostrati è già apparso l'uso dell'elemento p, che idealmente rappresenta ciò che viene chiamato normalmente «paragrafo», allo scopo di racchiudere del testo lineare, trasformandolo così in un blocco impaginato.

In generale non c'è molto da aggiungere a proposito di questo elemento, se non avvisare che sono disponibili diversi attributi per qualificare il testo che contiene.

<p>testo_lineare</p>

Negli esempi già mostrati appare anche l'uso di paragrafi vuoti, rappresentati come <p/>, quando il contesto richiede espressamente l'inserimento di un blocco anche quando non si vuole fornire alcuna indicazione.

460.3   Elenchi

Gli elenchi si realizzano con l'elemento list, che contiene normalmente soltanto elementi item. Notoriamente si distinguono diversi tipi di elenchi, in base al fatto che siano puntati, numerati o descrittivi. Questa caratteristica, contrariamente ad altri sistemi SGML/XML si ottiene assegnando il termine appropriate all'attributo type:

<list type="simple"|"bulleted"|"ordered">
    <item>testo_lineare|blocco</item>
    ...
</list>
<list type="gloss">
    <label>etichetta</label> <item>testo_lineare|blocco</item>
    ...
</list>

I due modelli sintattici sono semplificati rispetto alle possibilità, soprattutto per quanto riguarda la disponibilità di altri attributi non indispensabili. Dal confronto, si deve intendere che il secondo modello riguarda gli elenchi descrittivi, dove la componente descrittiva dei punti dell'elenco è contenuta nell'elemento label.

            <div>
                <head>Elenco puntato</head>
                <list type="bulleted">
                    <item>prima voce</item>
                    <item>
                        <p>seconda voce</p>
                    </item>
                    <item>
                        <p>terza voce</p>
                        <p>bla bla bla</p>
                    </item>
                </list>
            </div>
            <div>
                <head>Elenco numerato</head>
                <list type="ordered">
                    <item>prima voce</item>
                    <item>
                        <p>seconda voce</p>
                    </item>
                    <item>
                        <p>terza voce</p>
                        <p>bla bla bla</p>
                    </item>
                </list>
            </div>

L'elenco mostra due elenchi, uno puntato e l'altro numerato, contenuti ognuno in una divisione distinta. Si può osservare il fatto che gli elementi item possono contenere testo lineare o altri blocchi, pertanto si possono realizzare anche dei sottoelenchi. Il risultato della composizione ottenuta con PassiveTeX e XMLTeX appare nella figura successiva:

tei-003.xml

460.4   Tabelle

Le tabelle di TEI, pur essendo evidentemente dei blocchi, devono essere contenute all'interno di un elementi p o simili. Una tabella si compone essenzialmente secondo la sintassi seguente:

<table rows="n_righe" cols="n_colonne">
    <row>
        <cell>contenuto_cella</cell>
        ...
    </row>
    ...
</table>

Naturalmente sono disponibili molti attributi per gli elementi, oltre quelli che sono stati mostrati; inoltre, è possibile inserire anche altri tipi di elementi prima della descrizione delle righe, ma questo tipo di utilizzo non viene mostrato.

Le celle della tabella possono contenere sia testo lineare, sia blocchi; tuttavia, può darsi che il sistema di composizione non sia in grado di gestire celle che contengono testo molto lungo.

            <div>
                <head>Esempio di una tabella</head>

                <p>Bla bla bla bla bla bla bla bla bla bla bla bla bla
                bla bla bla bla bla bla bla bla bla.</p>
                <p>
                <table rows="3" cols="2">
                    <row>
                        <cell>HTML/</cell>
                        <cell>Contiene l'ultima edizione dell'opera in
                        formato HTML, per la consultazione in
                        linea.</cell>
                    </row>
                    <row>
                        <cell>PDF/</cell>
                        <cell>Contiene l'ultima edizione dell'opera in
                        formato PDF, per la consultazione in
                        linea.</cell>
                    </row>
                    <row>
                        <cell>PS/</cell>
                        <cell>Contiene l'ultima edizione dell'opera in
                        formato PostScript, per la consultazione in
                        linea.</cell>
                    </row>
                </table>
                </p>
                <p>Bla bla bla bla bla bla bla bla bla bla bla bla bla
                bla bla bla bla bla bla bla bla bla.</p>
            </div>

L'esempio mostra una divisione che contiene una tabella molto semplice. Alcune celle della tabella contengono un testo molto lungo: dipende dal sistema di composizione effettivo la capacità o meno di impaginarlo correttamente. Nella figura successiva si vede cosa può accadere se ciò non avviene:

tei-004.xml

460.5   Figure

Anche le figure devono essere contenute all'interno di un elementi p o simile. Una figura si compone essenzialmente secondo la sintassi seguente:

<figure [entity="entità_generale"]>
    <figDesc>descrizione_opzionale</figDesc>
</figure>

Una figura, secondo il sistema TEI può anche non essere dichiarata come oggetto grafico, ma semplicemente come indicatore della sua presenza. Pertanto, l'attributo entity che ha lo scopo di fare riferimento al file che contiene l'immagine, è facoltativo. Si osservi che l'elemento figDesc serve a inserire una descrizione che permetta di dare qualche indicazione a chi consulta il documento senza la possibilità di visualizzare l'immagine; pertanto non è da confondere con una didascalia.

L'indicazione del file che contiene l'immagine da visualizzare non avviene nello stesso modo di altri sistemi SGML/XML, perché si fa riferimento al nome di un'entità generale che deve essere dichiarata all'inizio del documento. Si osservi l'esempio seguente, nel quale viene dichiarata l'entità FiguraEsempio, contenente il nome del file da inserire (esempio.jpg), a cui si fa riferimento nell'elemento figure:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE TEI.2 SYSTEM "teixlite.dtd"[
<!ENTITY FiguraEsempio SYSTEM "esempio.jpg" NDATA jpeg>
]>
<TEI.2>
    <teiHeader>
        <fileDesc>
            <titleStmt>
                <title>Esempio elementare con TEI</title>
            </titleStmt>
            <publicationStmt>
                <p/>
            </publicationStmt>
            <sourceDesc>
                <p/>
            </sourceDesc>
        </fileDesc>
    </teiHeader>
    <text>
        <body>
            <div>
                <head>Esempio di una figura</head>
                <p>Bla bla bla bla bla bla bla bla bla bla bla bla bla
                bla bla bla bla bla bla bla bla bla.</p>
                <p>
                <figure entity="FiguraEsempio">
                    <figDesc>Una figura di esempio senza alcun
                    significato.</figDesc>
                </figure>
                </p>
                <p>Bla bla bla bla bla bla bla bla bla bla bla bla bla
                bla bla bla bla bla bla bla bla bla.</p>
            </div>
        </body>
    </text>
</TEI.2>

Come si può osservare, nella dichiarazione dell'entità generale è stato specificato il formato dell'immagine. Sono disponibili le definizioni seguenti per i formati più comuni:

Sigla Formato corrispondente
cgm CGM
png PNG
tiff TIFF
gif GIF
jpeg JPEG

È ancora più importante osservare che il nome dell'entità viene inserito nell'attributo entity senza apparire come macro, ovvero senza la e-commerciale (&) che servirebbe a espanderne il contenuto. Infatti, se così fosse, sarebbe sufficiente mettere il nome del file direttamente.

Si può vedere il risultato della composizione ottenuta attraverso la trasformazione dei fogli di stile XSLT nella figura seguente. Rispetto ad altri esempi che sono stati trasformati con PassiveTeX e XMLTeX, si notano delle informazioni in più.

tei-005.xml

460.6   Forme di evidenziamento

TEI prevede diverse forme di evidenziamento del testo, ma per «evidenziamento» si deve intendere qualcosa che va oltre il puro aspetto visivo della composizione finale, perché lo scopo è quello di descrivere ciò che era in origine. Per esempio, si può delimitare una porzione del testo specificando che si tratta di un corsivo, ma questo è importante soprattutto per sapere che così era nel testo originale che si trascrive, mentre non è sicuro che il sistema di composizione usato renda effettivamente in corsivo il testo.

Gli elementi destinati a contenere testo prevedono un attributo comune, denominato rend (rendition), il cui scopo prevalente è quello di descrivere l'aspetto del carattere tipografico. A questo attributo si possono associare nomi come italic, bold, roman, gothic e tanti altri, ma non sempre il sistema di composizione è in grado di riconoscerli.

Tabella 460.11. Riepilogo di alcuni elementi e attributi utili per descrivere porzioni di testo con caratteristiche o significati particolari.

Sintassi Descrizione
<nome rend="definizione">
L'attributo comune rend permette di dichiarare le caratteristiche tipografiche dell'oggetto delineato dall'elemento.
<emph>testo</emph>
Delinea un testo enfatizzato dal punto di vista linguistico; per stabilire l'aspetto del carattere tipografico si usa l'attributo rend.
<hi>testo</hi>
Delinea un testo enfatizzato dal punto di vista tipografico; per stabilire l'aspetto del carattere tipografico si usa l'attributo rend.
<foreign lang="linguaggio">testo</foreign>
Delinea un testo espresso in un'altra lingua.
<term>testo</term>
Delinea un termine tecnico.
<title>testo</title>
Delinea il titolo di qualcosa.
<q>testo</q>
Delinea una citazione.

460.7   Note

TEI prevede diversi tipi di note (note a margine, note a piè pagina, ecc.), per poter descrivere sia le annotazioni presenti nel testo che si va a trascrivere, sia quelle che potrebbero essere aggiunte in fase di trascrizione. Queste annotazioni si inseriscono con l'elemento note, che si utilizza in un contesto lineare:

<note   place="foot"|"inline"|"left"|"right"|"end"|...
        [resp="author"|"editor"|...]
        [altri_attributi]>
    nota     
</note>

Come si vede, nel modello sintattico si vede anche la possibilità di usare l'attributo resp, con lo scopo di specificare chi ha fatto la nota.

L'esempio seguente mostra la dichiarazione di una nota a piè pagina comune, senza indicazioni particolari:

                <p>Per esempio, /uno/due/tre rappresenta il file (o la
                directory) tre che discende da due, che discende da uno,
                che a sua volta discende dall'origine.<note
                place="foot">Il tipo di barra obliqua che si utilizza
                dipende dal sistema operativo. La barra obliqua normale
                corrisponde al sistema tradizionale.</note></p>

460.8   Riferimenti incrociati e riferimenti esterni

Quando si fanno riferimenti interi al documento, si utilizzano degli elementi che puntano a delle ancore, ovvero delle etichette, dichiarate attraverso un attributo comune alla maggior parte degli altri elementi: id. In mancanza di altro, si possono usare gli elementi anchor e seg per inserire un'etichetta:

<anchor id="etichetta" />
<seg id="etichetta">
    testo
</seg>

Per fare riferimento a queste ancore, si usano gli elementi ref e ptr:

<ptr target="etichetta" />
<ref target="etichetta">
    testo
</ref>

Per fare riferimento a documenti esterni, le cose si complicano, perché occorre dichiarare gli indirizzi all'interno di entità generali, come avviene per i file delle figure:

<xptr doc="entità" />
<xref doc="entità">
    testo
</xref>

L'esempio seguente mostra l'uso di un riferimento interno e di uno esterno; alcune righe sono state omesse:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE TEI.2 SYSTEM "teixlite.dtd"[
<!ENTITY Indirizzo SYSTEM "http://www.brot.dg" NDATA URL>
]>
<TEI.2>
    ...
    ...
    <text>
        <body>
            <div>
                <head id="riferimenti">Riferimenti</head>
                ...
                ...
                <p>Per esempio, all'inizio della sezione <ref
                target="riferimenti">Riferimenti</ref>, si trova una
                spiegazione... bla bla bla bla bla bla bla bla bla bla
                bla.</p>
                ...
                ...
                <p>Il documento tal dei tali si ottiene dall'indirizzo
                <xref doc="Indirizzo">http://www.brot.dg</xref>.</p>
            </div>
        </body>
    </text>
</TEI.2>

460.9   Documentazione tecnica

Quando si scrive documentazione tecnica diventa importante poter rappresentare del testo con un carattere a larghezza uniforme, spesso rispettando le interruzioni di riga. Per questo si usano due elementi in particolare: eg e code:

<code>testo_lineare</code>
<eg>
    testo_lineare
    ...
</eg>

Dal modello sintattico potrebbe non essere chiaro, ma l'elemento eg è quello che rispetta le interruzioni di riga.

Naturalmente, dove appropriato, si possono usare sezioni marcate di tipo CDATA (<![[CDATA[testo_letterale]]>), per poter usare letteralmente alcuni simboli che per SGML e XML hanno significati particolari.

L'esempio seguente riepiloga l'uso di questi due elementi:

                <eg>
                dd             gzip           nisdomainname  tar
                df             hostname       ping           touch
                dmesg          kill           ps             true
                dnsdomainname  ln             pwd            umount
                doexec         login          rm             uname
                domainname     ls             rmdir          vi
                echo           mail           rpm            view
                egrep          mkdir          sed            vim
                ex             mknod          sh             ypdomainname
                false          more           sleep          zcat
                </eg>

                <p>Il comando <code>mknod</code> crea...</p>

460.10   Indici

Come in altri sistemi di composizione SGML o XML, anche con TEI è possibile generare automaticamente degli indici. Si usa per questo l'elemento divGen, che va a collocarsi al posto di un elemento div o div1:

<divGen type="toc"/>

Quello che si vede è il modo per ottenere un indice generale dai titoli delle divisioni. Per ottenere un indice analitico occorre prima inserire degli elementi index nel testo, dove si possono individuare dei termini importanti da annotare nell'indice:

<index  level1="voce"
        [level2="voce_inferiore"
        [level3="voce_inferiore"
        [...]]] />

In pratica, è possibile indicare una voce singola, oppure una voce suddivisa in più livelli. Per ottenere l'indice analitico si usa sempre l'elemento divGen, specificando che si tratta di un indice analitico:

<divGen type="index"/>

L'esempio seguente mostra i due casi. Si osservi che probabilmente gli strumenti di composizione comuni portano a ottenere l'indice generale, ma non quello analitico:

            <divGen type="toc" />
            <div>
                <head>Prima divisione</head>

                <p>I <index level1="transistor" />transistor si dividono
                in due tipi: <index level1="transistor"
                level2="PNP"/>PNP e <index level1="transistor"
                level2="NPN"/>NPN. Bla bla bla bla bla bla bla bla bla
                bla bla bla bla bla bla bla bla bla bla bla bla bla bla
                bla bla bla bla bla bla bla bla bla bla bla bla bla bla
                bla.</p>

            </div>
            <div>
                <head>Seconda divisione</head>

                <p>Bla bla bla bla bla bla bla bla bla bla bla bla bla
                bla bla bla bla bla bla bla bla bla bla bla bla bla bla
                bla bla bla bla bla bla bla bla bla bla bla.</p>
            </div>
            <divGen type="index" n="Index" />

460.11   Riferimenti

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome introduzione_a_tei.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!