Segue
Parte 6. I linguaggi
di codifica
6.2
SGML Standard Generalized Markup
Language [2]
Tra i linguaggi che impiegano
una codifica di tipo dichiarativo, lo Standard
Generalized Markup Language (lSGML)
è sicuramente il più noto e quello che ha
assunto una peculiare preminenza, divenendo
lo standard ISO ufficiale per la creazione
di testi in MRF. LSGML è oltretutto
il linguaggio dotato di maggiore influenza
nellambito del settore umanistico,
grazie soprattutto alle DTD (Document
Type Definition) prodotte dalla TEI
(Text Encoding Initiative).
SGML nasce, essenzialmente,
con lobiettivo di imporsi come schema
linguistico standard a livello internazionale
nellambito della codifica di fonti
testuali o documentarie e superare quindi
quella moltitudine di sistemi di codifica
sviluppatisi negli ultimi ventanni;
obiettivo, questo, primario per consentire
quellinterscambio di documenti in
formato elettronico tra ambienti hardware
e software differenti e garantirne quindi
lassoluta portabilità.
Scendendo nello specifico
del funzionamento dellSGML, 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] . LSGML si fonda sullidea 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 dellalbero 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, lSGML 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 allinizio
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 questultimo viene racchiuso
tra due delimitatori posti allinizio
dellelemento e da altri due delimitatori
posti alla fine dello stesso; lelemento
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 dellelemento,
cioè lidentificatore dellelemento,
come tag dapertura: <e>;
stesse parentesi ma con lidentificatore
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
lutente su come aggiungere i marcatori
ad un documento [7] , senza però considerare
le specifiche stringhe di caratteri impiegate
a tal fine: lSGML non costringe cioè
alluso 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 lSGML più che un linguaggio è
un metalinguaggio che fornisce esclusivamente
le regole necessarie alledificazione
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 sulloggetto
di analisi.
Essendo lo scopo principale
di ogni operazione di trasposizione di un
testo in MRF il garantire la massima portabilità
delloggetto creato, si rivela necessaria
lassoluta condivisione del codice,
con cui è stata effettuata loperazione
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 allatto 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 allASCII standard [10] , ma è sicuramente più
conveniente limitarsi ad indicare eventuali
caratteri (entity) che non fanno
parte dellASCII, ma che verranno impiegati
allatto della codifica; caratteri
che possono essere raffigurati pur non comparendo
su di una normale tastiera ASCII. Sarà sufficiente
scrivere lentità di riferimento facendola
precedere dalle commerciale (&)
e seguire dal punto e virgola (;) per istruire
il programma a riconoscervi unentità
[11] .
Per entità si intende precisamente
ogni sequenza arbitraria di bit, da una
stringa di caratteri ad un intero file,
indipendentemente dallestensione delloggetto
cui lentità 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 allinterno
del documento codificato. La stringa di
caratteri impiegata in qualità di entità
potrebbe anche essere unabbreviazione
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).
Lelenco delle entity
utilizzate sarà contenuto in unapposita
tabella, esplicitamente dichiarata. Tale
tabella prende il nome di DTD, Document
Type Definition. In essa si presenterà,
oltre allelenco 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 allinterno
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 allelaborazione 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
allinterno 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 allinterno della
pagina);
i simboli per le entità
(entity) che possono occorrere allinterno
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 lSGML 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 lesemplare del documento.
E la dichiarazione SGML
(SGML declaration) che raccoglie
linformazione 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 allatto
della codifica.
Per ciò che inerisce luso
del set di caratteri, SGML propone, nella
sintassi concreta di riferimento, lISO
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 dallinglese, in
quanto potrebbero esigere non solo lettere
accentate, ma anche alfabeti completamente
diversi. Viene quindi fornita lopportunità
di specificare nella dichiarazione SGML
un altro set di caratteri che si intende
utilizzare. E sicuramente significativo
optare infatti per laltro standard
ISO, l8859-1, ASCII a 8 bit, noto
come ISO-Latin, dove il numero 1 si riferisce
ai caratteri propri dellEuropa 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, lesigenza
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 lapplicazione
di SGML, e fare in modo che lutenza
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 labbreviazione per document
type definition) che ci fornirà uninformazione
essenziale e cioè con quale tipo di documento
stiamo lavorando.
Per concludere, lesemplare
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 unapposita zona dellintestazione
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 allinterno 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 allinterno, nellinternal
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
allinterno di un preciso percorso
ma è richiamata tramite lindicazione
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.
LSGML 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à.
|