Pagina Principale del sito Come contattarci e copyright Iscriviti ai forum e alla newsletter Agenda degli eventi I temi trattati Archivio delle prime pagine

Il Manuale

     

Segue
Parte 6. I linguaggi di codifica

 indietro

continua

6.2 SGML – Standard Generalized Markup Language [2]

Tra i linguaggi che impiegano una codifica di tipo dichiarativo, lo Standard Generalized Markup Language (l’SGML) è sicuramente il più noto e quello che ha assunto una peculiare preminenza, divenendo lo standard ISO ufficiale per la creazione di testi in MRF. L’SGML è oltretutto il linguaggio dotato di maggiore influenza nell’ambito del settore umanistico, grazie soprattutto alle DTD (Document Type Definition) prodotte dalla TEI (Text Encoding Initiative).

SGML nasce, essenzialmente, con l’obiettivo di imporsi come schema linguistico standard a livello internazionale nell’ambito della codifica di fonti testuali o documentarie e superare quindi quella moltitudine di sistemi di codifica sviluppatisi negli ultimi vent’anni; obiettivo, questo, primario per consentire quell’interscambio di documenti in formato elettronico tra ambienti hardware e software differenti e garantirne quindi l’assoluta portabilità.

Scendendo nello specifico del funzionamento dell’SGML, diremo che questo linguaggio si basa su di un markup generico orientato alla descrizione della struttura logica di un testo piuttosto che della sua forma grafica [3] . L’SGML si fonda sull’idea che un documento sia dotato di una organizzazione astratta o logica definibile tramite una configurazione strutturale rigidamente gerarchica. La struttura astratta di un qualsiasi documento corrisponde cioè ad un grafo ad albero in cui: a ciascun nodo dell’albero corrisponde un elemento (e cioè ogni partizione logica della fonte); ai rami uscenti da ogni nodo corrispondono le relazioni [4] tra elementi e sotto-elementi ad un dato livello; alle foglie corrispondono gli elementi finali non strutturali (generalmente i caratteri del testo) [5] .  

Fondandosi su di una codifica di tipo dichiarativo, l’SGML consente di definire (o di dichiarare), in modo assolutamente personale ed autonomo, un insieme di marcatori (tags) che adempiano al compito primario dello standard, che consentano cioè di fare il markup della struttura logica di un testo. Questo gruppo di marcatori, più precisamente, individua una classe di documenti testuali che presentano le medesime caratteristiche strutturali [6] .

Tali marcatori si presentano sottoforma di stringhe di caratteri ASCII; il markup viene aggiunto all’inizio e alla fine di ogni partizione logica del testo, e cioè di ogni oggetto informazionale dotato di una propria funzione logica, vale a dire di ogni elemento.

Ogni elemento testuale viene individuato e descritto tramite ricorso ad un nome convenzionale, scelto dal codificatore (p.e. p per paragrafo, n per nota ecc.) e quest’ultimo viene racchiuso tra due delimitatori posti all’inizio dell’elemento e da altri due delimitatori posti alla fine dello stesso; l’elemento viene quindi rappresentato tramite una tag di apertura ed una di chiusura. Per le tag, la sintassi di SGML ci suggerisce una forma grafica simbolica che possiamo decidere di rispettare o meno (parentesi ad angolo, o delimitatori, racchiudenti il nome dell’elemento, cioè l’identificatore dell’elemento, come tag d’apertura: <e>; stesse parentesi ma con l’identificatore preceduto dal simbolo / per la tag di chiusura: </e>).

Più esattamente diremo che SGML è dotato di una sintassi astratta (abstract syntax), che spiega come operare il markup di un documento testuale; esistono cioè regole che istruiscono l’utente su come aggiungere i marcatori ad un documento [7] , senza però considerare le specifiche stringhe di caratteri impiegate a tal fine: l’SGML non costringe cioè all’uso di particolari caratteri in qualità di delimitatori, semplicemente spiega solo i ruoli dei vari delimitatori. E’ la sintassi concreta (concrete syntax) che attribuisce a quei delimitatori eventuali simboli impiegabili a tale scopo. Lo standard fornisce in questo caso un aiuto offrendo un esempio di sintassi concreta, detta sintassi concreta di riferimento (reference concrete syntax); essa lega la sintassi astratta a specifici caratteri [8] . Vengono inoltre suggeriti i criteri per definire la sintassi concreta delle varianti (variant concrete syntax), che consente di modificare a proprio piacimento quei simboli individuati come delimitatori nella sintassi concreta di riferimento [9]

