selezionare composizione occorre
250.5.2 Insieme di caratteri - Proglinux
250.5.2 Insieme di caratteri - Proglinux
- 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 />
"&#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 />
"&#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 ‘&’);
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 />
è il progetto di documentazione di Linux in italiano.<br />
<br />
è 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 è 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 © 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 © 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 <ppinco@dinkel.brot.dg><br />
<br />
Copyright © 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 <daniele@swlibero.org><br />
<br />
Copyright © 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 <tizio@dinkel.brot.dg><br />
Caio Cai <caio@dinkel.brot.dg><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 © 1987-1999 Tizio Tizi<br />
Copyright © 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 © 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 © 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 = >STDIN>)<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 />
‘ ’<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 />
•<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 />
©<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 />
≡<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 />
¡<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 />
Ł<br />
ł<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 />
−
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 />
Ø<br />
ø<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 />
£<br />
@print{}<br />
&print;<br />
@printindex nome_indice<br />
<br />
@pxref{nome_nodo , [voce], [argomento_o_titolo], [file_info], [manual]}<br />
<br />
@questiondown{}<br />
¿<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 />
ß<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® 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 ‘&’, ‘<’,<br />
‘>’, ‘'’ e ‘"’.<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 ‘&’, 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 ‘&’, 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 <pinco.pallino@brot.dg><br />
2011.11.11<br />
<br />
Copyright © Pinco Pallino, <pinco.pallino@brot.dg><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 />
&<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 & pallino<br />
|<br />
‘--> 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 © 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 <pinco.pallino@brot.dg><br />
2011.11.11<br />
<br />
Copyright © Pinco Pallino, <pinco.pallino@brot.dg><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 />
½ ½ fraction one-half<br />
½ ½ fraction one-half<br />
¼ ¼ fraction one-quarter<br />
¾ ¾ fraction three-quarters<br />
⅛ [frac18] fraction one-eighth<br />
⅜ [frac38] fraction three-eighths<br />
⅝ [frac58] fraction five-eighths<br />
⅞ [frac78] fraction seven-eighths<br />
¹ 1 superscript one<br />
² 2 superscript two<br />
³ 3 superscript three<br />
+ + plus sign<br />
± ± plus-or-minus sign<br />
< < less-than sign<br />
= = equals sign<br />
> > greater-than sign<br />
÷ ÷ divide sign<br />
× × multiply sign<br />
¤ ¤ general currency sign<br />
£ £ pound sign<br />
$ $ dollar sign<br />
¢ ¢ cent sign<br />
¥ ¥ yen sign<br />
# # number sign<br />
% % percent sign<br />
& & ampersand<br />
* * asterisk<br />
@ @ commercial at<br />
[ [ left square bracket<br />
\ \ reverse solidus<br />
] ] right square bracket<br />
{ { left curly bracket<br />
― [horbar] horizontal bar<br />
| | vertical bar<br />
} } right curly bracket<br />
Tabella 273.2. Entità ISOnum: numeric and special graphic. Seconda parte.<br />
SGML macro Risultato Descrizione in inglese<br />
µ µ micro sign<br />
Ω [ohm ] ohm sign<br />
° ° degree sign<br />
º º ordinal indicator, masculine<br />
ª ª ordinal indicator, feminine<br />
§ § section sign<br />
¶ pilcrow (paragraph sign)<br />
· . middle dot<br />
← [larr ] leftward arrow<br />
2981
2982 Entità ISO gestite da Alml<br />
SGML macro Risultato Descrizione in inglese<br />
→ [rarr ] rightward arrow<br />
↑ [uarr ] upward arrow<br />
↓ [darr ] downward arrow<br />
© © copyright sign<br />
® ® registered sign<br />
™ [trade ] trade mark sign<br />
¦ ¦ broken (vertical) bar<br />
¬ ¬ not sign<br />
♪ [sung ] music note (sung text sign)<br />
! ! exclamation mark<br />
¡ ¡ inverted exclamation mark<br />
" " quotation mark<br />
' ’ apostrophe<br />
( ( left parenthesis<br />
) ) right parenthesis<br />
, , comma<br />
_ _ low line<br />
‐ - hyphen<br />
. . full stop, period<br />
/ / solidus<br />
: : colon<br />
; ; semicolon<br />
? ? question mark<br />
¿ ¿ inverted question mark<br />
« « angle quotation mark, left<br />
» » angle quotation mark, right<br />
‘ ‘ single quotation mark, left<br />
’ ’ single quotation mark, right<br />
“ [ldquo ] double quotation mark, left<br />
” [rdquo ] double quotation mark, right<br />
<br />
no break (required) space<br />
­<br />
soft hyphen<br />
Tabella 273.3. Entità ISOtech: general technical. Prima parte.<br />
SGML macro Risultato Descrizione in inglese<br />
ℵ [aleph ] aleph, Hebrew<br />
∧ [and ] logical and<br />
&ang90; [ang90 ] right (90 degree) angle<br />
∢ [angsph] angle-spherical<br />
≈ [ap ] approximate<br />
∵ [becaus] because<br />
⊥ [bottom] perpendicular<br />
∩ [cap ] intersection<br />
≅ [cong ] congruent with<br />
∮ [conint] contour integral operator<br />
∪ [cup ] union or logical sum<br />
≡ [equiv ] identical with<br />
∃ [exist ] at least one exists<br />
∀ [forall] for all<br />
ƒ [fnof ] function of (italic small f)<br />
≥ ≥ greater-than-or-equal<br />
⇔ [iff ] if and only if<br />
∞ [infin ] infinity<br />
∫ [int ] integral operator<br />
∈ [isin ] set membership<br />
⟨ [lang ] left angle bracket
Entità ISO gestite da Alml 2983<br />
SGML macro Risultato Descrizione in inglese<br />
⇐ [lArr ] is implied by<br />
≤ ≤ less-than-or-equal<br />
− - minus sign<br />
∓ [mnplus] minus-or-plus sign<br />
∇ [nabla ] del, Hamilton operator<br />
≠ [ne ] not equal<br />
∋ [ni ] contains<br />
∨ [or ] logical or<br />
Tabella 273.4. Entità ISOtech: general technical. Seconda parte.<br />
SGML macro Risultato Descrizione in inglese<br />
∥ [par ] parallel<br />
∂ [part ] partial differential<br />
‰ [permil] per thousand<br />
⊥ [perp ] perpendicular<br />
′ [prime ] prime or minute<br />
″ [Prime ] double prime or second<br />
∝ [prop ] is proportional to<br />
√ [radic ] radical<br />
⟩ [rang ] right angle bracket<br />
⇒ [rArr ] implies<br />
∼ [sim ] similar<br />
≃ [sime ] similar, equals<br />
□ [square] square<br />
⊂ [sub ] subset or is implied by<br />
⊆ [sube ] subset, equals<br />
⊃ [sup ] superset or implies<br />
⊇ [supe ] superset, equals<br />
∴ [there4] therefore<br />
‖ [Verbar] dbl vertical bar<br />
Å [angst ] capital A, ring<br />
ℬ [bernou] bernoulli function (script capital B)<br />
∘ [compfn] composite function (small circle)<br />
¨ [Dot ] dieresis or umlaut mark<br />
⃜ [DotDot] four dots above<br />
ℋ [hamilt] hamiltonian (script capital H)<br />
ℒ [lagran] lagrangian (script capital L)<br />
∗ [lowast] low asterisk<br />
∉ [notin ] negated set membership<br />
ℴ [order ] order of (script small o)<br />
ℳ [phmmat] physics M-matrix (script capital M)<br />
⃛ [tdot ] three dots above<br />
‴ [tprime] triple prime<br />
≙ [wedgeq] corresponds to (wedge, equals)<br />
Tabella 273.5. Entità ISOlat1: added latin 1. Prima parte.<br />
SGML macro Risultato Descrizione in inglese<br />
á á small a, acute accent<br />
Á Á capital A, acute accent<br />
â â small a, circumflex accent<br />
  capital A, circumflex accent<br />
