Questa è la guida dell'utente al sistema di elaborazione di documenti SGML-Tools. SGML-Tools fornisce un SGML DTD (Document Type Definition) e un insieme di "file di sostituzione" che convertono il file sorgente SGML nei file sorgenti di groff, LaTeX, HTML, GNU info, LyX e RTF.
SGML-Tools è basato "pesantemente" sul QWERTZ DTD di Tom Gordon,
thomas.gordon@gmd.de
.
Questo documento è stato scritto usando il linuxdoc DTD, che
viene fornito con SGML-Tools. Esso contiene praticamente tutto quello
che è necessario conoscere per scrivere documenti SGML con questo
DTD. Vedere esempio.sgml
come un esempio di documento SGML che si
può usare come modello per i propri documenti.
Ho scelto SGML per questo sistema perché SGML è stato creato specificatamente per la conversione in altri formati. SGML, che significa Standard Generalized Markup Language, permette di specificare la struttura di un documento---cioè come si vuole impostare il documento. Si specifica la struttura di un documento con un DTD (Document Type Definition). Linuxdoc è un DTD che specifica la struttura per gli HOWTO di Linux e altri documenti. QWERTZ è un altro DTD. Lo standard SGML fornisce DTD per libri, articoli e altri tipi di documenti generici.
Il DTD specifica il nome degli "elementi" all'interno del documento. Un elemento è solo una parte di una struttura---come una sezione, una sottosezione, un paragrafo o anche qualcosa di più piccolo come un testo enfantizzato. Diversamente da LaTeX, comunque, questi elementi non sono intrinseci a SGML stesso. Il Linuxdoc DTD fa qualcosa per definire elementi che appaiono molto simili a quelli corrispondenti di LaTeX---ci sono sezioni, sottosezioni, "ambienti" testuali e così via. Comunque, usando SGML si può definire ogni tipo di struttura per il documento che si preferisce. In ogni modo SGML è simile a TeX a basso livello, mentre il Linuxdoc DTD è simile a LaTeX.
Non bisogna farsi confondere da questa analogia. SGML non è un sistema di formattazione di testi. Non ci sono "formattatori SGML". Il sorgente SGML è solo convertito in altri formati per l'elaborazione. Inoltre, SGML stesso è usato solamente per specificare la struttura del documento. Non ci sono funzioni di formattazine del testo o "macro" intrinseche a SGML stesso. Tutte queste cose sono definite nel DTD. Non si può usare SGML senza un DTD, un DTD definisce cosa fare con SGML.
In questa sezione si vedrà come viene elaborato un documento con SGML-Tools. Prima è necessario disporre di un DTD. Io uso il QWERTZ DTD che fu prodotto, originariamente, da un gruppo di persone che avevano la necessità di un DTD simile a LaTeX. Ho modificato il QWERTZ DTD per produrre il Linuxdoc DTD per i nostri scopi. Il DTD imposta semplicemente la struttura del documento. Una piccola porzione di esso è simile alla seguente:
<!element article - -
(titlepag, header?,
toc?, lof?, lot?, p*, sect*,
(appendix, sect+)?, biblio?) +(footnote)>
Questa parte imposta la struttura globale per un "article" (articolo),
che è simile a un "documentstyle" all'interno di LaTeX. L'article
consiste in un titolo pagina (titlepag
), intestazione (header
)
opzionale, indice (toc
) opzionale, un elenco di figure (lof
)
e tabelle (lot
) opzionale, un numero qualsiasi di paragrafi
(p
), un numero qualsiasi di sezioni principali (sect
),
eventuali appendici (appendix
), un'eventuale bibliografia
(biblio
) e note in fondo pagina (footnote
).
Come si può vedere, il DTD non d�indicazioni su come il documento
dovrebbe essere formattato o come dovrebbe apparire. Esso definisce
solamente quali parti compongono il documento. In un DTD la struttura di
titlepag
, header
, sect
e altri elementi sono definiti
altrove.
Non è necessario conoscere qualsiasi cosa riguardo alla sintassi del DTD per scrivere documenti. Il DTD viene solo presentato in modo da sapere come appare e come funziona. È necessario prendere confidenza con la struttura del documento che il DTD definisce. Altrimenti si potrebbe violare la struttura quando si prova a scrivere un documento e confondersi con i successivi messaggi d'errore. La struttura dei documenti SGML verrà descritta in dettaglio più avanti.
Il passo successivo è quello di scrivere un documento usando la struttura definita dal DTD. Inoltre il Linuxdoc DTD rende l'aspetto del documento molto simile a LaTeX---è molto semplice da seguire. Nel gergo di SGML un singolo documento scritto con un particolare DTD è conosciuto come una "istanza" di quel DTD.
Per tradurre il sorgente SGML in altri formati (come LaTeX o groff) per
l'elaborazione, il sorgente SGML (il proprio documento scritto) è
analizzato attraverso il DTD dall'analizzatore SGML. Io uso
l'analizzatore sgmls di James Clark, jjc@jclark.com
, che
casualmente è anche l'autore di groff
. Siamo in buone mani.
L'analizzatore (sgmls
) semplicemente scorre il proprio documento e
verifica che esso segua la struttura impostata precedentemente dal DTD.
Esso crea anche una versione più esplicita del documento, con
tutte le "macro" ed elementi espansi, che sono capiti da sgmlsasp
,
la fase successiva dell'elaborazione.
sgmlsasp
è responsabile della conversione dell'uscita di
sgmls
in altri formati (come LaTeX). Ciò viene fatto
attraverso l'uso di file di sostituzione che descrivono come
convertire gli elementi nel documento originale SGML nel corrispondente
sorgente nel formato di "destinazione" (come LaTeX o groff).
Per esempio una parte del file di sostituzione per LaTeX appare come:
<itemize> + "\\begin{itemize} +
</itemize> + "\\end{itemize} +
il quale comunica che ogni volta che si inizia un elemento itemize
nel sorgente SGML, esso dovrebbe essere sostituito con:
\begin{itemize}
nel sorgente LaTeX. (Come precedentemente accennato, gli elementi del DTD sono molto simili ai corrispondenti di LaTeX.)
Così, per convertire SGML in un altro formato, tutto quello che si deve fare è scrivere un nuovo file di sostituzione per quel formato, che fornisca le appropriate analogie tra gli elementi dell'SGML e quelli del nuovo formato. In pratica non è così semplice---per esempio, se si sta tentando di convertire in un formato che non è completamente strutturato come il proprio DTD, si avranno dei problemi. In ogni caso è molto più semplice da fare rispetto a sviluppare un analizzatore e un converitore per ogni tipo di formato in uscita; SGML provvede a un sistema generalizzato per convertire un sorgente in diversi formati.
Una volta che sgmlsasp
ha completato il suo lavoro si avrà
un sorgente LaTeX, che corrisponde al proprio documento originale SGML,
che si potrà formattare usando LaTeX come al solito. Più
avanti in questo documento ci sono esempi e inoltre vengono mostrati i
comandi da usare per fare la conversione e formattazione. Si può
fare tutto questo in una linea di comando.
Ma prima dovrei descrivere come installare e configurare il software.