Per questo è lecito affermare che l’SGML più che un linguaggio è un metalinguaggio che fornisce esclusivamente le regole necessarie all’edificazione di infiniti linguaggi di codifica di testi. Ciascuno di tali linguaggi si configura come un peculiare modello di testo o, più esattamente, di un insieme di testi, elaborato sulla base delle esigenze del trattamento automatizzato cui si intende sottoporre la fonte e quindi in base a quello specifico punto di vista assunto sull’oggetto di analisi. 

Essendo lo scopo principale di ogni operazione di trasposizione di un testo in MRF il garantire la massima portabilità dell’oggetto creato, si rivela necessaria l’assoluta condivisione del codice, con cui è stata effettuata l’operazione di codifica del testo, da parte di tutti gli utenti. Questa prerogativa viene appunto raggiunta dichiarando esplicitamente tutti gli elementi che sono presenti in quello specifico testo, dai caratteri alfabetici ai marcatori impiegati all’atto della codifica, e le combinazioni tra i suddetti elementi.

Talora però lo stesso codice di base, cioè il character set, non è condiviso fra applicazioni diverse. Ipoteticamente sarebbe possibile progettare una tabella alternativa all’ASCII standard [10] , ma è sicuramente più conveniente limitarsi ad indicare eventuali caratteri (entity) che non fanno parte dell’ASCII, ma che verranno impiegati all’atto della codifica; caratteri che possono essere raffigurati pur non comparendo su di una normale tastiera ASCII. Sarà sufficiente scrivere l’entità di riferimento facendola precedere dall’e commerciale (&) e seguire dal punto e virgola (;) per istruire il programma a riconoscervi un’entità [11] .

Per entità si intende precisamente ogni sequenza arbitraria di bit, da una stringa di caratteri ad un intero file, indipendentemente dall’estensione dell’oggetto cui l’entità fa riferimento. E’ questa la possibilità offerta da SGML di incorporare nel documento codificato ogni tipo di file. La capacità di rappresentare entità attraverso una stringa di caratteri ASCII per descrivere un simbolo può anche essere utilizzata in altro modo, ossia per rappresentare informazioni poste altrove. Questo risulta utile, per esempio, per fare riferimento a parti esistenti del documento, ad una tabella o ad una figura, cioè per incorporare altri file all’interno del documento codificato. La stringa di caratteri impiegata in qualità di entità potrebbe anche essere un’abbreviazione che verrebbe estesa per intero in fase di output. Ci si potrebbe allora limitare alla sola abbreviazione descrivendola come entità (per esempio &SGML;), da sciogliere poi in fase di visualizzazione del testo (con Standard Generalized Markup Language).

L’elenco delle entity utilizzate sarà contenuto in un’apposita tabella, esplicitamente dichiarata. Tale tabella prende il nome di DTD, Document Type Definition. In essa si presenterà, oltre all’elenco delle entità impiegate, la struttura astratta del testo, specificata definendo gli elementi che la costituiscono, eventuali attributi, le relazioni intercorrenti tra gli elementi e si assegnerà ad ogni elemento un singolo marcatore.

Come premesso, lo standard non fornisce alcuna prescrizione relativamente alla tipologia, alla quantità o al nome dei marcatori, ma si occupa esclusivamente di fornire precise regole sintattiche, necessarie a definire un insieme di marcatori all’interno di una DTD: è attraverso tali regole che sarà consentita la definizione di un linguaggio di codifica adeguato per una determinata classe di documenti testuali.  

Più precisamente nella DTD sono elencati e definiti tutti gli oggetti necessari all’elaborazione di un adeguato linguaggio di codifica:

i marcatori per gli elementi presenti nel testo (elements) o presenti in una certa classe di documenti (p.e. testo t, introduzione i, capitolo c, paragrafo p, nota n, ecc.);