à à small a, grave accent<br />
À À capital A, grave accent<br />
å å small a, ring
2984 Entità ISO gestite da Alml<br />
SGML macro Risultato Descrizione in inglese<br />
Å Å capital A, ring<br />
ã ã small a, tilde<br />
à à capital A, tilde<br />
ä ä small a, dieresis or umlaut mark<br />
Ä Ä capital A, dieresis or umlaut mark<br />
æ æ small ae diphthong (ligature)<br />
Æ Æ capital AE diphthong (ligature)<br />
ç ç small c, cedilla<br />
Ç Ç capital C, cedilla<br />
ð ð small eth, Icelandic<br />
Ð Ð capital Eth, Icelandic<br />
é é small e, acute accent<br />
É É capital E, acute accent<br />
ê ê small e, circumflex accent<br />
Ê Ê capital E, circumflex accent<br />
è è small e, grave accent<br />
È È capital E, grave accent<br />
ë ë small e, dieresis or umlaut mark<br />
Ë Ë capital E, dieresis or umlaut mark<br />
í í small i, acute accent<br />
Í Í capital I, acute accent<br />
î î small i, circumflex accent<br />
Î Î capital I, circumflex accent<br />
ì ì small i, grave accent<br />
Ì Ì capital I, grave accent<br />
ï ï small i, dieresis or umlaut mark<br />
Ï Ï 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 />
ñ ñ small n, tilde<br />
Ñ Ñ capital N, tilde<br />
ó ó small o, acute accent<br />
Ó Ó capital O, acute accent<br />
ô ô small o, circumflex accent<br />
Ô Ô capital O, circumflex accent<br />
ò ò small o, grave accent<br />
Ò Ò capital O, grave accent<br />
ø ø small o, slash<br />
Ø Ø capital O, slash<br />
õ õ small o, tilde<br />
Õ Õ capital O, tilde<br />
ö ö small o, dieresis or umlaut mark<br />
Ö Ö capital O, dieresis or umlaut mark<br />
ß ß small sharp s, German (sz ligature)<br />
þ þ small thorn, Icelandic<br />
Þ Þ capital THORN, Icelandic<br />
ú ú small u, acute accent<br />
Ú Ú capital U, acute accent<br />
û û small u, circumflex accent<br />
Û Û capital U, circumflex accent<br />
ù ù small u, grave accent<br />
Ù Ù capital U, grave accent<br />
ü ü small u, dieresis or umlaut mark<br />
Ü Ü capital U, dieresis or umlaut mark<br />
ý ý small y, acute accent