Come già detto SGML è un metalinguaggio per definire linguaggi di tipo markup; utilizzando i costrutti di SGML è possibile creare un numero infinito di questo tipo di linguaggi. Un esempio di linguaggio derivato da SGML è l'HyperText Markup Language (HTML) utilizzato nel WWW.
SGML fornisce una modalità di codifica per documenti ipertestuali, in modo che questi possano essere facilmente scambiati tra diversi sistemi che utilizzano anche software di diverso tipo (purché quest'ultimo sia conforme a questo standard). Infatti, essendo i documenti SGML indipendenti dal sistema e dal programma applicativo con cui sono stati realizzati, se disponiamo di un software compatibile con SGML è possibile leggere i documenti creati da altri, conformi con questo standard, anche se questi sono stati realizzati con applicativi diversi dal nostro. Questo permette di evitare la conversione, ad esempio, di un documento scritto con WordStar in un documento per Word. A conferma della sua diffusione a livello mondiale, SGML è stato adottato ed approvato dall'International Standards Organization (ISO) nel 1986. Le sue cinque principali caratteristiche sono:
Un sistema che ha questa caratteristica utilizza dei codici per la descrizione delle varie parti di un documento (paragrafi, citazioni, ecc.) che coincidono con i nomi di queste parti di documento. SGML usa il codice <PARA> ... </PARA> per specificare che il testo contenuto tra queste due tags deve essere considerato come un paragrafo; SGML non si preoccupa di come questo viene poi rappresentato, ma soltanto di specificare che il testo tra le due tags deve essere considerato come un'unità indivisibile. Al contrario, per ottenere lo stesso effetto un linguaggio markup di tipo procedurale inserisce delle particolari istruzioni che devono essere eseguite in quel particolare punto del testo, come "eseguire la funzione PARA con i parametri 'allineamento a sinistra' e 'carattere times roman dimensione 10' in questo punto". Il markup descrittivo lascia la scelta delle modalità di rappresentazione totalmente al programma che riprodurrà il documento. Ancora, per evidenziare (block quote) una parte di testo in SGML avremo:
<BLOCKQUOTE> ... testo da evidenziare ... </BLOCKQUOTE>
mentre in un markup procedurale, come il linguaggio per formattazione testi troff di UNIX, avremo:
.sp 1; .ss; sin +12 -12
Il markup descrittivo, lasciando la scelta delle modalità di rappresentazione totalmente al software che riprodurrà il testo, permette quindi a chi scrive di concentrarsi essenzialmente sulla creazione di un documento ben organizzato e facilmente leggibile (piuttosto che su come realizzare certe funzioni), senza violarne l'integrità. Ad esempio, un browser può rappresentare <EM> ... testo ... </EM> in carattere "times roman 12 corsivo", mentre un altro browser può rappresentare lo stesso testo in carattere "courier 14 sottolineato"; in entrambi i casi il testo viene comunque evidenziato.
Sfortunatamente, la maggior parte dei programmi di elaborazione testi usa il markup procedurale; inoltre, ognuno di questi programmi usa codici di markup diversi da quelli degli altri. Conseguentemente i documenti realizzati con queste modalità sono rappresentabili soltanto attraverso il software con il quale sono stati realizzati, rendendo più difficoltoso il loro utilizzo in ambienti dove si hanno migliaia di utenti, non tutti con gli stessi programmi di elaborazione testi (come, ad esempio, nel WWW). Al contrario, il markup descrittivo rende i documenti totalmente indipendenti dal software e dal sistema (UNIX, MSDOS, MACINTOSH) con cui sono stati realizzati, separando la rappresentazione della struttura del documento da tutte le istruzioni necessarie alla sua formattazione, specifiche di ogni applicazione. Questa separazione è particolarmente importante, in quanto aumenta la portabilità dei documenti, riducendo i costi necessari alla loro conversione da un software ad un altro.
Il markup descrittivo risulta particolarmente utile quando si devono creare documenti con sezioni che devono essere realizzate solo sotto determinate condizioni; ad esempio, per scrivere il manuale di un programma che ha una versione per ambiente DOS ed una per ambiente MacIntosh. Questo manuale conterrà delle parti comuni ai due ambienti e delle parti specifiche per ognuno dei due e, col markup descrittivo, può essere realizzato in un unico documento; infatti, quando l'utilizzatore lancia il programma per la creazione del manuale per ambiente DOS, questo elaborerà oltre alle sezioni comuni, soltanto quelle sezioni indicate con "dos", tralasciando quelle indicate con "macintosh". Al contrario, senza l'uso del markup descrittivo si sarebbero dovuti realizzare due distinti manuali.
In SGML, le istruzioni indicanti come trattare le varie parti del documento sono distinte dal markup descrittivo presente nel documento stesso. Tipicamente, queste istruzioni sono collocate al di fuori del documento SGML, in procedure o programmi separati. Il documento può così essere elaborato da diversi tipi di software di elaborazione testi, ognuno dei quali applicherà le proprie procedure e soltanto sulle parti di documento che questo software ritiene rilevanti. Ad esempio, potranno essere elaborate soltanto quelle tags che indicano il nome dell'autore, la data di creazione del documento, o la data della sua ultima modifica; oppure queste tags potranno essere trascurate, insieme alle tags indicanti ipercollegamenti (iperlink, come si hanno in un documento HTML), elaborando solo quelle relative alla formattazione del testo.
Quindi, il markup descrittivo permette, a chi scrive un documento di concentrarsi soltanto sulla sua struttura e sul suo contenuto, riducendo al minimo le distrazioni inerenti alla formattazione del documento stesso; esso assicura inoltre la portabilità del documento ed infine, evidenzia delle informazioni sulla sua struttura che possono essere usate per elaborarlo in maniera diversa, a seconda dell'uso che se ne deve fare.
I link ipertestuali completano la struttura del documento (che in questo modo può anche essere vista come una struttura gerarchica), o la sua organizzazione con interconnessioni tra i vari elementi che lo compongono. Aggiungere iperconnessioni tra i vari elementi permette di riferirsi ad altri documenti, o ad altri oggetti come dati, immagini, suoni, ecc., usando dei collegamenti espliciti (apposite tags) che possono essere interpretati in maniera diversa dal programma che elaborerà il documento. Infatti, il meccanismo di identificazione dei collegamenti permette ad essi di puntare ad altri elementi facenti parte dello stesso documento (intra-document linking), oppure di puntare a documenti diversi (inter-document linking), che si trovano sulla stessa macchina su cui stiamo lavorando, oppure su una qualsiasi altra macchina collegata in rete alla nostra.
Come già accennato, SGML è un metalinguaggio, cioè un linguaggio usato per la creazione di altri linguaggi; ad esempio, HTML è un linguaggio creato utilizzando SGML. Con SGML è possibile creare un proprio linguaggio, la cui struttura riflette quella dei documenti che dobbiamo creare. La flessibilità di SGML significa che non esistono restrizioni per la creazione di un proprio set di tags. Questo non è il caso di HTML, ma perché HTML è un linguaggio markup specifico, con una specifica applicazione e con uno specifico schema di interpretazione, non è un metalinguaggio.
Ogni linguaggio creato a partire da SGML utilizzerà la propria DTD (Document Type Definition), contenente il proprio set di tags, necessario per la creazione dei propri documenti. La DTD definisce la sintassi del linguaggio, descrivendo ogni elemento che compone un documento realizzato con quel linguaggio, tutti gli attributi permessi per quell'elemento ed i dati che questo può contenere. Ad esempio la DTD di HTML stabilisce che un documento scritto con questo linguaggio può contenere soltanto un elemento del tipo <HEAD> ed uno soltanto del tipo <BODY>.
SGML può essere utilizzato per creare qualsiasi tipo di struttura di documento; ad esempio, è possibile creare un libro la cui struttura consiste di una sola pagina di copertina (FRONTMATTER), seguita da un corpo (BODY) costituito da uno o più capitoli (CHAPTER), ognuno dei quali si compone di zero o più sezioni (SECTION). Al contrario potremmo imporre che ogni capitolo sia composto da almeno una sezione; nel primo caso, nel DTD dovremmo specificare che SECTION è una possibile opzione di CHAPTER mentre, nel secondo caso SECTION dovrebbe per forza fare parte di CHAPTER (si hanno così due diversi tipi di struttura gerarchica del documento). Un'altra possibilità è quella di fare condividere a diversi tipi di documento una stessa DTD, inserendo in essa più opzioni per la creazione dei documenti, cioè la possibilità di creare più strutture gerarchiche di tipo diverso.
Oltre che essere indipendente dal software e dalla piattaforma con cui viene implementato, SGML è anche indipendente dalla lingua e dal set di caratteri utilizzato. Infatti, è possibile specificare i nomi delle tags in inglese, italiano, giapponese, ecc., inserendo, con opportuni meccanismi, questi set di caratteri in SGML.
La descrizione formale della struttura di un documento avviene mediante la sua DTD. La DTD è un concetto introdotto da SGML ed è richiesta per ogni linguaggio creato a partire da SGML. Essa definisce la sintassi di un linguaggio markup, specificando:
Quindi, la DTD fornisce una descrizione formale di tutti i markup di un particolare tipo di documento. Esistono degli applicativi, analizzatori sintattici di SGML, che permettono di verificare se un documento è conforme alla propria DTD.
La struttura dei documenti SGML è facilmente comprensibile, oltre che da un computer anche da una persona che li legga. Il markup descrittivo è separato dal testo da opportuni delimitatori di stringa. In HTML, questi delimitatori sono i simboli < e >. Anche coloro che non hanno familiarità con SGML possono comprendere la struttura di un documento scritto con un linguaggio da esso derivato. Ad esempio, è evidente che la stringa seguente identifica il titolo di un capitolo:
<CHAPTER><TITLE> ... titolo ... </TITLE> ...
Grazie a questa caratteristica, risulta evidente come sia semplice trasportare un documento SGML da una piattaforma UNIX ad una DOS o MACINTOSH e viceversa; inoltre un documento SGML di grosse dimensioni, può essere spezzato in più parti e trasmesso in questo modo, senza nessuna perdita di informazione, a patto che poi le parti siano ricomposte correttamente.
Ultimo aggiornamento: 21-Mar-1996
Telematic lab's home page