la descrizione del contenuto di ogni elemento (content model), quindi quali altri elementi possono apparire all’interno di un altro elemento, con quale ordine e con quale frequenza (un paragrafo potrà contenere parole e le parole potranno contenere lettere....);

i marcatori per gli attributi (attributes) assegnabili ad un qualsivoglia elemento (un titolo potrà essere caratterizzato dalla propria resa grafica [p.e. grassetto corsivo], una nota dalla sua posizione all’interno della pagina);

i simboli per le entità (entity) che possono occorrere all’interno del documento e che possono rappresentare caratteri non esistenti nel code set impiegato alla codifica oppure che si riferiscono a file esterni o ancora che prevedono lo scioglimento di una stringa del docuemento.

E’ chiaro che è possibile sviluppare una propria nuova DTD atta a descrivere quel peculiare tipo di documento che si intende codificare, ma è certamente più economico, e ovviamente meno difficoltoso, fare riferimento ad una DTD già esistente e quindi pubblicamente disponibile. In entrambe i casi comunque imprescindibile è una perfetta conoscenza della sintassi e delle regole che l’SGML prescrive per la descrizione della struttura di un documento testuale.

E’ la DTD quindi uno degli elementi fondanti di SGML, ed è la DTD che raccoglie la maggior parte delle dichiarazioni di markup previste dallo standard. Nulla che non sia stato esplicitamente dichiarato può essere incluso in un documento. E’ dunque da tenere in considerazione che le cosiddette markup declarations sono tredici, ma non tutte rientrano nella DTD; tra di esse, assolutamente essenziale è la dichiarazione SGML.

Per questo è essenziale sottolineare che un documento SGML, e cioè un testo codificato in SGML, non è semplicemente un oggetto costituito da partizioni logiche descritte dai tag introdotti, ma è un oggetto diviso in tre parti distinte: la dichiarazione SGML, la DTD e l’esemplare del documento.

E’ la dichiarazione SGML (SGML declaration) che raccoglie l’informazione relativa al set di caratteri impiegato (nella DTD e, ovviamente nel documento testuale) e alla sintassi concreta. Ogni sistema sul quale gira SGML possiede una dichiarazione SGML, assolutamente indispensabile per conoscere i parametri impiegati all’atto della codifica.

Per ciò che inerisce l’uso del set di caratteri, SGML propone, nella sintassi concreta di riferimento, l’ISO 646 [12] , comune nel mondo anglofono. Questo standard è sufficiente per molteplici impieghi. Tuttavia viene considerato insufficiente nella maggior parte dei paesi che usano lingue differenti dall’inglese, in quanto potrebbero esigere non solo lettere accentate, ma anche alfabeti completamente diversi. Viene quindi fornita l’opportunità di specificare nella dichiarazione SGML un altro set di caratteri che si intende utilizzare. E’ sicuramente significativo optare infatti per l’altro standard ISO, l’8859-1, ASCII a 8 bit, noto come ISO-Latin, dove il numero 1 si riferisce ai caratteri propri dell’Europa occidentale. Optando per questo character set la necessità di ricorrere a riferimenti di entità per le lettere accentate viene a cadere, in quanto esse fanno parte del set ISO-Latin.

Se però, come rilevato, l’esigenza di rappresentare caratteri o simboli speciali estranei si verifica di rado, è consigliabile limitarsi ad impiegare i riferimenti di entità (dichiarati nella DTD), senza affidarsi ad un set di caratteri differente.

Per ciò che inerisce la sintassi concreta, diremo che lo standard ISO prescrive che nella dichiarazione SGML, con riferimento alla sintassi astratta, si rendano noti gli effettivi caratteri impiegati per i nomi e le parole chiave, impiegati per indicare, ad esempio, di aprire la tag iniziale (start tag open - STAGO: <), di chiudere la tag iniziale (tag close - TAGC: >) o di aprire la tag finale (end tag open - ETAGO: </). Per aiutare l’applicazione di SGML, e fare in modo che l’utenza impiegasse essenzialmente la medesima sintassi concreta, lo standard ha previsto una sorta di sintassi concreta di default, definita in ISO 8879, che prende il nome di sintassi concreta di riferimento [13] .

