27.08.2015 Views

selezionare composizione occorre

250.5.2 Insieme di caratteri - Proglinux

250.5.2 Insieme di caratteri - Proglinux

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Elaborazione SGML 2735<br />

semplificato e abbreviato dal file delle entità esterne utilizzato attualmente da ALtools (il sistema<br />

di <strong>composizione</strong> di Appunti Linux).<br />

<br />

<br />

<br />

<br />

<br />

<br />

...<br />

]]><br />

Nella parte iniziale vengono dichiarate le entità parametriche ‘EntitaASCII8’, ‘EntitaLaTeX’<br />

e ‘EntitaHTML’, tutte con la stringa ‘IGNORE’. In questo modo, in condizioni normali, nessuna<br />

delle istruzioni di definizioni delle entità generali verrebbe presa in considerazione. Per <strong>selezionare</strong><br />

un gruppo soltanto, basterebbe che l’entità parametrica giusta contenesse la stringa ‘INCLUDE’.<br />

Per farlo si interviene direttamente nella riga di comando di ‘nsgmls’ (SP):<br />

cat file_sgml | nsgmls -c catalogo -ientità_parametrica | ...<br />

In pratica, con l’opzione ‘-i’ di ‘nsgmls’, si fa in modo di introdurre una dichiarazione del tipo<br />

<br />

e questa prende automaticamente il sopravvento su qualunque altra dichiarazione analoga (della<br />

stessa entità parametrica) in qualunque altra parte del DTD.<br />

Per tornare all’esempio mostrato del file delle entità generali, si potrebbero <strong>selezionare</strong> le entità<br />

riferite alla trasformazione in LaTeX con un comando simile a quello seguente:<br />

$ cat mio_file.sgml | nsgmls -c ./catalogo -iEntitaLaTeX | ...<br />

250.5.2 Insieme di caratteri<br />

Attraverso le entità generali che si definiscono, è possibile fare in modo che il sistema di <strong>composizione</strong><br />

finale riceva i codici adatti per tutti i simboli «strani» che si vogliono poter inserire.<br />

Tuttavia, spesso si vorrebbe poter scrivere liberamente utilizzando il minor numero possibile di<br />

macro ‘&...;’. Per la precisione, il minimo in assoluto è quello che richiede l’SGML stesso: <strong>occorre</strong><br />

proteggere i simboli ‘&’, ‘>’ e ‘


2736 Elaborazione SGML<br />

Per risolvere questo problema una volta per tutte, si utilizza una tecnica che impone una rielaborazione<br />

intermedia del risultato generato da SP dall’analisi del sorgente SGML. Questa<br />

tecnica si basa sull’uso di entità generali di tipo ‘SDATA’. Quando queste vengono sostituite<br />

dallo stesso analizzatore SGML, appaiono delimitate dalla sequenza ‘\|’, cosa che ne facilita<br />

l’individuazione da parte di un programma di rielaborazione.<br />

Figura 250.1. Passaggi per risolvere il problema dell’insieme dei caratteri.<br />

.-----------. .--------------.<br />

| file SGML |------------------>. .


Elaborazione SGML 2737<br />

caso di LaTeX, la stringa ‘\|[num ]\|’ viene sostituita con ‘\\#’. Nel risultato finale,<br />

LaTeX richiede solo la stringa ‘\#’, ma fino a che si resta nell’ambito del risultato generato<br />

da ‘nsgmls’, le barre oblique inverse devono essere raddoppiate.<br />

5. Attraverso ‘sgmlsasp’, oppure ‘sgmlspl’, si genera il risultato finale da passare al sistema<br />

di <strong>composizione</strong>.<br />

250.6 Organizzazione degli strumenti SGML in una<br />

distribuzione GNU/Linux<br />

È raro che una distribuzione GNU/Linux si occupi di organizzare gli strumenti SGML, mentre<br />

questo sarebbe molto importante per tutti gli sviluppatori di programmi riferiti a questo standard<br />

e a quelli derivati. A questo proposito, vale la pena di osservare la distribuzione Debian che mette<br />

in pratica alcune buone idee. 1<br />

Il problema fondamentale sta nello stabilire la collocazione dei DTD e dei file delle entità generali<br />

relative. Infine, si tratta di definire un catalogo unico per tutti questi DTD e per i file delle entità.<br />

I file dei DTD vengono collocati nella directory ‘/usr/share/sgml/dtd/’, mentre quelli delle<br />

entità si trovano nella directory ‘/usr/share/sgml/entities/’. A questo punto, per facilitare<br />

l’indicazione dei file nel catalogo, questo dovrebbe trovarsi opportunamente nella directory<br />

‘/etc/sgml/’, con il nome ‘catalog’; così il file del catalogo può essere aggiornato senza<br />

interferire con la gerarchia ‘/usr/’ che deve poter essere montata in sola lettura.<br />

Avendo organizzato tutto in questo modo, ogni volta che si installa un nuovo pacchetto di<br />

strumenti SGML, questo dovrebbe provvedere ad aggiungere nel catalogo standard tutte le<br />

dichiarazioni che lo riguardano.<br />

La base di questa struttura nella distribuzione Debian è costituita dai pacchetti<br />

‘sgml-base_<br />

* .deb’ e ‘sgml-data_ * .deb’.<br />

250.7 perlSGML: analisi di un DTD<br />

Quando si realizza un DTD per qualche scopo, potrebbe essere importante disporre di strumenti<br />

adatti alla sua analisi, per verificare la sua coerenza con l’obiettivo che ci si pone. Sono importanti<br />

a questo proposito i programmi di servizio del pacchetto perlSGML. Qui ne vengono mostrati<br />

solo alcuni.<br />

In generale, per fare in modo che questi programmi di analisi funzionino correttamente, è<br />

opportuno che la directory corrente nel momento in cui si avviano corrisponda a quella in<br />

cui si trova il catalogo, in maniera tale che poi da lì, possa trovare le entità che fossero state<br />

collocate eventualmente in un file esterno. Se poi il file del catalogo non si chiama ‘catalog’,<br />

<strong>occorre</strong> usare l’opzione opportuna per indicare il nome corretto.<br />

250.7.1 $ dtd2html<br />

dtd2html [opzioni] file_dtd ...<br />

Il programma ‘dtd2html’ è il più appariscente nel pacchetto perlSGML. Genera un rapporto sui<br />

DTD elencati alla fine degli argomenti, in forma di ipertesto HTML.<br />

1 Apparentemente, anche la distribuzione Red Hat si sta preparando per questo. Per quanto riguarda la versione<br />

6.0, sono disponibili dei pacchetti RPM organizzati in modo simile a quelli della distribuzione Debian, nella raccolta<br />

«Powertools».


2738 Elaborazione SGML<br />

Alcune opzioni<br />

-help<br />

Emette un riepilogo dell’utilizzo del programma.<br />

-catalog catalogo<br />

Permette di indicare il nome del file contenente il catalogo SGML. In mancanza di questa<br />

opzione, viene cercato il file ‘catalog’ nella directory corrente.<br />

-outdir directory<br />

Permette di specificare una directory diversa da quella corrente, nella quale verranno<br />

generate le pagine HTML.<br />

-ents<br />

Fa in modo che venga aggiunta una pagina HTML con l’elenco delle entità dichiarate nel<br />

corpo principale del DTD.<br />

-tree<br />

Fa in modo che venga aggiunta una pagina HTML con l’albero degli elementi SGML<br />

collegati tra loro in base alle dipendenze relative.<br />

Esempi<br />

$ dtd2html dtd/mio.dtd<br />

Analizza il file ‘./dtd/mio.dtd’ utilizzando il catalogo ‘./catalog’ e generando i file<br />

HTML nella directory corrente.<br />

$ dtd2html -catalog catalogo dtd/mio.dtd<br />

Come nell’esempio precedente, specificando che il catalogo è contenuto nel file ‘./<br />

catalogo’.<br />

$ dtd2html -catalog catalogo -outdir /tmp dtd/mio.dtd<br />

Come nell’esempio precedente, richiedendo che i file HTML siano creati nella directory<br />

‘/tmp/’.<br />

$ dtd2html -catalog catalogo -outdir /tmp -ents dtd/mio.dtd<br />

Come nell’esempio precedente, richiedendo anche la generazione di una pagina dedicata<br />

alle entità dichiarate nel DTD.<br />

$ dtd2html -catalog catalogo -outdir /tmp -ents -tree dtd/mio.dtd<br />

Come nell’esempio precedente, richiedendo anche la generazione di una pagina contenente<br />

l’albero degli elementi.<br />

250.7.2 $ dtddiff<br />

dtddiff [opzioni] file_dtd file_dtd<br />

Il programma ‘dtddiff’ permette di confrontare due DTD, per conoscere le differenze di<br />

contenuto tra i due. Il risultato viene emesso attraverso lo standard output.<br />

Alcune opzioni<br />

-help<br />

Emette un riepilogo dell’utilizzo del programma.


Elaborazione SGML 2739<br />

-catalog catalogo<br />

Permette di indicare il nome del file contenente il catalogo SGML. In mancanza di questa<br />

opzione, viene cercato il file ‘catalog’ nella directory corrente.<br />

Esempi<br />

$ dtddiff -catalog catalogo dtd/mio.dtd dtd2/mio.dtd<br />

Confronta i DTD ‘./dtd/mio.dtd’ e ‘./dtd/mio2.dtd’, utilizzando il catalogo ‘./<br />

catalogo’.<br />

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org


Dichiarazione SGML<br />

Capitolo 251<br />

Fino a questo punto è stata ignorata la dichiarazione SGML, che in generale non dovrebbe essere<br />

un problema per l’utilizzatore, ma rappresenta pur sempre un elemento determinante per la<br />

comprensione della filosofia di questo linguaggio.<br />

La dichiarazione SGML è qualcosa che viene prima del DTD; serve a definire la forma del sorgente<br />

e alcune caratteristiche del linguaggio utilizzato. Attraverso la dichiarazione si possono<br />

modificare molti comportamenti convenzionali, facendo anche cambiare aspetto notevolmente<br />

al linguaggio stesso. Tutto quello che è stato descritto di SGML nei capitoli precedenti, fa affidamento<br />

sulla dichiarazione SGML raccomandata, ma volendo si potrebbero cambiare molte<br />

cose. Per fare un esempio pratico, XML può essere inteso come un modo di utilizzare SGML in<br />

base a una dichiarazione particolare, realizzata per le esigenze specifiche della pubblicazione di<br />

documentazione attraverso la rete.<br />

La dichiarazione SGML si fa generalmente in un file apposito; tutte le direttive sono contenute<br />

all’interno di un’istruzione sola del tipo seguente:<br />

<br />

In pratica, nel modello mostrato, le direttive occupano il posto dei puntini di sospensione.<br />

Si osservi che lo standard originale ISO prevedeva la definizione ‘8879-1986’, che successivamente<br />

è stata modificata nel modo mostrato, ovvero ‘8879:1986’. Lo stesso ragionamento<br />

vale per gli altri standard ISO che prevedono l’indicazione dell’anno.<br />

Esiste una variante recente allo standard ISO 8879:1996 e precisamente si tratta di cambiamenti<br />

pensati per facilitare la comunicazione attraverso la rete. La stringa che fa riferimento a questo<br />

standard esteso è:<br />

"ISO 8879:1986 (WWW)"<br />

La si ritrova in particolare nella dichiarazione dell’HTML 4.<br />

* e nell’XML.<br />

In questo capitolo vengono mostrate solo alcune direttive che possono essere utili per capire<br />

il senso della dichiarazione SGML. Per approfondire lo studio di questo linguaggio, bisogna<br />

procurarsi la documentazione originale ISO.<br />

251.1 Codifica<br />

La codifica dei caratteri utilizzata nel sorgente SGML non può essere ignorata, soprattutto perché<br />

alcuni codici hanno significati speciali che vanno oltre il carattere vero e proprio. Le direttive<br />

riferite alla codifica del sorgente iniziano con la parola chiave ‘CHARSET’ che delimita la sezione<br />

relativa:<br />

CHARSET<br />

definizione_riferita_all’insieme_di_caratteri<br />

...<br />

In generale, si inizia con la definizione di un insieme standard di riferimento, attraverso l’uso di<br />

un identificatore standard:<br />

BASESET insieme_di_caratteri<br />

2740


Dichiarazione SGML 2741<br />

L’identificatore che definisce lo standard è normalmente una stringa abbastanza dettagliata.<br />

L’esempio seguente definisce l’insieme di partenza corrispondente all’ISO 646:1983, ovvero<br />

all’ASCII tradizionale:<br />

BASESET<br />

"ISO 646:1983//CHARSET<br />

International Reference Version (IRV)//ESC 2/5 4/0"<br />

La direttiva appare su due righe, ma si tratta solo di una possibilità e non di una necessità, tanto<br />

che in alcuni casi la si può vedere anche distribuita su tre righe. Dopo la definizione dell’insieme<br />

di partenza, si può descrivere nel dettaglio l’utilizzo e la conversione dei codici corrispondenti ai<br />

caratteri:<br />

DESCSET<br />

inizio quantità {corrispondenza|UNUSED}<br />

...<br />

Si osservi l’esempio:<br />

DESCSET<br />

0 9 UNUSED<br />

9 2 9<br />

11 2 UNUSED<br />

13 1 13<br />

14 18 UNUSED<br />

32 95 32<br />

127 1 UNUSED<br />

Il primo numero indica il codice corrispondente al carattere iniziale di un raggruppamento composto<br />

da una sequenza di n caratteri; il secondo valore indica una quantità di caratteri che possono<br />

essere ignorati oppure anche trasformati, partendo dal codice rappresentato dal terzo valore.<br />

Nell’esempio, i codici che vanno da 0 a 8, in decimale, non sono utilizzati; inoltre i codici da<br />

9 a 10 vengono convertiti con il codice 9 e seguenti (in pratica non vengono convertiti affatto).<br />

In sostanza, ciò che mostra l’esempio non ha lo scopo di convertire alcunché, ma solo di filtrare<br />

codici inutili: vengono lasciati passare i caratteri grafici, a partire dallo spazio, oltre a ,<br />

e . Volendo esprimere la cosa in modo più esplicito, si possono usare anche dei<br />

commenti descrittivi:<br />

DESCSET<br />

0 9 UNUSED<br />

9 1 9 -- HT --<br />

10 1 10 -- LF --<br />

11 2 UNUSED<br />

13 1 13 -- CR --<br />

14 18 UNUSED<br />

32 95 32 -- SP e altri caratteri grafici --<br />

127 1 UNUSED<br />

La sequenza di direttive ‘BASESET’ e ‘DESCSET’ può anche essere ripetuta, quando dopo l’ASCII<br />

normale, i primi 7 bit, si vuole fare riferimento a qualcosa di più. Per esempio, la dichiarazione<br />

relativa alla codifica dell’HTML 3.2, si presenta come si vede di seguito:<br />

CHARSET<br />

BASESET<br />

"ISO 646:1983//CHARSET<br />

International Reference Version<br />

(IRV)//ESC 2/5 4/0"<br />

DESCSET 0 9 UNUSED<br />

9 2 9<br />

11 2 UNUSED<br />

13 1 13<br />

14 18 UNUSED<br />

32 95 32<br />

127 1 UNUSED<br />

BASESET<br />

"ISO Registration Number 100//CHARSET<br />

ECMA-94 Right Part of


2742 Dichiarazione SGML<br />

Latin Alphabet Nr. 1//ESC 2/13 4/1"<br />

DESCSET 128 32 UNUSED<br />

160 96 32<br />

Rispetto a quanto già visto si aggiunge il riferimento allo standard ISO 8859-1 (Latin-1). Si può<br />

vedere che vengono esclusi i primi 32 codici a partire dal numero 128, che non contengono<br />

simboli grafici utili.<br />

251.2 Capacità<br />

Per qualche ragione storica, che ormai non avrebbe più motivo di sussistere, è prevista una sezione<br />

attraverso la quale si definisce la capacità elaborativa dell’analizzatore SGML. Si tratta di<br />

stabilire dei limiti di spazio per la gestione di una serie di informazioni. In generale, non dovrebbe<br />

essere determinante la dimensione da dare ai vari attributi riferiti a questa capacità; tuttavia, si<br />

tratta di un’indicazione che rimane, per la quale si fa riferimento allo standard, oppure si indica<br />

semplicemente che non ci sono limiti. Nel primo caso si indica,<br />

CAPACITY PUBLIC<br />

nel secondo soltanto<br />

CAPACITY NONE<br />

"ISO 8879:1986//CAPACITY Reference//EN"<br />

A titolo di esempio si mostra anche la direttiva relativa riferita all’HTML 3.2 e 4:<br />

CAPACITY<br />

SGMLREF<br />

TOTALCAP 150000<br />

GRPCAP 150000<br />

ENTCAP 150000<br />

Si osservi la parola chiave ‘SGMLREF’ che può essere usata anche altrove. Rappresenta il<br />

riferimento ai valori predefiniti SGML, prima di modificarli o integrarli con le richieste<br />

successive.<br />

251.3 Ambito<br />

La sintassi del linguaggio SGML può essere alterata in parte, attraverso una serie di direttive<br />

descritte nella prossima sezione. L’ambito della definizione della sintassi SGML può essere<br />

controllato attraverso la direttiva ‘SCOPE’:<br />

SCOPE DOCUMENT|INSTANCE<br />

La direttiva ‘SCOPE DOCUMENT’ indica che la sintassi si applica sia al DTD, sia al sorgente<br />

SGML; nell’altro caso, ‘SCOPE INSTANCE’ si riferisce solo al sorgente, mentre il DTD va<br />

interpretato in base alla sintassi standard predefinita (la sintassi concreta di riferimento ).<br />

Di solito si usa la direttiva ‘SCOPE DOCUMENT’.<br />

251.4 Sintassi concreta<br />

La sintassi concreta è ciò che definisce i delimitatori dei marcatori SGML, il ruolo dei codici di<br />

controllo e altri dettagli riferiti alla sintassi SGML. In particolare si parla di sintassi concreta di<br />

riferimento quando si vuole indicare quella predefinita, ovvero quella a cui si fa riferimento di<br />

solito. Le direttive che compongono la definizione della sintassi concreta sono introdotte dalla<br />

sezione ‘SYNTAX’, a cui spesso segue la stringa di un identificatore pubblico, per richiamare inizialmente<br />

una serie di caratteristiche standard che poi vengono alterate o integrate dalle direttive<br />

successive:<br />

SYNTAX PUBLIC "ISO 8879:1986//SYNTAX Reference//EN"


Dichiarazione SGML 2743<br />

251.4.1 Caratteri da evitare<br />

La prima cosa che si specifica all’interno della dichiarazione della sintassi concreta è l’elenco<br />

dei numeri decimali corrispondenti ai codici, o caratteri, che non devono essere usati nel testo<br />

del sorgente. Questi non verranno passati all’applicazione successiva dall’analizzatore SGML.<br />

All’interno dei codici esclusi in questo modo ci possono essere comunque simboli o caratteri di<br />

controllo che servono in altri ambiti, come si vedrà in seguito.<br />

La codifica a cui si fa riferimento, non è quella ottenuta dopo la trasformazione con la direttiva<br />

‘DESCSET’ della sezione ‘CHARSET’, ma quella della stessa direttiva della sezione ‘SYNTAX’,<br />

come verrà descritto tra poco.<br />

La direttiva in questione è molto semplice; spesso, quando si tratta dell’ASCII, si utilizza<br />

direttamente l’esempio seguente:<br />

SHUNCHAR CONTROLS 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16<br />

17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 127<br />

251.4.2 Codifica nell’ambito della sintassi concreta<br />

Nell’ambito della definizione della sintassi concreta, è necessario specificare nuovamente la codifica<br />

di partenza e la conversione eventuale. Tutto procede esattamente come è già stato visto in<br />

precedenza, nella sezione ‘CHARSET’, con la differenza che in generale si preferisce lasciare tutto<br />

come si trova:<br />

BASESET "ISO 646:1983//CHARSET<br />

International Reference Version<br />

(IRV)//ESC 2/5 4/0"<br />

DESCSET 0 128 0<br />

L’esempio si riferisce al caso in cui si utilizzi solo l’ASCII. Comunque, si può osservare che la<br />

direttiva ‘DESCSET’ non esclude alcunché e non trasforma alcun carattere.<br />

251.4.3 Codici con funzioni speciali<br />

Si possono definire alcuni codici con funzioni speciali, attribuendo loro un nome, a cui si accede<br />

con macro del tipo ‘&#nome ;’. Spesso si fa uso di queste macro nel DTD, precisamente nelle<br />

mappe di sostituzione. Si ricorderà che la macro ‘&RE;’ fa riferimento convenzionalmente alla<br />

fine del record. Si osservi l’esempio seguente:<br />

FUNCTION<br />

RE 13<br />

RS 10<br />

SPACE 32<br />

TAB SEPCHAR 9<br />

Si tratta della direttiva ‘FUNCTION’ a cui segue la dichiarazione di una serie di nomi, abbinati<br />

al codice relativo. Si può osservare il caso del nome ‘TAB’, a cui si aggiunge la parola chiave<br />

‘SEPCHAR’: si tratta effettivamente del carattere , che però, ai fini della sintassi concreta,<br />

viene tradotto con ciò che corrisponde a ‘&SPACE;’, cioè uno spazio normale.<br />

L’esempio mostra la definizione tipica di questa direttiva. Si può osservare che ‘RE’ è abbinato<br />

a , per cui si suppone che il file sorgente SGML sia organizzato in modo da avere<br />

dei codici di interruzione di riga pari a , come avviene in Dos. Dipende molto<br />

dall’analizzatore SGML come funziona la cosa. In pratica, l’analizzatore potrebbe convertire<br />

autonomamente il file in questo modo, oppure potrebbe fare altre considerazioni.


2744 Dichiarazione SGML<br />

251.4.4 Nomi<br />

Attraverso la sottosezione ‘NAMING’ è possibile definire quali caratteri possono essere usati nei<br />

«nomi». In questo modo si intendono i nomi degli elementi, delle entità, degli attributi e di alcuni<br />

tipi di valori da associare agli attributi.<br />

In generale, si fa riferimento alle lettere latine dell’alfabeto inglese e alle cifre numeriche, tenendo<br />

conto che in generale è concesso solo di iniziare con una lettera. Per modificare questo assunto<br />

si interviene in direttive particolari, che limitano il primo carattere, oppure quelli restanti.<br />

• LCNMSTRT "caratteri_ulteriori"<br />

UCNMSTRT "caratteri_ulteriori"<br />

Lower case name start, Upper case name start<br />

Descrivono rispettivamente il primo carattere minuscolo e maiuscolo. In generale, si indica<br />

semplicemente la stringa nulla, ‘""’.<br />

• LCNMCHAR "caratteri_ulteriori"<br />

UCNMCHAR "caratteri_ulteriori"<br />

Lower case name characters, Upper case name characters<br />

Descrivono rispettivamente i caratteri successivi al primo, minuscoli e maiuscoli. In<br />

generale, si indica semplicemente la stringa nulla, ‘""’.<br />

• NAMESTRT elenco_codici<br />

NAMECHAR elenco_codici<br />

Name start, Name characters<br />

Descrivono rispettivamente i codici utilizzabili nel primo carattere e in quelli restanti. Si<br />

usano queste direttive particolarmente nella definizione di XML.<br />

• NAMECASE<br />

Si tratta di un’ulteriore sotto-sottosezione, con la quale si definisce la trasformazione o<br />

meno in maiuscolo:<br />

– GENERAL YES|NO<br />

in questo caso si controlla la conversione in maiuscolo di tutti i nomi, tranne le entità<br />

(nell’SGML tradizionale si attiva questa opzione);<br />

– ENTITY YES|NO<br />

si controlla la conversione in maiuscolo dei nomi di entità e dei loro riferimenti: le<br />

macro (nell’SGML tradizionale non si attiva questa opzione).<br />

Nell’SGML normale si utilizza abitualmente la sezione ‘NAMING’ nel modo seguente:<br />

NAMING<br />

LCNMSTRT ""<br />

UCNMSTRT ""<br />

LCNMCHAR "-."<br />

UCNMCHAR "-."<br />

NAMECASE<br />

GENERAL<br />

ENTITY<br />

YES<br />

NO<br />

In questo modo, si può osservare che i nomi possono contenere anche il trattino (‘-’) e il punto<br />

(‘.’), ma non possono iniziare così; inoltre, tutti i nomi, tranne quelli delle entità, vengono convertiti<br />

in maiuscolo (si parla di normalizzazione ), per cui non fa differenza in che modo sono<br />

stati scritti.


Dichiarazione SGML 2745<br />

251.4.5 Delimitatori<br />

La sottosezione introdotta dalla parola chiave ‘DELIM’ può servire per intervenire nella definizione<br />

dei delimitatori. In generale non si modifica nulla e ci si limita a confermare lo standard di<br />

riferimento, attraverso la parola chiave ‘SGMLREF’:<br />

DELIM<br />

GENERAL<br />

SHORTREF<br />

SGMLREF<br />

SGMLREF<br />

A volte viene disabilitato l’uso delle mappe di sostituzione nel DTD, attraverso la direttiva<br />

‘SHORTREF NONE’, come avviene in XML.<br />

Nell’HTML 4 e in XML è stata aggiunta la possibilità di indicare delle macro carattere nella forma<br />

‘&xn;’, per rappresentare i caratteri attraverso cifre esadecimali. Per ottenere questo risultato,<br />

dopo la direttiva ‘GENERAL SGMLREF’, si aggiunge la dichiarazione di ‘HCRO’:<br />

DELIM<br />

GENERAL<br />

HCRO<br />

SHORTREF<br />

SGMLREF<br />

"&#38;#x"<br />

SGMLREF<br />

Naturalmente, in XML ci sono poi altre aggiunte, che qui non vengono mostrate.<br />

251.4.6 Nomi riservati<br />

Alcune nomi che hanno significati speciali possono essere modificati nella sottosezione ‘NAMES’.<br />

In generale, queste cose non si fanno, per cui si abbina semplicemente la dichiarazione<br />

predefinita: ‘SGMLREF’:<br />

NAMES<br />

SGMLREF<br />

251.4.7 Quantità<br />

Nell’ambito della sintassi concreta è possibile definire il limite a una serie di quantità. Di solito<br />

non ci si preoccupa di queste cose, oppure si scrivono direttive per richiedere limiti molto elevati.<br />

Per fare riferimento allo standard, si utilizza la parola chiave ‘SGMLREF’ come al solito:<br />

QUANTITY SGMLREF<br />

Eventualmente si aggiungono le varianti che si ritiene necessario apportare. L’esempio seguente<br />

è tratto dalla configurazione predefinita di SP e appare evidente l’intenzione di estendere al<br />

massimo i limiti, anche senza spiegare nel dettaglio il significato di ogni parametro:<br />

QUANTITY SGMLREF<br />

ATTCNT 99999999<br />

ATTSPLEN 99999999<br />

DTEMPLEN 24000<br />

ENTLVL 99999999<br />

GRPCNT 99999999<br />

GRPGTCNT 99999999<br />

GRPLVL 99999999<br />

LITLEN 24000<br />

NAMELEN 99999999<br />

PILEN 24000<br />

TAGLEN 99999999<br />

TAGLVL 99999999<br />

Con XML, o comunque con la dichiarazione «Web SGML», ‘ISO 8879:1986 (WWW)’, è<br />

possibile usare una forma differente e più intuitiva per indicare che non si vogliono porre limiti:<br />

QUANTITY NONE


2746 Dichiarazione SGML<br />

251.5 Proprietà<br />

L’ultima sezione della dichiarazione SGML serve a raccogliere la definizione delle proprietà:<br />

‘FEATURES’. Contiene in particolare tre sottosezioni intitolate rispettivamente ‘MINIMIZE’,<br />

‘LINK’ e ‘OTHER’. Non è il caso di approfondire queste definizioni, a parte qualche direttiva che<br />

può essere interessante.<br />

Per cominciare, conviene osservare la sezione ‘FEATURES’ dell’HTML 4:<br />

FEATURES<br />

MINIMIZE<br />

DATATAG NO<br />

OMITTAG YES<br />

RANK NO<br />

SHORTTAG YES<br />

LINK<br />

SIMPLE NO<br />

IMPLICIT NO<br />

EXPLICIT NO<br />

OTHER<br />

CONCUR NO<br />

SUBDOC NO<br />

FORMAL YES<br />

Nella sottosezione ‘MINIMIZE’ è importante tenere in considerazione l’opzione ‘DATATAG’, che<br />

in generale è bene sia disattivata come appare nell’esempio. Questa dovrebbe servire per specificare<br />

una stringa che nel testo deve essere presa in considerazione come una chiusura implicita di<br />

un elemento. L’opzione ‘OMITTAG’ consente di utilizzare le regole di minimizzazione nel DTD.<br />

La sottosezione ‘OTHER’ permette di definire delle caratteristiche interessanti riguardo all’organizzazione<br />

del DTD, del sorgente e dei cataloghi. L’opzione ‘CONCUR’ consente, se attivata, di<br />

gestire più DTD nello stesso documento. Ciò può servire quando è consentita l’aggregazione<br />

di più sorgenti che a loro volta utilizzano DTD differenti. Data la complessità che si creerebbe<br />

in questo modo, tale opzione viene disabilitata normalmente. L’opzione ‘SUBDOC’ permette,<br />

se abilitata, di aggregare più sorgenti SGML assieme (che di solito condividono lo stesso DTD<br />

implicitamente); se si abilita l’opzione <strong>occorre</strong> aggiungere l’indicazione del numero massimo di<br />

livelli di annidamento a cui si può arrivare. L’opzione ‘FORMAL’, se attivata, serve a richiedere<br />

l’uso corretto degli identificatori pubblici; se non è attivata, l’identificazione può avvenire in<br />

modo meno rigoroso.<br />

L’esempio seguente mostra l’impostazione tradizionale di un sistema SGML:<br />

FEATURES<br />

MINIMIZE<br />

DATATAG<br />

OMITTAG<br />

RANK<br />

SHORTTAG<br />

NO<br />

YES<br />

YES<br />

YES<br />

LINK<br />

SIMPLE YES 1000<br />

IMPLICIT YES<br />

EXPLICIT YES 1<br />

OTHER<br />

CONCUR NO<br />

SUBDOC YES 99999999<br />

FORMAL YES


Dichiarazione SGML 2747<br />

251.6 Applicazione di una dichiarazione SGML in pratica<br />

La dichiarazione SGML può essere attribuita attraverso il catalogo, con la direttiva ‘SGMLDECL’:<br />

SGMLDECL "HTML4.dcl"<br />

L’esempio mostra il riferimento al file ‘HTML4.dcl’, contenente la dichiarazione SGML<br />

desiderata.<br />

Potrebbe essere impossibile <strong>selezionare</strong> tra più dichiarazioni alternative. In tal caso, diventa<br />

necessario predisporre più cataloghi, uno per ogni tipo di dichiarazione che si intende utilizzare.<br />

251.7 Esempio conclusivo<br />

Per concludere viene mostrato un esempio completo di una dichiarazione SGML realizzata per<br />

poter utilizzare nel sorgente la codifica ISO 8859-1, che potrebbe essere adatta alle situazioni<br />

più comuni (appare anche la sezione ‘APPINFO’ che non è stata descritta). Altri esempi possono<br />

essere ottenuti dal pacchetto SP sorgente, nel quale si può trovare anche la dichiarazione di XML.<br />


2748 Dichiarazione SGML<br />

NAMECASE<br />

GENERAL<br />

ENTITY<br />

YES<br />

NO<br />

DELIM<br />

GENERAL<br />

HCRO<br />

SHORTREF<br />

SGMLREF<br />

"&#38;#x"<br />

SGMLREF<br />

NAMES<br />

SGMLREF<br />

QUANTITY NONE<br />

FEATURES<br />

MINIMIZE<br />

DATATAG<br />

OMITTAG<br />

RANK<br />

SHORTTAG<br />

NO<br />

YES<br />

NO<br />

NO<br />

LINK<br />

SIMPLE YES 1000<br />

IMPLICIT YES<br />

EXPLICIT YES 1<br />

OTHER<br />

CONCUR NO<br />

SUBDOC YES 99999999<br />

FORMAL YES<br />

><br />

APPINFO NONE<br />

251.8 Riferimenti<br />

• The SGML/XML Web Page<br />

<br />

• Wayne L. Wohler, SGML Declarations<br />

<br />

• The SGML Newsletter<br />

<br />

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org


SGMLtools 1.0/LinuxDoc<br />

Capitolo 252<br />

Il sistema standard utilizzato per la documentazione di GNU/Linux è basato su SGMLtools.<br />

SGMLtools ha utilizzato inizialmente il DTD LinuxDoc e successivamente si è rivolto verso<br />

DocBook. In questo capitolo si intende mostrare solo il funzionamento essenziale delle versioni<br />

di SGMLtools 1.0. , cioè di quegli strumenti organizzati per il vecchio DTD LinuxDoc.<br />

*<br />

Dal momento che SGMLtools/LinuxDoc utilizza fondamentalmente LaTeX per produrre documenti<br />

stampati, è necessario avere a disposizione il sistema TeX/LaTeX, probabilmente attraverso<br />

il pacchetto teTeX. Inoltre, gli strumenti SGMLtools sono composti da una serie di programmi<br />

Perl, per cui è necessario tale interprete per la loro esecuzione.<br />

252.1 Struttura<br />

La struttura di un sorgente SGML secondo il DTD LinuxDoc è generalmente la seguente:<br />

<br />

<br />

<br />

Titolo del documento<br />

<br />

Pinco Pallino ppallino@dinkel.brot.dg<br />

<br />

29/02/1999<br />

<br />

Breve introduzione al documento.<br />

<br />

<br />

<br />

Prima sezione<br />

<br />

Contenuto della prima sezione,<br />

...<br />

...<br />

(eventuali altre sezioni)<br />

<br />

Con l’istruzione ‘’ si afferma di voler utilizzare il DTD<br />

‘linuxdoc’. Il documento è delimitato dall’elemento ‘article’ che rappresenta uno tra i diversi<br />

tipi di struttura possibile del documento. Il DTD LinuxDoc è derivato dal Qwertz che era<br />

strutturato in modo da imitare il comportamento di LaTeX. In questo modo, nel DTD originale<br />

erano previste diverse strutture, tutte riferite ad analoghi tipi di documento LaTeX. La tendenza<br />

generale è quella di utilizzare sempre solo la struttura ‘article’, soprattutto perché lo scopo di<br />

SGMLtools è quello di permettere la trasformazione del sorgente SGML in un grande numero di<br />

altri formati, non solo LaTeX.<br />

Dopo l’inserimento dell’elemento ‘title’ e di tutto ciò che deve contenere (titolo, autore, descrizione<br />

del documento), è possibile inserire il marcatore ‘’, con il quale si intende ottenere<br />

un indice generale.<br />

Dopo l’indice generale inizia il testo del documento, suddiviso in sezioni, il cui inizio è<br />

evidenziato dai marcatori: ‘’, ‘’, ‘’.<br />

2749


2750 SGMLtools 1.0/LinuxDoc<br />

252.1.1 Utilizzo sommario<br />

Attraverso SGMLtools, si ottiene un documento finale a partire da un sorgente SGML. Per<br />

questo, si elabora il sorgente come si fa con un linguaggio di programmazione durante la<br />

compilazione. La prima fase è il controllo di validità.<br />

sgmlcheck sorgente_sgml<br />

Una volta verificata la correttezza formale dal punto di vista del DTD, si può richiedere la trasformazione<br />

in un altro formato. Nell’elenco seguente vengono mostrati solo alcuni tipi di trasformazione,<br />

i più importanti. In effetti non tutto funziona nello stesso modo e alcuni tipi di conversioni<br />

sono difettosi.<br />

Quando si progetta di realizzare un documento attraverso SGMLtools/LinuxDoc, è importante<br />

decidere subito quali formati devono essere ottenuti necessariamente, in modo da poter controllare<br />

il loro funzionamento dall’inizio dell’opera. Per esempio, il fatto che si riesca a ottenere un<br />

formato PostScript corretto, non garantisce che gli altri formati generino un risultato altrettanto<br />

buono. 1<br />

Conversione in LaTeX<br />

La conversione in LaTeX si ottiene facilmente attraverso il comando seguente:<br />

sgml2latex --output=tex sorgente_sgml<br />

Viene generato un file con lo stesso nome del sorgente, terminante con l’estensione ‘.tex’.<br />

Questo file contiene riferimenti a stili addizionali che fanno parte del pacchetto SGMLtools.<br />

Questo fatto deve essere tenuto in considerazione se si vuole poi rielaborare questo file con<br />

LaTeX.<br />

Conversione in PostScript<br />

La <strong>composizione</strong> del documento in PostScript avviene attraverso l’elaborazione successiva<br />

da parte di LaTeX, richiamato automaticamente da SGMLtools.<br />

sgml2latex --output=ps sorgente_sgml<br />

Quello che si ottiene è un file con lo stesso nome del sorgente, terminante con l’estensione<br />

‘.ps’.<br />

Conversione in HTML<br />

La conversione in formato HTML viene gestita completamente all’interno di SGMLtools,<br />

attraverso il sistema di programmi in Perl che lo compongono.<br />

sgml2html sorgente_sgml<br />

Si ottengono una serie di file HTML collegati attraverso riferimenti ipertestuali.<br />

252.1.2 Supporto per altri SGML<br />

SGMLtools ha un supporto limitato per HTML. Precisamente, consente di verificare un file<br />

HTML attraverso il DTD HTML 3.2. Si può usare il comando seguente, che è lo stesso visto<br />

nel caso dei file SGML.<br />

sgmlcheck sorgente_html<br />

1 Per fare un esempio evidente, basta pensare all’inserzione di immagini e a ciò che si può ottenere in un formato<br />

finale puramente testuale: niente immagini.


SGMLtools 1.0/LinuxDoc 2751<br />

‘sgmlcheck’ determina da solo che si tratta di un file HTML. Comunque, un file HTML corretto<br />

dovrebbe iniziare con la dichiarazione seguente:<br />

<br />

Eventualmente, sono ammissibili anche altre forme,<br />

<br />

<br />

dove ‘Draft’ si riferisce in particolare alla prima stesura della versione 3.2.<br />

Si potrà osservare che un file HTML apparentemente corretto dato il risultato che si ottiene con<br />

il programma usato per visualizzarlo, può contenere un gran numero di errori formali secondo il<br />

suo DTD.<br />

252.2 LinuxDoc più in dettaglio<br />

Lo standard LinuxDoc, come suggerisce il nome, è quello che si è utilizzato originariamente<br />

per la documentazione di GNU/Linux. Del DTD relativo, ‘linuxdoc.dtd’, vengono sfruttate<br />

ufficialmente solo alcune delle caratteristiche. Per esempio, la definizione dell’incorporazione<br />

di immagini e le tabelle sono rimaste come eredità dallo standard Qwertz, ma il loro utilizzo<br />

andrebbe evitato, preferendo piuttosto l’uso di strumenti SGML basati su DocBook.<br />

252.2.1 Preambolo e definizione dello stile<br />

Come accennato all’inizio del capitolo, un documento LinuxDoc inizia con un preambolo che<br />

descrive il tipo di documento (‘linuxdoc’ appunto), lo stile (in questo caso ‘article’), il titolo,<br />

l’autore e altre informazioni eventuali.<br />

<br />

<br />

<br />

Il mio primo articolo<br />

Pinco Pallino, pincop@dinkel.brot.dg<br />

v0.01, 29 febbraio 1999<br />

<br />

Breve anticipazione del contenuto del documento.<br />

<br />

<br />

<br />

Prima sezione<br />

<br />

Contenuto della prima sezione.<br />

<br />

Dopo il preambolo può essere collocato un indice generale che viene costruito automaticamente<br />

attraverso l’elemento ‘toc’. Quindi si può iniziare il corpo del documento suddiviso in sezioni.<br />

Al termine, la chiusura dello stile dichiarato nel preambolo definisce la fine del documento.<br />

Lo stile ‘article’ è quello standard per i documenti LinuxDoc, ed è anche quello raccomandato.<br />

Consente la suddivisione del documento per sezioni e non per capitoli. Viene chiuso alla fine del<br />

documento.


2752 SGMLtools 1.0/LinuxDoc<br />

252.2.2 Suddivisione del documento<br />

A seconda dello stile di documento utilizzato, la suddivisione del contenuto può avvenire in modi<br />

differenti. In pratica, utilizzando lo stile ‘article’, la suddivisione avviene solo per sezioni,<br />

identificate dall’elemento ‘sect’.<br />

1. ‘sect’<br />

2. ‘sect1’<br />

3. ‘sect2’<br />

Ciò significa che una sezione ‘sect’ può scomporsi in sottosezioni ‘sect1’, che a loro volta si<br />

possono scomporre in altre sottosezioni di livello inferiore ‘sect2’, ecc. In generale, se possibile,<br />

è conveniente limitarsi soltanto a due livelli di suddivisione.<br />

<br />

<br />

<br />

Il mio primo articolo<br />

Pinco Pallino, pincop@dinkel.brot.dg<br />

v0.01, 29 febbraio 1999<br />

<br />

Breve anticipazione del contenuto del documento.<br />

<br />

<br />

<br />

Prima sezione<br />

<br />

Contenuto della prima sezione.<br />

...<br />

Una sottosezione<br />

<br />

Contenuto della sottosezione.<br />

...<br />

Seconda sezione<br />

<br />

...<br />

...<br />

<br />

L’ambiente delimitato da una sezione di qualunque livello, non richiede l’indicazione esplicita<br />

della sua conclusione. È invece necessaria l’inserzione dell’indicazione dell’inizio di un paragrafo,<br />

subito dopo il titolo della sezione stessa. L’esempio mostrato sopra dovrebbe chiarirne il<br />

funzionamento.<br />

252.2.3 Paragrafi<br />

Il testo di un documento normale è suddiviso in paragrafi. L’indicazione dell’inizio o della conclusione<br />

di un paragrafo è facoltativa. È sufficiente staccare i paragrafi con almeno una riga bianca<br />

per dare questa informazione a LinuxDoc. Resta comunque possibile l’indicazione esplicita dei<br />

paragrafi attraverso l’elemento ‘p’. È obbligatoria l’indicazione dell’inizio del primo paragrafo<br />

di una sezione, perché non esiste altro modo per capire quando finisce il titolo (della sezione) e<br />

quando inizia il testo.


SGMLtools 1.0/LinuxDoc 2753<br />

252.2.4 Elenchi<br />

Si hanno a disposizione tre tipi di elenchi: descrittivo (‘descrip’), puntato (‘itemize’) e<br />

numerato (‘enum’).<br />

L’elenco descrittivo è definito dall’elemento ‘descrip’. Le parti descrittive di questo elenco sono<br />

costituite da elementi ‘tag’. Ciò che è contenuto all’interno della sequenza ‘...’<br />

appare evidenziato in un’unica riga e generalmente non può contenere simboli particolari<br />

(dipende dal tipo di trasformazione che si vuole ottenere). Per esempio:<br />

<br />

primoprimo elemento;<br />

secondosecondo elemento;<br />

terzoterzo elemento.<br />

<br />

genera l’elenco seguente:<br />

primo<br />

primo elemento;<br />

secondo<br />

secondo elemento;<br />

terzo<br />

terzo elemento.<br />

L’elenco puntato è costituito dall’elemento ‘itemize’ che si articola in elementi ‘item’, che in<br />

pratica costituiscono le varie voci dell’elenco. Per esempio:<br />

<br />

primo elemento;<br />

secondo elemento;<br />

terzo elemento.<br />

<br />

genera l’elenco puntato seguente:<br />

* primo elemento;<br />

* secondo elemento;<br />

* terzo elemento.<br />

L’elenco numerato è costituito dall’elemento ‘enum’ che si articola in elementi ‘item’, come nel<br />

caso dell’elenco puntato. Per esempio:<br />

<br />

primo elemento;<br />

secondo elemento;<br />

terzo elemento.<br />

<br />

genera l’elenco numerato seguente:<br />

1 primo elemento;<br />

2 secondo elemento;<br />

3 terzo elemento.<br />

Generalmente, se il tipo di conversione lo consente, gli elenchi possono essere annidati e<br />

contenere anche testo normale che viene rappresentato allineato opportunamente.<br />

<br />

primo<br />

Primo elemento descrittivo.<br />

Continuazione del primo elemento descrittivo.<br />

secondo


2754 SGMLtools 1.0/LinuxDoc<br />

Secondo elemento descrittivo.<br />

<br />

Prima suddivisione.<br />

<br />

Ulteriore suddivisione.<br />

Ancora un altro punto.<br />

<br />

Seconda suddivisione.<br />

<br />

Ecco un sottoelenco puntato.<br />

Un secondo elemento dell’elenco puntato.<br />

<br />

Terza suddivisione.<br />

<br />

terzo<br />

Terzo elemento descrittivo.<br />

<br />

L’esempio sopra riportato si traduce in qualcosa che è simile a ciò che segue:<br />

primo<br />

Primo elemento descrittivo.<br />

Continuazione del primo elemento descrittivo.<br />

secondo<br />

Secondo elemento descrittivo.<br />

1 Prima suddivisione.<br />

a<br />

b<br />

Ulteriore suddivisione.<br />

Ancora un altro punto.<br />

2 Seconda suddivisione.<br />

* Ecco un sottoelenco puntato.<br />

* Un secondo elemento dell’elenco puntato.<br />

3 Terza suddivisione.<br />

terzo<br />

Terzo elemento descrittivo.<br />

252.2.5 Inclusione di testo letterale<br />

Si incontra spesso la necessità di includere in un documento del testo letterale. In generale si<br />

tratta di listati di programma o cose simili che possono contenere caratteri o simboli che di solito<br />

dovrebbero essere scritti utilizzando dei codici macro particolari. Per questo si utilizza l’elemento<br />

‘verb’.<br />

Al suo interno è consentito includere un testo che verrà riprodotto esattamente com’è, spazi e<br />

caratteri strani inclusi, utilizzando, quando possibile, lo stesso carattere usato per il testo normale.<br />

Per quanto riguarda la libertà di inclusione di simboli, esiste comunque una piccola limitazione:<br />

• il simbolo ‘&’ può essere inserito solo con un codice macro ‘&ero;’ (mentre nel testo<br />

normale si usa la macro ‘&amp;’);


SGMLtools 1.0/LinuxDoc 2755<br />

• la sequenza di simboli minore+barra obliqua (‘


2756 SGMLtools 1.0/LinuxDoc<br />

252.2.8 Riferimenti incrociati<br />

Si tratta di riferimenti interni o esterni al documento. Generalmente, all’interno del documento<br />

si utilizza l’elemento ‘label’ come segnaposto e l’elemento ‘ref’ come puntatore. Per fare dei<br />

riferimenti all’esterno del documento, si fa uso dell’elemento ‘url’ oppure di ‘htmlurl’.<br />

Un’etichetta, definita attraverso l’elemento ‘label’, permette di marcare una posizione nel documento<br />

a cui si vuole poter fare riferimento. Si tratta di un elemento vuoto che contiene un<br />

attributo obbligatorio: ‘ID’. Questo attributo contiene il valore dell’etichetta che identifica quindi<br />

la posizione che si vuole marcare.<br />

Note personali<br />

<br />

bla bla bla bla...<br />

L’esempio mostra un possibile uso di ‘label’ per marcare l’inizio di una sezione. In linea di<br />

massima, un’etichetta di questo genere permette di fare riferimenti di due tipi: la pagina in cui si<br />

trova e il numero della sezione o dell’oggetto, in relazione al contesto in cui si trova. Un’etichetta<br />

può apparire nei contesti seguenti:<br />

• all’interno di testo normale, facendo riferimento al capitolo e alla sezione in cui si trova;<br />

• all’interno di un elemento ‘caption’ di una figura, facendo riferimento al numero della<br />

figura;<br />

• all’interno di un elemento ‘caption’ di una tabella, facendo riferimento al numero della<br />

tabella.<br />

È importante che queste etichette-segnaposto non contengano caratteri strani, altrimenti il<br />

programma di <strong>composizione</strong> potrebbe non gestirle correttamente.<br />

Un elemento ‘ref’ si comporta come puntatore o riferimento a un’etichetta definita attraverso<br />

l’elemento ‘label’. All’interno di un documento stampato genera un riferimento numerico<br />

che dipende dal contesto in cui si trova l’etichetta (il numero della sezione, della figura o della<br />

tabella), mentre in un documento HTML genera un riferimento ipertestuale (link).<br />

Si tratta di un elemento vuoto che contiene un attributo obbligatorio, ‘ID’, e uno opzionale,<br />

‘NAME’. L’attributo ‘ID’ contiene il nome dell’etichetta a cui si intende fare riferimento, l’attributo<br />

‘NAME’ viene inserito per dare un nome al riferimento che viene creato quando si genera un<br />

documento HTML.<br />

Vedere la sezione .<br />

Un elemento ‘pageref’ di comporta come puntatore o riferimento a un’etichetta. All’interno di<br />

un documento stampato genera un riferimento al numero della pagina che contiene l’etichetta. 2<br />

Si tratta di un elemento vuoto che contiene un attributo obbligatorio, ‘ID’, destinato a contenere<br />

il nome dell’etichetta a cui si intende fare riferimento.<br />

Un elemento ‘url’ si comporta come riferimento a un URI. All’interno di un documento stampato<br />

genera la rappresentazione di questo indirizzo URI, mentre in un documento HTML crea un<br />

riferimento ipertestuale vero e proprio. Un elemento ‘htmlurl’ si comporta in maniera analoga,<br />

ma non riporta l’indirizzo URI nel documento stampato. 3<br />

2 Non ha senso nella traduzione HTML.<br />

3 L’elemento ‘htmlurl’ crea qualche problema quando si vogliono indicare caratteri speciali nell’URI, come nel caso<br />

della tilde. Sotto questo aspetto, per evitare problemi, è meglio limitarsi all’uso di ‘url’.


SGMLtools 1.0/LinuxDoc 2757<br />

Si tratta di elementi vuoti che contengono un attributo obbligatorio, ‘URL’, destinato a indicare<br />

l’indirizzo URI a cui si intende fare riferimento, e uno opzionale, ‘NAME’. Si osservi la differenza<br />

tra i due tipi di puntatori attraverso l’esempio seguente:<br />

<br />

&egrave; il progetto di documentazione di Linux in italiano.<br />

<br />

&egrave; il progetto di documentazione di Linux in italiano.<br />

Nel primo caso, assieme al valore dell’attributo ‘NAME’ viene visualizzato anche l’URI, mentre<br />

nel secondo viene mostrato solo il valore di ‘NAME’.<br />

L’elemento ‘footnote’ permette di inserire una nota che apparirà stampata a piede di pagina.<br />

Purtroppo, Non funziona in alcun modo nella conversione in HTML.<br />

LinuxDoc &egrave; una derivazione di<br />

QwertzIl nome della tastiera tedesca..<br />

252.2.9 Indici<br />

Il sistema è in grado di generare automaticamente l’indice generale del documento e, unicamente<br />

per la conversione in LaTeX, un indice analitico.<br />

Per ottenere l’indice generale è sufficiente inserire l’elemento ‘toc’ (vuoto) subito dopo il<br />

preambolo. L’esempio seguente mostra in che modo si può inserire un indice di questo tipo.<br />

<br />

<br />

<br />

Il mio primo articolo<br />

Pinco Pallino, pincop@dinkel.brot.dg<br />

v0.01, 29 febbraio 1999<br />

<br />

Breve anticipazione del contenuto del documento.<br />

<br />

<br />

<br />

Prima sezione<br />

<br />

Contenuto della prima sezione.<br />

<br />

Ogni tipo di conversione in un formato finale del documento SGML gestisce la generazione<br />

dell’indice generale a modo proprio. Generalmente, sono garantiti solo due livelli di titoli<br />

(sezioni).<br />

L’indice analitico è disponibile solo per la conversione attraverso LaTeX. Si ottiene marcando<br />

alcune porzioni di testo attraverso l’elemento ‘nidx’, oppure ‘ncdx’, come nell’esempio<br />

seguente:<br />

Pallini e sferepallinosfera<br />

<br />

Questa sezione tratta di pallini e sfere in generale, fino a giungere<br />

alla descrizione dei cuscinetti a sfera.cuscinetto a sfera<br />

...<br />

Quanto contenuto all’interno degli elementi ‘nidx’ e ‘ncdx’ non viene a fare parte del testo;<br />

tutte le conversioni che non possono farne uso lo trattano come un commento da ignorare. La


2758 SGMLtools 1.0/LinuxDoc<br />

conversione in LaTeX genera corrispondentemente il comando LaTeX ‘\index{...}’, ma nel caso<br />

particolare di ‘ncdx’, vengono aggiunti dei codici di formattazione in modo tale che nell’indice<br />

la stringa corrispondente appaia evidenziata con un testo dattilografico.<br />

Per usare in pratica l’indice analitico, occorrono diverse fasi:<br />

• la generazione del documento finale attraverso LaTeX;<br />

• la generazione di un file indice, sempre attraverso LaTeX;<br />

• la rielaborazione del file indice;<br />

• la costruzione di un documento finale attraverso l’indice, in modo da poterlo abbinare al<br />

documento principale.<br />

La generazione del file indice avviene attraverso il comando seguente:<br />

sgml2latex --makeindex sorgente_sgml<br />

Si ottiene un file, il cui nome ha la stessa radice del sorgente SGML e l’aggiunta dell’estensione<br />

‘.idx’. Questo file deve essere rielaborato da ‘makeindex’ che è un programma abbinato alle<br />

distribuzioni comuni di LaTeX.<br />

makeindex < indice_generato<br />

> indice_rielaborato<br />

Il file dell’indice rielaborato potrebbe avere la fisionomia dell’esempio seguente:<br />

\begin{theindex}<br />

\item cuscinetto a sfera, 1<br />

\item cuscino, 15<br />

\indexspace<br />

\item pallino, 87<br />

\item pallone, 82<br />

\item pallottola, 54, 55<br />

\item pallottoliere, 50<br />

\indexspace<br />

\item {\tt sfera}, 30, 43<br />

\item steroide, 23<br />

\end{theindex}<br />

Per giungere a un risultato finale, cartaceo, <strong>occorre</strong> aggiungergli qualcosa in modo che diventi un<br />

documento LaTeX vero e proprio. Come nell’esempio seguente:<br />

\documentclass[a4paper]{article}<br />

\usepackage[italian]{babel}<br />

\usepackage[latin1]{inputenc}<br />

\usepackage[T1]{fontenc}<br />

\begin{document}<br />

\begin{theindex}<br />

\item cuscinetto a sfera, 1<br />

\item cuscino, 15<br />

\indexspace<br />

\item pallino, 87


SGMLtools 1.0/LinuxDoc 2759<br />

\item pallone, 82<br />

\item pallottola, 54, 55<br />

\item pallottoliere, 50<br />

\indexspace<br />

\item {\tt sfera}, 30, 43<br />

\item steroide, 23<br />

\end{theindex}<br />

\end{document}<br />

In tal modo, attraverso LaTeX si può passare alla trasformazione in un documento finale DVI;<br />

successivamente, attraverso ‘dvips’, si può ottenere una trasformazione in PostScript.<br />

latex documento_latex<br />

dvips -o documento_ps documento_dvi<br />

252.2.10 Inclusione di immagini<br />

All’interno di un documento è possibile fare riferimento a immagini in formato EPS (Encapsulated<br />

PostScript), che vengono utilizzate nella trasformazione in PostScript attraverso LaTeX e<br />

‘dvips’. Parallelamente è possibile fare anche riferimento a immagini (di solito equivalenti) in<br />

formati diversi, adatti alla trasformazione in HTML.<br />

L’elemento ‘figure’ racchiude le informazioni necessarie per l’inserzione di un’immagine. All’interno<br />

del marcatore di apertura è possibile specificare la posizione prescelta dell’immagine,<br />

per la trasformazione attraverso LaTeX, utilizzando l’attributo ‘LOC’ (location). In pratica conviene<br />

quasi sempre utilizzare la stringa ‘htbp’ che dice a LaTeX di collocare l’immagine nel<br />

posto più adatto, cominciando dalla posizione di partenza (here), quindi nella parte superiore<br />

della pagina (top), poi ancora nella parte inferiore (bottom) e infine, se ogni tentativo fallisce, in<br />

una pagina dedicata (page). Il valore predefinito di questo attributo è ‘tbp’ con il significato che<br />

si può intuire.<br />

<br />

<br />

<br />

L’esempio indica di visualizzare l’immagine ‘esempio.ps’ collocata nella directory ‘figure/’<br />

a partire dalla posizione corrente.<br />

L’elemento ‘eps’ serve all’interno di un elemento ‘figure’ per definisce il file da visualizzare<br />

utilizzando l’attributo ‘FILE’. Questo file verrà utilizzato nella <strong>composizione</strong> in PostScript attraverso<br />

LaTeX. Il nome del file che viene fornito non deve contenere l’estensione ‘.ps’ che è<br />

sottintesa e obbligatoria. Un altro attributo obbligatorio è ‘HEIGHT’, con cui si definisce l’altezza<br />

dell’immagine. L’esempio già mostrato in precedenza, specificava a questo proposito un’altezza<br />

di 5 cm. La larghezza viene regolata in proporzione.<br />

L’elemento ‘img’ serve invece a definire il file da visualizzare per la <strong>composizione</strong> in HTML.<br />

Anche in questo caso si utilizza l’attributo ‘FILE’. Al contrario del caso di ‘eps’, il nome del file<br />

che viene fornito deve essere indicato completo di estensione.<br />

<br />

<br />

<br />

<br />

L’esempio indica di includere l’immagine ‘esempio.ps’, per la <strong>composizione</strong> attraverso LaTeX,<br />

e ‘esempio.jpg’ per quella in HTML.


2760 SGMLtools 1.0/LinuxDoc<br />

L’elemento ‘caption’ può essere usato all’interno della definizione di una figura per indicare la<br />

descrizione o il titolo della figura stessa. All’interno di questa descrizione si può inserire anche<br />

un’etichetta, l’elemento ‘label’, in modo da permettere un riferimento al numero della figura<br />

all’interno del testo.<br />

<br />

<br />

<br />

<br />

<br />

Immagine di esempio<br />

<br />

<br />

L’esempio inserisce la figura rappresentata dal file ‘esempio.ps’, nel caso di trasformazione in<br />

LaTeX, oppure ‘esempio.jpg’ in caso di trasformazione in HTML. Vi aggiunge una descrizione<br />

e un’etichetta per potervi fare riferimento.<br />

252.2.11 Tabelle<br />

All’interno di un documento è possibile inserire delle tabelle, ma questo solo se si intende trasformare<br />

il proprio documento in LaTeX. In HTML si riesce a ottenere qualcosa, ma decisamente<br />

scadente. Per questo motivo, l’uso delle tabelle deve essere riservato ai casi di effettiva necessità.<br />

Le tabelle sono composte essenzialmente da righe separate da un separatore di riga, dove ogni<br />

riga è suddivisa a sua volta in colonne attraverso un separatore di colonna.<br />

L’elemento ‘table’ delimita la zona di descrizione di una tabella. All’interno del marcatore di<br />

apertura è possibile specificare la posizione prescelta della tabella, utilizzando l’attributo ‘LOC’<br />

(location), che si comporta nello stesso modo di quello utilizzato nell’elemento ‘figure’.<br />

L’elemento ‘tabular’, interno a ‘table’, definisce le caratteristiche di una tabella. All’interno<br />

del marcatore di apertura è necessario specificare l’allineamento orizzontale del contenuto delle<br />

celle e la separazione di queste attraverso linee verticali. l’attributo utilizzato per questo è ‘CA’<br />

(Column alignment) e il suo valore consigliabile è una stringa composta da una serie di lettere<br />

‘l’, una per ogni colonna esistente nella tabella.<br />

Le righe della tabella sono concluse dall’elemento ‘rowsep’, mentre le colonne sono staccate<br />

l’una dall’altra attraverso l’elemento ‘colsep’. È possibile inserire una linea orizzontale di separazione<br />

utilizzando l’elemento ‘hline’. Tutti questi elementi di descrizione delle righe, sono<br />

vuoti.<br />

Si osservi questo esempio. Si suppone di voler rappresentare una tabella di quattro righe, più una<br />

di intestazione, divisa in due sole colonne, secondo lo schema seguente:<br />

-----------------------------------------<br />

Parametro LOC Posizione corrispondente<br />

-----------------------------------------<br />

h<br />

posizione attuale<br />

t<br />

superiore<br />

b<br />

inferiore<br />

p<br />

pagina<br />

-----------------------------------------<br />

Esempio di tabella.<br />

Il codice necessario è quello mostrato di seguito.<br />

<br />

<br />

<br />

Parametro loc Posizione corrispondente <br />


SGMLtools 1.0/LinuxDoc 2761<br />

h posizione attuale <br />

t superiore <br />

b inferiore <br />

p pagina <br />

<br />

<br />

<br />

<br />

Esempio di tabella.<br />

<br />

<br />

252.2.12 Mappa dei caratteri<br />

Alcuni caratteri che all’interno di LinuxDoc hanno un significato speciale, oltre a quelli che sono<br />

al di fuori della codifica ASCII standard, possono essere inseriti nel testo finale utilizzando dei<br />

codici macro; precisamente si tratta delle entità standard. 4<br />

Questi codici macro sono preceduti dalla e-commerciale (‘&’) e seguiti da un punto e virgola. Nel<br />

capitolo 249 è già apparsa una tabella riferita alle entità standard di uso comune nell’SGML. Si<br />

tratta precisamente della tabella 249.1.<br />

252.3 Riferimenti<br />

• SGMLtools<br />

<br />

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org<br />

4 LinuxDoc cerca di privilegiare in qualche modo l’ambiente matematico di LaTeX. Per richiamarlo è sufficiente<br />

delimitarlo attraverso le parentesi quadre, che così non possono essere usate in modo letterale. Come nel caso di altri<br />

simboli speciali, anche le parentesi quadre vanno indicate con l’uso di macro.


DebianDoc<br />

Capitolo 253<br />

DebianDoc è un’altra variazione sul tema dell’ormai famoso DTD Qwertz. In altri termini, è<br />

una derivazione di SGMLtools/LinuxDoc, riorganizzato in modo da gestire solo quello che può<br />

essere rappresentato in tutte le forme di <strong>composizione</strong> che sono state pianificate.<br />

Sotto questo aspetto, DebianDoc è superiore a LinuxDoc quando l’obiettivo è la documentazione<br />

compatibile con lo spettro che va da una <strong>composizione</strong> in PostScript alla pagina di manuale pura<br />

e semplice.<br />

Come si può intuire, DebianDoc è un applicativo nato per la distribuzione GNU/Linux Debian.<br />

Tuttavia, con un po’ di prudenza, può essere convertito e installato anche in sistemi basati su<br />

altre distribuzioni. Eventualmente, si dovrà fare attenzione alle dipendenze: DebianDoc richiede<br />

la presenza di una serie di pacchetti che la distribuzione Debian organizza in funzione della<br />

gestione degli strumenti SGML. Un particolare interessante di DebianDoc è il fatto che utilizza<br />

Lout per la <strong>composizione</strong> in PostScript ed eventualmente anche PSUtils per generare dei libretti<br />

di dimensioni più comode rispetto al solito A4.<br />

253.1 Struttura<br />

La struttura di un sorgente SGML secondo il DTD DebianDoc ricalca quello che si può vedere<br />

dall’esempio seguente:<br />

<br />

<br />

<br />

<br />

Titolo del documento<br />

<br />

Pinco Pallino<br />

ppallino@dinkel.brot.dg<br />

<br />

29/02/1999<br />

<br />

Breve introduzione al documento.<br />

<br />

<br />

<br />

Copyright &copy; 1999 Pinco Pallino<br />

<br />

This information is free; you can redistribute it<br />

and/or modify it under the terms of the GNU General<br />

Public License as published by the Free Software<br />

Foundation; either version 2 of the License, or (at your<br />

option) any later version.<br />

<br />

<br />

<br />

<br />

Primo capitolo<br />

Contenuto del primo capitolo,<br />

...<br />

...<br />

<br />

2762


DebianDoc 2763<br />

<br />

Prima sezione del primo capitolo<br />

Contenuto della prima sezione,<br />

...<br />

...<br />

<br />

<br />

...<br />

...<br />

<br />

...<br />

...<br />

<br />

Prima appendice<br />

...<br />

...<br />

<br />

<br />

...<br />

...<br />

<br />

<br />

Si può osservare una grande affinità con il DTD LinuxDoc, dove spicca in particolare il fatto che<br />

le etichette per la realizzazione di riferimenti incrociati sono inserite come attributi ‘ID’ degli<br />

elementi di suddivisione del testo: ‘chapt’, ‘sect’,...<br />

DebianDoc presume quindi che si tratti di un libro suddiviso in capitoli, gli elementi ‘chapt’,<br />

quindi in sezioni a vari livelli: ‘sect’, ‘sect1’, ‘sect2’, ‘sect3’ e ‘sect4’.<br />

È speciale anche l’elemento di dichiarazione dell’indice generale, ‘toc’, che prevede l’attributo<br />

‘DETAIL’, al quale si deve assegnare il nome del livello di suddivisione che si ritiene indispensabile<br />

includere nell’indice generale: nell’esempio mostrato vengono inclusi solo i capitoli e le<br />

sezioni del livello iniziale.<br />

253.1.1 Organizzazione del catalogo, del DTD e delle entità<br />

Dal punto di vista dell’SGML, DebianDoc è organizzato con un catalogo unico, che contiene le<br />

indicazioni seguenti:<br />

DOCTYPE debiandoc<br />

PUBLIC "-//DebianDoc//DTD DebianDoc//EN"<br />

ENTITY %general-chars<br />

dtd/debiandoc.dtd<br />

dtd/debiandoc.dtd<br />

entities/general<br />

Queste righe vengono aggiunte al catalogo del sistema, corrispondente a ‘/usr/share/sgml/<br />

catalog’, che in pratica è un collegamento simbolico al file ‘/etc/sgml.catalog’. Leggendo<br />

le dichiarazioni del catalogo si intende che il DTD DebianDoc è costituito dal file ‘dtd/<br />

debiandoc.dtd’, ovvero ‘/usr/share/sgml/dtd/debiandoc.dtd’; inoltre, si vede che<br />

viene usato un solo file di entità generali: ‘entities/general’, ovvero ‘/usr/share/sgml/<br />

entities/general’.


2764 DebianDoc<br />

253.1.2 Utilizzo sommario<br />

Attraverso gli strumenti di DebianDoc, si ottiene un documento finale a partire da un sorgente<br />

SGML. Per questo, si elabora il sorgente come si fa con un linguaggio di programmazione<br />

durante la compilazione.<br />

debiandoc2dvi [-k] [-p formato_carta] file_sgml<br />

debiandoc2dvips [-k] [-p formato_carta] file_sgml<br />

debiandoc2html [-k] file_sgml<br />

debiandoc2info [-k] file_sgml<br />

debiandoc2latex2e [-k] [-O] [--] file_sgml<br />

debiandoc2lout [-k] [-O] [--] file_sgml<br />

debiandoc2ps [-k] [-O] [-1] [-p formato_carta] [--] file_sgml<br />

debiandoc2texinfo [-k] [-O] [--] file_sgml<br />

debiandoc2text [-k] [-O] [--] file_sgml<br />

debiandoc2textov [-k] [-O] [--] file_sgml<br />

Ognuno di questi comandi elencati rappresenta un modo differente di elaborare e convertire<br />

un sorgente SGML scritto secondo il DTD DebianDoc. Il significato dei nomi dovrebbe essere<br />

intuitivo: ‘debiandoc2html’ significa evidentemente «DebianDoc to HTML», ovvero, «da<br />

DebianDoc a HTML». Lo stesso vale, più o meno, per gli altri comandi. In breve:<br />

• ‘debiandoc2latex2e’ produce un file LaTeX;<br />

• ‘debiandoc2dvi’ produce un file DVI attraverso l’elaborazione con il sistema di<br />

<strong>composizione</strong> LaTeX;<br />

• ‘debiandoc2dvips’ produce un file PostScript attraverso l’elaborazione con il sistema di<br />

<strong>composizione</strong> LaTeX;<br />

• ‘debiandoc2html’ produce una trasformazione in HTML, distribuita su più file, collocati<br />

in una directory il cui nome corrisponde alla radice del file sorgente, e l’estensione ‘.html’;<br />

• ‘debiandoc2texinfo’ produce un file in formato Texinfo;<br />

• ‘debiandoc2info’ produce un file di documentazione Info, attraverso il sistema di<br />

<strong>composizione</strong> Texinfo;<br />

• ‘debiandoc2lout’ produce un file adatto per il sistema di <strong>composizione</strong> Lout;<br />

• ‘debiandoc2ps’ produce un file PostScript, attraverso l’elaborazione del sistema di <strong>composizione</strong><br />

Lout, in cui le pagine sono ridotte e raddoppiate (ogni pagina A4 ne contiene due<br />

A5, a meno che venga utilizzata l’opzione ‘-1’);<br />

• ‘debiandoc2text’ produce un file di testo puro e semplice, con un’ampiezza di 79<br />

colonne;<br />

• ‘debiandoc2textov’ produce un file di testo con i codici di arretramento per ottenere gli<br />

effetti di evidenziamento e sottolineatura per la visualizzazione su schermo.<br />

Alcune opzioni<br />

-k


DebianDoc 2765<br />

Fa in modo che i file intermedi, creati durante il procedimento di conversione, vengano<br />

conservati.<br />

-O<br />

Fa in modo che il risultato finale della trasformazione venga emesso attraverso lo standard<br />

output, quando di solito si crea invece un file con la stessa radice dell’origine e un’estensione<br />

opportuna. Se il sorgente è fornito attraverso lo standard input, questa opzione è<br />

implicita.<br />

-1<br />

Questa opzione riguarda espressamente ‘debiandoc2ps’, che senza di questa, genera un<br />

file PostScript in cui ogni pagina ne contiene due ridotte e affiancate (per mezzo di PSUtils).<br />

Con questa opzione, si ottengono pagine normali (singole).<br />

-p dimensione_pagina<br />

Questa opzione permette di specificare la dimensione della pagina, nelle trasformazioni in<br />

cui ciò può avere senso, facendo riferimento alla configurazione del pacchetto Papersize<br />

della distribuzione Debian.<br />

--<br />

In caso di ambiguità, un trattino doppio serve a separare le opzioni dal nome del file<br />

sorgente.<br />

253.2 Guida rapida<br />

Dal momento che DebianDoc è molto simile a LinuxDoc e che la sua documentazione è abbastanza<br />

chiara, non è il caso di ripetere le stesse informazioni anche in questo capitolo. Eventualmente<br />

si può rileggere quello precedente. Qui vengono mostrati solo i prospetti riassuntivi degli<br />

elementi SGML principali di DebianDoc, attraverso delle tabelle.<br />

Tabella 253.1. Elementi della struttura generale di un documento DebianDoc.<br />

Elemento<br />

debiandoc<br />

book<br />

titlepag<br />

title<br />

author<br />

name<br />

email<br />

version<br />

abstract<br />

copyright<br />

copyrightsummary<br />

p<br />

toc<br />

chapt<br />

appendix<br />

Descrizione<br />

Il contenitore di un documento DebianDoc.<br />

Il sotto-contenitore di un documento DebianDoc.<br />

La definizione della pagina del titolo.<br />

Il titolo del documento.<br />

L’autore (scomposto ulteriormente).<br />

Il nome dell’autore.<br />

L’indirizzo di posta elettronica dell’autore.<br />

La versione del documento.<br />

Una descrizione breve del contenuto.<br />

Informazioni sul copyright.<br />

Il copyright, in breve.<br />

La descrizione della licenza.<br />

L’indice generale.<br />

Il contenitore di un capitolo.<br />

Il contenitore di un’appendice.


2766 DebianDoc<br />

Tabella 253.2. Elementi che rappresentano la suddivisione gerarchica del contenuto<br />

di un documento DebianDoc.<br />

Elemento Descrizione<br />

chapt Il contenitore di un capitolo.<br />

appendix Il contenitore di un’appendice (si articola come il capitolo).<br />

sect Sezione di un capitolo o di un’appendice.<br />

sect1 Sotto-sezione di primo livello.<br />

sect2 Sotto-sezione di secondo livello.<br />

sect3 Sotto-sezione di terzo livello.<br />

sect4 Sotto-sezione di quarto livello.<br />

heading Il titolo di: capitolo, appendice, sezione o sotto-sezione.<br />

Tabella 253.3. Elementi che si utilizzano nel corpo del testo per modificare l’aspetto<br />

del loro contenuto in base al significato che rappresentano.<br />

Elemento Descrizione<br />

em Enfasi normale (idealmente un corsivo).<br />

strong Enfasi più forte (idealmente un neretto).<br />

var Rappresentazione di una metavariabile (di uno schema sintattico).<br />

package Il nome di un pacchetto GNU/Linux.<br />

prgn Il nome di un programma o di un file ben conosciuto.<br />

file Il percorso di un file o di una directory.<br />

tt<br />

Una stringa letterale dattilografica.<br />

Tabella 253.4. Riferimenti.<br />

Elemento<br />

ref id="etichetta"<br />

manref name="nome " section="n_sezione "<br />

email<br />

ftpsite<br />

ftppath<br />

httpsite<br />

httppath<br />

url id="uri" name="nome "<br />

footnote<br />

Descrizione<br />

Riferimento a un’etichetta dichiarata altrove.<br />

Riferimento a una pagina di manuale.<br />

Contenitore di un indirizzo di posta elettronica.<br />

Il nome di dominio di un sito FTP.<br />

Il percorso riferito all’ultimo sito FTP indicato.<br />

Il nome di dominio di un sito HTTP.<br />

Il percorso riferito all’ultimo sito HTTP indicato.<br />

Indirizzo URI completo.<br />

Nota a piè pagina.<br />

Tabella 253.5. Elenchi.<br />

Elemento<br />

list<br />

item<br />

enumlist<br />

item<br />

taglist<br />

tag<br />

item<br />

Descrizione<br />

Elenco puntato.<br />

Voce di un elenco.<br />

Elenco numerato.<br />

Voce di un elenco.<br />

Elenco descrittivo.<br />

Elemento descrittivo.<br />

Voce di un elemento.


DebianDoc 2767<br />

253.3 Riferimenti<br />

• Ian Jackson, Arno van Rangelrooij, Debiandoc-SGML Markup Manual<br />

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org


DocBook: introduzione ai suoi strumenti<br />

Capitolo 254<br />

DocBook è un DTD abbastanza famoso, che come tale rappresenta uno standard importante.<br />

DocBook è nato con lo scopo di descrivere documenti di carattere tecnico; attualmente il suo<br />

sviluppo è mantenuto dal Davenport Group.<br />

Come è noto, il DTD è solo la prima fase di un processo molto lungo, che porta alla fine alla<br />

<strong>composizione</strong> tipografica. La fama di DocBook è tale per cui gli strumenti a disposizione sono<br />

molti e soprattutto differenti. Quando si installa un ipotetico pacchetto «DocBook» nel proprio<br />

sistema, ci si limita a collocare da qualche parte i file che compongono il DTD, eventualmente<br />

assieme alla sua documentazione, ma se mancano gli strumenti che sono in grado di utilizzarlo,<br />

si può fare poco o nulla.<br />

Il DTD DocBook è molto sofisticato e complesso. Qui non si vuole entrare nel dettaglio<br />

della spiegazione della sua organizzazione interna e nemmeno dell’uso dei suoi elementi<br />

SGML. Queste informazioni possono essere tratte dalla sua documentazione che dovrebbe<br />

accompagnarlo, disponibili comunque presso .<br />

254.1 Installazione del DTD<br />

È stato descritto in precedenza in che modo potrebbero distribuirsi i file di diversi DTD, assieme<br />

a quelli delle entità, e in che modo queste informazioni vadano raccolte nel catalogo SGML.<br />

L’installazione del DTD DocBook implica la collocazione dei file del DTD e l’annotazione nel<br />

catalogo. Si presume che prima siano stati installati i file delle entità standard (ISO 8879), che<br />

sono precisamente 19. 1<br />

Si veda eventualmente quanto è stato descritto nel capitolo 250, in particolare nella sezione 250.6.<br />

Ciò che va aggiunto al catalogo generale è contenuto normalmente nel file ‘docbook.cat’ e,<br />

come già è stato spiegato, dovrebbe essere lo stesso sistema di installazione dei pacchetti della<br />

propria distribuzione GNU/Linux a provvedere per questa sistemazione. Eventualmente, si può<br />

sempre fare a mano.<br />

254.2 Esperimenti con il DTD e convalida<br />

Per cominciare a fare qualche esperimento con il DTD DocBook, <strong>occorre</strong> almeno uno strumento<br />

di convalida, di solito il pacchetto SP di James Clark. Nella propria distribuzione GNU/Linux,<br />

questo pacchetto potrebbe essere disponibile da solo (come avviene nella distribuzione Debian),<br />

oppure assieme a Jade (come avviene nella distribuzione Red Hat). Quello che conta è, per<br />

iniziare, che sia disponibile l’eseguibile ‘nsgmls’.<br />

Senza entrare nel dettaglio dell’SGML di DocBook, si può prendere l’esempio seguente come<br />

base per gli esperimenti.<br />

<br />

<br />

<br />

<br />

Il mio primo libro con DocBook<br />

<br />

1 Di solito si tratta del pacchetto denominato «sgml-base», o qualcosa di simile. Questo pacchetto potrebbe contenere<br />

anche molti più file di quelli previsti dallo standard ISO 8879.<br />

2768


DocBook: introduzione ai suoi strumenti 2769<br />

<br />

Pallino<br />

Pinco<br />

<br />

<br />

<br />

Cai<br />

Caio<br />

<br />

<br />

<br />

Copyright &copy; 1999 Pinco Pallino<br />

This information is free; you can redistribute it and/or<br />

modify it under the terms of the GNU General Public License as<br />

published by the Free Software Foundation; either version 2 of the<br />

License, or (at your option) any later version.<br />

<br />

<br />

<br />

Primo capitolo<br />

Contenuto del primo capitolo, bla bla bla bla bla bla bla bla bla<br />

bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla.<br />

bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla<br />

bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla<br />

bla bla bla bla bla bla bla bla.<br />

<br />

Prima sezione del primo capitolo<br />

Contenuto della prima sezione, bla bla bla bla bla bla bla bla bla<br />

bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla.<br />

bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla<br />

bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla<br />

bla bla bla bla bla bla bla bla.<br />

<br />

<br />

<br />

Prima appendice<br />

Contenuto della prima appendice, bla bla bla bla bla bla bla bla<br />

bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla.<br />

bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla<br />

bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla<br />

bla bla bla bla bla bla bla bla.<br />

<br />

<br />

La verifica si fa nel modo già visto tante altre volte. Supponendo di voler fare riferimento al<br />

catalogo contenuto nel file ‘/usr/share/sgml/catalog’ e supponendo di avere chiamato il<br />

sorgente SGML ‘libro.sgml’:<br />

$ nsgmls -s -c /usr/share/sgml/catalog libro.sgml<br />

Eventualmente, se il pacchetto di programmi che conteneva SP è stato compilato in modo coerente<br />

con l’impostazione SGML della propria distribuzione, potrebbe non essere necessario indicare<br />

espressamente il file del catalogo:


2770 DocBook: introduzione ai suoi strumenti<br />

$ nsgmls -s libro.sgml<br />

A questo punto, disponendo di un analizzatore SGML che funziona correttamente con questo<br />

DTD, si potrebbero realizzare i propri strumenti per la trasformazione in un risultato adatto alla<br />

consultazione: cartacea o elettronica. Di solito, si fa affidamento per questo su Jade.<br />

254.3 Jade<br />

Jade è un applicativo in grado di elaborare i dati provenienti da SP; in particolare, trattandosi di un<br />

lavoro dello stesso autore, include solitamente anche SP. Lo scopo di Jade è quello di generare un<br />

risultato finale pronto per la lettura, oppure pronto per l’ultima fase di <strong>composizione</strong> elettronica.<br />

Per arrivare a questo, utilizza dei «fogli di stile», scritti secondo il linguaggio DSSSL.<br />

I fogli di stile necessari a Jade per poter elaborare un documento SGML redatto secondo il DTD<br />

DocBook, vengono installati normalmente attraverso un pacchetto apposito, il cui nome potrebbe<br />

essere «stylesheets», «docbook-stylesheets», o qualcosa di simile. In ogni caso, le dipendenze tra<br />

i pacchetti dovrebbero impedire di dimenticarsene.<br />

In generale, i fogli di stile non si toccano.<br />

Anche l’installazione di Jade richiede l’aggiornamento nel catalogo generale SGML. Dovrebbe<br />

trattarsi del file ‘dsssl.cat’, il cui contenuto viene aggiunto manualmente, o automaticamente,<br />

al catalogo generale del sistema SGML della propria distribuzione GNU/Linux.<br />

254.3.1 Utilizzo di Jade<br />

Si è accennato al fatto che Jade utilizza SP. Per la precisione, è Jade che avvia l’eseguibile<br />

‘nsgmls’ (cioè SP), passandogli tutti gli argomenti della riga di comando che lo riguardano.<br />

jade [opzioni] file_sgml<br />

L’eseguibile ‘jade’, per funzionare, ha bisogno di un foglio di stile iniziale, da abbinare al documento<br />

SGML, in base al tipo di trasformazione che si vuole ottenere. Se questa informazione<br />

non viene fornita (con l’opzione ‘-d’), ‘jade’ cerca un file con la stessa radice di quello SGML,<br />

con estensione ‘.dsl’. Di solito, dal momento che si utilizzano fogli di stile già pronti, se ne farà<br />

riferimento nella riga di comando.<br />

Alcune opzioni specifiche<br />

Oltre alle opzioni di SP, Jade riconosce in particolare le opzioni seguenti.<br />

-d file_delle_specifiche_dsssl<br />

Questa opzione permette di indicare il file contenente il foglio di stile DSSSL che si vuole<br />

sia utilizzato per l’elaborazione. Quando si utilizzano fogli di stile già pronti, l’uso di questa<br />

opzione è praticamente obbligatorio.<br />

-t tipo_di_trasformazione<br />

Questa opzione permette di definire il tipo di trasformazione che si intende ottenere; ciò<br />

attraverso una parola chiave che segue l’opzione come argomento. In particolare, meritano<br />

attenzione:<br />

• ‘rtf’ -- rappresenta una conversione in RTF che si adatta in particolare a MS-Word<br />

97;


DocBook: introduzione ai suoi strumenti 2771<br />

• ‘rtf-95’ -- è una variante RTF adatta in particolare a MS-Word 95;<br />

• ‘tex’ -- è una conversione in TeX, che poi deve essere rielaborato da JadeTeX;<br />

• ‘sgml’ -- converte in un altro formato SGML, per esempio in HTML.<br />

-o file_risultato<br />

Quando la trasformazione che si intende fare genera un solo file, questa opzione consente<br />

di definirne il nome, che altrimenti è lo stesso del sorgente, con l’estensione modificata<br />

opportunamente, in base al tipo di contenuto.<br />

Esempi<br />

$ jade -d /usr/share/sgml/stylesheets/cygnus-both.dsl -t rtf libro.sgml<br />

Viene avviata la trasformazione del file ‘libro.sgml’ in RTF, generando quindi il<br />

file ‘libro.rtf’, utilizzando il foglio di stile ‘/usr/share/sgml/stylesheets/<br />

cygnus-both.dsl’, che rappresenta la scelta standard per DocBook.<br />

$ jade -d /usr/share/sgml/stylesheets/cygnus-both.dsl -t tex libro.sgml<br />

Come nell’esempio precedente, con la differenza che viene generato il file ‘libro.tex’ in<br />

formato TeX (adatto a JadeTeX).<br />

$ jade -d /usr/share/sgml/stylesheets/cygnus-both.dsl -t sgml -i html<br />

libro.sgml<br />

In questo caso si generano una serie di file HTML, i cui nomi sono standard, riconoscibili<br />

perché hanno l’estensione ‘.htm’. Si osservi l’utilizzo della conversione in SGML, con<br />

l’aggiunta dell’opzione ‘-i’. Questa viene passata direttamente a SP e serve per dichiarare<br />

l’entità parametrica denominata ‘html’, che viene riconosciuta poi nel foglio di stile.<br />

254.3.2 JadeTeX<br />

JadeTeX è un componente del sistema di <strong>composizione</strong> TeX. Di solito è separato in un pacchetto<br />

indipendente rispetto alla distribuzione TeX che si utilizza, ma quando lo si installa, è importante<br />

che si tratti di un pacchetto della stessa serie del tipo di TeX che si utilizza. In altri termini, a<br />

meno di essere degli esperti di TeX, non conviene installare un pacchetto JadeTeX preparato da<br />

una distribuzione GNU/Linux differente da quella che si utilizza effettivamente.<br />

Lo scopo di JadeTeX è quello di generare una <strong>composizione</strong> in formato DVI, o in PDF, partendo<br />

da un sorgente TeX ottenuto da Jade:<br />

jadetex sorgente_tex_generato_da_jade<br />

pdfjadetex sorgente_tex_generato_da_jade<br />

Evidentemente, nel primo caso si ottiene una <strong>composizione</strong> in DVI, mentre nel secondo in PDF. 2<br />

254.3.3 Script più comodi<br />

Jade dovrebbe essere accompagnato da alcuni script che semplificano il suo utilizzo per Doc-<br />

Book. Si tratta di ‘db2ps’, ‘db2pdf’, ‘db2rtf’, ‘db2html’ e altri. Il significato dei nomi è<br />

evidente: «da DocBook a»... La loro sintassi è molto semplice:<br />

db2ps file_sgml_docbook<br />

db2pdf file_sgml_docbook<br />

2 Nel momento in cui questo viene scritto, JadeTeX non ha ancora raggiunto un livello di sviluppo soddisfacente.


2772 DocBook: introduzione ai suoi strumenti<br />

db2rtf file_sgml_docbook<br />

db2html file_sgml_docbook<br />

Intuitivamente si comprende che ciò che si ottiene è, a seconda dei casi, un file in PostScript,<br />

PDF o RTF, dove la radice del nome è la stessa del sorgente, mentre l’estensione cambia di volta<br />

in volta. Nel caso della trasformazione in HTML, si ottiene una directory contenente una serie di<br />

file HTML.<br />

254.4 Riferimenti<br />

• Mark Galassi, DocBook intro<br />

<br />

• The DocBook DTD<br />

<br />

• SGMLtools<br />

<br />

• Paul Prescod, Introduction to DSSSL<br />

<br />

• DSSSL Documentation Project<br />

<br />

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org


Parte xlvii<br />

Sgmltexi<br />

255 Sgmltexi: installazione e utilizzo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2774<br />

255.1 Installazione di Sgmltexi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2774<br />

255.2 Come si usa il programma frontale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2776<br />

255.3 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2779<br />

256 Sgmltexi: struttura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2780<br />

256.1 Struttura generale per un sorgente Sgmltexi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2780<br />

256.2 S<strong>composizione</strong> del documento, nodi e menù Info . . . . . . . . . . . . . . . . . . . . . . . . 2791<br />

256.3 Gestire più derivazioni di uno stesso progetto di documentazione . . . . . . . . . . 2793<br />

256.4 Codifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2794<br />

257 Sgmltexi: contenuti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2796<br />

257.1 Paragrafi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2796<br />

257.2 Indici e riferimenti incrociati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2796<br />

257.3 Delimitazione di parole e di frasi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2799<br />

257.4 Delimitazione di blocchi di testo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2799<br />

257.5 Elenchi e tabelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2801<br />

257.6 Inserzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2803<br />

257.7 Definizioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2804<br />

257.8 Codice condizionato e codice letterale in base alla <strong>composizione</strong> . . . . . . . . . . 2806<br />

258 Corrispondenza tra Texinfo e Sgmltexi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2810<br />

2773


Capitolo 255<br />

Sgmltexi: installazione e utilizzo<br />

Sgmltexi è un DTD e un sistema frontale per la <strong>composizione</strong> in Texinfo a partire da un formato<br />

SGML. L’idea alla base di Sgmltexi è quella di avere la possibilità di scrivere un documento<br />

Texinfo attraverso la semplificazione e la guida che può dare un sistema SGML.<br />

All’interno di Sgmltexi, la gestione dei nodi di Texinfo può avvenire in modo automatico e trasparente,<br />

generando un menù Info unico nel nodo ‘Top’. I nomi dei nodi, quando sono generati<br />

automaticamente, usano stringhe del tipo «cap 1», «app A»,...<br />

Sgmltexi ha uno schema preciso: ci possono essere una o più introduzioni iniziali; nella parte centrale<br />

c’è un corpo che può essere scomposto in vario modo; ci possono essere delle appendici;<br />

al termine possono apparire degli indici analitici. Il corpo è organizzato in capitoli, che possono<br />

essere raggruppati in parti ed eventualmente anche in tomi. In tal modo, si possono gestire<br />

facilmente anche documenti di grandi dimensioni.<br />

Sgmltexi è un lavoro derivato dall’esperienza fatta con ALtools e Alml, ovvero i sistemi di<br />

<strong>composizione</strong> di Appunti Linux e di Appunti di informatica libera.<br />

255.1 Installazione di Sgmltexi<br />

Sgmltexi è composto da due eseguibili Perl: ‘sgmltexi’ e ‘sgmltexi-sp2texi’. Questi due file<br />

devono essere collocati in una directory in cui possono essere avviati senza bisogno di indicare<br />

il percorso; in pratica in una directory elencata all’interno della variabile di ambiente ‘PATH’.<br />

Evidentemente, è necessario l’interprete Perl; precisamente questi programmi cercano il file<br />

‘/usr/bin/perl’. Se il proprio sistema operativo è organizzato diversamente, è necessario<br />

intervenire modificando la prima riga dei due eseguibili:<br />

#!/usr/bin/perl<br />

#...<br />

Sgmltexi si aspetta di trovare alcuni file:<br />

• ‘/etc/sgmltexi/sgmltexi.cat’<br />

il catalogo SGML di Sgmltexi;<br />

• ‘/etc/sgmltexi/sgmltexi.dcl’<br />

la dichiarazione SGML di Sgmltexi;<br />

• ‘/etc/sgmltexi/sgmltexi.dtd’<br />

il DTD di Sgmltexi;<br />

• ‘/etc/sgmltexi/entities/’<br />

la directory contenente i file delle entità SGML standard.<br />

Tutti questi file dovrebbero trovarsi esattamente dove previsto; in alternativa si devono realizzare<br />

almeno dei collegamenti per ricreare i percorsi stabiliti.<br />

2774


Sgmltexi: installazione e utilizzo 2775<br />

255.1.1 Gettext<br />

I messaggi di Sgmltexi possono essere tradotti. Per installare i file PO già esistenti è necessario<br />

compilarli come nell’esempio seguente:<br />

$ msgfmt -vvvv -o sgmltexi.mo it.po<br />

In questo esempio, il file ‘it.po’ viene compilato generando il file ‘sgmltexi.mo’. Questo file<br />

può essere collocato in ‘/usr/share/locale/it/LC_MESSAGES/’, o in un’altra posizione<br />

analoga in base agli standard del proprio sistema operativo.<br />

Se non è disponibile il modulo Perl-gettext, che serve a Sgmltexi per accedere alle traduzioni, è<br />

possibile eliminare il suo utilizzo e simulare la funzione di Gettext. In pratica si commentano le<br />

istruzioni seguenti:<br />

# Non si vuole usare gettext.<br />

#use POSIX;<br />

#use Locale::gettext;<br />

#setlocale (LC_MESSAGES, "");<br />

#textdomain ("sgmltexi");<br />

Inoltre, si tolgono i commenti dalla dichiarazione della funzione fittizia ‘gettext()’, come si<br />

vede qui:<br />

sub gettext<br />

{<br />

return $_[0];<br />

}<br />

255.1.2 Dipendenze<br />

È il caso di riepilogare le dipendenze di Sgmltexi da altri applicativi:<br />

• Perl<br />

dal momento che si tratta di un programma scritto in Perl, deve essere presente l’interprete<br />

relativo;<br />

• SP o Jade<br />

per l’analisi SGML <strong>occorre</strong> il programma ‘nsgmls’ che fa parte del pacchetto SP o anche<br />

del pacchetto Jade;<br />

• Perl-gettext<br />

per accedere ai messaggi tradotti del programma, è necessario il modulo Perl-gettext, salva<br />

la possibilità di escluderne l’utilizzo come è già stato mostrato;<br />

• TeX e Texinfo<br />

per arrivare a una <strong>composizione</strong> finale è necessario ovviamente disporre di Texinfo, che<br />

potrebbe già essere integrato nella propria distribuzione TeX (di solito si tratta di teTeX).


2776 Sgmltexi: installazione e utilizzo<br />

255.2 Come si usa il programma frontale<br />

Una volta preparato il sorgente in formato Sgmltexi, bisogna utilizzare il programma ‘sgmltexi’<br />

per controllare l’elaborazione SGML e gli altri applicativi di <strong>composizione</strong> di Texinfo.<br />

255.2.1 Esempio iniziale<br />

Di solito, la cosa migliore per iniziare lo studio di un sistema di <strong>composizione</strong>, è partire da<br />

un esempio banale, funzionante, che consenta di apprendere l’uso elementare degli strumenti<br />

relativi.<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Esempio<br />

Un esempio per un documento in formato Sgmltexi<br />

<br />

Questo è solo un esempio di un documento scritto<br />

utilizzando Sgmltexi.<br />

<br />

Pinco Pallino &lt;ppinco@dinkel.brot.dg&gt;<br />

<br />

Copyright &copy; 2000 Pinco Pallino<br />

<br />

Permission is granted to copy, distribute and/or<br />

modify this document under the terms of the GNU Free<br />

Documentation License, Version 1.1 or any later version<br />

published by the Free Software Foundation; with no<br />

Invariant Sections, with no Front-Cover Texts, and with<br />

no Back-Cover Texts. A copy of the license is included<br />

in the section entitled "GNU Free Documentation<br />

License".<br />

<br />

<br />

<br />

<br />

<br />

<br />

Esempio generale<br />

Questo è l’esempio tipico di un capitolo di Sgmltexi...<br />

Non c’è molto da scrivere in questo caso...<br />

<br />

<br />

Supponendo di avere installato correttamente Sgmltexi (e anche Texinfo), supponendo inoltre<br />

che il file si chiami ‘prova.sgml’, si possono usare i comandi seguenti:<br />

• $ sgmltexi --sgml-check prova.sgml<br />

per verificare la correttezza formale dell’SGML;<br />

• $ sgmltexi --texi prova.sgml<br />

per ottenere semplicemente il file ‘prova.texinfo’, in formato Texinfo;


Sgmltexi: installazione e utilizzo 2777<br />

• $ sgmltexi --info prova.sgml<br />

per ottenere il file ‘prova.info’, in formato Info;<br />

• $ sgmltexi --dvi prova.sgml<br />

per ottenere il file ‘prova.dvi’, in formato DVI;<br />

• $ sgmltexi --ps prova.sgml<br />

per ottenere il file ‘prova.ps’, in formato PostScript;<br />

• $ sgmltexi --pdf prova.sgml<br />

per ottenere il file ‘prova.pdf’, in formato PDF;<br />

• $ sgmltexi --html prova.sgml<br />

per ottenere il file ‘prova.html’, in formato HTML.<br />

255.2.2 $ sgmltexi<br />

La sintassi di ‘sgmltexi’ è quella che si vede nello schema seguente:<br />

sgmltexi [opzioni] sorgente_sgml<br />

In generale, è bene che il nome del file sorgente in formato Sgmltexi abbia l’estensione standard<br />

‘.sgml’.<br />

Opzioni<br />

--help<br />

Mostra una guida sintetica e termina di funzionare.<br />

--version<br />

Mostra le informazioni sulla versione e termina di funzionare.<br />

--force<br />

Quando il contesto lo consente, forza le situazioni. Può essere utile in particolare per<br />

la <strong>composizione</strong> in formato Info e in formato HTML, per passare la stessa opzione al<br />

programma ‘makeinfo’.<br />

--number-sections<br />

Numera le sezioni quando ciò non è previsto in modo normale.<br />

--clean<br />

Elimina i file intermedi che non servono, abbinati al nome del sorgente.<br />

--verbose<br />

Mostra più informazioni durante l’elaborazione.<br />

--deriv=derivazione<br />

Definisce il nome della derivazione. In mancanza di questa indicazione si sottintende<br />

‘MAIN’.<br />

--input-encoding=codifica<br />

Stabilisce la codifica del file in ingresso, tenendo conto che sono ammissibili solo le parole<br />

chiave ‘ISO-8859-n’, dove n va da 1 a 10.


2778 Sgmltexi: installazione e utilizzo<br />

--sgml-include=entità_parametrica | --include=entità_parametrica<br />

Assegna la parola chiave ‘INCLUDE’ all’entità parametrica SGML indicata. Questo serve ad<br />

abilitare l’inclusione di porzioni di sorgente SGML che sono controllate in questo modo.<br />

--paper=formato_<strong>composizione</strong><br />

Serve a definire in qualche modo il formato finale stampato di <strong>composizione</strong>. Sono<br />

disponibili le parole chiave seguenti: ‘letter’, ‘a4’, ‘a4wide’, ‘a4latex’ e ‘small’.<br />

--setchapternewpage={on|off|odd}<br />

Definisce l’inizio dei capitoli nella <strong>composizione</strong> per la stampa, ignorando il marcatore<br />

‘’ all’interno del sorgente del documento.<br />

--footnotestyle={end|separate}<br />

Definisce la collocazione delle note a piè pagina, ignorando il marcatore<br />

‘’ all’interno del sorgente.<br />

--headings={on|off|single|double|singleafter|doubleafter}<br />

Attiva o disattiva le intestazioni, specificando eventualmente l’uso di intestazioni uguali o<br />

distinte. Questa opzione fa ignorare il marcatore ‘’ all’interno<br />

del sorgente del documento.<br />

--sgml-syntax | --sgml-check<br />

Controlla la correttezza formale del sorgente SGML, mostrando gli errori trovati.<br />

--sp<br />

Genera un risultato «post-SP», nel senso che restituisce soltanto quanto ottenuto<br />

dall’analizzatore SGML, a scopo diagnostico.<br />

--texi | --texinfo<br />

Genera un sorgente Texinfo.<br />

--dvi<br />

Compone generando un risultato in formato DVI.<br />

--ps | --postscript<br />

Compone generando un formato in PostScript.<br />

--pdf<br />

Compone generando un formato PDF.<br />

--info<br />

Generate un risultato in formato Info.<br />

--text<br />

Genera un risultato in formato testo puro.<br />

--html<br />

Genera un risultato in formato HTML.<br />

Esempi<br />

$ sgmltexi --sgml-syntax prova.sgml<br />

Analizza la validità formale del sorgente ‘prova.sgml’.<br />

$ sgmltexi --ps prova.sgml<br />

Genera un risultato in formato PostScript attraverso l’aiuto di ‘texi2dvi’ e di ‘dvips’.


Sgmltexi: installazione e utilizzo 2779<br />

255.3 Riferimenti<br />

• Daniele Giacomini, Sgmltexi<br />

<br />

• Gaetano Paolone, Sgmltexi, pacchetto GNU/Linux Debian<br />

<br />

<br />

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org


Sgmltexi: struttura<br />

Capitolo 256<br />

Sgmltexi impone uno schema preciso al documento, in base alle consuetudini dei documenti<br />

stampati. Questo capitolo descrive brevemente tale struttura.<br />

256.1 Struttura generale per un sorgente Sgmltexi<br />

Il sorgente Sgmltexi tipico inizia così:<br />

<br />

Naturalmente, potrebbe essere conveniente la definizione iniziale di alcune entità interne, come<br />

si vede nell’esempio seguente:<br />

<br />

[<br />

<br />

...<br />

...<br />

]><br />

Tutto il documento viene racchiuso all’interno dell’elemento ‘sgmltexi’, rispettando una certa<br />

struttura: deve esserci un elemento ‘head’, ci può essere un elemento ‘intro’, ci deve essere<br />

un elemento ‘body’, infine ci può essere un elemento ‘appendix’. Lo spazio successivo all’elemento<br />

‘appendix’ può essere occupato da alcuni indici analitici (cosa che verrà descritta meglio<br />

in seguito).<br />

<br />

<br />

...<br />

<br />

<br />

...<br />

<br />

<br />

...<br />

<br />

<br />

...<br />

<br />

<br />

L’elemento ‘sgmltexi’ ha tre attributi: ‘lang’, ‘charset’, ‘spacing’. Attraverso l’attributo<br />

‘lang’ si definisce il linguaggio in cui è scritto il documento, richiamando implicitamente una<br />

configurazione particolare all’interno di Texinfo. Questo linguaggio si indica assegnando una<br />

sigla corrispondente allo standard ISO 639 (sezione 543), come si vede nell’esempio seguente:<br />

<br />

L’attributo ‘charset’ permette di indicare il valore da assegnare al comando<br />

‘@documentencoding’ di Texinfo. L’uso di questo attributo viene oscurato dall’opzione<br />

‘--input-encoding’, se questa viene usata. Infatti, tale opzione implica un’elaborazione del<br />

sorgente per cui si genera un file Texinfo in formato ISO 646 (ASCII tradizionale), cosa che fa<br />

perdere di significato al comando ‘@documentencoding’. 1<br />

L’attributo ‘spacing’ dovrebbe essere superfluo, dal momento che serve a definire la spaziatura<br />

alla fine del punto fermo. Questo comportamento dovrebbe essere definito automaticamente<br />

1 La <strong>composizione</strong> di un sorgente Texinfo dà risultati differenti a seconda dei casi, per cui alle volte può essere conveniente<br />

scrivere usando comandi come ‘@‘a’ («à»), mentre altre volte conviene scrivere usando una codifica ISO 8859-<br />

n, annotando questo nel comando ‘@documentencoding’. Probabilmente, nelle prossime versioni di Texinfo questo<br />

problema verrà sistemato; per ora l’ambivalenza di Sgmltexi può aiutare in tal senso.<br />

2780


Sgmltexi: struttura 2781<br />

in base alla scelta del linguaggio. Questo attributo consente quindi di forzare la situazione, imponendo<br />

una spaziatura non conforme allo standard. I valori che si possono assegnare sono:<br />

‘normal’, ‘french’ e ‘uniform’. Assegnando ‘french’, oppure ‘uniform’, si ottiene in pratica<br />

la stessa cosa che si otterrebbe con il comando ‘@frenchspacing’ di Texinfo. L’esempio<br />

seguente rappresenta ciò che potrebbe essere conveniente in un testo italiano:<br />

<br />

Tabella 256.1. Elementi SGML che compongono la struttura generale: prima parte.<br />

Elemento o Aperturra<br />

Chiusu-<br />

attributo<br />

Contenuto Descrizione<br />

Contenitore del documento.<br />

lang -- -- Attributo Sigla ISO 639 del linguaggio.<br />

sgmltexi Sì Sì<br />

charset -- -- Codifica nella forma<br />

Attributo<br />

‘ISO-8859-n’.<br />

spacing -- -- Attributo ‘normal’, ‘french’ e ‘uniform’.<br />

head Sì Sì Intestazione del documento.<br />

admin Sì Sì Informazioni amministrative.<br />

Inserisce il comando<br />

setfilename Sì Vuoto<br />

‘@setfilename’.<br />

content -- --<br />

Il nome del primo file Info da<br />

Attributo<br />

generare.<br />

settitle Sì Vuoto Inserisce il comando ‘@settitle’.<br />

content -- -- Attributo Titolo.<br />

setchapternewpage<br />

Inserisce il comando<br />

Sì<br />

Vuoto<br />

‘@setchapternewpage’.<br />

content -- -- Attributo<br />

Separazione dei capitoli: ‘on’,<br />

‘off’, ‘odd’.<br />

footnotestyle Sì Vuoto<br />

Inserisce il comando<br />

‘@footnotestyle’.<br />

content -- -- Attributo<br />

Piè pagina: ‘end’, ‘separate’,<br />

‘empty’.<br />

headings Sì Vuoto Inserisce il comando ‘@headings’.<br />

content -- -- Attributo Intestazioni: ‘on’, ‘off’, ‘single’,<br />

‘double’, ‘singleafter’,<br />

‘doubleafter’.<br />

defindex Sì Vuoto Inserisce il comando ‘@defindex’.<br />

name -- -- Sigla di due lettere dell’indice<br />

Attributo<br />

analitico.<br />

Inserisce il comando<br />

defcodeindex Sì Vuoto<br />

‘@defcodeindex’.<br />

name -- -- Sigla di due lettere dell’indice<br />

Attributo<br />

analitico.<br />

synindex Sì Vuoto Inserisce il comando ‘@synindex’.<br />

from -- -- Attributo<br />

to -- -- Attributo<br />

syncodeindex Sì Vuoto<br />

from -- -- Attributo<br />

to -- -- Attributo<br />

infodir Sì No Vuoto<br />

infodir Sì Sì #PCDATA<br />

L’indice di origine: una sigla di due<br />

lettere.<br />

L’indice di destinazione: una sigla<br />

di due lettere.<br />

Inserisce il comando<br />

‘@syncodeindex’.<br />

L’indice di origine: una sigla di due<br />

lettere.<br />

Destinazione in cui apparirà in<br />

dattilografico.<br />

Comando ‘@direntry’ in modo<br />

automatico.<br />

Comando ‘@direntry’ con un<br />

contenuto letterale.


2782 Sgmltexi: struttura<br />

Tabella 256.2. Elementi SGML che compongono la struttura generale: seconda parte.<br />

Elemento o Aperturra<br />

Chiusu-<br />

attributo<br />

Contenuto Descrizione<br />

titlepage Sì Sì Informazioni delle prime pagine.<br />

title Sì Sì %inline; Inserisce il comando ‘@title’.<br />

subtitle Sì Sì %inline; Inserisce il comando ‘@subtitle’.<br />

abstract Sì Sì %block;<br />

Descrizione del contenuto del documento.<br />

author Sì Sì %inline; Inserisce il comando ‘@author’.<br />

frontcovertext Sì Sì %block; Testo da inserire in copertina.<br />

tpextra<br />

Testo aggiuntivo nelle prime pagine.<br />

Sì Sì %block;<br />

Informazioni legali alla base della<br />

legal Sì Sì<br />

seconda pagina.<br />

copyright Sì Sì %inline; Una riga di copyright.<br />

publishnote<br />

Note da mostrare prima della<br />

Sì Sì %block;<br />

licenza.<br />

Condizioni con cui è rilasciato il<br />

license Sì Sì %block;<br />

documento.<br />

Note sulla copertina, da mostrare<br />

coverart Sì Sì %block;<br />

dopo la licenza.<br />

dedications Sì Sì %block; Pagina delle dediche.<br />

contents Sì Vuoto Indice generale standard.<br />

shortcontents Sì Vuoto Indice generale ridotto.<br />

summarycon-<br />

Sì Vuoto Indice generale ridotto.<br />

menu Sì No Vuoto Inserisce un menù Info automatico.<br />

topnode Sì Vuoto Specifica il nodo iniziale.<br />

next -- -- Attributo Riferimento al nodo successivo.<br />

prev -- -- Attributo Riferimento al nodo precedente.<br />

up -- -- Attributo Riferimento al nodo superiore.<br />

menu Sì Sì Inserisce un menù Info manuale.<br />

detailmenu Sì Sì #PCDATA Dettaglio nel menù Info.<br />

Elemento o<br />

attributo<br />

Tabella 256.3. Elementi SGML che compongono la struttura generale: terza parte.<br />

tents<br />

Apertura<br />

Chiusura<br />

Contenuto<br />

Descrizione<br />

Delimita i capitoli che compongono<br />

l’introduzione.<br />

intro Sì Sì<br />

h1 Sì Sì Titolo di un capitolo introduttivo.<br />

h2 Sì Sì Titolo di una sezione introduttiva.<br />

Titolo di una sottosezione introduttiva.<br />

h3 Sì Sì<br />

Titolo di una sotto-sottosezione<br />

h4 Sì Sì<br />

introduttiva.<br />

body Sì Sì Delimita il corpo del documento.<br />

tomeheading Sì Sì Titolo di un tomo.<br />

partheading Sì Sì Titolo di una parte.<br />

h1 Sì Sì Titolo di un capitolo.<br />

h2 Sì Sì Titolo di una sezione.<br />

h3 Sì Sì Titolo di una sottosezione.<br />

h4 Sì Sì Titolo di una sotto-sottosezione.<br />

appendix Sì Sì<br />

Delimita i capitoli che compongono<br />

l’appendice.<br />

h1 Sì Sì Titolo di un’appendice.<br />

h2 Sì Sì Titolo di una sezione di appendice.<br />

h3 Sì Sì<br />

Titolo di una sottosezione di appendice.


Sgmltexi: struttura 2783<br />

Elemento o<br />

attributo<br />

Apertura<br />

Chiusura<br />

Contenuto<br />

Descrizione<br />

h4 Sì Sì<br />

Titolo di una sotto-sottosezione di<br />

appendice.<br />

indexheading Sì Sì Titolo di un indice analitico.<br />

Inserisce un indice analitico particolare.<br />

name -- -- Sigla dell’indice analitico da inserire.<br />

Attributo<br />

I titoli hanno degli attributi in<br />

comune.<br />

id -- -- Ancora per i riferimenti ipertestuali.<br />

Attributo<br />

node -- -- Attributo Definizione manuale del nodo.<br />

printindex Sì Vuoto<br />

titolo_generico Sì Sì<br />

menu -- -- Attributo Titolo che appare nel menù.<br />

next -- -- Definizione manuale del prossimo<br />

Attributo<br />

nodo.<br />

prev -- -- Definizione manuale del nodo precedente.<br />

Attributo<br />

up -- --<br />

Definizione manuale del nodo superiore.<br />

Attributo<br />

titolo_h Sì Sì<br />

Dal capitolo in giù c’è un attributo<br />

aggiuntivo.<br />

type -- -- Attributo<br />

Numerato, non numerato o intestazione<br />

semplice:<br />

‘numbered’, ‘unnumbered’,<br />

‘heading’.<br />

256.1.1 Intestazione<br />

L’elemento ‘head’ è il più complicato. È necessario per definire molte informazioni che riguardano<br />

il documento. Segue un esempio abbastanza completo, che si riferisce alla documentazione<br />

ipotetica dello stesso Sgmltexi.<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Sgmltexi<br />

An alternative way to write Texinfo<br />

documentation<br />

This edition is for Sgmltexi<br />

&EDITION; (alpha) for Texinfo 4.0<br />

<br />

Sgmltexi is an SGML system (DTD and tools) to<br />

make Texinfo documentation using SGML...<br />

...<br />

<br />

Daniele Giacomini &lt;daniele@swlibero.org&gt;<br />

<br />

Copyright &copy; 2000 ...<br />

<br />

Published by...<br />

<br />


2784 Sgmltexi: struttura<br />

Permission is granted to make and distribute<br />

verbatim copies of this manual...<br />

...<br />

<br />

<br />

Cover art by ...<br />

<br />

<br />

<br />

<br />

<br />

<br />

Guardando l’esempio, si possono riconoscere alcuni elementi importanti: ‘admin’, usato per<br />

alcune informazioni amministrative, e ‘titlepage’.<br />

256.1.2 Informazioni amministrative<br />

L’elemento ‘admin’ viene usato per indicare al suo interno alcune informazioni che vanno prevalentemente<br />

nell’intestazione del documento Texinfo finale, oppure subito dopo. I componenti<br />

di questo ambiente non hanno un ordine preciso, nel sorgente SGML, in quanto poi vengono<br />

riordinati prima della <strong>composizione</strong> in Texinfo.<br />

Nel seguito vengono elencati e descritti gli elementi che possono apparire all’interno di ‘admin’.<br />

• ‘setfilename’<br />

Si tratta di un elemento vuoto, utilizzato per definire il nome del file Info finale, attraverso<br />

il comando ‘@setfilename’ di Texinfo. Si usa con l’attributo ‘content’ a cui si assegna<br />

il nome di questo file.<br />

<br />

L’esempio mostra il caso in cui si definisce il nome ‘sgmltexi.info’. Si può vedere che<br />

non serve il marcatore di chiusura.<br />

• ‘settitle’<br />

Si tratta di un elemento vuoto, utilizzato per definire il titolo per la <strong>composizione</strong> in formato<br />

Info, attraverso il comando ‘@settitle’ di Texinfo. Si usa con l’attributo ‘content’ a cui<br />

si assegna questo titolo.<br />

<br />

L’esempio mostra il caso in cui si definisce il nome ‘Sgmltexi’. Si può vedere che non<br />

serve il marcatore di chiusura.<br />

• ‘setchapternewpage’<br />

Si tratta di un elemento vuoto, non essenziale, utilizzato per definire il comando corrispondente<br />

di Texinfo: ‘@setchapternewpage’. Si assegna una parola chiave all’attributo<br />

‘content’, tra ‘on’, ‘off’ e ‘odd’.<br />

<br />

L’esempio mostra la richiesta esplicita di iniziare ogni capitolo in una pagina nuova.<br />

Il programma frontale di Sgmltexi, ‘sgmltexi’, accetta un’opzione con lo stesso nome<br />

(‘--setchapternewpage={on|off|odd}’) che prevale su quanto stabilito nel sorgente<br />

SGML in questo modo.<br />

• ‘footnotestyle’<br />

Si tratta di un elemento vuoto, non essenziale, utilizzato per definire il comando corrispondente<br />

di Texinfo: ‘@footnotestyle’. Si assegna una parola chiave all’attributo<br />

‘content’, che può essere ‘end’ o ‘separate’.


Sgmltexi: struttura 2785<br />

<br />

L’esempio mostra la richiesta esplicita di inserire i piè pagina alla fine della pagina a cui si<br />

riferiscono.<br />

Il programma frontale di Sgmltexi accetta un’opzione con lo stesso nome<br />

(‘--footnotestyle={end|separate}’) che prevale su quanto stabilito nel sorgente<br />

SGML in questo modo.<br />

• ‘headings’<br />

Si tratta di un elemento vuoto, non essenziale, utilizzato per definire il comando corrispondente<br />

di Texinfo: ‘@headings’. Si assegna una parola chiave all’attributo ‘content’, che<br />

può essere: ‘on’, ‘off’, ‘single’, ‘double’, ‘singleafter’, ‘doubleafter’.<br />

<br />

L’esempio mostra la richiesta esplicita di mostrare le intestazioni.<br />

Il programma frontale di Sgmltexi accetta un’opzione con lo stesso nome, a cui si assegnano<br />

le stesse parole chiave (‘--headings=impostazione ’), che prevale su quanto stabilito nel<br />

sorgente SGML in questo modo.<br />

• ‘defindex’, ‘defcodeindex’<br />

Si tratta di elementi vuoti, non essenziali, utilizzati per definire i comandi corrispondenti di<br />

Texinfo: ‘@defindex’ e ‘@defcodeindex’. Si assegna un nome composto da due lettere<br />

all’attributo ‘name’, per definire un indice analitico aggiuntivo; in particolare, utilizzando<br />

l’elemento ‘defcodeindex’ si ottiene la creazione di un indice analitico composto da voci<br />

riprodotte in dattilografico.<br />

<br />

L’esempio mostra la definizione dell’indice analitico normale, identificato dalla sigla ‘sg’.<br />

Naturalmente, si possono inserire più elementi ‘defindex’ e ‘defcodeindex’, quanti<br />

sono gli indici specifici che si vogliono dichiarare.<br />

• ‘synindex’, ‘syncodeindex’<br />

Questi due elementi vuoti, vengono usati per copiare le voci di un indice analitico all’interno<br />

di un altro, come fanno i comandi corrispondenti di Texinfo: ‘@synindex’ e<br />

‘@syncodeindex’. Questi due elementi richiedono l’indicazione di due attributi, ‘from’<br />

e ‘to’, a cui si assegna rispettivamente la sigla dell’indice analitico di partenza e quella<br />

dell’indice di destinazione. Si osservi l’esempio:<br />

<br />

In questo caso, si trasferiscono tutte le voci dell’indice ‘fn’ (quello delle funzioni) nell’indice<br />

‘cp’ (l’indice analitico standard). In particolare, dal momento che si tratta di<br />

‘syncodeindex’, le voci che vengono trasferite saranno rese in modo dattilografico (con<br />

il comando ‘@code’).<br />

• ‘infodir’<br />

Questo elemento viene usato per definire una voce da inserire nell’elenco principale Info,<br />

quando il file relativo viene installato con il comando ‘install-info’. L’elemento<br />

contiene l’attributo ‘cat’ a cui si assegna la categoria, come si fa con il comando<br />

‘@dircategory’ di Texinfo.<br />

<br />

L’elemento ‘infodir’ può essere vuoto, come appena mostrato nell’esempio, ottenendo<br />

così l’inserimento di una sola riga nel corpo del comando ‘@direntry’ di Texinfo, utilizzando<br />

le informazioni già conosciute: il nome del file Info e il titolo del documento. Se si<br />

vuole fare a mano, è possibile inserire queste informazioni all’interno dell’elemento, come<br />

nell’esempio seguente:


2786 Sgmltexi: struttura<br />

<br />

* Sgmltexi: (sgmltexi). Il mio bel manuale di Sgmltexi<br />

* Introduzione: (sgmltexi)Intro 1. Introduzione al sistema Sgmltexi<br />

<br />

256.1.3 Pagine iniziali<br />

L’elemento ‘titlepage’ viene utilizzato per circoscrivere le informazioni che appaiono nelle<br />

primissime pagine del documento. L’ordine degli elementi contenuti è importante e gli errori<br />

vengono segnalati dal sistema di analisi SGML.<br />

• ‘title’<br />

L’elemento ‘title’ serve a contenere il titolo del documento nella sua forma stampata. Si<br />

traduce in Texinfo nel comando ‘@title’. Il suo utilizzo è molto semplice, come si vede<br />

dall’esempio seguente:<br />

Sgmltexi<br />

• ‘subtitle’<br />

Questo elemento permette l’indicazione di un sottotitolo. Non è obbligatorio e può essere<br />

usato più volte per indicare più sottotitoli successivi.<br />

An alternate way to write Texinfo documentation<br />

• ‘abstract’<br />

L’elemento ‘abstract’ è facoltativo e si può usare una volta sola. Serve a racchiudere<br />

dei blocchi di testo, per esempio elementi ‘p’, che descrivono in breve il contenuto<br />

del documento. Il contenuto di questo elemento viene utilizzato nella <strong>composizione</strong> Info,<br />

inserendolo nella parte iniziale del nodo ‘top’.<br />

<br />

Sgmltexi is an SGML system (DTD and tools) to<br />

make Texinfo documentation using SGML...<br />

...<br />

...<br />

<br />

• ‘author’<br />

Questo elemento, che deve essere indicato almeno una volta e può ripetersi a piacere, serve<br />

a contenere il nominativo di uno degli autori del documento. In Texinfo si traduce nel<br />

comando ‘@author’.<br />

Tizio Tizi &lt;tizio@dinkel.brot.dg&gt;<br />

Caio Cai &lt;caio@dinkel.brot.dg&gt;<br />

L’esempio mostra anche l’inclusione dell’indirizzo di posta elettronica, che comunque non<br />

sarebbe necessario.<br />

• ‘frontcovertext’<br />

Questo elemento facoltativo, permette di inserire dei blocchi di testo all’interno della<br />

copertina.<br />

• ‘tpextra’<br />

Questo elemento facoltativo, può essere usato in diverse situazioni all’interno delle pagine<br />

iniziali. Il suo scopo è quello di delimitare dei blocchi di testo che non hanno trovato una<br />

classificazione specifica.<br />

Per la precisione, questo elemento può apparire subito prima e subito dopo dell’elemento<br />

‘legal’, inoltre, se viene usato l’elemento ‘dedications’, può essere aggiunto subito<br />

dopo di questo.


Sgmltexi: struttura 2787<br />

• ‘legal’<br />

L’elemento ‘legal’ si articola a sua volta in altri elementi più dettagliati, allo scopo di<br />

descrivere tutto ciò che rappresenta gli aspetti legali del documento: il copyright, la nota<br />

sui diritti (concessi o esclusi), oltre ad altre informazioni amministrative legate all’edizione.<br />

– ‘copyright’<br />

Questo elemento serve a contenere l’indicazione relativa ai diritti di autore. Se nel tempo<br />

si sono succeduti diversi proprietari, l’elemento ‘copyright’ può essere indicato<br />

più volte, in base alla necessità (in base a quanto concordato). Si osservi l’esempio<br />

seguente:<br />

Copyright &copy; 1987-1999 Tizio Tizi<br />

Copyright &copy; 2000 Caio Cai<br />

– ‘publishnote’<br />

L’elemento ‘publishnote’, facoltativo, permette l’inclusione di blocchi di testo il<br />

cui scopo è quello di inserire informazioni relative alla pubblicazione. Si può usare in<br />

modo simile a quanto si vede nell’esempio seguente:<br />

<br />

Published by...<br />

...<br />

<br />

– ‘license’<br />

L’elemento ‘license’ è fatto per contenere blocchi di testo che descrivono le condizioni<br />

con le quali è rilasciato il documento, che solitamente si rifanno a una licenza<br />

allegata da qualche parte (eventualmente in un’appendice).<br />

<br />

Permission is granted to copy, distribute and/or<br />

modify this document under the terms of the GNU Free<br />

Documentation License, Version 1.1 or any later version<br />

published by the Free Software Foundation; with no<br />

Invariant Sections, with no Front-Cover Texts, and with<br />

no Back-Cover Texts. A copy of the license is included<br />

in the section entitled "GNU Free Documentation<br />

License".<br />

<br />

– ‘coverart’<br />

L’elemento ‘coverart’, facoltativo, consente di scrivere una nota su chi sia l’ideatore<br />

della copertina. In generale, se si usa Sgmltexi non ha senso preoccuparsi di una<br />

cosa del genere, dal momento che tutto viene guidato dallo schema SGML del DTD.<br />

Tuttavia, esiste la possibilità di fare questa annotazione ugualmente.<br />

<br />

Cover art by ...<br />

<br />

L’elemento ‘legal’ può essere usato anche in modo più semplice, se la struttura prevista<br />

non soddisfa le esigenze reali. In pratica, al posto degli elementi appena descritti, può<br />

contenere dei semplici blocchi di testo, come nell’esempio seguente:<br />

<br />

Copyright &copy; 2000 ...<br />

Published by...<br />

Permission is granted to make and distribute<br />

verbatim copies of this manual...<br />

Cover art by ...<br />

<br />

• ‘dedications’


2788 Sgmltexi: struttura<br />

Dopo l’elemento ‘legal’, l’elemento ‘dedications’ consente di elencare le dediche del<br />

documento. Queste appaiono esclusivamente nella <strong>composizione</strong> stampata, in una pagina<br />

apposita. L’elemento ‘dedications’ è predisposto per l’inserimento di blocchi di testo di<br />

qualunque genere.<br />

<br />

Ad Anna,la mia amata.<br />

<br />

256.1.4 Indice generale<br />

Dopo l’elemento ‘titlepage’ è possibile collocare uno o più indici generali, più o meno<br />

dettagliati.<br />

• ‘contents’<br />

L’elemento ‘content’, vuoto, richiede l’inserimento di un indice generale dettagliato. Si<br />

traduce in pratica nel comando ‘@content’ di Texinfo.<br />

• ‘shortcontents’, ‘summarycontents’<br />

Questi due elementi, vuoti, servono a includere rispettivamente i comandi<br />

‘@shortcontent’ e ‘@summarycontent’ di Texinfo. Lo scopo è quello di ottenere<br />

un tipo di indice generale ridotto. Se si usa questo tipo di indice, si include solo uno dei<br />

due elementi in questione.<br />

256.1.5 Nodi e menù Info iniziale<br />

In mancanza di indicazioni, Sgmltexi gestisce da solo i collegamenti riferiti al nodo ‘Top’, oltre<br />

a un menù unico per Info, collocato nello stesso nodo iniziale.<br />

Volendo è possibile dichiarare espressamente il nodo ‘Top’, attraverso l’elemento ‘topnode’, che<br />

si usa vuoto con tre eventuali attributi: ‘next’, ‘prev’ e ‘up’. L’elemento ‘topnode’ si colloca,<br />

eventualmente, subito dopo gli indici generali.<br />

<br />

Dopo l’elemento ‘topnode’, è possibile specificare il menù iniziale in modo dettagliato, attraverso<br />

l’elemento ‘menu’. L’esempio seguente mostra un caso abbastanza articolato, benché<br />

abbreviato, in cui si vede anche l’inclusione dell’elemento ‘detailmenu’:<br />

<br />

* Copying:: Your rights.<br />

* Overview:: Texinfo in brief.<br />

...<br />

* Structuring:: How to create chapters, sections, subsections,<br />

appendices, and other parts.<br />

* Nodes:: How to write nodes.<br />

...<br />

<br />

--- The Detailed Node Listing ---<br />

Overview of Texinfo<br />

* Reporting Bugs:: Submitting effective bug reports.<br />

* Using Texinfo:: Create printed or online output.<br />

* Info Files:: What is an Info file?


Sgmltexi: struttura 2789<br />

...<br />

<br />

<br />

Naturalmente, non si tratta di elementi indispensabili, ma solo utili se si desidera avere il controllo<br />

della gestione dei nodi del documento che si ottiene.<br />

256.1.6 Introduzione<br />

Dopo l’elemento ‘head’ ci può essere l’elemento ‘intro’, il cui scopo è quello di definire uno<br />

spazio in cui i capitoli assumono il ruolo di sezioni introduttive, non numerate. Nell’ambito di<br />

questo spazio, i «capitoli» sono delimitati nello stesso modo utilizzato nel corpo del documento<br />

(l’elemento ‘body’) e nelle appendici (l’elemento ‘appendix’).<br />

<br />

Introduction to Sgmltexi<br />

Sgmltexi is a DTD with tools to get Texinfo...<br />

Sgmltexi manage Texinfo nodes automatically,...<br />

<br />

256.1.7 Corpo<br />

Il corpo del documento è contenuto nell’elemento ‘body’, che si colloca dopo l’elemento ‘head’<br />

e dopo l’elemento ‘intro’ eventuale.<br />

Il corpo può essere suddiviso in capitoli, oppure in parti, o anche in tomi, a seconda della dimensione<br />

del progetto di documentazione che si intende avviare. Lo spazio del tomo, della parte,<br />

del capitolo, o di una classificazione inferiore, non è delimitato esplicitamente, in quanto appare<br />

soltanto la dichiarazione del titolo, all’interno di un elemento che cambia a seconda del livello<br />

gerarchico. In pratica, il titolo di un tomo è racchiuso nell’elemento ‘tomeheading’, mentre<br />

quello di una parte è inserito nell’elemento ‘partheading’.<br />

I capitoli e le classificazioni inferiori hanno titoli delimitati da elementi analoghi a quelli<br />

dell’HTML: ‘h1’, ‘h2’, ‘h3’ e ‘h4’. Questa classificazione, a partire da ‘h1’ in giù, riguarda<br />

nello stesso modo l’introduzione e l’appendice.<br />

<br />

Networking<br />

IP protocol history<br />

Bla bla bla...<br />

Bla bla bla...<br />

ISO-OSI model<br />

Bla bla bla...<br />

Bla bla bla...<br />

IPv4 and IPv6<br />

Bla bla bla...<br />

...<br />


2790 Sgmltexi: struttura<br />

Ogni elemento che racchiude un titolo consente l’inserimento dell’attributo ‘id’, il cui scopo<br />

è quello di definire una stringa di identificazione, da usare come obiettivo per i riferimenti<br />

incrociati.<br />

IP protocol history<br />

È importante rammentare che, a causa di una limitazione progettuale di Texinfo, queste<br />

etichette per i riferimenti ipertestuali non possono contenere la virgola.<br />

Ogni elemento che racchiude un titolo consente l’inserimento degli attributi ‘node’ e ‘menu’,<br />

con i quali è possibile stabilire il nome del nodo relativo e la descrizione che deve apparire nel<br />

menù (purché questo sia generato automaticamente). In mancanza di queste indicazioni, vengono<br />

generati dei nomi in modo automatico, mentre si usa il titolo come descrizione del nodo.<br />

Storia di IPv4<br />

Ogni elemento che racchiude un titolo consente l’inserimento dell’attributo ‘numbered’, a cui<br />

si possono assegnare esclusivamente le parole chiave ‘on’ oppure ‘off’. In condizioni normali,<br />

l’attributo contiene la parola chiave ‘on’, che implica la numerazione dei titoli, salvo il caso<br />

dell’introduzione. Assegnando esplicitamente la parola chiave ‘off’ si ottiene un titolo non<br />

numerato in un contesto che non lo prevederebbe.<br />

Riconoscimenti<br />

Ogni elemento che racchiude un titolo consente l’inserimento degli attributi ‘next’, ‘prev’ e<br />

‘up’. Con questi si può alterare la catena di scorrimento dei nodi, specificandoli manualmente. In<br />

generale dovrebbe essere preferibile lasciare fare a Sgmltexi.<br />

256.1.8 Appendice<br />

Dopo il corpo del documento, delimitato dall’elemento ‘body’, può apparire l’appendice, contenuta<br />

nell’elemento ‘appendix’. Al suo interno si possono inserire dei «capitoli», introdotti da un<br />

titolo contenuto in un elemento ‘h1’, che vengono trattati correttamente come appendici. Dopo i<br />

titoli delimitati da ‘h1’, sono ammissibili naturalmente anche segmenti di livello inferiore.<br />

<br />

GNU Free Documentation License<br />

GNU Free Documentation License<br />

Version 1.1, March 2000<br />

<br />

Copyright &copy; 2000 Free Software Foundation, Inc.<br />

59 Temple Place, Suite 330, Boston, MA 02111-1307 USA<br />

Everyone is permitted to copy and distribute verbatim copies<br />

of this license document, but changing it is not allowed.<br />

<br />

...<br />

...<br />


Sgmltexi: struttura 2791<br />

256.1.9 Indici analitici<br />

Dopo il corpo e dopo il blocco delle appendici, è possibile inserire uno o più indici analitici.<br />

Questi si dichiarano con un titolo, attraverso l’elemento ‘indexheading’ e con il riferimento al<br />

tipo di indice che si vuole esattamente, con l’elemento vuoto ‘printindex’. Si osservi l’esempio<br />

seguente in cui si inseriscono due indici: quello delle funzioni (la sigla ‘fn’) e quello standard (la<br />

sigla ‘cp’).<br />

Index of functions<br />

<br />

Concept index<br />

<br />

Come si vede dall’esempio, l’elemento ‘printindex’ ha l’attributo ‘name’, a cui si assegna la<br />

sigla corrispondente all’indice che si vuole inserire.<br />

256.2 S<strong>composizione</strong> del documento, nodi e menù Info<br />

Per scrivere della documentazione di qualità, secondo i canoni di Texinfo, è necessario gestire<br />

direttamente i nodi e i menù. Con Sgmltexi si possono dimenticare i nodi e i menù, ma il risultato<br />

in formato Info potrebbe soffrirne. Tuttavia, come in parte è già stato mostrato, è possibile<br />

scegliere diversi livelli di automatismo in questa gestione.<br />

Gli elementi usati per delimitare le intestazioni, da ‘h1’ a ‘h4’, possono incorporare gli attributi<br />

‘node’ e ‘menu’. Ciò prende il sopravvento sulla determinazione automatica relativa. Si osservi<br />

l’esempio:<br />

<br />

IP protocol history<br />

In questo caso, si ottiene l’inserimento della riga seguente nel menù relativo:<br />

* history:: History of IP protocol<br />

I due attributi, ‘node’ e ‘menu’, possono essere usati in modo indipendente: l’attributo che non<br />

viene usato, viene sostituito in modo automatico.<br />

Avendo accesso ai nodi, è possibile farvi riferimento per dei riferimenti incrociati, senza<br />

bisogno di usare l’attributo ‘id’.<br />

Come già descritto in precedenza, Sgmltexi crea automaticamente il nodo ‘Top’ iniziale. Il menù<br />

relativo può essere definito esplicitamente e in tal caso tutti i nodi e tutte le descrizioni relative<br />

devono essere inseriti manualmente.<br />

Inserendo l’elemento ‘menu’ alla fine del testo di un capitolo, o di una sezione inferiore, si ottiene<br />

l’aggiunta di un menù Info in corrispondenza di quel punto. Si osservi l’esempio:<br />

IP protocol history<br />

Bla bla bla...<br />

Bla bla bla...<br />

<br />

ISO-OSI model<br />

Bla bla bla...


2792 Sgmltexi: struttura<br />

Bla bla bla...<br />

More information<br />

Bla bla bla...<br />

...<br />

In questo caso, si ottiene l’inserzione di un menù, gestito automaticamente, prima delle sezioni<br />

di livello ‘h2’. Volendo, si può indicare il menù in modo preciso, come si vede di seguito:<br />

<br />

* IP layer:: IP ISO-OSI layer model<br />

* more on IP:: More details on IP<br />

<br />

Quando un menù viene descritto in questo modo, i nomi dei nodi devono essere identici a quelli<br />

dichiarati negli elementi delle intestazioni. In pratica, scrivendo un menù in modo manuale, anche<br />

i nodi devono essere dichiarati esattamente, come si vede qui:<br />

IP protocol history<br />

Bla bla bla...<br />

Bla bla bla...<br />

<br />

* IP layer:: IP ISO-OSI layer model<br />

* more on IP:: More details on IP<br />

<br />

ISO-OSI model<br />

Bla bla bla...<br />

Bla bla bla...<br />

More information<br />

Bla bla bla...<br />

...<br />

È evidente, in questa situazione, che l’attributo ‘menu’, il cui scopo sarebbe quello di controllare<br />

la descrizione del nodo nel menù, non può essere preso in considerazione in questo caso.<br />

256.2.1 Numerazione o meno dei titoli<br />

Texinfo consente di inserire dei titoli riferiti a capitoli o sezioni inferiori, con o senza numerazione.<br />

Inoltre, consente anche di dichiarare dei titoli che non devono apparire nell’indice generale.<br />

Per controllare questa possibilità con Sgmltexi, si può utilizzare l’attributo ‘type’ che riguarda<br />

tutti gli elementi ‘hn’:<br />

titolo<br />

In mancanza dell’indicazione dell’attributo, è come se gli fosse stata assegnata la parola chiave<br />

‘numbered’, con la quale i titoli del corpo e delle appendici sono numerati (con numeri o lettere<br />

rispettivamente). Utilizzando la parola chiave ‘numbered’ si ottiene l’inserimento di un titolo<br />

non numerato (nel caso dell’introduzione è sempre senza numerazione); con la parola chiave<br />

‘heading’ si ottiene un titolo non numerato e anche non segnalato nell’indice generale (in questo<br />

senso può essere utile anche nell’introduzione).


Sgmltexi: struttura 2793<br />

256.3 Gestire più derivazioni di uno stesso progetto di<br />

documentazione<br />

Attraverso Sgmltexi è possibile gestire più derivazioni distinte di un progetto di documentazione<br />

unico. Per ottenere questo risultato, Prima di passare all’analisi SGML, il sorgente viene filtrato in<br />

base a dei comandi particolari che delimitano lo spazio di queste derivazioni. L’esempio seguente<br />

mostra i comandi che delimitano uno spazio relativo alla derivazione ‘PIPPO’:<br />

<br />

...<br />

...<br />

...<br />

<br />

Si può osservare che si tratta di un commento SGML speciale, che viene preso in considerazione<br />

da Sgmltexi prima dell’analisi SGML vera e propria.<br />

Questi comandi devono apparire da soli in una riga; in pratica, non è ammissibile circoscrivere<br />

uno spazio interno a una riga in questo modo.<br />

Il principio di funzionamento è molto semplice: vengono incluse le parti di sorgente delimitate<br />

in questo modo per la derivazione a cui si fa riferimento. Quindi, se si vuole un pezzo qui e uno<br />

lì, <strong>occorre</strong> ripetere l’inserimento di questi comandi.<br />

La derivazione predefinita è quella denominata ‘MAIN’, per cui è come se, in mancanza<br />

di altre indicazioni contrarie, il sorgente fosse racchiuso tra ‘’ e<br />

‘’:<br />

<br />

<br />

<br />

...<br />

...<br />

...<br />

<br />

<br />

Naturalmente, nulla vieta di usare esplicitamente queste dichiarazioni per la derivazione<br />

principale.<br />

Per <strong>selezionare</strong> la <strong>composizione</strong> di una derivazione diversa da quella principale (predefinita),<br />

si usa l’opzione ‘--deriv=derivazione’. Supponendo di voler eseguire la <strong>composizione</strong> in<br />

PostScript della derivazione ‘PIPPO’ del file ‘prova.sgml’, basta usare il comando seguente:<br />

$ sgmltexi --deriv=PIPPO --ps prova.sgml<br />

Questa forma di selezione può essere gestita anche all’interno di file secondari. Sgmltexi è organizzato<br />

a questo proposito per gestire solo file interni al sistema, che nel sorgente principale<br />

vengono gestiti come nell’esempio seguente:<br />

<br />

-- ... --<br />

]><br />

Come si vede, si tratta di dichiarazioni che si fanno nel preambolo SGML. Sgmltexi deve identificarle<br />

preventivamente, per poter attuare il filtro anche in tali file. Per questo motivo, è necessario<br />

che non ci sia più di un’istruzione del genere su una sola riga.


2794 Sgmltexi: struttura<br />

È importante sottolineare che questi comandi speciali riguardano il file in cui si trovano. Pertanto,<br />

se ci si trova in una situazione simile a quella che si vede nell’esempio sottostante,<br />

<br />

&INTRO;<br />

<br />

i comandi indicano semplicemente di includere l’istruzione SGML ‘&INTRO;’. Se poi si vuole<br />

includere effettivamente tutto o anche solo parte del file corrispondente (‘formalita/<br />

introduzione.sgml’), bisognerà che al suo interno ci siano altre istruzioni del genere;<br />

diversamente sarebbe come includere un file completamente vuoto.<br />

256.4 Codifica<br />

Sgmltexi ha una gestione incompleta per le codifiche ISO 8859-n. È incompleta perché Texinfo<br />

non è in grado di riprodurre tutti i caratteri. Ci sono due modi per definire l’uso di una codifica<br />

particolare con Sgmltexi: l’opzione ‘--input-encoding’ e l’attributo ‘charset’ all’interno<br />

dell’elemento ‘sgmltexi’.<br />

La scelta genera risultati differenti. L’opzione ‘--input-encoding’ genera una trasformazione<br />

dei caratteri in entità SGML, che successivamente sono tradotte in codice Texinfo. In questo<br />

modo, il codice Texinfo che si ottiene è sicuramente in ASCII puro (ISO 646), dove le entità<br />

che non hanno alcuna corrispondenza in Texinfo. vengono mostrate come ‘[ETH ]’, tanto<br />

per fare un esempio. L’uso dell’attributo ‘charset’ si traduce semplicemente nel comando<br />

‘@documentencoding’; in certe situazioni, il risultato della <strong>composizione</strong> può essere buono o<br />

meno. A seconda del risultato migliore che si riesce a ottenere, si può scegliere un modo invece<br />

dell’altro.<br />

Una buona strategia può essere l’uso dell’attributo ‘charset’ in ogni caso, aggiungendo l’opzione<br />

‘--input-encoding’ quando Texinfo non genera una <strong>composizione</strong> piacevole (di solito<br />

quando si genera un formato per la stampa).<br />

256.4.1 Entità standard e non standard<br />

Il DTD di Sgmltexi include tutte le entità standard ISO 8879. Tuttavia, non tutte le entità sono<br />

gestibili da Texinfo; pertanto, quando si usa un’entità non gestibile, viene mostrata nella<br />

<strong>composizione</strong> finale come racchiusa tra parentesi quadre, per esempio come ‘[ETH ]’.<br />

Sgmltexi mette a disposizione qualche entità non standard, necessaria per mantenere la<br />

compatibilità con Texinfo. Queste entità speciali sono elencate nella tabella 256.4.<br />

Tabella 256.4. Entità non standard.<br />

Macro SGML Comando Texinfo Descrizione<br />

&dots; @dots{} Tre puntini.<br />

&enddots; @enddots{} Quattro puntini.<br />

&TeX; @TeX{} Il nome «TeX»<br />

&result; @result{}<br />

&expansion; @expansion{}<br />

&print; @print{}<br />

&error; @error{}<br />

&point; @point{}<br />

&today; @today{}<br />

&esexcl; @! Punto esclamativo alla fine di una frase.<br />

&esperiod; @. Punto fermo alla fine di una frase.


Sgmltexi: struttura 2795<br />

Macro SGML Comando Texinfo Descrizione<br />

&nes; @: Frase che non si conclude.<br />

&esquest; @? Punto interrogativo alla fine di una frase.<br />

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org


Sgmltexi: contenuti<br />

Capitolo 257<br />

Dopo la struttura generale, il sorgente Sgmltexi si articola generalmente in elementi che possono<br />

essere classificati sommariamente in blocchi e in testo interno a un blocco. Nei DTD comuni si<br />

utilizzano frequentemente le entità parametriche ‘%block;’ e ‘%inline;’, per definire questi<br />

due grandi raggruppamenti. Nel DTD di Sgmltexi si usa la stessa convenzione e in questo senso<br />

vanno interpretate tali sigle nelle tabelle riassuntive.<br />

A titolo di esempio, un blocco è qualcosa di simile a un paragrafo, un elenco, una tabella; un<br />

elemento interno alla riga è fatto per contenere del testo, eventualmente assieme a delle enfatizzazioni<br />

di qualche genere. Di solito, anche se questo fatto non può valere in generale, un elemento<br />

interno alla riga è fatto per contenere testo o altri elementi dello stesso genere; al contrario, un<br />

elemento che costituisce un blocco, può contenere altri blocchi, oppure del testo interno alla riga.<br />

Il DTD di Sgmltexi non prevede elementi che possano contenere testo interno alla riga o blocchi<br />

a scelta, come accade invece nell’HTML.<br />

257.1 Paragrafi<br />

I blocchi di testo più comuni sono dei paragrafi, delimitati dall’elemento ‘p’, il quale può apparire<br />

con un rientro iniziale o meno, a seconda dell’uso dell’attributo ‘indent’. I paragrafi, compresi<br />

quelli centrati che si ottengono con l’elemento ‘center’, contengono testo o altri elementi interni<br />

alla riga.<br />

Tabella 257.1. Paragrafi con Sgmltexi.<br />

Elemento o Aperturra<br />

Texinfo<br />

Chiusu-<br />

Descrizione o corrispondenza con<br />

Contenuto<br />

attributo<br />

p Sì Sì %inline;<br />

Blocco di testo elementare, riconducibile<br />

al paragrafo.<br />

indent -- -- Attributo Rientro prima riga: ‘on’, ‘off’.<br />

center Sì Sì %inline;<br />

Blocco di testo centrato:<br />

‘@center’.<br />

257.2 Indici e riferimenti incrociati<br />

Sgmltexi mette a disposizione diversi elementi il cui scopo è quello di permettere delle inserzioni<br />

per generare degli indici o dei riferimenti incrociati, riproducendo i comandi equivalenti di<br />

Texinfo.<br />

Le voci degli indici analitici vengono inserite attraverso un gruppo di elementi vuoti: ‘cindex’,<br />

‘findex’, ‘vindex’, ‘kindex’, ‘pindex’, ‘tindex’ e ‘userindex’. Tutti questi elementi hanno<br />

lo stesso attributo ‘entry’, che serve a specificare la voce da inserire nell’indice relativo. In<br />

particolare, l’elemento ‘userindex’ ha in più l’attributo ‘name’ per specificare l’indice al quale<br />

si vuole fare riferimento.<br />

Questi elementi possono essere usati solo dopo la dichiarazione di una sezione (un titolo di<br />

qualunque tipo, dal tomo in giù), ma prima del testo normale che ne seguirebbe. Per esempio<br />

così:<br />

IP protocol history<br />

<br />

<br />

Bla bla bla...<br />

2796


Sgmltexi: contenuti 2797<br />

La tabella 257.2 riassume brevemente l’uso di questi elementi.<br />

Tabella 257.2. Voci degli indici analitici.<br />

Elemento o Aperturra<br />

Texinfo<br />

Chiusu-<br />

Descrizione o corrispondenza con<br />

Contenuto<br />

attributo<br />

cindex Sì Vuoto Voce dell’indice analitico normale.<br />

entry -- -- Attributo Voce da inserire nell’indice.<br />

Voce dell’indice analitico delle<br />

findex Sì Vuoto<br />

funzioni.<br />

entry -- -- Attributo Voce da inserire nell’indice.<br />

Voce dell’indice analitico delle<br />

vindex Sì Vuoto<br />

variabili.<br />

entry -- -- Attributo Voce da inserire nell’indice.<br />

kindex Sì Vuoto<br />

Voce dell’indice analitico dei tasti<br />

premuti.<br />

entry -- -- Attributo Voce da inserire nell’indice.<br />

pindex Sì Vuoto<br />

Voce dell’indice analitico dei programmi.<br />

entry -- -- Attributo Voce da inserire nell’indice.<br />

Voce dell’indice analitico dei tipi di<br />

tindex Sì Vuoto<br />

dati.<br />

entry -- -- Attributo Voce da inserire nell’indice.<br />

Voce di un indice analitico definito<br />

userindex Sì Vuoto<br />

dall’utilizzatore.<br />

entry -- -- Attributo Voce da inserire nell’indice.<br />

name -- -- Sigla identificativa dell’indice definito<br />

dall’utente.<br />

Attributo<br />

Inserisce l’elenco delle voci dell’indice<br />

specificato.<br />

printindex Sì Vuoto<br />

name -- -- Attributo Sigla identificativa dell’indice.<br />

Ogni indice analitico si distingue in base a una sigla di due lettere. Gli indici analitici già previsti<br />

da Texinfo hanno una sigla fissa, mentre tutte le altre combinazioni possono essere usate per gli<br />

indici stabiliti dall’utilizzatore. La tabella 257.3 riassume le sigle degli indici standard, la cui<br />

conoscenza è necessaria per poter usare correttamente l’elemento ‘printindex’ allo scopo di<br />

riprodurre l’elenco dell’indice relativo.<br />

Tabella 257.3. Sigle identificative degli indici analitici standard.<br />

Sigla<br />

cp<br />

ky<br />

pg<br />

fn<br />

vr<br />

tp<br />

Descrizione<br />

Indice analitico normale.<br />

Indice analitico dell’uso della tastiera.<br />

Indice analitico dei programmi.<br />

Indice analitico delle funzioni.<br />

Indice analitico delle variabili.<br />

Indice analitico dei tipi di dati.<br />

Gli elementi utilizzati per realizzare dei riferimenti incrociati sono vuoti e sono sempre interni<br />

alla riga di testo. Tutte le informazioni necessarie sono passate attraverso attributi. Dal momento<br />

che questi elementi rispecchiano fedelmente i comandi equivalenti di Texinfo, viene mostrata<br />

solo la tabella 257.4, senza entrare nel dettaglio del significato di ognuno di loro.


2798 Sgmltexi: contenuti<br />

Tabella 257.4. Riferimenti incrociati.<br />

Elemento o Aperturra<br />

Texinfo<br />

Chiusu-<br />

Descrizione o corrispondenza con<br />

Contenuto<br />

attributo<br />

anchor Sì Vuoto Comando ‘@anchor’ di Texinfo.<br />

id -- -- Attributo<br />

Stringa di identificazione dell’ancora.<br />

xref Sì Vuoto Comando ‘@xref’ di Texinfo.<br />

id -- -- Nodo o ancora a cui si fa riferimento.<br />

Attributo<br />

name -- -- Attributo Nome del riferimento.<br />

title -- -- Titolo o argomento a cui si fa<br />

Attributo<br />

riferimento.<br />

info -- -- Attributo Nome del file Info.<br />

ptitle -- -- Attributo Titolo dell’edizione stampata.<br />

ref Sì Vuoto Comando ‘@ref’ di Texinfo.<br />

id -- -- Nodo o ancora a cui si fa riferimento.<br />

Attributo<br />

name -- -- Attributo Nome del riferimento.<br />

title -- -- Titolo o argomento a cui si fa<br />

Attributo<br />

riferimento.<br />

info -- -- Attributo Nome del file Info.<br />

ptitle -- -- Attributo Titolo dell’edizione stampata.<br />

pxref Sì Vuoto Comando ‘@pxref’ di Texinfo.<br />

id -- -- Attributo<br />

Nodo o ancora a cui si fa riferimento.<br />

name -- -- Attributo Nome del riferimento.<br />

title -- -- Titolo o argomento a cui si fa<br />

Attributo<br />

riferimento.<br />

info -- -- Attributo Nome del file Info.<br />

ptitle -- -- Attributo Titolo dell’edizione stampata.<br />

inforef Sì Vuoto Comando ‘@inforef’ di Texinfo.<br />

id -- -- Nodo o ancora a cui si fa riferimento.<br />

Attributo<br />

name -- -- Attributo Nome del riferimento.<br />

info -- -- Attributo Nome del file Info.<br />

uref Sì Vuoto Comando ‘@uref’ di Texinfo.<br />

uri -- -- Attributo<br />

Indirizzo URI a cui si fa riferimento.<br />

name -- -- Attributo Nome del riferimento.<br />

replace -- -- Attributo Testo di rimpiazzo da mostrare.<br />

email Sì Vuoto Comando ‘@email’ di Texinfo.<br />

email -- -- Attributo Indirizzo di posta elettronica.<br />

name -- -- Attributo Titolo o descrizione dell’indirizzo.<br />

In particolare, è opportuno osservare che l’attributo ‘id’ degli elementi ‘hn’, ‘partheading’<br />

e ‘tomeheading’, è un’ancora a cui possono puntare tutti i vari tipi di riferimenti incrociati<br />

disponibili (tranne ‘uref’ e ‘email’ che puntano a degli URI).<br />

L’esempio seguente mostra come usare l’elemento ‘pxref’ in modo molto semplice:<br />

Sgmltexi crea automaticamente il nodo Top. Come già spiegato in<br />

precedenza, (), il menù può essere...


Sgmltexi: contenuti 2799<br />

257.3 Delimitazione di parole e di frasi<br />

Un certo numero di elementi serve a delimitare parole o frasi, per qualche motivo. Il DTD di<br />

Sgmltexi è molto permissivo, in modo tale che ogni elemento di questi può contenere qualunque<br />

altro elemento interno alla riga di testo. Ciò è stato fatto per assicurare la massima compatibilità<br />

con Texinfo, ma in futuro potrebbero essere poste delle piccole limitazioni.<br />

La tabella 257.5 elenca questi elementi, assieme a ‘kbdinputstyle’, che si usa per specificare<br />

lo stile di rappresentazione del contenuto dell’elemento ‘kbd’.<br />

Tabella 257.5. Delimitazione di parole e frasi.<br />

Elemento o Aperturra<br />

Texinfo<br />

Chiusu-<br />

Descrizione o corrispondenza con<br />

Contenuto<br />

attributo<br />

code Sì Sì %inline; Comando ‘@code’ di Texinfo.<br />

kbd Sì Sì %inline; Comando ‘@kbd’ di Texinfo.<br />

kbdinputstyle<br />

Comando ‘@kbdinputstyle’ di<br />

Sì Vuoto<br />

Texinfo.<br />

style -- -- Stile: ‘code’, ‘example’,<br />

Attributo<br />

‘distinct’.<br />

key Sì Sì %inline; Comando ‘@key’ di Texinfo.<br />

samp Sì Sì %inline; Comando ‘@samp’ di Texinfo.<br />

var Sì Sì %inline; Comando ‘@var’ di Texinfo.<br />

env Sì Sì %inline; Comando ‘@env’ di Texinfo.<br />

file Sì Sì %inline; Comando ‘@file’ di Texinfo.<br />

command Sì Sì %inline; Comando ‘@command’ di Texinfo.<br />

option Sì Sì %inline; Comando ‘@option’ di Texinfo.<br />

dfn Sì Sì %inline; Comando ‘@dfn’ di Texinfo.<br />

cite Sì Sì %inline; Comando ‘@cite’ di Texinfo.<br />

acronym Sì Sì %inline; Comando ‘@acronym’ di Texinfo.<br />

url Sì Sì %inline; Comando ‘@url’ di Texinfo.<br />

emph Sì Sì %inline; Comando ‘@emph’ di Texinfo.<br />

strong Sì Sì %inline; Comando ‘@strong’ di Texinfo.<br />

sc Sì Sì %inline; Comando ‘@sc’ di Texinfo.<br />

roman Sì Sì %inline; Comando ‘@r’ di Texinfo.<br />

italic Sì Sì %inline; Comando ‘@i’ di Texinfo.<br />

bold Sì Sì %inline; Comando ‘@b’ di Texinfo.<br />

typewriter Sì Sì %inline; Comando ‘@t’ di Texinfo.<br />

Viene mostrato un esempio molto semplice dell’uso dell’elemento ‘strong’:<br />

Pinco Pallino è un uomo molto vecchio...<br />

Tizio Tizi ha studiato tecnologia delle<br />

comunicazioni...<br />

257.4 Delimitazione di blocchi di testo<br />

Alcuni elementi servono a delimitare blocchi di testo, o un tipo particolare di testo interno alle righe.<br />

Il DTD di Sgmltexi è molto permissivo per assicurare la massima compatibilità con Texinfo,<br />

ma in futuro potrebbero essere poste delle piccole limitazioni.<br />

La tabella 257.6 elenca questi elementi, assieme a ‘pre’, che permette di inserire del testo preformattato,<br />

e a ‘exdent’, utilizzato all’interno di ‘pre’ per ottenere delle righe che sporgono verso<br />

l’esterno.


2800 Sgmltexi: contenuti<br />

Tabella 257.6. Delimitazione di blocchi di testo.<br />

Elemento o Aperturra<br />

Texinfo<br />

Chiusu-<br />

Descrizione o corrispondenza con<br />

Contenuto<br />

attributo<br />

exdent Sì Sì %inline; Comando ‘@exdent’ di Texinfo.<br />

pre Sì Sì %inline; Testo preformattato.<br />

quotation<br />

Comando ‘@quotation’ di Texinfo.<br />

Sì Sì %block;<br />

display Sì Sì %block; o ‘pre’ Comando ‘@display’ di Texinfo.<br />

smalldisplay<br />

Comando ‘@smalldisplay’ di<br />

Sì Sì %block; o ‘pre’<br />

Texinfo.<br />

example Sì Sì %block; o ‘pre’ Comando ‘@example’ di Texinfo.<br />

smallexample<br />

Comando ‘@smallexample’ di<br />

Sì Sì %block; o ‘pre’<br />

Texinfo.<br />

Comando ‘@flushleft’ di Texinfo.<br />

flushleft Sì Sì %inline;<br />

flushright<br />

Comando ‘@flushright’ di Texinfo.<br />

Sì Sì %inline;<br />

lisp Sì Sì %block; o ‘pre’ Comando ‘@lisp’ di Texinfo.<br />

smalllisp<br />

Comando ‘@smalllisp’ di Texinfo.<br />

Sì Sì %block; o ‘pre’<br />

Comando ‘@cartouche’ di Texinfo.<br />

cartouche Sì Sì %block; o ‘pre’<br />

format Sì Sì %block; o ‘pre’ Comando ‘@format’ di Texinfo.<br />

Comando ‘@smallformat’ di Texinfo.<br />

smallformat Sì Sì %block; o ‘pre’<br />

texinfo Sì Sì Codice Texinfo incorporato.<br />

In generale, l’uso di questi elementi è molto semplice, come si può vedere in questo caso:<br />

<br />

Bla bla bla...<br />

Bla bla bla...<br />

<br />

L’esempio seguente, invece, mostra l’uso dell’elemento ‘pre’, allo scopo di incorporare del testo<br />

preformattato, pur continuando a espandere le macro SGML:<br />

<br />

<br />

#!/usr/bin/perl<br />

while ($line = &gt;STDIN&gt;)<br />

{<br />

chomp $line;<br />

print ("$line\r\n");<br />

}<br />

<br />

<br />

In aggiunta, si può delimitare il contenuto dell’elemento ‘pre’ per poterlo scrivere in modo<br />

letterale:<br />

<br />

<br />

)<br />

{<br />

chomp $line;<br />

print ("$line\r\n");<br />

}<br />

]]><br />

<br />


Sgmltexi: contenuti 2801<br />

257.5 Elenchi e tabelle<br />

Elenchi e tabelle, sono blocchi di testo. La gestione di Texinfo per ciò che riguarda queste strutture,<br />

è abbastanza speciale. Qui viene riassunto tutto nella tabella 257.7, che però richiede la<br />

conoscenza dei comandi di Texinfo corrispondenti.<br />

Elemento o<br />

attributo<br />

Tabella 257.7. Elenchi e tabelle.<br />

itemize Sì Sì<br />

Apertura<br />

Chiusura<br />

Contenuto<br />

‘item’, ‘itemx’,<br />

%block;<br />

mark -- -- Attributo<br />

enumerate Sì Sì<br />

‘item’, ‘itemx’,<br />

%block;<br />

start -- -- Attributo<br />

Descrizione o corrispondenza con<br />

Texinfo<br />

Comando ‘@itemize’ di Texinfo.<br />

Segno usato al posto del pallino<br />

iniziale.<br />

Comando ‘@enumerate’ di Texinfo.<br />

Valore iniziale dell’elenco numerato.<br />

table Sì Sì<br />

‘item’, ‘itemx’,<br />

%block;<br />

Comando ‘@table’ di Texinfo.<br />

emphasis -- -- Attributo Enfasi della colonna descrittiva:<br />

‘asis’, ‘code’, ‘samp’, ‘var’,<br />

‘kbd’,<br />

‘file’.<br />

vtable Sì Sì<br />

‘item’, ‘itemx’,<br />

%block;<br />

Comando ‘@vtable’ di Texinfo.<br />

emphasis -- -- Attributo Enfasi della colonna delle variabili:<br />

‘asis’, ‘code’, ‘samp’, ‘var’,<br />

‘kbd’,<br />

‘file’.<br />

ftable Sì Sì<br />

‘item’, ‘itemx’,<br />

%block;<br />

Comando ‘@ftable’ di Texinfo.<br />

emphasis -- -- Attributo Enfasi della colonna delle funzioni:<br />

‘asis’, ‘code’, ‘samp’, ‘var’,<br />

‘kbd’,<br />

‘file’.<br />

item Sì %inline; o vuoto. Comando ‘@item’ di Texinfo.<br />

itemx Sì %inline; o vuoto. Comando ‘@itemx’ di Texinfo.<br />

multitable Sì Sì<br />

columnfraction Sì Sì ‘.n’.<br />

columnexample Sì Sì Testo puro.<br />

Comando ‘@multitable’ di Texinfo.<br />

Colonna larga 0,n volte lo spazio<br />

totale.<br />

Colonna larga tanto quanto l’esempio.<br />

raw Sì Sì %inline;, ‘tab’. Riga di una tabella.<br />

tab Sì No Vuoto<br />

Separatore tra una colonna e la<br />

successiva.<br />

Vengono mostrati alcuni esempi, a cominciare da un elenco non numerato:<br />

<br />

<br />

Primo elemento dell’elenco.<br />

<br />

Secondo elemento.<br />

<br />

In questo caso, si ottiene un elenco puntato di due sole voci, dove al posto del pallino usuale,<br />

appare il simbolo ‘#’. Sostituendo l’elemento ‘itemize’ con ‘enumerate’, si ottiene un elenco<br />

numerato:


2802 Sgmltexi: contenuti<br />

<br />

<br />

Primo elemento dell’elenco.<br />

<br />

Secondo elemento.<br />

<br />

In questo caso, si fa in modo che il primo dei due elementi abbia il numero tre. L’elenco descrittivo<br />

si ottiene attraverso l’elemento ‘table’, dove gli elementi ‘item’ contengono le voci relative.<br />

Si osservi l’esempio:<br />

<br />

ls<br />

dir<br />

Elenco del contenuto della directory.<br />

cd<br />

Cambia directory.<br />

<br />

Si intende così che l’elemento ‘itemx’ serve quando un elemento dell’elenco è composto da più<br />

di una voce.<br />

Le tabelle, intese come quelle a cui si è abituati di solito, sono gestite attraverso l’elemento<br />

‘multitable’. Questo, prima dell’indicazione delle righe che compongono la tabella, richiede<br />

di specificare quante sono le colonne e quanto larghe devono essere. Per questo, all’inizio <strong>occorre</strong><br />

utilizzare una serie di elementi ‘columnfraction’, oppure ‘columnexample’, attraverso<br />

i quali si specificano proprio queste larghezze (in percentuale o attraverso un testo di esempio).<br />

L’esempio seguente mostra il caso di una tabella le cui colonne sono state definite in modo<br />

percentuale:<br />

<br />

.30<br />

.70<br />

Parametro LOC<br />

Posizione corrispondente<br />

<br />

h<br />

posizione attuale<br />

<br />

t<br />

superiore<br />

<br />

b<br />

inferiore<br />

<br />

p<br />

pagina<br />

<br />

<br />

In alternativa, dato che la larghezza delle colonne dipende proprio dai titoli, si poteva fare così:<br />

<br />

Parametro LOC<br />

Posizione corrispondente<br />

Parametro LOC<br />

Posizione corrispondente<br />

<br />

h<br />

posizione attuale<br />

<br />

t<br />

superiore<br />

<br />

b<br />

inferiore


Sgmltexi: contenuti 2803<br />

<br />

p<br />

pagina<br />

<br />

<br />

In entrambi i casi, lo scopo era quello di ottenere uno specchietto simile a quello che segue. Si<br />

osservi che non ci sono didascalie e nemmeno esiste la possibilità di collocare dinamicamente la<br />

tabella.<br />

Parametro LOC<br />

h<br />

t<br />

b<br />

p<br />

257.6 Inserzioni<br />

Posizione corrispondente<br />

posizione attuale<br />

superiore<br />

inferiore<br />

pagina<br />

Alcuni elementi sono difficilmente classificabili in gruppi particolari. Qui, vengono distinti in<br />

due raggruppamenti: quelli interni alle righe e quelli che rappresentano dei blocchi. A questi<br />

corrispondono le tabelle 257.8 e 257.9.<br />

Tabella 257.8. Inserzioni interne alle righe.<br />

Elemento o Aperturra<br />

Texinfo<br />

Chiusu-<br />

Descrizione o corrispondenza con<br />

Contenuto<br />

attributo<br />

dmn Sì Sì #PCDATA Comando ‘@dmn’ di Texinfo.<br />

math Sì Sì #PCDATA Comando ‘@math’ di Texinfo.<br />

footnote Sì Sì %inline; Comando ‘@footnote’ di Texinfo.<br />

image Sì Vuoto Comando ‘@image’ di Texinfo.<br />

name -- -- Nome del file da inserire, senza<br />

Attributo<br />

estensione.<br />

width -- -- Attributo Ampiezza dell’immagine.<br />

height -- -- Attributo Altezza dell’immagine.<br />

whole Sì Sì %inline;<br />

Comando ‘@w’ (previene<br />

l’interruzione di riga).<br />

br Sì Vuoto<br />

Comando ‘@*’ (interruzione di<br />

riga).<br />

dh Sì Vuoto<br />

Comando ‘@-’ (separazione facoltativa).<br />

hyphenation<br />

Comando ‘@hyphenation’ di Texinfo.<br />

Sì Vuoto;<br />

words -- -- Attributo Elenco di parole separate in sillabe.<br />

Tabella 257.9. Inserzione di blocchi.<br />

Elemento o Aperturra<br />

Texinfo<br />

Chiusu-<br />

Descrizione o corrispondenza con<br />

Contenuto<br />

attributo<br />

sp Sì Vuoto Comando ‘@sp’ di Texinfo.<br />

lines -- -- Attributo<br />

Quantità di righe da saltare (un<br />

numero intero).<br />

page Sì Vuoto Comando ‘@page’ di Texinfo.<br />

group Sì Sì %block; Comando ‘@group’ di Texinfo.<br />

need Sì Vuoto Comando ‘@need’ di Texinfo.<br />

mils -- -- Attributo Millesimi di pollice richiesti.


2804 Sgmltexi: contenuti<br />

257.7 Definizioni<br />

Texinfo prevede un grande numero di comandi per la descrizione di definizioni di vario genere.<br />

Queste «definizioni» vanno intese generalmente come dei modelli sintattici. È un po’ difficile<br />

comprendere bene quando usare questa o quella forma di definizione; per cui <strong>occorre</strong> studiare la<br />

documentazione di Texinfo.<br />

Tutte le forme di definizione si dichiarano attraverso un elemento provvisto di diversi attributi.<br />

Questo elemento contiene generalmente la descrizione del modello, in una serie di blocchi di testo,<br />

ma in particolare potrebbe contenere la descrizione degli argomenti, all’interno dell’elemento<br />

‘args’, comune a tutte le definizioni che ne hanno.<br />

Tabella 257.10. Definizioni; prima parte.<br />

Elemento o Aperturra<br />

Texinfo<br />

Chiusu-<br />

Descrizione o corrispondenza con<br />

Contenuto<br />

attributo<br />

args Sì Sì %inline; Argomenti di una definizione.<br />

deffn Sì Sì ‘args’, %block; Comando ‘@deffn’ di Texinfo.<br />

cat -- -- Attributo Categoria della funzione.<br />

name -- -- Attributo Nome della funzione.<br />

deffnx Sì Vuoto Comando ‘@deffnx’.<br />

Attributi come ‘deffn’.<br />

defun Sì Sì ‘args’, %block; Comando ‘@defun’ di Texinfo.<br />

name -- -- Attributo Nome della funzione.<br />

defunx Sì Vuoto Comando ‘@defunx’.<br />

Attributi come ‘defun’.<br />

defmac Sì Sì ‘args’, %block; Comando ‘@defmac’ di Texinfo.<br />

name -- -- Attributo Nome della macro.<br />

defmacx Sì Vuoto Comando ‘@defmacx’.<br />

Attributi come ‘defmac’.<br />

defspec Sì Sì ‘args’, %block; Comando ‘@defspec’ di Texinfo.<br />

name -- -- Attributo Nome di uno special form.<br />

defspecx Sì Vuoto Comando ‘@defspecx’.<br />

Attributi come ‘defspec’.<br />

defvr Sì Sì %block; Comando ‘@defvr’ di Texinfo.<br />

cat -- -- Attributo Categoria della variabile.<br />

name -- -- Attributo Nome della variabile.<br />

defvrx Sì Vuoto Comando ‘@defvrx’.<br />

Attributi come ‘defvr’.<br />

defvar Sì Sì %block; Comando ‘@defvar’ di Texinfo.<br />

name -- -- Attributo Nome della variabile.<br />

defvarx Sì Vuoto Comando ‘@defvarx’.<br />

Attributi come ‘defvar’.<br />

defopt Sì Sì %block; Comando ‘@defopt’ di Texinfo.<br />

name -- -- Attributo Nome dell’opzione.<br />

defoptx Sì Vuoto Comando ‘@defoptx’.<br />

Attributi come ‘defopt’.<br />

deftypefn<br />

Comando ‘@deftypefn’ di Texinfo.<br />

Sì Sì ‘args’, %block;<br />

cat -- -- Attributo Categoria.<br />

type -- -- Attributo Tipo di dati.<br />

name -- -- Attributo Nome.<br />

deftypefnx Sì Vuoto Comando ‘@deftypefnx’.<br />

Attributi come ‘deftypefn’.<br />

deftypefun<br />

Comando ‘@deftypefun’ di Texinfo.<br />

Sì Sì ‘args’, %block;<br />

type -- -- Attributo Tipo di dati.<br />

name -- -- Attributo Nome.<br />

deftypefunx Sì Vuoto Comando ‘@deftypefunx’.


Sgmltexi: contenuti 2805<br />

Elemento o<br />

attributo<br />

Apertura<br />

Chiusura<br />

Contenuto<br />

Descrizione o corrispondenza con<br />

Texinfo<br />

Attributi come ‘deftypefun’.<br />

deftypevr<br />

Comando ‘@deftypevr’ di Texinfo.<br />

Sì Sì %block;<br />

cat -- -- Attributo Categoria.<br />

type -- -- Attributo Tipo di dati.<br />

name -- -- Attributo Nome.<br />

deftypevrx Sì Vuoto Comando ‘@deftypevrx’.<br />

Attributi come ‘deftypevr’.<br />

deftypevar<br />

Comando ‘@deftypevar’ di Texinfo.<br />

Sì Sì %block;<br />

type -- -- Attributo Tipo di dati.<br />

name -- -- Attributo Nome.<br />

deftypevarx Sì Vuoto Comando ‘@deftypevarx’.<br />

Attributi come ‘deftypevar’.<br />

Tabella 257.11. Definizioni; seconda parte.<br />

Elemento o Aperturra<br />

Texinfo<br />

Chiusu-<br />

Descrizione o corrispondenza con<br />

Contenuto<br />

attributo<br />

args Sì Sì %inline; Argomenti di una definizione.<br />

defcv Sì Sì %block; Comando ‘@defcv’ di Texinfo.<br />

cat -- -- Attributo Categoria.<br />

class -- -- Attributo Classe.<br />

name -- -- Attributo Nome.<br />

defcvx Sì Vuoto Comando ‘@defcvx’.<br />

Attributi come ‘defcv’.<br />

defivar Sì Sì %block; Comando ‘@defivar’ di Texinfo.<br />

class -- -- Attributo Classe.<br />

name -- -- Attributo Nome.<br />

defivarx Sì Vuoto Comando ‘@defivarx’.<br />

Attributi come ‘defivar’.<br />

deftypeivar<br />

Comando ‘@deftypeivar’ di Texinfo.<br />

Sì Sì %block;<br />

class -- -- Attributo Classe.<br />

type -- -- Attributo Tipo.<br />

name -- -- Attributo Nome.<br />

deftypeivarx Sì Vuoto Comando ‘@deftypeivarx’.<br />

Attributi come ‘deftypeivar’.<br />

defop Sì Sì ‘args’, %block; Comando ‘@defop’ di Texinfo.<br />

cat -- -- Attributo Categoria.<br />

class -- -- Attributo Classe.<br />

name -- -- Attributo Nome.<br />

defopx Sì Vuoto Comando ‘@defopx’.<br />

Attributi come ‘defop’.<br />

Comando ‘@defmethod’ di Texinfo.<br />

defmethod Sì Sì ‘args’, %block;<br />

class -- -- Attributo Classe.<br />

name -- -- Attributo Nome.<br />

defmethodx Sì Vuoto Comando ‘@defmethodx’.<br />

Attributi come ‘defmethod’.<br />

deftypemethod<br />

Comando ‘@deftypemethod’ di<br />

Sì Sì ‘args’, %block;<br />

Texinfo.<br />

class -- -- Attributo Classe.<br />

type -- -- Attributo Tipo.<br />

name -- -- Attributo Nome.<br />

deftypemethodx Sì Vuoto Comando ‘@deftypemethodx’.<br />

Attributi come ‘deftypemethod’.


2806 Sgmltexi: contenuti<br />

Ecco un esempio molto semplice:<br />

<br />

[options]... sgml_source<br />

This is the front-end for the SGML to Texinfo system.<br />

<br />

La <strong>composizione</strong> in formato Info genera il risultato seguente:<br />

- Command: sgmltexi [OPTIONS]... SGML_SOURCE<br />

This is the front-end for the SGML to Texinfo system.<br />

257.8 Codice condizionato e codice letterale in base alla<br />

<strong>composizione</strong><br />

Texinfo ha la possibilità di <strong>selezionare</strong> del codice in dipendenza del tipo di <strong>composizione</strong> finale.<br />

In SGML si possono fare cose simili attraverso le sezioni marcate, ma non si tratta della stessa<br />

cosa. Per questa ragione, Sgmltexi include alcuni elementi speciali corrispondenti ai comandi<br />

che servono a Texinfo per <strong>selezionare</strong> il codice, consentendo anche di inserire pezzi di codice<br />

letterale.<br />

Tabella 257.12. Codice condizionato e codice letterale in base alla <strong>composizione</strong>.<br />

Elemento o Aperturra<br />

Texinfo<br />

Chiusu-<br />

Descrizione o corrispondenza con<br />

Contenuto<br />

attributo<br />

deftp Sì Sì ‘args’, %block; Comando ‘@deftp’ di Texinfo.<br />

cat -- -- Attributo Categoria.<br />

name -- -- Attributo Nome.<br />

deftpx Sì Vuoto Comando ‘@deftpx’.<br />

Attributi come ‘deftp’.<br />

Elemento o Aperturra<br />

Texinfo<br />

Chiusu-<br />

Descrizione o corrispondenza con<br />

Contenuto<br />

attributo<br />

ifinfo Sì Sì %inline; ‘@ifinfo’ ... ‘@end ifinfo’<br />

ifinfoblock Sì Sì %block; ‘@ifinfo’ ... ‘@end ifinfo’<br />

iftex Sì Sì %inline; ‘@iftex’ ... ‘@end iftex’<br />

iftexblock Sì Sì %block; ‘@iftex’ ... ‘@end iftex’<br />

ifhtml Sì Sì %inline; ‘@ifhtml’ ... ‘@end ifhtml’<br />

ifhtmlblock Sì Sì %block; ‘@ifhtml’ ... ‘@end ifhtml’<br />

‘@ifnotinfo’ ...<br />

ifnotinfo Sì Sì %inline;<br />

‘@end ifnotinfo’<br />

‘@ifnotinfo’ ...<br />

ifnotinfoblock Sì Sì %block;<br />

‘@end ifnotinfo’<br />

‘@ifnottex’ ...<br />

ifnottex Sì Sì %inline;<br />

‘@end ifnottex’<br />

‘@ifnottex’ ...<br />

ifnottexblock Sì Sì %block;<br />

‘@end ifnottex’<br />

‘@ifnothtml’ ...<br />

ifnothtml Sì Sì %inline;<br />

ifnothtmlblock Sì Sì %block;<br />

‘@end ifnothtml’<br />

‘@ifnothtml’ ...<br />

‘@end ifnothtml’<br />

tex Sì Sì #PCDATA ‘@tex’ ... ‘@end tex’<br />

html Sì Sì #PCDATA ‘@html’ ... ‘@end html’<br />

texinfo Sì Sì #PCDATA Codice Texinfo.<br />

È importante osservare che ‘ifinfo’, ‘iftex’, ‘ifhtml’, ‘ifnotinfo’, ‘ifnottex’ e


Sgmltexi: contenuti 2807<br />

‘ifnothtml’, sono elementi interni alla riga di testo, che contengono lo stesso genere di<br />

cosa. Al contrario, ‘ifinfoblock’, ‘iftexblock’, ‘ifhtmlblock’, ‘ifnotinfoblock’,<br />

‘ifnottexblock’ e ‘ifnothtmlblock’, sono blocchi che contengono altri blocchi. Questa<br />

distinzione è necessaria per evitare problemi nella definizione del documento SGML (nel DTD).<br />

In particolare, gli elementi ‘tex’, ‘html’ e ‘texinfo’, sono fatti per contenere testo letterale<br />

solitamente racchiuso tra ‘’.<br />

L’elemento ‘texinfo’ non ha un comando equivalente in Texinfo, perché rappresenta del codice<br />

Texinfo. Si osservi l’esempio seguente:<br />

The letter @ubaraccent{o} is a special...<br />

Usando questo elemento, potrebbe essere necessario forzare l’interpretazione letterale anche da<br />

parte dell’SGML. In tal caso, il contenuto dell’elemento può essere racchiuso come si vede qui:<br />

The letter is a...<br />

Il caso particolare dell’esempio non mostra una situazione in cui sia indispensabile<br />

l’interpretazione SGML letterale, tuttavia questo è il modo quando succede tale circostanza.<br />

Viene mostrato un altro esempio nell’uso di codice letterale specifico per il tipo di <strong>composizione</strong>.<br />

L’intenzione è quella di mostrare un’espressione matematica molto semplice: 123 + 10 -1 .<br />

<br />

-1]]><br />

123+10^-1<br />

= 12.3<br />

Si potrebbe notare una sorta di incoerenza nell’uso degli elementi letterali, assieme a<br />

‘ifinfo’, il cui scopo è solo quello di essere preso in considerazione quando la <strong>composizione</strong><br />

produce il formato Info. Il fatto è che gli altri due elementi letterali, oltre che contenere codice<br />

letterale per il tipo rispettivo di <strong>composizione</strong>, sono implicitamente elementi condizionali. Dal<br />

momento che la <strong>composizione</strong> Info non può prevedere una codifica letterale speciale, l’unico<br />

modo per integrare le varie parti è quello di usare ‘ifinfo’ per rappresentare in qualche modo<br />

l’espressione, anche in questo caso.<br />

257.8.1 Problemi<br />

Texinfo, come TeX e *roff, distingue i blocchi di testo in quanto separati da una o più righe vuote.<br />

In tal modo, la distinzione tra blocchi di testo e testo interno alle righe, è solo una questione di<br />

spazio verticale. Per esempio, il pezzo seguente di un sorgente Texinfo, mostra tre ambienti del<br />

tipo ‘@if<strong>composizione</strong> ’, che sono parte dello stesso blocco di testo, ovvero lo stesso paragrafo.<br />

La <strong>composizione</strong> attuale è<br />

@iftex<br />

TeX<br />

@end iftex<br />

@ifhtml<br />

HTML<br />

@end ifhtml<br />

@ifinfo<br />

Info<br />

@end ifinfo<br />

e si può vedere che...<br />

In una situazione differente, questi ambienti possono diventare blocchi isolati di testo, come si<br />

vede qui:


2808 Sgmltexi: contenuti<br />

La <strong>composizione</strong> attuale è:<br />

@iftex<br />

TeX<br />

@end iftex<br />

@ifhtml<br />

HTML<br />

@end ifhtml<br />

@ifinfo<br />

Info<br />

@end ifinfo<br />

Si può vedere che...<br />

Con un sistema SGML, questa confusione di ruoli non è desiderabile, oltre che essere difficile<br />

da realizzare. Questo è il motivo per cui Sgmltexi distingue tra ‘@if<strong>composizione</strong> ’ o<br />

‘@ifnot<strong>composizione</strong> ’, e ‘@if<strong>composizione</strong> block’ o ‘@ifnot<strong>composizione</strong> block’.<br />

Sgmltexi cerca di mantenere le interruzioni di riga contenute all’interno del sorgente SGML, ma<br />

per questo ci sono delle conseguenze nell’uso degli ambienti condizionali, del tipo interno alle righe.<br />

Ciò dipende dal fatto che necessariamente <strong>occorre</strong> aggiungere delle interruzioni aggiuntive.<br />

Si supponga di voler scrivere qualcosa come ciò che segue:<br />

La <strong>composizione</strong> attuale<br />

è TeXHTMLInfo, per cui<br />

si sa cosa comporta questo fatto.<br />

Ci si aspetta che i marcatori di apertura e di chiusura vengano rimpiazzati aggiungendo anche le<br />

interruzioni di riga appropriate. Ma se fosse così, il risultato sarebbe quello seguente, in cui ciò<br />

che prima era testo interno alla riga, adesso diventa un blocco separato:<br />

La <strong>composizione</strong> attuale<br />

è<br />

@iftex<br />

TeX<br />

@end iftex<br />

@ifhtml<br />

HTML<br />

@end ifhtml<br />

@ifinfo<br />

Info<br />

@end ifinfo<br />

, per cui<br />

si sa cosa comporta questo fatto.<br />

Per risolvere il problema, questi elementi intesi come ambienti condizionali interni alle righe,<br />

non introducono alcuna interruzione iniziale o finale che sia; rimane compito dell’autore il preoccuparsi<br />

di questo problema. Per questo, il sorgente di Sgmltexi deve essere scritto come si vede<br />

nell’esempio seguente, considerando anche che non c’è alcun modo di mettere la virgola dopo il<br />

nome del tipo di <strong>composizione</strong>.<br />

La <strong>composizione</strong> attuale è<br />

TeX<br />

HTML<br />

Info<br />

per cui si sa cosa comporta questo fatto.<br />

Lo stesso problema appare con gli elementi ‘tex’ e ‘html’, ma in tal caso non c’è bisogno di<br />

qualificarne il contenuto, che si intende sempre come testo interno alle righe.


Sgmltexi: contenuti 2809<br />

<br />

<br />

$$ \chi^2 = \sum_{i=1}^N<br />

\left (y_i - (a + b x_i)<br />

\over \sigma_i\right)^2 $$<br />

<br />

<br />

Utilizzando un sistema SGML, l’inserzione di codice letterale per il tipo di <strong>composizione</strong><br />

particolare che si utilizza, è da considerarsi come l’ultima risorsa. In altri termini, se sono<br />

necessari tali espedienti, è evidente che l’SGML è la scelta sbagliata per scrivere la propria<br />

documentazione.<br />

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org


Capitolo 258<br />

Corrispondenza tra Texinfo e Sgmltexi<br />

In questo capitolo conclusivo della parte dedicata a Sgmltexi, si riepiloga brevemente l’uso di<br />

questo sistema di <strong>composizione</strong>, attraverso la comparazione con Texinfo. In questo modo, si può<br />

comprendere cosa di Texinfo non è disponibile con Sgmltexi.<br />

Si osservi che nei modelli sintattici, le parentesi graffe hanno significato letterale, facendo parte<br />

dei comandi di Texinfo.<br />

@spazio_bianco<br />

‘&nbsp;’<br />

@!<br />

&esexcl;<br />

End sentence exclamation mark<br />

@"x<br />

@’x<br />

Per la rappresentazione di caratteri speciali, si possono utilizzare le entità standard<br />

SGML, oppure i caratteri della codifica ISO 8859-n selezionata con l’opzione<br />

‘--input-encoding’, o con l’attributo ‘charset’ dell’elemento ‘sgmltexi’.<br />

@*<br />

<br />

@,{x}<br />

Per la rappresentazione di caratteri speciali, si possono utilizzare le entità standard<br />

SGML, oppure i caratteri della codifica ISO 8859-n selezionata con l’opzione<br />

‘--input-encoding’, o con l’attributo ‘charset’ dell’elemento ‘sgmltexi’.<br />

@-<br />

@.<br />

@:<br />

<br />

&esperiod;<br />

End sentence period<br />

&nes;<br />

Not ending sentence<br />

@=x<br />

Non disponibile.<br />

@?<br />

@@<br />

&esquest;<br />

End of sentence question mark<br />

@<br />

@^<br />

2810


Corrispondenza tra Texinfo e Sgmltexi 2811<br />

@‘<br />

@{<br />

@}<br />

Per la rappresentazione di caratteri speciali, si possono utilizzare le entità standard<br />

SGML, oppure i caratteri della codifica ISO 8859-n selezionata con l’opzione<br />

‘--input-encoding’, o con l’attributo ‘charset’ dell’elemento ‘sgmltexi’.<br />

{<br />

}<br />

@~<br />

@AA{}<br />

@aa{}<br />

Per la rappresentazione di caratteri speciali, si possono utilizzare le entità standard<br />

SGML, oppure i caratteri della codifica ISO 8859-n selezionata con l’opzione<br />

‘--input-encoding’, o con l’attributo ‘charset’ dell’elemento ‘sgmltexi’.<br />

@acronym{abbreviazione}<br />

@AE{}<br />

@ae{}<br />

abbreviazione<br />

Per la rappresentazione di caratteri speciali, si possono utilizzare le entità standard<br />

SGML, oppure i caratteri della codifica ISO 8859-n selezionata con l’opzione<br />

‘--input-encoding’, o con l’attributo ‘charset’ dell’elemento ‘sgmltexi’.<br />

@afourlatex<br />

@afourpaper<br />

@afourwide<br />

In sostituzione di questi comandi, si possono usare le opzioni della riga di comando:<br />

‘--paper=a4latex’, ‘--paper=a4paper’, ‘--paper=a4wide’.<br />

@alias nuovo =esistente<br />

Non disponibile. Probabilmente si può rimediare inserendo il comando all’interno<br />

dell’elemento ‘texinfo’.<br />

@anchor{nome }<br />

<br />

@appendix titolo<br />

@appendixsec titolo<br />

@appendixsection titolo<br />

@appendixsubsec titolo<br />

@appendixsubsection titolo<br />

@appendixsubsubsec titolo<br />

@appendixsubsubsection titolo<br />

Le appendici si ottengono nell’ambito dell’elemento ‘appendix’.


2812 Corrispondenza tra Texinfo e Sgmltexi<br />

@asis<br />

La parola ‘asis’ è usata come argomento dell’attributo ‘emphasis’ degli elementi<br />

‘table’, ‘vtable’ e ‘ftable’.<br />

@author autore<br />

autore<br />

@b{testo}<br />

testo<br />

@bullet{}<br />

@bye<br />

&bull;<br />

<br />

@c commento<br />

@comment commento<br />

Non è disponibile un elemento equivalente, dal momento che l’SGML offre un suo sistema<br />

per annotare i commenti. Se necessario, questo comando può essere incluso all’interno di<br />

un elemento ‘texinfo’.<br />

@cartouche<br />

<br />

blocco_di_testo<br />

|<br />

|<br />

<br />

@center testo<br />

testo<br />

Non si può usare nel titolo del documento.<br />

@centerchap titolo<br />

Non disponibile.<br />

@chapheading titolo<br />

titolo<br />

@chapter titolo<br />

titolo<br />

@cindex voce<br />

<br />

@cite{riferimento }<br />

riferimento <br />

@clear indicatore<br />

Non disponibile. Eventualmente può essere usato all’interno dell’elemento ‘texinfo’.<br />

@code{testo}<br />

sample


Corrispondenza tra Texinfo e Sgmltexi 2813<br />

@command{nome_comando }<br />

nome_comando <br />

@contents<br />

<br />

@copyright{}<br />

&copy;<br />

@defcodeindex nome_indice<br />

nome_indice <br />

@defcv categoria classe nome<br />

@defcvx categoria classe nome<br />

<br />

[] ...<br />

...<br />

...<br />

<br />

@deffn categoria nome argomento ...<br />

@deffnx categoria nome argomento ...<br />

<br />

argomento ...<br />

[<br />

argomento ...] ...<br />

...<br />

...<br />

<br />

@defindex nome_indice<br />

nome_indice <br />

@definfoenclose nuovo_comando prima dopo<br />

Non disponibile. Eventualmente può essere usato all’interno dell’elemento ‘texinfo’.<br />

@defivar classe nome_variabile_di_istanza<br />

@defivarx classe nome_variabile_di_istanza<br />

<br />

[] ...<br />

...<br />

...<br />

<br />

@defmac nome_macro argomento ...<br />

@defmacx nome_macro argomento ...<br />

<br />

argomento ...<br />

[<br />

argomento ...] ...<br />

...<br />

...<br />

<br />

@defmethod classe nome_metodo argomento ...


2814 Corrispondenza tra Texinfo e Sgmltexi<br />

@defmethodx classe nome_metodo argomento ...<br />

<br />

argomento ...<br />

[<br />

argomento ...] ...<br />

...<br />

...<br />

<br />

@defop categoria classe nome argomento ...<br />

@defopx categoria classe nome argomento ...<br />

<br />

argomento ...<br />

[<br />

argomento ...] ...<br />

...<br />

...<br />

<br />

@defopt nome_opzione<br />

@defoptx nome_opzione<br />

<br />

[]<br />

...<br />

...<br />

<br />

@defspec nome argomento ...<br />

@defspecx nome argomento ...<br />

<br />

argomento ...<br />

[<br />

argomento ...] ...<br />

...<br />

...<br />

<br />

@deftp categoria nome attributo ...<br />

@deftpx categoria nome attributo ...<br />

<br />

attributo ...<br />

[<br />

attributo ...] ...<br />

...<br />

...<br />

<br />

@deftypefn classificazione tipo_dati nome argomento ...<br />

@deftypefnx classificazione tipo_dati nome argomento ...<br />

<br />

argomento ...<br />

[<br />

argomento ...] ...<br />

...<br />

...<br />

<br />

@deftypefun tipo_dati nome_funzione argomento ...


Corrispondenza tra Texinfo e Sgmltexi 2815<br />

@deftypefunx tipo_dati nome_funzione argomento ...<br />

<br />

argomento ...<br />

[<br />

argomento ...] ...<br />

...<br />

...<br />

<br />

@deftypeivar classe tipo_dati nome_variabile<br />

@deftypeivarx classe tipo_dati nome_variabile<br />

<br />

[] ...<br />

...<br />

...<br />

<br />

@deftypemethod classe tipo_dati nome_metodo argomento ...<br />

@deftypemethodx classe tipo_dati nome_metodo argomento ...<br />

<br />

argomento ...<br />

[<br />

argomento ...] ...<br />

...<br />

...<br />

<br />

@deftypeop categioria classe tipo_dati nome argomento ...<br />

@deftypeopx categioria classe tipo_dati nome argomento ...<br />

<br />

argomento ...<br />

[<br />

argomento ...] ...<br />

...<br />

...<br />

<br />

@deftypevar tipo_dati nome_variabile<br />

@deftypevarx tipo_dati nome_variabile<br />

<br />

[] ...<br />

...<br />

...<br />

<br />

@deftypevr classificazione tipo_dati nome_variabile<br />

@deftypevrx classificazione tipo_dati nome_variabile<br />

<br />

[] ...<br />

...<br />

...<br />

<br />

@defun nome_funzione argomento ...


2816 Corrispondenza tra Texinfo e Sgmltexi<br />

@defunx nome_funzione argomento ...<br />

<br />

argomento ...<br />

[<br />

argomento ...] ...<br />

...<br />

...<br />

<br />

@defvar nome_variabile<br />

@defvarx nome_variabile<br />

<br />

[] ...<br />

...<br />

...<br />

<br />

@defvr categoria nome_variabile<br />

@defvrx categoria nome_variabile<br />

<br />

[] ...<br />

...<br />

...<br />

<br />

@detailmenu<br />

<br />

...<br />

...<br />

<br />

...<br />

...<br />

<br />

<br />

@dfn{termine }<br />

termine <br />

@dircategory dirpart<br />

@direntry<br />

<br />

...<br />

...<br />

<br />

@display<br />

<br />

blocco_di_testo<br />

...<br />

...<br />

<br />

@dmn{dimensione }<br />

dimensione <br />

@documentencoding codifica<br />

<br />

Definisce la codifica del sorgente Texinfo che viene generato, stabilendo implicitamente<br />

che lo stesso sorgente SGML è realizzato nello stesso modo. Viene oscurato dall’opzione<br />

‘--input-encoding’, che prende la precedenza generando un sorgente Texinfo in<br />

formato ISO 646 puro (ASCII a 7 bit).


Corrispondenza tra Texinfo e Sgmltexi 2817<br />

@documentlanguage cc<br />

<br />

@dotaccent{c}<br />

Per la rappresentazione di caratteri speciali, si possono utilizzare le entità standard<br />

SGML, oppure i caratteri della codifica ISO 8859-n selezionata con l’opzione<br />

‘--input-encoding’, o con l’attributo ‘charset’ dell’elemento ‘sgmltexi’.<br />

@dots{}<br />

&dots;<br />

@email{indirizzo, testo_mostrato}<br />

<br />

@emph{testo}<br />

testo<br />

@env{variabile_di_ambiente }<br />

variabile_di_ambiente <br />

@enddots{}<br />

&enddots;<br />

@enumerate [numero_o_lettera]<br />

<br />

<br />

...<br />

...<br />

<br />

...<br />

...<br />

<br />

@equiv{}<br />

&equiv;<br />

@error{}<br />

&error;<br />

@evenfooting<br />

@evenheading<br />

@everyfooting<br />

@everyheading<br />

Non disponibile. Eventualmente può essere usato all’interno dell’elemento ‘texinfo’.<br />

@example<br />

<br />

bloco_di_testo<br />

...<br />

...<br />

<br />

Preformattato:


2818 Corrispondenza tra Texinfo e Sgmltexi<br />

<br />

<br />

riga_di_testo<br />

...<br />

...<br />

<br />

<br />

Letterale:<br />

<br />

<br />

<br />

<br />

<br />

@exampleindent<br />

Non disponibile. Eventualmente può essere usato all’interno dell’elemento ‘texinfo’.<br />

@exlamdown<br />

&iexcl;<br />

@exdent<br />

<br />

...<br />

testo_sporgente<br />

...<br />

<br />

@expansion{}<br />

&expansion;<br />

@file{nome_file }<br />

nome_file <br />

@finalout<br />

Non gestibile, in quanto il sorgente Texinfo che viene generato contiene sempre questo<br />

comando.<br />

@findex voce<br />

<br />

@flushleft<br />

testo<br />

@flushright<br />

testo<br />

@footnote{testo_del_piè_pagina}<br />

testo_del_piè_pagina<br />

@footnotestyle stile<br />

<br />

In alternativa si può usare l’opzione ‘--footnotestyle=stile’ della riga di comando, che<br />

prende il sopravvento.


Corrispondenza tra Texinfo e Sgmltexi 2819<br />

@format<br />

<br />

<br />

...<br />

...<br />

<br />

<br />

Letterale:<br />

<br />

<br />

<br />

<br />

<br />

@frenchspacing<br />

<br />

@ftable comando_di_formattazione<br />

@group<br />

@H{c}<br />

<br />

voce_descrittiva<br />

[voce_descrittiva] ...<br />

blocco_di_testo...<br />

...<br />

...<br />

voce_descrittiva<br />

[voce_descrittiva] ...<br />

blocco_di_testo...<br />

...<br />

<br />

blocco_di_testo<br />

Per la rappresentazione di caratteri speciali, si possono utilizzare le entità standard<br />

SGML, oppure i caratteri della codifica ISO 8859-n selezionata con l’opzione<br />

‘--input-encoding’, o con l’attributo ‘charset’ dell’elemento ‘sgmltexi’.<br />

@heading titolo<br />

titolo<br />

@headings on<br />

@headings off<br />

@headings single<br />

@headings double<br />

<br />

<br />

<br />

<br />

In alternativa si può usare l’opzione ‘--headings’ della riga di comando, che prende il<br />

sopravvento:<br />

--headings=on<br />

--headings=off<br />

--headings=single<br />

--headings=double


2820 Corrispondenza tra Texinfo e Sgmltexi<br />

@html<br />

codice_html <br />

@hyphenation{parole_separate_in_sillabe}<br />

<br />

@i{testo}<br />

testo<br />

@ifclear opzione<br />

Non disponibile. Eventualmente può essere usato all’interno dell’elemento ‘texinfo’.<br />

@ifhtml<br />

Ci sono due possibilità: testo interno alle righe e blocchi di testo.<br />

testo_interno_alle_righe <br />

<br />

blocco_di_testo<br />

...<br />

<br />

L’SGML dà la possibilità di usare le sezioni marcate. Queste posso essere controllate da<br />

Sgmltexi attraverso l’opzione ‘--sgml-include’ della riga di comando. Per esempio, il<br />

sorgente SGML potrebbe essere simile al pezzo seguente:<br />

<br />

<br />

...<br />

...<br />

]><br />

<br />

...<br />

...<br />

Here it is some text that is meant to appear only inside<br />

the HTML typesetting.<br />

]]><br />

Here it is some other text that is meant to appear only<br />

inside the Info typesetting.<br />

]]><br />

This text is meant to appear only inside the TeX<br />

typesetting.<br />

]]><br />

...<br />

...<br />

<br />

Quindi, quando si genera la <strong>composizione</strong> in HTML, si deve utilizzare l’opzione<br />

‘--sgml-include=HTML’:<br />

$ sgmltexi --sgml-include=HTML --html mio_file.sgml<br />

Per la <strong>composizione</strong> nel formato Info, si deve usare l’opzione ‘--sgml-include=INFO’:<br />

$ sgmltexi --sgml-include=INFO --info mio_file.sgml<br />

Nello stesso modo, per la <strong>composizione</strong> attraverso TeX si deve usare l’opzione<br />

‘--sgml-include=TEX’:<br />

$ sgmltexi --sgml-include=TEX --tex mio_file.sgml


Corrispondenza tra Texinfo e Sgmltexi 2821<br />

@ifinfo<br />

Ci sono due possibilità: testo interno alle righe e blocchi di testo.<br />

testo_interno_alle_righe <br />

<br />

blocco_di_testo<br />

...<br />

<br />

L’SGML dà la possibilità di usare le sezioni marcate, come è già stato mostrato a proposito<br />

del comando ‘@ifhtml’.<br />

@ifnothtml<br />

Ci sono due possibilità: testo interno alle righe e blocchi di testo.<br />

testo_interno_alle_righe <br />

<br />

blocco_di_testo<br />

...<br />

<br />

L’SGML dà la possibilità di usare le sezioni marcate. Queste posso essere controllate da<br />

Sgmltexi attraverso l’opzione ‘--sgml-include’ della riga di comando. Per esempio, il<br />

sorgente SGML potrebbe essere simile al pezzo seguente:<br />

<br />

<br />

...<br />

...<br />

]><br />

<br />

...<br />

...<br />

Here it is some text that is meant to appear only outside<br />

the HTML typesetting.<br />

]]><br />

Here it is some other text that is meant to appear only<br />

outside the Info typesetting.<br />

]]><br />

This text is meant to appear only outside the TeX<br />

typesetting.<br />

]]><br />

...<br />

...<br />

<br />

Quindi, quando si genera la <strong>composizione</strong> in HTML, si devono utilizzare le opzioni<br />

‘--sgml-include=NOTINFO’ e ‘--sgml-include=NOTTEX’:<br />

$ sgmltexi --sgml-include=NOTINFO --sgml-include=NOTTEX ←↪<br />

↩→--html mio_file.sgml<br />

Per la <strong>composizione</strong> nel formato Info, si devono utilizzare le opzioni<br />

‘--sgml-include=NOTHTML’ e ‘--sgml-include=NOTTEX’:<br />

$ sgmltexi --sgml-include=NOTHTML --sgml-include=NOTTEX ←↪<br />

↩→--info mio_file.sgml<br />

Nello stesso modo, per la <strong>composizione</strong> attraverso TeX si devono utilizzare le opzioni<br />

‘--sgml-include=NOTHTML’ e ‘--sgml-include=NOTINFO’:<br />

$ sgmltexi --sgml-include=NOTHTML --sgml-include=NOTINFO ←↪<br />

↩→--tex mio_file.sgml


2822 Corrispondenza tra Texinfo e Sgmltexi<br />

@ifnotinfo<br />

Ci sono due possibilità: testo interno alle righe e blocchi di testo.<br />

testo_interno_alle_righe <br />

<br />

blocco_di_testo<br />

...<br />

<br />

L’SGML dà la possibilità di usare le sezioni marcate, come è già stato mostrato a proposito<br />

del comando ‘@ifnothtml’.<br />

@ifnottex<br />

Ci sono due possibilità: testo interno alle righe e blocchi di testo.<br />

testo_interno_alle_righe <br />

<br />

blocco_di_testo<br />

...<br />

<br />

L’SGML dà la possibilità di usare le sezioni marcate, come è già stato mostrato a proposito<br />

del comando ‘@ifnothtml’.<br />

@ifset flag<br />

@iftex<br />

Non disponibile. Eventualmente può essere usato all’interno dell’elemento ‘texinfo’.<br />

Ci sono due possibilità: testo interno alle righe e blocchi di testo.<br />

testo_interno_alle_righe <br />

<br />

blocco_di_testo<br />

...<br />

<br />

L’SGML dà la possibilità di usare le sezioni marcate, come è già stato mostrato a proposito<br />

del comando ‘@ifhtml’.<br />

@ignore<br />

Non disponibile. Eventualmente può essere usato all’interno dell’elemento ‘texinfo’. Se<br />

non è necessario inserire commenti nel file Texinfo che viene generato, si possono usare i<br />

commenti secondo l’SGML:<br />

<br />

...<br />

@image{nome_file , [ampiezza], [altezza]}<br />

<br />

@include<br />

Non disponibile. Eventualmente può essere usato all’interno dell’elemento ‘texinfo’.<br />

L’SGML offre un meccanismo alternativo:<br />

<br />

...<br />

...<br />

]>


Corrispondenza tra Texinfo e Sgmltexi 2823<br />

<br />

...<br />

...<br />

<br />

&GPL;<br />

&BSD;<br />

...<br />

...<br />

<br />

...<br />

<br />

come si può vedere dall’esempio, l’inserzione nel testo di ‘licenses/gpl.sgml’ e di<br />

‘licenses/bsd.sgml’ avviene attraverso l’uso delle macro SGML ‘&GPL;’ e ‘&BSD;’.<br />

Se è necessario includere un file Texinfo, si può fare come si vede nell’esempio seguente:<br />

<br />

@include example.texi<br />

<br />

]]><br />

È necessario tenere a mente che l’elemento ‘texinfo’ è di tipo interno alle righe di testo.<br />

Ecco perché nell’esempio è contenuto in un elemento ‘p’.<br />

@inforef{nome_nodo , [voce], nome_file_info }<br />

<br />

\input file_macro<br />

@item<br />

Non è possibile inserire macro aggiuntive all’inizio del documento, oltre a quella predefinita<br />

che imposta la sintassi Texinfo.<br />

Questo comando di Texinfo viene usato in contesti molto diversi. All’interno di Sgmltexi<br />

non esiste un modo unico per utilizzarlo, per cui conviene vedere piuttosto la descrizione<br />

dei comandi ‘@table’, ‘@ftable’, ‘@vtable’, ‘@itemize’, ‘@enumerate’ e<br />

‘@multitable’.<br />

@itemize [marcatore_iniziale]<br />

<br />

<br />

...<br />

...<br />

<br />

...<br />

@itemx<br />

...<br />

<br />

Questo comando di Texinfo viene usato in contesti molto diversi. All’interno di Sgmltexi<br />

non esiste un modo unico per utilizzarlo, per cui conviene vedere piuttosto la descrizione<br />

dei comandi ‘@table’, ‘@ftable’ e ‘@vtable’.<br />

@kbd{tasti_premuti }<br />

tasti_premuti <br />

@kbdinputstyle stile<br />

<br />

@key{nome_tasto }<br />

nome_tasto


2824 Corrispondenza tra Texinfo e Sgmltexi<br />

@kindex voce<br />

@L{}<br />

@l{}<br />

@lisp<br />

<br />

&Lstrok;<br />

&lstrok;<br />

<br />

blocco_di_testo<br />

...<br />

...<br />

<br />

Preformattato:<br />

<br />

<br />

riga_di_testo<br />

...<br />

...<br />

<br />

<br />

Letterale:<br />

<br />

<br />

<br />

<br />

<br />

@lowersections<br />

Non disponibile. Eventualmente può essere usato all’interno dell’elemento ‘texinfo’.<br />

@macro nome_macro<br />

{parametri}<br />

Non disponibile. Eventualmente può essere usato all’interno dell’elemento ‘texinfo’.<br />

@majorheading titolo<br />

Non disponibile attualmente.<br />

@math{espressione_matematica }<br />

@menu<br />

espressione_matematica <br />

[menù_info ]<br />

@minus{}<br />

&minus;


Corrispondenza tra Texinfo e Sgmltexi 2825<br />

@multitable larghezza_delle_colonne<br />

<br />

frazione_larghezza_complessiva ...<br />

cella[cella] ......<br />

...<br />

<br />

<br />

testo_di_esempio...<br />

cella[cella] ......<br />

...<br />

<br />

@need n<br />

<br />

@node nome , successivo, precedente, superiore<br />

La gestione manuale dei nodi di Texinfo avviene come si vede nello schema seguente, dove<br />

ci si limita a stabilire il nome del nodo in questione:<br />

titolo<br />

Se è necessario un controllo completo sui nodi, si possono stabilire anche gli altri dati,<br />

come nello schema seguente:<br />

titolo<br />

Sgmltexi non fa alcun controllo di validità per quanto riguarda l’inserzione manuale dei<br />

nodi.<br />

@noindent<br />

<br />

@novalidate<br />

O{}<br />

o{}<br />

Non disponibile. Eventualmente può essere usato all’interno dell’elemento ‘texinfo’.<br />

&Oslash;<br />

&oslash;<br />

@oddfooting<br />

@oddheading<br />

Non disponibile. Eventualmente può essere usato all’interno dell’elemento ‘texinfo’.<br />

@option{opzione}<br />

@page<br />

opzione<br />

<br />

@pagesizes [ampiezza][, altezza]<br />

Non disponibile.<br />

@paragraphindent rientro<br />

Non disponibile.<br />

@pindex voce<br />


2826 Corrispondenza tra Texinfo e Sgmltexi<br />

@point{}<br />

&point;<br />

@pounds{}<br />

&pound;<br />

@print{}<br />

&print;<br />

@printindex nome_indice<br />

<br />

@pxref{nome_nodo , [voce], [argomento_o_titolo], [file_info], [manual]}<br />

<br />

@questiondown{}<br />

&iquest;<br />

@quotation<br />

<br />

testo_interno_alle_righe<br />

...<br />

...<br />

<br />

@r{testo}<br />

testo<br />

@raisesections<br />

Non disponibile.<br />

@ref{nome_nodo , [voce], [argomento_o_titolo], [file_info], [manuale]}<br />

@refill<br />

<br />

Non disponibile.<br />

@result{}<br />

&result;<br />

@ringaccent{c}<br />

Per la rappresentazione di caratteri speciali, si possono utilizzare le entità standard<br />

SGML, oppure i caratteri della codifica ISO 8859-n selezionata con l’opzione<br />

‘--input-encoding’, o con l’attributo ‘charset’ dell’elemento ‘sgmltexi’.<br />

@samp{testo}<br />

testo<br />

@sc{testo}<br />

testo<br />

@set flag string<br />

Non disponibile. Eventualmente può essere usato all’interno dell’elemento ‘texinfo’.


Corrispondenza tra Texinfo e Sgmltexi 2827<br />

@setchapternewpage on<br />

@setchapternewpage off<br />

@setchapternewpage odd<br />

Si può usare l’elemento ‘setchapternewpage’, come negli schemi seguenti:<br />

<br />

<br />

<br />

In alternativa si può utilizzare l’opzione ‘--setchapternewpage’, nella riga di comando:<br />

--setchapternewpage=on<br />

--setchapternewpage=off<br />

--setchapternewpage=odd<br />

@setcontentsaftertitlepage<br />

Non disponibile.<br />

@setfilename nome_file_info<br />

<br />

@setshortcontentsaftertitlepage<br />

Non disponibile.<br />

@settitle titolo<br />

<br />

@shortcontents<br />

<br />

@shorttitlepage title<br />

Non disponibile.<br />

@smallbook<br />

Si usa per questo l’opzione: ‘--paper=small’.<br />

@smalldisplay<br />

<br />

blocco_di_testo<br />

...<br />

...<br />

<br />

@smallexample<br />

<br />

bloco_di_testo<br />

...<br />

...<br />

<br />

Preformattato:<br />

<br />

<br />

riga_di_testo<br />

...<br />

...<br />

<br />

<br />

Letterale:


2828 Corrispondenza tra Texinfo e Sgmltexi<br />

<br />

<br />

<br />

<br />

<br />

@smallformat<br />

<br />

<br />

...<br />

...<br />

<br />

<br />

Letterale:<br />

<br />

<br />

<br />

<br />

<br />

@smalllisp<br />

@sp n<br />

@ss{}<br />

<br />

blocco_di_testo<br />

...<br />

...<br />

<br />

Preformattato:<br />

<br />

<br />

riga_di_testo<br />

...<br />

...<br />

<br />

<br />

Letterale:<br />

<br />

<br />

<br />

<br />

<br />

<br />

&szlig;<br />

@strong{testo}<br />

testo<br />

@subheading titolo<br />

titolo


Corrispondenza tra Texinfo e Sgmltexi 2829<br />

@subsection titolo<br />

titolo<br />

@subsubheading titolo<br />

titolo<br />

@subsubsection titolo<br />

titolo<br />

@subtitle sottotitolo<br />

sottotitolo<br />

@summarycontents<br />

<br />

@syncodeindex indice_di_origine indice_di_destinazione<br />

<br />

@synindex indice_di_origine indice_di_destinazione<br />

<br />

@t{testo}<br />

@tab<br />

testo<br />

Si veda la descrizione di ‘@multitable’.<br />

@table comando_di_formattazione<br />

@TeX{}<br />

@tex<br />

<br />

voce_descrittiva<br />

[voce_descrittiva] ...<br />

blocco_di_testo...<br />

...<br />

...<br />

voce_descrittiva<br />

[voce_descrittiva] ...<br />

blocco_di_testo...<br />

...<br />

...<br />

<br />

&TeX;<br />

pezzo_di_sorgente_tex <br />

@thischapter<br />

@thischaptername<br />

@thisfile<br />

@thispage<br />

@thistitle<br />

Non disponibile. Eventualmente può essere usato all’interno dell’elemento ‘texinfo’.


2830 Corrispondenza tra Texinfo e Sgmltexi<br />

@tieaccent{cc}<br />

Non disponibile. Eventualmente può essere usato all’interno dell’elemento ‘texinfo’.<br />

@tindex voce<br />

<br />

@title titolo<br />

titolo<br />

@titlefont{testo}<br />

Non disponibile.<br />

@titlepage<br />

Non disponibile. Si veda come è organizzata la struttura di Sgmltexi.<br />

@today<br />

&today;<br />

@top<br />

Viene generato automaticamente.<br />

@u{c}<br />

@ubaraccent{c}<br />

@udotaccent{c}<br />

Non disponibile. Eventualmente può essere usato all’interno dell’elemento ‘texinfo’.<br />

@unnumbered titolo<br />

titolo<br />

@unnumberedsec titolo<br />

titolo<br />

@unnumberedsubsec titolo<br />

titolo<br />

@unnumberedsubsubsec titolo<br />

titolo<br />

@uref{url, [testo_mostrato], [rimpiazzo]}<br />

<br />

@url{url}<br />

url<br />

@v{c}<br />

Non disponibile. Eventualmente può essere usato all’interno dell’elemento ‘texinfo’.<br />

@value{indicatore}<br />

Non disponibile. Eventualmente può essere usato all’interno dell’elemento ‘texinfo’.<br />

@var{metavariabile}<br />

metavariabile


Corrispondenza tra Texinfo e Sgmltexi 2831<br />

@vindex voce<br />

<br />

@vskip ammontare_dell’avanzamento<br />

Non disponibile. Eventualmente può essere usato all’interno dell’elemento ‘texinfo’.<br />

@vtable comando_di_formattazione<br />

<br />

voce_descrittiva<br />

[voce_descrittiva] ...<br />

blocco_di_testo...<br />

...<br />

...<br />

voce_descrittiva<br />

[voce_descrittiva] ...<br />

blocco_di_testo...<br />

...<br />

...<br />

<br />

@w{testo}<br />

testo<br />

@xref{nome_nodo , [voce], [argomento_o_titolo], [file_info], [manuale]}<br />

<br />

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org


2832 Corrispondenza tra Texinfo e Sgmltexi


Parte xlviii<br />

HTML<br />

259 URI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2835<br />

259.1 Trascrivibilità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2835<br />

259.2 Sintassi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2835<br />

259.3 Limitazioni nell’uso dei caratteri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2839<br />

259.4 Verifica della validità nel tempo con Urichk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2840<br />

259.5 Verifica degli URI con Checkbot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2841<br />

259.6 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2841<br />

260 HTML: aspetti generali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2843<br />

260.1 HTML e SGML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2843<br />

260.2 Stili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2847<br />

260.3 Struttura di un documento HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2849<br />

260.4 Attributi comuni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2851<br />

260.5 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2854<br />

261 HTML: corpo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2855<br />

261.1 Delimitazione di blocchi e di testo normale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2855<br />

261.2 Titoli e struttura implicita del testo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2855<br />

261.3 Testo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2856<br />

261.4 Elenchi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2859<br />

261.5 Tabelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2859<br />

261.6 Riferimenti ipertestuali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2861<br />

261.7 Inserzioni di oggetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2863<br />

261.8 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2864<br />

262 CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2865<br />

262.1 Logica del linguaggio CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2865<br />

262.2 Proprietà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2868<br />

262.3 Definizione della pagina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2871<br />

262.4 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2872<br />

263 HTML2ps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2873<br />

263.1 Configurazione di HTML2ps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2873<br />

263.2 Avvio di HTML2ps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2881<br />

263.3 Particolarità nell’HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2882<br />

263.4 Programma frontale per semplificare l’utilizzo di HTML2ps . . . . . . . . . . . . . . 2882<br />

263.5 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2883<br />

2833


264 Introduzione a Amaya . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2884<br />

264.1 Navigazione e <strong>composizione</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2885<br />

264.2 Configurazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2887<br />

264.3 Aggregazione di un documento composto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2887<br />

264.4 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2888<br />

265 HTMLDOC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2889<br />

265.1 Sorgente HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2889<br />

265.2 Funzionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2890<br />

265.3 Programmazione della <strong>composizione</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2896<br />

266 Essere presenti su Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2899<br />

266.1 Motori di ricerca e robot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2899<br />

266.2 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2902<br />

2834


URI<br />

Capitolo 259<br />

Un URI (Uniform resource identifier) è un indirizzo espresso attraverso una stringa di caratteri<br />

per identificare una risorsa fisica o astratta. La risorsa in questione è un’entità e la sua collocazione<br />

non si trova necessariamente all’interno di una rete. In pratica, il concetto di URI incorpora i<br />

concetti di URL (Uniform resource locator) e di URN (Uniform resource name).<br />

Un URL identifica una risorsa rappresentando il metodo di accesso a questa; un URN identifica<br />

la risorsa attraverso un nome, che deve essere unico a livello globale e deve persistere anche<br />

quando la risorsa cessa di esistere o diventa inaccessibile.<br />

259.1 Trascrivibilità<br />

L’esigenza primaria degli indirizzi URI è la loro «trascrivibilità». Con questo termine si vuole<br />

fare riferimento alla facilità con la quale questi devono poter essere trascritti, sia a livello<br />

meccanico, sia a livello umano. In pratica:<br />

• un URI è composto da una sequenza di «caratteri» e non necessariamente da ottetti (byte);<br />

• un URI deve poter essere trascritto attraverso qualunque mezzo, come una pubblicazione<br />

stampata o un appunto fatto a mano, in tal senso non può utilizzare caratteri particolari che<br />

possono mancare in un contesto determinato;<br />

• un URI deve poter essere ricordato facilmente dalle persone, per cui è utile che la stringa<br />

che rappresenta un URI abbia un significato che ne faciliti la memorizzazione.<br />

Dal momento che ci deve essere la possibilità di rappresentare un URI all’interno di parentesi di<br />

qualsiasi tipo, i caratteri corrispondenti a queste parentesi non possono essere utilizzati letteralmente<br />

all’interno di un indirizzo del genere. Le parentesi in questione sono quelle tonde, quadre,<br />

graffe e angolari: ‘(’, ‘)’, ‘[’, ‘]’, ‘{’, ‘}’, ‘’.<br />

259.2 Sintassi<br />

La sintassi di un URI è piuttosto complessa, perché dipende molto dal contesto a cui si applica.<br />

Non è il caso si entrare troppo nel dettaglio; piuttosto è meglio apprendere la logica della cosa.<br />

schema :parte_successiva_dipendente_dallo_schema<br />

Quello che si vede è il modello di prima approssimazione di un indirizzo URI assoluto (verrà<br />

trattato in seguito il concetto di URI relativo). In questa prima fase si distinguono due parti,<br />

separate da due punti verticali (‘:’), dove prima appare un nome che definisce uno «schema» e<br />

poi continua con una stringa che va interpretata in base alle regole specifiche di quello schema.<br />

La sintassi di un URI non stabilisce a priori quale sia la forma che deve avere la stringa che segue<br />

i due punti; tuttavia, è frequente l’utilizzo di URI secondo i modelli seguenti:<br />

schema ://autorità[percorso[?interrogazione]]<br />

schema :/percorso<br />

Convenzionalmente, quando una risorsa viene individuata attraverso un URI che per sua natura<br />

contiene un’informazione gerarchica, la separazione tra i vari livelli di questa gerarchia avviene<br />

utilizzando una barra obliqua normale (‘/’). Si tratta evidentemente di una tecnica ereditata dal<br />

2835


2836 URI<br />

file system Unix; tuttavia, ciò resta indipendente dal fatto che la risorsa in questione risieda<br />

fisicamente all’interno di un file system o meno.<br />

La figura 259.1 mostra alcuni esempi a proposito di URI composti secondo i modelli più<br />

frequenti.<br />

Figura 259.1. Esempi di URI comuni.<br />

http://www.brot.dg/esempi/indice.html<br />

| | \_________________/<br />

| | |<br />

schema autorità percorso<br />

file:///home/tizio/indice.html<br />

| \_____________________/<br />

| |<br />

schema percorso<br />

urn:isbn:88-256-0223-5<br />

| | \___________/<br />

| | |<br />

schema NID NSS<br />

Nella figura si vede anche un caso particolare, riferito a un URN di tipo ISBN (International<br />

standard book number). Lo schema di un URN è sempre ‘urn:’; a questo segue l’indicazione di<br />

un NID (Namespace identifier), ovvero un identificatore che qualifica l’informazione successiva;<br />

infine si inserisce l’informazione, definita NSS (Namespace specific string), ovvero ciò che va<br />

inteso nel contesto stabilito dal NID. L’esempio che appare nella figura fa riferimento al numero<br />

ISBN 88-256-0223-5, esprimendolo in forma di URN.<br />

259.2.1 Accesso a un servente attraverso la rete<br />

Quando l’indirizzo URI si riferisce a un servizio offerto attraverso la rete, la struttura di ciò che<br />

è stato definito come «autorità» si articola in modo particolare:<br />

[utente[:parola_d’ordine]@]host[:porta]<br />

In questo modo si può specificare il nominativo utente per l’accesso alla risorsa, eventualmente<br />

anche la parola d’ordine (benché ciò sia decisamente sconsigliabile per motivi di sicurezza),<br />

quindi il nodo che offre il servizio e infine la porta del servizio.<br />

Il nodo può essere indicato per nome, attraverso il nome di dominio, oppure attraverso il numero<br />

IPv4. Purtroppo non è stato definito un modo per indicare un numero IPv6, dal momento che la<br />

sua forma renderebbe impossibile l’interpretazione corretta dell’indirizzo.<br />

Se si omettono le informazioni riferite all’utente, vuol dire che queste non sono necessarie, oppure<br />

che esistono dei valori predefiniti per questo; per quanto riguarda la porta del servizio, se<br />

questa non viene indicata si fa riferimento sempre al suo valore predefinito. Naturalmente, è<br />

stabilito dal servente quali siano i valori predefiniti.<br />

259.2.2 Riferimento agli URI<br />

Per sua natura, l’indirizzo URI è un riferimento a una risorsa. In generale vanno considerate<br />

anche due circostanze particolari: il riferimento a un frammento della risorsa e l’indicazione di<br />

URI relativi.<br />

Un URI relativo è un indirizzo ridotto che parte da un punto di partenza conosciuto. Il principio<br />

deriva dal concetto di percorso relativo all’interno di un file system. In generale, un URI relativo<br />

può essere indicato omettendo tutta la parte iniziale che si possa determinare altrimenti.


URI 2837<br />

Di fronte a un URI che contenga un’informazione sul percorso in forma gerarchica, è abbastanza<br />

facile intendere cosa sia la base di riferimento per gli URI relativi: basta togliere dall’indirizzo<br />

attuale tutto quello che segue l’ultima barra obliqua. Per esempio, per il documento<br />

http://www.brot.dg/esempi/articolo.html<br />

l’URI di base è<br />

http://www.brot.dg/esempi/<br />

per cui, il riferimento a ‘figure/foto.jpg’ richiama effettivamente l’URI<br />

http://www.brot.dg/esempi/figure/foto.jpg<br />

Il percorso di un URI relativo può essere indicato anche con una barra obliqua iniziale, ma<br />

in questo caso si farà riferimento a un percorso assoluto nell’ambito dell’URI. Continuando<br />

con l’esempio precedente, il riferimento a ‘/nuovo/documento.html’ richiama effettivamente<br />

l’URI<br />

http://www.brot.dg/nuovo/documento.html<br />

In presenza di un percorso relativo, è possibile utilizzare anche i simboli ‘.’ e ‘..’, con lo stesso<br />

significato che hanno nel file system Unix: il primo rappresenta la posizione corrente e il secondo<br />

quella precedente.<br />

È importante osservare che il riferimento alla stringa nulla indica implicitamente lo stesso URI<br />

iniziale.<br />

Il problema degli URI relativi non è così semplice come è stato descritto. In realtà vanno prese<br />

in considerazione altre cose, come per esempio la possibilità che il tipo di risorsa (di solito in<br />

un documento HTML) possa incorporare l’informazione esplicita di un URI di base.<br />

Quando il tipo di risorsa lo consente, è possibile aggiungere all’URI l’indicazione di un frammento<br />

particolare. Questa parte aggiuntiva la si riconosce perché è preceduta dal simbolo<br />

‘#’:<br />

http://www.brot.dg/esempi/articolo.html#commento<br />

L’esempio mostra il riferimento al frammento ‘#commento’ nell’ambito dell’URI ‘http://<br />

www.brot.dg/esempi/articolo.html’. Dal momento che la stringa nulla fa riferimento alla<br />

risorsa attuale, i riferimenti interni alla stessa risorsa sono indicati facilmente attraverso il solo<br />

frammento:<br />

#commento<br />

L’esempio mostra un riferimento relativo al frammento ‘#commento’ della risorsa corrente.<br />

259.2.3 Esempi<br />

Frequentemente, il nome dello schema dell’indirizzo URI corrisponde al nome del protocollo<br />

necessario per raggiungere la risorsa relativa. I più comuni sono:<br />

• ‘http’<br />

• ‘ftp’<br />

• ‘gopher’<br />

• ‘mailto’<br />

• ‘wais’


2838 URI<br />

• ‘telnet’<br />

• ‘tn3270’<br />

• ‘news’<br />

Quando si vuole fare riferimento a un file locale senza utilizzare alcun protocollo particolare, si<br />

può indicare anche lo schema ‘file’, ma in questo caso ci sono delle particolarità che verranno<br />

mostrate dagli esempi.<br />

• http://www.brot.dg:8080/esempi/indice.html<br />

– protocollo HTTP<br />

– nodo www.brot.dg<br />

– porta 8080<br />

Viene indicata la porta perché si vuole fare riferimento a un valore diverso dallo<br />

standard che per il protocollo HTTP è 80<br />

– risorsa ‘/esempi/indice.html’<br />

• http://www.brot.dg/esempi/indice.html<br />

Come nell’esempio precedente, ma senza l’indicazione della porta che questa volta<br />

corrisponderà al valore predefinito, cioè 80.<br />

• http://192.168.1.1/esempi/indice.html<br />

Come nell’esempio precedente, ma l’indicazione del nodo avviene per mezzo del suo<br />

indirizzo IPv4 invece che attraverso il nome di dominio.<br />

• ftp://ftp.brot.dg/pub/archivi/esempio.tar.gz<br />

– protocollo FTP<br />

– nodo ftp.brot.dg<br />

– risorsa ‘/pub/archivi/esempio.tar.gz’<br />

• ftp://tizio@ftp.brot.dg/pub/archivi/esempio.tar.gz<br />

Come nell’esempio precedente, con la differenza che si fa riferimento a un utente<br />

particolare.<br />

• ftp://tizio:segretissima@ftp.brot.dg/pub/archivi/esempio.tar.gz<br />

Come nell’esempio precedente, con la differenza che si aggiunge l’indicazione della parola<br />

d’ordine di accesso al servizio, cosa che in generale è bene non passare mai in questo modo.<br />

• file://localhost/home/daniele/indice.html<br />

In questo caso si vuole fare riferimento a un file locale. Precisamente si tratta del file<br />

‘/home/daniele/indice.html’ contenuto nell’elaboratore localhost.<br />

Questo tipo di indicazione è utile specialmente quando si vuole fare riferimento a una pagina<br />

indice o iniziale, caricata automaticamente all’atto dell’avvio di un programma cliente<br />

per la navigazione.<br />

• file:///home/daniele/indice.html<br />

Esattamente come nell’esempio precedente, con la differenza che si omette l’indicazione<br />

esplicita dell’elaboratore locale: localhost.


URI 2839<br />

• file:/home/daniele/indice.html<br />

Esattamente come nell’esempio precedente, con la differenza che si utilizza una sola barra<br />

obliqua dopo l’indicazione ‘file:’ (ma in generale è preferibile la forma precedente, con<br />

le tre barre oblique).<br />

• mailto:tizio@dinkel.brot.dg<br />

Si tratta di un indirizzo di posta elettronica, nel quale è essenziale fornire l’indicazione del<br />

nominativo utente. Dopo il nome del nodo di destinazione non appare un percorso, perché<br />

in questo caso non avrebbe significato.<br />

259.3 Limitazioni nell’uso dei caratteri<br />

Ogni componente di un URI ha delle regole proprie nell’uso dei caratteri, dal momento che alcuni<br />

di questi hanno significati speciali. Purtroppo le regole in questione sono tante e la cosa migliore<br />

che si può fare è quella di usare il buon senso, riservando la lettura della documentazione specifica<br />

ai casi in cui è indispensabile chiarire il problema nel dettaglio (RFC 2396).<br />

In generale non è ammissibile l’uso dello spazio. Infatti, considerato il principio di trascrivibilità<br />

degli URI, lo spazio dovrebbe essere inteso solo come una necessità legata al tipo di trascrizione<br />

utilizzata. Per il resto, se la propria lingua lo consente, sarebbe bene limitarsi all’uso delle lettere<br />

dell’alfabeto latino (maiuscole e minuscole, ma senza accenti), le cifre numeriche e alcuni simboli:<br />

‘@’, ‘*’, ‘_’, ‘-’ e il punto (‘.’). Gli altri simboli possono creare problemi di trascrivibilità o<br />

avere significati particolari (basta pensare alle barre oblique e ai due punti verticali).<br />

Quando un simbolo particolare non può essere utilizzato in modo letterale nel contesto in cui<br />

lo si vuole inserire, può essere indicato attraverso una notazione speciale: ‘%hh ’. La sigla hh<br />

rappresenta una coppia di cifre esadecimali. A questa regola fa eccezione lo spazio che viene<br />

codificato normalmente con il segno ‘+’, ma non in tutte le occasioni (di solito solo nelle stringhe<br />

di richiesta).<br />

Generalmente, per gli indirizzi URI normali non c’è la necessità di preoccuparsi di questo problema,<br />

anche la tilde può essere utilizzata letteralmente nell’indicazione dei percorsi. La tabella<br />

259.1 mostra l’elenco di alcune corrispondenze tra simboli particolari e la codifica alternativa<br />

utilizzabile negli URI.<br />

Tabella 259.1. Alcune corrispondenze tra simboli particolari e codifica alternativa<br />

utilizzabile negli URI.<br />

Carattere Codifica corrispondente<br />

% %25<br />

& %26<br />

+ %2B<br />

/ %2F<br />

= %3D<br />

In linea di principio, un URI dovrebbe essere realizzato in modo da non dover utilizzare questa<br />

tecnica di protezione per i caratteri «speciali». La situazione più probabile in cui è necessario<br />

utilizzare questo procedimento è riferito alle stringhe di interrogazione.


2840 URI<br />

259.4 Verifica della validità nel tempo con Urichk<br />

Un punto debole delle pubblicazioni ipertestuali è la rapidità con cui le informazioni vengono<br />

spostate o eliminate dalla rete. In questo senso, un riferimento a un URI è spesso qualcosa di<br />

provvisorio, che andrebbe verificato frequentemente.<br />

Per attenuare questo problema esiste Urichk, 1 ovvero un programma molto semplice che è in<br />

grado di verificare la validità di indirizzi HTTP e FTP contenuti in un documento.<br />

Il suo funzionamento è molto semplice: legge un file ed estrae da questo i riferimenti di tipo<br />

HTTP e FTP; quindi si avvale di altri programmi per la verifica di questi indirizzi.<br />

urichk --input-type=tipo file_da_analizzare rapporto_errori<br />

Come si vede dal modello sintattico, si deve definire il tipo del file in ingresso, per sapere come<br />

estrapolare l’informazione nel modo corretto; inoltre, dopo l’indicazione del file da scandire, si<br />

aggiunge il nome di un altro file che serve per annotare i riferimenti che sembrano non essere più<br />

validi.<br />

Il file che viene generato (l’ultimo argomento) è di tipo HTML, in modo da poter riprovare<br />

facilmente gli indirizzi che sembrano errati. Infatti, Urichk riporta gli errori, ma non è in grado<br />

di distinguere se la risorsa a cui si fa riferimento è realmente scomparsa o se si tratta si una<br />

situazione transitoria (come un servizio FTP sovraccarico). Evidentemente, la valutazione finale<br />

non può essere decisa automaticamente.<br />

Tabella 259.2. Parole chiave usate con l’opzione ‘--input-type’ per distinguere il tipo<br />

di file indicato in ingresso.<br />

Tipo<br />

standard<br />

html|sgml<br />

texi|texinfo<br />

Descrizione<br />

Si tratta di un file di testo normale.<br />

Si tratta di un file SGML tipico.<br />

Si tratta di un sorgente Texinfo.<br />

L’esempio seguente mostra il caso dell’analisi del file ‘prova.html’:<br />

$ urichk --input-type=html prova.html rapporto.html<br />

L’elaborazione richiede che sia disponibile l’accesso alla rete esterna (altrimenti tutti gli URI<br />

risulteranno errati) e anche molto tempo. Le varie richieste di connessione, eseguite per verificare<br />

gli indirizzi, avvengono in modo indipendente, attraverso degli eseguibili controllati da<br />

‘urichk’. In questo senso, il file del rapporto viene scritto in modo disgiunto da questi sottoprogrammi.<br />

In generale, quando termina di funzionare l’eseguibile principale, ‘urichk’, anche<br />

gli altri eseguibili dovrebbero avere terminato il loro lavoro.<br />

Urichk dipende dalla disponibilità di altri programmi: Wget per il controllo degli URI di tipo<br />

HTTP; ImageMagick, precisamente l’eseguibile ‘xtp’, per il controllo degli URI di tipo FTP. 2<br />

259.4.1 Installare Urichk<br />

Urichk si compone di tre programmi Perl: ‘urichk’ (il programma frontale), ‘urichk-ftp’ e<br />

‘urichk-http’. Se l’interprete Perl si trova in una posizione diversa da quella tipica per un<br />

sistema GNU/Linux, ovvero ‘/usr/bin/perl’, basta modificare la prima parte di questi file:<br />

1 Urichk GNU GPL<br />

2 Alcune edizioni di Urichk, al posto di utilizzare il programma ‘xtp’ di ImageMagick potrebbero avvalersi si Curl.<br />

Infatti, a volte crea degli strani problemi.


URI 2841<br />

#!/usr/bin/perl<br />

#...<br />

Questi eseguibili devono poi essere collocati in una posizione conveniente, precisamente dove<br />

possono essere avviati senza bisogno di indicare il percorso. In pratica, in una delle directory<br />

previste nella variabile di ambiente ‘PATH’.<br />

Urichk utilizza Gettext, attraverso il modulo Perl-gettext. Per installare la traduzione italiana dei<br />

messaggi, <strong>occorre</strong> procedere nel modo seguente:<br />

$ msgfmt -vvvv -o urichk.mo it.po<br />

Il file ‘it.po’ è contenuto nel pacchetto di distribuzione di Urichk, mentre il file ‘urichk.mo’<br />

deve essere creato come mostrato. Questo file, va poi installato nella directory adatta, che<br />

probabilmente è ‘/usr/share/locale/it/LC_MESSAGES/’.<br />

Infine, <strong>occorre</strong> ricordare che Urichk non è autonomo nella verifica degli indirizzi. Per questo<br />

dipende da Wget e ImageMagick come è già stato descritto.<br />

259.5 Verifica degli URI con Checkbot<br />

Checkbot 3 è un programma Perl molto semplice da utilizzare, per controllare la validità degli<br />

indirizzi contenuti in una pagina HTML locale o remota. Il suo utilizzo è molto semplice e il<br />

rapporto che si ottiene è molto dettagliato, consentendo una comprensione chiara del tipo di<br />

errore che impedisce di raggiungere qualche indirizzo URI. Tutto viene gestito attraverso un<br />

eseguibile unico denominato ‘checkbot’:<br />

checkbot [opzioni] [uri_iniziale ... ]<br />

Nella situazione più semplice, si utilizza Checkbot specificando un solo indirizzo URI iniziale da<br />

scandire: se si tratta di una pagina HTML, vengono analizzati tutti i riferimenti contenuti al suo<br />

interno. Per esempio così:<br />

$ checkbot file:///home/tizio/prova.html<br />

Come si vede, è opportuno indicare sempre il riferimento alla pagina da scandire utilizzando un<br />

URI, anche se si tratta di un file locale.<br />

Leggendo la pagina di manuale checkbot(1), si possono trovare tante opzioni per questo programma.<br />

Tuttavia, il suo funzionamento normale non richiede nulla, salvo forse la necessità di<br />

indicare un proxy indispensabile per raggiungere la rete esterna (con l’opzione ‘--proxy uri’).<br />

Se non si indica nulla di diverso attraverso le opzioni della riga di comando, la scansione genera<br />

il file ‘checkbot.html’ e un altro file il cui nome rispetta il modello ‘checkbot-nodo.html’.<br />

Il primo di questi due è un riepilogo dell’esito della scansione, mentre il secondo elenca dettagliatamente<br />

gli URI per i quali c’è stato qualche problema. Comunque, si raggiunge il secondo<br />

attraverso un riferimento ipertestuale presente nel primo.<br />

259.6 Riferimenti<br />

• T. Berners-Lee, R. Fielding, U.C. Irvine, L. Masinter, RFC 2396: Uniform Resource<br />

Identifiers (URI): General Syntax, 1998<br />

<br />

<br />

3 Checkbot stesse condizioni di Perl


2842 URI<br />

• Daniele Giacomini, Urichk<br />

<br />

• International ISBN agency, The ISBN Users’ Manual<br />

<br />

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org


HTML: aspetti generali<br />

Capitolo 260<br />

HTML sta per Hypertext markup language e in pratica è un formato SGML per i documenti<br />

della rete che fa uso di un DTD particolare: HTML appunto. La formattazione di un documento<br />

HTML non può mai essere valutata perfettamente in anticipo, perché dipende da diversi fattori:<br />

• il programma utilizzato per visualizzare il documento;<br />

• la risoluzione utilizzata;<br />

• i tipi di carattere a disposizione;<br />

• la profondità di colori disponibili.<br />

Lo standard HTML è tale per cui tutti (o quasi) i programmi utilizzabili per la lettura di tali<br />

documenti sono in grado di cavarsela. Ma questo risultato minimo è ben lontano dall’esigenza<br />

di costruire qualcosa che tutti possano vedere più o meno nello stesso modo. Per questo, quando<br />

si costruisce un documento HTML, <strong>occorre</strong> pensare all’utenza a cui è destinato, in modo da<br />

decidere quali caratteristiche possono essere utilizzate e quali invece è meglio scartare per evitare<br />

inutili problemi di lettura.<br />

L’HTML nasce all’inizio degli anni 1990, abbinato in particolare al primo navigatore: Mosaic.<br />

Da quel momento a oggi il formato HTML ha subito diversi aggiornamenti; si ricorda in particolare<br />

la versione 2.0 del 1995 e la versione 3.2 del 1997. Allo stato attuale, lo sviluppo di questo<br />

standard è condotto da W3C (World wide web consortium) e in questo capitolo si fa riferimento<br />

alla versione 4.<br />

Si potrebbe dire che l’HTML abbia ricevuto un successo iniziale superiore alle sue possibilità tecniche,<br />

cosa che ha causato una proliferazione di varianti. In pratica, chi ha realizzato i programmi<br />

di navigazione, volendo offrire effetti speciali che non potevano essere ottenuti altrimenti, ha definito<br />

nel tempo una propria estensione allo standard di partenza (e anche a quelli successivi).<br />

Questo però ha creato e crea ancora oggi una grande confusione sul modo corretto di scrivere<br />

un documento in formato HTML. Questo problema si aggrava anche di più nel momento in cui<br />

questi navigatori non sono in grado di gestire correttamente gli standard indipendenti.<br />

Lo spirito alla base dello sviluppo dell’HTML da parte del W3C, come ente indipendente, è<br />

quello di ottenere un formato multimediale-ipertestuale completo, adatto per la lettura attraverso<br />

qualunque tipo di mezzo: dal terminale tattile braille al documento stampato. Le estensioni proprietarie<br />

di questo standard si sono rivolte principalmente all’aspetto visuale e scenografico di<br />

questo formato, trascurando le altre esigenze. Scrivere un documento «puro» in HTML è un’arte<br />

raffinata, che attualmente non è conosciuta abbastanza. In generale, maggiori sono i contenuti e<br />

le esigenze di divulgazione, minori devono essere le pretese estetiche.<br />

La documentazione di riferimento per tutto ciò che riguarda l’HTML è quella offerta dal W3C:<br />

, in particolare .<br />

260.1 HTML e SGML<br />

L’HTML è un linguaggio di <strong>composizione</strong> basato sull’SGML (si veda quando descritto a partire<br />

dal capitolo 249). Come tale, un documento HTML inizia sempre con la dichiarazione del DTD;<br />

poi tutto il documento viene racchiuso nell’elemento principale di questa struttura:<br />

<br />

<br />

2843


2844 HTML: aspetti generali<br />

...<br />

...<br />

...<br />

<br />

Purtroppo, la maggior parte dei programmi di navigazione o di <strong>composizione</strong> per il formato<br />

HTML non è in grado di comprendere tutte le regole dell’SGML, per cui <strong>occorre</strong> evitare di<br />

utilizzare alcune delle sue caratteristiche. In particolare bisogna evitare:<br />

• la creazione di entità interne per l’utilizzo di macro specifiche relative al testo;<br />

<br />

<br />

<br />

<br />

]><br />

• le sezioni marcate per l’inclusione e l’esclusione del testo;<br />

<br />

...<br />

]]><br />

...<br />

<br />

...<br />

]]><br />

• le sezioni marcate per individuare un contenuto di tipo ‘CDATA’, allo scopo di proteggere il<br />

simbolo ‘


HTML: aspetti generali 2845<br />

PUBLIC "-//W3C//DTD HTML 4.01//EN"<br />

strict.dtd<br />

PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" loose.dtd<br />

PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" frameset.dtd<br />

PUBLIC "-//W3C//ENTITIES Latin1//EN//HTML" HTMLlat1.ent<br />

PUBLIC "-//W3C//ENTITIES Special//EN//HTML" HTMLspecial.ent<br />

PUBLIC "-//W3C//ENTITIES Symbols//EN//HTML" HTMLsymbol.ent<br />

Con questo catalogo, una copia dei file che sono stati elencati prima deve trovarsi nella directory<br />

corrente. Si noti l’istruzione iniziale, ‘OVERRIDE YES’, con la quale si vuole permettere la<br />

dichiarazione del DTD come è già stato mostrato:<br />

<br />

In questo modo, se è disponibile un collegamento con la rete esterna, si utilizza direttamente il<br />

DTD originale, presso www.w3.org, mentre se questa possibilità manca, si fa riferimento ai<br />

file locali attraverso le specifiche del catalogo.<br />

Nell’esempio seguente si utilizza il programma ‘nsgmls’ (del pacchetto SP) supponendo in particolare<br />

che il catalogo sia contenuto nel file ‘catalogo’; il file da verificare viene indicato<br />

come ‘mio_file.html’. Il catalogo e il file da controllare si intendono collocati nella directory<br />

corrente.<br />

$ cat mio_file.html | nsgmls -s -c catalogo<br />

È il caso di ricordare che alcune distribuzioni GNU/Linux, in particolare Debian, predispongono<br />

un pacchetto apposito contenente i DTD più comuni riferiti alle varie versioni dell’HTML,<br />

comprese le estensioni proprietarie, assieme alle relative entità standard. Naturalmente, il tutto<br />

è organizzato in un catalogo unico che va eventualmente ad aggiornare il catalogo di sistema<br />

(dovrebbe trattarsi del file ‘/etc/sgml.catalog’, oppure del file ‘/usr/share/sgml/<br />

catalog’). Il nome di questo pacchetto potrebbe essere ‘sgml-data<br />

* ’.<br />

Oltre alla verifica in base al DTD sarebbe opportuno sapere leggere il contenuto del DTD stesso.<br />

A questo proposito è da notare il fatto che nel manuale che descrive le specifiche HTML di<br />

W3C, si fa spesso riferimento alle caratteristiche degli elementi attraverso lo schema offerto<br />

dalla dichiarazione relativa nel DTD. In effetti, ciò permette di rendere molto chiara e precisa la<br />

descrizione che ne viene fatta subito dopo.<br />

260.1.1 Attributi comuni attraverso le entità parametriche<br />

Il DTD dell’HTML 4.01 fa un uso massiccio di entità parametriche e questo può disorientare<br />

inizialmente. In generale basta ricordare che qualunque cosa nella forma ‘%nome ;’ è una macro<br />

che si espande in una stringa. La dichiarazione di queste entità parametriche avviene nella parte<br />

iniziale del DTD, attraverso istruzioni del tipo:<br />

<br />

È interessante notare l’utilizzo di entità parametriche per fare riferimento agli attributi degli elementi.<br />

Infatti, quasi tutti gli elementi dell’HTML 4.01 prevedono l’uso di attributi, per cui si<br />

è ritenuto opportuno classificarli all’interno di entità parametriche. In particolare è importante<br />

individuarne due molto importanti:<br />

<br />


2846 HTML: aspetti generali<br />

"lang %LanguageCode; #IMPLIED -- language code --<br />

dir (ltr|rtl) #IMPLIED -- direction for weak/neutral text --"<br />

><br />

Si può osservare che anche la dichiarazione di queste entità è sottoposta all’interpretazione di<br />

altre macro; queste riguardano il tipo di contenuto relativo agli attributi.<br />

La macro ‘%coreattrs;’ serve a individuare un gruppo di attributi disponibili nella maggior<br />

parte degli elementi:<br />

• ‘id’ permette di attribuire una stringa di riconoscimento all’elemento, in modo da potervi<br />

fare riferimento;<br />

• ‘class’ permette di abbinare all’elemento una classe, definita attraverso un nome, in modo<br />

da potergli attribuire uno stile particolare;<br />

• ‘stile’ permette definire l’abbinamento con uno stile;<br />

• ‘title’ permette di attribuire un «titolo» all’elemento, cosa che si traduce in pratica in<br />

modo differente a seconda del contesto (ovvero, a seconda dell’elemento a cui si applica).<br />

La macro ‘%i18n;’ serve invece a definire ciò che riguarda la localizzazione:<br />

• ‘lang’ permette di indicare una sigla, secondo lo standard ISO 639 (sezione 543) e anche<br />

secondo altri standard, per attribuire all’elemento il linguaggio relativo;<br />

• ‘dir’ permette di stabilire il flusso del testo nel risultato finale, dove la parola chiave ‘ltr’<br />

si riferisce a uno scorrimento da sinistra a destra (Left to right) e la parola chiave ‘rtl’<br />

indica uno scorrimento opposto, da destra a sinistra (Right to left).<br />

Gli attributi a cui si fa riferimento attraverso le macro ‘%coreattrs;’ e ‘%i18n;’ sono così<br />

importanti che si trova un’altra entità parametrica che le raccoglie per comodità:<br />

<br />

La macro ‘%events;’ si riferisce a una serie di attributi legati a «eventi», ovvero azioni che si<br />

compiono con il mouse o con la tastiera.<br />

Si osservi, a titolo di esempio, la dichiarazione dell’elemento ‘P’, dove gli attributi sono tutti<br />

quelli più comuni, rappresentati dalla macro ‘%attrs;’, ovvero dalla somma di ‘%coreattrs;’,<br />

‘%i18n;’ e ‘%events;’:<br />

<br />

<br />

260.1.2 Classificazione fondamentale degli elementi<br />

All’interno di un documento HTML si distinguono due gruppi di elementi fondamentali: quelli<br />

che rappresentano dei blocchi e quelli che servono a inserire qualcosa all’interno di una riga<br />

di testo normale. Questa suddivisione corrisponde a due macro: ‘%block;’ e ‘%inline’<br />

rispettivamente.<br />

Per fare un esempio, l’elemento ‘P’ (paragrafo) è un «blocco», mentre l’elemento ‘EM’ (enfasi) è<br />

un componente interno a una riga di testo.


HTML: aspetti generali 2847<br />

Questa classificazione semplifica molto la dichiarazione degli elementi, come nel caso dell’elemento<br />

‘P’, già visto, il cui contenuto è semplicemente tutto ciò che va inserito nelle righe di<br />

testo:<br />

<br />

Alcuni elementi di un documento HTML sono ambigui, nel senso che possono contenere sia blocchi<br />

che testo. Questa ambiguità viene dichiarata attraverso la macro ‘%flow;’ che rappresenta la<br />

scelta alternativa tra un blocco o una riga di testo:<br />

<br />

A titolo di esempio si osservi la dichiarazione dell’elemento ‘LI’ che rappresenta la voce di un<br />

elenco puntato o numerato:<br />

<br />

260.2 Stili<br />

Le estensioni proprietarie dell’HTML hanno portato questo linguaggio di <strong>composizione</strong> a una<br />

proliferazione di dialetti, a causa dell’esigenza di trasferire anche le informazioni sull’aspetto<br />

finale della <strong>composizione</strong>, che in origine non erano state prese in considerazione. L’HTML 4.<br />

*<br />

standard cerca di porre rimedio a questa carenza, con l’uso di una serie di attributi che però<br />

non sono disponibili nella versione «ristretta», ciò proprio a indicare che si tratta di estensioni<br />

sconsigliate.<br />

La soluzione migliore per risolvere il problema sembra essere l’abbinamento di uno stile, che può<br />

essere dichiarato all’interno del file HTML stesso, attraverso l’elemento ‘STYLE’, attraverso l’attributo<br />

‘STYLE’, oppure in un file esterno, richiamandolo con l’elemento ‘LINK’ (verrà mostrato<br />

tra poco).<br />

L’HTML non presuppone il formato in cui può essere realizzato lo stile. È comune l’uso di stili<br />

in formato CSS (Cascading style sheet) e per farvi riferimento si indica il tipo ‘text/css’.<br />

Per il momento, non viene spiegato in che modo si scrivono le direttive in un foglio di stile CSS.<br />

Intuitivamente, il lettore può comprendere che la direttiva seguente serve a colorare in blu il<br />

contenuto degli elementi ‘H1’:<br />

H1 { color: blue }<br />

Inoltre, la direttiva seguente serve per fare in modo che il contenuto dell’elemento ‘P’ abbia il<br />

carattere di 12 punti e di colore rosso:<br />

P { font-size: 12pt; color: red }<br />

Si osservi che la stessa cosa avrebbe potuto essere scritta nel modo seguente:<br />

P {<br />

}<br />

font-size:<br />

color:<br />

12pt;<br />

red;<br />

Per definire questi stili all’interno di un documento HTML, senza fare uso di un file esterno, si<br />

potrebbe agire nel modo seguente, attraverso l’uso dell’elemento ‘STYLE’:<br />

<br />

<br />

<br />

Esempio<br />

<br />

H1 { color blue }<br />

P {


2848 HTML: aspetti generali<br />

font-size:<br />

color:<br />

}<br />

<br />

<br />

<br />

...<br />

...<br />

...<br />

<br />

<br />

12pt;<br />

red;<br />

Si comprende che il testo contenuto nell’elemento ‘STYLE’ non deve interferire con l’HTML<br />

e quindi non può contenere simboli che possano risultare ambigui. Questo problema riguarda<br />

naturalmente il linguaggio con cui è realizzato lo stile; nel caso del formato CSS non dovrebbe<br />

porsi alcun problema. Tuttavia, qualche programma utilizzato per la navigazione, potrebbe non<br />

riconoscere l’elemento ‘STYLE’, arrivando a riprodurre il testo che rappresenta in realtà lo stile.<br />

Per evitare questo problema si può circoscrivere la cosa all’interno di un commento SGML:<br />

<br />

<br />

<br />

}<br />

Volendo agire direttamente in un elemento singolo, si può utilizzare l’attributo ‘STYLE’, ma in tal<br />

caso si possono usare esclusivamente direttive CSS. Nel caso di un elemento ‘P’ isolato che deve<br />

avere un carattere di 12 punti ed essere colorato in rosso, lo si può dichiarare nel modo seguente:<br />

Attenzione!<br />

Probabilmente, il modo più elegante di abbinare uno stile a un documento HTML è quello<br />

di aggiungere un file esterno. Nell’esempio seguente si include lo stile corrispondente al file<br />

‘stile.css’:<br />

<br />

<br />

<br />

Esempio<br />

<br />

...<br />

<br />

...<br />

<br />

È chiaro che dipende dal programma di navigazione la capacità o meno di conformarsi allo<br />

stile. In generale, lo standard CSS sembra essere quello che ha più probabilità di affermarsi.


HTML: aspetti generali 2849<br />

260.3 Struttura di un documento HTML<br />

Il documento HTML è contenuto tutto nell’elemento omonimo: ‘HTML’. Nel caso della definizione<br />

«rigorosa» (il DTD ‘strict.dtd’) questo si scompone in due elementi fondamentali, ‘HEAD’<br />

e ‘BODY’, che rappresentano rispettivamente l’intestazione e il corpo:<br />

<br />

<br />

<br />

Titolo della pagina<br />

<br />

<br />

...<br />

<br />

...<br />

<br />

<br />

In generale, è conveniente annotare la lingua principale del documento, attraverso l’attributo<br />

‘LANG’ da collocare nel marcatore di apertura dell’elemento ‘HTML’:<br />

<br />

Per la precisione, il codice che definisce il linguaggio viene indicato secondo la sintassi seguente:<br />

codice_principale[-codice_secondario]<br />

In pratica, la prima parte, quella che appare prima del trattino di separazione, indica la lingua, di<br />

solito attraverso il codice ISO 639 (sezione 543), mentre la seconda parte indica l’area nazionale,<br />

secondo lo standard ISO 3166 (sezione 544), che a sua volta può implicare delle varianti nel<br />

linguaggio.<br />

In generale, un documento di grandi dimensioni realizzato attraverso il formato HTML, richiede<br />

la s<strong>composizione</strong> dello stesso in più file HTML collegati tra loro da riferimenti ipertestuali.<br />

Questa, purtroppo, è una necessità a causa delle limitazioni dei programmi di navigazione.<br />

260.3.1 Intestazione e informazioni supplementari<br />

L’intestazione è una parte del documento HTML che serve per annotare delle informazioni generali.<br />

Deve contenere almeno il titolo all’interno dell’elemento ‘TITLE’. Di solito, la riproduzione<br />

di un documento HTML non fa apparire il titolo nel testo del documento, che comunque viene<br />

usato per farvi riferimento (per esempio nel segnalibro del programma utilizzato per la sua<br />

visualizzazione).<br />

Nell’intestazione, prima o dopo il titolo, può essere conveniente collocare alcune «metainformazioni»,<br />

attraverso alcuni elementi ‘META’. Si tratta di un elemento vuoto, per il quale<br />

si utilizza soltanto il marcatore di apertura con l’indicazione di attributi opportuni. In particolare,<br />

si possono utilizzare gli attributi seguenti:<br />

• ‘NAME’ per indicare un nome che qualifica il tipo di meta-informazione (si tratta di parole<br />

chiave più o meno standard, che però non sono state definite nel DTD);<br />

• ‘HTTP-EQUIV’ per indicare un campo di risposta nell’ambito del protocollo HTTP, tenendo<br />

conto che l’attributo ‘NAME’ è alternativo a ‘HTTP-EQUIV’.<br />

• ‘CONTENT’ (obbligatorio) per indicare il valore abbinato al nome indicato attraverso<br />

l’attributo ‘NAME’, oppure attraverso l’attributo ‘HTTP-EQUIV’;


2850 HTML: aspetti generali<br />

Come si intuisce dall’elenco degli attributi più importanti, si può distinguere tra elementi ‘META’<br />

che utilizzano l’attributo ‘NAME’ e altri che usano l’attributo ‘HTTP-EQUIV’. Le informazioni che<br />

si definiscono attraverso elementi ‘META’ con l’attributo ‘NAME’ permettono di indicare informazioni<br />

che qualificano il documento, soprattutto quando questo viene trattato automaticamente da<br />

un motore di ricerca; l’attributo ‘HTTP-EQUIV’ permette invece di intervenire a livello del protocollo<br />

HTTP (quando il documento viene ottenuto in questo modo), specificando le intestazioni<br />

HTTP relative. Si osservi l’esempio seguente:<br />

<br />

Titolo della pagina<br />

<br />

<br />

<br />

<br />

<br />

<br />

In particolare, ricevendo questo documento attraverso il protocollo HTTP, si otterrà anche<br />

l’intestazione HTTP seguente:<br />

Content-Type: text/html; charset=ISO-8859-1<br />

Si noti l’indicazione esplicita dell’insieme di caratteri: ISO 8859-1<br />

Un altro tipo di elemento speciale può apparire all’interno dell’intestazione di un documento<br />

HTML; si tratta di ‘LINK’. Anche questo è un elemento vuoto e serve solo per indicare degli<br />

attributi nel marcatore di apertura. Gli attributi più importanti sono:<br />

• ‘HREF’ per indicare un URI a cui si intende fare riferimento;<br />

• ‘REL’ per definire la relazione che c’è con questo tipo di collegamento;<br />

• ‘TYPE’ per specificare in anticipo il tipo dei dati contenuti nell’URI;<br />

• ‘MEDIA’ per specificare il mezzo attraverso cui viene letto il documento.<br />

Trattandosi di un elemento vuoto, collocato nell’intestazione HTML, non è pensato per essere<br />

rappresentato nella <strong>composizione</strong>. Tuttavia, abbinando le parole chiave opportune all’attributo<br />

‘REV’, si stabiliscono una serie di collegamenti utili per ricomporre un documento più grande<br />

costituito da più pagine HTML. In pratica, si può dichiarare in modo esplicito come è articolato,<br />

così che il programma di navigazione o <strong>composizione</strong> sappia regolarsi. La tabella 260.1 elenca<br />

alcune delle parole chiave che possono essere assegnate all’attributo ‘REV’.<br />

Tabella 260.1. Parole chiave tipiche da assegnare all’attributo ‘REV’ dell’elemento<br />

‘LINK’.<br />

Nome<br />

Alternate<br />

Stylesheet<br />

Start<br />

Next<br />

Prev<br />

Contents<br />

Index<br />

Glossary<br />

Copyright<br />

Chapter<br />

Section<br />

Subsection<br />

Appendix<br />

Help<br />

Descrizione<br />

Una versione alternativa dello stesso documento.<br />

Foglio di stile esterno.<br />

Il primo documento di una collezione.<br />

Il prossimo documento di una sequenza lineare.<br />

Il documento precedente di una sequenza lineare.<br />

Un documento che funge da indice generale.<br />

Un documento che funge da indice analitico.<br />

Un documento che funge da glossario.<br />

Un documento che contiene la dichiarazione del copyright.<br />

Un documento che funge da capitolo in una collezione.<br />

Un documento che funge da sezione in una collezione.<br />

Un documento che funge da sottosezione in una collezione.<br />

Un documento che funge da appendice in una collezione.<br />

Un documento che funge da guida.


HTML: aspetti generali 2851<br />

L’esempio seguente mostra parte di un’intestazione di una pagina HTML in cui sono stati usati<br />

alcuni elementi ‘LINK’ per definire la relazione con altre pagine che compongono la stessa<br />

raccolta:<br />

<br />

...<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

Merita un po’ di attenzione l’attributo ‘MEDIA’ che serve a stabilire il mezzo adatto per la lettura<br />

del documento relativo. Questo attributo si usa generalmente all’interno di un elemento ‘LINK’<br />

che serve a indicare un foglio di stile esterno; inoltre può essere usato per lo stesso motivo all’interno<br />

di un elemento ‘STYLE’. In pratica, in questo modo, si stabilisce l’abbinamento tra stile e<br />

mezzo di lettura. La tabella 260.2 elenca i nomi che si possono assegnare a un attributo ‘MEDIA’.<br />

Tabella 260.2. Parole chiave tipiche da assegnare all’attributo ‘MEDIA’ dell’elemento<br />

‘LINK’ e dell’elemento ‘STYLE’.<br />

Nome<br />

screen<br />

tty<br />

tv<br />

projection<br />

handheld<br />

print<br />

braille<br />

aural<br />

all<br />

Descrizione<br />

Schermo per lo scorrimento continuo.<br />

Terminale a celle di caratteri o simile.<br />

Televisione (bassa risoluzione e altre limitazioni).<br />

Proiettore.<br />

Schermi portatili.<br />

Stampa e simili (<strong>composizione</strong> impaginata).<br />

Terminale a barra braille per i non vedenti.<br />

Lettore a sintesi vocale.<br />

Valido per tutti i tipi di dispositivo.<br />

L’esempio seguente mostra in che modo si potrebbero <strong>selezionare</strong> diversi fogli di stile in base al<br />

mezzo utilizzato per la lettura del documento:<br />

<br />

<br />

<br />

260.3.2 Corpo del documento<br />

Il corpo di un documento HTML è delimitato dall’elemento ‘BODY’ e il suo contenuto è ciò che<br />

alla fine viene mostrato nella <strong>composizione</strong> finale.<br />

La <strong>composizione</strong> del corpo viene descritta nel capitolo 261.<br />

260.4 Attributi comuni<br />

All’inizio del capitolo si è accennato al fatto che molti elementi condividano un insieme comune<br />

di attributi. Vale la pena di descrivere brevemente alcuni di questi.


2852 HTML: aspetti generali<br />

260.4.1 Linguaggio<br />

Il linguaggio di un elemento viene definito esplicitamente attraverso l’attributo ‘LANG’, a cui<br />

viene assegnato solitamente un codice corrispondente allo standard ISO 639. La tabella 260.3<br />

riporta un elenco di questi codici ridotto ad alcune lingue occidentali.<br />

Tabella 260.3. Alcuni codici dello standard ISO 639 per la definizione della lingua<br />

attraverso una sigla di due soli caratteri.<br />

Codice<br />

fr<br />

it<br />

ro<br />

es<br />

ca<br />

co<br />

pt<br />

da<br />

nl<br />

en<br />

de<br />

is<br />

no<br />

sv<br />

fi<br />

Lingua<br />

Francese<br />

Italiano<br />

Rumeno<br />

Spagnolo<br />

Catalano<br />

Corso<br />

Portoghese<br />

Danese<br />

Olandese<br />

Inglese<br />

Tedesco<br />

Islandese<br />

Norvegese<br />

Svedese<br />

Finlandese<br />

In generale può essere conveniente l’utilizzo di questo attributo nell’elemento ‘HTML’, in modo<br />

da fissare il linguaggio di tutto il documento. Tuttavia, quando un elemento contiene un testo in<br />

un altro linguaggio, conviene annotarlo nello stesso modo.<br />

L’effetto più evidente che potrebbe risultare dalla distinzione in base al linguaggio, è la<br />

separazione delle parole in sillabe, per creare una <strong>composizione</strong> più gradevole.<br />

260.4.2 Codifica<br />

L’attributo ‘CHARSET’ permette di definire esplicitamente l’insieme di caratteri dell’elemento.<br />

Come è già stato mostrato, di solito lo si utilizza in un elemento ‘META’ introduttivo allo scopo<br />

di definire l’intestazione HTTP relativa:<br />

<br />

...<br />

<br />

<br />

<br />

La tabella 260.4 elenca alcuni codici comuni per la definizione dell’insieme dei caratteri.<br />

Tabella 260.4. Alcuni codici per definire l’insieme di caratteri.<br />

Codice<br />

ISO-8859-1<br />

ISO-8859-2<br />

ISO-8859-3<br />

ISO-8859-4<br />

ISO-8859-5<br />

ISO-8859-6<br />

ISO-8859-7<br />

ISO-8859-8<br />

ISO-8859-9<br />

Corrispondenza<br />

latin1<br />

latin2<br />

latin3<br />

latin4<br />

ciryllic<br />

arabic<br />

greek<br />

hebrew<br />

latin5


HTML: aspetti generali 2853<br />

260.4.3 Direzione del testo<br />

Il testo di un documento HTML può scorrere da sinistra a destra o viceversa. Per controllare<br />

questo flusso si può utilizzare l’attributo ‘DIR’, a cui si possono abbinare esclusivamente le parole<br />

chiave ‘ltr’ o ‘rtl’: Left to right, da sinistra a destra; Right to left, da destra a sinistra.<br />

In generale, il flusso del testo avviene da sinistra a destra, come richiedono le lingue occidentali,<br />

per cui non è necessario usare questo attributo in condizioni «normali».<br />

È importante notare che il testo nel sorgente di un documento HTML segue sempre il flusso<br />

normale, da sinistra a destra, ammesso che si possa definire un flusso per un file sorgente.<br />

Non è disponibile la possibilità di ribaltare orizzontalmente i caratteri, quando il flusso del<br />

testo cambia direzione, come avviene nella scrittura geroglifica.<br />

260.4.4 Titolo<br />

Molti elementi dispongono di un attributo ‘TITLE’. Il suo scopo è quello di indicare un titolo,<br />

che viene preso in considerazione in modo differente in base al contesto. Questo attributo può<br />

essere molto utile negli elementi che comportano l’inclusione di un’immagine, dal momento che<br />

rappresenta un testo alternativo per chi non può visualizzarle. Anche un riferimento ipertestuale<br />

può avvantaggiarsi di questo attributo, perché si può visualizzare il testo corrispondente prima di<br />

raggiungere l’oggetto, in modo da avere una breve descrizione di ciò che si tratta (così da poter<br />

decidere se ne vale la pena).<br />

Tizio<br />

L’esempio mostra proprio il caso di un riferimento ipertestuale, ottenuto con l’elemento ‘A’, attraverso<br />

il quale si raggiunge un file che dovrebbe mostrare l’immagine di Tizio vestito in divisa.<br />

Se il navigatore permette di conoscere il titolo del riferimento prima di doverlo raggiungere, si<br />

può evitare di prelevare il file nel caso ciò non sia interessante.<br />

È ovvio che sta poi all’autore della pagina la scelta nello scrivere dei titoli utili o ingannevoli.<br />

Chi realizza una pagina pubblicitaria ha ovviamente degli interessi diversi da chi invece vuole<br />

realizzare un documento ordinato e facile da consultare.<br />

260.4.5 Identificazione di un elemento<br />

Molti elementi dispongono di un attributo ‘ID’ che permette di attribuire loro un’etichetta con la<br />

quale poi farvi riferimento. Il modo tradizionale per realizzare dei riferimenti incrociati in HTML<br />

è l’uso dell’elemento ‘A’, prima con l’attributo ‘NAME’ (l’etichetta), poi con l’attributo ‘HREF’ (il<br />

riferimento ipertestuale).<br />

L’attributo ‘ID’ permette di generalizzare il problema, dal momento che in tal modo gli elementi<br />

comuni hanno la possibilità di «identificarsi» in maniera univoca per qualunque scopo, non solo<br />

quello di definire un obiettivo per un riferimento.<br />

Questo è un paragrafo nominato in modo univoco.<br />

Anche questo è un altro paragrafo nominato in<br />

modo univoco.<br />

Si deve tenere presente che i nomi utilizzati per gli attributi ‘ID’ devono essere univoci. Questi<br />

nomi devono essere univoci anche nei confronti dell’attributo ‘NAME’ nell’elemento ‘A’.


2854 HTML: aspetti generali<br />

260.4.6 Classificazione degli elementi<br />

A differenza dell’attributo ‘ID’, l’attributo ‘CLASS’ consente di abbinare a un gruppo di elementi<br />

una certa classe. Il meccanismo è lo stesso, con la differenza che si vogliono indicare dei<br />

raggruppamenti. Di solito, si attribuisce una classe per abbinarne le definizioni di un foglio di<br />

stile.<br />

la vita è fatta per essere vissuta<br />

L’esempio mostra la delimitazione di una parte di testo attraverso l’elemento ‘SPAN’, al quale<br />

viene attribuita la classe ‘nota’. In seguito, sarà possibile abbinare a tutti gli elementi di questa<br />

classe le stesse caratteristiche attraverso un foglio di stile. Utilizzando i fogli di stile CSS, si<br />

potrebbe applicare la regola seguente a tutti gli elementi ‘SPAN’ della classe ‘nota’:<br />

SPAN.nota { color: green }<br />

260.5 Riferimenti<br />

• W3C<br />

<br />

• W3C, Technical Reports and Publications<br />

<br />

• Character sets<br />

<br />

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org


HTML: corpo<br />

Capitolo 261<br />

Il corpo di un documento HTML è contenuto normalmente nell’elemento ‘BODY’ a meno che si<br />

utilizzino le cornici (frame), nel qual caso si tratta dell’elemento ‘FRAMESET’.<br />

A sua volta, il contenuto dell’elemento ‘BODY’ è abbastanza «libero», nel senso che si possono<br />

inserire blocchi di testo di vario tipo, senza una struttura preordinata.<br />

261.1 Delimitazione di blocchi e di testo normale<br />

Per ovviare alla mancanza di una struttura prestabilita, è possibile raggruppare dei blocchi di<br />

testo o del testo normale attraverso gli elementi ‘DIV’ e ‘SPAN’ rispettivamente.<br />

Gli obiettivi che ci si possono prefiggere in questo modo possono essere molti. In generale si<br />

sfrutta la possibilità di attribuire a questi elementi degli attributi per qualche scopo.<br />

<br />

<br />

...<br />

...<br />

<br />

Questo esempio mostra una situazione in cui l’elemento ‘DAT’ viene utilizzato per delimitare<br />

una parte del corpo del documento, a cui viene attribuita la classe ‘capitolo’ e la stringa di<br />

identificazione ‘capitolo-1’.<br />

Il sig. Tizio Tizi è andato...<br />

In questo nuovo esempio, si usa l’elemento ‘SPAN’ per delimitare il testo che indica il nome di<br />

una certa persona. In questo modo viene anche attribuita l’appartenenza alla classe ‘nome’, cosa<br />

che può tornare utile per rendere i nomi in modo diverso attraverso un foglio di stile.<br />

261.2 Titoli e struttura implicita del testo<br />

Ciò che nel testo rappresenta un titolo di una sezione, si indica utilizzando gli elementi che vanno<br />

da ‘H1’ a ‘H6’. Intuitivamente, il primo rappresenta un titolo di importanza maggiore, mentre<br />

l’ultimo è quello di importanza minore.<br />

L’utilizzo corretto dei titoli attraverso questi elementi è molto importante perché può permettere<br />

a un sistema di visualizzazione o <strong>composizione</strong> di conoscerne la gerarchia e generare così un<br />

indice generale (se richiesto). In taluni casi si può arrivare anche a ottenere una numerazione di<br />

questi titoli in modo automatico.<br />

...<br />

Titolo principale<br />

...<br />

Titolo di livello inferiore<br />

...<br />

Altro titolo principale<br />

...<br />

Gli elementi che rappresentano dei titoli sono fatti per contenere testo normale ed elementi che<br />

non rappresentano blocchi separati.<br />

È importante ricordare che il titolo del documento HTML, quello che si indica nell’elemento<br />

‘TITLE’ nell’intestazione, ovvero all’interno dell’elemento ‘HEAD’, di norma non viene<br />

rappresentato. Per questo, spesso, il titolo del documento viene riproposto in un titolo ‘H1’.<br />

2855


2856 HTML: corpo<br />

L’esempio seguente mostra un pezzo di documento strutturato in capitoli e sezioni, delimitati<br />

formalmente attraverso l’elemento ‘DIV’:<br />

<br />

Trattato di bla bla bla<br />

Questo trattato tratta di aria fritta...<br />

<br />

Dettagli<br />

Questa è una sezione inutile di un trattato<br />

inutile...<br />

<br />

<br />

Lo scopo di ciò può essere quello di attribuire stili particolari alle varie parti gerarchie del documento.<br />

Inoltre, l’utilizzo dell’attributo ‘ID’ nell’elemento ‘DIV’ che introduce ogni blocco<br />

gerarchico può rappresentare un modo coerente per farvi riferimento.<br />

261.3 Testo<br />

Il testo normale è ciò che è contenuto in un «blocco» di testo. Il caso più comune di blocco di<br />

testo è rappresentato dall’elemento ‘P’, utilizzato per dividerlo idealmente in paragrafi.<br />

All’interno di un blocco, salvo casi particolari, il testo viene reso in modo da adattarsi alle dimensioni<br />

imposte dal sistema di visualizzazione o di <strong>composizione</strong>. In pratica, viene suddiviso<br />

in modo conveniente, ignorando le interruzioni di riga e le righe vuote aggiunte.<br />

È opportuno fare attenzione all’uso degli spazi all’interno degli elementi che contengono testo<br />

normale: si dovrebbe evitare di iniziare o concludere un elemento con uno spazio. In pratica, si<br />

deve evitare di scrivere qualcosa come:<br />

Bla bla bla evviva bla bla.<br />

Al suo posto bisogna invece limitarsi a scrivere:<br />

Bla bla bla evviva bla bla.<br />

261.3.1 Paragrafi e interruzioni<br />

Si è già accennato al fatto che le righe vuote vengono ignorate in HTML. In effetti, l’interruzione<br />

di un paragrafo deve essere segnalata sempre esplicitamente, almeno attraverso l’indicazione<br />

dell’inizio di questo. Si osservi l’esempio seguente; anche se appare ovvio che il testo successivo<br />

alla dichiarazione del titolo è un paragrafo, questo modo non è ammissibile.<br />

...<br />

Titolo principale<br />

Primo paragrafo che descrive qualcosa<br />

che non serve precisare oltre.<br />

Paragrafo successivo.<br />

Altro argomento<br />

...<br />

HTML ignora le righe bianche (possono contenere spazi e caratteri di tabulazione, oltre ai<br />

caratteri di conclusione della riga), per cui la separazione dei paragrafi attraverso l’inserzione<br />

di righe non serve a nulla.


HTML: corpo 2857<br />

Se si vuole ottenere l’interruzione della riga, in modo che il testo riprenda all’inizio, ma senza<br />

interrompere il paragrafo, potrebbe convenire l’utilizzo dell’elemento ‘BR’, come nell’esempio<br />

seguente:<br />

Paragrafo che descrive qualcosa:<br />

questa riga fa parte dello stesso paragrafo<br />

che inizia con la riga precedente.<br />

Se si vogliono evitare i problemi causati dalle differenze nella <strong>composizione</strong> del risultato<br />

da parte dei programmi di navigazione, conviene ridurre al minimo l’uso di questo tipo di<br />

interruzione di riga.<br />

Per separare il testo esiste anche la possibilità di utilizzare delle righe di separazione orizzontale:<br />

‘HR’ (Horizontal rule). Si tratta di elementi vuoti, per cui non si usa il marcatore di conclusione.<br />

261.3.2 Elementi tipici utilizzati all’interno delle frasi<br />

Nell’ambito del testo normale, si possono racchiudere alcune parti, per qualche motivo, all’interno<br />

di elementi specifici. Le situazioni tipiche riguardano l’evidenziamento, come nel caso degli<br />

elementi ‘EM’ e ‘STRONG’.<br />

... il codice di interruzione di riga è ciò<br />

che separa le righe ...<br />

La tabella 261.1 elenca gli elementi più comuni di questo tipo.<br />

Tabella 261.1. Elementi da usare all’interno delle frasi.<br />

Elemento<br />

EM<br />

STRONG<br />

CITE<br />

Q<br />

DFN<br />

CODE<br />

SAMP<br />

KBD<br />

VAR<br />

ABBR<br />

ACRONYM<br />

SUB<br />

SUP<br />

Significato<br />

Testo enfatizzato, di solito in corsivo.<br />

Testo evidenziato, di solito in neretto.<br />

Citazione, nel senso di chi o cosa viene citato.<br />

Testo citato.<br />

Definizione.<br />

Codice usato in elaborazione, di solito reso in carattere dattilografico.<br />

Testo risultato di un’elaborazione.<br />

Testo da inserire attraverso la tastiera.<br />

Variabile o argomento di un programma.<br />

Abbreviazione.<br />

Acronimo.<br />

Testo a pedice.<br />

Testo ad apice.<br />

Vale la pena di vedere come si può abbinare l’attributo ‘TITLE’ agli elementi ‘ABBR’ e<br />

‘ACRONYM’. In generale, questi due si possono intendere quasi come la stessa cosa: spesso l’acronimo<br />

è un’abbreviazione. A parte il problema di scegliere questo o quell’elemento, l’attributo<br />

‘TITLE’ diventa utile per specificare il modo in cui si traduce l’acronimo o l’abbreviazione:<br />

WWW<br />

A volte, un’abbreviazione o un acronimo diventano parole con un’identità propria; come tale<br />

acquisisce anche una pronuncia, che probabilmente si vuole preservare, specialmente quando il<br />

documento HTML viene letto attraverso un sistema vocale. Anche a questo scopo può essere<br />

usato l’attributo ‘TITLE’.


2858 HTML: corpo<br />

261.3.3 Citazioni<br />

Il testo che si riferisce a una citazione si può delimitare attraverso due elementi: ‘BLOCKQUOTE’<br />

quando si tratta di blocchi di testo e ‘Q’ quando si tratta di qualcosa che viene inserito nel flusso<br />

del testo normale.<br />

<br />

Bla bla bla...<br />

bla bla bla bla...<br />

bla bla bla.<br />

<br />

Dall’esempio si può osservare l’utilizzo dell’attributo ‘CITE’ con il quale si può indicare l’URI<br />

da dove ottenere il testo originale o il testo completo; inoltre è stato inserito anche l’attributo<br />

‘LANG’ allo scopo di specificare il linguaggio del testo citato (presumibilmente diverso da quello<br />

generale).<br />

Tizio Tizi ha detto:<br />

<br />

Bla bla bla...<br />

bla bla bla bla...<br />

bla bla bla.<br />

Questo esempio ulteriore fa uso dell’elemento ‘Q’, ma in aggiunta si vede anche l’elemento<br />

‘CITE’ con il quale viene indicato l’autore del testo citato.<br />

261.3.4 Testo preformattato<br />

In un documento HTML, l’unico modo per preservare gli spazi orizzontali e le interruzioni<br />

di riga, è l’uso dell’elemento ‘PRE’. In generale, il risultato che si ottiene viene rappresentato<br />

utilizzando un carattere dattilografico.<br />

Il comando ls -l / genera un risultato simile a quello<br />

seguente:<br />

<br />

drwxr-xr-x 2 root root 2048 gen 6 18:38 bin<br />

drwxr-xr-x 3 root root 1024 dic 31 08:08 boot<br />

drwxr-xr-x 4 root root 18432 gen 24 14:23 dev<br />

drwxr-xr-x 68 root root 4096 gen 24 14:09 etc<br />

drwxr-sr-x 14 root root 1024 gen 3 19:32 home<br />

drwxr-xr-x 5 root root 4096 gen 6 16:32 lib<br />

drwxr-xr-x 19 root root 1024 ago 15 16:02 mnt<br />

drwxr-xr-x 5 root root 1024 nov 9 14:59 opt<br />

dr-xr-xr-x 88 root root 0 gen 24 14:07 proc<br />

drwxr-xr-x 18 root root 1024 dic 16 17:37 root<br />

drwxr-xr-x 3 root root 2048 gen 6 16:12 sbin<br />

drwxrwxrwt 6 root root 8192 gen 24 18:56 tmp<br />

drwxr-xr-x 16 root root 1024 gen 5 15:23 usr<br />

drwxr-xr-x 15 root root 1024 set 29 15:02 var<br />

<br />

Per essere sicuri del risultato finale, è bene evitare l’uso di caratteri di tabulazione, preferendo<br />

piuttosto gli spazi normali.


HTML: corpo 2859<br />

261.4 Elenchi<br />

In generale, esistono tre tipi di elenchi: puntati, numerati e descrittivi. L’elenco puntato viene<br />

definito utilizzando l’elemento ‘UL’ (Unordered list), quello numerato si ottiene con l’elemento<br />

‘OL’ (Ordered list), quello descrittivo si ottiene con l’elemento ‘DL’ (Definition list). Le voci<br />

degli elenchi puntati e numerati sono costituite da elementi ‘LI’ (List item), mentre nel caso<br />

dell’elenco descrittivo il contenuto si articola in elementi ‘DT’ (Definition term) e ‘DD’ (Definition<br />

description).<br />

<br />

prima voce di un elenco puntato;<br />

seconda voce di un elenco puntato;<br />

terza voce.<br />

<br />

<br />

prima voce di un elenco numerato;<br />

seconda voce di un elenco numerato;<br />

terza voce.<br />

<br />

<br />

Resistenza<br />

Resistore<br />

Componente resistivo utilizzato in elettronica<br />

Condensatore<br />

Componente capacitivo...<br />

<br />

Gli esempi mostrano un uso molto semplice di questi elenchi. Si può osservare in particolare<br />

che nel caso dell’elenco descrittivo, gli elementi che delimitano il termine da descrivere possono<br />

essere più di uno simultaneamente.<br />

Gli elementi ‘LI’ e ‘DT’ sono speciali, dal momento che possono contenere testo normale, come<br />

si vede negli esempi, oppure dei blocchi di testo. Questo, tra le altre cose, consente di realizzare<br />

degli elenchi più complessi.<br />

<br />

prima voce di un elenco numerato;<br />

seconda voce di un elenco numerato;<br />

<br />

terza voce che si articola ulteriormente:<br />

<br />

bla bla bla<br />

bla bla bla<br />

bla bla bla<br />

<br />

<br />

<br />

261.5 Tabelle<br />

Quando si iniziano a utilizzare le tabelle e si scoprono gli effetti che si riescono a ottenere,<br />

non se ne vorrebbe più fare a meno. In realtà, sarebbe bene utilizzare le tabelle il meno possibile,<br />

perché alcuni programmi per la visualizzazione di documenti HTML non sono in grado di gestirle<br />

in maniera ottimale. Qui viene data solo una spiegazione superficiale, che comunque dovrebbe<br />

essere sufficiente per l’uso normale.<br />

La tabella è definita dall’elemento ‘TABLE’; al suo interno può essere inclusa una didascalia<br />

rappresentata dall’elemento ‘CAPTION’, quindi il contenuto della tabella viene distinto in intestazione,<br />

piede e corpo, all’interno dei quali si inseriscono le righe della tabella stessa (figura<br />

261.1).


2860 HTML: corpo<br />

Figura 261.1. Esempio di una tabella.<br />

.-------------------------------------------.<br />

| Articolo | Descrizione | riga di intestazione<br />

|================|==========================|<br />

| 123xyz | Bicicletta uomo | \<br />

|----------------|--------------------------| |<br />

| 125xyz | Bicicletta donna | > corpo<br />

|----------------|--------------------------| |<br />

| 121xyz | Bicicletta bambino | /<br />

|================|==========================|<br />

| Articolo | Descrizione | piede<br />

‘-------------------------------------------’<br />

L’intestazione e il piede non sono obbligatori; in ogni caso, se si utilizzano vanno inseriti ordinatamente<br />

prima del corpo. Se non si indica l’intestazione o il piede, le righe che costituiscono<br />

il corpo non hanno bisogno di essere delimitate espressamente tra i marcatori che rappresentano<br />

l’elemento corrispondente. La tabella 261.2 riepiloga gli elementi utili nella realizzazione delle<br />

tabelle HTML.<br />

Tabella 261.2. Elementi da usare per la realizzazione delle tabelle HTML.<br />

Elemento<br />

TABLE<br />

CAPTION<br />

THEAD<br />

TFOOT<br />

TBODY<br />

TR<br />

TH<br />

TD<br />

Significato<br />

Delimita la tabella.<br />

Didascalia.<br />

Righe di intestazione.<br />

Righe del piede.<br />

Righe del corpo.<br />

Riga normale.<br />

Elemento evidenziato di una riga.<br />

Elemento di una riga.<br />

L’esempio seguente rappresenta una tabella molto banale, senza intestazione e senza piede:<br />

<br />

unodue<br />

trequattro<br />

cinquesei<br />

<br />

Il risultato è uno specchietto simile a quello che si vede di seguito:<br />

---------------------------------<br />

uno<br />

due<br />

tre<br />

quattro<br />

cinque<br />

sei<br />

---------------------------------<br />

Per aggiungere una riga di intestazione è necessario indicare in modo esplicito l’elemento<br />

‘TBODY’, che prima è stato sottinteso:<br />

<br />

<br />

PrimoSecondo<br />

<br />

<br />

unodue<br />

trequattro<br />

cinquesei<br />

<br />

<br />

---------------------------------<br />

Primo<br />

Secondo<br />

---------------------------------<br />

uno<br />

due


HTML: corpo 2861<br />

tre<br />

quattro<br />

cinque<br />

sei<br />

---------------------------------<br />

L’esempio seguente aggiunge anche una didascalia molto breve:<br />

<br />

<br />

Tabella banale<br />

<br />

<br />

PrimoSecondo<br />

<br />

<br />

unodue<br />

trequattro<br />

cinquesei<br />

<br />

<br />

Tabella banale<br />

---------------------------------<br />

Primo<br />

Secondo<br />

---------------------------------<br />

uno<br />

due<br />

tre<br />

quattro<br />

cinque<br />

sei<br />

---------------------------------<br />

Le tabelle HTML possono essere molto più complesse di quanto è stato mostrato qui. Vale la<br />

pena di sottolineare il fatto che gli elementi ‘TD’, ovvero le celle all’interno delle righe, possono<br />

contenere sia testo normale, sia blocchi di testo. Inoltre, è fondamentale l’attributo ‘BORDER’<br />

dell’elemento ‘TABLE’, con il quale si definisce la grandezza del contorno della tabella:<br />

<br />

...<br />

...<br />

<br />

261.6 Riferimenti ipertestuali<br />

La sigla HTML fa riferimento esplicitamente a un sistema ipertestuale. Ci deve quindi essere un<br />

modo per creare questi collegamenti.<br />

Un riferimento può essere fatto a una pagina intera o a un punto particolare di una pagina. Il riferimento<br />

può essere assoluto, cioè provvisto dell’indicazione del nodo e del percorso necessario a<br />

raggiungere la pagina, oppure può essere relativo al nodo attuale.<br />

Per i riferimenti si utilizza l’elemento ‘A’ ed eventualmente l’attributo ‘ID’ di molti altri elementi.<br />

261.6.1 Riferimenti a una pagina intera<br />

Un riferimento a una pagina intera, con l’indicazione del percorso assoluto per raggiungerla,<br />

viene fatto come nell’esempio seguente:<br />

Pagina di prova<br />

Nell’esempio, la frase «Pagina di prova» serve come punto di riferimento del puntatore a<br />

‘http://www.brot.dg/prove/prova.html’.<br />

Quando di realizza un documento HTML composto da più pagine collegate tra loro, è preferibile<br />

utilizzare riferimenti relativi, in modo da non dover indicare il nome del nodo in cui si trovano e<br />

nemmeno il percorso assoluto delle directory da attraversare per raggiungerle.


2862 HTML: corpo<br />

Annotazioni varie<br />

Nell’esempio, si vede un riferimento al file ‘nota.html’ contenuto nella «directory» ‘varie/’<br />

discendente dalla directory corrente. La directory corrente, in questi casi, è quella in cui si trova<br />

la pagina contenente il puntatore. 1<br />

Il vantaggio di utilizzare riferimenti relativi, sta nella facilità con cui il documento può essere<br />

spostato o copiato in altri punti nel file system dello stesso o di un altro elaboratore (si veda<br />

anche quanto già scritto nel capitolo 259).<br />

261.6.2 Riferimenti a una posizione di una pagina<br />

All’interno di una pagina è possibile collocare delle etichette che poi possono servire per fare dei<br />

riferimenti, sia a partire dalla stessa pagina che da altre. L’esempio seguente mostra un esempio<br />

di un’etichetta molto semplice.<br />

<br />

Si usa quindi lo stesso elemento che serve per creare un puntatore, ma con l’attributo ‘NAME’.<br />

L’argomento dell’attributo ‘NAME’ (in questo caso è la parola ‘introduzione’), identifica quel<br />

punto.<br />

Per fare riferimento a un’etichetta nella stessa pagina si può usare la forma dell’esempio seguente,<br />

con il quale si vuole puntare all’etichetta appena creata.<br />

Introduzione<br />

Si utilizza l’opzione ‘HREF’ come al solito, ma il suo argomento è il nome dell’etichetta preceduta<br />

dal simbolo ‘#’. Evidentemente, ciò è necessario per evitare di fare riferimento a un file con lo<br />

stesso nome.<br />

Se si vuole fare riferimento a un’etichetta di un certo file, si utilizza la notazione solita,<br />

aggiungendo l’indicazione dell’etichetta.<br />

Introduzione<br />

a GNU/Linux<br />

261.6.3 Collegamenti simmetrici<br />

Si può osservare che l’elemento ‘A’ serve sia per indicare un’etichetta, attraverso l’attributo<br />

‘NAME’, sia per definire un riferimento, attraverso l’attributo ‘HREF’ (senza contare la possibilità<br />

di usare anche l’attributo ‘ID’). Questo fatto consente di realizzare dei riferimenti simmetrici,<br />

dove un riferimento è anche etichetta della terminazione opposta:<br />

vai al punto due<br />

vai al punto uno<br />

L’esempio dovrebbe essere abbastanza chiaro: il primo puntatore punta al secondo, che a sua<br />

volta punta al primo.<br />

261.6.4 Utilizzo dell’attributo ID<br />

L’attributo ‘ID’ è una generalizzazione attraverso la quale si attribuisce un’identità a un elemento.<br />

Può essere usato come destinazione per un riferimento fatto attraverso l’elemento ‘A’ con<br />

l’attributo ‘HREF’, ma il suo scopo è più ampio.<br />

1 Qui viene usato il termine «directory», ma in pratica potrebbe anche non essere esattamente una directory vera e<br />

propria.


HTML: corpo 2863<br />

In generale, quando si realizzano dei riferimenti ipertestuali dovrebbe essere più conveniente l’indicazione<br />

di etichette attraverso l’attributo ‘NAME’, dal momento che ci possono essere ancora dei<br />

navigatori o altri sistemi di lettura di file HTML che non sono in grado di riconoscere l’attributo<br />

‘ID’.<br />

261.7 Inserzioni di oggetti<br />

Un documento HTML può contenere riferimenti a «oggetti» esterni. Nei casi più comuni si tratta<br />

di immagini o di applet, ma il concetto riguarda qualunque altra cosa che possa essere incorporata<br />

nel documento. Come si può supporre, l’elemento attraverso cui si includono gli oggetti è<br />

‘OBJECT’. La tabella 261.3 elenca alcuni degli attributi di questo elemento.<br />

Tabella 261.3. Alcuni attributi dell’elemento ‘OBJECT’.<br />

Attributo<br />

DATA<br />

TYPE<br />

STANDBY<br />

Significato<br />

Riferimento al file dell’oggetto.<br />

Tipo di oggetto.<br />

Messaggio di attesa durante il caricamento dell’oggetto.<br />

Come si può intuire, il minimo per importare un oggetto richiede almeno l’uso dell’attributo<br />

‘DATA’; inoltre, in generale è opportuno aggiungere anche l’attributo ‘TYPE’ per precisare subito<br />

il tipo di oggetto.<br />

L’elemento ‘OBJECT’ non può essere vuoto; ciò che racchiude è quello che deve essere mostrato<br />

nel caso non sia possibile raggiungere l’oggetto indicato, oppure non sia possibile gestire<br />

l’oggetto stesso. Di solito si tratta di testo normale, ma potrebbe trattarsi di altri oggetti alternativi.<br />

Immagine di esempio<br />

L’esempio mostra l’inclusione di un’immagine, ‘esempio.jpg’, che nel caso non possa essere<br />

raggiunta o visualizzata, viene rimpiazzata con la frase: «Immagine di esempio». L’esempio<br />

seguente, al contrario, tenta di visualizzare un’altra immagine in un formato alternativo; se poi<br />

anche quella non è accessibile o visualizzabile, si passa al testo di prima:<br />

<br />

<br />

Immagine di esempio<br />

<br />

<br />

261.7.1 Immagini<br />

Il tipo di immagine che può essere visualizzata dipende solo dalle limitazioni del programma di<br />

navigazione o di <strong>composizione</strong>. Generalmente si possono utilizzare solo i formati GIF, JPG e<br />

PNG (in pratica le estensioni ‘.gif’, ‘.jpg’ e ‘.png’). 2<br />

I riferimenti a file di immagine si fanno attraverso l’elemento ‘OBJECT’ oppure ‘IMG’. In generale,<br />

per ottenere un documento HTML adatto alla maggior parte di programmi per la navigazione,<br />

conviene ancora utilizzare il vecchio elemento ‘IMG’, come nell’esempio seguente:<br />

<br />

L’elemento ‘IMG’ è vuoto, pertanto non si usa il marcatore di conclusione. Come si vede dall’esempio,<br />

si utilizza l’attributo ‘SRC’ per definire la collocazione del file contenente l’immagine,<br />

2 Il formato PNG è accettato solo da alcuni programmi di navigazione, di conseguenza non è sempre consigliabile il<br />

suo utilizzo; inoltre, il formato GIF è brevettato e il suo utilizzo non è libero.


2864 HTML: corpo<br />

l’attributo ‘ALT’ per indicare una descrizione alternativa nel caso in cui l’immagine non possa<br />

essere visualizzata. La stessa cosa avrebbe potuto essere espressa con l’elemento ‘OBJECT’ nel<br />

modo seguente:<br />

<br />

Logo<br />

<br />

Generalmente, per evitare problemi di compatibilità con i vari programmi di navigazione, è meglio<br />

evitare di fare scorrere il testo a fianco delle immagini, per cui è bene staccare il testo normale<br />

racchiudendolo esplicitamente all’interno di un elemento ‘P’ (paragrafo).<br />

<br />

...testo che segue l’immagine...<br />

L’immagine può essere utilizzata anche come pulsante per un riferimento ipertestuale, quando<br />

è contenuta all’interno di questo ultimo. In tali casi è particolarmente importante ricordare di<br />

inserire l’attributo ‘ALT’, che diventa un’alternativa indispensabile nel caso in cui l’immagine<br />

non possa essere visualizzata.<br />

<br />

Naturalmente, se fosse necessario ricordarlo, non è obbligatorio che tutto si trovi sulla stessa riga,<br />

quindi l’esempio precedente può anche essere assemblato come indicato qui sotto:<br />

<br />

<br />

<br />

261.8 Riferimenti<br />

• W3C<br />

<br />

• W3C, Technical Reports and Publications<br />

<br />

• W3C, HTML 4.01 Specification<br />

<br />

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org


CSS<br />

Capitolo 262<br />

I fogli di stile CSS (Cascading style sheet) rappresentano un metodo semplice per consentire di<br />

dichiarare e abbinare degli stili di <strong>composizione</strong> ai documenti HTML e ad altri tipi di sistemi<br />

SGML.<br />

Attualmente il lavoro su CSS ha generato due «livelli», CSS1 e CSS2, intesi come la prima e<br />

la seconda versione del linguaggio di stile CSS. Teoricamente, il linguaggio CSS deve essere<br />

compatibile sia verso l’alto che verso il basso, nel senso che il primo livello CSS è compatibile<br />

con il secondo e il secondo è compatibile con il primo. In pratica, le estensioni fatte al linguaggio<br />

nel CSS2 sono tali per cui dovrebbero essere ignorate semplicemente dai programmi in grado di<br />

interpretare correttamente solo CSS1.<br />

In questo capitolo si introduce il linguaggio CSS affrontando solo parte delle caratteristiche del<br />

primo livello, con qualche annotazione eventuale sul secondo. Nella sezione 260.2 è già stato<br />

mostrato in quanti modi si può includere un foglio di stile CSS in un documento HTML, pertanto<br />

questo particolare non verrà riproposto.<br />

262.1 Logica del linguaggio CSS<br />

Nella documentazione di CSS, le sue istruzioni vengono definite «regole», che si esprimono<br />

sinteticamente secondo la forma seguente, dove le parentesi graffe fanno parte della dichiarazione<br />

della regola:<br />

selettore { dichiarazione }<br />

Il principio è molto semplice: il «selettore» rappresenta qualcosa all’interno del documento; la<br />

dichiarazione è ciò che si vuole ottenere su tale oggetto. All’interno di una regola si possono<br />

raggruppare più selettori, applicando così le stesse dichiarazioni; inoltre si possono indicare più<br />

dichiarazioni: i selettori si separano con la virgola; le dichiarazioni si separano con un punto e<br />

virgola:<br />

selettore[, selettore] ... { dichiarazione [; dichiarazione] ... }<br />

Le regole possono essere scritte anche utilizzando più righe di testo normale, per cui, la stessa<br />

sintassi appena mostrata potrebbe essere scritta anche come nel modo seguente (si osservi<br />

l’aggiunta di un punto e virgola ulteriore):<br />

selettore[, selettore] ... {<br />

dichiarazione ;<br />

[dichiarazione ;]<br />

...<br />

}<br />

Teoricamente, quando si scrivono le regole iniziando ogni dichiarazione in una riga separata, è<br />

possibile evitare l’aggiunta del punto e virgola finale, ma questa scorciatoia non è consigliabile<br />

in generale.<br />

Le dichiarazioni si scompongono a loro volta in proprietà e valori loro assegnati:<br />

selettore[, selettore] ... {<br />

proprietà: valore [valore_alternativo] ...;<br />

[proprietà: valore [valore_alternativo] ...; ]<br />

...<br />

}<br />

Come si vede, alle proprietà si possono assegnare più valori alternativi, in ordine di importanza.<br />

2865


2866 CSS<br />

Si osservi l’esempio seguente: attribuisce il colore blu al testo degli elementi ‘H1’ di un<br />

documento HTML:<br />

H1 { color: blue }<br />

L’esempio successivo indica l’utilizzo di uno sfondo composto da un’immagine esterna per il corpo<br />

del documento, specificando che in mancanza dell’immagine, o in mancanza della possibilità<br />

di rappresentarla si può utilizzare uno sfondo bianco:<br />

BODY { background: url(fondale.jpg) white }<br />

Si intuisce che il nome del file contenente l’immagine è stato indicato come argomento di<br />

quello che sembra essere una funzione: ‘url()’. Si osservi comunque che questa funzione fa<br />

riferimento a un URI e non a un URL, come fa intendere erroneamente il suo nome.<br />

I commenti in un foglio di stile CSS si rappresentano in modo simile al linguaggio C, nella forma:<br />

/* testo_ignorato */<br />

262.1.1 Ereditarietà e collegamento in cascata<br />

Una caratteristica fondamentale del linguaggio CSS è l’ereditarietà di talune caratteristiche<br />

in certe circostanze. Per comprendere il significato della cosa basta pensare alla struttura<br />

dell’HTML, o a un altro linguaggio SGML in generale: se si attribuisce una caratteristica stilistica<br />

a un elemento che per sua natura ne può contenere altri, ci si aspetta intuitivamente che<br />

questa si trasmetta anche ai livelli inferiori se applicabile, a meno che per tali elementi sia stato<br />

definito espressamente qualcosa di diverso.<br />

Volendo fare un esempio più pratico, si può immaginare una caratteristica riferita alla dimensione<br />

del carattere di un blocco di testo. Se questo blocco contiene delle porzioni di testo delimitate<br />

da altri elementi, che possono servire per ottenere un testo enfatizzato in qualche modo, è normale<br />

attendersi che per queste porzioni venga utilizzata la stessa dimensione del carattere, senza<br />

bisogno di dichiarare esplicitamente e dettagliatamente questa richiesta. 1<br />

In generale, per quanto riguarda l’HTML, è normale assegnare all’elemento ‘BODY’ le<br />

caratteristiche generali di tutto il documento, sfruttando il principio di ereditarietà.<br />

L’altra caratteristica fondamentale del linguaggio CSS è la possibilità di definire gli stili in cascata.<br />

Questo significa che si possono abbinare assieme più fogli di stile e che nel complesso che<br />

si crea, ci possono essere regole che si contraddicono a vicenda. Evidentemente, in questi casi<br />

viene applicato un criterio di scelta, che verrà descritto più avanti.<br />

262.1.2 Selettori<br />

Il selettore di una regola CSS è qualcosa che rappresenta una parte del testo a cui si vogliono<br />

applicare le dichiarazioni relative. Nella situazione più semplice, il selettore viene indicato con<br />

il nome dell’elemento a cui si attribuisce. In questo modo, le dichiarazioni si applicano a tutti gli<br />

elementi di quel tipo. Nell’esempio seguente, che è già stato usato in precedenza, si attribuisce il<br />

colore blu al testo che compone tutti gli elementi ‘H1’:<br />

H1 { color: blue }<br />

Tutti gli elementi HTML che si possono utilizzare nel corpo di tale tipo di documento possono<br />

utilizzare l’attributo ‘CLASS’. Questo permette di attribuire loro una «classe», ovvero un gruppo,<br />

di solito nell’ambito di quel tipo di elemento. Per indicare un selettore che faccia riferimento a<br />

una classe specifica di un certo elemento, si usa la notazione seguente:<br />

1 In generale, il buon senso dovrebbe essere sufficiente per intendere quando una caratteristica viene ereditata e quando<br />

questo non può succedere.


CSS 2867<br />

[elemento].classe<br />

Come si vede, l’indicazione dell’elemento è facoltativa, in modo tale che, se non lo si indica, si<br />

faccia riferimento a tutti gli elementi che appartengono a quella stessa classe. L’esempio seguente<br />

mostra il caso degli elementi ‘P’ che appartengono alla classe ‘nota’, a cui viene abbinato il<br />

colore rosso per il testo:<br />

P.nota { color: red }<br />

L’esempio seguente mostra invece l’utilizzo di un selettore che fa riferimento a una classe di<br />

qualunque elemento:<br />

.calmante { color: green }<br />

Un selettore può essere anche più specifico e arrivare a individuare un elemento preciso nel<br />

documento HTML, attraverso il riferimento all’attributo ‘ID’:<br />

[elemento]#identificativo<br />

In questa situazione non è necessario indicare il nome dell’elemento, dato che la stringa di identificazione<br />

è già un dato univoco per conto proprio. Al contrario, se si sbaglia l’indicazione dell’elemento,<br />

si annulla la validità della regola relativa, perché non può essere applicata. L’esempio<br />

seguente attribuisce all’elemento ‘P’ identificato dalla stringa ‘xyz’ il colore blu:<br />

P#xyz { color: blu }<br />

La stessa cosa avrebbe potuto essere ottenuta all’interno dello stesso file HTML attraverso<br />

l’attributo ‘STYLE’ con una dichiarazione simile a quella seguente:<br />

bla bla bla<br />

Un selettore può essere composto in modo da definire la dipendenza da un contesto. In altri<br />

termini, si può definire un selettore che dipende da un altro:<br />

selettore sottoselettore [sotto_sottoselettore] ...<br />

Il primo selettore indica un ambito, all’interno del quale andrà cercata la corrispondenza per il<br />

secondo selettore, continuando eventualmente ad aumentare il dettaglio con altri selettori più<br />

specifici. Si osservi l’esempio seguente; serve a fare riferimento agli elementi ‘EM’ che si trovano<br />

all’interno di un elemento ‘H1’:<br />

H1 EM { color: green }<br />

È importante distinguere il raggruppamento di selettori dalla definizione di un contesto più dettagliato<br />

come in questo caso. Infatti, per raggruppare i selettori si utilizza la virgola. L’esempio<br />

seguente applica il colore verde a tutti gli elementi ‘EM’ contenuti all’interno di elementi ‘H1’ o<br />

‘H2’:<br />

H1 EM, H2 EM { color: green }<br />

Un selettore può anche individuare una pseudo-classe, ovvero una zona di testo che viene individuata<br />

dal programma che si occupa di interpretare il documento HTML, che non corrisponde a<br />

elementi e classi indicati espressamente:<br />

[elemento][.classe]:pseudo_classe<br />

Il caso tipico di una pseudo-classe è quella che delimita la prima lettera di un elemento:<br />

‘first-letter’. L’esempio seguente serve a ottenere una lettera iniziale più grande in tutti<br />

gli elementi ‘P’ di classe ‘primo’:<br />

P.primo:first-letter {<br />

font-size: 200%;<br />

float: left;<br />

}


2868 CSS<br />

262.1.3 Stili in cascata<br />

I fogli di stile CSS possono essere uniti assieme in cascata. Tra le altre cose, ciò permette la<br />

definizione di uno o più stili da parte dell’autore e di uno o più stili personalizzati da parte<br />

dell’utente che legge il documento. Un file contenente lo stile CSS può incorporare altri file<br />

attraverso la direttiva ‘@import’ che ha la sintassi seguente:<br />

@import url(uri_foglio_di_stile );<br />

Come si vede, riappare la funzione ‘url()’ già mostrata in precedenza. In generale, le direttive<br />

di incorporazione dei fogli di stile esterni vanno collocate all’inizio del file, prima delle regole<br />

CSS.<br />

Si è accennato al fatto che, nell’ambito dello stile complessivo che si ottiene, si possono generare<br />

dei conflitti tra dichiarazioni riferite alla stessa porzione di documento. Per scegliere quale<br />

dichiarazione deve avere la meglio, è necessario stabilire un peso differente, che dipende dal contesto<br />

e può anche essere condizionato attraverso l’aggiunta della stringa ‘! important’ in coda<br />

alla dichiarazione:<br />

H1 {<br />

color: black ! important;<br />

background: white ! important;<br />

}<br />

L’esempio mostra il caso in cui si tenta di aumentare il peso delle dichiarazioni che definiscono<br />

il colore del testo e dello sfondo negli elementi ‘H1’.<br />

Viene descritta brevemente e in modo semplificato la sequenza attraverso cui vengono attribuite<br />

le caratteristiche dello stile.<br />

• Le dichiarazioni vengono applicate se c’è la corrispondenza con i selettori. Se non ci sono<br />

corrispondenze, si applicano i valori ereditati; se non è possibile ereditare alcunché, si usano<br />

i valori iniziali.<br />

• Le dichiarazioni vengono ordinate in base al loro peso, dove quelle marcate come<br />

«importanti» ricevono un peso maggiore rispetto a quelle normali.<br />

• Le dichiarazioni vengono ordinate in base alla loro origine: lo stile dell’autore ha la precedenza<br />

su quello personalizzato dell’utente, che a sua volta ha la precedenza su quello<br />

predefinito dal programma utilizzato.<br />

• Le dichiarazioni vengono ordinate in base alla precisione con cui individuano gli obiettivi.<br />

In pratica, le dichiarazioni più specifiche hanno la precedenza rispetto a quelle più generali.<br />

• Al termine, se due regole hanno lo stesso peso, ha la precedenza quella che appare per<br />

ultima.<br />

262.2 Proprietà<br />

Di seguito vengono mostrate una serie di tabelle che descrivono l’utilizzo di alcune proprietà<br />

comuni nel linguaggio CSS. Bisogna ricordare che ogni programma di lettura o di <strong>composizione</strong><br />

dei documenti HTML può fare la propria scelta su quali siano le dichiarazioni da prendere in<br />

considerazione, ignorando tutto il resto. Pertanto, si tratta solo di un’indicazione e l’utilizzo degli<br />

stili CSS deve essere sempre valutato tenendo conto delle carenze che poi ci possono essere in<br />

fase di lettura.


CSS 2869<br />

Tabella 262.1. Proprietà riferite ai caratteri.<br />

Proprietà Valori Descrizione<br />

font-family tipo_di_carattere Tipo di carattere.<br />

font-style normal Forma normale.<br />

italic<br />

Corsivo.<br />

oblique<br />

Obliquo.<br />

font-variant normal Serie normale.<br />

small-caps Maiuscoletto.<br />

font-weight normal Tono normale.<br />

bold<br />

Nero.<br />

bolder<br />

Nerissimo.<br />

lighter<br />

Chiaro.<br />

font-size npt Dimensione in punti.<br />

ncm<br />

Dimensione in centimetri.<br />

nmm<br />

Dimensione in millimetri.<br />

nem<br />

Dimensione relativa in quadratoni.<br />

nex<br />

Dimensione relativa in Ex.<br />

n% Dimensione relativa percentuale.<br />

small<br />

Carattere piccolo.<br />

medium<br />

Carattere normale.<br />

large<br />

Carattere grande.<br />

Nella tabella 262.1 si fa riferimento in particolare alla proprietà ‘font-family’. A questa può<br />

essere attribuito il nome di una famiglia di caratteri, oppure il nome di una «famiglia generica»,<br />

che in pratica identifica uno stile del carattere senza indicare esattamente quale tipo di carattere.<br />

Una famiglia di caratteri potrebbe essere ‘times’, mentre una famiglia generica potrebbe essere<br />

‘serif’, ovvero un carattere munito di grazie. Alla proprietà ‘font-family’ possono essere<br />

abbinati più tipi di caratteri, separati da una virgola, per indicare una sequenza alternativa da<br />

utilizzare in mancanza di altro:<br />

BODY { font-family: gill, helvetica, sans-serif }<br />

L’esempio mostra proprio questo: prima si tenta di utilizzare il carattere ‘gill’; quindi si prova<br />

con ‘helvetica’; infine ci si accontenta di un carattere senza grazie, ‘sans-serif’.<br />

Tabella 262.2. Proprietà riferite ai colori e allo sfondo.<br />

Proprietà Valori Descrizione<br />

color colore Colore del carattere o di primo piano.<br />

background-color colore Colore dello sfondo.<br />

background-image url(uri) Immagine da usare per lo sfondo.<br />

Per quanto riguarda i colori (tabella 262.2), si possono indicare attraverso il nome che questi<br />

hanno in inglese, oppure attraverso la funzione ‘rgb()’, con la quale si specifica il valore RGB:<br />

rgb(livello_rosso, livello_verde, livello_blu)<br />

I numeri che esprimono i livelli dei colori fondamentali RGB vanno da 0 a 255.


2870 CSS<br />

Tabella 262.3. Proprietà riferite al testo.<br />

Proprietà Valori Descrizione<br />

vertical-align baseline Testo al livello normale.<br />

middle Allinea al centro.<br />

sub Pedice.<br />

super Apice.<br />

text-transform none Nessuna trasformazione del testo.<br />

capitalize Rende maiuscola la prima lettera delle parole.<br />

uppercase Tutto maiuscolo.<br />

lowercase Tutto minuscolo.<br />

text-align left Allinea a sinistra.<br />

right Allinea a destra.<br />

center Centra.<br />

justify Allinea a sinistra e a destra.<br />

text-indent npt Rientro in punti.<br />

ncm Rientro in centimetri.<br />

nmm Rientro in millimetri.<br />

nem Rientro relativo in quadratoni.<br />

nex Rientro relativo in Ex.<br />

n% Rientro relativo in percentuale.<br />

line-height normal Altezza normale della riga.<br />

npt Altezza in punti.<br />

ncm Altezza in centimetri.<br />

nmm Altezza in millimetri.<br />

n% Altezza relativa in percentuale.<br />

Tabella 262.4. Proprietà riferite al testo racchiuso in blocchi rettangolari.<br />

Proprietà Valori Descrizione<br />

margin-top auto Margine superiore automatico.<br />

npt Margine superiore in punti.<br />

ncm Margine superiore in centimetri.<br />

nmm Margine superiore in millimetri.<br />

n% Margine superiore relativo in percentuale.<br />

margin-bottom auto Margine inferiore automatico.<br />

npt Margine inferiore in punti.<br />

ncm Margine inferiore in centimetri.<br />

nmm Margine inferiore in millimetri.<br />

n% Margine inferiore relativo in percentuale.<br />

margin-left auto Margine sinistro automatico.<br />

npt Margine sinistro in punti.<br />

ncm Margine sinistro in centimetri.<br />

nmm Margine sinistro in millimetri.<br />

n% Margine sinistro relativo in percentuale.<br />

margin-right auto Margine destro automatico.<br />

npt Margine destro in punti.<br />

ncm Margine destro in centimetri.<br />

nmm Margine destro in millimetri.<br />

n% Margine destro relativo in percentuale.<br />

border-width thin Bordo sottile.<br />

medium Bordo medio.<br />

thick Bordo spesso.<br />

border-color colore Colore del bordo.<br />

border-style none Bordo non visibile.<br />

dotted Bordo puntato.<br />

dashed Bordo tratteggiato.<br />

solid Bordo continuo.


CSS 2871<br />

Proprietà Valori Descrizione<br />

double Bordo continuo doppio.<br />

width auto Larghezza automatica.<br />

npt Larghezza in punti.<br />

ncm Larghezza in centimetri.<br />

nmm Larghezza in millimetri.<br />

n% Larghezza relativa in percentuale.<br />

height auto Altezza automatica.<br />

npt Altezza in punti.<br />

ncm Altezza in centimetri.<br />

nmm Altezza in millimetri.<br />

n% Altezza relativa in percentuale.<br />

float none Posizione fissa.<br />

left A sinistra con testo che scorre a destra.<br />

right A destra con testo che scorre a sinistra.<br />

clear none Scorre normalmente.<br />

left Salta un oggetto che si trova a sinistra.<br />

right Salta un oggetto che si trova a destra.<br />

both Salta qualunque oggetto fluttuante.<br />

262.3 Definizione della pagina<br />

Il secondo livello del linguaggio CSS, introduce una regola speciale, ‘@page’, per la definizione<br />

della pagina, nel momento in cui il documento dovesse essere stampato. Inoltre, sono disponibili<br />

delle proprietà specifiche per l’impaginazione da usarsi nelle regole normali. In generale, la regola<br />

‘@page’ viene usata per definire i margini ed eventualmente anche le dimensioni della pagina.<br />

L’esempio seguente dichiara una pagina A4 utilizzando margini tutti uguali di 2 cm:<br />

@page {<br />

size 210mm 297mm;<br />

margin-top: 2cm;<br />

margin-bottom: 2cm;<br />

margin-left: 2cm;<br />

margin-right: 2cm;<br />

}<br />

La stessa cosa si poteva ottenere in modo meno dettagliato come segue:<br />

@page {<br />

size 210mm 297mm;<br />

margin: 2cm;<br />

}<br />

La tabella 262.5 riepiloga le proprietà più importanti riferite a questa regola.<br />

Tabella 262.5. Proprietà riferite alla regola speciale ‘@page’.<br />

Proprietà Valori Descrizione<br />

size x y Ampiezza e altezza della pagina (nelle varie unità di misura).<br />

size auto Definisce le dimensioni e l’orientamento in modo automatico.<br />

size landscape Orientamento orizzontale.<br />

size portrait Orientamento verticale.<br />

margin x Dimensione di tutti i margini.<br />

npt Dimensione in punti.<br />

ncm Dimensione in centimetri.<br />

nmm Dimensione in millimetri.<br />

n% Dimensione relativa in percentuale.<br />

margin-left x Dimensione del margine sinistro.<br />

margin-right x Dimensione del margine destro.


2872 CSS<br />

Proprietà Valori Descrizione<br />

margin-top x Dimensione superiore.<br />

margin-bottom x Dimensione inferiore.<br />

La regola ‘@page’ può essere usata in modo da distinguere tra pagine destre e pagine sinistre. Si<br />

osservi a questo proposito l’esempio seguente:<br />

@page :left {<br />

margin-top: 2cm;<br />

margin-bottom: 2cm;<br />

margin-left: 4cm;<br />

margin-right: 2cm;<br />

}<br />

@page :right {<br />

margin-top: 2cm;<br />

margin-bottom: 2cm;<br />

margin-left: 2cm;<br />

margin-right: 4cm;<br />

}<br />

Come accennato sono disponibili delle proprietà specifiche per l’impaginazione da usarsi nelle<br />

regole normali. Con queste si intende controllare la suddivisione del testo in pagine, imponendo<br />

un salto pagina, oppure impedendolo nell’ambito dell’elemento coinvolto. Queste proprietà non<br />

vengono descritte qui, ma è utile almeno tenere in considerazione la loro esistenza.<br />

262.4 Riferimenti<br />

• W3C<br />

<br />

• W3C, Technical Reports and Publications<br />

<br />

• W3C, Cascading Style Sheets, level 1<br />

<br />

• W3C, Cascading Style Sheets, level 2<br />

<br />

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org


HTML2ps<br />

Capitolo 263<br />

HTML2ps 1 è un programma in grado di comporre uno o più file HTML, generando un risultato<br />

in PostScript. Questo si ottiene attraverso l’aiuto di altri programmi che devono essere installati,<br />

come per esempio TeX.<br />

Teoricamente, HTML2ps è in grado di ricomporre assieme un documento suddiviso su più file<br />

HTML, ma questa possibilità dipende molto dall’organizzazione di questi file, all’interno dei<br />

quali, i riferimenti ipertestuali devono essere molto semplici. In generale, è possibile l’acquisizione<br />

diretta dalla rete; tuttavia, sarebbe consigliabile prima la riproduzione locale, con l’ausilio di<br />

Wget (170.6), attraverso il quale si possono modificare automaticamente i riferimenti ipertestuali,<br />

rendendo omogeneo il tutto.<br />

HTML2ps si compone semplicemente dell’eseguibile ‘html2ps’ (un programma scritto in Perl)<br />

e di uno o più file di configurazione. È indispensabile almeno il file di configurazione generale,<br />

‘/etc/html2psrc’, che dovrebbe essere già predisposto in modo sufficientemente buono dal<br />

sistema di installazione. Eventualmente, gli utenti possono preparare una configurazione personalizzata<br />

nel file ‘~/.html2psrc’ e altri file specifici da richiamare con l’opzione ‘-f’, oltre<br />

all’aggiunta di stili ulteriori (opzione ‘-s’).<br />

263.1 Configurazione di HTML2ps<br />

Come accennato, la configurazione di HTML2ps è indispensabile. Di solito si predispone almeno<br />

il file di configurazione generale, ‘/etc/html2psrc’, mentre gli utenti hanno la possibilità di<br />

modificare o aggiungere qualcosa attraverso il file ‘~/.html2psrc’. La sintassi per la scrittura di<br />

questi file è la stessa dei fogli di stile CSS (capitolo 262), con l’aggiunta di un selettore specifico,<br />

‘@html2ps’, che serve a indicare gli aspetti particolari che riguardano HTML2ps e non possono<br />

appartenere ai fogli di stile CSS.<br />

Bisogna tenere presente che HTML2ps è in grado di riconoscere solo una parte limitata delle<br />

dichiarazioni CSS.<br />

HTML2ps riconosce anche i commenti CSS e le inclusioni di file di configurazione aggiuntivi,<br />

secondo la forma:<br />

@include file<br />

Per cominciare, è opportuno vedere un esempio abbastanza semplice di ciò che potrebbe contenere<br />

un file di configurazione, quando questo viene generato automaticamente dalla procedura di<br />

installazione.<br />

/* Configurazione globale per html2ps */<br />

@html2ps {<br />

package {<br />

ImageMagick: 1;<br />

PerlMagick: 1;<br />

TeX: 1;<br />

Ghostscript: 1;<br />

check: weblint;<br />

libwww-perl: 1;<br />

path: "/usr/X11R6/bin:/usr/bin";<br />

}<br />

paper {<br />

1 HTML2ps GNU GPL<br />

2873


2874 HTML2ps<br />

type: A4;<br />

}<br />

option {<br />

hyphenate: 0;<br />

}<br />

}<br />

Si può osservare che in questo esempio è stata dichiarata solo la regola corrispondente al selettore<br />

‘@html2ps’, all’interno della quale si trovano altre sottoregole. Generalmente, le regole tipiche<br />

di uno stile CSS si aggiungono sotto. La configurazione predefinita dello stile CSS è indicata<br />

nella pagina di manuale html2psrc(5) e da questa si intende quali siano le possibilità effettive di<br />

HTML2ps nel riconoscere le dichiarazioni CSS:<br />

BODY {<br />

font-family: Times;<br />

font-size: 11pt;<br />

text-align: left;<br />

background: white;<br />

}<br />

H1, H2, H3, H4, H5, H6 {<br />

font-weight: bold;<br />

margin-top: 0.8em;<br />

margin-bottom: 0.5em;<br />

}<br />

H1 { font-size: 19pt }<br />

H2 { font-size: 17pt }<br />

H3 { font-size: 15pt }<br />

H4 { font-size: 13pt }<br />

H5 { font-size: 12pt }<br />

H6 { font-size: 11pt }<br />

P, OL, UL, DL, BLOCKQUOTE, PRE {<br />

margin-top: 1em;<br />

margin-bottom: 1em;<br />

}<br />

P {<br />

}<br />

line-height: 1.2em;<br />

text-indent: 0;<br />

OL, UL, DD { margin-left: 2em }<br />

TT, KBD, PRE { font-family: Courier }<br />

PRE { font-size: 9pt }<br />

BLOCKQUOTE {<br />

margin-left: 1em;<br />

margin-right: 1em;<br />

}<br />

ADDRESS {<br />

margin-top: 0.5em;<br />

margin-bottom: 0.5em;<br />

}<br />

TABLE {<br />

margin-top: 1.3em;<br />

margin-bottom: 1em;<br />

}<br />

DEL { text-decoration: line-through }


HTML2ps 2875<br />

A:link, HR { color: black }<br />

263.1.1 Configurazione della regola corrispondente al selettore<br />

speciale @html2ps<br />

La regola corrispondente al selettore ‘@html2ps’ si compone di dichiarazioni e di altre sottoregole<br />

per la configurazione di HTML2ps. Nelle sezioni seguenti vengono descritti i selettori<br />

specifici di queste sottoregole.<br />

Alcune proprietà hanno un significato booleano. A loro si assegna il valore zero per indicare<br />

Falso e il valore uno per indicare Vero.<br />

I valori che fanno riferimento a un’unità di misura, vanno indicati come avviene nei fogli di stile<br />

CSS: il numero seguito immediatamente dall’unità di misura. La tabella 263.1 elenca le unità<br />

di misura e le sigle corrispondenti che si possono utilizzare in questa circostanza. È importante<br />

osservare che l’unica dimensione relativa riconosciuta da HTML2ps è il quadratone e non sono<br />

previste misure percentuali come invece si può fare secondo le specifiche di W3C per i fogli di<br />

stile CSS.<br />

Tabella 263.1. Unità di misura secondo HTML2ps.<br />

Sigla<br />

cm<br />

mm<br />

pt<br />

pc<br />

em<br />

Unità di misura<br />

Centimetri.<br />

Millimetri.<br />

Punti tipografici.<br />

Pica.<br />

Quadratoni, corrispondente alla dimensione della lettera «M» maiuscola.<br />

• numberstyle: 0|1<br />

Permette di stabilire la numerazione delle pagine: zero richiede l’uso dei numeri arabi; uno<br />

corrisponde a numeri romani. Il valore predefinito per questa proprietà è il valore zero.<br />

• showurl: 0|1<br />

Attivando questa proprietà booleana, si ottiene l’inserimento nella <strong>composizione</strong> dell’indirizzo<br />

URI corrispondente ai riferimenti ipertestuali. In situazioni normali questo non<br />

avviene.<br />

• seq-number: 0|1<br />

Permette di abilitare la numerazione dei titoli ‘H1’, ‘H2’,... ‘H6’. In condizioni normali,<br />

questo non avviene.<br />

263.1.1.1 Sottoregola package<br />

La sottoregola ‘package’ serve a definire la disponibilità o meno di altri programmi di cui<br />

HTML2ps potrebbe avere bisogno. Di conseguenza si tratta di assegnamenti di valori booleani,<br />

dove zero rappresenta l’assenza del programma in questione e in generale è anche il valore<br />

predefinito.<br />

• PerlMagick: 0|1<br />

Indica la mancanza o la disponibilità di PerlMagick.


2876 HTML2ps<br />

• ImageMagick: 0|1<br />

Indica la mancanza o la disponibilità di ImageMagick.<br />

• Ghostscript: 0|1<br />

Indica la mancanza o la disponibilità di Ghostscript.<br />

• TeX: 0|1<br />

Indica la mancanza o la disponibilità di TeX.<br />

• dvips: 0|1<br />

Indica la mancanza o la disponibilità di ‘dvips’.<br />

• libwww-perl: 0|1<br />

Indica la mancanza o la disponibilità del modulo Perl Libwww-Perl.<br />

• path: percorsi_aggiuntivi<br />

Si tratta dell’indicazione di percorsi aggiuntivi per la ricerca degli eseguibili. Serve a garantire<br />

che i programmi utilizzati da HTML2ps siano raggiungibili per tutti gli utenti.<br />

In generale, in presenza di un sistema configurato bene, non dovrebbe essere necessaria<br />

l’indicazione di questa dichiarazione.<br />

263.1.1.2 Sottoregola paper<br />

La sottoregola ‘paper’ serve a definire le caratteristiche della carta. In generale si tratta solo<br />

delle dimensioni.<br />

• type: tipo_di_carta<br />

La direttiva serve a definire le dimensioni della carta, attraverso l’indicazione di un nome<br />

standard; per esempio: ‘A0’, ‘A1’, ... ‘A10’, ‘B0’, ‘B1’, ... ‘B10’, ‘letter’, ‘legal’, ecc.<br />

In alternativa, si possono indicare le dimensioni precise attraverso le proprietà ‘height’ e<br />

‘width’.<br />

• height: dimensione_assoluta<br />

Permette di definire l’altezza del foglio.<br />

• width: dimensione_assoluta<br />

Permette di definire la larghezza del foglio.<br />

263.1.1.3 Sottoregola option<br />

La sottoregola ‘option’ serve a definire l’utilizzo di alcune opzioni, a cui si può accedere anche<br />

attraverso la riga di comando. Vengono descritte prima le dichiarazioni da indicare nel file di<br />

configurazione e poi le opzioni corrispondenti della riga di comando.<br />

• twoup: 0|1<br />

-2 | --twoup<br />

Se attivato, fa in modo di ottenere un testo organizzato su due colonne verticali.


HTML2ps 2877<br />

• toc: {f|h|t}[b]<br />

-C {f|h|t}[b]<br />

Fa in modo che venga generato un indice generale, in base alle opzioni specificate da una o<br />

più lettere:<br />

– ‘b’ l’indice generale deve essere collocato all’inizio;<br />

– ‘f’ l’indice generale deve essere generato a partire dai riferimenti contenuti nel<br />

documento;<br />

– ‘h’ l’indice generale deve essere generato a partire dai titoli definiti dagli elementi<br />

HTML da ‘H1’ a ‘H6’;<br />

– ‘t’ l’indice generale deve essere generato a partire da elementi ‘LINK’ contenenti<br />

l’attributo ‘REV=TOC’.<br />

• DSC: 0|1<br />

-D | --DSC<br />

Se attivato, fa in modo di generare un file PostScript aderente alle specifiche DSC. In<br />

generale, per ottenere un file PostScript completo, è necessario attivare questa opzione.<br />

• encoding: codifica<br />

-e codifica | --encoding codifica<br />

Permette di definire la codifica in cui è realizzato il file HTML. Il valore predefinito è<br />

‘ISO-8859-1’, ma sono poche altre le possibilità (si deve consultare la pagina di manuale).<br />

• hyphenate: 0|1<br />

-H | --hyphenate<br />

Se attivato, fa in modo che il testo possa essere separato in sillabe, per facilitare<br />

l’impaginazione.<br />

• language: linguaggio<br />

-l linguaggio | --language linguaggio<br />

Permette di indicare un linguaggio diverso da quello che può essere stato dichiarato nell’elemento<br />

‘BODY’ con l’attributo ‘LANG’ di un documento HTML. La stringa che definisce il<br />

linguaggio va scelta in base a quanto già consentito dall’HTML (sezione 543).<br />

• landscape: 0|1<br />

-L | --landscape<br />

Se attivato, genera pagine orientate in modo orizzontale.<br />

• number: 0|1<br />

-n | --number<br />

Se attivato, fa in modo di aggiungere i numeri di pagina.<br />

• startno: n<br />

-N n | --startno n<br />

Specifica il numero iniziale delle pagine. Il valore predefinito è uno.


2878 HTML2ps<br />

• xref: 0|1<br />

-R | --xref<br />

Se attivato, fa in modo di aggiungere dei riferimenti visivi nel testo, in corrispondenza di<br />

quelli ipertestuali contenuti nel documento HTML.<br />

• scaledoc: scala_percentuale<br />

-s scala_percentuale | --scaledoc scala_percentuale<br />

Riduce o amplia la scala del documento: il valore unitario rappresenta la situazione normale,<br />

di una scala pari al 100 %; valori superiori indicano un ingrandimento, mentre valori<br />

inferiori indicano una riduzione (si usa il punto per separare la parte intera dalle cifre<br />

decimali).<br />

• web: {a|b|l|r|s}[p|L|n]<br />

-W {a|b|l|r|s}[p|L|n]<br />

-web {a|b|l|r|s}[p|L|n]<br />

Fa in modo che vengano utilizzati più file HTML che si ritiene facciano parte dello stesso<br />

documento. Il modo in cui vengono presi in considerazione questi file dipende dalla stringa<br />

composta nel modo mostrato dallo schema sintattico.<br />

– ‘a’ segue tutti i riferimenti ipertestuali;<br />

– ‘b’ segue soltanto i riferimenti ipertestuali che riguardano la stessa directory del file<br />

iniziale;<br />

– ‘l’ segue soltanto i riferimenti ipertestuali che contengono l’attributo ‘REL=NEXT’<br />

all’interno dell’elemento ‘LINK’;<br />

– ‘r’ segue soltanto i riferimenti ipertestuali relativi;<br />

– ‘s’ segue solo i riferimenti allo stesso nodo del documento di partenza;<br />

– ‘p’ chiede conferma per ogni file HTML da aggiungere (ciò avviene in ogni caso<br />

quando si superano i 50 file);<br />

– ‘L’ riordina i documenti in base alla struttura gerarchica;<br />

– ‘n’ un numero indica il livello massimo di ricorsione, tenendo conto che il valore<br />

predefinito è di quattro livelli.<br />

263.1.1.4 Sottoregola margin<br />

La sottoregola ‘margin’ permette di definire esplicitamente i margini della pagina.<br />

Questa sottoregola è diventata obsoleta e viene sostituita dalla configurazione nel file di stile<br />

CSS, utilizzando la regola ‘@page’, introdotta dalle specifiche CSS2.<br />

• left margine_sinistro<br />

right margine_destro<br />

Indicano i margini sinistro e destro rispettivamente. Il valore predefinito è ‘2.5cm’, pari a<br />

2,5 cm.


HTML2ps 2879<br />

• top margine_superiore<br />

bottom margine_inferiore<br />

Indicano i margini superiore e inferiore rispettivamente. Il valore predefinito è ‘3cm’, pari a<br />

3 cm.<br />

• middle distanza_tra_colonne<br />

Indica la distanza orizzontale tra le colonne, quando si stampano due colonne per pagina.<br />

Il valore predefinito è ‘2cm’, pari a 2 cm.<br />

263.1.1.5 Sottoregola xref<br />

La sottoregola ‘xref’ permette di definire esplicitamente il modo in cui vengono indicati i<br />

riferimenti nel testo, quando questa funzionalità è stata abilitata.<br />

• text: modello<br />

Permette di definire il modello da utilizzare, tenendo conto che il simbolo ‘$N’ viene<br />

rimpiazzato con il numero della pagina. Il modello predefinito è ‘[p $N]’.<br />

• passes: n<br />

Permette di definire il numero di passaggi necessario per determinare in modo corretto i<br />

riferimenti incrociati. Il valore predefinito è il valore uno, ma l’inserzione del testo corrispondente<br />

al modello potrebbe cambiare la sequenza delle pagine, per cui si potrebbe<br />

rendere necessario un numero maggiore di passaggi.<br />

263.1.1.6 Sottoregola quote<br />

La sottoregola ‘quote’ permette di definire esplicitamente l’uso delle virgolette più appropriate<br />

in base al linguaggio. Queste virgolette vengono inserite nel testo in corrispondenza degli elementi<br />

‘Q’. In generale, i valori predefiniti per la lingua italiana sono già corretti. Viene mostrato<br />

solo un esempio per comprendere intuitivamente come si potrebbe adoperare questa sottoregola:<br />

quote {<br />

it {<br />

open: "«";<br />

close: "»";<br />

open2: "‘‘";<br />

close2: "’’";<br />

}<br />

}<br />

Si intende dall’esempio che sono disponibili solo due livelli di virgolette.<br />

263.1.1.7 Sottoregola toc<br />

La sottoregola ‘toc’ permette di definire alcune caratteristiche relative all’indice generale, quando<br />

la sua realizzazione è stata richiesta espressamente. In particolare si può utilizzare la proprietà<br />

‘level’ alla quale si assegna un numero, che sta a indicare i livelli da prendere in considerazione.<br />

Il valore predefinito è sei, che produce una voce per ogni tipo di titolo ‘Hn’ (da ‘H1’ a ‘H6’).


2880 HTML2ps<br />

263.1.1.8 Sottoregola hyphenation<br />

La sottoregola ‘hyphenation’ permette di definire la collocazione del file TeX contenente i<br />

modelli per la separazione in sillabe. La cosa si fa distinguendo tra diversi linguaggi. L’esempio<br />

seguente dovrebbe essere sufficiente a intendere intuitivamente la cosa:<br />

hyphenation {<br />

it {<br />

file: "/usr/share/texmf/tex/generic/hyphen/ithyph.tex";<br />

}<br />

en {<br />

file: "/usr/share/texmf/tex/generic/hyphen/ushyph1.tex";<br />

}<br />

}<br />

263.1.1.9 Sottoregole header e footer<br />

Le sottoregole ‘header’ e ‘footer’ permettono di definire l’intestazione e il fondo pagina, dove<br />

di solito si collocano alcune informazioni ricorrenti assieme al numero della pagina. Le proprietà<br />

di queste sottoregole sono praticamente le stesse; qui vengono elencate solo alcune di queste<br />

proprietà nella tabella 263.3. La tabella 263.2 elenca alcuni simboli che possono essere utilizzati<br />

per definire i modelli delle intestazioni e dei fondo pagina.<br />

Tabella 263.2. Simboli utilizzabili nelle intestazioni e nei fondo pagina.<br />

Simbolo Corrispondenza<br />

$T Titolo del documento.<br />

$A Autore, come specificato in ‘’.<br />

$U URI del documento.<br />

$N Numero di pagina.<br />

$H Titolo attuale (‘H1’...‘H3’).<br />

$D Data e orario attuale.<br />

\$ Dollaro.<br />

Tabella 263.3. Alcune proprietà utilizzabili nell’intestazione e nel fondo delle pagine.<br />

proprietà<br />

left<br />

center<br />

right<br />

odd-left<br />

odd-center<br />

odd-right<br />

even-left<br />

even-center<br />

even-right<br />

font-family<br />

font-size<br />

font-style<br />

font-weight<br />

Contenuto<br />

Intestazione allineata a sinistra.<br />

Intestazione al centro.<br />

Intestazione allineata a destra.<br />

Intestazione delle pagine dispari allineata a sinistra.<br />

Intestazione delle pagine dispari al centro.<br />

Intestazione delle pagine dispari allineata a destra.<br />

Intestazione delle pagine pari allineata a sinistra.<br />

Intestazione delle pagine pari al centro.<br />

Intestazione delle pagine pari allineata a destra.<br />

Tipo di carattere da usare (predefinito Helvetica).<br />

Dimensione del carattere (predefinito 8 punti).<br />

Forma del carattere (predefinita la forma normale).<br />

Spessore del carattere (predefinito lo spessore normale).


HTML2ps 2881<br />

263.1.2 Configurazione in cascata<br />

La configurazione di HTML2ps segue la logica dei fogli di stile CSS, anche per ciò che riguarda<br />

la sua definizione in cascata. In generale: il file ‘/etc/html2psrc’ contiene le indicazioni essenziali;<br />

il file ‘~/.html2psrc’ contiene la configurazione personalizzata; l’opzione ‘-f’ consente<br />

di aggiungere altra configurazione specifica; l’opzione ‘-S’ consente di aggiungere una stringa<br />

ulteriore allo stile.<br />

Quando si utilizza l’opzione ‘-f’, se si vuole evitare di eliminare la configurazione standard dei<br />

file ‘/etc/html2psrc’ e ‘~/.html2psrc’, si deve iniziare con i due punti (‘:’), come si vede<br />

nell’esempio seguente:<br />

$ html2ps -f :locale manuale.html > manuale.ps<br />

Si possono anche sommare assieme più configurazioni o stili CSS locali, come si vede<br />

nell’esempio seguente, dove si utilizzano i file ‘locale’, ‘A4’ e ‘numerato’:<br />

$ html2ps -f :locale:A4:numerato manuale.html > manuale.ps<br />

L’opzione ‘-S’ serve solo per aggiungere una regola al volo, indicandola direttamente nella riga<br />

di comando, come si vede nell’esempio seguente:<br />

$ html2ps -f :locale -S "H1 { color: blue }" manuale.html > manuale.ps<br />

263.2 Avvio di HTML2ps<br />

HTML2ps si utilizza attraverso l’eseguibile ‘html2ps’, con la sintassi seguente:<br />

html2ps opzioni [file_html]<br />

Il file da convertire può essere indicato nella riga di comando, dove in tal caso può trattarsi anche<br />

di un URI, oppure può essere fornito attraverso lo standard input.<br />

Quasi tutte le opzioni di questo programma sono richiamabili anche tramite una proprietà corrispondente<br />

nella sottoregola ‘option’, come è già stato descritto. Qui vengono riepilogate le<br />

opzioni più importanti nella tabella 263.4. In particolare, si può osservare che si può indicare il<br />

nome del file da generare attraverso l’opzione ‘-o’, oppure ‘--output’, altrimenti il risultato<br />

della conversione viene emesso attraverso lo standard output.<br />

Tabella 263.4. Riepilogo delle opzioni più comuni.<br />

Opzione<br />

Descrizione<br />

-2, --twoup Due colonne verticali.<br />

-D, --DSC Genera un file PostScript DSC (standard).<br />

-e, --encoding Stabilisce la codifica originale.<br />

-H, --hyphenate Abilita la separazione in sillabe.<br />

-L, --landscape Orientamento orizzontale.<br />

-n, --number Aggiunge i numeri alle pagine.<br />

-o, --output Specifica il file PostScript da generare.<br />

-R, --xref Mostra gli URI dei riferimenti ipertestuali.<br />

-s, --scaledoc Cambia la scala del documento.<br />

-W, --web Definisce come gestire più file HTML assieme.<br />

-f, --rcfile Specifica i file di configurazione aggiuntivi o alternativi.<br />

-S, --style Specifica una regola aggiuntiva al volo.


2882 HTML2ps<br />

Esempi<br />

$ html2ps -o documento.ps documento.html<br />

Converte il file ‘documento.html’ nel file ‘documento.ps’.<br />

$ html2ps -2 -o documento.ps documento.html<br />

Converte il file ‘documento.html’ nel file ‘documento.ps’, che risulterà organizzato in<br />

due colonne verticali.<br />

$ html2ps -R -o documento.ps documento.html<br />

Converte il file ‘documento.html’ nel file ‘documento.ps’, che conterrà dei riferimenti<br />

incrociati visibili.<br />

$ html2ps -2 -s 0.5 -o documento.ps documento.html<br />

Converte il file ‘documento.html’ nel file ‘documento.ps’, che risulterà organizzato in<br />

due colonne verticali, con la dimensione del carattere ridotta alla metà.<br />

$ html2ps -W b -o XFree86.ps XFree86-Video-Timings-HOWTO.html<br />

Converte i file HTML che iniziano da ‘XFree86-Video-Timings-HOWTO.html’ in un<br />

solo file PostScript, denominato ‘XFree86.ps’. In particolare viene richiesto di seguire<br />

solo i riferimenti ipertestuali rivolti alla stessa directory di partenza.<br />

263.3 Particolarità nell’HTML<br />

HTML2ps interpreta alcuni «comandi» speciali all’interno del file HTML. Si tratta di:<br />

• salto pagina incondizionato, che si ottiene con uno dei comandi seguenti:<br />

<br />


HTML2ps 2883<br />

Figura 263.1. Programma frontale per il controllo di HTML2ps.<br />

La figura mostra una versione imperfetta, in cui i bottoni non sono allineati con le descrizioni.<br />

Probabilmente questo problema sarà corretto nelle prossime versioni.<br />

263.5 Riferimenti<br />

• Jan Kärrman, Using html2ps<br />

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org


Introduzione a Amaya<br />

Capitolo 264<br />

Amaya è un sistema visuale integrato di navigazione e <strong>composizione</strong> di documenti HTML e<br />

XHTML. È interessante notare che Amaya è già in grado di riconoscere e utilizzare i fogli di<br />

stile CSS.<br />

Trattandosi di un programma visuale, utilizza X; a questo proposito esistono due filoni nello<br />

sviluppo di Amaya: uno che utilizza le librerie proprietarie Motif e un altro che si avvale di<br />

GTK+. Lo sviluppo di Amaya su librerie GTK+ non è ancora maturo nel momento in cui si<br />

scrive questo capitolo e per ora si fa riferimento principalmente all’edizione «Motif».<br />

Amaya è disponibile anche per altri sistemi operativi. Probabilmente, questo fatto ha spinto gli<br />

sviluppatori del programma a costruire per lui un mondo a parte. In particolare, la tastiera viene<br />

gestita da Amaya in modo indipendente dal sistema sottostante.<br />

L’avvio di Amaya è molto semplice, attraverso l’eseguibile ‘amaya’, dal momento che gli<br />

argomenti sono tutti facoltativi:<br />

amaya [-display schermo] [file|uri]<br />

La figura 264.1 mostra come si presenta all’avvio, quando non si indica alcun file.<br />

Figura 264.1. Amaya.<br />

Amaya è un sistema di <strong>composizione</strong> HTML e XHTML, molto sofisticato e molto serio nel suo<br />

approccio a questi formati. Questo capitolo intende solo introdurre al suo utilizzo, tenendo conto<br />

che la documentazione originale, accessibile anche dal menù Help, è buona.<br />

2884


Introduzione a Amaya 2885<br />

264.1 Navigazione e <strong>composizione</strong><br />

Amaya è sia un navigatore HTTP, sia un sistema di <strong>composizione</strong> in HTML. Questo fatto ha<br />

delle implicazioni nel suo utilizzo che a prima vista possono sembrare un po’ strane, benché<br />

siano assolutamente logiche. Per prima cosa è importante sapere che è possibile controllare la<br />

modalità di accesso al documento, attraverso la voce Editor Mode del menù Edit. Attivandola<br />

si abilita la modifica del documento; disattivandola si richiede espressamente di accedere in sola<br />

lettura.<br />

Quando Amaya accede in sola lettura, si comporta come un navigatore normale; quando è<br />

consentita la modifica, il documento può essere alterato e salvato successivamente.<br />

Quando si accede a un riferimento ipertestuale, come si fa di solito con i navigatori, il documento<br />

che si ottiene può occupare la stessa finestra di partenza, oppure può essere messo in un’altra. La<br />

scelta è abbastanza logica: se il documento di partenza non è stato alterato, si utilizza la stessa<br />

finestra iniziale.<br />

Per <strong>selezionare</strong> un riferimento ipertestuale, in condizioni normali serve un clic doppio con il<br />

primo tasto del mouse, perché con uno solo si posiziona semplicemente il cursore del testo. È<br />

possibile modificare la configurazione per fare in modo che basti un solo clic, ma in generale<br />

questa non è una buona idea, dal momento che diventerebbe difficile portare il cursore sopra un<br />

riferimento ipertestuale.<br />

264.1.1 Modifica del documento<br />

La modifica di un documento HTML può avvenire in modo visuale, diretto, attraverso la finestra<br />

che si usa anche per la sua lettura. La vera «forza» di Amaya sta nella possibilità di accedere<br />

al documento in una forma diversa, attraverso la sua struttura, in modo da avere una visione più<br />

chiara di ciò che si sta facendo.<br />

Dal menù Views si possono <strong>selezionare</strong> le voci Show structure e Show alternate. La prima<br />

apre una finestra separata contenente la struttura, come si vede nell’esempio di figura 264.2,<br />

la seconda mostra il documento in un modo alternativo, precisamente in forma testuale senza<br />

grafica. La modifica in una di queste finestre si ripercuote simultaneamente su tutte le altre.


2886 Introduzione a Amaya<br />

Figura 264.2. La visione della struttura.<br />

Dallo stesso menù è possibile <strong>selezionare</strong> la voce Show source per accedere a una finestra contenente<br />

il sorgente del documento. Anche se è possibile modificare il testo direttamente nel sorgente,<br />

le modifiche non si applicano istantaneamente alle altre finestre, a meno di utilizzare la<br />

voce Synchronize dal menù File. Tuttavia, lo svantaggio nell’accedere direttamente al sorgente<br />

sta nel fatto che Amaya ha difficoltà a correggere gli errori nell’uso dell’HTML da parte di un<br />

autore inesperto, mentre nelle altre finestre questo non può avvenire, perché la struttura è sotto il<br />

pieno controllo del programma.<br />

È interessante notare che alla base di ogni finestra utile per accedere alla modifica del documento<br />

appare l’indicazione sintetica della struttura del punto in cui si trova il cursore. Per esempio, la<br />

sequenza<br />

Text \ P \ BODY \ HTML<br />

indica che si tratta di testo contenuto in un elemento ‘P’, che è contenuto nell’elemento ‘BODY’,<br />

che a sua volta è parte dell’elemento ‘HTML’:<br />

<br />

<br />

... <br />

<br />

<br />

Oltre alle specificità di Amaya, il suo funzionamento è abbastanza intuitivo. Si comprende che<br />

per poter essere utilizzato in modo conveniente, è più importante conoscere bene le potenzialità<br />

dell’HTML e dei fogli di stile CSS, prima di cercare di approfondire l’uso di questo programma.


Introduzione a Amaya 2887<br />

264.2 Configurazione<br />

La maggior parte della configurazione di Amaya è accessibile attraverso una delle voci del<br />

sottomenù Preferences del menù Special.<br />

Nella directory personale dell’utente che utilizza il programma, Amaya crea la sottodirectory<br />

‘.amaya/’, in cui inserisce il file di configurazione generale ‘thot.rc’, la sottodirectory per la<br />

sua memoria cache, ‘libwww-cache/’ e i propri file temporanei. A parte la collocazione del file<br />

‘thot.rc’, il resto può essere spostato altrove attraverso la configurazione.<br />

264.3 Aggregazione di un documento composto<br />

Amaya è in grado di aggregare un documento composto da più «pagine» HTML in un solo file,<br />

attraverso la voce Make book del menù Special.<br />

Per ottenere questo risultato si parte da un file HTML composto da un titolo contenuto in un<br />

elemento ‘H1’, seguito da testo e da una serie di riferimenti. Questi riferimenti (l’elemento ‘A’<br />

con l’attributo ‘HREF’) sono organizzati solitamente in un elenco puntato o numerato, ma a parte<br />

questo, tali riferimenti devono contenere anche l’attributo ‘REL’, a cui viene assegnato il valore<br />

‘chapter’ o ‘subdocument’. L’esempio seguente rappresenta bene questa struttura di partenza:<br />

<br />

<br />

<br />

Using Amaya<br />

BODY { background-color : #FFFFFF }<br />

<br />

<br />

<br />

Using Amaya<br />

<br />

Each following section gives a short description of how to use a<br />

specific Amaya functionality.<br />

<br />

Browsing with<br />

Amaya<br />

Selecting<br />

Searching and replacing<br />

text<br />

Displaying Views<br />

Creating new<br />

elements<br />

<br />

<br />

<br />

There is also a brief introduction which<br />

explains some of the different types that can be used in Amaya such as<br />

headings, lists, and quotations, and how to use them.<br />

<br />

Information types<br />

in HTML<br />

HTML Document<br />

Structure<br />

Headers<br />

<br />

<br />

<br />

<br />

<br />


2888 Introduzione a Amaya<br />

In particolare, l’elemento<br />

HTML Document Structure<br />

implica l’inclusione del corpo del file ‘HTML-elements/structure.html’ in quel punto, al<br />

posto del suo riferimento.<br />

Per la precisione, si possono distinguere questi casi: quando il riferimento è fatto a un documento<br />

completo, come appena visto, si ottiene l’inclusione del contenuto del suo elemento ‘BODY’;<br />

se invece il riferimento è fatto a un’etichetta di un certo elemento, viene incorporato solo il<br />

contenuto di quell’elemento.<br />

Nella realizzazione di un documento articolato in più file differenti, converrebbe avere l’accortezza<br />

di delimitare la parte sostanziale del testo di ogni file HTML in un elemento ‘DIV’ provvisto<br />

di etichetta a cui poter fare riferimento attraverso l’indice di partenza (l’attributo ‘ID’). In questo<br />

modo si potrebbero escludere dall’aggregazione una serie di informazioni che servono solo per<br />

la navigazione (pulsanti per avanzare, indietreggiare o raggiungere l’indice).<br />

Un indice di partenza può anche fare riferimento a file che contengono a loro volta dei sottoindici,<br />

realizzando quindi una struttura ad albero abbastanza articolata. Amaya continua ad aggregare i<br />

file finché trova elementi ‘A’ contenenti l’attributo ‘REL’ a cui sono assegnate le parole chiave già<br />

indicate.<br />

264.4 Riferimenti<br />

• Irène Vatton, Amaya documentation<br />

<br />

• Irène Vatton, Vincent Quint, José Kahan, Using Amaya<br />

<br />

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org


HTMLDOC<br />

Capitolo 265<br />

HTMLDOC 1 è un sistema di <strong>composizione</strong> basato su HTML. In pratica, si parte da uno o più<br />

file HTML e si ottiene una <strong>composizione</strong> in PostScript, PDF e HTML. I file HTML di partenza<br />

devono avere una struttura ragionevolmente semplice, dove il testo sia strutturato in capitoli, inizianti<br />

con un’intestazione ‘H1’, suddivisi nel modo consueto, attraverso le intestazione di livello<br />

inferiore (‘H2’, ‘H3’,... ‘H7’). In questo modo, HTMLDOC è in grado di generare automaticamente<br />

un indice generale e diventa utile tutto il sistema anche quando l’obiettivo è la generazione di<br />

una <strong>composizione</strong> finale nello stesso formato HTML.<br />

HTMLDOC è disponibile sia su piattaforme Unix, sia su sistemi MS-Windows. In particolare,<br />

può funzionare in modo interattivo, attraverso l’interfaccia grafica, oppure in modo non<br />

interattivo utilizzando semplicemente opzioni della riga di comando.<br />

265.1 Sorgente HTML<br />

Il sorgente di un documento HTMLDOC può essere contenuto in un file singolo, oppure in più file<br />

HTML distinti. La prima cosa che dovrebbe apparire nel corpo del file HTML è un’intestazione<br />

di tipo ‘H1’.<br />

In questi file HTML non sono ammissibili le inserzioni di oggetti, a parte le immagini nel modo<br />

consueto, attraverso l’elemento ‘IMG’; non si possono usare le cornici (frame); vengono ignorati<br />

gli script e le applet. È possibile <strong>selezionare</strong> soltanto i tipi di carattere standard, corrispondenti<br />

a: Helvetica, Times e Courier. Dal momento che HTMLDOC è disponibile anche su piattaforma<br />

MS-Windows, il carattere Arial viene convertito automaticamente in Helvetica. Non sono gestiti<br />

i fogli di stile e le tabelle sono riconosciute solo al livello di HTML 3.2.<br />

Come estensione dello standard HTML viene riconosciuto il marcatore ‘’, allo<br />

scopo di ottenere un salto pagina.<br />

La documentazione di HTMLDOC è scritta in questo modo, per cui può essere osservata la<br />

tecnica utilizzata e il risultato che si ottiene. In generale, dopo l’elemento ‘HEAD’, all’interno dell’elemento<br />

‘BODY’ si comincia subito con un’intestazione ‘H1’. L’esempio seguente è un estratto<br />

del file ‘intro.html’, che è il primo del gruppo di file che compongono la documentazione di<br />

HTMLDOC:<br />

<br />

<br />

<br />

<br />

<br />

<br />

HTMLDOC 1.7 User’s Guide<br />

<br />

<br />

<br />

<br />

Introduction<br />

<br />

About This Software<br />

This document describes how to use the HTMLDOC software, version<br />

1.7. HTMLDOC is a HTML document processing program that generates<br />

indexed HTML, Adobe&reg; PostScriptTM, and Adobe Portable Document<br />

1 HTMLDOC GNU GPL<br />

2889


2890 HTMLDOC<br />

Format (PDF 1.2) files suitable for printing or online viewing.<br />

No restrictions are placed upon the output produced by HTMLDOC.<br />

History<br />

Like many programs HTMLDOC was developed in response to a need<br />

my company had for generating high-quality documentation in printed and<br />

...<br />

...<br />

Why Just HTML?<br />

Some people have asked why this program only deals with HTML input files<br />

and is not able to read any Standard Generalized Markup Language (SGML)<br />

file. The reasons are numerous but basically boil down to:<br />

...<br />

...<br />

<br />

<br />

Eventualmente è possibile convertire un file HTML singolo che non sia conforme a questa struttura,<br />

utilizzando un’opzione apposita, ‘--webpage’, con la quale non si ottiene più l’indice generale,<br />

ma soprattutto non è possibile aggregare più file HTML assieme in un documento finale<br />

unico.<br />

HTMLDOC è progettato per gestire documenti di dimensioni molto grandi; tuttavia esistono<br />

dei limiti, fissati nel file ‘config.h’, che appartiene ai sorgenti del programma. Eventualmente<br />

si possono estendere tali limiti modificando questo file e ricompilando successivamente i<br />

sorgenti.<br />

265.2 Funzionamento<br />

HTMLDOC si compone dell’eseguibile ‘htmldoc’, che può essere avviato senza argomenti, per<br />

ottenere un funzionamento interattivo:<br />

htmldoc [opzioni file_html ... ]<br />

È prevista la presenza di un file di configurazione personale, dei singoli utenti. Si tratta del file<br />

‘~/.htmldocrc’. Questo file viene creato la prima volta dall’eseguibile ‘htmldoc’ e potrebbe<br />

essere utile modificare la direttiva di dichiarazione del programma usato per modificare i file<br />

HTML sorgenti:<br />

#HTMLDOCRC 1.7<br />

EDITOR=amaya %s<br />

In questo caso, si fa in modo di utilizzare Amaya per la modifica del sorgente HTML, quando<br />

questo tipo di programma viene richiamato da HTMLDOC.<br />

Purtroppo non è disponibile una documentazione sufficiente sulle direttive di questo file di<br />

configurazione.<br />

Nel seguito viene mostrato il funzionamento interattivo di HTMLDOC, abbinando anche la descrizione<br />

delle opzioni che possono servire per ottenere lo stesso risultato senza interazione con il<br />

programma. Intanto, nella figura 265.1 si può osservare come appare inizialmente, dopo l’avvio<br />

con il comando seguente:<br />

$ htmldoc[ Invio ]


HTMLDOC 2891<br />

Figura 265.1. Aspetto iniziale di HTMLDOC, quando viene avviato senza argomenti.<br />

Nella parte bassa del pannellino grafico, appaiono alcuni pulsanti grafici, che fanno riferimento<br />

alla possibilità di creare e salvare un file contenente tutte le informazioni sulla <strong>composizione</strong> che<br />

si vuole generare. Questo file può essere inteso come la configurazione del libro che si vuole<br />

comporre.<br />

• Il pulsante NE W<br />

serve a eliminare il lavoro in corso, per ricominciare con un altro nuovo.<br />

• Il pulsante OP E N permettere di accedere al file system per <strong>selezionare</strong> un file contenente le<br />

informazioni su una <strong>composizione</strong> già predisposta in precedenza.<br />

• I pulsanti SA V E e SA V E AS consentono di salvare l’impostazione attuale, eventualmente<br />

dando un nome nuovo alla cosa.<br />

• Il pulsante GE N E R A T E avvia la <strong>composizione</strong> in base alle informazioni indicate, generando<br />

uno o più file PostScript, PDF o HTML, a seconda di quanto specificato a questo proposito.<br />

• Il pulsante CL O S E<br />

termina il funzionamento di HTMLDOC.<br />

La parte centrale del pannello grafico di HTMLDOC cambia in funzione del lembo superiore<br />

selezionato.<br />

265.2.1 Definizione dei file sorgenti<br />

La prima fase per arrivare alla <strong>composizione</strong> è quella della selezione dei file HTML che compongono<br />

i sorgenti. Ciò si fa dalla finestra che si ottiene selezionando l’etichetta Input, che<br />

corrisponde alla situazione in cui si presenta HTMLDOC all’avvio.<br />

In alto, si può osservare la presenza di due pulsanti di selezione, dove si può specificare il tipo<br />

di sorgente che si utilizza. La voce BO O K indica l’intenzione di utilizzare uno o più file HTML<br />

per generare un documento unico, in forma di libro, mentre la voce WE B PA G E , corrispondente<br />

all’opzione ‘--webpage’, specifica che si tratta di un solo file HTML che non ha la struttura<br />

richiesta per realizzare un libro.


2892 HTMLDOC<br />

Il pulsante grafico laterale AD D FI L E consente di accedere al file system per <strong>selezionare</strong> i file<br />

HTML che compongono i sorgenti del documento che si vuole comporre. Nella figura 265.2<br />

appaiono selezionati i file ‘uno.html’, ‘due.html’ e ‘tre.html’.<br />

Figura 265.2. Sono stati selezionati tre file.<br />

Sul lato destro si possono osservare anche altri pulsanti grafici, che si abilitano solo quando si<br />

seleziona uno o più nomi nell’elenco di quelli che compongono l’insieme dei sorgenti del documento:<br />

ED I T FI L E permette di avviare automaticamente il programma per la modifica dei file<br />

HTML; DE L E T E FI L E elimina i nomi evidenziati dall’elenco, ma senza cancellarli dal file system;<br />

MO V E UP e MO V E DO W N consentono di spostare il nome selezionato in alto o in basso,<br />

cambiando l’ordine.<br />

Per completare l’estetica della <strong>composizione</strong>, è possibile specificare un’immagine da usare come<br />

logo e un’altra immagine da utilizzare nella copertina (ammesso che sia stata ablitata la sua generazione).<br />

Nel primo caso si può usare l’opzione ‘--logo file_immagine ’; nel secondo l’opzione<br />

‘--title file_immagine ’.<br />

265.2.2 Composizione<br />

L’etichetta Output consente di accedere alla definizione del file o dei file che si vogliono ottenere<br />

dalla <strong>composizione</strong>. Il risultato della <strong>composizione</strong> può essere un file oppure una directory,<br />

selezionando FI L E oppure DI R E C T O R Y , rispettivamente. Queste due voci corrispondono alle<br />

opzioni ‘--outfile file’ e ‘--outdir directory’. Il file o la directory in questione si indicano<br />

sotto, mentre più giù si specifica esattamente il tipo di <strong>composizione</strong> che si vuole generare:<br />

HTML , PS , PS2 e PDF (opzione ‘--format {ps1|ps2|pdf|html}’).


HTMLDOC 2893<br />

Figura 265.3. Definizione del risultato della <strong>composizione</strong> che si vuole ottenere.<br />

Il senso delle opzioni che appaiono nel resto della maschera è abbastanza intuitivo. Si può osservare<br />

il fatto che sia possibile cambiare il colore dello sfondo e anche utilizzare un’immagine per<br />

questo.<br />

Se si indica una directory, si intende generare un gruppo di file nella directory stessa. Ciò può<br />

essere utile nella <strong>composizione</strong> in HTML, ma funziona nello stesso modo anche per le altre forme<br />

di <strong>composizione</strong>.<br />

265.2.3 Formato e aspetto delle pagine<br />

L’etichetta Page consente di accedere alla definizione delle pagine, nel caso in cui la <strong>composizione</strong><br />

richiesta serva a generare un formato PostScript o PDF. È possibile indicare il formato<br />

della pagina (corrispondente all’opzione ‘--size formato ’), se la stampa avviene su<br />

entrambi i lati del foglio (la voce DO U B L E-S I D E D , ovvero l’opzione ‘--duplex’), i margini<br />

(le opzioni ‘--left n{in|cm|mm}’, ‘--right n{in|cm|mm}’, ‘--top n{in|cm|mm}’,<br />

‘--bottom n{in|cm|mm}’), l’intestazione e il piè pagina (opzioni ‘--header xyz’ e<br />

‘--footer xyz’).


2894 HTMLDOC<br />

Figura 265.4. Definizione della pagina nel caso di <strong>composizione</strong> per la stampa.<br />

La selezione di intestazione e piè di pagina consente di definire ciò che deve apparire a sinistra,<br />

al centro e a destra di queste.<br />

265.2.4 Indice generale<br />

L’etichetta TOC consente di accedere alla definizione dell’indice generale, che in particolare<br />

prevede l’indicazione del livello di dettaglio che deve avere e consente la specificazione di<br />

intestazione e piè pagina differenti dal resto del documento.<br />

Figura 265.5. Definizione dell’indice generale e della numerazione delle sezioni.


HTMLDOC 2895<br />

Il livello di dettaglio dell’indice si definisce anche con l’opzione ‘--toclevels n’, l’intestazione<br />

e il piè di pagina si possono definire con le opzioni ‘--tocheader xyz’ e<br />

‘--tocfooter xyz’. Infine, nella maschera si può vedere la voce NU M B E R E D HE A D I N G S , corrispondente<br />

all’opzione ‘--numbered’, con cui si ottiene la numerazione delle sezioni (gli<br />

elementi ‘Hn’).<br />

265.2.5 Carattere da stampa<br />

Sempre nel caso di <strong>composizione</strong> per la stampa, l’etichetta Fonts consente di definire il tipo e<br />

la dimensione dei caratteri da usare per il corpo, le sezioni, l’intestazione e il piè pagina. Per<br />

la necessità di essere compatibili al massimo, sono disponibili solo i tipi Times, Helvetica e<br />

Courier. Si osservi che l’altezza delle righe viene espressa in rapporto rispetto all’altezza dei<br />

caratteri, dove per esempio ‘1.2’ rappresenta il 120 %.<br />

Figura 265.6. Definizione del carattere da stampa.<br />

Le opzioni corrispondenti sono: ‘--bodyfont carattere’, ‘--fontsize n’ e<br />

‘--fontspacing n’ per definire il carattere, la dimensione in punti e l’altezza delle righe nel<br />

testo normale; ‘--headfootfont carattere’ e ‘--headfootsize n’, per indicare il tipo di carattere<br />

e la dimensione in punti dell’intestazione e del piè di pagina; ‘--headingfont carattere’<br />

per definire il tipo di carattere dei titoli delle sezioni.<br />

265.2.6 Altre opzioni<br />

L’ultima etichetta, Options, riguarda le opzioni rimanenti che non hanno trovato una collocazione<br />

migliore. In questo contesto viene definito in particolare il programma da utilizzare per la<br />

modifica dei file HTML del sorgente. Si può usare un programma per la modifica dei file di testo,<br />

oppure un applicativo più elaborato, specifico per i file HTML.


2896 HTMLDOC<br />

Figura 265.7. Definizione delle opzioni rimanenti.<br />

265.3 Programmazione della <strong>composizione</strong><br />

HTMLDOC, quando funziona in modo interattivo, consente di conservare in un file l’impostazione,<br />

ovvero la configurazione di un documento, memorizzando tutte le opzioni selezionate.<br />

Quanto mostrato nelle figure di esempio, si tradurrebbe nel contenuto seguente:<br />

#HTMLDOC 1.7<br />

3<br />

uno.html<br />

due.html<br />

tre.html<br />

-t ps1 -f prova.ps --toclevels 3 --size a4 --left 3cm --right 3cm ←↪<br />

↩→--top 3cm --bottom 3cm --header t.1 --footer h.. --tocheader .I. ←↪<br />

↩→--tocfooter h.i --no-compression --fontsize 11.0 --fontspacing 1.2 ←↪<br />

↩→--headingfont Courier --bodyfont Times --headfootsize 12.0 ←↪<br />

↩→--headfootfont Helvetica<br />

Da htmldoc(1) si intuisce che l’autore suggerisca di usare l’estensione ‘.book’ per questi file;<br />

tuttavia HTMLDOC non propone alcunché.<br />

L’osservazione di questi file consente anche di capire meglio l’uso delle opzioni della riga di<br />

comando. In questo caso, volendo usare l’eseguibile ‘htmldoc’ in modo non interattivo per fare<br />

la stessa cosa, il comando avrebbe potuto essere quello seguente:<br />

$ htmldoc -t ps1 -f prova.ps --toclevels 3 --size a4 ←↪<br />

↩→--left 3cm --right 3cm --top 3cm --bottom 3cm --header t.1 ←↪<br />

↩→--footer h.. --tocheader .I. --tocfooter h.i ←↪<br />

↩→--no-compression --fontsize 11.0 --fontspacing 1.2 ←↪<br />

↩→--headingfont Courier --bodyfont Times --headfootsize 12.0 ←↪<br />

↩→--headfootfont Helvetica uno.html due.html tre.html<br />

Eccezionalmente, l’eseguibile ‘htmldoc’ può ricevere come argomento il nome di uno di questi<br />

file ‘.book’, ottenendo un funzionamento interattivo, partendo dalla configurazione contenuta<br />

nel file stesso. Supponendo di avere salvato quella configurazione nel file ‘prova.book’,<br />

basterebbe riavviare nel modo seguente:


HTMLDOC 2897<br />

$ htmldoc prova.book<br />

Tabella 265.1. Riepilogo delle opzioni più comuni.<br />

Opzione<br />

Descrizione<br />

--webpage<br />

Il sorgente non è realizzato secondo la struttura di un libro.<br />

--format{ps1|ps2|pdf|html}<br />

Formato finale della <strong>composizione</strong>.<br />

-t{ps1|ps2|pdf|html}<br />

Come ‘--format’.<br />

--outfile file<br />

File da generare dalla <strong>composizione</strong>.<br />

-f file Come ‘--outfile’.<br />

--outdir directory<br />

Directory in cui inserire i file della <strong>composizione</strong>.<br />

-d directory Come ‘--outdir’.<br />

--top n{in|cm|mm}<br />

Margine superiore secondo l’unità di misura specificata.<br />

--bottom n{in|cm|mm}<br />

Margine inferiore secondo l’unità di misura specificata.<br />

--left n{in|cm|mm}<br />

Margine sinistro secondo l’unità di misura specificata.<br />

--right n{in|cm|mm}<br />

Margine destro secondo l’unità di misura specificata.<br />

--size letter|a4|universal<br />

Formato della carta in base a un nome.<br />

--size larghezzaxaltezza{in|cm|mm} Formato della carta espresso esattamente.<br />

--duplex<br />

Stampa su entrambi i lati del foglio.<br />

--header xyz<br />

Intestazione.<br />

--footer xyz<br />

Piè di pagina.<br />

--tocheader xyz<br />

Intestazione dell’indice generale.<br />

--tocfooter xyz<br />

Piè di pagina dell’indice generale.<br />

--headfootfont carattere<br />

Carattere da usare nell’intestazione e piè pagina.<br />

--headfootsize n<br />

Dimensione carattere di intestazione e piè pagina.<br />

--headingfont carattere<br />

Carattere dei titoli delle sezioni.<br />

--bodyfont carattere<br />

Carattere da usare nel corpo.<br />

--fontsize n<br />

Dimensione del carattere normale in punti.<br />

--fontspacing n<br />

Altezza riga rispetto alla dimensione del carattere.<br />

--logo file<br />

Definisce il file da usare come logo.<br />

--bodyimage file<br />

Definisce il file da usare come sfondo.<br />

--title file<br />

Immagine da usare nella copertina.<br />

--no-toc<br />

Non genera l’indice generale.<br />

--no-title<br />

Non genera la copertina.<br />

--toclevels n<br />

Definisce il numero di livelli dell’indice generale.<br />

La tabella 265.1 riassume le funzionalità delle opzioni principali di HTMLDOC quando viene<br />

usato in modo non interattivo. È importante tenere in considerazione alcune cose, che vengono<br />

descritte brevemente nel seguito.<br />

È possibile gestire solo immagini in formato GIF, JPG e PNG; in particolare, quando si ottiene<br />

una conversione in HTML, si usano le stesse immagini di partenza.<br />

La dimensione della carta può essere indicata per nome, oppure direttamente, fornendo larghezza<br />

e altezza, nella forma mxn, dove m rappresenta la larghezza e n l’altezza. Si osservi che questi<br />

due numeri vanno completati con l’indicazione finale dell’unità di misura (come si vede nella<br />

tabella), una volta sola per entrambi i valori. Il formato speciale denominato ‘universal’ si<br />

riferisce a un compromesso tra il formato A4 e il formato lettera (8,5 in × 11 in), in modo che<br />

possa essere stampato con entrambi i tipi di carta; in pratica si utilizza la larghezza del formato<br />

A4 e l’altezza del formato lettera.<br />

Le opzioni che definiscono il contenuto delle intestazioni e dei piè di pagina, utilizzano una<br />

simbologia speciale, in cui tre lettere indicano rispettivamente la parte sinistra, quella centrale e<br />

quella destra della riga. La tabella 265.2 riepiloga questi simboli.


2898 HTMLDOC<br />

Tabella 265.2. Simboli usati negli argomenti delle opzioni che definiscono il contenuto<br />

delle intestazioni e dei piè di pagina.<br />

Simbolo Descrizione<br />

. Vuoto.<br />

t Titolo del documento<br />

h Sezione attuale.<br />

c Capitolo attuale.<br />

l Logo.<br />

i Pagina in numero romano minuscolo.<br />

I Pagina in numero romano maiuscolo.<br />

1 Pagina in numero arabo normale.<br />

a Pagina in lettere minuscole.<br />

A Pagina in lettere maiuscole.<br />

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org


Essere presenti su Internet<br />

Capitolo 266<br />

Una volta realizzato il proprio documento in HTML, quando questo deve essere pubblicato da<br />

qualche parte su Internet, si pongono due problemi essenziali:<br />

1. dove trovare il posto;<br />

2. come rendere di dominio pubblico la sua presenza.<br />

Spesso, il primo problema lo si può risolvere utilizzando un sito offerto gratuitamente; in alternativa<br />

si possono prendere accordi per affittare uno spazio da qualche parte, magari ottenendo<br />

anche un dominio virtuale conveniente. Per quanto riguarda il secondo, è necessario iscrivere il<br />

proprio documento presso i vari servizi che si occupano di creare gli indici pubblici. Dei due<br />

problemi, il secondo è il più delicato.<br />

266.1 Motori di ricerca e robot<br />

Più passa il tempo e più sono i documenti che vengono pubblicati su Internet. I motori di ricerca,<br />

ovvero i servizi che gestiscono gli indici delle pubblicazioni, sono sempre più sommersi di lavoro.<br />

In questa situazione, ognuno applica una propria politica di filtro dei documenti che vengono<br />

sottoposti per l’inclusione nel loro indice. In generale, non basta realizzare un documento HTML<br />

corretto, <strong>occorre</strong> pensare anche ai motori di ricerca.<br />

Il documento HTML, per poter essere preso in considerazione in modo corretto dai motori di<br />

ricerca, deve avere una serie di elementi ‘META’ nell’intestazione, contenenti alcune informazioni<br />

salienti. Ciò permette la classificazione del documento e la creazione di indici chiari per l’utente<br />

di quel servizio. Tuttavia, il problema è che non tutti i motori di ricerca utilizzano le stesse<br />

informazioni nello stesso modo; così, ci si affida generalmente all’esperienza degli altri per la<br />

compilazione di tali elementi. Qui si raccolgono solo alcune indicazioni, ritenute corrette, ma<br />

che potrebbero anche essere smentite nel futuro.<br />

266.1.1 Elementi META<br />

Gli elementi ‘META’ sono vuoti, nel senso che non delimitano alcun testo, e si collocano nell’intestazione<br />

del file HTML, ovvero nell’elemento ‘HEAD’. Nella maggior parte dei casi, l’elemento<br />

‘META’ si utilizza con l’attributo ‘NAME’ e l’attributo ‘CONTENT’, attraverso i quali si stabilisce un<br />

nome a cui viene assegnato un contenuto.<br />

Il DTD dell’HTML non stabilisce quali siano i nomi che si possono usare per l’attributo ‘NAME’<br />

e da questo nascono tutti i problemi. In particolare, c’è da considerare che alle volte i nomi e i<br />

valori abbinati non fanno differenza tra maiuscole e minuscole, altre volte pare che la facciano.<br />

L’esempio seguente mostra un esempio tipico di utilizzo per un documento realizzato in italiano:<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

2899


2900 Essere presenti su Internet<br />

<br />

Il significato di queste informazioni dovrebbe essere intuitivo, salvo qualche caso, ma in particolare<br />

è necessario osservare un problema: alcune cose sono espresse attraverso sigle o parole<br />

chiave che hanno significato per la lingua inglese, mentre potrebbero essere attese parole o definizioni<br />

diverse nel caso di un documento in italiano. Nell’esempio si può osservare che l’elemento<br />

‘HTML’ possiede l’attributo ‘LANG’ a cui è assegnato il valore ‘it’, allo scopo di indicare che<br />

tutto il documento è scritto in lingua italiana. Pertanto, per modificare questo assunto negli elementi<br />

‘META’ in cui il linguaggio può avere importanza, è stato aggiunto nuovamente l’attributo<br />

‘LANG’ con il valore ‘en’. Può darsi che questa precauzione non serva a nulla, ma potrebbe essere<br />

importante in futuro.<br />

Eventualmente, si potrebbe anche arrivare a duplicare alcune informazioni per diversi linguaggi.<br />

Per esempio, l’informazione denominata ‘description’ viene fornita due volte: prima in<br />

italiano e poi in inglese.<br />

L’elenco seguente descrive brevemente le informazioni più importanti che si possono dare in<br />

questo modo.<br />

• description|Description<br />

Si tratta di una descrizione breve del contenuto che potrebbe essere mostrato negli indici.<br />

A titolo indicativo, non dovrebbe superare le 25 parole, per essere certi che sia presa in<br />

considerazione integralmente.<br />

• keywords|Keywords<br />

Si tratta di un elenco di parole, o frasi brevi, separate da una virgola. Queste parole rappresentano<br />

gli argomenti principali del documento. Indicandole in questo modo, si cerca<br />

di farle risaltare (anche se nel documento vengono usate poco o non vengono usate affatto),<br />

in modo che vengano prese in considerazione in modo particolare. A titolo indicativo,<br />

l’elenco non dovrebbe superare le 25 parole, per essere certi che questo venga preso in considerazione.<br />

Si intuisce che le prime parole di questo elenco siano considerate come quelle<br />

più importanti.<br />

• distribution|Distribution<br />

Probabilmente si riferisce all’estensione che ha o può avere la diffusione del documento.<br />

Le parole che possono essere assegnate sono ‘Global’ e ‘Local’, con i significati che si<br />

possono intuire.<br />

• rating|Rating<br />

Probabilmente si riferisce al tipo di pubblico a cui si rivolge il documento. In generale viene<br />

assegnata solo la parola chiave ‘General’; qualcuno suggerisce anche l’uso di, ‘Mature’<br />

e ‘Restricted’, ma il significato in pratica non è chiaro.<br />

• classification|Classification


Essere presenti su Internet 2901<br />

Si tratta della classificazione del contenuto del documento. È difficile fare un elenco<br />

dei termini che si possono usare, perché dipendono dal motore di ricerca. Probabilmente<br />

si può trattare di: ‘business’, ‘computers’, ‘entertainment’, ‘internet’,<br />

‘miscellaneous’, ‘personal’.<br />

• resource-type<br />

Si tratta della definizione che si dà al documento HTML. Da quanto si vede, si usa sempre<br />

solo la parola chiave ‘document’ (solo in minuscolo).<br />

• revisit-after<br />

Apparentemente, questa indicazione serve a richiedere al motore di ricerca di ripassare<br />

dopo un certo numero di giorni. Non è garantito il successo di questa richiesta, ma nulla<br />

vieta di provarci.<br />

• ROBOTS<br />

Questa informazione serve a chiedere esplicitamente o a vietare la scansione e l’indicizzazione.<br />

In generale si assegna la parola chiave ‘ALL’ perché venga preso in considerazione<br />

il documento a tutti gli effetti, assieme ai riferimenti a cui punta, mentre si usa la parola<br />

chiave ‘INDEX’ per richiedere la sola indicizzazione e ‘FOLLOW’ per seguire i riferimenti.<br />

Per evitare l’indicizzazione si usa ‘NOINDEX’, mentre per evitare di seguire i riferimenti si<br />

usa ‘NOFOLLOW’. Qualcuno suggerisce di utilizzare la stringa ‘ALL,INDEX,FOLLOW’ per<br />

ottenere il risultato migliore.<br />

• SPIDERS<br />

Apparentemente funziona nello stesso modo di ‘ROBOTS’ e probabilmente accetta gli stessi<br />

valori.<br />

266.1.2 Filtro iniziale alla scansione dei robot<br />

Nel momento in cui si è posto il problema dell’esistenza di tutta una serie di servizi di scansione<br />

della documentazione su Internet, si è pensato all’opportunità di bloccare, in certe circostanze, il<br />

lavoro di questi «robot». Gli amministratori dei servizi HTTP hanno la possibilità di realizzare il<br />

file ‘/robots.txt’, contenente l’indicazione dei percorsi che non devono essere scanditi.<br />

Anche se si tratta di un compito che riguarda gli amministratori, è opportuno sapere leggere le<br />

istruzioni di questo file, nel caso esista, per sapere se il proprio documento può essere raggiunto<br />

o meno dai motori di ricerca e da altri servizi simili.<br />

Il file in questione, collocato all’inizio della gerarchia del servizio HTTP a cui si riferisce, è un<br />

file di testo normale, in cui si indicano dei commenti, preceduti dal simbolo ‘#’, e una serie di<br />

campi nella forma:<br />

campo: valore<br />

Le informazioni di questo file sono suddivise in base al nome del programma robot che si vuole<br />

filtrare:<br />

User-agent: nome<br />

Uno o più campi del genere, posti di seguito, iniziano la definizione del filtro riferito ai programmi<br />

rispettivi. Se al posto del nome si indica un asterisco, si intendono simultaneamente tutti i<br />

programmi che non siano stati presi in considerazione diversamente.<br />

Disallow: [percorso]


2902 Essere presenti su Internet<br />

Il campo ‘Disallow’ serve a specificare un percorso da escludere dalla scansione dei robot presi<br />

in considerazione. 1<br />

# http://www.brot.dg/robots.txt<br />

User-agent: *<br />

Disallow /tmp/<br />

Disallow /cgi-bin/<br />

Disallow /prova.html<br />

Supponendo che l’esempio si riferisca al file ‘http://www.brot.dg/robots.txt’, si mostra<br />

il caso in cui si vogliono escludere tutti i robot dal contenuto di ‘http://www.brot.dg/tmp/’,<br />

‘http://www.brot.dg/cgi-bin/’ e dal file ‘http://www.brot.dg/prova.html’.<br />

# http://www.brot.dg/robots.txt<br />

User-agent: *<br />

Disallow<br />

In questo caso non si esclude alcunché.<br />

# http://www.brot.dg/robots.txt<br />

User-agent: *<br />

Disallow /<br />

Questo nuovo esempio esclude l’accesso a tutto il servizio.<br />

266.2 Riferimenti<br />

• IMC Search Engine Submit Form<br />

<br />

• Search Engine Registration - Submit Your Site to the Top Search Engines - Free!<br />

<br />

• TheFreeSite.com<br />

<br />

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org<br />

1 Non è possibile indicare caratteri jolly: non avrebbero significato, dal momento che si intendono tutti i percorsi che<br />

iniziano come indicato e proseguono poi in qualunque modo.


Parte xlix<br />

XML<br />

267 XML: cenni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2904<br />

267.1 Differenze significative tra SGML e XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2904<br />

267.2 Convenzioni dell’XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2907<br />

267.3 Correttezza formale e validità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2908<br />

267.4 Verifica della validità con SP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2908<br />

267.5 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2909<br />

268 XHTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2910<br />

268.1 Caratteristiche generali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2910<br />

268.2 Scheletro di un file XHTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2910<br />

268.3 Verifica della validità di un file XHTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2911<br />

268.4 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2911<br />

2903


XML: cenni<br />

Capitolo 267<br />

XML è un linguaggio derivato dall’SGML, da intendersi come un sottoinsieme compatibile con<br />

questo; in particolare, il nome rappresenta l’acronimo di Extensible markup language. Il motivo<br />

per il quale è stata introdotta questa variante dell’SGML è dovuto all’esigenza di trovare un<br />

compromesso tra l’SGML originale e l’HTML, che è solo un’applicazione di SGML troppo limitata<br />

per la documentazione multimediale. In pratica, l’intento è stato ed è quello di semplificare<br />

leggermente l’SGML rendendo disponibili molte qualità dell’SGML che un’applicazione rigida<br />

come l’HTML non è in grado di offrire.<br />

In generale, un documento XML è un’applicazione di XML; nello stesso modo, l’HTML (come<br />

linguaggio) è un’applicazione SGML.<br />

È importante non illudersi: XML resta un sistema abbastanza complesso, anche se non quanto<br />

l’SGML tradizionale. Infatti, un documento realizzato in XML richiede la definizione di un<br />

DTD, esattamente come avveniva prima.<br />

267.1 Differenze significative tra SGML e XML<br />

L’SGML è già stato introdotto nel capitolo 249; in questo vengono affrontate solo le<br />

caratteristiche salienti di XML che lo distinguono sostanzialmente dal suo predecessore.<br />

267.1.1 Codifica<br />

La novità più importante di XML è l’utilizzo predefinito della codifica universale, prevalentemente<br />

attraverso la forma UTF-8 e UTF-16. Questo fatto ha delle implicazioni importanti, in<br />

quanto i riferimenti a macro del tipo ‘&n;’ e ‘&xn;’ si fanno ai punti di codifica dello standard<br />

ISO 10646 (nel primo caso il numero è espresso in decimale, mentre nel secondo si tratta di un<br />

numero esadecimale.<br />

XML non esclude a priori l’utilizzo di altri tipi di codifica; tuttavia, se non è possibile usare le<br />

codifiche UTF-n, per evitare ambiguità potrebbe essere conveniente limitarsi all’uso dell’ASCII<br />

tradizionale, dal momento che è perfettamente compatibile con la forma UTF-8. Eventualmente è<br />

possibile anche specificare il tipo di codifica attraverso un’istruzione apposita, che verrà mostrata<br />

in seguito.<br />

267.1.2 Commenti<br />

I commenti si indicano in linea di massima come in SGML, attraverso la forma:<br />

<br />

Come nell’SGML si deve evitare l’uso di due trattini in sequenza, ‘--’, ma in XML non è<br />

ammissibile il commento nullo nella forma ‘’.<br />

2904


XML: cenni 2905<br />

267.1.3 Marcatori ed elementi vuoti<br />

In XML, gli elementi devono essere aperti e chiusi correttamente attraverso i marcatori relativi;<br />

in pratica non è possibile più lasciare all’analizzatore XML il compito di determinare da solo la<br />

cosa in base al contesto. Questa limitazione è importante per facilitare il compito dei programmi<br />

che devono interpretare un documento XML e comunque si riflette positivamente nella struttura<br />

del sorgente del documento stesso.<br />

Gli elementi vuoti vanno indicati regolarmente con il marcatore di chiusura, oppure con un solo<br />

marcatore speciale, che ha la forma seguente:<br />

<br />

In pratica, alla fine del marcatore appare una barra obliqua prima del simbolo ‘>’.<br />

Di fatto, per problemi di compatibilità, si lascia uno spazio prima della barra finale. Per<br />

esempio: ‘’.<br />

L’assenza della possibilità di definire dei marcatori di apertura o di chiusura opzionali, fa sì che<br />

si semplifichi la dichiarazione di questi nel DTD:<br />

<br />

Nella figura 267.1 si vede un confronto tra la dichiarazione SGML e quella XML. Si vede<br />

chiaramente che in XML mancano le regole di minimizzazione.<br />

Tabella 265.2. S<strong>composizione</strong> delle varie parti della dichiarazione di un elemento<br />

SGML e XML.<br />

SGML:<br />

<br />

| | | ^^^ | |<br />

| | | | | delimitatore conclusivo<br />

| | nome | | dell’istruzione<br />

| | dell’elemento | |<br />

| | | modello del contenuto<br />

| dichiarazione |<br />

| di un elemento regole di minimizzazione<br />

|<br />

delimitatore di apertura dell’istruzione SGML<br />

XML:<br />

<br />

In XML, i nomi che si attribuiscono agli elementi e agli attributi sono sensibili alla differenza tra<br />

lettere maiuscole e minuscole; per esempio, l’elemento ‘testo’ è diverso dall’elemento ‘Testo’<br />

e da tutte le altre varianti possibili. Per la precisione, i nomi devono sottostare alle regole seguenti:<br />

• devono iniziare con una lettera alfabetica, oppure con un trattino basso (‘_’, ovvero #x5F),<br />

e possono contenere anche cifre numeriche, il punto, il trattino basso e il trattino normale<br />

(#x2D);<br />

• non possono contenere spazi;<br />

• potrebbero eventualmente contenere i due punti (‘:’), ma questa possibilità viene riservata<br />

per situazioni particolari;<br />

• non possono iniziare con la sigla ‘xml’, o con qualunque altra variazione delle lettere minuscole<br />

e maiuscole, dal momento che questi potrebbero avere in seguito dei significati<br />

speciali.


2906 XML: cenni<br />

267.1.4 Entità predefinite<br />

Alcune entità standard essenziali sono predefinite e teoricamente non è necessario specificarle<br />

nel DTD. Si tratta di ‘amp’, ‘lt’, ‘gt’, ‘apos’ e ‘quot’. Le macro relative sono ‘&amp;’, ‘&lt;’,<br />

‘&gt;’, ‘&apos;’ e ‘&quot;’.<br />

Si può osservare questo particolare nella dichiarazione SGML di XML:<br />

...<br />

SYNTAX<br />

...<br />

ENTITIES<br />

"amp" 38<br />

"lt" 60<br />

"gt" 62<br />

"quot" 34<br />

"apos" 39<br />

...<br />

267.1.5 Entità parametriche<br />

In XML, le entità parametriche possono essere utilizzate solo all’interno del DTD. Da ciò consegue<br />

logicamente che le sezioni marcate con le quali si può includere o escludere del testo in base<br />

al contenuto di un’entità parametrica, possono esistere solo nel DTD.<br />

<br />

<br />

<br />

]]><br />

<br />

]]><br />

L’esempio mostra un pezzo di un DTD ipotetico, in cui vengono dichiarate due entità parametriche,<br />

‘bozza’ e ‘finale’. In questo caso, la macro ‘%bozza;’ si traduce nella parola ‘INCLUDE’,<br />

mentre la macro ‘%finale;’ si traduce nella parola ‘IGNORE’. In questo modo, viene dichiarato<br />

l’elemento ‘libro’ nella prima modalità: quella che ammette la presenza dell’elemento<br />

‘commento’.<br />

267.1.6 Altre sezioni marcate<br />

XML ammette l’uso di un’altra sezione marcata soltanto, la sezione ‘CDATA’ per delimitare del<br />

testo letterale.<br />

serve per...]]><br />

L’esempio mostra in che modo sia possibile utilizzare letteralmente i simboli ‘’ in una<br />

sezione ‘CDATA’.<br />

267.1.7 Istruzioni di elaborazione<br />

Le istruzioni di elaborazione sono una novità in XML. Servono in qualche modo per passare<br />

delle informazioni alle applicazioni. Si distinguono per avere la forma seguente:<br />


XML: cenni 2907<br />

Il testo che compone l’istruzione dipende dall’applicazione a cui è diretto. È importante tenere<br />

presente che tutto ciò che inizia con la stringa ‘xml’, assieme a tutte le sue variazioni di lettere<br />

maiuscole e minuscole, è riservato.<br />

In generale, in base al significato che può avere l’istruzione di elaborazione, queste possono<br />

trovarsi in qualunque parte del sorgente XML.<br />

Normalmente si inizia sempre un sorgente XML con un’istruzione di elaborazione che dichiara<br />

la versione di XML a cui si fa riferimento, assieme alla codifica utilizzata:<br />

<br />

267.2 Convenzioni dell’XML<br />

Nella descrizione delle differenze tra XML e SGML sono già state presentate alcune convenzioni<br />

di XML che non sono esprimibili nella dichiarazione SGML relativa. In pratica, si tratta di regole<br />

che vanno tenute in considerazione quando si scrive un DTD per un documento XML. Vale la<br />

pena di raccogliere le convenzioni più importanti.<br />

• I nomi di elementi e degli attributi che iniziano per ‘xml’, con qualsiasi altra variante delle<br />

lettere maiuscole e minuscole, sono riservati.<br />

• Gli elementi che ne possono avere bisogno, devono poter disporre di un attributo denominato<br />

‘xml:space’, a cui possano essere assegnate le parole chiave ‘default’ o ‘preserve’.<br />

Il suo scopo è quello di definire il comportamento nei confronti degli spazi (di tutti i caratteri<br />

assimilabili a questo concetto). Assegnando la parola chiave ‘default’ si intende lasciare<br />

che gli spazi vengano gestiti come al solito, eliminando quelli superflui; con la parola chiave<br />

‘preserve’ si vuole richiedere di mantenere gli spazi come sono. La dichiarazione di<br />

questo attributo può avvenire nel DTD come nell’esempio seguente:<br />

<br />

In particolare, un elemento che per sua natura deve rispettare le spaziature originali, potrebbe<br />

essere definito nel modo seguente, dove si vede il caso dell’elemento ‘pre’ di<br />

XHTML:<br />

<br />

<br />

• Gli elementi che ne possono avere bisogno, devono poter disporre di un attributo denominato<br />

‘xml:lang’, a cui poter assegnare un codice identificativo del linguaggio contenuto.<br />

Si prevede l’uso di diversi tipi di codice:<br />

– un codice di linguaggio composto da due lettere, secondo lo standard ISO 639 (sezione<br />

543);<br />

– un codice di linguaggio registrato dall’autorità IANA (Internet assigned numbers<br />

authority), a cui va aggiunto comunque il prefisso ‘i-’, oppure ‘I-’;<br />

– un codice stabilito dall’utente o concordato tra le parti, a cui va aggiunto il prefisso<br />

‘x-’, oppure ‘X-’.<br />

La dichiarazione di questo attributo può avvenire nel DTD come nell’esempio seguente:<br />

<br />

Eventualmente si può anche specificare un linguaggio predefinito, come si vede<br />

nell’esempio seguente:<br />


2908 XML: cenni<br />

267.3 Correttezza formale e validità<br />

Possono esistere due livelli di approccio all’XML da parte dei programmi che lo utilizzano: il<br />

primo si limita a leggere il documento senza sapere nulla della sua struttura stabilita nel DTD;<br />

il secondo invece richiede la conoscenza di questa struttura. Nel primo caso è sufficiente che il<br />

documento XML sia stato scritto correttamente dal punto di vista formale, in senso generale; in<br />

questo modo si parla di well formed document. Nel secondo caso è importante che il documento,<br />

oltre che essere corretto dal punto di vista formale, sia anche valido in base alla definizione<br />

stabilita nel DTD.<br />

Il documento XML corretto dal punto di vista formale, ha le caratteristiche seguenti:<br />

• contiene un elemento principale unico, all’interno del quale vanno collocati tutti gli altri (si<br />

parla comunemente dell’elemento root);<br />

• tutti i marcatori degli elementi devono essere indicati in modo corretto, attraverso degli<br />

annidamenti ordinati;<br />

• tutti gli elementi devono essere delimitati correttamente, senza saltare dei marcatori, inoltre<br />

gli elementi vuoti vanno chiusi oppure vanno indicati con il marcatore speciale già<br />

mostrato;<br />

• devono essere rispettate le regole stabilite per i nomi degli elementi;<br />

• i valori associati agli attributi vanno delimitati sempre attraverso apici doppi oppure apici<br />

singoli;<br />

Il documento XML valido, oltre a essere corretto formalmente, deve anche essere conforme al<br />

DTD. Come nell’SGML normale, il DTD può essere indicato attraverso un riferimento, oppure<br />

può essere incorporato all’inizio del documento.<br />

267.4 Verifica della validità con SP<br />

Il pacchetto SP di James Clark può essere utilizzato anche per convalidare un documento XML, a<br />

partire dal suo DTD. Il procedimento è analogo a quanto già mostrato nel capitolo 250. Tuttavia,<br />

è necessario procurarsi la dichiarazione XML, che si può trovare nell’archivio dei sorgenti di SP<br />

stesso: ‘pubtext/xml.dcl’.<br />

Supponendo di disporre del file ‘xml.dcl’ nella directory corrente, si può realizzare un catalogo<br />

molto semplice come quello seguente:<br />

SGMLDECL "xml.dcl"<br />

Naturalmente, nel catalogo si possono aggiungere anche altre cose, in base alla necessità o meno<br />

di indicare il DTD e le entità generali. Per verificare il funzionamento della cosa, si può provare a<br />

eseguire la convalida dell’esempio seguente, che include il DTD nel preambolo e non ha bisogno<br />

di entità generali:<br />

<br />

<br />

Ciao a tutti!<br />

Si può osservare che si tratta di un documento elementare, in cui esiste solo l’elemento principale,<br />

denominato ‘esempio’.


XML: cenni 2909<br />

Per la convalida, si può usare l’eseguibile ‘nsgmls’ nel modo seguente:<br />

$ nsgmls -c catalogo.xml -s esempio.xml<br />

Qui si sottintende che il file del catalogo sia ‘catalogo.xml’ e che il sorgente XML sia contenuto<br />

nel file ‘esempio.xml’. Se oltre alla convalida si vuole avere il risultato pre-elaborato, si<br />

toglie l’opzione ‘-s’, ottenendo quanto segue:<br />

?xml version="1.0" encoding="ISO-8859-1"<br />

(esempio<br />

-Ciao a tutti!<br />

)esempio<br />

C<br />

267.5 Riferimenti<br />

• W3C, Extensible Markup Language (XML) 1.0<br />

<br />

• James Clark, Comparison of SGML and XML<br />

<br />

• XML Frequently Asked Questions<br />

<br />

• Norman Walsh, A Technical Introduction to XML<br />

<br />

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org


XHTML<br />

Capitolo 268<br />

XHTML è una rivisitazione dell’HTML in forma di applicazione XML. Allo stato attuale,<br />

XHTML 1.0 è progettato in modo da essere molto simile all’HTML 4. ; ciò dovrebbe permettere<br />

anche ai programmi di navigazione che non conoscono l’XML di poterlo interpretare<br />

*<br />

correttamente. Evidentemente, XHTML è proprio la premessa all’introduzione pratica dell’XML<br />

nella documentazione in rete.<br />

268.1 Caratteristiche generali<br />

Come accennato, XHTML è qualcosa di molto simile all’HTML tradizionale, con alcune<br />

differenze importanti, dovute all’XML e alle scelte progettuali di questo formato. In particolare:<br />

• gli elementi devono essere delimitati correttamente con i marcatori di apertura e chiusura;<br />

• non ci possono più essere elementi vuoti indicati con il solo marcatore di apertura, dal<br />

momento che al loro posto si possono solo usare i marcatori speciali nella forma ‘’; 1<br />

• i nomi degli elementi e degli attributi vanno scritti utilizzando solo lettere minuscole;<br />

• gli attributi devono essere assegnati correttamente (non si possono usare più degli attributi<br />

booleani) e il valore assegnato deve essere delimitato da apici doppi o singoli;<br />

• l’attributo ‘lang’, se utilizzato, deve essere abbinato anche all’attributo ‘xml:lang’, in<br />

base alle convenzioni dell’XML;<br />

• se non si può evitare l’uso dell’attributo ‘name’, questo deve essere abbinato anche<br />

all’attributo ‘id’;<br />

• se il valore assegnato a un attributo deve contenere una e-commerciale (‘&’), <strong>occorre</strong><br />

indicarla nella forma ‘&amp;’, anche se si tratta di un URI;<br />

• se il valore assegnato a un attributo deve contenere una e-commerciale (‘&’), <strong>occorre</strong><br />

indicarla nella forma ‘&amp;’, anche quando si tratta di un URI;<br />

• se per qualche ragione non si dichiara la codifica utilizzata, deve trattarsi della forma UTF-8<br />

oppure UTF-16;<br />

• l’elemento ‘isindex’ è obsoleto e si preferisce usare l’elemento ‘input’.<br />

268.2 Scheletro di un file XHTML<br />

Trattandosi di un’applicazione XML, l’inizio dovrebbe essere scontato: si deve specificare che si<br />

tratta di un file XML, quindi si passa a indicare il DTD a cui si fa riferimento:<br />

<br />

<br />

<br />

<br />

Esempio XHTML<br />

<br />

<br />

1 Per motivi di compatibilità con i vecchi navigatori, i marcatori di questo genere vanno indicati avendo l’accortezza<br />

di lasciare uno spazio prima della barra finale; per esempio: ‘’.<br />

2910


XHTML 2911<br />

<br />

Ciao mondo!<br />

<br />

<br />

L’esempio mostra un file XHTML completo, anche se molto breve. Si può osservare che il marcatore<br />

di apertura, oltre agli attributi ‘xml:lang’ e ‘lang’, contiene l’attributo ‘xmlns’, a cui<br />

viene assegnato un URI prestabilito.<br />

In XML, l’insieme di caratteri codificato è quello della codifica universale. Di conseguenza,<br />

per la migliore compatibilità con il passato, la forma codificata del carattere predefinita è UTF-<br />

8. Se il file utilizza l’ASCII tradizionale, senza estensioni, tutto va bene e non <strong>occorre</strong> altro;<br />

diversamente vanno usate preferibilmente le codifiche UTF-8 oppure UTF-16, come prevede in<br />

generale l’XML. L’esempio seguente mostra in che modo va modificata l’istruzione iniziale per<br />

indicare espressamente la codifica:<br />

<br />

268.3 Verifica della validità di un file XHTML<br />

Volendo verificare la validità di un file XHTML attraverso il suo DTD, si può agire in modo<br />

simile a quanto si fa in generale con l’SGML. Questo è già stato descritto nel capitolo 250;<br />

tuttavia <strong>occorre</strong> ricordare che la definizione SGML da utilizzare è quella specifica per l’XML.<br />

Il DTD di XHTML, assieme alla definizione delle entità standard, possono essere ottenuti a partire<br />

da ‘http://www.w3.org/TR/xhtml1/DTD/’ (ma probabilmente la directory non è leggibile),<br />

mentre la dichiarazione SGML si può trovare tra i sorgenti del pacchetto SP di James Clark.<br />

Si veda a questo proposito quanto già descritto nel capitolo 267.<br />

268.4 Riferimenti<br />

• W3C, XHTML 1.0: The Extensible HyperText Markup Language<br />

<br />

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org


2912 XHTML


Parte l<br />

Controllo dell’ortografia e dello<br />

stile<br />

269 Analisi lessicale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2914<br />

269.1 Ispell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2914<br />

270 Analisi sintattica e stilistica con Textchk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2921<br />

270.1 Principio di funzionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2921<br />

270.2 Configurazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2922<br />

270.3 Come si usa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2925<br />

270.4 Come si installa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2926<br />

270.5 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2927<br />

2913


Analisi lessicale<br />

Capitolo 269<br />

Gli errori che si possono fare scrivendo un testo sono di vario tipo, ma quelli puramente lessicali,<br />

ovvero ciò che potrebbe essere classificato come errore di battitura, rappresentano i meno<br />

importanti. Tuttavia, si tratta pur sempre di una buona percentuale nell’insieme globale di errori<br />

che può contenere un testo.<br />

Un programma banale che sia in grado di mostrare le parole che risultano semplicemente<br />

sconosciute, è già un buon aiuto verso l’obiettivo dello scrivere in modo corretto.<br />

Un programma di analisi lessicale è utile quando si può gestire un dizionario personale, perché<br />

non si possono escludere le eccezioni da un testo: il nome o il cognome di una persona, un indirizzo,<br />

una sigla particolare,... In presenza di documenti di grandi dimensioni, diventa necessario<br />

gestire un dizionario specifico per ognuno di questi, in modo da non interferire con l’analisi di<br />

altri in cui certi termini, ammissibili da una parte, non possono esistere dall’altra.<br />

269.1 Ispell<br />

Ispell è un programma di scansione lessicale che permette la realizzazione di dizionari contenenti<br />

anche indicazioni sulle possibili aggregazioni di parole (si pensi alla lingua tedesca in cui le<br />

parole sono generate spesso dall’unione di altre).<br />

Lo studio di questa caratteristica di Ispell riguarda chi vuole realizzare un dizionario standard per<br />

un linguaggio particolare: generico o specifico di un certo settore. Qui si intende mostrare un uso<br />

semplificato di questo programma, in cui si utilizzano dizionari standard e si generano i propri<br />

dizionari personali specifici per ciò che si fa.<br />

269.1.1 Dizionari<br />

Generalmente, il pacchetto di distribuzione di Ispell contiene un dizionario standard per la lingua<br />

inglese. Dovrebbe trattarsi del file ‘/usr/lib/ispell/english.hash’. Nella stessa directory<br />

vanno collocati altri file per altre lingue, o per linguaggi specifici. Questi file, terminanti con l’estensione<br />

‘.hash’, sono ottenuti a partire da una coppia di file di testo, attraverso la compilazione<br />

con ‘buildhash’, ogni volta che si cambia piattaforma.<br />

È disponibile un pacchetto contenente un dizionario generico per la lingua italiana. Lo si dovrebbe<br />

trovare presso e si tratta di un file denominato secondo<br />

il modello ‘italiano-versione.tgz’.<br />

Il dizionario italiano si compone di due file sorgenti: ‘italiano.aff’ e ‘italiano.sml’. Il<br />

primo dei due contiene la tabella affix, che in pratica rappresenta una serie di regole sull’insieme<br />

dei caratteri ammissibili e sulla possibile unione di parti di parole, mentre il secondo è l’elenco<br />

di parole vero e proprio. Queste parole elencate, contengono a volte dei riferimenti aggiuntivi<br />

indicati dopo una barra obliqua (‘/’) che hanno valore in base alle definizioni della tabella affix.<br />

L’approfondimento sulla sintassi del file affix è utile solo se si vuole realizzare un dizionario hash<br />

specifico, mentre l’utilizzatore normale può ignorare questo problema. La compilazione dei file<br />

sorgenti in modo da ottenere un dizionario hash si ottiene con il comando seguente:<br />

$ buildhash italiano.sml italiano.aff italiano.hash<br />

Si otterrà il file ‘italiano.hash’, da collocare nella directory ‘/usr/lib/ispell/’. Se si<br />

intende utilizzare sistematicamente questo dizionario, si può predisporre la variabile di ambiente<br />

‘DICTIONARY’, assegnandovi il nome del file: ‘italiano.hash’. In alternativa, si può usare<br />

2914


Analisi lessicale 2915<br />

‘ispell’ con l’opzione ‘-d’, come nell’esempio seguente (l’estensione ‘.hash’ è predefinita e<br />

può essere omessa).<br />

$ ispell -d italiano documento.txt<br />

I dizionari personali sono invece una cosa diversa: si tratta di un elenco di termini, scritto con le<br />

stesse modalità di un sorgente, senza un file affix a fianco (o meglio, utilizzando quello del dizionario<br />

hash a cui si fa riferimento). Normalmente, tali file personali sono aggiornati da Ispell,<br />

quando questo viene usato in modo interattivo. Il nome predefinito del dizionario personale è ‘~/<br />

.ispell_linguaggio ’. Per esempio, se si utilizza il dizionario standard predefinito, viene generato<br />

e utilizzato il file ‘~/.ispell_english’ (nella directory personale), a meno di specificare<br />

un nome diverso con le opzioni.<br />

In aggiunta ai file personali ci possono essere dei file più specifici, legati alla directory corrente:<br />

‘./.ispell_linguaggio ’. Inoltre, in mancanza dell’indicazione del linguaggio, i dizionari<br />

personali e quelli specifici hanno i nomi: ‘~/.ispell_default’ e ‘./.ispell_default’.<br />

269.1.2 Avvio e opzioni fondamentali<br />

ispell [opzioni] file_da_analizzare<br />

Quella che si vede rappresenta una semplificazione estrema della sintassi dell’eseguibile<br />

‘ispell’, però, prima di apprendere il funzionamento delle particolarità di questo programma,<br />

è meglio comprendere le sue possibilità fondamentali.<br />

Ispell può funzionare in modo interattivo, oppure no. In teoria, è possibile anche realizzare un<br />

programma che sfrutti le funzionalità di Ispell attraverso una pipeline; in pratica, si tratta in<br />

questo caso dell’utilizzo meno importante che si può fare di Ispell.<br />

Alcune opzioni<br />

-d dizionario_hash<br />

Permette di specificare un file dizionario differente da quello predefinito (che di solito è<br />

‘english.hash’). Il nome del file viene indicato generalmente senza estensione e senza<br />

percorso, facendo implicitamente riferimento alla directory ‘/usr/lib/ispell/’ e a file<br />

con estensione ‘.hash’.<br />

-p dizionario_personale<br />

Permette di specificare un dizionario personale differente da quello predefinito (che di solito<br />

è ‘~/.ispell_...’).<br />

-W n_caratteri<br />

Specifica la lunghezza delle parole che non devono essere prese in considerazione. In<br />

pratica, da quel numero di caratteri in giù, si considerano tutte valide.<br />

-x<br />

Evita la creazione di una copia di sicurezza. Senza indicare questa opzione, dovrebbe essere<br />

salvata una copia del file originale aggiungendo al suo nome l’estensione ‘.bak’.<br />

-b<br />

Si tratta dell’opzione opposta a ‘-x’, in quanto permette di forzare la richiesta di creazione<br />

di una copia di sicurezza.<br />

-t<br />

Fa in modo che il testo da analizzare sia considerato un sorgente TeX, o LaTeX, per il quale<br />

si devono ignorare i codici di formattazione e possibilmente anche alcune indicazioni che


2916 Analisi lessicale<br />

sono solo funzionali a TeX, dal momento che non riguardano il contenuto del testo. Questa<br />

dovrebbe essere la modalità predefinita di funzionamento.<br />

In generale, questa modalità va bene anche per il testo puro e semplice, purché non ci siano<br />

barre oblique inverse che possano essere confuse con comandi di TeX.<br />

-n<br />

Fa in modo che il testo da analizzare sia considerato un sorgente Nroff o Troff, per il quale<br />

si devono ignorare i codici di formattazione. 1<br />

269.1.3 Funzionamento interattivo<br />

Il funzionamento normale di Ispell è interattivo. Generalmente viene fatta una copia di sicurezza<br />

del file analizzato, con un nome che termina con l’aggiunta dell’estensione ‘.bak’, quindi Ispell<br />

permette di modificare il contenuto del file originale, in base alle scelte dell’utente.<br />

Figura 269.1. Funzionamento interattivo di Ispell.<br />

stai<br />

File: lettera<br />

Ciao come stai?<br />

00: stab 09: st-AI<br />

01: stag<br />

02: staid<br />

03: stain<br />

04: stair<br />

05: Stan<br />

06: star<br />

07: stay<br />

08: st AI<br />

[SP] R)epl A)ccept I)nsert L)ookup U)ncap Q)uit e(X)it or ? for help<br />

La figura 269.1 mostra il caso di un file, denominato ‘lettera’, che contiene una frase normalissima,<br />

in cui la parola «stai» non viene riconosciuta. In effetti, si suppone di avere utilizzato il<br />

dizionario hash predefinito, ovvero quello inglese.<br />

La parola ‘stai’ viene evidenziata se le caratteristiche del terminale lo consentono; in ogni caso,<br />

viene indicata a parte, all’inizio (come si vede dall’esempio). Se possibile, Ispell elenca una<br />

serie di alternative possibili, in base alle affinità che può avere il termine sconosciuto con altre<br />

parole contenute nel dizionario. Questo elenco è numerato, in modo da permetterne la selezione.<br />

Nella parte bassa dello schermo appare un menù riepilogativo degli altri comandi a disposizione;<br />

comandi che si richiamano prevalentemente con la semplice pressione di tasti o combinazioni di<br />

tasti mnemonici.<br />

Alcuni comandi<br />

[ Spazio ]<br />

Fa in modo che Ispell accetti la parola temporaneamente. Se ne troverà ancora, Ispell le<br />

segnalerà nuovamente.<br />

[ R ] | [ r ]<br />

Richiede la sostituzione della parola errata con un’altra che deve essere inserita subito dopo.<br />

Se anche la nuova parola non sembra valida, questa viene segnalata ugualmente da<br />

1 La possibilità di distinguere i codici di formattazione di TeX, *roff, o altro, dipende anche dal file affix del dizionario<br />

utilizzato.


Analisi lessicale 2917<br />

Ispell. La sostituzione riguarda solo quell’<strong>occorre</strong>nza particolare; se verrà ritrovato ancora<br />

lo stesso errore, Ispell continuerà a segnalarlo.<br />

[ A ] | [ a ]<br />

Fa sì che Ispell ignori la parola per tutto il resto del documento.<br />

[ I ] | [ i ]<br />

Fa sì che Ispell accetti la parola e la inserisca nel dizionario personale, esattamente com’è,<br />

rispettando maiuscole e minuscole.<br />

[ U ] | [ u ]<br />

Fa sì che Ispell accetti la parola e la inserisca nel dizionario personale, senza distinguere tra<br />

maiuscole e minuscole.<br />

[ 0 ] | [ 1 ] | ... | [ 0 ][ 0 ] | [ 0 ][ 1 ] | ...<br />

La selezione di un numero fa riferimento alle voci proposte come parole alternative a quella<br />

errata. Con questa selezione di intende ottenere la sostituzione delle parole. È importante<br />

osservare che, se l’elenco supera le nove unità, la selezione avviene con due cifre numeriche.<br />

L’esempio che appare nella figura mostra questo caso: per indicare la parola ‘stag’,<br />

<strong>occorre</strong> la sequenza [ 0 ][ 1 ].<br />

[ X ] | [ x ]<br />

Conclude il lavoro completando la scrittura del file e ignorando altri errori eventuali. Chiude<br />

anche il file del dizionario personale, mantenendo le voci aggiunte fino a quel punto.<br />

[ Q ] | [ q ]<br />

Termina immediatamente, lasciando inalterato il file, senza conservare i termini<br />

eventualmente annotati per l’aggiunta nel dizionario personale.<br />

[ Ctrl+l ] | [ Ctrl+L ]<br />

Ripulisce lo schermo.<br />

Alcune opzioni<br />

Per quanto riguarda il funzionamento interattivo di Ispell, sono importanti due opzioni.<br />

-M<br />

Richiede espressamente la visualizzazione del menù riassuntivo dei comandi interattivi. Di<br />

solito, tale menù appare in modo predefinito, a meno di avere compilato Ispell con opzioni<br />

particolari.<br />

-N<br />

Fa in modo che il menù riepilogativo dei comandi non venga visualizzato.<br />

Alcuni esempi<br />

$ ispell -d italiano lettera<br />

Analizza il file ‘lettera’ utilizzando il dizionario hash ‘italiano’, ovvero, il file ‘/usr/<br />

lib/ispell/italiano.hash’.<br />

$ ispell -d italiano -p mio lettera<br />

Come nell’esempio precedente, ma in questo caso si utilizza il dizionario personale rappresentato<br />

dal file ‘./mio’. Nell’esempio precedente, si faceva riferimento al dizionario<br />

personale predefinito: ‘~/.ispell_italiano’.


2918 Analisi lessicale<br />

269.1.4 Funzionamento non interattivo<br />

Quando Ispell funziona in modo non interattivo, si limita a generare un elenco di termini, anche<br />

ripetuti, che risultano sconosciuti in base al dizionario. Ispell può anche essere utilizzato<br />

attraverso un altro programma, quando si indica l’opzione ‘-a’, ma si tratta di un modo un po’<br />

complicato, che qui non viene descritto.<br />

Per ottenere l’elenco dei termini sconosciuti, si utilizza l’opzione ‘-l’. Per esempio, questa<br />

possibilità di Ispell può essere sfruttata per produrre rapidamente un dizionario personale.<br />

Se si dispone di un testo della cui esattezza si è certi, si può ottenere da Ispell l’elenco dei termini<br />

da lui sconosciuti, generando poi un dizionario personale con tutte queste eccezioni. Si procede<br />

nel modo seguente:<br />

$ ispell -d italiano -l < romanzo > mio_dizionario<br />

In questo modo, tutti i termini contenuti nel file ‘./romanzo’ che non risultano dal dizionario<br />

hash ‘italiano’, vengono emessi attraverso lo standard output e diretti nel file ‘./<br />

mio_dizionario’.<br />

$ sort -f < mio_dizionario > dizionario1<br />

In questo modo si riordina l’elenco di parole ottenuto, generando il file ‘./dizionario1’, dove<br />

l’opzione ‘-f’ serve a non distinguere tra lettere minuscole e maiuscole, anche se restano i doppioni.<br />

Con questo elenco si vuole generare un dizionario personale, eliminando questi doppioni<br />

ed eventualmente generando altre semplificazioni.<br />

$ munchlist -s italiano -l italiano.aff dizionario1 > dizionario2<br />

In questo modo, si ottiene il compattamento del file ‘./dizionario1’, in base a quanto già<br />

contenuto del dizionario hash ‘italiano’ e secondo le regole del file affix ‘./italiano.aff’,<br />

generando il file ‘./dizionario2’, che finalmente può essere utilizzato come dizionario<br />

personale.<br />

In alternativa, si può anche tentare di dare in pasto a Ispell il file senza ottenuto dopo<br />

l’ordinamento, senza filtrarlo attraverso ‘munchlist’. Sarà Ispell stesso che eliminerà i<br />

doppioni.<br />

269.1.5 Programmi di servizio di contorno a Ispell<br />

Ispell si compone di diversi file binari. Il più importante è ‘ispell’, come si è visto, ma altri<br />

sono necessari per la gestione dei file di dizionario. Si è già accennato a ‘buildhash’ e a<br />

‘munchlist’, il cui utilizzo è il caso di riepilogare.<br />

buildhash dizionario_sorgente file_affix dizionario_hash<br />

munchlist [-l file_affix] [-s dizionario_hash] [elenco_da_ridurre] > elenco_ridotto<br />

Quelle mostrate sono le sintassi semplificate di questi due programmi. Di più può essere appreso<br />

dalla lettura di ispell(1).<br />

Alcuni esempi<br />

$ munchlist mio_dizionario > dizionario<br />

Utilizza il dizionario hash e il file affix standard per ridurre l’elenco contenuto nel file ‘./<br />

mio_dizionario’, generando il file ‘./dizionario’.


Analisi lessicale 2919<br />

$ munchlist -s italiano -l ./italiano.aff mio_dizionario > dizionario<br />

Utilizza il dizionario hash ‘italiano’ (‘/usr/lib/ispell/italiano.hash’) e il file<br />

affix ‘./italiano.aff’ per ridurre l’elenco contenuto nel file ‘./mio_dizionario’,<br />

generando il file ‘./dizionario’.<br />

$ buildhash italiano.sml italiano.aff italiano.hash<br />

Genera il dizionario hash ‘./italiano.hash’, a partire dall’elenco ‘./italiano.sml’<br />

e dal file affix ‘./italian.aff’.<br />

269.1.6 Gestione dei dizionari personali<br />

L’utilizzo occasionale di Ispell richiede la presenza di un dizionario hash e probabilmente di uno<br />

personale predefinito, che quasi sicuramente sarà ‘~/.ispell_italiano’. Ma la correzione<br />

ortografica basata esclusivamente su un dizionario è tanto più efficace quanto minore è il numero<br />

delle parole previste, ovvero, quanto più specifico è il dizionario utilizzato.<br />

Di fronte alla realizzazione di un documento di un certo impegno, o di una serie di documenti<br />

che trattano dello stesso genere di cose, potrebbe essere conveniente utilizzare un dizionario<br />

personale specifico per quel progetto, eventualmente partendo da un dizionario hash praticamente<br />

vuoto. 2<br />

Per realizzare un dizionario «vuoto», adatto a qualunque linguaggio che utilizzi la codifica ISO<br />

8859-1, si potrebbe partire dal file affix che contiene solo le righe seguenti, il cui unico scopo è<br />

quello di ammettere l’uso di tutte le lettere accentate e speciali. 3<br />

# minimo.aff<br />

# Accetta qualunque carattere accentato e speciale di ISO 8859-1<br />

wordchars [a-z] [A-Z]<br />

wordchars [à-\376] [À-\336]<br />

wordchars [\337]<br />

wordchars [\377]<br />

prefixes<br />

suffixes<br />

Le parole chiave ‘prefixes’ e ‘suffixes’ sono obbligatorie, ma il file è ancora incompleto<br />

(viene segnalato dai programmi come ‘buildhash’ e ‘munchlist’), anche se funziona<br />

ugualmente per lo scopo che ci si prefigge qui.<br />

Volendo esagerare, se le cifre numeriche possono avere un ruolo nella <strong>composizione</strong> delle parole<br />

che si vogliono controllare, si può aggiungere anche la riga seguente, tenendo conto che però poi<br />

‘munchlist’ non funziona tanto bene. 4<br />

wordchars [0-9]<br />

A fianco di questo si deve creare un elenco di parole che ne contenga almeno una, come<br />

nell’esempio seguente:<br />

Linux<br />

2 Quando si ha a che fare con documentazione tecnica, in cui l’uso di termini in inglese è frequente, si potrebbe<br />

addirittura valutare la possibilità di basare l’analisi sul dizionario standard (‘english.hash’), affiancando il dizionario<br />

personale specifico per il documento, solo che in tal caso si avrebbero difficoltà con le lettere accentate, dal momento che<br />

queste non sono previste nel file affix inglese.<br />

3 Le lettere ‘ÿ’ e ‘ß’, corrispondenti ai codici ‘\377’ e ‘\337’, sono minuscole e non hanno un equivalente maiuscolo<br />

nella codifica ISO 8859-1.<br />

4 In pratica, ‘munchlist’ elimina queste parole ritenute estranee. Se si dispone di un elaboratore ben equipaggiato, si<br />

può dare in pasto a Ispell il file ottenuto dopo il riordino; sarà poi lui a eliminare i doppioni.


2920 Analisi lessicale<br />

Si suppone che il file affix sia stato nominato ‘minimo.aff’ e che l’elenco sia ‘minimo.sml’.<br />

Per creare il file hash, si procede come è già stato presentato più volte.<br />

$ buildhash minimo.sml minimo.aff minimo.hash<br />

Pur con una segnalazione di errore, dovuta all’estrema semplicità del file affix, si ottiene il file<br />

‘minimo.hash’ nella directory corrente. Questo file hash può essere usato solo per testi normali,<br />

senza codici di formattazione di alcun tipo, dal momento che il file affix mostrato non è stato<br />

predisposto per questo.<br />

Se si dispone di un documento ritenuto sicuro, si può generare il dizionario personale relativo.<br />

$ ispell -d ./minimo.hash -l < documento.txt > elenco<br />

In questo modo si ottiene l’elenco delle parole usate nel file ‘documento.txt’, che sono<br />

praticamente tutte sconosciute. Questo elenco deve essere riordinato e ridotto.<br />

$ sort -f < elenco > elenco1<br />

$ munchlist -l minimo.aff -s minimo.hash elenco1 > dizionario<br />

Dopo la riduzione si ottiene finalmente il dizionario personale specifico del documento; successivamente<br />

si potranno eseguire le verifiche sullo stesso documento di origine (a seguito di aggiunte<br />

o di modifiche), con il comando seguente:<br />

$ ispell -d ./minimo.hash -p ./dizionario documento.txt<br />

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org


Analisi sintattica e stilistica con Textchk<br />

Capitolo 270<br />

L’analisi sintattica di un testo è un problema ben più complicato della semplice verifica delle<br />

parole con un dizionario. Esistono però alcuni tipi di errori sintattici, o stilistici, che si possono<br />

identificare con l’aiuto di espressioni regolari (regular expression).<br />

La lingua italiana consente spesso l’utilizzo di forme espressive differenti, per le quali dovrebbe<br />

esserci almeno uniformità all’interno di uno stesso documento. Per esempio, <strong>occorre</strong> decidere se<br />

si vuole scrivere: «una aula» oppure «un’aula», «ed anche» oppure «e anche»,...<br />

In questo capitolo si vuole mostrare un programma Perl che può aiutare a definire delle regole<br />

rappresentate in forma di espressioni regolari, per segnalare degli errori sintattici o stilistici. Con<br />

questo programma è possibile indicare anche delle regole di eccezione e delle particolarità riferite<br />

a un solo documento. Il programma in questione è Textchk, 1 che è derivato dagli strumenti<br />

preparati originariamente per la <strong>composizione</strong> di questo documento (ALtools e Alml).<br />

Textchk dovrebbe trovarsi assieme alla distribuzione di questa opera; tuttavia, il suo riferimento<br />

principale è .<br />

270.1 Principio di funzionamento<br />

Textchk scandisce un file di partenza generando un altro file contenente le parti di testo che<br />

risulterebbero errate (oltre a un file diagnostico contenente la registrazione del procedimento<br />

di verifica). Prima di iniziare a leggere il file da esaminare, vengono caricati dei modelli che<br />

esprimono degli errori, espressi in forma di espressione regolare, seguiti eventualmente da dei<br />

modelli di eccezione. Infine, vengono caricate anche delle particolarità riferite al testo che si<br />

elabora, trattate in forma letterale e non più secondo il modello di un’espressione regolare.<br />

Figura 270.1. Schema di funzionamento di Textchk.<br />

.------------------. .-------------.<br />

| regexp | | brani |<br />

| errori+eccezioni | | particolari |<br />

‘------------------’ ‘-------------’<br />

| |<br />

‘------. .----------’<br />

| |<br />

V V<br />

.-----------. .-----------------. .---------.<br />

| documento | | | | errori |<br />

| da |------>| Textchk |---------------->| trovati |<br />

| esaminare | | | ‘---------’<br />

‘-----------’ ‘-----------------’<br />

|<br />

| .-------------.<br />

‘------------>| registro |<br />

| diagnostico |<br />

‘-------------’<br />

Gli errori che si possono ricercare attraverso delle espressioni regolari, riguardano la vicinanza<br />

di parole che hanno caratteristiche determinate, come l’uso o meno di articoli apostrofati. Sotto<br />

questo aspetto, diventa importante che, nel file di testo originale, ogni paragrafo si trovi su una<br />

sola riga, cioè non sia interrotto su più righe.<br />

A fianco di questo problema, si aggiunge il fatto che il file sorgente che si vuole esaminare<br />

potrebbe contenere dei codici di controllo, come nel caso di TeX (o LaTeX) e di HTML. In tutte<br />

queste situazioni, prima di passare all’analisi vera e propria, <strong>occorre</strong> ripulire e riadattare il testo,<br />

in modo da avere a che fare con un file di testo puro, in cui ogni paragrafo si trovi su una sola<br />

1 Textchk GNU GPL<br />

2921


2922 Analisi sintattica e stilistica con Textchk<br />

riga. Al limite, può essere sufficiente che ogni periodo, cioè ogni frase completa che termina con<br />

un punto, si trovi su una sola riga.<br />

270.1.1 Espressioni regolari<br />

Textchk è scritto in Perl, pertanto le espressioni regolari che possono essere gestite sono quelle<br />

di questo linguaggio di programmazione.<br />

La ricerca della corrispondenza con le espressioni regolari che esprimono un errore, viene fatta<br />

in modo da circoscrivere, se possibile, tre parole prima e dopo della zona dell’errore. Per questa<br />

ragione, non ha senso tentare di identificare l’inizio e la fine di una riga (con i simboli ‘^’ e ‘$’),<br />

inoltre non è possibile utilizzare le parentesi tonde.<br />

A titolo di esempio, si propone il problema della «d» eufonica, per la precisione il caso di «ad».<br />

Supponendo di volerla utilizzare solo quando la parola successiva inizia con la vocale «a», escludendo<br />

il caso in cui la parola continui con un’altra «d» (per esempio: «ad amare», ma non «ad<br />

adattare»), si possono usare le espressioni regolari seguenti per individuare gli errori.<br />

\ba\s+a[^d]\w*\b<br />

\bad\s+ad\w*\b<br />

\bad\s+[^a]\w*\b<br />

Per intendere meglio il significato di ciò che è scritto, la prima riga significa:<br />

• ‘\b’<br />

• ‘a’<br />

• ‘\s+’<br />

lo spazio vuoto prima della parola;<br />

la lettera «a»;<br />

uno o più spazi orizzontali;<br />

• ‘a[^d]’ la lettera «a» seguita immediatamente da qualunque cosa che sia diversa dalla<br />

lettera «d»;<br />

• ‘\w*’<br />

• ‘\b’<br />

zero o più caratteri alfabetici;<br />

lo spazio vuoto dopo la parola;<br />

Nello stesso tempo, però, si può decidere di accettare un’eccezione: «ad esempio», che secondo<br />

quando stabilito con l’ultima delle espressioni regolari appena mostrate, dovrebbe essere un<br />

errore. Si può usare quindi l’espressione regolare seguente, tra le eccezioni.<br />

\bad\s+esempio\b<br />

270.2 Configurazione<br />

La configurazione di Textchk serve a definire gli errori sintattici che si ricercano. In generale è<br />

importante definire una configurazione specifica per ogni singolo progetto di documentazione,<br />

ma resta la possibilità di stabilire regole personali, legate all’utente, oltre che regole generali<br />

legate al sistema (per quanto questo possa avere un valore relativo).<br />

La configurazione avviene attraverso un file di testo normale, in cui le righe bianche, quelle<br />

vuote e quelle che iniziano con il simbolo ‘#’ vengono ignorate. Le altre righe sono dei record<br />

che possono avere una delle due forme seguenti:<br />

DBL____regola_di_errore[____testo_esplicativo]<br />

ERR____regola_di_errore[____testo_esplicativo]<br />

EXC____regola_di_eccezione


Analisi sintattica e stilistica con Textchk 2923<br />

Nel primo caso si identifica una parola che si ritiene possa essere stata scritta due volte, in modo<br />

erroneo; il secondo indica un modello di errore, mentre nel terzo si tratta di un’eccezione. I<br />

record che descrivono le regole di eccezione si riferiscono sempre all’ultima regola di errore (di<br />

tipo ‘DBL’ o ‘ERR’) che sia stata incontrata fino a quel punto.<br />

La forma di questi record è un po’ strana, nel senso che la separazione dei campi avviene attraverso<br />

una sequenza di quattro trattini bassi (‘____’). Ciò serve per evitare di creare problemi alla<br />

realizzazione delle espressioni regolari che descrivono gli errori e le eccezioni.<br />

#-----------------------------------------------------------------------<br />

# d eufonica<br />

# a|e|o prendono una «d» eufonica se sono seguite da una parola che<br />

# inizia con la stessa vocale, a meno che ci sia subito dopo un’altra<br />

# «d».<br />

#-----------------------------------------------------------------------<br />

ERR____\ba\s+a[^d]\w*\b____a --> ad<br />

EXC____\bda\s+a\s+a\b<br />

ERR____\bad\s+ad\w*\b____ad --> a<br />

ERR____\bad\s+[^aA]\w*\b____ad --> a<br />

EXC____\bad\s+esempio\b<br />

EXC____\bad\s+ora\b<br />

ERR____\be\s+e[^d]\w*\b____e --> ed<br />

ERR____\bed\s+[eE]d\w*\b____ed --> e<br />

ERR____\bed\s+[^eèE]\w*\b____ed --> e<br />

ERR____\bo\s+[oO][^d]\w*\b____o --> od<br />

ERR____\bod\s+[oO]d\w*\b____od --> o<br />

ERR____\bod\s+[^oO]\w*\b____od --> o<br />

L’esempio mostra una serie di istruzioni con le quali si cerca di definire l’uso della «d» eufonica.<br />

Vale la pena di analizzare cosa succede di fronte a una situazione precisa. Si suppone di avere<br />

scritto un testo nel quale è stata inserita la frase seguente:<br />

Purtroppo, fino ad ora il colore dell’auto non è stato scelto dal cliente.<br />

Concentrando l’attenzione sui record di configurazione seguenti, si può simulare ciò che succede.<br />

ERR____\bad\s+[^aA]\w*\b____ad --> a<br />

EXC____\bad\s+esempio\b<br />

EXC____\bad\s+ora\b<br />

Per cominciare, viene individuato un errore in via preliminare in corrispondenza di «ad ora»,<br />

perché la parola che segue «ad» non inizia con una lettera «a». Textchk preleva una stringa di<br />

tre parole prima e tre parole dopo questo errore: «Purtroppo, fino ad ora il colore dell’auto». In<br />

questo caso, le parole precedenti sono solo due, perché non è stato possibile ottenere di più.<br />

Su questa stringa estratta viene condotto il controllo per le eccezioni successive; così, dal momento<br />

che si ottiene una corrispondenza (sempre con «ad ora»), l’errore si rivela infondato (in<br />

base ai presupposti stabiliti).<br />

L’ultimo campo dei record che descrivono gli errori serve per indicare una spiegazione per<br />

ciò che viene identificato come un errore. Questa spiegazione viene mostrata da Textchk nel<br />

momento in cui l’errore relativo viene mostrato, secondo lo schema seguente:<br />

testo_esplicativo<br />

tre_parole_precedenti>>errore’ e ‘


2924 Analisi sintattica e stilistica con Textchk<br />

270.2.1 Gerarchia della configurazione<br />

Textchk è stato pensato originariamente per avere una configurazione specifica per ogni progetto<br />

di documentazione che ogni autore possa gestire. Tuttavia, è possibile definire anche una<br />

configurazione personale e una di sistema. Si tratta dei file seguenti:<br />

• ‘./.textchk.rules’ contiene la configurazione corrente, che viene letta prima delle<br />

altre;<br />

• ‘~/.textchk.rules’ contiene la configurazione personale, letta subito dopo quella<br />

corrente;<br />

• ‘/etc/textchk.rules’ contiene la configurazione di sistema, che viene letta alla fine.<br />

In generale non è opportuno stabilire una configurazione generale di sistema. Tuttavia, se c’è la<br />

necessità di annullare l’effetto di una regola di errore stabilita a livello generale, si può dichiarare<br />

la stessa regola nella configurazione personale o in quella corrente, facendola seguire immediatamente<br />

da un’eccezione identica. In pratica, supponendo di avere definito a livello di sistema<br />

la regola seguente, che richiede l’uso della «d» eufonica ogni volta che la parola seguente inizia<br />

con una vocale,<br />

ERR____\b[aeo]\s+[aeiouAEIOU]\w*\b____a/e/o --> ad/ed/od<br />

per annullarne l’effetto completamente, basta aggiungere la stessa regola in qualità di eccezione,<br />

subito dopo:<br />

# Regola di sistema che qui viene annullata.<br />

ERR____\b[aeo]\s+[aeiouAEIOU]\w*\b____a/e/o --> ad/ed/od<br />

EXC____\b[aeo]\s+[aeiouAEIOU]\w*\b<br />

270.2.2 Casi particolari<br />

Alle volte non conviene indicare troppe eccezioni, oppure non è materialmente possibile. Per<br />

esempio, si può immaginare il caso in cui si vuole mostrare veramente un modo sbagliato di<br />

scrivere per qualche ragione. Per queste situazioni viene in aiuto un file di configurazione aggiuntivo,<br />

che però può essere associato esclusivamente a un solo progetto di documentazione. Si<br />

tratta del file ‘./.textchk.special’, in cui si possono inserire integralmente alcune stringhe<br />

che Textchk ha indicato precedentemente come errate.<br />

Per questa parte della configurazione non c’è molto da fare: basta utilizzare un programma per<br />

la creazione e la modifica dei file di testo ricopiando ciò che serve dal file che viene generato<br />

da Textchk per registrare gli errori trovati. L’esempio seguente mostra un estratto di quello che<br />

potrebbe contenere questo file. Si osservi il fatto che si tratta di esempi di errori scritti così di<br />

proposito.<br />

oppure «un’aula», «ed anche» oppure «e<br />

vuole scrivere: «una aula» oppure «un’aula»,<br />

ma non «ad adattare»), si possono<br />

270.2.3 L’indicazione di parole doppie<br />

Un errore frequente nella scrittura di un testo consiste nella ripetizione di una parola per due volte<br />

di seguito, mentre l’intenzione era quella di scriverla una volta sola. Per intercettare questo tipo<br />

di situazione si utilizza il record ‘DBL’. Nel campo dell’espressione che indica l’errore, si fa riferimento<br />

implicitamente a una parola intera. Infatti, nella comparazione reale, vengono aggiunto<br />

il simbolo ‘\b’ all’inizio e alla fine, a sottolineare che la parola deve essere completa. Si osservi<br />

l’esempio seguente:


Analisi sintattica e stilistica con Textchk 2925<br />

#-----------------------------------------------------------------------<br />

# Parole doppie.<br />

#-----------------------------------------------------------------------<br />

DBL____\w\w+____Due parole identiche<br />

EXC____\bciao\s+ciao\b<br />

L’intenzione è di individuare qualunque parola (‘\w+’), composta almeno da due caratteri, che si<br />

ripete immediatamente. Viene posta una sola eccezione alla coppia «ciao ciao».<br />

270.3 Come si usa<br />

Textchk si compone di un eseguibile unico, ‘textchk’, che si utilizza secondo lo schema<br />

sintattico seguente:<br />

textchk --input-type=tipo_di_file file_da_analizzare [errori_risultanti [file_diagnostico]]<br />

textchk --help<br />

textchk --version<br />

Oltre alle opzioni standard, ‘--help’ e ‘--version’, l’opzione ‘--input-type’ serve a stabilire<br />

il tipo di file che si fornisce in ingresso, in modo che Textchk sappia come fare per gestirlo<br />

opportunamente, attraverso un argomento:<br />

• ‘standard’<br />

si riferisce a un file di testo in cui ogni capoverso occupa esattamente una riga e non richiede<br />

altri adattamenti;<br />

• ‘man’<br />

si riferisce a un file Troff delle pagine di manuale, che come tale richiede una rielaborazione<br />

in modo da ottenere un file di testo, simulando uno schermo di ampiezza orizzontale<br />

smisurata;<br />

• ‘texinfo’, ‘texi’<br />

si riferisce a un sorgente Texinfo;<br />

• ‘html’<br />

si riferisce a un file HTML che può essere trasformato in un file di testo attraverso Lynx.<br />

Il secondo argomento della riga di comando è il nome del file da analizzare, secondo il tipo indicato<br />

precedentemente. Il terzo argomento serve a definire il nome del file che viene creato per<br />

annotare le stringhe errate che vengono individuate; se non viene fornito espressamente il suo<br />

nome, viene creato un file con lo stesso nome di quello in ingresso, con l’aggiunta dell’estensione<br />

‘.err’ (‘file_da_analizzare .err’). Il quarto argomento serve a specificare il nome del file<br />

diagnostico, nel quale vengono registrate tutte le fasi di individuazione di errori e di eccezioni.<br />

Anche l’indicazione di questo file può essere omessa; in tal caso viene usato il nome del file degli<br />

errori con l’aggiunta dell’estensione ‘.diag’, oppure il file in ingresso con la stessa aggiunta<br />

(‘errori_risultanti .diag’ oppure ‘file_da_analizzare .diag’).<br />

Per esempio, il comando<br />

$ textchk --input-type=man bash.1<br />

genera i file ‘bash.1.err’ e ‘bash.1.diag’.


2926 Analisi sintattica e stilistica con Textchk<br />

270.3.1 Come vengono mostrati gli errori e i dati diagnostici<br />

Durante il suo lavoro, Textchk mostra sullo schermo ciò che trova, delimitando gli errori tra i<br />

delimitatori ‘>>’ e ‘ a<br />

Pertanto, andando >>ad elevare a<br />

contrario, riuscendo così >>ad esplorare>ad elevare>ad elevare>ad esplorare>ad esplorare>ad esempioad esempioad emettere


Analisi sintattica e stilistica con Textchk 2927<br />

Dopo la soluzione di questo problema, c’è solo bisogno di predisporre un file di regole,<br />

‘./.textchk.rules’, poi, mano a mano che il lavoro procede, potrà essere conveniente<br />

predisporre anche il file ‘./.textchk.special’.<br />

270.4.1 Gettext<br />

I messaggi che può mostrare Texinfo possono essere tradotti, dal momento che viene usato il<br />

modulo Perl-gettext. Nel pacchetto del sorgente è presente un file di messaggi per la lingua<br />

italiana, che però deve essere compilato e installato:<br />

$ msgfmt -o textchk.mo it.po<br />

In questo modo, si genera il file ‘textchk.mo’, che probabilmente va collocato nella directory<br />

‘/usr/share/locale/it/LC_MESSAGES/’.<br />

270.4.2 Dipendenze<br />

Per funzionare, Textchk richiede l’interprete Perl e la presenza di un modulo speciale: Perlgettext.<br />

Inoltre, per poter gestire correttamente i diversi tipi di file per cui è stato predisposto,<br />

richiede in particolare Groff, Lynx e Texinfo.<br />

270.5 Riferimenti<br />

• Daniele Giacomini, Textchk<br />

<br />

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org


2928 Analisi sintattica e stilistica con Textchk


Parte li<br />

Alml<br />

271 Alml: preparazione e visione generale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2930<br />

271.1 Installazione di Alml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2930<br />

271.2 Esempio iniziale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2931<br />

271.3 Cosa si genera con la <strong>composizione</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2933<br />

271.4 Sintassi nell’uso del programma frontale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2934<br />

271.5 Organizzare un file-make . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2937<br />

271.6 Particolarità del sistema Alml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2938<br />

271.7 Usare Textchk, Checkbot e Ispell con Alml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2939<br />

271.8 Espandere le potenzialità elaborative di TeX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2939<br />

272 Il documento secondo Alml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2946<br />

272.1 Organizzazione generale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2946<br />

272.2 Dalla copertina all’indice generale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2947<br />

272.3 Contenuto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2951<br />

272.4 Documento multilingua . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2954<br />

272.5 Blocchi di testo ed elementi inseriti all’interno delle righe . . . . . . . . . . . . . . . . .2954<br />

272.6 Tracciamento di informazioni particolari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2973<br />

272.7 Inserimento letterale di codice TeX e HTML, con eventuale inserimento<br />

condizionato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2976<br />

272.8 Definizione alternativa della suddivisione del documento . . . . . . . . . . . . . . . . . 2979<br />

272.9 Riferimento alla larghezza del testo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2980<br />

273 Entità ISO gestite da Alml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2981<br />

274 Stile di scrittura del sorgente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2986<br />

274.1 Blocchi di testo e rientri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2986<br />

274.2 Figure e tabelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2988<br />

274.3 Sezioni marcate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2989<br />

2929


Alml: preparazione e visione generale<br />

Capitolo 271<br />

Alml 1 è il sistema di <strong>composizione</strong> SGML di questo documento, Appunti di informatica libera.<br />

Si tratta di un programma Perl, ‘alml’, che controlla l’analizzatore SGML e altri programmi<br />

necessari per arrivare alla <strong>composizione</strong> finale del documento. 2<br />

Alml, con il suo DTD, continuerà a evolversi assieme all’opera Appunti di informatica libera.<br />

Chi desidera utilizzare questo sistema di <strong>composizione</strong> deve tenere in considerazione tale dinamicità;<br />

pertanto, prima di passare a un eventuale aggiornamento, deve valutare l’opportunità<br />

del cambiamento.<br />

Alml si avvale di altri programmi per l’analisi SGML e per la generazione di alcuni formati<br />

finali. In particolare, è necessario disporre di ‘nsgmls’ che fa parte generalmente del pacchetto<br />

SP (anche se la propria distribuzione GNU/Linux potrebbe nominarlo in modo differente); inoltre<br />

è fondamentale la presenza di LaTeX per generare la <strong>composizione</strong> da stampa. La tabella 271.1<br />

riepiloga gli applicativi da cui dipende il buon funzionamento di Alml.<br />

Applicativo<br />

Perl<br />

Perl-gettext<br />

SP<br />

LaTeX<br />

PSUtils<br />

Dvipdfm<br />

Uuencode<br />

Tabella 271.1. Applicativi da cui dipende Alml.<br />

ImageMagick<br />

Ghostscript<br />

HTML2ps<br />

Links<br />

Compito<br />

Alml è scritto in Perl.<br />

Modulo Perl per l’utilizzo di Gettext.<br />

Verifica la validità SGML e genera una prima conversione.<br />

Compone in un formato finale per la stampa.<br />

Riorganizza, ingrandisce e riduce un file PostScript.<br />

Consente una conversione in PDF a partire dal file DVI.<br />

Estrae le immagini incorporate in file esterni.<br />

Converte i file delle immagini nei formati appropriati,<br />

adattando le dimensioni.<br />

Serve a ImageMagick per la conversione di file PostScript in<br />

altri formati.<br />

Consente l’importazione di codice HTML con LaTeX e con<br />

pdfLaTeX.<br />

Converte un file HTML in testo puro.<br />

271.1 Installazione di Alml<br />

Alml viene fornito solo attraverso archivi tradizionali di tipo tar+gzip, in file con nomi del tipo:<br />

alml-versione.tar.gz<br />

Estraendo il contenuto dell’archivio, si dovrebbero ottenere in particolare i file e le sottodirectory<br />

elencati nella tabella 271.2, che rappresentano l’essenziale.<br />

Tabella 271.2. Contenuto essenziale dell’archivio di distribuzione di Alml.<br />

File o directory<br />

man/<br />

*<br />

doc/<br />

*<br />

Descrizione<br />

Pagine di manuale relative agli eseguibili.<br />

Esempi e documentazione eventuale.<br />

1 Alml GNU GPL<br />

2 Questo capitolo e i successivi descrivono il sistema di <strong>composizione</strong> Alml. Tuttavia, per poter comprendere quanto<br />

esposto, è necessario prima conoscere ciò che è stato descritto a proposito dell’SGML, di TeX e dei sistemi comuni di<br />

<strong>composizione</strong> basati sull’SGML.<br />

2930


Alml: preparazione e visione generale 2931<br />

File o directory<br />

share/<br />

*<br />

bin/<br />

*<br />

etc/alml-tex.sty<br />

Descrizione<br />

File e directory da collocare in ‘/usr/share/alml/’.<br />

File eseguibili.<br />

File di configurazione da copiare nella directory ‘/etc/’.<br />

Gli eseguibili, che nel pacchetto di distribuzione si trovano nella directory ‘bin/’, devono essere<br />

raggiungibili attraverso il percorso di ricerca del sistema, rappresentato dalla variabile di ambiente<br />

‘PATH’. Pertanto vanno collocati opportunamente, oppure vanno predisposti dei collegamenti<br />

adeguati.<br />

Quanto contenuto nella directory ‘share/’, va collocato nella directory ‘/usr/share/alml/’,<br />

oppure vanno realizzati dei collegamenti equivalenti.<br />

271.1.1 Gettext<br />

I messaggi di Alml possono essere tradotti. Se si dispone del file PO relativo alla lingua preferita,<br />

è necessario compilarlo come nell’esempio seguente:<br />

$ msgfmt -vvvv -o alml.mo it.po<br />

In questo esempio, il file ‘it.po’ viene compilato generando il file ‘alml.mo’. Trattandosi evidentemente<br />

della traduzione italiana, questo file può essere collocato in ‘/usr/share/locale/<br />

it/LC_MESSAGES/’, o in un’altra posizione analoga in base agli standard del proprio sistema<br />

operativo.<br />

Se non è disponibile il modulo Perl-gettext, 3 che serve a Alml per accedere alle traduzioni,<br />

è possibile eliminare il suo utilizzo e simulare la funzione di Gettext. In pratica si commentano<br />

le istruzioni seguenti all’inizio dei programmi ‘alml’, ‘alml-sp2sp’, ‘alml-sp2be’ e<br />

‘alml-extra’:<br />

# We *don’t* want to use gettext.<br />

#use POSIX;<br />

#use Locale::gettext;<br />

#setlocale (LC_MESSAGES, "");<br />

#textdomain ("alml");<br />

Inoltre, si tolgono i commenti dalla dichiarazione della funzione fittizia ‘gettext()’, come si<br />

vede qui:<br />

sub gettext<br />

{<br />

return $_[0];<br />

}<br />

271.2 Esempio iniziale<br />

Un esempio iniziale può servire per comprendere il funzionamento generale di Alml.<br />

<br />

<br />

<br />

<br />

Un esempio per l’utilizzo del sistema Alml<br />

3 Nelle distribuzioni Debian si tratta del pacchetto ‘liblocale-gettext-perl’.


2932 Alml: preparazione e visione generale<br />

SGML, XML, HTML, Alml<br />

<br />

Esempio di utilizzo di Alml<br />

Pinco Pallino &lt;pinco.pallino@brot.dg&gt;<br />

2011.11.11<br />

<br />

Copyright &copy; Pinco Pallino, &lt;pinco.pallino@brot.dg&gt;<br />

Permission is granted to copy, distribute and/or modify this<br />

document under the terms of the GNU Free Documentation License,<br />

Version 1.1 or any later version published by the Free Software<br />

Foundation; with no Invariant Sections, with no Front-Cover<br />

Texts, and with no Back-Cover Texts. A copy of the license is<br />

included in the section entitled "GNU Free Documentation<br />

License".<br />

<br />

Indice generale<br />

<br />

<br />

<br />

Introduzione al documento<br />

<br />

Questo documento è scritto per... bla bla bla bla bla bla bla bla bla<br />

bla bla bla bla bla bla bla bla bla bla bla bla bla...<br />

Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla<br />

bla bla bla bla bla...<br />

<br />

<br />

<br />

Lavorando con bla bla bla...<br />

lavorare con bla bla<br />

bla bla<br />

<br />

Lavorare con bla bla è molto semplice... bla bla bla bla bla bla bla<br />

bla bla bla bla bla bla...<br />

Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla<br />

bla bla bla bla bla...<br />

<br />

Fare di meglio<br />

<br />

C’è anche un modo migliore per... bla bla bla bla bla bla bla bla bla<br />

bla bla bla bla...<br />

Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla<br />

bla bla bla bla bla...<br />

<br />

Non dover lavorare più<br />

relaxing<br />

<br />

Se non si lavora ci si può riposare, ma questo si può fare solo se si<br />

dispone già di una certa disponibilità economica... bla bla bla bla bla<br />

bla bla bla bla bla bla bla bla bla bla...<br />

Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla<br />

bla bla bla bla bla...<br />


Alml: preparazione e visione generale 2933<br />

<br />

<br />

Alcune note<br />

<br />

Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla<br />

bla bla bla bla bla...<br />

Bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla<br />

bla bla bla bla bla...<br />

<br />

<br />

<br />

Index<br />

<br />

<br />

<br />

<br />

Se tutto viene copiato correttamente nel file ipotetico ‘esempio.sgml’, con il comando seguente<br />

si ottiene la <strong>composizione</strong> in PostScript, attraverso LaTeX e Dvips:<br />

$ alml --ps esempio.sgml<br />

Con il comando seguente, si ottiene la <strong>composizione</strong> in HTML, su più file distinti:<br />

$ alml --html esempio.sgml<br />

271.3 Cosa si genera con la <strong>composizione</strong><br />

L’utilizzo di Alml può generare file differenti a seconda del tipo di operazione che viene richiesta.<br />

La tabella 271.3 riepiloga questi file.<br />

Tabella 271.3. File generati dall’utilizzo di Alml. I file ‘nome .sgml’ e ‘nome .css’ devono<br />

essere già presenti.<br />

File<br />

nome .sgml<br />

nome .css<br />

nome .X2V.ps<br />

nome .X3V.ps<br />

nome .X3H.ps<br />

nome .X4H.ps<br />

nome .X1T.ps<br />

nome .aux<br />

nome .diag<br />

nome .pageref<br />

nome .dvi<br />

nome .log<br />

nome .pdf<br />

nome .ps<br />

nome .tex<br />

nome .html<br />

nomen .html<br />

n.jpg<br />

Descrizione<br />

Il sorgente SGML principale da cui hanno origine gli altri file.<br />

Foglio di stile CSS necessario per la <strong>composizione</strong> HTML.<br />

Composizione in PostScript con l’opzione ‘--long’.<br />

Composizione in PostScript con l’opzione ‘--extralong’.<br />

Composizione in PostScript con l’opzione ‘--large’.<br />

Composizione in PostScript con l’opzione ‘--extralarge’.<br />

Composizione in PostScript con l’opzione ‘--thin’.<br />

File ausiliario e temporaneo della <strong>composizione</strong> attraverso<br />

LaTeX.<br />

File diagnostico generato da ‘alml’.<br />

File temporaneo con i riferimenti alle pagine nella <strong>composizione</strong><br />

con LaTeX.<br />

Composizione in DVI, finale o transitoria.<br />

File diagnostico generato da LaTeX.<br />

Composizione in PDF.<br />

Composizione in PostScript.<br />

Composizione transitoria in formato LaTeX.<br />

Primo file della <strong>composizione</strong> in HTML.<br />

n-esimo file della <strong>composizione</strong> in HTML.<br />

n-esimo file delle immagini relativo alla <strong>composizione</strong> in<br />

HTML.


2934 Alml: preparazione e visione generale<br />

File<br />

Descrizione<br />

n.ps<br />

n-esimo file delle immagini relativo alla <strong>composizione</strong> in<br />

PostScript.<br />

* ~ File temporaneo non meglio precisato.<br />

È bene sottolineare che i file indicati come ‘nome .sgml’ e ‘nome .css’ devono essere già presenti<br />

perché si possa usare Alml; inoltre, il sorgente SGML principale potrebbe a sua volta incorporare<br />

altri file SGML.<br />

Se il sorgente SGML fa riferimento a immagini collocate in file esterni, è necessario che queste<br />

siano in formato PNG. 4 In generale, conviene prevedere una directory apposita per questi file,<br />

in modo da non essere intralciati quando la <strong>composizione</strong> in HTML, o in PostScript, genera la<br />

copia delle immagini richieste nella directory corrente, utilizzano i nomi nella forma ‘n.jpg’ o<br />

‘n.ps’.<br />

Alle volte si possono incontrare problemi inspiegabili nell’inserimento di immagini, che si<br />

possono manifestare nelle conversioni o l’inserimento nella <strong>composizione</strong> in PDF. Spesso si<br />

superano questi problemi usando ImageMagick e facendo un passaggio intermedio nel formato<br />

JPG. Per esempio, disponendo del file ‘pippo.png’ che risulta corretto e perfettamente<br />

visibile con gli strumenti normali, ma che si comporta in modo strano nella <strong>composizione</strong><br />

PDF, può convenire il passaggio seguente:<br />

$ convert pippo.png pippo.jpg<br />

$ convert pippo.jpg pippo.png<br />

Al termine, il file ‘pippo.jpg’ può essere eliminato.<br />

271.4 Sintassi nell’uso del programma frontale<br />

Il programma frontale attraverso cui si gestisce il sistema di <strong>composizione</strong> Alml è ‘alml’:<br />

alml opzioni sorgente_sgml<br />

alml --help<br />

alml --version<br />

Come si vede dal modello sintattico, a parte i casi delle opzioni ‘--help’ e ‘--version’, è<br />

sempre richiesta l’indicazione di un file sorgente SGML, a cui applicare un qualche tipo di<br />

elaborazione.<br />

Opzioni<br />

--help<br />

Mostra la guida rapida interna e conclude il funzionamento.<br />

--version<br />

Mostra le informazioni sulla versione e conclude il funzionamento.<br />

--paper={a4|letter}<br />

Permette di specificare le dimensioni della carta in base a un nome standard. Il formato<br />

predefinito è A4, che corrispondente alla parola chiave ‘a4’.<br />

4 A seconda del tipo di <strong>composizione</strong> finale, può darsi che sia necessario convertire le immagini in un altro formato.<br />

In questi casi, viene usato ImageMagick per generare automaticamente ciò che serve. Per la precisione, il formato PNG<br />

di partenza è ciò che serve per la <strong>composizione</strong> in PDF; per la <strong>composizione</strong> in PostScript servono immagini EPS; per la<br />

<strong>composizione</strong> HTML vengono generati file in formato JPG.


Alml: preparazione e visione generale 2935<br />

--paper-orientation={normal|inverted}<br />

Permette di specificare l’orientamento della carta. Si osservi che non vengono usate le<br />

definizioni tipiche, corrispondenti a portrait e landscape, perché qui il contesto è un po’<br />

diverso. A ogni modo, se si seleziona il formato di carta A4 e poi si aggiunge l’opzione<br />

‘--paper-orientation=inverted’, si intende arrivare a una <strong>composizione</strong> in<br />

orizzontale.<br />

--draft<br />

Quando il contesto lo permette, serve per ottenere una <strong>composizione</strong> particolare, con più<br />

informazioni utili alla correzione o alla revisione del testo. A differenza di quanto si potrebbe<br />

essere portati a pensare, in questo modo l’elaborazione è più complessa del normale,<br />

proprio per portare in risalto tali informazioni.<br />

--compact<br />

Quando il contesto lo permette, serve per ottenere una <strong>composizione</strong> compatta,<br />

risparmiando spazio.<br />

--long<br />

Quando si usa in abbinamento all’opzione ‘--ps’, cioè quando si vuole ottenere un risultato<br />

in formato PostScript, permette di ottenere una <strong>composizione</strong> speciale, a due colonne con<br />

il testo ridotto della metà. Di solito si abbina a questa anche l’opzione ‘--compact’.<br />

Le opzioni ‘--long’, ‘--extralong’, ‘--large’, ‘--extralarge’ e ‘--thin’, sono<br />

delle estensioni al formato selezionato con ‘--paper’, che possono essere disponibili<br />

solo con pochi formati di partenza. Oltre a questo, va considerato il fatto che si possono<br />

utilizzare solo quando l’orientamento richiesto è di tipo «normale», tenendo conto che il<br />

risultato finale potrebbe essere orizzontale o verticale, in base al tipo di estensione.<br />

--extralong<br />

Come ‘--long’, su tre colonne verticali, molto rimpicciolite.<br />

--large<br />

Come ‘--long’, su tre colonne in orizzontale.<br />

--extralarge<br />

Come ‘--large’, su quattro colonne in orizzontale, molto rimpicciolite.<br />

--thin<br />

Un formato ridotto che si traduce in pratica in un A7x4, ovvero mezzo A4 diviso in<br />

verticale.<br />

--clean<br />

Rimuove alcuni file temporanei abbinati al file sorgente indicato. Si tratta per la precisione<br />

di ‘nome .pageref’, ‘nome .diag’, ‘nome .aux’ e ‘nome .log’.<br />

--verbose<br />

Segnala il procedere dell’elaborazione con informazioni dettagliate. In generale tali informazioni<br />

sono ottenibili dal file ‘nome .diag’; tuttavia, in presenza di file sorgenti di grandi<br />

dimensioni, può servire per sapere a che punto è l’elaborazione.<br />

--sgml-include=entità_parametrica<br />

Attraverso questa opzione, che può essere usata anche più volte, è possibile «includere» delle<br />

entità parametriche. Per la precisione, è come se nel sorgente venisse dichiarata un’entità<br />

parametrica corrispondente, assegnandole la parola chiave ‘INCLUDE’. Ciò viene usato per<br />

controllare l’inclusione di porzioni di sorgente, secondo le convenzioni dell’SGML.


2936 Alml: preparazione e visione generale<br />

--page-numbering={plain|default}<br />

Questa opzione permette di definire in che modo gestire la numerazione delle pagine nei<br />

formati di <strong>composizione</strong> cartacei. In condizioni normali, la numerazione è realizzata attraverso<br />

sequenze differenti: una per la parte iniziale fino alla fine dell’introduzione, una per<br />

il corpo (comprese le appendici) e una finale per gli indici analitici. Assegnando la parola<br />

chiave ‘plain’ si fa in modo che la numerazione sia unica, cosa che potrebbe essere<br />

conveniente per il formato PDF.<br />

--sgml-syntax | --sgml-check<br />

Una qualunque di queste due opzioni permette di ottenere la verifica formale del sorgente,<br />

in base al DTD.<br />

--sp<br />

Con questa opzione si vuole raggiungere solo un formato intermedio per il controllo<br />

diagnostico del funzionamento di Alml.<br />

--tex | --latex<br />

Con questa opzione si vuole raggiungere solo un formato intermedio in LaTeX per il<br />

controllo diagnostico del funzionamento di Alml.<br />

--dvi<br />

Genera un risultato in formato DVI. L’elaborazione crea una serie di file EPS per le<br />

immagini, secondo il modello ‘n.ps’.<br />

--ps | --postscript<br />

Genera un risultato in formato PostScript. L’elaborazione crea una serie di file EPS per le<br />

immagini, secondo il modello ‘n.ps’; una volta ottenuto il file PostScript finale, questi file<br />

non servono più.<br />

--pdf<br />

Genera un risultato in formato PDF.<br />

--html<br />

Genera un risultato in formato HTML, articolato in più file, dove il primo è ‘nome .html’ e<br />

gli altri sono ‘nomen .html’. Inoltre, viene fatta una copia dei file delle immagini, secondo<br />

il modello ‘n.jpg’ (le due numerazioni sono indipendenti).<br />

--html-text<br />

Genera un risultato in formato HTML speciale, in un file unico, senza riferimenti a immagini<br />

esterne e con tabelle testuali. Il file ottenuto può essere consultato con Links e con<br />

questo può essere convertito in un testo puro e semplice, attraverso il comando:<br />

links -dump nome .html > nome .txt<br />

--html-check | --html401-check<br />

Se sono stati installati i file necessari, consente la verifica formale di un file HTML secondo<br />

le specifiche della versione 4.01.<br />

--html320-check<br />

Se sono stati installati i file necessari, consente la verifica formale di un file HTML secondo<br />

le specifiche della versione 3.2.<br />

--xml<br />

Se sono stati installati i file necessari, consente la verifica formale di un file XML secondo<br />

le specifiche del DTD relativo (attualmente solo XHTML).


Alml: preparazione e visione generale 2937<br />

271.5 Organizzare un file-make<br />

Un file-make opportuno può facilitare l’uso di Alml. Viene proposto un esempio elementare,<br />

riferito al file ‘example.sgml’, in cui si può vedere anche l’utilizzo proposto di ‘alml’.<br />

# file name prefix.<br />

DOC_PREFIX=example<br />

# Notice that "text" generates an HTML file with the same name<br />

# for the first HTML page. This is why it is before the standard<br />

# HTML typesetting.<br />

#<br />

all: \<br />

clean \<br />

text \<br />

html \<br />

ps \<br />

longps \<br />

extralongps \<br />

largeps \<br />

extralargeps \<br />

pdf<br />

clean:<br />

check:<br />

dvi:<br />

ps:<br />

longps:<br />

@echo "Cleaning..." ; \<br />

find . -name core -exec rm -f \{\} \; ; \<br />

rm -f $(DOC_PREFIX)*.tex ; \<br />

rm -f $(DOC_PREFIX)*.dvi ; \<br />

rm -f $(DOC_PREFIX)*.sp ; \<br />

rm -f $(DOC_PREFIX)*.sp2 ; \<br />

rm -f $(DOC_PREFIX)*.ps ; \<br />

rm -f $(DOC_PREFIX)*.pdf ; \<br />

rm -f $(DOC_PREFIX)*.txt ; \<br />

rm -f $(DOC_PREFIX)*.log ; \<br />

rm -f $(DOC_PREFIX)*.aux ; \<br />

rm -f $(DOC_PREFIX)*.tmp ; \<br />

rm -f $(DOC_PREFIX)*.diag ; \<br />

rm -f $(DOC_PREFIX)*.pageref ; \<br />

rm -f $(DOC_PREFIX)*.pageloc ; \<br />

rm -f *.html ; \<br />

rm -f *.bak ; \<br />

rm -f *.jpg ; \<br />

rm -f *.ps ; \<br />

rm -f *\~<br />

@alml --sgml-check \<br />

--verbose \<br />

$(DOC_PREFIX).sgml<br />

@alml --dvi \<br />

--verbose \<br />

$(DOC_PREFIX).sgml<br />

@alml --ps \<br />

--verbose \<br />

$(DOC_PREFIX).sgml<br />

@alml --ps \<br />

--verbose \<br />

--compact \


2938 Alml: preparazione e visione generale<br />

--long \<br />

--page-numbering=plain \<br />

$(DOC_PREFIX).sgml<br />

extralongps:<br />

@alml --ps \<br />

--verbose \<br />

--compact \<br />

--extralong \<br />

--page-numbering=plain \<br />

$(DOC_PREFIX).sgml<br />

largeps:<br />

@alml --ps \<br />

--verbose \<br />

--compact \<br />

--large \<br />

--page-numbering=plain \<br />

$(DOC_PREFIX).sgml<br />

extralargeps:<br />

@alml --ps \<br />

--verbose \<br />

--compact \<br />

--extralarge \<br />

--page-numbering=plain \<br />

$(DOC_PREFIX).sgml<br />

pdf:<br />

html:<br />

text:<br />

@alml --pdf \<br />

--verbose \<br />

--page-numbering=plain \<br />

$(DOC_PREFIX).sgml<br />

@alml --html \<br />

--verbose \<br />

$(DOC_PREFIX).sgml<br />

@alml --html-text \<br />

--verbose \<br />

$(DOC_PREFIX).sgml ; \<br />

links -dump \<br />

$(DOC_PREFIX).html \<br />

> $(DOC_PREFIX).txt<br />

Si può osservare in particolare l’obiettivo ‘clean’ che elimina tutti i file non indispensabili e in<br />

particolare tutti i file il cui nome termina per ‘.html’ e per ‘.ps’.<br />

Se per esempio si utilizza il comando ‘make ps’, si otterrà la <strong>composizione</strong> in PostScript,<br />

generando in particolare il file ‘example.ps’.<br />

271.6 Particolarità del sistema Alml<br />

Recentemente, Alml è stato modificato e alcune sue funzionalità particolari, non sono più<br />

disponibili.<br />

Non esiste più la gestione delle derivazioni, pertanto, non si possono più usare strutture come<br />

quelle seguenti:


Alml: preparazione e visione generale 2939<br />

<br />

...<br />

...<br />

<br />

Gli elementi ‘verbatimpre’, ‘asciiart’ e ‘uri’, vanno usati assieme a una sezione marcata<br />

di tipo CDATA:<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

271.7 Usare Textchk, Checkbot e Ispell con Alml<br />

Textchk e Checkbot, descritti rispettivamente nel capitolo 270 e nella sezione 259.5, possono<br />

essere usati facilmente con Alml. In generale, si passa per una <strong>composizione</strong> in formato<br />

HTML singolo, quindi si utilizzano questi programmi. Supponendo di avere generato il file<br />

‘mio_file.html’:<br />

$ textchk --input-type=html mio_file.html mio_file.tchk mio_file.tdiag<br />

$ checkbot --url file://‘pwd‘/mio_file.html<br />

Per usare Ispell, è conveniente generare prima una versione del documento in formato testo puro.<br />

Per questo si potrebbe usare Lynx o Links, ma all’interno del pacchetto di Alml è disponibile un<br />

programma di supporto speciale, in grado di convertire opportunamente un file HTML per questo<br />

scopo. Si tratta di ‘alml-extra’ che va usato con l’opzione ‘--html-to-text-for-spell’:<br />

alml-extra --html-to-text-for-spell < file_html<br />

> file_testo_non_formattato<br />

In particolare, per evitare problemi con Ispell, nel file che si ottiene sono eliminate la barre<br />

oblique inverse (‘\’).<br />

Naturalmente, usando poi Ispell nel file generato in questo modo, non ha senso fare delle<br />

correzioni, che invece vanno applicate al sorgente originale, in modo manuale.<br />

271.8 Espandere le potenzialità elaborative di TeX<br />

Il file LaTeX generato da Alml tende a richiedere risorse impreviste a TeX. È molto probabile che<br />

per documenti di dimensioni medie, sia necessario espandere i limiti posti dalla configurazione<br />

di TeX.<br />

In generale, si dovrebbe disporre di una distribuzione teTeX, per la quale si interviene nel<br />

file ‘texmf/web2c/texmf.cnf’ (eventualmente potrebbe trattarsi meglio di ‘/etc/texmf/<br />

texmf.cnf’, o simile).


2940 Alml: preparazione e visione generale<br />

Per la <strong>composizione</strong> di Appunti di informatica libera si è resa necessaria la modifica di alcune<br />

variabili; quello che si vede sotto sono i valori minimi da assegnare alle variabili rispettive:<br />

main_memory = 2000000<br />

font_mem_size = 800000<br />

pool_size = 250000<br />

hash_extra = 10000<br />

buf_size = 100000<br />

save_size = 40000<br />

Si può tenere in considerazione l’abbinamento seguente, tra il rapporto generato da TeX e il file<br />

di configurazione ‘texmf.cnf’, tenendo conto che in situazioni particolari il programma può<br />

segnalare la mancanza di una risorsa differente da quelle comuni:<br />

Here is how much of TeX’s memory you used:<br />

• 42853 strings out of 55918<br />

Dipende dalla variabile ‘max_string’. In questo caso gli era stato assegnato il valore<br />

60000.<br />

• 510063 string characters out of 647843<br />

Dipende dalla variabile ‘pool_size’. In questo caso gli era stato assegnato il valore<br />

700000.<br />

• 200381 words of memory out of 1000001<br />

Dipende dalla variabile ‘main_memory’. In questo caso gli era stato assegnato il valore<br />

1000000.<br />

• 44744 multiletter control sequences out of 10000+40000<br />

Il valore finale che si somma a 10000, dipende dalla variabile ‘hash_extra’, a cui era<br />

stato assegnato il valore 40000.<br />

• 221835 words of font info for 188 fonts, out of 400000 for 1000<br />

I due valori finali dipendono rispettivamente da ‘font_mem_size’ e da ‘font_max’.<br />

• 14 hyphenation exceptions out of 1000<br />

Dipende dalla variabile ‘hiph_size’ a cui corrisponde esattamente il valore finale.<br />

Al termine delle modifiche a questo file, <strong>occorre</strong> ricordare di lanciare il comando<br />

‘texconfig init’, con i privilegi dell’utente ‘root’: 5<br />

# texconfig init<br />

Nel caso particolare della distribuzione Debian, il file di configurazione ‘/etc/texmf/<br />

texmf.cnf’ è ottenuto attraverso la fusione di file differenti, contenuti nella directory ‘/etc/<br />

texmf/texmf.d/’. In tal caso, per modificare le voci descritte in precedenza, <strong>occorre</strong> intervenire<br />

probabilmente nel file ‘/etc/texmf/texmf.d/95NonPath’; successivamente <strong>occorre</strong><br />

eseguire il comando ‘update-texmf’, il quale ricostruisce un file ‘/etc/texmf/texmf.cnf’<br />

nuovo; infine si deve eseguire ‘texconfig init’.<br />

271.8.1 Limiti strutturali di TeX<br />

Le distribuzioni normali di TeX potrebbero non essere in grado di gestire un gran numero di<br />

comandi ‘\label’, anche se si tenta di intervenire nella configurazione. Questo si traduce in<br />

pratica in un limite insuperabile per ciò che nella configurazione viene mostrato come la variabile<br />

‘save_size’.<br />

5 Non tutte le modifiche che si apportano a questo file richiedono l’esecuzione di ‘texconfig init’; tuttavia è<br />

meglio ripeterlo, anche per quelle situazioni in cui non serve.


Alml: preparazione e visione generale 2941<br />

I comandi ‘\label’ generano delle annotazioni in un file con estensione ‘.aux’, simili<br />

all’esempio seguente:<br />

\newlabel{anchor7}{{}{25}}<br />

In questo caso si afferma che l’etichetta ‘anchor7’ corrisponde alla pagina 25.<br />

Generalmente, la <strong>composizione</strong> con i programmi ‘ tex’<br />

*<br />

viene ripetuta per tre volte, allo scopo<br />

di acquisire le informazioni contenute in questo file: la prima volta viene costruito da zero, la<br />

seconda volta il testo viene reimpaginato utilizzando queste informazioni, rigenerandole nuovamente;<br />

infine, la terza volta non ci dovrebbero essere ulteriori spostamenti nell’impaginazione<br />

e il procedimento termina. Pertanto, la seconda e la terza volta viene letto il file con estensione<br />

‘.aux’.<br />

Sia i comandi ‘\label’, sia i comandi ‘\newlabel’ contenuti nel file ausiliario che viene incluso<br />

automaticamente, vanno a ridurre la memoria definita dalla variabile ‘save_size’. Così succede<br />

normalmente che si riesca a completare la prima elaborazione del file, mentre nella successiva,<br />

caricando anche il file ausiliario la memoria non basta più. La segnalazione di errore tipica è la<br />

seguente:<br />

! TeX capacity exceeded, sorry [save size=40000].<br />

Di fatto, questa variabile non può superare il valore 65535, anche se si tenta di modificare i<br />

sorgenti di teTeX intervenendo nel file ‘texk/web2c/tex.ch’. Dovrebbe esserci una riga simile<br />

a quella seguente:<br />

@!inf_save_size = 600;<br />

@!sup_save_size = 40000;<br />

Si può anche provare, aumentando il valore assegnato a ‘sup_save_size’, per esempio come<br />

nel caso seguente, ma in pratica, il limite massimo che si riesce a raggiungere resta quello di<br />

65535: 6<br />

@!inf_save_size = 600;<br />

@!sup_save_size = 100000;<br />

271.8.2 Soluzione attuata da Alml<br />

Alml è un sistema di <strong>composizione</strong> pensato per la realizzazione di opere molto grandi, con indici<br />

generali e analitici gestiti autonomamente. In questo modo, la <strong>composizione</strong> tradizionale attraverso<br />

TeX genererebbe un file ‘.aux’ con una quantità di voci molto grande. Per evitare di saturare<br />

il limite di TeX, questi riferimenti vengono inseriti in un altro file, con estensione ‘.pageref’ e<br />

gestiti esternamente a TeX.<br />

In breve, Alml gestisce le cose nel modo seguente.<br />

1. Viene creato un file TeX in cui le etichette (le ancore) usano il comando ‘\AlmlLabel’<br />

\AlmlLabel{etichetta}<br />

e i riferimenti alle pagine si fanno con comandi del tipo<br />

\AlmlPageRef{0}{000}{etichetta}<br />

2. Viene avviato TeX che elabora il file e genera un file ‘.pageref’ in base ai comandi<br />

‘\AlmlLabel’.<br />

6 Il limite strutturale sembra dipendere da un’organizzazione del programma pensata per l’elaborazione su architetture<br />

a 16 bit.


2942 Alml: preparazione e visione generale<br />

3. Viene letto il file ‘.pageref’ e con quelle informazioni, il file TeX viene modificato<br />

intervenendo sui riferimenti alle pagine, che diventano:<br />

\AlmlPageRef{1}{pagina}{etichetta}<br />

4. Si riavvia TeX che genera un nuovo file ‘.pageref’.<br />

5. Viene letto il file ‘.pageref’ e con quelle informazioni, il file TeX viene modificato<br />

intervenendo sui riferimenti alle pagine, che diventano:<br />

\AlmlPageRef{2}{pagina}{etichetta}<br />

6. Si riavvia TeX per l’ultima volta.<br />

271.8.3 Suddivisione automatica in tomi e parti della <strong>composizione</strong><br />

finale PostScript<br />

Per facilitare la suddivisione della <strong>composizione</strong> PostScript in file contenenti solo un tomo o solo<br />

una parte, vengono inserite nel sorgente TeX delle istruzioni per creare un file con estensione<br />

‘.pageloc’, contenente le informazioni necessarie:<br />

BOF<br />

tome{1}pageoffset{12}relativepage{1}<br />

part{1}pageoffset{12}relativepage{7}<br />

part{2}pageoffset{12}relativepage{19}<br />

part{3}pageoffset{12}relativepage{105}<br />

part{4}pageoffset{12}relativepage{121}<br />

part{5}pageoffset{12}relativepage{171}<br />

part{6}pageoffset{12}relativepage{203}<br />

part{7}pageoffset{12}relativepage{269}<br />

part{8}pageoffset{12}relativepage{319}<br />

part{9}pageoffset{12}relativepage{351}<br />

part{10}pageoffset{12}relativepage{383}<br />

part{11}pageoffset{12}relativepage{411}<br />

part{12}pageoffset{12}relativepage{415}<br />

part{13}pageoffset{12}relativepage{469}<br />

tome{2}pageoffset{12}relativepage{541}<br />

part{14}pageoffset{12}relativepage{545}<br />

eof{}pageoffset{12}relativepage{552}<br />

EOF<br />

Il significato dovrebbe essere intuitivo. Per esempio, il primo tomo inizia dalla 13-esima pagina<br />

(ottenuta sommando 12 a 1) e termina all’inizio del tomo successivo, ovvero alla 552-esima<br />

pagina (541+12-1). L’ultima pagina è la 564-esima.<br />

In questo esempio, il valore 12 ricorrente rappresenta le pagine che precedono il contenuto vero<br />

e proprio del documento, in cui ci possono essere indici generali e introduzioni. Questo valore,<br />

definito qui come page offset, viene semplicemente sommato a quello finale.<br />

271.8.4 Programma di supporto<br />

Alml dispone di un programma di supporto, costituito dall’eseguibile ‘alml-extra’, che consente<br />

di facilitare lo svolgimento di funzioni accessorie, in particolare per la riorganizzazione dei<br />

file PostScript.<br />

alml-extra opzione [argomento]<br />

A seconda dell’opzione utilizzata, può essere richiesto un argomento o meno, che fa riferimento<br />

a un file.


Alml: preparazione e visione generale 2943<br />

Dal momento che le opzioni che riguardano la conversione di file PostScript sono piuttosto<br />

difficili da ricordare, è disponibile anche uno script molto semplice che ne facilita l’uso:<br />

alml-extra-menu file_ps<br />

Le opzioni che vengono descritte nel seguito si riferiscono a ‘alml-extra’, usato direttamente.<br />

Opzioni<br />

--help<br />

Mostra la guida rapida interna e conclude il funzionamento.<br />

--version<br />

Mostra le informazioni sulla versione e conclude il funzionamento.<br />

--ps-group-pages=n_pagine<br />

Prevede che l’argomento finale sia un file PostScript, in cui vengono modificate le stringhe<br />

di definizione delle pagine, in modo che si possano individuare raggruppamenti di n pagine,<br />

di solito per facilitare la rilegatura. In pratica, in questo modo, si individuano più facilmente<br />

le pagine che compongono una segnatura.<br />

--ps-renumber-pages<br />

Prevede che l’argomento finale sia un file PostScript, in cui vengono modificate le stringhe<br />

di definizione delle pagine, in modo che la sequenza sia rinumerata a partire da uno.<br />

--alml-ps-split-tome=file_posizione_pagine<br />

Prevede che l’argomento finale sia un file PostScript, generato attraverso Alml, per il quale<br />

sia disponibile un file contenente la posizione di inizio dei vari tomi (dovrebbe trattarsi di<br />

un file con estensione ‘.pageloc’), che va indicato come argomento dell’opzione stessa.<br />

Quello che si ottiene sono diversi file PostScript, con estensione ‘.n.ps’, dove in particolare<br />

‘.0.ps’ contiene le pagine precedenti al primo tomo effettivo, con la presenza eventuale<br />

di file con estensione ‘.app.ps’ e ‘ndx.ps’, per le pagine delle appendici e degli indici<br />

analitici rispettivamente.<br />

--alml-ps-split-part=file_posizione_pagine<br />

Prevede che l’argomento finale sia un file PostScript, generato attraverso Alml, per il quale<br />

sia disponibile un file contenente la posizione di inizio dei vari tomi (dovrebbe trattarsi di<br />

un file con estensione ‘.pageloc’), che va indicato come argomento dell’opzione stessa.<br />

Quello che si ottiene sono diversi file PostScript, con estensione ‘.n.ps’, dove in particolare<br />

‘.0.ps’ contiene le pagine precedenti alla prima parte effettiva, con la presenza<br />

eventuale di file con estensione ‘.app.ps’ e ‘ndx.ps’, per le pagine delle appendici e<br />

degli indici analitici rispettivamente.<br />

Se il documento che si va a suddividere prevede una suddivisione in tomi, la s<strong>composizione</strong><br />

che si ottiene non è perfetta, perché la fine di una parte che precede un tomo, si trova a<br />

includere le pagine che rappresentano l’inizio del tomo stesso, fino alla pagina che precede<br />

la parte successiva.<br />

--html-index=directory<br />

Genera, attraverso lo standard output, un file HTML che potrebbe essere utilizzato come<br />

file ‘index.html’, contenente un elenco molto semplice dei file contenuti nella directory<br />

indicata.<br />

--html-index-basic=directory<br />

Come ‘--html-index’, senza mostrare le date dei file.<br />

--html-index-basic-recursive


2944 Alml: preparazione e visione generale<br />

Genera una serie di file ‘index.html’, a partire dalla directory corrente e in tutte le<br />

sottodirectory.<br />

--html-to-text-for-spell<br />

Legge lo standard input, che dovrebbe essere costituito da un file HTML, filtrandolo allo<br />

scopo di generare un file di testo puro, utilizzabile per un controllo ortografico di qualche<br />

tipo. Il file che si ottiene viene emesso attraverso lo standard output.<br />

--perl-to-gettext<br />

Legge lo standard input, che dovrebbe essere costituito da un file sorgente Perl, filtrandolo<br />

allo scopo di generare un file di testo, adatto all’analisi da parte di Gettext, che solitamente<br />

riconosce bene solo le stringhe del linguaggio C. Il file che si ottiene viene emesso<br />

attraverso lo standard output.<br />

--a4-to-a5-2-a4<br />

Prevede che l’argomento finale sia un file PostScript, in formato A4, che viene rielaborato<br />

in modo da ottenere due pagine A5 per ogni pagina A4 finale.<br />

Si ottiene un file con estensione ‘.a5-2-a4.ps’.<br />

--a4-to-a6-4-a4<br />

Prevede che l’argomento finale sia un file PostScript, in formato A4, che viene rielaborato<br />

in modo da ottenere quattro pagine A6 per ogni pagina A4 finale.<br />

Si ottiene un file con estensione ‘.a6-4-a4.ps’.<br />

--a4-to-a5-2-a4-1h-1<br />

Prevede che l’argomento finale sia un file PostScript, in formato A4, che viene rielaborato<br />

in modo da ottenere due pagine A5 per ogni pagina A4 finale, che deve essere piegata a<br />

metà, in orizzontale, rilegando il tutto a segnature di un solo foglio.<br />

Si ottiene un file con estensione ‘.a5-2-a4-1h-1.ps’.<br />

--a4-to-a5-2-a4-1h-10<br />

Prevede che l’argomento finale sia un file PostScript, in formato A4, che viene rielaborato<br />

in modo da ottenere due pagine A5 per ogni pagina A4 finale, che deve essere piegata a<br />

metà, in orizzontale, rilegando il tutto a segnature di 10 fogli.<br />

Si ottiene un file con estensione ‘.a5-2-a4-1h-10.ps’.<br />

--a4-to-a6-4-a4-2h-2<br />

Prevede che l’argomento finale sia un file PostScript, in formato A4, che viene rielaborato<br />

in modo da ottenere quattro pagine A6 per ogni pagina A4 finale, che deve essere piegata<br />

a metà, in orizzontale, per due volte, rilegando il tutto a segnature di due fogli. In pratica,<br />

ogni segnatura si ottiene da un solo foglio A4 che viene piegato due volte.<br />

Si ottiene un file con estensione ‘.a6-4-a4-2h-2.ps’.<br />

--a4-to-a6-4-a4-2h-4<br />

Prevede che l’argomento finale sia un file PostScript, in formato A4, che viene rielaborato<br />

in modo da ottenere quattro pagine A6 per ogni pagina A4 finale, che deve essere piegata a<br />

metà, in orizzontale, per due volte, rilegando il tutto a segnature di quattro fogli. In pratica,<br />

ogni segnatura si ottiene da due fogli A4 che vengono piegati assieme per due volte.<br />

Si ottiene un file con estensione ‘.a6-4-a4-2h-4.ps’.<br />

--a4-to-a6-4-a4-2h-6<br />

Prevede che l’argomento finale sia un file PostScript, in formato A4, che viene rielaborato<br />

in modo da ottenere quattro pagine A6 per ogni pagina A4 finale, che deve essere piegata<br />

a metà, in orizzontale, per due volte, rilegando il tutto a segnature di sei fogli. In pratica,<br />

ogni segnatura si ottiene da tre fogli A4 che vengono piegati assieme per due volte.


Alml: preparazione e visione generale 2945<br />

Si ottiene un file con estensione ‘.a6-4-a4-2h-6.ps’.<br />

--a4-to-a6-4-a4-2h-8<br />

Prevede che l’argomento finale sia un file PostScript, in formato A4, che viene rielaborato<br />

in modo da ottenere quattro pagine A6 per ogni pagina A4 finale, che deve essere piegata<br />

a metà, in orizzontale, per due volte, rilegando il tutto a segnature di otto fogli. In pratica,<br />

ogni segnatura si ottiene da quattro fogli A4 che vengono piegati assieme per due volte.<br />

Si ottiene un file con estensione ‘.a6-4-a4-2h-8.ps’.<br />

--a4-to-a6-4-a4-2h-10<br />

Prevede che l’argomento finale sia un file PostScript, in formato A4, che viene rielaborato<br />

in modo da ottenere quattro pagine A6 per ogni pagina A4 finale, che deve essere piegata a<br />

metà, in orizzontale, per due volte, rilegando il tutto a segnature di 10 fogli. In pratica, ogni<br />

segnatura si ottiene da cinque fogli A4 che vengono piegati assieme per due volte.<br />

Si ottiene un file con estensione ‘.a6-4-a4-2h-10.ps’.<br />

--a4-to-a6-4-a4-1v-1<br />

Prevede che l’argomento finale sia un file PostScript, in formato A4, che viene rielaborato<br />

in modo da ottenere quattro pagine A6 per ogni pagina A4 finale, che deve essere piegata a<br />

metà, in verticale, rilegando il tutto a segnature di un foglio.<br />

Si ottiene un file con estensione ‘.a6-4-a4-1v-1.ps’.<br />

--a7x4-to-a7x4-2-a4-1v-1<br />

Prevede che l’argomento finale sia un file PostScript, in formato A7x4, che viene rielaborato<br />

in modo da ottenere due pagine A7x4 per ogni pagina A4 finale, che deve essere piegata a<br />

metà, in verticale, rilegando il tutto a segnature di un foglio.<br />

Si ottiene un file con estensione ‘.a7x4-2-a4-1v-1.ps’.<br />

--a7x4-to-a7x4-2-a4-1v-10<br />

Prevede che l’argomento finale sia un file PostScript, in formato A7x4, che viene rielaborato<br />

in modo da ottenere due pagine A7x4 per ogni pagina A4 finale, che deve essere piegata a<br />

metà, in verticale, rilegando il tutto a segnature di 10 fogli.<br />

Si ottiene un file con estensione ‘.a7x4-2-a4-1v-10.ps’.<br />

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org


Il documento secondo Alml<br />

Capitolo 272<br />

Il DTD di Alml è organizzato per gestire documenti molto grandi, che possono essere suddivisi<br />

in tomi (intesi come volumi che raccolgono un gruppo di parti), parti e capitoli. Tuttavia, la<br />

suddivisione in tomi o in parti resta facoltativa, mentre la divisione in capitoli è obbligatoria.<br />

Alml non ha ancora raggiunto una sistemazione «definitiva» e si evolverà ancora assieme a Appunti<br />

di informatica libera. In questo capitolo non sono descritti tutti i dettagli sull’impostazione<br />

attuale del DTD di Alml; eventualmente si può sempre studiare il DTD stesso. Tuttavia, il DTD<br />

non rappresenta in modo perfetto i vincoli che si pongono poi nella <strong>composizione</strong>.<br />

Quando devono essere indicate delle dimensioni che prevedono la specificazione dell’unità di<br />

misura, si usano le sigle elencate nella tabella 272.1.<br />

Tabella 272.1. Sigle delle unità di misura utilizzabili con Alml.<br />

Sigla<br />

pt<br />

bp<br />

pc<br />

in<br />

cm<br />

mm<br />

Unità di misura corrispondente<br />

Punti tipografici corrispondenti a 1/72,27 di pollice.<br />

Punti tipografici corrispondenti a 1/72 di pollice.<br />

Pica corrispondenti a 1/6 di pollice.<br />

Pollici.<br />

Centimetri.<br />

Millimetri.<br />

272.1 Organizzazione generale<br />

Secondo il DTD di Alml, il documento ha una struttura generale ben definita:<br />

<br />

<br />

<br />

...<br />

<br />

[<br />

...<br />

]<br />

<br />

...<br />

<br />

[<br />

...<br />

]<br />

[<br />

...<br />

]<br />

<br />

In questa struttura, gli elementi ‘head’ e ‘body’ sono obbligatori, mentre gli altri possono essere<br />

omessi, se non sono richiesti.<br />

Si può intuire il senso della cosa: l’elemento ‘head’ serve a contenere informazioni amministrative,<br />

oltre a ciò che deve apparire nelle primissime pagine (il titolo dell’opera, il copyright<br />

ecc.); l’elemento ‘intro’ permette di inserire dei capitoli speciali da trattare come introduzioni<br />

o prefazioni, che come tali non risultano numerate; l’elemento ‘body’ permette di inserire capitoli,<br />

oppure parti, o tomi; l’elemento ‘appendix’ permette di inserire capitoli da trattare come<br />

appendici, numerate convenzionalmente in modo letterale; infine, l’elemento ‘index’ permette<br />

di inserire capitoli speciali per l’inclusione degli indici analitici.<br />

2946


Il documento secondo Alml 2947<br />

272.2 Dalla copertina all’indice generale<br />

L’elemento che delimita il documento nella sua interezza, ‘alml’, può contenere due attributi<br />

facoltativi: ‘lang’ e ‘spacing’. L’attributo ‘lang’ permette di definire il linguaggio generale<br />

con cui è stato scritto il documento, attraverso una sigla secondo lo standard ISO 639 (sezione<br />

543). 1<br />

L’attributo ‘spacing’ permette di definire il modo in cui vengono gestiti gli spazi alla fine dei<br />

periodi. Assegnando la parola chiave ‘normal’, si ottiene la spaziatura normale della convenzione<br />

inglese, in cui lo spazio dopo un punto ha una lunghezza maggiore degli altri; in alternativa,<br />

assegnando la parola chiave ‘uniform’, oppure ‘french’, si ottiene una spaziatura uniforme,<br />

come richiede la tradizione tipografica italiana e anche di altri paesi.<br />

In generale, un documento scritto in lingua italiana dovrebbe utilizzare l’elemento ‘alml’ in<br />

questo modo:<br />

<br />

Tabella 272.2. Elementi SGML dalla copertina all’indice generale.<br />

Elemento o Aperturra<br />

Chiusu-<br />

attributo<br />

Contenuto Descrizione<br />

alml Sì Sì Contenitore del documento.<br />

lang -- -- Attributo Sigla ISO 639 del linguaggio.<br />

spacing -- -- Attributo ‘normal’, ‘french’ e ‘uniform’.<br />

head Sì Sì Intestazione del documento.<br />

admin Sì Sì Informazioni amministrative.<br />

description<br />

Descrizione in breve del documento.<br />

Sì Sì<br />

keywords Sì Sì Elenco di parole chiave.<br />

Contenuto di un elemento HTML<br />

htmlmeta Sì Sì<br />

‘META’.<br />

name -- -- Attributo Equivalente all’HTML.<br />

lang -- -- Attributo Equivalente all’HTML.<br />

chapterdefinitiolo.<br />

Definizione alternativa del capito-<br />

Sì Sì<br />

partdefinition Sì Sì Definizione alternativa della parte.<br />

tomedefinition Sì Sì Definizione alternativa del tomo.<br />

printedfontsize Sì Sì Corpo del carattere in punti.<br />

type -- -- Attributo<br />

Definisce il contesto a cui si fa<br />

riferimento.<br />

printedpagesize Sì Sì Margini e giustezza.<br />

type -- -- Attributo<br />

Definisce il contesto a cui si fa<br />

riferimento.<br />

title Sì Sì %inline; Titolo del documento.<br />

subtitle Sì Sì %inline; Sottotitolo.<br />

author Sì Sì %inline; Autore.<br />

date Sì Sì #PCDATA Data.<br />

edition Sì Sì %inline; Edizione, se diversa dalla data.<br />

version Sì Sì %inline; Versione, se diversa dall’edizione.<br />

frontcovertop Sì Sì %block; Blocco che precede il titolo.<br />

abstract Sì Sì %block; Descrizione del contenuto.<br />

frontcoverbottom Sì Sì %block; Testo aggiuntivo di copertina, dopo<br />

il titolo e le altre indicazioni<br />

standard.<br />

backcover Sì Sì %block; Contenuto della copertina finale.<br />

textbeforelegal Sì Sì %block;<br />

Testo prima delle informazioni<br />

legali.<br />

1 Quando le informazioni su un certo linguaggio non sono disponibili, si applicano le convenzioni inglesi.


2948 Il documento secondo Alml<br />

Elemento o Aperturra<br />

Chiusu-<br />

attributo<br />

Contenuto Descrizione<br />

legal Sì Sì %block; Informazioni legali.<br />

dedications Sì Sì %block; Pagina della dedica.<br />

textafterdedications<br />

Sì Sì %block; Testo successivo alla dedica.<br />

maincontents Sì Vuoto Inserimento dell’indice generale.<br />

levels -- -- Attributo Livelli di dettaglio dell’indice.<br />

nopages -- -- Attributo ‘true’, ‘false’.<br />

La tabella 272.2 mostra in breve l’elenco degli elementi che riguardano l’intestazione del documento;<br />

cosa che contiene tutte le informazioni per realizzare la copertina, fino ad arrivare<br />

all’indice generale.<br />

Si può osservare che tutto è contenuto nell’elemento ‘head’, all’inizio del quale prende posto<br />

un altro «contenitore» denominato ‘admin’. Al suo interno sono previsti elementi relativi a informazioni<br />

amministrative, in particolare ‘description’ e ‘keywords’, il cui scopo è quello di<br />

generare degli elementi ‘META’ corrispondenti nella <strong>composizione</strong> HTML:<br />

<br />

...<br />

<br />

<br />

...<br />

<br />

Inoltre, si possono aggiungere anche altri elementi ‘META’ di HTML, attraverso l’elemento<br />

‘HTMLMETA’, come si vede nell’esempio seguente:<br />

<br />

<br />

GNU/Linux e altro software libero<br />

Linux, GNU/Linux, Unix, software, software libero,<br />

free software<br />

Document<br />

15 days<br />

ALL<br />

<br />

...<br />

...<br />

<br />

Gli elementi ‘chapterdefinition’, ‘partdefinition’ e ‘tomedefinition’ vengono<br />

descritti più avanti in questo capitolo (272.8).<br />

L’elemento ‘printedfontsize’ consente di definire l’altezza del carattere indicato attraverso<br />

l’attributo ‘type’, per la <strong>composizione</strong> stampata.<br />

L’elemento ‘printedpagesize’ consente di definire I margini e la giustezza per la<br />

<strong>composizione</strong> stampata, in base al contesto indicato dall’attributo ‘type’.<br />

L’elemento ‘title’ serve a indicare il titolo del documento; gli elementi eventuali ‘subtitle’<br />

permettono di inserire dei sottotitoli successivi.<br />

L’elemento ‘abstract’, facoltativo, permette l’inserimento di una descrizione, più o meno articolata,<br />

composta da blocchi di testo (ciò che nella tabella viene rappresentato schematicamente<br />

dalla macro ‘%block;’).<br />

Successivamente è possibile inserire uno o più elementi ‘author’, uno per il nominativo di ogni<br />

coautore, eventualmente.


Il documento secondo Alml 2949<br />

Gli elementi ‘date’ e ‘edition’ servono per indicare una data o una sigla differente che rappresenti<br />

in qualche modo l’edizione. In generale dovrebbe essere sufficiente l’indicazione di uno<br />

solo di questi due elementi.<br />

L’elemento ‘frontcovertop’ permette l’inserzione di blocchi prima del titolo; così, l’elemento<br />

‘frontcoverbottom’ consente di fare la stessa cosa dopo il titolo e le altre indicazioni standard.<br />

L’elemento ‘backcover’ permette di definire il contenuto della copertina finale.<br />

Gli elementi successivi riguardano la seconda pagina assoluta e quelle successive.<br />

Nella seconda pagina appaiono di solito le informazioni sul copyright, nella parte bassa, mentre<br />

nella parte superiore potrebbero esserci altre informazioni, come una breve descrizione degli<br />

autori. L’elemento ‘textbeforelegal’ permette di inserire blocchi di testo da collocare nella<br />

prima parte della seconda pagina, mentre l’elemento ‘legal’ è fatto per le informazioni legali, a<br />

partire dal copyright.<br />

Dopo le informazioni legali è possibile inserire una pagina di dediche, attraverso l’elemento<br />

‘dedications’. Eventualmente, se necessario, è possibile aggiungere altre notizie all’interno<br />

dell’elemento ‘textafterdedications’ che segue le dediche.<br />

Infine, è possibile collocare l’elemento vuoto ‘maincontents’ per ottenere l’inserimento dell’indice<br />

generale. L’attributo ‘levels’ permette di definire il livello di dettaglio desiderato dell’indice:<br />

il numero zero rappresenta il minimo e fa in modo di ottenere informazioni fino alle<br />

parti, mentre valori superiori aumentano il dettaglio. Assegnando all’attributo ‘nopages’ il valore<br />

‘true’, si richiedere espressamente l’eliminazione dei riferimenti ai numeri di pagina; cosa<br />

che può essere utile soltanto nella <strong>composizione</strong> per la stampa.<br />

272.2.1 Margini e giustezza nella <strong>composizione</strong> stampata<br />

È possibile definire i margini e la giustezza (la larghezza del testo) della <strong>composizione</strong> stampata,<br />

senza dover intervenire modificando lo stile TeX. Si utilizza per questo l’elemento<br />

‘printedpagesize’, all’interno dell’elemento ‘admin’, nell’intestazione del documento, specificando<br />

il contesto con l’attributo ‘type’. Si osservi l’esempio in cui si mostrano tutti i valori<br />

disponibili per l’attributo ‘type’:<br />

<br />

<br />

...<br />

2.5cm<br />

2.5cm<br />

3.5cm<br />

15cm<br />

...<br />

<br />

...<br />

<br />

Il tipo ‘topmargin’ è il margine superiore, fino alla base del testo normale (la riga di intestazione<br />

viene collocata automaticamente); il tipo ‘bottommargin’ è il margine inferiore; il tipo<br />

‘internalmargin’ è il margine sinistro per le pagine destre e il margine destro per le pagine<br />

sinistre; il tipo ‘bodywidth’ è la giustezza, ovvero la larghezza della colonna in cui scorre<br />

effettivamente il testo.<br />

Quando la <strong>composizione</strong> non richiede un margine sinistro diverso da quello destro, si ignora<br />

il valore del margine interno, utilizzando margini uguali.


2950 Il documento secondo Alml<br />

Tabella 272.3. Valori dell’attributo ‘type’ dell’elemento ‘printedpagesize’.<br />

Valore<br />

topmargin<br />

bottommargin<br />

internalmargin<br />

bodywidth<br />

Contesto a cui si fa riferimento<br />

Margine superiore.<br />

Margine inferiore.<br />

Margine interno.<br />

Giustezza.<br />

Il margine esterno non viene indicato, perché si preferisce indicare la giustezza, essendo un valore<br />

che è meglio non vari automaticamente, dal momento che da questo dipendono anche le<br />

dimensioni che si assegnano ad altri componenti contenuti nel testo.<br />

Il formato della carta viene definito al di fuori del sorgente SGML, attraverso le opzioni di Alml.<br />

Ciò permette di produrre composizioni differenti a seconda del tipo di carta disponibile. Tuttavia,<br />

è evidente che le dimensioni adottate per la carta devono essere compatibili con i margini e la<br />

giustezza richiesti nel sorgente SGML.<br />

272.2.2 Corpo del carattere nella <strong>composizione</strong> stampata<br />

È possibile definire il corpo del carattere, nella <strong>composizione</strong> stampata, in alcune situazioni<br />

importanti, senza dover intervenire modificando lo stile TeX. Si utilizza per questo l’elemento<br />

‘printedfontsize’, all’interno dell’elemento ‘admin’, nell’intestazione del documento,<br />

specificando il contesto con l’attributo ‘type’. Si osservi l’esempio:<br />

<br />

<br />

...<br />

4mm<br />

3.5mm<br />

...<br />

<br />

...<br />

<br />

Il tipo ‘normal’ è il carattere normale del testo; il tipo ‘table’ è il carattere utilizzato nelle tabelle<br />

di Alml. La distanza tra le righe viene impostata automaticamente al 120 % della dimensione<br />

del carattere utilizzato.<br />

La dimensione del carattere deve essere armoniosa rispetto al resto del documento. Bisogna<br />

provare per rendersi conto se il risultato che si ottiene è accettabile oppure no.<br />

Tabella 272.4. Valori dell’attributo ‘type’ dell’elemento ‘printedfontsize’.<br />

Valore<br />

title<br />

tomeheading<br />

h0<br />

h1<br />

h2<br />

h3<br />

h4<br />

normal<br />

table<br />

Carattere a cui si fa riferimento<br />

Titolo dell’opera che appare in copertina.<br />

Titolo dei tomi nella loro pagina iniziale.<br />

Titolo delle parti nella loro pagina iniziale.<br />

Titolo dei capitoli.<br />

Titolo delle sezioni di primo livello.<br />

Titolo delle sottosezioni.<br />

Titolo delle sotto-sottosezioni.<br />

Testo normale.<br />

Testo delle tabelle.


Il documento secondo Alml 2951<br />

272.3 Contenuto<br />

Il contenuto del documento si articola in tre blocchi fondamentali: ‘intro’, ‘body’ e<br />

‘appendix’. In coda, possono apparire degli indici analitici, racchiusi nel blocco dell’elemento<br />

‘index’.<br />

Questa classificazione in blocchi va a compensare la mancanza di elementi atti a circoscrivere<br />

l’estensione delle sezioni in cui si articola il testo. La mancanza di una strutturazione dettagliata<br />

delle sezioni 2 fa sì che in presenza di errori di sintassi SGML, l’analizzatore tenda a segnalare<br />

in seguito una quantità di errori inesistenti che non vanno considerati. In tali situazioni, si<br />

correggono i primi errori evidenti e si ripete la verifica SGML.<br />

272.3.1 Introduzione<br />

Dopo l’elemento ‘head’ è prevista la possibilità di inserire l’elemento ‘intro’, il cui scopo è<br />

quello di delimitare uno o più capitoli speciali, da intendere come prefazioni o introduzioni a<br />

vario titolo.<br />

Per la definizione del capitolo, si veda quanto descritto a proposito dell’elemento ‘body’.<br />

272.3.2 Corpo<br />

Il corpo vero e proprio del documento è contenuto nell’elemento ‘body’, il quale si può articolare<br />

in tomi, parti o capitoli. Sta all’autore scegliere quale livello di suddivisione superiore<br />

adottare. È evidente che se si usa una suddivisione in tomi, si prevede una sottoclassificazione<br />

in parti, che poi si dividono in capitoli; se si usa una suddivisione in parti, è obbligatoria una<br />

sottoclassificazione in capitoli.<br />

Eccezionalmente, un tomo può contenere solo capitoli, senza parti, quando per qualche<br />

ragione ciò è necessario.<br />

Tomi, parti, capitoli e sezioni inferiori sono delimitate materialmente attraverso la dichiarazione<br />

del titolo relativo, come avviene in HTML. La tabella 272.5 elenca gli elementi relativi, assieme<br />

agli attributi eventuali.<br />

Tabella 272.5. Dichiarazione dei titoli di tomi, parti, capitoli e sezioni inferiori, oltre ad<br />

altri elementi essenziali nella definizione della s<strong>composizione</strong> del testo.<br />

Elemento o Aperturra<br />

Chiusu-<br />

Contenuto Descrizione<br />

attributo<br />

tomeheading Sì Sì %inline; Titolo del tomo.<br />

id -- -- Attributo Ancora di riferimento.<br />

lang -- -- Attributo Linguaggio del tomo.<br />

bookmark -- -- Attributo<br />

Testo da usare come segnalibro<br />

alternativo per la <strong>composizione</strong><br />

PDF.<br />

tomecontents Sì Vuoto Indice generale del tomo.<br />

levels -- -- Attributo Livello di dettaglio dell’indice.<br />

nopages -- -- Attributo ‘true’, ‘false’.<br />

h0 Sì Sì %inline; Titolo della parte.<br />

id -- -- Attributo Ancora di riferimento.<br />

lang -- -- Attributo Linguaggio della parte.<br />

2 Qui si intendono sezioni a qualsiasi livello, compresi i capitoli, le parti e i tomi.


2952 Il documento secondo Alml<br />

Elemento o<br />

attributo<br />

Contenuto<br />

bookmark -- -- Attributo<br />

Descrizione<br />

Testo da usare come segnalibro<br />

alternativo per la <strong>composizione</strong><br />

PDF.<br />

partcontents Sì Vuoto Indice generale della parte.<br />

levels -- -- Attributo Livello di dettaglio dell’indice.<br />

nopages -- -- Attributo ‘true’, ‘false’.<br />

h1 Sì Sì %inline; Titolo del capitolo.<br />

id -- -- Attributo Ancora di riferimento.<br />

lang -- -- Attributo Linguaggio del capitolo.<br />

bookmark -- -- Attributo<br />

Testo da usare come segnalibro<br />

alternativo per la <strong>composizione</strong><br />

PDF.<br />

chaptercontents Sì Vuoto Indice generale del capitolo.<br />

levels -- -- Attributo Livello di dettaglio dell’indice.<br />

nopages -- -- Attributo ‘true’, ‘false’.<br />

h2 Sì Sì %inline; Titolo della sezione.<br />

id -- -- Attributo Ancora di riferimento.<br />

bookmark -- -- Attributo<br />

Testo da usare come segnalibro<br />

alternativo per la <strong>composizione</strong><br />

PDF.<br />

h3 Sì Sì %inline; Titolo della sottosezione.<br />

id -- -- Attributo Ancora di riferimento.<br />

Testo da usare come segnalibro<br />

bookmark -- -- Attributo alternativo per la <strong>composizione</strong><br />

PDF.<br />

h4 Sì Sì %inline; Titolo della sotto-sottosezione.<br />

id -- -- Attributo Ancora di riferimento.<br />

Apertura<br />

Chiusura<br />

Testo da usare come segnalibro<br />

bookmark -- -- Attributo alternativo per la <strong>composizione</strong><br />

PDF.<br />

segment Sì Sì Segmento di testo finale.<br />

segmenthead Sì Sì %inline; Titolo di un segmento.<br />

extramaincontentbile<br />

ovunque.<br />

Indice generale dell’opera, piazza-<br />

Sì<br />

Vuoto<br />

levels -- -- Attributo Livello di dettaglio dell’indice.<br />

nopages -- -- Attributo ‘true’, ‘false’.<br />

endofchapter Sì Sì %inline; Riga finale del capitolo.<br />

Nella parte iniziale delle classificazioni principali (tomi, parti e capitoli), è possibile collocare<br />

la richiesta di inserimento di un indice generale specifico. Si ottiene questo con gli elementi:<br />

‘tomecontents’, ‘partcontents’ e ‘chaptercontents’ (è disponibile anche l’elemento<br />

‘extramaincontents’ che riguarda l’opera intera e può essere collocato ovunque). Ognuno di<br />

questi elementi prevede l’attributo ‘levels’, con il quale è possibile stabilire il livello di dettaglio<br />

di tali indici, tenendo presente che con il numero zero si ottengono voci fino alle parti,<br />

con uno si ottengono anche i capitoli, mentre con valori superiori si accede alle sezioni di livello<br />

inferiore. Anche in questo caso è possibile inibire la segnalazione delle pagine (nel caso di<br />

<strong>composizione</strong> per la stampa), utilizzando l’attributo ‘nopages’.<br />

Alla fine del testo di ognuna di queste classificazioni, prima dell’inizio di una sottoclassificazione<br />

eventuale, è possibile collocare un «segmento» di testo, con un titolo che assomiglia a una<br />

voce di un elenco descrittivo. Si tratta dell’elemento ‘segment’, i cui titoli si indicano nell’elemento<br />

‘segmenthead’. Questo gruppo rappresenta un’anomalia nell’organizzazione generale,<br />

introdotta solo per mantenere la compatibilità con le convenzioni usate in passato nella redazione<br />

di questa opera.


Il documento secondo Alml 2953<br />

Infine, sempre per mantenere la compatibilità con il passato, esiste l’elemento ‘endofchapter’,<br />

il cui scopo è quello di consentire l’inserimento di una riga di informazioni alla fine del capitolo.<br />

272.3.3 Appendici<br />

Dopo il corpo è possibile inserire l’elemento ‘appendix’, il cui scopo è quello di delimitare uno<br />

o più capitoli speciali, da intendere come appendici.<br />

272.3.4 Indici analitici<br />

Alml consente la definizione di diversi tipi di indici analitici. Per questi è previsto uno spazio<br />

speciale collocato dopo le appendici, se ci sono, o in caso contrario subito dopo il corpo. Si tratta<br />

dell’elemento ‘index’, che prevede l’inserimento di capitoli, come nel caso delle appendici.<br />

L’inserimento di un elenco riferito a un indice analitico particolare si ottiene con l’elemento<br />

vuoto ‘printindex’. Verrà descritto meglio in seguito l’uso di questo elemento, perché Alml è<br />

in grado di gestire più indici analitici differenti.<br />

272.3.5 Suddivisioni speciali<br />

Oltre alle suddivisioni standard nella forma ‘hn’, sono disponibili altre suddivisioni per scopi<br />

particolari. Sono previsti due capitoli speciali per le presentazioni (diapositive o lucidi per lavagna<br />

luminosa) e per i prospetti schematici riassuntivi (tavole sintetiche e simili), oltre a due tipi<br />

di sezioni per domande e risposte.<br />

Elemento o<br />

attributo<br />

Tabella 272.6. Dichiarazione dei titoli di capitoli e sezioni speciali.<br />

Apertura<br />

Chiusura<br />

Contenuto<br />

slideh1 Sì Sì %inline;<br />

Descrizione<br />

Titolo della diapositiva o del lucido.<br />

id -- -- Attributo Ancora di riferimento.<br />

lang -- -- Linguaggio della diapositiva o del<br />

Attributo<br />

lucido.<br />

Titolo della scheda sintetica riassuntiva.<br />

sheeth1 Sì Sì %inline;<br />

id -- -- Attributo Ancora di riferimento.<br />

lang -- -- Attributo Linguaggio della scheda sintetica.<br />

faqh2 Sì Sì %inline;<br />

Titolo del gruppo di domande e<br />

risposte.<br />

id -- -- Attributo Ancora di riferimento.<br />

faqh3 Sì Sì %inline; Domanda a cui segue una risposta.<br />

id -- -- Attributo Ancora di riferimento.<br />

Osservando la tabella 272.6, si può intuire che gli elementi ‘slideh1’ e ‘sheeth1’ si usano al<br />

posto di un capitolo normale. La differenze più importante rispetto all’elemento ‘h1’, sta nel fatto<br />

che non possono contenere altre suddivisioni in sezioni; inoltre, nella <strong>composizione</strong> per la stampa<br />

non appare il numero della pagina. Anche se non c’è modo di controllare la dimensione del<br />

contenuto, è bene che ogni diapositiva e ogni scheda occupi una sola pagina nella <strong>composizione</strong><br />

per la stampa.<br />

L’elemento ‘faqh2’ va usato al posto di ‘h2’, all’interno di un capitolo normale. Permette di<br />

introdurre un gruppo di domande e risposte, precedendole eventualmente da qualche blocco di<br />

testo introduttivo.


2954 Il documento secondo Alml<br />

L’elemento ‘faqh3’ serve a contenere il testo di una domanda, anche se potrebbe essere più lungo<br />

di un titolo normale. Il testo viene rappresentato in modo evidenziato, ma non tanto quanto un<br />

elemento ‘h3’ normale. Dopo l’elemento ‘faqh3’ ci si aspetta di trovare la risposta alla domanda.<br />

Eventualmente, la struttura composta da ‘faqh2’ e ‘faqh3’ può essere utilizzata anche per<br />

realizzare dei questionari o dei test valutativi.<br />

272.3.6 Titoli delle sezioni e interruzioni di pagina<br />

In generale, nella <strong>composizione</strong> stampata, non è garantito che il titolo di una sezione si trovi nella<br />

stessa pagina in cui inizia il testo della sezione stessa.<br />

Solo quando ciò che segue il titolo di una sezione è un elemento ‘p’, ‘syntax’ o ‘command’,<br />

si forma un legame inscindibile.<br />

272.4 Documento multilingua<br />

Oltre a indicare il linguaggio nell’elemento ‘alml’, attraverso l’attributo ‘lang’, lo stesso attributo<br />

è disponibile all’inizio dei tomi, delle parti e dei capitoli. In pratica, si può usare l’attributo<br />

‘lang’ anche negli elementi ‘tomeheading’, ‘h0’ e ‘h1’.<br />

Contrariamente alla logica comune, in questo caso l’attributo ‘lang’ attribuisce il valore della<br />

scelta linguistica a tutto il tomo, alla parte o al capitolo relativo. Un tomo, una parte o un capitolo<br />

che non abbiano la definizione esplicita di un linguaggio, ereditano la definizione del livello<br />

precedente.<br />

La motivazione più importante per la quale è stato introdotto questo attributo nella dichiarazione<br />

dei tomi, delle parti e dei capitoli, sta nel fatto che così la <strong>composizione</strong> in HTML genera file con<br />

intestazioni adeguate, anche per l’indicizzazione delle informazioni.<br />

La sigla della lingua va attribuita secondo lo standard ISO 639 (sezione 543). Se non è stata prevista<br />

la traduzione dei termini relativi alla <strong>composizione</strong> nella lingua richiesta, questi si ottengono<br />

in inglese.<br />

L’esempio seguente mostra la dichiarazione esplicita di un capitolo che è da considerare in lingua<br />

inglese:<br />

Here I am<br />

La definizione del tomo, della parte o del capitolo viene adattata alla lingua, solo se questa<br />

non è stata modificata attraverso gli elementi ‘tomedefinition’, ‘partdefinition’ e<br />

‘chapterdefinition’, descritti più avanti in questo capitolo.<br />

272.5 Blocchi di testo ed elementi inseriti all’interno delle<br />

righe<br />

A parte gli elementi strutturali del documento, il DTD di Alml organizza il testo in due gruppi<br />

fondamentali: i blocchi di testo, a cui corrisponde l’entità parametrica ‘%block;’, e gli elementi<br />

collocabili all’interno delle righe, corrispondente all’entità ‘%inline;’. Il caso tipico di elemento<br />

che costituisce un blocco di testo è il paragrafo, ‘p’, mentre il caso tipico di elemento che<br />

costituisce un’inserzione nella riga è l’enfatizzazione, ‘em’. La tabella 272.7 riepiloga gli elementi<br />

comuni che riguardano inserzioni all’interno della riga, mentre quelli che rappresentano<br />

un blocco e altri elementi speciali sono descritti separatamente in sezioni apposite.


Il documento secondo Alml 2955<br />

Tabella 272.7. Elementi inseriti all’interno delle righe.<br />

Elemento o Aperturra<br />

Chiusu-<br />

attributo<br />

Contenuto Descrizione<br />

em Sì Sì %inline; Enfasi normale.<br />

strong Sì Sì %inline; Enfasi rafforzata.<br />

big Sì Sì %inline; Testo relativamente più grande.<br />

small Sì Sì %inline; Testo relativamente più piccolo.<br />

acronym Sì Sì %inline; Acronimo.<br />

dacronym Sì Sì %inline; Descrizione di un acronimo.<br />

kbd Sì Sì %inline; Tasto.<br />

button Sì Sì %inline; Bottone o tasto grafico.<br />

menuitem Sì Sì %inline; Voce di un menù.<br />

asciicode Sì Sì %inline; Codice ASCII.<br />

code Sì Sì %inline; Codice (come in HTML).<br />

samp Sì Sì %inline; Stringa (come in HTML).<br />

kerneloption Sì Sì %inline; Opzione del kernel.<br />

file Sì Sì<br />

var|em|#PCDA- File o directory.<br />

TA<br />

dfn Sì Sì<br />

#PCDATA | special<br />

Definizione.<br />

strdfn Sì Sì %inline; Definizione in lingua straniera.<br />

Termine speciale per qualche ragione.<br />

special Sì Sì #PCDATA<br />

special -- -- Nome attribuito al genere del<br />

Attributo<br />

termine.<br />

sup Sì Sì<br />

var|em|strong| Apice.<br />

#PCDATA<br />

sub Sì Sì<br />

var|em|strong| Pedice.<br />

#PCDATA<br />

pwr Sì Sì<br />

var|em|strong| Potenza (esponente).<br />

#PCDATA<br />

Riferimento per la navigazione<br />

navlink Sì Sì #PCDATA<br />

HTML.<br />

272.5.1 Numeri<br />

La rappresentazione uniforme di valori numerici, specie quando si opera spesso con basi di numerazione<br />

insolite, diventa un aspetto delicato. Alml prevede alcuni elementi da utilizzare all’interno<br />

delle righe per delimitare valori numerici, eventualmente con basi di numerazioni particolari,<br />

come si vede nella tabella 272.8.<br />

Elemento o<br />

attributo<br />

Tabella 272.8. Elementi inseriti all’interno delle righe per la rappresentazione uniforme<br />

di valori numerici.<br />

Apertura<br />

Chiusura<br />

Contenuto<br />

num Sì Sì [+-]?[0-9]+[.,]?[0-9]*<br />

exa Sì Sì<br />

dec Sì Sì<br />

oct Sì Sì<br />

bin Sì Sì<br />

Numero decimale comune.<br />

var|em|strong|#PCDA-<br />

TA<br />

var|em|strong|#PCDA-<br />

TA<br />

var|em|strong|#PCDA-<br />

TA<br />

var|em|strong|#PCDA-<br />

TA<br />

Descrizione<br />

Numero in base 16.<br />

Numero in base 10.<br />

Numero in base 8.<br />

Numero in base 2.


2956 Il documento secondo Alml<br />

Il caso dell’elemento ‘num’ è speciale. In particolare, si fa riferimento a un numero in base 10, in<br />

cui non si mostra la base di numerazione, ma si usa una modalità di rappresentazione standard.<br />

Per questa ragione, il numero in questione deve essere inserito come previsto, utilizzando la<br />

virgola o il punto come separatore della parte decimale, 3 aggiungendo il segno all’inizio, se<br />

necessario, senza usare altri spazi o altri caratteri. Il numero viene elaborato separando le cifre a<br />

terne.<br />

Per quanto riguarda gli altri elementi, a seconda del tipo di <strong>composizione</strong> si utilizza un modo<br />

diverso per mostrare la base di numerazione. Tuttavia, in questi casi il contenuto degli elementi<br />

non è strettamente letterale, come si vede dalla tabella.<br />

272.5.2 Elenchi e simili<br />

Gli elenchi di Alml sono molto semplici. Si tratta dei soliti elenchi puntati, numerati e descrittivi.<br />

Questi si comportano in modo molto simile all’HTML; la differenza sostanziale sta nel fatto che<br />

il contenuto delle voci è composto da uno o più blocchi di testo, mentre in HTML è consentita<br />

anche la presenza di righe pure e semplici.<br />

Tabella 272.9. Elenchi.<br />

Elemento o Aperturra<br />

Chiusu-<br />

attributo<br />

Contenuto Descrizione<br />

dl Sì Sì Elenco descrittivo.<br />

dt Sì Sì %inline; Termine descrittivo.<br />

dd Sì Sì %block; Descrizione relativa.<br />

ol Sì Sì Elenco numerato.<br />

li Sì Sì %block; Elemento dell’elenco.<br />

ul Sì Sì Elenco puntato.<br />

li Sì Sì %block; Elemento dell’elenco.<br />

272.5.3 Testo letterale o quasi<br />

L’inclusione di testo letterale in un sorgente SGML è sempre un problema. Alml prevede tre<br />

ambienti diversi: ‘verbatimpre’, ‘asciiart’ e ‘pre’. Nei primo due casi si può scrivere senza<br />

alcuna preoccupazione, tranne per il fatto che il testo va inserito in una sezione marcata di tipo<br />

‘CDATA’; nel terzo caso invece, è necessario comportarsi come nel testo normale, utilizzando le<br />

entità standard quando servono, potendo includere anche gran parte degli elementi che rappresentano<br />

un’inserzione all’interno di una riga. In entrambi i casi vengono rispettate le interruzioni<br />

di riga.<br />

<br />

<br />

<br />

<br />

uno<br />

&amp;<br />

due<br />

<br />

I due esempi portano allo stesso risultato:<br />

3 Il segno meno, va indicato con il trattino normale.


Il documento secondo Alml 2957<br />

uno<br />

&<br />

due<br />

In generale si sceglierà il primo o il secondo modo (quando appropriato), mentre il terzo lo si<br />

riserva ai casi in cui si devono inserire le cose che i primi due non possono contenere.<br />

In un documento a carattere tecnico-informatico, è essenziale la possibilità di indicare dei modelli<br />

sintattici. Alml prevede l’uso di un elemento simile a ‘pre’, dedicato precisamente a questo<br />

scopo: ‘syntax’.<br />

<br />

man n_sezione nome<br />

<br />

All’interno di questo elemento si possono inserire altri elementi specifici per rappresentare i<br />

componenti della sintassi. Infatti, è necessario distinguere tra parole chiave, metavariabili e altre<br />

indicazioni. In generale, quello che si scrive normalmente deve essere inteso come un dato fisso,<br />

ovvero delle parole chiave o delle stringhe fisse. Per indicare un contenuto variabile si utilizza<br />

l’elemento ‘var’ per delimitare la denominazione di un qualcosa di variabile (un’opzione o<br />

simile).<br />

Altri elementi speciali servono a guidare la lettura della sintassi: ‘synsqb’ delimita una parte<br />

della sintassi che va intesa come facoltativa e si traduce generalmente con delle parentesi<br />

quadre che, se possibile, si distinguono dal testo normale; ‘syncub’ delimita una parte della<br />

sintassi che va intesa come un corpo unico e si traduce generalmente con delle parentesi graffe<br />

speciali; ‘synverbar’ (elemento vuoto) indica un’alternativa e si rappresenta con una barra verticale.<br />

Nell’uso di questi elementi <strong>occorre</strong> sempre un po’ di prudenza, tenendo conto dei tipi di<br />

<strong>composizione</strong> in cui non è possibile mostrare questi simboli in forme diverse dal normale.<br />

Tabella 272.10. Elementi SGML che riguardano la rappresentazione di testo<br />

preformattato.<br />

Elemento o Aperturra<br />

Chiusu-<br />

Contenuto Descrizione<br />

attributo<br />

pre Sì Sì %inline; Testo preformattato.<br />

Ampiezza massima in caratteri del<br />

width -- -- Attributo testo; zero richiede espressamente<br />

le stesse dimensioni del contesto.<br />

pnewline<br />

Continuazione nella riga successiva.<br />

Sì Vuoto<br />

verbatimpre Sì Sì testo letterale Testo letterale preformattato.<br />

Ampiezza massima in caratteri del<br />

width -- -- Attributo testo; zero richiede espressamente<br />

le stesse dimensioni del contesto.<br />

syntax Sì Sì %inline; Modello sintattico preformattato.<br />

width -- -- Attributo<br />

Ampiezza massima in caratteri del<br />

testo; zero richiede espressamente<br />

sep -- -- Attributo<br />

le stesse dimensioni del contesto.<br />

‘none’, ‘border’.<br />

synsqb<br />

Parentesi quadre di un modello<br />

Sì Sì %inline;<br />

sintattico.<br />

syncub<br />

Parentesi graffe di un modello<br />

Sì Sì %inline;<br />

sintattico.<br />

synverbar<br />

Barra verticale di un modello<br />

Sì Sì %inline;<br />

sintattico.<br />

var Sì Sì %inline; Metavariabile sintattica.<br />

synellipsis Sì Vuoto Ellissi nei modelli sintattici.<br />

snewline Sì Vuoto<br />

Continuazione nella riga successiva.


2958 Il documento secondo Alml<br />

Si tenga in considerazione il fatto che gli elementi ‘synsqb’, ‘syncub’, ‘synverbar’ e ‘var’,<br />

possono essere utilizzati anche al di fuori dell’elemento ‘syntax’, in qualità di inserzioni<br />

normali nelle righe.<br />

La riga di un modello sintattico che si estende troppo in orizzontale, può essere spezzata e ripresa<br />

inserendo l’elemento vuoto ‘snewline’, in modo da ottenere una segnalazione evidente<br />

nella <strong>composizione</strong> finale, senza lasciare ambiguità. La stessa cosa, eventualmente, si può fare<br />

nell’elemento ‘pre’, usando l’elemento vuoto ‘pnewline’. Si osservi l’esempio seguente che si<br />

riferisce a un modello sintattico:<br />

<br />

pippo --primo --secondo --terzo<br />

<br />

pippo --primo | ←↪<br />

↩→--secondo | --terzo<br />

Quando si usa un elemento ‘snewline’, ‘pnewline’ o ‘cnewline’, vicino a uno spazio<br />

orizzontale, è bene che lo spazio venga lasciato prima dell’inserzione dell’elemento stesso,<br />

senza eliminarlo, in modo da sottolinearne la presenza.<br />

Gli elementi ‘pre’, ‘verbatimpre’, ‘asciiart’ e ‘syntax’, sono predisposti inizialmente per<br />

poter rappresentare 80 colonne di testo letterale, in una larghezza pari a quella normale del testo.<br />

In situazioni particolari può essere necessario ampliare o ridurre la dimensione dei caratteri nella<br />

<strong>composizione</strong> stampata, per consentire la rappresentazione di un testo più ampio orizzontalmente.<br />

In questi casi, si può utilizzare l’attributo ‘width’, assegnando la quantità di colonne che si<br />

desiderano.<br />

Viene lasciata la facoltà di ridefinire la larghezza del testo anche negli elementi ‘syntax’ e ‘pre’,<br />

benché sia possibile interrompere e riprendere le righe troppo lunghe, come già descritto, con gli<br />

elementi ‘snewline’ e ‘pnewline’.<br />

<br />

1234567890<br />

1234567890<br />

1234567890<br />

1234567890<br />

1234567890<br />

1234567890<br />

1234567890<br />

1234567890<br />

1234567890<br />

<br />

L’esempio mostra l’utilizzo di un elemento ‘pre’ per rappresentare un testo che si estende su 90<br />

colonne.<br />

In caso di necessità, se si vuole che la dimensione del carattere sia la stessa dell’ambiente in<br />

cui si trova l’elemento in questione, è sufficiente richiedere espressamente una larghezza pari<br />

a zero.


Il documento secondo Alml 2959<br />

272.5.4 Comandi<br />

I comandi che si impartiscono attraverso una riga di comando, possono essere rappresentati con<br />

l’elemento ‘command’. Si osservi l’esempio seguente:<br />

$ lsInvio<br />

Nell’ambito dell’elemento ‘command’ è quasi tutto facoltativo; tuttavia, l’invito, rappresentato<br />

dall’elemento ‘prompt’, va messo per primo. Dopo l’elemento ‘type’, che serve a delimitare<br />

il testo che viene inserito sulla riga di comando, è possibile anche specificare il tasto che serve<br />

a concludere la digitazione, come in questo caso, oppure se ne può fare a meno, lasciandolo<br />

sottinteso.<br />

Il testo che viene restituito da un comando si rappresenta normalmente con l’elemento<br />

‘verbatimpre’.<br />

A volte, si ha la necessità di rappresentare dei comandi piuttosto lunghi, che nella <strong>composizione</strong><br />

stampata potrebbero risultare spezzati in modo imprevedibile e indesiderabile. È possibile<br />

indicare esplicitamente dove spezzare il comando, facendo in modo che nella <strong>composizione</strong> si<br />

intenda chiaramente questo fatto. Per questo si usa l’elemento vuoto ‘cnewline’, che si inserisce<br />

all’interno di ‘type’.<br />

Tabella 272.11. Elementi SGML che servono a rappresentare un comando.<br />

Elemento o Aperturra<br />

Chiusu-<br />

attributo<br />

Contenuto Descrizione<br />

command Sì Sì Comando da digitare.<br />

prompt Sì Sì %inline; Stringa dell’invito.<br />

type Sì Sì %inline; Digitazione del comando.<br />

cnewline Sì Vuoto Continua il comando a riga nuova.<br />

kbd Sì Sì %inline; Tasto o combinazione di tasti.<br />

button Sì Sì %inline; Bottone o tasto grafico.<br />

272.5.5 Figure<br />

Alml permette di gestire le figure in diversi modi. In generale può trattarsi di file di immagini,<br />

oppure di altre cose, come dei disegni ASCII racchiusi nell’elemento ‘verbatimpre’.<br />

L’ambiente normale in cui si inserisce una figura è quello dato dall’elemento ‘figure’, che in<br />

particolare può essere definito come fluttuante oppure fisso nel punto in cui si trova. All’interno<br />

di questo elemento può essere collocata una figura costituita da un’immagine esterna, da un’immagine<br />

incorporata, oppure un blocco di testo normale, come un elemento ‘verbatimpre’ per<br />

realizzare un disegno ASCII.<br />

<br />

<br />

Figura . Ecco il mio primo esempio.<br />

<br />

<br />

<br />

L’esempio mostra la situazione più comune. Si tratta dell’incorporazione del file<br />

‘esempio-1.png’, dove viene stabilita l’altezza di quattro centimetri, lasciando che la larghezza<br />

si adatti di conseguenza, in modo relativo. Si può osservare che l’elemento ‘figure’ contiene un<br />

attributo ‘id’, con lo scopo evidente di potervi fare riferimento.


2960 Il documento secondo Alml<br />

L’elemento ‘fcaption’ serve a delimitare il testo che si vuole fare apparire come didascalia.<br />

Al suo interno si nota la presenza di un elemento vuoto, ‘figureref’, che in questo caso<br />

rappresenta un riferimento all’ultima figura, cioè a se stessa.<br />

Una figura ASCII potrebbe essere realizzata, per esempio, nel modo seguente, come in tanti altri<br />

modi possibili che fanno uso di blocchi di testo:<br />

<br />

<br />

Figura . Ecco il mio primo esempio.<br />

<br />

<br />

pinco &amp; pallino<br />

|<br />

‘--&gt; e-commerciale<br />

<br />

<br />

Oltre all’elemento ‘figure’, esiste l’elemento ‘img’ per le immagini inserite nel testo.<br />

Bla bla bla bla<br />

bla bla.<br />

Tabella 272.12. Elementi SGML che servono a rappresentare delle figure di qualche<br />

tipo. Prima parte.<br />

Elemento o Aperturra<br />

Chiusu-<br />

Contenuto Descrizione<br />

attributo<br />

figure Sì Sì Involucro di una figura normale.<br />

id -- -- Attributo Ancora di riferimento per la figura.<br />

pos -- -- Attributo ‘fixed’, ‘float’.<br />

sep -- -- Attributo ‘none’, ‘rule’, ‘border’.<br />

fcaption Sì Sì %inline; Didascalia.<br />

Codice ASCII letterale preformattato.<br />

asciiart Sì Sì testo letterale<br />

width -- -- Numero di colonne, in caratteri, del<br />

Attributo<br />

testo.<br />

image<br />

Riferimento a un’immagine esterna.<br />

Sì Vuoto<br />

imgfile -- -- File contenente l’immagine, senza<br />

Attributo<br />

estensione.<br />

height -- -- Attributo Altezza dell’immagine.<br />

width -- -- Attributo Larghezza dell’immagine.<br />

embimage<br />

Immagine incorporata; algoritmo<br />

Sì Sì #PCDATA<br />

Base64.<br />

alt -- -- Descrizione alternativa alla visualizzazione.<br />

Attributo<br />

height -- -- Attributo Altezza dell’immagine.<br />

width -- -- Attributo Larghezza dell’immagine.<br />

epsimage Sì Sì #PCDATA Codice EPS letterale.<br />

alt -- -- Descrizione alternativa alla visualizzazione.<br />

Attributo<br />

width -- -- Attributo Larghezza.<br />

height -- -- Attributo Altezza.<br />

figimage Sì Sì #PCDATA Codice XFig letterale.<br />

alt -- -- Descrizione alternativa alla visualizzazione.<br />

Attributo<br />

width -- -- Attributo Larghezza.<br />

height -- -- Attributo Altezza.<br />

teximage Sì Sì #PCDATA Codice TeX letterale.<br />

alt -- -- Descrizione alternativa alla visualizzazione.<br />

Attributo<br />

width -- -- Attributo Larghezza.


Il documento secondo Alml 2961<br />

Elemento o Aperturra<br />

Chiusu-<br />

Contenuto Descrizione<br />

attributo<br />

height -- -- Attributo Altezza.<br />

lateximage Sì Sì #PCDATA Codice LaTeX letterale.<br />

alt -- -- Attributo<br />

width -- -- Attributo Larghezza.<br />

height -- -- Attributo Altezza.<br />

Descrizione alternativa alla visualizzazione.<br />

Tabella 272.13. Elementi SGML che servono a rappresentare delle figure di qualche<br />

tipo. Seconda parte.<br />

Elemento o Aperturra<br />

Chiusu-<br />

Contenuto Descrizione<br />

attributo<br />

img Sì Vuoto Immagine inserita in una riga.<br />

alt -- -- Descrizione alternativa alla visualizzazione.<br />

Attributo<br />

imgfile -- -- File contenente l’immagine, senza<br />

Attributo<br />

estensione.<br />

height -- -- Attributo Altezza dell’immagine.<br />

width -- -- Attributo Larghezza dell’immagine.<br />

embimg<br />

Immagine incorporata; algoritmo<br />

Sì Sì #PCDATA<br />

Base64.<br />

alt -- -- Descrizione alternativa alla visualizzazione.<br />

Attributo<br />

height -- -- Attributo Altezza dell’immagine.<br />

width -- -- Attributo Larghezza dell’immagine.<br />

epsimg Sì Sì #PCDATA Codice EPS letterale.<br />

alt -- -- Descrizione alternativa alla visualizzazione.<br />

Attributo<br />

width -- -- Attributo Larghezza.<br />

height -- -- Attributo Altezza.<br />

figimg Sì Sì #PCDATA Codice XFig letterale.<br />

alt -- -- Descrizione alternativa alla visualizzazione.<br />

Attributo<br />

width -- -- Attributo Larghezza.<br />

height -- -- Attributo Altezza.<br />

teximg Sì Sì #PCDATA Codice TeX letterale.<br />

alt -- -- Descrizione alternativa alla visualizzazione.<br />

Attributo<br />

width -- -- Attributo Larghezza.<br />

height -- -- Attributo Altezza.<br />

lateximg Sì Sì #PCDATA Codice LaTeX letterale.<br />

alt -- -- Descrizione alternativa alla visualizzazione.<br />

Attributo<br />

width -- -- Attributo Larghezza.<br />

height -- -- Attributo Altezza.<br />

I nomi dei file indicati nell’attributo ‘imgfile’ devono essere privi di estensione, intendendo<br />

implicitamente che questa sia ‘.png’.<br />

Quando si inserisce il file di un’immagine, l’elemento relativo consente l’utilizzo degli attributi<br />

‘height’ e ‘width’. Evidentemente il primo permette di specificare l’altezza della figura e il<br />

secondo riguarda la larghezza. In linea di principio, i file di immagini hanno delle dimensioni,<br />

anche se queste sono espresse in pixel, ovvero in punti grafici. In generale conviene specificare<br />

l’altezza, oppure la larghezza, tenendo in considerazione il risultato per la <strong>composizione</strong><br />

stampata, sapendo che l’informazione mancante viene determinata in modo relativo. Eviden-


2962 Il documento secondo Alml<br />

temente, fissando entrambe le dimensioni, si ottiene un adattamento dell’immagine che non è<br />

necessariamente relativo.<br />

Le dimensioni, ovvero le stringhe che si assegnano agli attributi citati, hanno una forma<br />

prestabilita:<br />

nunità_di_misura<br />

La <strong>composizione</strong> in HTML implica l’adattamento delle figure, in modo tale che la dimensione<br />

in punti grafici corrisponda al 200 % dei punti tipografici. 4 In pratica, nell’ambito di questa<br />

conversione, un punto grafico equivale a circa 0,0278 pollici, ovvero a 0,7055 mm. Questo tipo<br />

di rapporto è quello che ha dimostrato produrre la <strong>composizione</strong> HTML più vicina al risultato<br />

stampato.<br />

Gli elementi per l’inserimento di immagini nel testo, come si vede dalle tabelle 272.12 e 272.13,<br />

hanno un attributo denominato ‘alt’. Si tratta di un’informazione facoltativa, con la quale si<br />

descrive brevemente l’immagine. Questa informazione serve nella <strong>composizione</strong> HTML, per<br />

mostrare una descrizione minima in caso di problemi nella visualizzazione dell’immagine.<br />

Oltre a immagini esterne, è possibile incorporare nel sorgente SGML diversi tipi di immagini: file<br />

trasformati secondo l’algoritmo Base64; codice EPS; codice XFig; codice TeX; codice LaTeX.<br />

Per incorporare un’immagine codificata con l’algoritmo Base64 si può usare il programma Uuencode,<br />

oppure Mpack, descritti nel capitolo 153. Supponendo di utilizzare Uuencode e di volere<br />

inserire l’immagine contenuta nel file ‘prova.jpg’, basta procedere come segue:<br />

$ uuencode -m prova.jpg ciao > prova.uuencode<br />

Quello che si ottiene in questo caso è il file ‘prova.uuencode’, che può apparire simile al testo<br />

seguente, che è stato ridotto per comodità:<br />

begin-base64 664 ciao<br />

JSFQUy1BZG9iZS0yLjAKJSVDcmVhdG9yOiAiYmFyY29kZSIsIGxpYmJhcmNv<br />

ZGUgc2FtcGxlIGZyb250ZW5kCiUgJSVEb2N1bWVudFBhcGVyU2l6ZXM6IGE0<br />

...<br />

...<br />

b3cKMTA0LjAwIDEwLjAwIG1vdmV0byAoOSkgc2hvdwoKJSBFbmQgYmFyY29k<br />

ZSBmb3IgIjk5MTIzNDU2Nzg5MCIKCiUlRW5kUGFnZQoKc2hvd3BhZ2UKJSVU<br />

cmFpbGVyCiUlRU9GCgo=<br />

====<br />

Da questo file, ottenuto con Uuencode, va tolta la prima e l’ultima riga; il resto si può inserire in<br />

un elemento ‘embimg’, oppure ‘embimage’. Vengono mostrati entrambi i casi.<br />

Bla bla bla<br />

<br />

<br />

bla bla bla.<br />

4 Un punto tipografico, viene inteso qui come corrispondente a 1/72 di pollice, secondo la convenzione del linguaggio<br />

PostScript.


Il documento secondo Alml 2963<br />

<br />

<br />

Figura . Ecco il mio primo esempio.<br />

<br />

<br />

<br />

<br />

<br />

Dal momento che si vuole evitare qualunque interpretazione SGML, può essere conveniente<br />

racchiudere il contenuto di questi elementi in una sezione marcata di tipo CDATA, così come si<br />

può vedere.<br />

In modo analogo funzionano gli elementi ‘epsimg’ e ‘epsimage’, per quanto riguarda il codice<br />

EPS inserito direttamente nel sorgente. Vengono mostrati due esempi.<br />

Bla bla bla<br />

<br />

<br />

bla bla bla.<br />

<br />

<br />

Figura . Ecco il mio primo esempio.<br />

<br />

<br />

<br />

<br />

<br />

Nello stesso modo, sono disponibili gli elementi ‘figimg’ e ‘figimage’, per quanto riguarda il<br />

codice XFig. Vengono mostrati due esempi e il risultato del secondo nella figura 272.1.


2964 Il documento secondo Alml<br />

Bla bla bla<br />

<br />

<br />

bla bla bla.<br />

<br />

<br />

Figura . Esempio con XFig.<br />

<br />

<br />

<br />

<br />

<br />

Figura 272.1. Esempio con XFig.<br />

Esempio con XFig<br />

Infine, funzionano così anche gli elementi ‘teximg’, ‘teximage’, ‘lateximg’ e ‘lateximage’<br />

per quanto riguarda il codice TeX e LaTeX inserito direttamente nel sorgente. Per la precisione,<br />

nel caso di ‘teximg’ e ‘teximage’, vengono aggiunte automaticamente all’inizio due istruzioni,<br />

‘\nonstopmode’ e ‘\nopagenumbers’, inoltre, alla fine viene aggiunta l’istruzione ‘\bye’;<br />

invece, nel caso di ‘lateximg’ e ‘lateximage’ viene aggiunta l’istruzione ‘\nonstopmode’<br />

all’inizio e ‘\end{document}’ alla fine. 5 Segue un esempio riferito all’inclusione di codice<br />

5 Il codice LaTeX che viene inserito deve includere tutto il necessario a funzionare correttamente, ma l’aggiunta


¦§ ¥<br />

¥<br />

Il documento secondo Alml 2965<br />

TeX:<br />

<br />

<br />

Figura . Ecco una bella formula.<br />

<br />

<br />

<br />

<br />

<br />

Figura 272.2. Ecco una bella formula.<br />

§ §<br />

§ ¡<br />

<br />

¢¡¤£<br />

¦§<br />

¤<br />

Segue lo stesso esempio, realizzato con l’inclusione di codice LaTeX; si osservi in particolare la<br />

necessità di definire il tipo di documento e il tipo di pagina più semplice:<br />

<br />

<br />

Figura . Ecco un’altra bella formula.<br />

<br />

<br />

<br />

<br />

<br />

¨©<br />

Figura 272.3. Ecco un’altra bella formula.<br />

§ §<br />

§ ¡<br />

<br />

¢¡¤£<br />

<br />

272.5.6 Tabelle<br />

¨¢©<br />

Come nel caso delle figure, le tabelle sono organizzate in modo da poter essere rappresentate<br />

da qualunque cosa: una tabella come si è abituati di solito, oppure dei blocchi di testo, anche<br />

preformattato, come ‘pre’ e ‘verbatimpre’.<br />

L’involucro di una tabella funziona in modo simile a quello di una figura:<br />

<br />

<br />

Tabella . Ecco il mio primo esempio.<br />

<br />

...<br />

...<br />

<br />

dell’istruzione ‘\end{document}’ in modo automatico non può far male se questa è già stata inserita correttamente.


2966 Il documento secondo Alml<br />

Anche l’elemento ‘table’ possiede gli attributi ‘id’ e ‘pos’, con lo stesso significato che hanno<br />

nell’elemento ‘figure’. Nello stesso modo funziona la didascalia, che in questo caso è delimitata<br />

dall’elemento ‘tcaption’, mentre il riferimento all’ultima tabella avviene con l’elemento<br />

‘tableref’.<br />

A parte la possibilità di disegnare la tabella usando blocchi di testo normali, la tabella tipica<br />

incorpora l’elemento ‘tabular’:<br />

<br />

<br />

Tabella . Ecco il mio primo esempio.<br />

<br />

<br />

<br />

Dispositivo Descrizione <br />

<br />

<br />

/dev/fd0 Prima unità a dischetti. <br />

/dev/hda Primo disco fisso ATA. <br />

/dev/hdb Secondo disco fisso ATA. <br />

/dev/sda Primo disco SCSI. <br />

/dev/lp0 Prima porta parallela. <br />

/dev/ttyS0 Prima porta seriale. <br />

<br />

<br />

<br />

L’esempio mostrato è sufficientemente completo: l’elemento ‘tabular’ ha un attributo obbligatorio,<br />

‘col’, con il quale è necessario dichiarare subito la quantità di colonne che compone la<br />

tabella. Le righe della tabella sono raggruppate in due gruppi: l’intestazione, delimitata dall’elemento<br />

‘thead’, e il corpo, delimitato dall’elemento ‘tbody’. Le righe sono definite dall’elemento<br />

‘trow’ e la separazione tra una colonna e l’altra avviene con l’elemento vuoto ‘colsep’.<br />

Tabella 272.14. Elementi SGML che servono a rappresentare le tabelle.<br />

Elemento o Aperturra<br />

Chiusu-<br />

attributo<br />

Contenuto Descrizione<br />

table Sì Sì Involucro di una tabella.<br />

id -- -- Ancora di riferimento per la tabella.<br />

Attributo<br />

pos -- -- Attributo ‘fixed’, ‘float’.<br />

Non si può dividere = ‘0’ (predefinito);<br />

split -- -- Attributo<br />

si può dividere automatica-<br />

mente = ‘1’.<br />

tcaption Sì Sì %inline; Didascalia.<br />

Descrizione del reticolo di righe e<br />

tabular Sì Sì<br />

colonne.<br />

col -- -- Attributo Quantità di colonne presenti.<br />

columnfractions -- -- Attributo Frazioni orizzontali per le colonne.<br />

printedfontsize -- -- Attributo Dimensione del carattere da usare.<br />

border -- -- Normale = ‘0’ (predefinito); caselle<br />

Attributo<br />

bordate = ‘1’.<br />

thead Sì Sì trow Righe di intestazione.<br />

trow Sì Sì Riga.<br />

colsep Sì Sì Separazione tra le colonne.<br />

tbody Sì Sì trow Righe del corpo.<br />

trow Sì Sì Riga.<br />

colsep Sì Sì Separazione tra le colonne.


Il documento secondo Alml 2967<br />

La gestione delle tabelle di Alml è un po’ limitata; in situazioni eccezionali, si può valutare<br />

anche la possibilità di realizzare tabelle HTML utilizzando l’elemento ‘html’, come si vede<br />

nell’esempio di tabella 272.26. Tuttavia, si deve ricordare che si tratta di codice esterno, per<br />

cui non si possono inserire elementi tipici di Alml, ma solo codice HTML; inoltre, la trasformazione<br />

in forma di testo puro di una tabella HTML complessa non avviene sempre nel modo<br />

corretto.<br />

L’esempio seguente mostra il caso di una tabella in cui le celle possono contenere più di una riga.<br />

Si vede il risultato in 272.15.<br />

<br />

<br />

Tabella . Esempio di tabella un po’ più complessa.<br />

<br />

<br />

<br />

Parola di controllo<br />

Competenza<br />

Condizione o valore predefinito<br />

<br />

<br />

<br />

\hoffset<br />

Posizione iniziale dei paragrafi nella pagina.<br />

0<br />

<br />

\hsize<br />

Larghezza del paragrafo a partire da \hoffset.<br />

6,5 pollici<br />

<br />

\parindent<br />

Rientro della prima riga.<br />

20 punti<br />

<br />

\baselineskip<br />

Distanza tra la base di una riga e la base della riga successiva.<br />

12 punti<br />

<br />

\parskip<br />

Distanza aggiuntiva tra i paragrafi.<br />

0<br />

<br />

\raggedright<br />

Allinea il testo a sinistra.<br />

allineato simultaneamente a sinistra e a destra<br />

<br />

\leftskip<br />

Rientro sinistro complessivo.<br />

0<br />

<br />

\rightskip<br />

Rientro destro complessivo.<br />

0<br />

<br />

<br />

<br />


2968 Il documento secondo Alml<br />

Tabella 272.15. Esempio di tabella un po’ più complessa.<br />

Parola di controllo Competenza Condizione o valore predefinito<br />

\hoffset<br />

Posizione iniziale dei paragrafi nella<br />

pagina.<br />

0<br />

\hsize<br />

Larghezza del paragrafo a partire da<br />

‘\hoffset’.<br />

6,5 pollici<br />

\parindent Rientro della prima riga. 20 punti<br />

\baselineskip<br />

Distanza tra la base di una riga e la<br />

base della riga successiva.<br />

12 punti<br />

\parskip Distanza aggiuntiva tra i paragrafi. 0<br />

\raggedright<br />

allineato simultaneamente a sinistra e<br />

Allinea il testo a sinistra.<br />

a destra<br />

\leftskip Rientro sinistro complessivo. 0<br />

\rightskip Rientro destro complessivo. 0<br />

Eccezionalmente (purché si utilizzi l’attributo ‘columnfractions’), è possibile inserire nelle<br />

celle alcuni elementi che rappresentano blocchi di testo; per esempio: ‘syntax’, ‘command’,<br />

‘pre’ e ‘verbatimpre’. Ciò dovrebbe consentire l’uso delle tabelle per realizzare degli schemi<br />

riassuntivi riferiti a comandi sintassi o simili. Si osservi l’esempio seguente, rappresentato alla<br />

fine dalla tabella 272.16. 6<br />

<br />

<br />

<br />

Comando<br />

Descrizione<br />

<br />

<br />

<br />

mbadblock unità_dos<br />

Scandisce un’unità &DOS; alla ricerca di settori difettosi.<br />

<br />

mcd directory_dos<br />

Permette di modificare o conoscere la directory corrente delle unità &DOS;.<br />

<br />

mdel file_dos<br />

Cancella i file &DOS; indicati come argomento.<br />

<br />

mdeltree directory_dos<br />

Cancella le directory &DOS; indicate come argomento.<br />

<br />

mmd directory_dos<br />

Crea le directory &DOS; indicate come argomento.<br />

<br />

mmove origine_dos destinazione_dos<br />

Sposta o rinomina uno o più file e directory.<br />

<br />

mrd directory_dos<br />

Elimina le directory indicate come argomento, purché siano vuote.<br />

<br />

mren origine_dos destinazione_dos<br />

Rinomina o sposta uno o più file e directory.<br />

<br />

<br />

<br />

<br />

Comando<br />

mbadblock unità_dos<br />

Descrizione<br />

Scandisce un’unità Dos alla ricerca di<br />

settori difettosi.<br />

6 La scelta del rapporto tra le due colonne della tabella, 61,8 % e 38,2 %, rappresenta quello che è noto come «rapporto<br />

aureo».


Il documento secondo Alml 2969<br />

Comando<br />

mcd [directory_dos]<br />

mdel file_dos ...<br />

mdeltree directory_dos...<br />

mmd directory_dos...<br />

mmove origine_dos ... destinazione_dos<br />

mrd directory_dos...<br />

mren origine_dos ... destinazione_dos<br />

Descrizione<br />

Permette di modificare o conoscere la<br />

directory corrente delle unità Dos.<br />

Cancella i file Dos indicati come<br />

argomento.<br />

Cancella le directory Dos indicate<br />

come argomento.<br />

Crea le directory Dos indicate come<br />

argomento.<br />

Sposta o rinomina uno o più file e<br />

directory.<br />

Elimina le directory indicate come<br />

argomento, purché siano vuote.<br />

Rinomina o sposta uno o più file e<br />

directory.<br />

Le tabella molto lunghe possono essere realizzate in modo da consentire il salto pagina, utilizzando<br />

l’attributo ‘split’. In ogni caso, perché ci possa essere una tabella suddivisibile tra le<br />

pagine, è necessario che questa non sia fluttuante.<br />

272.5.7 Listati<br />

Come le figure e le tabelle, i listati possono essere rappresentati da qualunque cosa; di solito si<br />

tratta di blocchi di testo preformattato, come ‘pre’ e ‘verbatimpre’. L’involucro di un listato<br />

funziona in modo simile a quello di una figura:<br />

<br />

<br />

Listato . Ecco il mio primo esempio.<br />

<br />

...<br />

...<br />

<br />

Anche l’elemento ‘listing’ possiede gli attributi ‘id’, ‘pos’ e ‘sep’, con lo stesso significato<br />

che hanno nell’elemento ‘figure’. Nello stesso modo funziona la didascalia, che in questo<br />

caso è delimitata dall’elemento ‘lcaption’, mentre il riferimento all’ultimo listato avviene con<br />

l’elemento ‘listingref’.<br />

Tabella 272.17. Elementi SGML che servono a rappresentare i listati.<br />

Elemento o Aperturra<br />

Chiusu-<br />

attributo<br />

Contenuto Descrizione<br />

Involucro di un listato.<br />

id -- -- Attributo Ancora di riferimento per il listato.<br />

pos -- -- Attributo ‘fixed’, ‘float’.<br />

sep -- -- Attributo ‘none’, ‘rule’, ‘border’.<br />

listing Sì Sì<br />

Non si può dividere = ‘0’ (predefinito);<br />

split -- -- Attributo<br />

si può dividere automatica-<br />

mente = ‘1’.<br />

lcaption Sì Sì %inline; Didascalia.


2970 Il documento secondo Alml<br />

272.5.8 Riferimenti incrociati e ipertestuali<br />

I riferimenti incrociati si realizzano attraverso l’indicazione di ancore (o etichette se si preferisce<br />

il termine) e di puntatori a tali ancore. Esistono diversi modi per definire un’ancora e un riferimento<br />

a questa: tutti gli elementi che dispongono di un attributo ‘id’, sono ancore oppure sono<br />

puntatori alle ancore.<br />

Fino a questo punto sono stati descritti gli elementi che delimitano i titoli dei tomi, delle parti,<br />

dei capitoli e delle sezioni; inoltre sono stati visti gli elementi che avvolgono le figure e le tabelle.<br />

Tutti questi sono ancore a cui si può puntare. Inoltre, per inserire un’ancora nel testo normale, è<br />

possibile usare l’elemento vuoto ‘anchor’, anche questo provvisto di attributo ‘id’.<br />

Esistono quattro elementi vuoti per fare riferimento alle ancore: ‘sectionref’, per ottenere un<br />

riferimento alla sezione in cui si trova l’ancora; ‘figureref’ per fare riferimento a una figura;<br />

‘tableref’ per fare riferimento a una tabella; ‘listingref’ per fare riferimento a un listato.<br />

In particolare, gli elementi ‘figureref’, ‘tableref’ e ‘listingref’ possono essere usati<br />

anche senza l’attributo ‘id’ per fare riferimento all’ultima ancora di una figura, di una tabella o<br />

di un listato, come è già stato mostrato nell’uso delle didascalie.<br />

Quando si realizza un documento che può includere o meno una certa porzione a cui puntano<br />

alcuni riferimenti, per evitare che vengano mostrati questi collegamenti mancanti, si può usare<br />

l’elemento ‘ifref’, con il quale si delimita la parte da non comporre se manca il riferimento<br />

indicato nell’attributo ‘id’.<br />

Tabella 272.18. Gestione dei riferimenti incrociati.<br />

Elemento o Aperturra<br />

Chiusu-<br />

attributo<br />

Contenuto Descrizione<br />

tomeheading Sì Sì Titolo di un tomo.<br />

id -- -- Ancora di riferimento per il titolo<br />

Attributo<br />

del tomo.<br />

h0 Sì Sì Titolo di una parte.<br />

id -- -- Attributo<br />

Ancora di riferimento per il titolo<br />

della parte.<br />

h1 Sì Sì Titolo di un capitolo.<br />

id -- -- Attributo<br />

Ancora di riferimento per il titolo<br />

di un capitolo.<br />

h2 Sì Sì Titolo di una sezione.<br />

id -- -- Attributo<br />

Ancora di riferimento per il titolo<br />

di una sezione.<br />

h3 Sì Sì Titolo di una sottosezione.<br />

id -- -- Attributo<br />

Ancora di riferimento per il titolo<br />

di una sottosezione.<br />

h4 Sì Sì Titolo di una sotto-sottosezione.<br />

id -- -- Attributo<br />

Ancora per il titolo di una sottosottosezione.<br />

anchor Sì Vuoto Ancora inserita nel testo.<br />

id -- -- Attributo<br />

Stringa di identificazione dell’ancora.<br />

sectionref Sì Vuoto Riferimento a un’ancora del testo.<br />

id -- -- Attributo Stringa a cui si fa riferimento.<br />

figure Sì Sì Involucro di una figura.<br />

id -- -- Attributo Ancora di riferimento per la figura.<br />

figureref Sì Vuoto<br />

Riferimento a un’ancora di una<br />

figura.<br />

id -- -- Attributo Stringa a cui si fa riferimento.<br />

table Sì Sì Involucro di una tabella.<br />

id -- -- Attributo<br />

Ancora di riferimento per la tabella.


Il documento secondo Alml 2971<br />

Elemento o<br />

attributo<br />

Apertura<br />

Chiusura<br />

Contenuto<br />

Descrizione<br />

Riferimento a un’ancora di una<br />

tableref Sì Vuoto<br />

tabella.<br />

id -- -- Attributo Stringa a cui si fa riferimento.<br />

listing Sì Sì Involucro di un listato.<br />

id -- -- Attributo Ancora di riferimento per il listato.<br />

Riferimento a un’ancora di un<br />

listato.<br />

id -- -- Attributo Stringa a cui si fa riferimento.<br />

listingref Sì Vuoto<br />

%inline; o Delimita un’area da comporre solo<br />

ifref Sì Sì<br />

%block;<br />

se l’ancora esiste veramente.<br />

id -- -- Attributo Stringa a cui si fa riferimento.<br />

272.5.9 Note e piè pagina<br />

Alml prevede l’utilizzo di tre tipi di annotazioni: avvertimenti che devono risaltare in un riquadro<br />

e due tipi di note a piè pagina. Le note evidenziate sono indicate all’interno di un elemento<br />

‘frame’, mentre quelle a piè pagina sono inserite nell’elemento ‘footnote’, oppure<br />

‘blockfootnote’.<br />

Le note a piè pagina normali sono quelle dell’elemento ‘footnote’, che si colloca all’interno<br />

delle righe; al contrario, ‘blockfootnote’ rappresenta un blocco di testo, che rimane solo per<br />

compatibilità con il passato.<br />

<br />

Attenzione! Si tratta di un’operazione rischiosa.<br />

<br />

L’esempio precedente mostra l’utilizzo di un riquadro, mentre quello successivo mostra l’uso di<br />

un piè pagina normale.<br />

Bla bla blaQuesta parola si ripete. bla bla...<br />

Tabella 272.19. Annotazioni a vario titolo.<br />

Elemento o Aperturra<br />

Chiusu-<br />

attributo<br />

Contenuto Descrizione<br />

frame Sì Sì %block; Riquadro.<br />

blockfootnote Sì Sì %inline; Piè pagina tra i blocchi di testo.<br />

footnote Sì Sì %inline;<br />

Piè pagina all’interno di una riga di<br />

testo.<br />

272.5.10 Riferimenti esterni e citazioni<br />

Alcuni elementi sono specializzati per fare riferimento a qualcosa di esterno. Il caso più comune<br />

riguarda l’elemento ‘uri’, con il quale si indica un URI:<br />

Bla bla bla bla bla...<br />

Per indicare il riferimento a una pagina di manuale, si può usare l’elemento ‘man’, in modo da<br />

ottenere una rappresentazione uguale a quella tradizionale:<br />

Bla bla bla ls1 bla bla...<br />

La tabella 272.20 riepiloga questi e altri elementi affini.


2972 Il documento secondo Alml<br />

Tabella 272.20. Riferimenti esterni.<br />

Elemento o Aperturra<br />

Chiusu-<br />

attributo<br />

Contenuto Descrizione<br />

uri Sì Sì CDATA Riferimento a un URI esterno.<br />

Riferimento a un URI che non<br />

uristr Sì Sì #PCDATA<br />

funziona.<br />

%block;,<br />

blockquote Sì Sì<br />

quoteinfo<br />

Citazione.<br />

quoteinfo Sì Sì %inline; Informazioni sulla citazione.<br />

bibref Sì Sì %inline; Titolo di un documento.<br />

man Sì Sì<br />

#PCDATA, mansect<br />

Pagina di manuale.<br />

mansect Sì Sì #PCDATA Numero della sezione.<br />

L’elemento ‘uristr’ è una variante di ‘uri’, con lo scopo di non generare un riferimento ipertestuale.<br />

Ciò può servire per rappresentare un indirizzo di fantasia, oppure un indirizzo reale che<br />

non è più valido. Si possono indicare in questo modo anche i nomi di dominio.<br />

L’elemento ‘blockquote’ è previsto per delimitare una citazione in uno o più blocchi. Alla fine<br />

dell’elemento ‘blockquote’ è prevista la possibilità di usare un solo elemento ‘quoteinfo’,<br />

con lo scopo di contenere informazioni relative alla citazione:<br />

<br />

%block;<br />

...<br />

[%inline; ...]<br />

<br />

272.5.11 Altre inserzioni particolari<br />

Sono disponibili altri elementi di importanza minore. Si tratta di ‘br’, ‘hr’, ‘newpage’,<br />

‘bottompage’ e ‘navlink’. I primi due emulano gli elementi corrispondenti dell’HTML,<br />

interrompendo una riga e inserendo una linea orizzontale rispettivamente.<br />

L’elemento ‘newpage’ richiede un salto pagina, se il tipo di <strong>composizione</strong> lo consente.<br />

L’elemento ‘bottompage’ serve per definire un gruppo di blocchi di testo da rappresentare nella<br />

parte bassa della pagina, nella <strong>composizione</strong> per la stampa. In pratica, si usa ‘bottompage’ per<br />

delimitare informazioni legali nella seconda pagina relativa dei tomi:<br />

Bla bla bla<br />

<br />

Copyright &copy; Pinco Pallino...<br />

Bla bla bla...<br />

<br />

Tabella 272.21. Inserzioni varie.<br />

Elemento o Aperturra<br />

Chiusu-<br />

attributo<br />

Contenuto Descrizione<br />

br Sì Vuoto Interruzione della riga.<br />

hr Sì Vuoto Riga orizzontale di separazione.<br />

newpage Sì Vuoto Salto pagina se ammissibile.<br />

bottompage Sì Sì %block;<br />

Testo da rappresentare nella parte<br />

bassa della pagina.<br />

navlink Sì Sì #PCDATA<br />

Riferimento ipertestuale per la navigazione<br />

HTML.


Il documento secondo Alml 2973<br />

L’elemento ‘navlink’ consente di aggiungere nella <strong>composizione</strong> HTML un riferimento ipertestuale<br />

fisso, in tutte le pagine, allo scopo di raggiungere facilmente la posizione in cui l’elemento<br />

stesso viene inserito. Si osservi l’esempio seguente:<br />

<br />

Indice analitico<br />

<br />

indice analitico<br />

<br />

<br />

Si tratta dell’inserimento dell’indice analitico, con l’aggiunta di un riferimento ipertestuale fisso<br />

nelle pagine della <strong>composizione</strong> HTML.<br />

272.6 Tracciamento di informazioni particolari<br />

Diversi tipi di elementi nella struttura di Alml sono predisposti per accumulare informazioni da<br />

restituire a richiesta. La situazione più semplice è data dalla gestione degli indici analitici, dove<br />

con l’elemento ‘indexentry’ si inserisce una voce nell’indice analitico generale o in un altro<br />

individuato da un nome libero:<br />

<br />

I colori dell’arcobaleno<br />

arcobaleno<br />

color<br />

<br />

L’elemento ‘indexentry’ appartiene al gruppo di quelli che possono essere inseriti all’interno<br />

di una riga; nell’esempio si vede la situazione tipica in cui lo si inserisce nel testo di un titolo.<br />

In questo caso, sono state indicate due voci dell’indice analitico generale: la parola «arcobaleno»<br />

viene inserita in modo normale, mentre la parola «color» viene inserita con un carattere<br />

dattilografico.<br />

Ogni indice analitico ha un nome e quello generale, o predefinito, corrisponde a ‘main’.<br />

L’esempio mostrato sopra sarebbe perfettamente equivalente a quello seguente:<br />

<br />

I colori dell’arcobaleno<br />

arcobaleno<br />

color<br />

<br />

Per recuperare l’elenco di un indice analitico si utilizza l’elemento ‘printindex’, in cui, lo<br />

stesso attributo ‘index’ permette di stabilire quale indice estrapolare.<br />

Elemento o<br />

attributo<br />

Tabella 272.22. Gestione degli indici analitici.<br />

Apertura<br />

Chiusura<br />

Contenuto<br />

Descrizione<br />

indexentry<br />

Dichiarazione di una voce per<br />

Sì Sì #PCDATA|code<br />

l’indice analitico.<br />

index -- -- Nome dell’indice analitico in cui<br />

Attributo<br />

inserire la voce.<br />

special Sì Sì #PCDATA Termine speciale.<br />

special -- -- Nome dell’indice analitico in cui<br />

Attributo<br />

inserire la voce.<br />

printindex<br />

Inserisce l’elenco dell’indice analitico<br />

richiesto.<br />

Sì Vuoto<br />

index -- -- Nome dell’indice analitico richiesto.<br />

Attributo


2974 Il documento secondo Alml<br />

Elemento o<br />

attributo<br />

Apertura<br />

Chiusura<br />

Contenuto<br />

indexcontext -- -- Attributo<br />

indexref -- -- Attributo<br />

Descrizione<br />

Specifica un contesto tra: ‘all’,<br />

‘tome’, ‘part’, ‘chapter’. È predefinito<br />

il contesto ‘all’, che<br />

richiede l’indice completo.<br />

Specifica in che modo devono apparire<br />

i riferimenti: ‘default’,<br />

‘section’. In pratica, con la parola<br />

chiave ‘section’ si impone di<br />

mostrare numeri di sezione e non le<br />

pagine.<br />

Esiste anche un altro elemento che inserisce voci negli indici analitici; si tratta di ‘special’, che<br />

inserisce una voce nell’indice corrispondente al nome indicato con l’attributo che ha lo stesso<br />

nome: ‘special’.<br />

272.6.1 Caratteristiche del software e di altri «lavori»<br />

La struttura di Alml dispone di un elemento ‘%inline;’ speciale, il cui scopo è quello di<br />

annotare alcune informazioni sul software e su lavori simili. Si osservi l’esempio seguente:<br />

Stiamo parlando di Mpage,<br />

<br />

Mpage<br />

licenza speciale che non ammette le modifiche<br />

<br />

Permission is granted to anyone to make or distribute verbatim<br />

copies of this document as received, in any medium, provided that<br />

this copyright notice is preserved, and that the distributor grants<br />

the recipient permission for further redistribution as permitted by<br />

this notice.<br />

<br />

<br />

un programma che si occupa di...<br />

Solo gli elementi ‘workname’ e ‘worklicense’ sono obbligatori, dal momento che il loro contenuto<br />

appare in un piè pagina locale. L’elemento ‘worklicensetext’ è facoltativo e può essere<br />

utile per annotare una licenza unica, per la quale non possa essere individuato un riferimento<br />

standard; inoltre, un altro elemento, ‘worknotes’, permette di annotare qualcosa al riguardo.<br />

Dove lo si ritiene più opportuno, si può collocare l’elemento ‘printworkinfo’, per ottenere<br />

l’elenco ordinato di queste informazioni accumulate.<br />

Elemento o<br />

attributo<br />

Tabella 272.23. Tracciamento di informazioni sul software citato.<br />

Apertura<br />

Chiusura<br />

Contenuto<br />

Descrizione<br />

Dichiarazione del blocco di informazioni.<br />

workinfo Sì Sì<br />

Nome del software o di altro<br />

workname Sì Sì #PCDATA<br />

lavoro.<br />

Denominazione o descrizione breve<br />

della licenza.<br />

worklicense Sì Sì #PCDATA<br />

worklicensetext Sì Sì %block; Testo della licenza specifica.<br />

worknotes Sì Sì %block; Annotazioni.<br />

printworkinfo Sì Vuoto<br />

Inserisce le informazioni accumulate<br />

in modo ordinato.


Il documento secondo Alml 2975<br />

Elemento o<br />

attributo<br />

Apertura<br />

Chiusura<br />

Contenuto<br />

workinforef -- -- Attributo<br />

Descrizione<br />

Specifica in che modo devono apparire<br />

i riferimenti: ‘default’,<br />

‘section’. In pratica, con la parola<br />

chiave ‘section’ si impone di<br />

mostrare numeri di sezione e non le<br />

pagine.<br />

272.6.2 Informazioni su sezioni specifiche del documento<br />

In situazioni particolari, potrebbe essere necessario, o anche solo utile, tenere traccia dell’origine<br />

di una sezione del documento, assieme a delle annotazioni a vario titolo. Per questo si può<br />

utilizzare l’elemento ‘docinfo’, che questa volta costituisce un blocco.<br />

<br />

<br />

2002.09.15<br />

<br />

Il testo viene aggiornato nel contenuto, con l’inserimento<br />

della sezione «bla bla bla», da parte di Caio Cai<br />

(caio@brot.dg).<br />

<br />

2002.09.08<br />

<br />

Il testo viene modificato per adeguarlo alla nuova veste<br />

grafica dell’opera, per opera di Caio Cai (caio@brot.dg);<br />

il contenuto rimane invariato.<br />

<br />

2002.02.02<br />

<br />

<br />

<br />

<br />

Il testo originale è di Tizio Tizi e risale al 2002.02.02. Nello<br />

stesso giorno, il testo ha subito qualche aggiustamento per opera di<br />

Caio Cai (caio@brot.dg), con il consenso dell’autore.<br />

L’esempio mostra in particolare l’uso dell’elemento ‘docinfo’ per annotare lo storico delle<br />

modifiche fatte su quella porzione di documento; come si può vedere, vengono indicate prima le<br />

azioni più recenti, ma questo dipende solo da una scelta organizzativa.<br />

Per ottenere l’elenco delle informazioni accumulate in questo modo, si utilizza l’elemento vuoto<br />

‘printdocinfo’.


2976 Il documento secondo Alml<br />

Tabella 272.24. Tracciamento di informazioni su sezioni particolari del documento<br />

globale.<br />

Elemento o<br />

attributo<br />

docinfo Sì Sì<br />

Apertura<br />

Chiusura<br />

Contenuto<br />

printdocinfo Sì Vuoto<br />

Descrizione<br />

Annotazioni sul documento (tomo,<br />

parte, capitolo o sezione inferiore).<br />

Inserisce nel testo le informazioni<br />

accumulate.<br />

272.6.3 Condizioni particolari per il contenuto di una sezione<br />

È previsto un contenitore speciale per indicare le condizioni particolari che riguardano una certa<br />

sezione (anche un tomo intero). Si tratta dell’elemento ‘specialcondition’, all’interno del<br />

quale può eventualmente apparire l’elemento vuoto ‘nomod’:<br />

non è consentita la modifica di questa<br />

sezione<br />

L’esempio dovrebbe rendere l’idea della cosa. Il testo contenuto nell’elemento<br />

‘specialcondition’ viene mostrato effettivamente, utilizzando un carattere un po’ diverso da<br />

quello normale, in modo da risaltare.<br />

L’elemento vuoto ‘nomod’ serve per tenere traccia in particolare di quelle sezioni che non possono<br />

essere modificate. Evidentemente, può essere utile solo se il documento, nella sua globalità, è<br />

inteso come modificabile, in base alle condizioni della licenza. In generale non dovrebbe essere<br />

necessario; 7 tuttavia, in questo modo, è possibile poi ottenere un elenco dettagliato di tutte le<br />

sezioni che non possono essere modificate, con l’elemento vuoto ‘printnomod’.<br />

Elemento o<br />

attributo<br />

Tabella 272.25. Annotazione delle condizioni particolari di una sezione.<br />

specialcondition Sì Sì<br />

Apertura<br />

Chiusura<br />

Contenuto<br />

nomod Sì Vuoto<br />

printnomod Sì Vuoto<br />

#PCDATA | nomod<br />

Descrizione<br />

Dichiarazione di condizioni particolari.<br />

Annotazione di sezione non modificabile.<br />

Elenco delle sezioni non modificabili.<br />

272.7 Inserimento letterale di codice TeX e HTML, con<br />

eventuale inserimento condizionato<br />

In situazioni eccezionali, può essere conveniente l’inserimento di codice scritto secondo il linguaggio<br />

di <strong>composizione</strong> che si trova al di sotto della struttura SGML di Alml. Lo scopo di Alml<br />

non è quello di mantenere un legame sicuro con TeX e HTML, tuttavia viene lasciata aperta<br />

questa possibilità.<br />

Si pensi all’eventuale necessità di inserire qualcosa di particolare nella <strong>composizione</strong> HTML,<br />

per esempio per inserire un contatore di accesso, o altri tipi di inserzioni ritenuti utili per qualche<br />

ragione.<br />

7 Se nella sezione che non si può modificare è scritto chiaramente come stanno le cose al riguardo, non serve alcun<br />

elenco di tali sezioni.


Il documento secondo Alml 2977<br />

Per risolvere questo problema si possono usare due elementi speciali: ‘tex’ e ‘html’. Come si<br />

può intuire, il primo elemento è fatto per racchiudere codice TeX o LaTeX; il secondo serve per<br />

includere codice HTML.<br />

Dal momento che si vuole evitare qualunque interpretazione SGML, conviene racchiudere il<br />

contenuto di questi elementi in una sezione marcata di tipo CDATA. Si osservi l’esempio<br />

seguente:<br />

<br />

Web-Counter: <br />

]]><br />

In questo caso si tratta di un’inclusione di codice HTML, dove per poter scrivere i marcatori in<br />

modo letterale è stato necessario includere tutto all’interno della sezione marcata CDATA.<br />

A fianco di questo problema, sta poi la possibilità di delimitare facilmente dei blocchi di sorgente<br />

che debbano essere presi in considerazione solo se la <strong>composizione</strong> avviene attraverso una<br />

trasformazione in TeX o in HTML. In pratica, si utilizzano rispettivamente gli elementi ‘iftex’<br />

e ‘ifhtml’. Questi elementi non sono indispensabili, perché l’SGML offre già un meccanismo<br />

di controllo dell’elaborazione del sorgente, attraverso le sezioni marcate; tuttavia, servono per<br />

completare e concludere il problema degli elementi contenenti codice speciale TeX o HTML.<br />

Il codice HTML può essere rappresentato in parte anche quando la <strong>composizione</strong> avviene attraverso<br />

TeX, per mezzo di HTML2ps. In pratica, con il codice HTML si ottiene un’immagine che<br />

viene poi incorporata nel sorgente TeX. Questa estensione serve specialmente per consentire la<br />

realizzazione di tabelle più complesse di quanto consenta Alml con il suo elemento ‘tabular’.<br />

Si osservi l’esempio seguente, che viene poi rappresentato nella tabella 272.26:<br />

<br />

<br />

Tabella . Incorporazione di codice HTML per rappresentare<br />

una tabella complessa.<br />

<br />

<br />

<br />

<br />

<br />

Denominazione della porta seriale su i386 nei sistemi<br />

Dos<br />

<br />

Risorse<br />

<br />

File di dispositivo nei sistemi GNU/Linux<br />

<br />

Annotazioni<br />

<br />

<br />

<br />

IRQ<br />

<br />

I/O<br />

<br />

<br />

<br />

<br />

<br />

COM1:


2978 Il documento secondo Alml<br />

<br />

4<br />

<br />

3F816<br />

<br />

/dev/ttyS0<br />

<br />

La prima e la terza porta seriale condividono lo<br />

stesso IRQ.<br />

<br />

<br />

<br />

COM3:<br />

<br />

3E816<br />

<br />

/dev/ttyS2<br />

<br />

<br />

<br />

COM2:<br />

<br />

3<br />

<br />

2F816<br />

<br />

/dev/ttyS0<br />

<br />

La seconda e la quarta porta seriale condividono lo<br />

stesso IRQ.<br />

<br />

<br />

<br />

COM4:<br />

<br />

2E816<br />

<br />

/dev/ttyS2<br />

<br />

<br />

<br />

<br />

]]><br />

<br />

<br />

Tabella 272.26. Incorporazione di codice HTML per rappresentare una tabella<br />

complessa.<br />

Denominazione della porta seriale su<br />

i386 nei sistemi Dos<br />

Risorse<br />

IRQ I/O<br />

File di dispositivo nei sistemi<br />

GNU/Linux<br />

Annotazioni<br />

COM1:<br />

3F8 16 /dev/ttyS0<br />

4<br />

COM3: 3E8 16 /dev/ttyS2<br />

COM2:<br />

2F8 16 /dev/ttyS0<br />

3<br />

COM4: 2E8 16 /dev/ttyS2<br />

La prima e la terza porta seriale<br />

condividono lo stesso IRQ.<br />

La seconda e la quarta porta seriale<br />

condividono lo stesso IRQ.<br />

Si osservi nell’esempio l’uso dell’attributo ‘width’. Precisamente, l’elemento ‘html’ consente<br />

l’uso degli attributi ‘width’ e ‘height’ per stabilire le dimensioni dell’oggetto HTML importato<br />

nella <strong>composizione</strong> stampata. In questo caso, è stata specificata la larghezza, corrispondente<br />

allo spazio orizzontale a disposizione, in modo che l’altezza venga adattata automaticamente,<br />

mantenendo lo stesso rapporto.


Il documento secondo Alml 2979<br />

Tabella 272.27. Inserimento letterale di codice TeX e HTML; inserimento condizionato<br />

in base al tipo di <strong>composizione</strong>.<br />

Elemento o Aperturra<br />

Chiusu-<br />

attributo<br />

Contenuto Descrizione<br />

html Sì Sì #PCDATA Codice HTML letterale.<br />

width -- -- Attributo<br />

Larghezza nella <strong>composizione</strong><br />

stampata.<br />

height -- -- Attributo<br />

Altezza nella <strong>composizione</strong> stampata.<br />

tex Sì Sì #PCDATA Codice TeX o LaTeX letterale.<br />

Blocco condizionato alla <strong>composizione</strong><br />

in HTML.<br />

ifhtml Sì Sì %block;<br />

Blocco condizionato alla <strong>composizione</strong><br />

in<br />

iftex Sì Sì %block;<br />

TeX.<br />

Si rammenti che mentre quanto contenuto nell’elemento ‘html’ appare sia nella <strong>composizione</strong><br />

per la stampa, sia nella <strong>composizione</strong> HTML, l’elemento ‘tex’ genera un risultato utile solo<br />

nella <strong>composizione</strong> per la stampa.<br />

Per quanto riguarda il caso particolare dell’elemento ‘tex’, si tenga in considerazione piuttosto<br />

la possibilità di usare gli elementi ‘teximg’ e ‘teximage’, che generano un risultato<br />

visibile anche nel formato HTML finale, attraverso la trasformazione automatica in forma di<br />

immagine.<br />

272.8 Definizione alternativa della suddivisione del<br />

documento<br />

Alml è pensato per la realizzazione di documenti di grandi dimensioni. In questo senso, la sua<br />

struttura normale è quella di un libro, articolato in capitoli che si possono raggruppare in parti<br />

e tomi. Eventualmente, se questa struttura va definita attraverso termini differenti, si possono<br />

sostituire le parole «capitolo», «parte» e «tomo», con altre più appropriate.<br />

Per questo si usano gli elementi ‘chapterdefinition’, ‘partdefinition’ e<br />

‘tomedefinition’, all’interno delle informazioni amministrative. L’esempio seguente<br />

dovrebbe permettere di comprendere il problema; per la precisione si tratta di una rivista<br />

telematica ipotetica:<br />

<br />

<br />

Rivista di informatica libera<br />

informatica libera, software libero<br />

articolo<br />

numero<br />

anno<br />

<br />

RIL, rivista di informatica libera<br />

Pinco Pallino &lt;pinco.pallino@brot.dg&gt;<br />

2011.11.11<br />

<br />

Copyright &copy; Pinco Pallino, &lt;pinco.pallino@brot.dg&gt;<br />

<br />

Table of contents<br />

<br />

Si può osservare che le parole «articolo», «numero» e «anno», sono state inserite usando lettere<br />

minuscole e in forma singolare. Ciò è necessario, perché l’iniziale maiuscola viene ottenuta<br />

automaticamente quando opportuno; inoltre, questi termini vengono usati sempre quando si fa<br />

riferimento a un solo oggetto.


2980 Il documento secondo Alml<br />

La numerazione dei tomi, delle parti e dei capitoli è indipendente, per cui non ci si può aspettare<br />

che al cambio di un tomo o di una parte, i capitoli riprendano la numerazione a partire da<br />

uno.<br />

272.9 Riferimento alla larghezza del testo<br />

In generale, non esiste la possibilità di attribuire agli attributi ‘width’ di immagini e simili, un<br />

riferimento alla larghezza effettivamente a disposizione. In altri termini, non esiste la possibilità<br />

di fare riferimento a ciò che per LaTeX può essere l’istruzione ‘\textwidth’. In questo modo,<br />

se si decide in un momento successivo di modificare lo spazio orizzontale utilizzabile all’interno<br />

delle pagine, si può essere costretti a verificare tutte le dimensioni di questi oggetti particolari.<br />

Per risolvere l’inconveniente si può definire un’entità interna all’inizio del documento:<br />

<br />

Successivamente si può usare questa stessa entità per dichiarare la larghezza del corpo della<br />

pagina:<br />

<br />

<br />

...<br />

&BODYWIDTH;<br />

...<br />

<br />

Quindi, nello stesso modo per le immagini e altri oggetti che si traducono nell’incorporazione di<br />

immagini che devono avere una larghezza uguale alla massima ampiezza disponibile:<br />

Bla bla bla<br />

<br />

<br />

bla bla bla.<br />

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org


Entità ISO gestite da Alml<br />

Capitolo 273<br />

Nel seguito vengono mostrate alcune tabelle che riportano lo stato attuale del supporto dato da<br />

Alml alle entità ISO standard. Ciò che non è disponibile, appare come racchiuso tra parentesi<br />

quadre.<br />

Tabella 273.1. Entità ISOnum: numeric and special graphic. Prima parte.<br />

SGML macro Risultato Descrizione in inglese<br />

&half; ½ fraction one-half<br />

&frac12; ½ fraction one-half<br />

&frac14; ¼ fraction one-quarter<br />

&frac34; ¾ fraction three-quarters<br />

&frac18; [frac18] fraction one-eighth<br />

&frac38; [frac38] fraction three-eighths<br />

&frac58; [frac58] fraction five-eighths<br />

&frac78; [frac78] fraction seven-eighths<br />

&sup1; 1 superscript one<br />

&sup2; 2 superscript two<br />

&sup3; 3 superscript three<br />

&plus; + plus sign<br />

&plusmn; ± plus-or-minus sign<br />

&lt; < less-than sign<br />

&equals; = equals sign<br />

&gt; > greater-than sign<br />

&divide; ÷ divide sign<br />

&times; × multiply sign<br />

&curren; ¤ general currency sign<br />

&pound; £ pound sign<br />

&dollar; $ dollar sign<br />

&cent; ¢ cent sign<br />

&yen; ¥ yen sign<br />

&num; # number sign<br />

&percnt; % percent sign<br />

&amp; & ampersand<br />

&ast; * asterisk<br />

&commat; @ commercial at<br />

&lsqb; [ left square bracket<br />

&bsol; \ reverse solidus<br />

&rsqb; ] right square bracket<br />

&lcub; { left curly bracket<br />

&horbar; [horbar] horizontal bar<br />

&verbar; | vertical bar<br />

&rcub; } right curly bracket<br />

Tabella 273.2. Entità ISOnum: numeric and special graphic. Seconda parte.<br />

SGML macro Risultato Descrizione in inglese<br />

&micro; µ micro sign<br />

&ohm; [ohm ] ohm sign<br />

&deg; ° degree sign<br />

&ordm; º ordinal indicator, masculine<br />

&ordf; ª ordinal indicator, feminine<br />

&sect; § section sign<br />

&para; pilcrow (paragraph sign)<br />

&middot; . middle dot<br />

&larr; [larr ] leftward arrow<br />

2981


2982 Entità ISO gestite da Alml<br />

SGML macro Risultato Descrizione in inglese<br />

&rarr; [rarr ] rightward arrow<br />

&uarr; [uarr ] upward arrow<br />

&darr; [darr ] downward arrow<br />

&copy; © copyright sign<br />

&reg; ® registered sign<br />

&trade; [trade ] trade mark sign<br />

&brvbar; ¦ broken (vertical) bar<br />

&not; ¬ not sign<br />

&sung; [sung ] music note (sung text sign)<br />

&excl; ! exclamation mark<br />

&iexcl; ¡ inverted exclamation mark<br />

&quot; " quotation mark<br />

&apos; ’ apostrophe<br />

&lpar; ( left parenthesis<br />

&rpar; ) right parenthesis<br />

&comma; , comma<br />

&lowbar; _ low line<br />

&hyphen; - hyphen<br />

&period; . full stop, period<br />

&sol; / solidus<br />

&colon; : colon<br />

&semi; ; semicolon<br />

&quest; ? question mark<br />

&iquest; ¿ inverted question mark<br />

&laquo; « angle quotation mark, left<br />

&raquo; » angle quotation mark, right<br />

&lsquo; ‘ single quotation mark, left<br />

&rsquo; ’ single quotation mark, right<br />

&ldquo; [ldquo ] double quotation mark, left<br />

&rdquo; [rdquo ] double quotation mark, right<br />

&nbsp;<br />

no break (required) space<br />

&shy;<br />

soft hyphen<br />

Tabella 273.3. Entità ISOtech: general technical. Prima parte.<br />

SGML macro Risultato Descrizione in inglese<br />

&aleph; [aleph ] aleph, Hebrew<br />

&and; [and ] logical and<br />

&ang90; [ang90 ] right (90 degree) angle<br />

&angsph; [angsph] angle-spherical<br />

&ap; [ap ] approximate<br />

&becaus; [becaus] because<br />

&bottom; [bottom] perpendicular<br />

&cap; [cap ] intersection<br />

&cong; [cong ] congruent with<br />

&conint; [conint] contour integral operator<br />

&cup; [cup ] union or logical sum<br />

&equiv; [equiv ] identical with<br />

&exist; [exist ] at least one exists<br />

&forall; [forall] for all<br />

&fnof; [fnof ] function of (italic small f)<br />

&ge; ≥ greater-than-or-equal<br />

&iff; [iff ] if and only if<br />

&infin; [infin ] infinity<br />

&int; [int ] integral operator<br />

&isin; [isin ] set membership<br />

&lang; [lang ] left angle bracket


Entità ISO gestite da Alml 2983<br />

SGML macro Risultato Descrizione in inglese<br />

&lArr; [lArr ] is implied by<br />

&le; ≤ less-than-or-equal<br />

&minus; - minus sign<br />

&mnplus; [mnplus] minus-or-plus sign<br />

&nabla; [nabla ] del, Hamilton operator<br />

&ne; [ne ] not equal<br />

&ni; [ni ] contains<br />

&or; [or ] logical or<br />

Tabella 273.4. Entità ISOtech: general technical. Seconda parte.<br />

SGML macro Risultato Descrizione in inglese<br />

&par; [par ] parallel<br />

&part; [part ] partial differential<br />

&permil; [permil] per thousand<br />

&perp; [perp ] perpendicular<br />

&prime; [prime ] prime or minute<br />

&Prime; [Prime ] double prime or second<br />

&prop; [prop ] is proportional to<br />

&radic; [radic ] radical<br />

&rang; [rang ] right angle bracket<br />

&rArr; [rArr ] implies<br />

&sim; [sim ] similar<br />

&sime; [sime ] similar, equals<br />

&square; [square] square<br />

&sub; [sub ] subset or is implied by<br />

&sube; [sube ] subset, equals<br />

&sup; [sup ] superset or implies<br />

&supe; [supe ] superset, equals<br />

&there4; [there4] therefore<br />

&Verbar; [Verbar] dbl vertical bar<br />

&angst; [angst ] capital A, ring<br />

&bernou; [bernou] bernoulli function (script capital B)<br />

&compfn; [compfn] composite function (small circle)<br />

&Dot; [Dot ] dieresis or umlaut mark<br />

&DotDot; [DotDot] four dots above<br />

&hamilt; [hamilt] hamiltonian (script capital H)<br />

&lagran; [lagran] lagrangian (script capital L)<br />

&lowast; [lowast] low asterisk<br />

&notin; [notin ] negated set membership<br />

&order; [order ] order of (script small o)<br />

&phmmat; [phmmat] physics M-matrix (script capital M)<br />

&tdot; [tdot ] three dots above<br />

&tprime; [tprime] triple prime<br />

&wedgeq; [wedgeq] corresponds to (wedge, equals)<br />

Tabella 273.5. Entità ISOlat1: added latin 1. Prima parte.<br />

SGML macro Risultato Descrizione in inglese<br />

&aacute; á small a, acute accent<br />

&Aacute; Á capital A, acute accent<br />

&acirc; â small a, circumflex accent<br />

&Acirc; Â capital A, circumflex accent<br />

&agrave; à small a, grave accent<br />

&Agrave; À capital A, grave accent<br />

&aring; å small a, ring


2984 Entità ISO gestite da Alml<br />

SGML macro Risultato Descrizione in inglese<br />

&Aring; Å capital A, ring<br />

&atilde; ã small a, tilde<br />

&Atilde; Ã capital A, tilde<br />

&auml; ä small a, dieresis or umlaut mark<br />

&Auml; Ä capital A, dieresis or umlaut mark<br />

&aelig; æ small ae diphthong (ligature)<br />

&AElig; Æ capital AE diphthong (ligature)<br />

&ccedil; ç small c, cedilla<br />

&Ccedil; Ç capital C, cedilla<br />

&eth; ð small eth, Icelandic<br />

&ETH; Ð capital Eth, Icelandic<br />

&eacute; é small e, acute accent<br />

&Eacute; É capital E, acute accent<br />

&ecirc; ê small e, circumflex accent<br />

&Ecirc; Ê capital E, circumflex accent<br />

&egrave; è small e, grave accent<br />

&Egrave; È capital E, grave accent<br />

&euml; ë small e, dieresis or umlaut mark<br />

&Euml; Ë capital E, dieresis or umlaut mark<br />

&iacute; í small i, acute accent<br />

&Iacute; Í capital I, acute accent<br />

&icirc; î small i, circumflex accent<br />

&Icirc; Î capital I, circumflex accent<br />

&igrave; ì small i, grave accent<br />

&Igrave; Ì capital I, grave accent<br />

&iuml; ï small i, dieresis or umlaut mark<br />

&Iuml; Ï capital I, dieresis or umlaut mark<br />

Tabella 273.6. Entità ISOlat1: added latin 1. Seconda parte.<br />

SGML macro Risultato Descrizione in inglese<br />

&ntilde; ñ small n, tilde<br />

&Ntilde; Ñ capital N, tilde<br />

&oacute; ó small o, acute accent<br />

&Oacute; Ó capital O, acute accent<br />

&ocirc; ô small o, circumflex accent<br />

&Ocirc; Ô capital O, circumflex accent<br />

&ograve; ò small o, grave accent<br />

&Ograve; Ò capital O, grave accent<br />

&oslash; ø small o, slash<br />

&Oslash; Ø capital O, slash<br />

&otilde; õ small o, tilde<br />

&Otilde; Õ capital O, tilde<br />

&ouml; ö small o, dieresis or umlaut mark<br />

&Ouml; Ö capital O, dieresis or umlaut mark<br />

&szlig; ß small sharp s, German (sz ligature)<br />

&thorn; þ small thorn, Icelandic<br />

&THORN; Þ capital THORN, Icelandic<br />

&uacute; ú small u, acute accent<br />

&Uacute; Ú capital U, acute accent<br />

&ucirc; û small u, circumflex accent<br />

&Ucirc; Û capital U, circumflex accent<br />

&ugrave; ù small u, grave accent<br />

&Ugrave; Ù capital U, grave accent<br />

&uuml; ü small u, dieresis or umlaut mark<br />

&Uuml; Ü capital U, dieresis or umlaut mark<br />

&yacute; ý small y, acute accent

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!