[iomega ZIP] [iomega ZIP] [About] [Copertina] [Postscript] [Postscript]

Articoli


SGML-HTML-DTD : Il solito triangolo
SGML - HTML - DTD : Il solito triangolo
Ma, che c'entra Elvis, buonanima?

di Fabrizio Polacco


Già, che c'entra il compianto?
Triangoli, strane sigle, fantasmi del passato ... sta a vedere che 'sto qua mò ci tira fuori pure Renato Zero!
Buoni, buoni, è una lunga storia, ma vedrò se riesco a farla corta.
Vedete, tutto ebbe inizio negli anni sessanta, quando un certo Donald Knuth ...
Come dite? Non così da lontano? Va beh, come volete:

Qualche giorno fa, leggendo un niusgrup, ho incontrato una affermazione che prima mi ha fatto sorridere, poi mi ha fatto indignare, e quindi, smaltito il sacro furore, mi ha fatto riflettere sulla necessità di scrivere questo articolo.
Non lo avrei fatto altrimenti, più che altro per la delusione dovuta ai miei precedenti interventi su queste pagine cui, senza mia richiesta, erano stati promessi prima tre, poi due, infine un CD premio, che non si è mai degnato di farsi vedere. Segno che i miei precedenti interventi non erano all'altezza, e su questo sono certamente d'accordo. Vediamo se mi riesce di fare meglio stavolta.

Ma torniamo alla nostra affermazione; qualcuno ha scritto:
Come sarebbe a dire Chi? Come direbbe il celebre parroco di Dalla, si dice il peccato, non il peccatore!

L'SGML e' un sistema generalizzato per scrivere documenti, tipo HTML ma con i tag leggermente diversi.

Lo Structured Generalized Markup Language, detto comunemente SGML, è un metalinguaggio, definito in svariati e corposi standard ISO, che consente di descrivere formalmente un linguaggio a markup. Il beneficio della descrizione formale risiede nella possibilità di usare strumenti automatici per la verifica di documenti (non voglio chiamarli testi), la loro stampa/visualizzazione e/o la loro conversione ad altri formati. Con questo voglio mettere in chiaro che la cosa non è limitata ai soli testi, ma spazia in un campo vastissimo di applicazioni (un esempio per tutti: l'industria aeronautica utilizza un'applicazione SGML per archiviare disegni e descrizioni delle parti che compongono un aereoplano).

L'HTML è invece una applicazione dell'SGML in quanto la sua grammatica può essere descritta formalmente in SGML.
Questa descrizione formale è composta dal DTD, il Document Type Definition e dallo Style Sheet (a sua volta definito in base al linguaggio DSSSL) che descrive grosso modo come gli oggetti referenziati dagli elementi del DTD vadano elaborati.

Si può illustrare questa relazione con una bella analogia:
L'SGML corrisponde ad un linguaggio di programmazione di alto livello, con la sua sintassi formalmente definita.
L'HTML è una applicazione, un programma scritto in questo linguaggio di programmazione, e il suo DTD ne è il sorgente.
Il documento, la vostra pagina HTML sono i dati oggetto dell'elaborazione del programma.

Fatte queste premesse (doverose, per soddisfare il mio smodato ego), voglio subito entrare nel vivo di questo monologo e parlarvi dell'argomento di questo articolo:



un modo diverso di scrivere in HTML

Diverso da che?
Ma dalla moda imperante degli editor HTML, vere e proprie contraddizioni nei termini; dall'abuso di tomi e libroni tutti tesi nello sforzo di spiegarvi quanto belle sembreranno le vostre pagine sugli schermi di Netscape o, peggio, di Explorer.

Intendiamoci: se siete tra quelli che ritengono che l'HTML serva solo per creare pagine fugaci da far apparire sul Web come comete, allora potete tranquillamente smettere di leggere e andare a pascolare nel cortile del Netscape Gold e degli altri editor Wysiwyg per HTML! Qui non troverete nulla per voi, e vi annoierete a morte.

Scopo di questo articolo è di liberarvi da questo ciarpame e portarvi ad abbeverarvi direttamente alla fonte, cioè a scrivere HTML consultandone il DTD.

Suona terribilmente difficile, vero?
Beh, non lo è.
Anche il compilare il kernel di Linux suona come un'operazione terribilmente difficile, molto più che installare il DOS. Eppure io e voi sappiamo benissimo che è, in realtà, assai più facile.
Così è anche per il DTD dell'HTML.