Sarà poi nella DTD che verranno specificati i nomi dei vari elementi, e cioè gli identificatori, eventuali loro attributi, le relazioni tra gli elementi, i riferimenti di entità e quindi tutte le strutture necessarie al fine di codificare il documento.

Ogni DTD, o il riferimento alla DTD, sarà poi inserita nella dichiarazione del tipo di documento (la document type declaration o doctype declaration, da non confondere con la stessa DTD, che è invece l’abbreviazione per document type definition) che ci fornirà un’informazione essenziale e cioè con quale tipo di documento stiamo lavorando.

Per concludere, l’esemplare del documento (document instance) è il documento vero e proprio che contiene il testo nella sua globalità e i riferimenti alla DTD.

Ogni file di testo comincerà quindi dichiarando quale tipo di documento contiene e a quale DTD fa riferimento. Questo verrà fatto in un’apposita zona dell’intestazione del file, chiamata appunto doctype declaration, che costituisce la prima istruzione presente in un file SGML. Senza questa dichiarazione, i programmi non saprebbero quali tag sono impiegati nel documento e quali regole sintattiche in esso vigono, e quindi non sarebbero in grado di leggerlo.

La DTD di riferimento è generalmente esterna rispetto al file codificato ma potrebbe anche essere inserita all’interno dello stesso file, anche se risulta sicuramente più economico conservarla a parte. Quando la DTD è  interna, la doctype declaration riporta solo il nome della DTD e le singole dichiarazioni all’interno, nell’internal DTD subset, usato soprattutto quando solo alcune dichiarazioni vogliono essere specificate o quando la DTD è breve. La forma è la seguente:

<!DOCTYPE  nome_DTD
[ dichiarazione1
   dichiarazione2
    ....................
 ]>

Quando invece la DTD è interna, la doctype declaration può presentarsi in due forme differenti:

<!DOCTYPE  novella.dtd SYSTEM “c:/sgml/testi/novella.dtd”>

         Dove <! (se ovviamente ci si conforma alla sintassi concreta di riferimento) è il simbolo di apertura della doctype declaration; DOCTYPE è la parola chiave che indica il tipo di dichiarazione che si sta esplicitando; novella è il nome della DTD; SYSTEM è la parola chiave che indica che la DTD è esterna rispetto al file sul quale si sta lavorando (porla esternamente è semplicemente una scelta dettata da un criterio di economia) ma si trova nello stesso computer; c:/sgml/testi/novella.dtd è il percorso che consente di rintracciare il file in cui è contenuta la menzionata DTD (novella.dtd); > è il simbolo che indica la chiusura della dichiarazione.

   <!DOCTYPE TEI.2 PUBLIC "-//TEI//DTD TEI Lite 1.6//EN"

 Dove, a differenza della precedente, la DTD non deve essere ricercata all’interno di un preciso percorso ma è richiamata tramite l’indicazione di un identificatore pubblico (PUBLIC IDENTIFIER) comunemente noto; ovviamente la DTD potrà essere conservata in una qualsiasi zona esterna rispetto al file.

Dopo questa dichiarazione seguirà una dettagliata descrizione del documento di cui si sta realizzando la versione elettronica, realizzata seguendo le specifiche regole sintattiche previste dallo standard e conformandosi a quanto esplicitato nella DTD.

L’SGML si configura dunque come un potente strumento per progettare linguaggi di codifica testuale completi e formalmente consistenti, in grado di supportare numerose operazioni di text processing pur mantenendo, attraverso il riferimento ad un dato document type, di cui ogni singolo documento in formato elettronico rappresenta un esemplare, la massima portabilità.

 indietro

continua

 




 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Formazione e Didattica Il Bollettino del '900 Informatica Umanistica I percorsi di Griselda Online

[2] Il testo ufficiale dello standard ISO, commentato dallo stesso inventore del linguaggio, è in C.F. Goldfarb, The SGML Handbook, Oxford, Oxford University Press, 1990. I  testi impiegati come consultazione sono: E. Van Herwijnen, Practical SGML, Boston-Dordrecht-London, Kluwer Academic Publishers, 1994; J. M. Smith, SGML e standard relativi, Bologna, Clueb, 1994, traduz.; la SGML/XML Web Page di Robin Cover, reperibile via web, all’indirizzo
http://www.oasis-
open.org/cover/
sgml-xml.html
.

[3] E’ più corretto affermare che l’SGML riconosce sia la struttura logica che quella di layout di un documento, entrambe le quali possono essere associate allo stesso contenuto informativo. L’SGML fa riferimento, essenzialmente, alla struttura logica del testo e, solitamente, non a quella di layout, per la quale vi sono altri standards collegati. Tuttavia l’SGML offre la possibilità di legare una struttura logica ad una o più strutture di layout, sia che l’informazione di legame si trovi in memoria assieme al documento, sia che si trovi ad esso associata per un eventuale futuro output.

Ciò che l’SGML  consente è quindi solo il collegamento della struttura logica alla/e struttura/e di layout.

[4] Le relazioni tra elementi possono essere relazioni di inclusione, di ordine e di ricorrenza: per esempio, relativamente ad un documento testuale, potremmo asserire che un elemento paragrafo è incluso in un elemento capitolo e può ricorrere molteplici volte, oppure che un elemento introduzione deve precedere un elemento capitolo, ecc.

[5] Un esempio di albero gerarchico per un semplice testo è: nodo radice corrispondente al testo stesso; testo composto da un’eventuale introduzione, seguita da un certo numero di capitoli; a loro volta capitoli composti, ognuno, da un titolo, seguito da uno o più paragrafi; nodi terminali, o foglie, contenenti stringhe di caratteri costituenti il testo stesso.

[6] Come già rilevato, tutti i testi hanno, per esempio, un’introduzione e una serie di capitoli; i capitoli hanno tutti un titolo ed una serie di paragrafi ecc.

[7] Si dovranno porre una tag iniziale e una tag finale ad ogni elemento testuale; ogni tag sarà costituita da un nome convenzionale identificante l’elemento racchiuso tra due delimitatori.

[8] Essa prevede di impiegare <e> come tag iniziale ed </e> come tag finale per ogni elemento.

[9] Essa permette di attribuire [e] come delimitatori della tag iniziale (al posto delle parentesi ad angolo) ed [/e] per la tag finale.

[10] In questo risiede uno dei punti forza dell’SGML e cioè la sostanziale indipendenza dalle lingue: grazie a questa possibilità offerta dallo standard, l’SGML può essere impiegato anche per lingue non derivanti dal latino, le quali, come già in precedenza rilevato, non trovano riscontro nella tabella ASCII. Lo standard potrà essere quindi agevolmente utilizzato, per esempio,  in Grecia, in Arabia o in Polonia.

[11] Supponiamo di voler rappresentare la già citata e maiuscola accentata grave (E’). Chiaramente non è presente tra i primi 128 caratteri del codice ASCII, e precisamente nell’ASCII a 7 bit, cioè quelli più agevolmente comprensibili da parte dell’elaboratore. La sintassi che regola la costruzione delle entity in SGML prevede il rispetto di una precisa sintassi che consentirà la rappresentazione di un qualsivoglia carattere. La e commerciale (&) è il segnale di inizio codifica; il punto e virgola (;) quello di fine codifica. Tra i due segnali si dovrà inserire il carattere da codificare (nel nostro esempio la E) affiancato ad una descrizione predefinita della codifica (nel nostro esempio grave). Questo ci consentirà di rappresentare la E’ indicandola con il gruppo &Egrave;.

[12] Il titolo, per esteso, dello standard è ISO 646 Information Processing - ISO 7-Bit Coded Character Set for Information Interchange. Esso corrisponde alle posizioni 0-126 della tavola ASCII.

[13] Quella che, come già descritto, assegna <e> come delimitatori di un tag iniziale ed </e> come delimitatori di una tag finale.

 

  Università degli Studi di Bologna
e ArchetipoLibri
AddThis Social Bookmark Button
Altre informazioni

 

Formazione e Didattica Il Bollettino del '900 Informatica Umanistica I percorsi di Griselda Online

 

 

 

Risorse on line Il Bollettino del '900 Informatica Umanistica I percorsi di Griselda Online Il Glossario di Informatica Umanistica