Seguitemi, vi porterò per mano a scoprirne i temibili segreti!



Dentro i segreti dell'SGML

Della sua sintassi, per il momento, ci occuperemo solo di Entità, Elementi ed Attributi.


Le ENTITÀ

Per gli scopi di questo articolo, ci basti dire che una Entità SGML è simile ad una macro che verrà espansa nel DTD o nel documento stesso.
Troviamo perciò definiti come entità dei nomi riferiti a liste di elementi sintattici o terminali, o a singoli caratteri o addirittura ad interi documenti pubblici, cioè implicitamente noti, o reperibili in ben determinati cataloghi. Il termine #PCDATA indica del testo che non deve essere considerato ai fini del riconoscimento degli elementi propri dell'SGML, come ad esempio un testo da considerare letteralmente.

La sintassi di una entità è la seguente:

Un tipico utilizzo di entità è dato dalla definizione dell'intero set di caratteri, o per dare un nome ad una lista di elementi.


Gli ELEMENTI

Gli elementi sono le componenti strutturali principali dell'SGML, e sono utilizzati per marcare, all'interno del documento, le sue componenti logiche.
I tag, insomma.
Gli elementi sono nomi normali e quindi virtualmente indistinguibili dal testo che li circonda. Perciò vanno racchiusi tra entità speciali, chiamati STAGO (start of tag open = "<"), ETAGO (end of tag open = "</") e TAGC (tag close = ">").
Queste entità sono riservate ed il loro uso all'interno dei documenti è inibito. Speciali entità sono definite per consentirne la rappresentazione all'interno di un documento.

La sintassi di un elemento è la seguente:


Gli ATTRIBUTI

Gli attributi descrivono caratteristiche di un elemento che non fanno parte del suo contenuto.

La sintassi di un attributo è la seguente:



Diamo un'occhiata al DTD.

Per poter consultare un DTD, la prima cosa da fare, la più ovvia, è procurarsi il documento. Nel nostro caso, quello dell'HTML 3.2, dobbiamo frugare il sito Web di W3.org, dove troviamo il nostro DTD.

Stampiamolo, per prima cosa, perché il contatto fisico stimola la libido.
Lo so, non c'entra niente, ma ... suonava tanto bene!

Il resto ve lo lascio come esercizio: leggetevi il DTD, seguite le varie definizioni incrociate; le liste e le tabelle sembrano incredibilmente intricate, ma, se vi dedicate qualche minuto a seguire la rincorsa di elementi, attributi ed entità, scoprirete che tutto appare semplice e familiare.

Infine ...

A questo punto spreo di avere stimolato sufficientemente la vostra curiosità. Se vi siete domandati come abbia fatto a modificare il colore dei marcatori degli elementi di una lista o a cambiare il colore entro un testo taggato con <pre> senza usare il tag <font> (che Netscape visualizza, ma che è vietato dal DTD), vi consiglio di rileggervi questo articolo usando un ... normale editor (sempre nella speranza che gli impaginatori del PLUTO JOURNAL non l'abbiano stravolto, sigh).
Potrete osservare come, con pochi accorgimenti stilistici, un testo html possa essere reso leggibilissimo fin dal suo sorgente. Se vi venisse il sospetto che tutto quello spazio poteva essere risparmiato per diminuire la lunghezza del file, allora ho una sorpresa per voi: nonostante sul vostro schermo il testo appaia molto spaziato (e di conseguenza leggibile) questo è ottenuto inserendo solo un paio di newline per paragrafo ed un tab per riga. Poche centinaia di byte, ma in compenso ho usato molti meno tag di quanti ne inserisca un editor HTML, ad esempio ho sempre omesso i tag di chiusura che sono indicati come opzionali nel DTD. Solo di </p> e di </li> sono circa 300 byte in meno!


E il compianto? Non so, non saprei in verità dirvi quanto e cosa c'entri il compianto Elvis in tutto questo, eccetto che elvis è il nome di un editor della classe vi che ha una interessante capacità di visualizzare ed editare un testo HTML sia dandogli una leggera formattazione per rendere l'idea di come apparirebbe il vostro testo su un browser, sia di evidenziare con l'uso dei colori, i commenti e gli elementi sintattici dell'HTML, rendendo più piacevole (e facile) il lavoro.

A risentirci!


[iomega ZIP] [iomega ZIP] [About] [Copertina] [Postscript] [Postscript]