Blocchi comuni

In questo capitolo vengono descritti i componenti più comuni che si comportano come blocchi, assieme a elementi accessori a questi, anche se riguardano un contesto lineare. Nelle sezioni successive non viene menzionato l'elemento p, pur essendo questo il blocco più importante:

Figura u95.1. L'elemento p costituisce un blocco che contiene dei componenti lineari e non prevede alcun attributo.

p
`--componenti_lineari

Elenchi e simili

Gli elenchi di Alml sono molto semplici. Si tratta dei soliti elenchi puntati, numerati e descrittivi. Questi si comportano in modo molto simile all'HTML; la differenza sostanziale sta nel fatto che il contenuto delle voci è composto da uno o più blocchi di testo, mentre in HTML è consentita anche la presenza di righe pure e semplici.

Figura u95.2. Elenchi descrittivi.

dl
 `--elemento_dell'elenco...
      |--dt
      |   `--componenti_lineari
      `--dd
          `--blocco...

Figura u95.3. Elenchi numerati o puntati.

ol|ul
 `--li...
     `--blocco...

Tabella u95.4. Elenchi.

Elemento Descrizione
dl
Elenco descrittivo.
dt
Termine descrittivo di un elenco.
dd
Descrizione di una voce di un elenco descrittivo.
ol
Elenco numerato.
ul
Elenco puntato.
li
Elemento di un elenco numerato o puntato.

Segue la descrizione di alcuni esempi. Si comincia con un elenco puntato, suddiviso in sottoelenchi:

<p>Il documento si articola in:</p>
<ul>
<li>
    <p>volumi (o tomi)</p>
    <p>quando il documento è molto grande</p>
</li>
<li>
    <p>parti</p>
    <p>quando il volume richiede una suddivisione degli argomenti ben
    strutturata</p>
</li>
<li>
    <p>capitoli</p>
    <p>i capitoli, a loro volta, si articolano in:</p>
    <ul>    
    <li>
        <p>sezioni</p>
    </li>
    <li>
        <p>sottosezioni</p>
    </li>
    <li>
        <p>sotto-sottosezioni</p>
    </li>
    </ul>
</li>
</ul>

Ecco come si presenta questo elenco:

Il documento si articola in:

  • volumi (o tomi)

    quando il documento è molto grande

  • parti

    quando il volume richiede una suddivisione degli argomenti ben strutturata

  • capitoli

    i capitoli, a loro volta, si articolano in:

    • sezioni

    • sottosezioni

    • sotto-sottosezioni

Segue lo stesso esempio, utilizzando elenchi numerati:

<p>Il documento si articola in:</p>
<ol>
<li>
    <p>volumi (o tomi)</p>
    <p>quando il documento è molto grande</p>
</li>
<li>
    <p>parti</p>
    <p>quando il volume richiede una suddivisione degli argomenti ben
    strutturata</p>
</li>
<li>
    <p>capitoli</p>
    <p>i capitoli, a loro volta, si articolano in:</p>
    <ol>
    <li>
        <p>sezioni</p>
    </li>
    <li>
        <p>sottosezioni</p>
    </li>
    <li>
        <p>sotto-sottosezioni</p>
    </li>
    </ol>
</li>
</ol>

Ecco come si presenta:

Il documento si articola in:

  1. volumi (o tomi)

    quando il documento è molto grande

  2. parti

    quando il volume richiede una suddivisione degli argomenti ben strutturata

  3. capitoli

    i capitoli, a loro volta, si articolano in:

    1. sezioni

    2. sottosezioni

    3. sotto-sottosezioni

Segue un esempio per l'uso dell'elenco descrittivo:

<dl>
<dt><strong>volumi</strong></dt>
<dd>
    <p>Un documento di grandi dimensioni va suddiviso in volumi (o
    tomi).</p>
</dd>
<dt><strong>parti</strong></dt>
<dd>
    <p>Quando un volume richiede una suddivisione degli argomenti ben
    strutturata, va suddiviso in parti.</p>
</dd>
<dt><strong>capitoli</strong></dt>
<dd>
    <p>Un volume di piccole dimensioni o una parte, vanno suddivisi
    in capitoli. A sua volta, il capitolo si suddivise in sezioni
    fino a tre livelli ulteriori.</p>
    <dl>
    <dt><strong>sezioni</strong></dt>
    <dd>
        <p>Le sezioni sono la suddivisione principale dei capitoli.</p>
    </dd>
    <dt><strong>sottosezioni</strong></dt>
    <dd>
        <p>Le sezioni si suddividono in sottosezioni.</p>
    </dd>
    <dt><strong>sotto-sottosezioni</strong></dt>
    <dd>
        <p>Le sottosezioni si suddividono in sotto-sottosezioni
        e non sono previsti altri livelli inferiori.</p>
    </dd>
    </dl>
</dd>
</dl>

Ecco come si mostra l'elenco descrittivo:

volumi

Un documento di grandi dimensioni va suddiviso in volumi (o tomi).

parti

Quando un volume richiede una suddivisione degli argomenti ben strutturata, va suddiviso in parti.

capitoli

Un volume di piccole dimensioni o una parte, vanno suddivisi in capitoli. A sua volta, il capitolo si suddivise in sezioni fino a tre livelli ulteriori.

sezioni

Le sezioni sono la suddivisione principale dei capitoli.

sottosezioni

Le sezioni si suddividono in sottosezioni.

sotto-sottosezioni

Le sottosezioni si suddividono in sotto-sottosezioni e non sono previsti altri livelli inferiori.

Testo letterale o quasi

L'inclusione di testo letterale in un sorgente SGML è sempre un problema. Alml prevede tre ambienti diversi: verbatimpre, asciiart e pre. Nei primo due casi si può scrivere senza alcuna preoccupazione, tranne per il fatto che il testo va inserito in una sezione marcata di tipo CDATA; nel terzo caso invece, è necessario comportarsi come nel testo normale, utilizzando le entità standard quando servono, potendo includere anche gran parte degli elementi che rappresentano un'inserzione all'interno di una riga. In tutti i casi vengono rispettate le interruzioni di riga.

<verbatimpre>
<![CDATA[
uno
   &
    due
]]>
</verbatimpre>
<pre>
uno
   &amp;
    due
</pre>

I due esempi portano allo stesso risultato:

uno
   &
    due

Gli elementi verbatimpre e pre possono anche essere bordati e numerati. L'esempio seguente mostra l'uso dell'elemento verbatimpre, dove le righe del suo contenuto devono essere numerate a partire dal numero uno:

<verbatimpre numbering="1">
<![CDATA[
drwxr-xr-x    2 root     root         4096 2003-01-17 15:47 bin
drwxr-xr-x    3 root     root         4096 2003-01-28 16:18 boot
drwxr-xr-x    1 root     root            0 1970-01-01 01:00 dev
drwxr-xr-x  139 root     root         8192 2003-01-30 16:47 etc
drwxrwsr-x   17 root     staff        4096 2003-01-19 22:01 home
drwxr-xr-x    6 root     root         4096 2003-01-11 15:26 lib
drwxr-xr-x    2 root     root        16384 2000-12-15 14:49 lost+found
drwxr-xr-x  311 root     root         8192 2003-01-22 16:36 mnt
dr-xr-xr-x   89 root     root            0 2003-01-30 14:30 proc
drwxr-xr-x   15 root     root         4096 2003-01-30 16:32 root
drwxr-xr-x    2 root     root         4096 2003-01-10 16:04 sbin
drwxrwxrwt    5 root     root       176128 2003-01-30 17:45 tmp
drwxr-xr-x   15 root     root         4096 2003-01-04 11:06 usr
drwxr-xr-x   16 root     root         4096 2002-10-27 18:25 var
]]>
</verbatimpre>

Ecco cosa si ottiene:

      1 drwxr-xr-x    2 root     root         4096 2003-01-17 15:47 bin
      2 drwxr-xr-x    3 root     root         4096 2003-01-28 16:18 boot
      3 drwxr-xr-x    1 root     root            0 1970-01-01 01:00 dev
      4 drwxr-xr-x  139 root     root         8192 2003-01-30 16:47 etc
      5 drwxrwsr-x   17 root     staff        4096 2003-01-19 22:01 home
      6 drwxr-xr-x    6 root     root         4096 2003-01-11 15:26 lib
      7 drwxr-xr-x    2 root     root        16384 2000-12-15 14:49 lost+found
      8 drwxr-xr-x  311 root     root         8192 2003-01-22 16:36 mnt
      9 dr-xr-xr-x   89 root     root            0 2003-01-30 14:30 proc
     10 drwxr-xr-x   15 root     root         4096 2003-01-30 16:32 root
     11 drwxr-xr-x    2 root     root         4096 2003-01-10 16:04 sbin
     12 drwxrwxrwt    5 root     root       176128 2003-01-30 17:45 tmp
     13 drwxr-xr-x   15 root     root         4096 2003-01-04 11:06 usr
     14 drwxr-xr-x   16 root     root         4096 2002-10-27 18:25 var

L'esempio seguente mostra l'uso dell'elemento pre, bordato:

<pre border="1">
uno
   &amp;
    due
</pre>

Ecco il risultato:

uno
   &
    due

È bene osservare che il testo inserito negli elementi verbatimpre, asciiart e pre, dovrebbe essere limitato al primo gruppo di punti di codifica, corrispondente in pratica a ISO 8859-1. Diversamente si pongono due tipi di problemi: il carattere tipografico che si ottiene può essere differente e soprattutto può avere una spaziatura diversa; inoltre, in alcuni casi è indispensabile selezionare il linguaggio, cosa che non si può fare all'interno degli elementi verbatimpre e asciiart, perché assolutamente letterali. Eventualmente, in caso di necessità si deve usare l'elemento pre, che invece consente l'inserimento dell'elemento span al suo interno.

Tabella u95.16. Elementi SGML che riguardano la rappresentazione di testo preformattato.

Elemento Descrizione
pre [width="n"] [border="0|1"] [numbering="n"]
Contiene testo lineare da mantenere impaginato come nel sorgente. L'attributo width serve a richiede un certo numero di colonne; l'attributo border serve a richiedere una cornice; l'attributo numbering consente di numerare le righe a partire da un certo numero.
pnewline
Si tratta di un elemento vuoto da usare in un elemento pre, per spezzare le righe in modo visibile nella composizione finale.
verbatimpre [width="n"] [border="0|1"]
[numbering="n"] [file="nome"]
Contiene testo lineare letterale, da mantenere impaginato come nel sorgente. L'attributo width serve a richiede un certo numero di colonne; l'attributo border serve a richiedere una cornice; l'attributo numbering consente di numerare le righe a partire da un certo numero; l'attributo file consente di salvare una copia del contenuto in un file, in fase di composizione.
asciiart [width="n"] [file="nome"]
[rotated="0|1"]
Contiene testo lineare letterale, da mantenere impaginato come nel sorgente. L'attributo width serve a richiede un certo numero di colonne; l'attributo file consente di salvare una copia del contenuto in un file, in fase di composizione; l'attributo rotated consente di richiedere la rotazione del testo nella composizione per la stampa.

L'elemento asciiart è diverso da verbatimpre, in quanto deve trovarsi inserito in un elemento object (descritto in un altro capitolo); inoltre non può essere spezzato tra le pagine e appare sempre al centro della pagina (in orizzontale). Sempre nel caso della composizione stampata, l'elemento asciiart può essere visualizzato ruotandolo di 90 gradi, così da poter sfruttare più spazio orizzontale. Segue un esempio il cui risultato nella composizione finale si vede nella figura u95.18:

<object split="0">
<asciiart width="96" rotated="1">
<![CDATA[
 ATTIVITÀ                                      | PASSIVITÀ
===============================================|================================================
codice descrizione                      importo|codice descrizione                       importo
-----------------------------------------------+------------------------------------------------
1..... A T T I V O             110.596,21      |2..... P A S S I V O            127.021,91
102000 IMMOBILIZZ. MATERIALI          65.485,00|216000 PATRIMONIO NETTO                69.903,10
...003 Fabbricati                  80.000,00   |...001 Patrimonio Netto             69.903,10
...007 Attrezzature d'Ufficio       8.000,00   |217000 FND ACCANT.RISCHI E ONERI        1.317,00
...021 Fnd Amm.to Fabbricati       22.515,00-  |...006 Altri Fondi                   1.317,00
                                               |218000 T.F.R. LAVORO SUBORDINATO        9.000,00
                                               |...001 Debito per TFRL               9.000,00
106000 CLIENTI                        21.267,11|220000 FORNITORI                       39.270,81
...001 Clienti                     21.267,11   |...001 Fornitori                    39.270,81
111000 CREDITI COMMERCIALI            12.835,80|225000 DEBITI COMMERCIALI               5.431,00
...002 Cambiali Attive             12.835,80   |...002 Effetti Passivi               5.431,00
114000 DISPONIBILITÀ LIQUIDE          11.008,30|226000 DEBITI TRIBUTARI                 2.100,00
...001 Banca ITCS                   4.338,00   |...002 Debito per IVA                1.000,00
...005 Denaro e Valori in Cassa     6.670,30   |...007 Debiti per Imposte            1.100,00
                                               |3..... ALTRI CONTI PATRIMONIALI   1.485,00 
                                               |329000 CONTI TRANSITORI E FINALI        1.485,00
                                               |...006 Istituti Previdenziali        1.485,00
                               ----------------|                                ----------------
       TOTALE                        110.596,21|       TOTALE                         128.506,91
       Risultato d'esercizio          17.910,70
                               ================
       TOTALE A PAREGGIO             128.506,91
]]>
</asciiart>
</object>

Figura u95.18. Il risultato della composizione dell'esempio di utilizzo di asciiart ruotando il contenuto (per la sola composizione per la stampa).

 ATTIVITÀ                                      | PASSIVITÀ
===============================================|================================================
codice descrizione                      importo|codice descrizione                       importo
-----------------------------------------------+------------------------------------------------
1..... A T T I V O             110.596,21      |2..... P A S S I V O            127.021,91
102000 IMMOBILIZZ. MATERIALI          65.485,00|216000 PATRIMONIO NETTO                69.903,10
...003 Fabbricati                  80.000,00   |...001 Patrimonio Netto             69.903,10
...007 Attrezzature d'Ufficio       8.000,00   |217000 FND ACCANT.RISCHI E ONERI        1.317,00
...021 Fnd Amm.to Fabbricati       22.515,00-  |...006 Altri Fondi                   1.317,00
                                               |218000 T.F.R. LAVORO SUBORDINATO        9.000,00
                                               |...001 Debito per TFRL               9.000,00
106000 CLIENTI                        21.267,11|220000 FORNITORI                       39.270,81
...001 Clienti                     21.267,11   |...001 Fornitori                    39.270,81
111000 CREDITI COMMERCIALI            12.835,80|225000 DEBITI COMMERCIALI               5.431,00
...002 Cambiali Attive             12.835,80   |...002 Effetti Passivi               5.431,00
114000 DISPONIBILITÀ LIQUIDE          11.008,30|226000 DEBITI TRIBUTARI                 2.100,00
...001 Banca ITCS                   4.338,00   |...002 Debito per IVA                1.000,00
...005 Denaro e Valori in Cassa     6.670,30   |...007 Debiti per Imposte            1.100,00
                                               |3..... ALTRI CONTI PATRIMONIALI   1.485,00 
                                               |329000 CONTI TRANSITORI E FINALI        1.485,00
                                               |...006 Istituti Previdenziali        1.485,00
                               ----------------|                                ----------------
       TOTALE                        110.596,21|       TOTALE                         128.506,91
       Risultato d'esercizio          17.910,70
                               ================
       TOTALE A PAREGGIO             128.506,91

Dalla descrizione fatta nella tabella u95.16, si può osservare che gli elementi verbatimpre e asciiart prevedono l'attributo file, con lo scopo di salvare una copia del contenuto in un file, mentre si esegue la composizione per generare il risultato finale. Si legga il capitolo u100 a proposito degli allegati.

Gli elementi pre, verbatimpre, asciiart (compreso syntax che viene descritto nella sezione successiva), sono predisposti inizialmente per poter rappresentare 80 colonne di testo letterale, in una larghezza pari a quella normale del testo. In situazioni particolari può essere necessario ridurre (o ampliare) la dimensione dei caratteri nella composizione stampata, per consentire la rappresentazione di un testo più ampio orizzontalmente (o più breve, ma con caratteri più grandi). In questi casi, si può utilizzare l'attributo width, assegnando la quantità di colonne che si desiderano. Seguono due esempi: nel primo caso si richiedono espressamente solo 60 colonne, in modo da ottenere un carattere un po' più grande del solito; nel secondo vengono richieste 90 colonne.

<pre width="60">
1234567890
          1234567890
                    1234567890
                              1234567890
                                        1234567890
                                                  1234567890
</pre>
<pre width="90">
1234567890
          1234567890
                    1234567890
                              1234567890
                                        1234567890
                                                  1234567890
                                                            1234567890
                                                                      1234567890
                                                                                1234567890
</pre>

In caso di necessità, se si vuole che la dimensione del carattere sia la stessa dell'ambiente in cui si trova l'elemento in questione, è sufficiente richiedere espressamente una larghezza pari a zero:

<pre width="0">
1234567890
          1234567890
                    1234567890
                              1234567890
                                        1234567890
                                                  1234567890
</pre>

Sezioni marcate «CDATA» e spazi

Si comprende intuitivamente che, gli spazi che si inseriscono all'interno di una sezione marcata di tipo CDATA hanno sempre valore. Esiste una sola eccezione, per cui i due esempi seguenti sono equivalenti:

<![CDATA[6t86546ftgiuy98yq435q0459823
2908430tfg76tr7852tg9j0090jh
432w7089hphg7t8680'09u76r78d]]>
<![CDATA[
6t86546ftgiuy98yq435q0459823
2908430tfg76tr7852tg9j0090jh
432w7089hphg7t8680'09u76r78d
]]>

Tuttavia, c'è la possibilità di fare degli errori senza rendersene conto, inserendo involontariamente degli spazi prima della fine della riga. L'esempio seguente riprende quello appena mostrato e mostra la conclusione della riga con il simbolo :

<![CDATA[ ¶
6t86546ftgiuy98yq435q0459823¶
2908430tfg76tr7852tg9j0090jh¶
432w7089hphg7t8680'09u76r78d¶
]]>¶

In questo caso, si può osservare che c'è uno spazio tra l'inizio della sezione marcata e la conclusione della riga:

<![CDATA[ ¶

In questo modo, succede qualcosa che per chi non è esperto è impensabile: il contenuto della sezione marcata ha una riga iniziale vuota. In pratica, è come se il contenuto fosse semplicemente così:

 ¶
6t86546ftgiuy98yq435q0459823¶
2908430tfg76tr7852tg9j0090jh¶
432w7089hphg7t8680'09u76r78d¶

A seconda del significato del contenuto di una sezione marcata di questo tipo, può darsi che la riga iniziale aggiunta risulti ininfluente, oppure può far perdere qualunque significato a tali dati.

Modelli sintattici

In un documento a carattere tecnico-informatico, è essenziale la possibilità di indicare dei modelli sintattici. Alml prevede l'uso di un elemento simile a pre, dedicato precisamente a questo scopo: syntax. Segue un esempio del suo utilizzo:

<syntax>
man <synsqb><var>n_sezione</var></synsqb> <var>nome</var>
</syntax>

Ecco come appare:

man [n_sezione] nome

All'interno di questo elemento si possono inserire altri elementi specifici per rappresentare i componenti della sintassi. Infatti, è necessario distinguere tra parole chiave, metavariabili e altre indicazioni. In generale, quello che si scrive normalmente deve essere inteso come un dato fisso, ovvero delle parole chiave o delle stringhe fisse. Per indicare un contenuto variabile si utilizza l'elemento var per delimitare la denominazione di un qualcosa di variabile (un'opzione o simile).

Altri elementi speciali servono a guidare la lettura della sintassi: synsqb delimita una parte della sintassi che va intesa come facoltativa e si traduce generalmente con delle parentesi quadre che, se possibile, si distinguono dal testo normale; syncub delimita una parte della sintassi che va intesa come un corpo unico e si traduce generalmente con delle parentesi graffe speciali; synverbar (elemento vuoto) indica un'alternativa e si rappresenta con una barra verticale; synellipsis (elemento vuoto) rappresenta dei puntini di sospensione particolari, diversi da quelli che si otterrebbero in modo normale; synstar (elemento vuoto) rappresenta una cosa simile all'asterisco secondo la shell tradizionale, da intendersi come sostituto di qualunque stringa. Nell'uso di questi elementi occorre sempre un po' di prudenza, tenendo conto dei tipi di composizione in cui non è possibile mostrare questi simboli in forme diverse dal normale.

Tabella u95.28. Elementi SGML che riguardano la rappresentazione di modelli sintattici.

Elemento Descrizione
syntax [width="n"] [border="0|1"]
[split="0|1"] [numbering="n"]
Contiene un modello sintattico preformattato. L'attributo width consente di specificare una larghezza in colonne del modello; l'attributo border consente mettere un bordo attorno al modello; l'attributo split consente di rendere separabile il modello tra le pagine; l'attributo numbering consente di numerare le righe del modello a partire dal numero indicato.
synsqb
Delimita una porzione del modello sintattico, mostrando delle parentesi quadre (raggruppamento opzionale).
syncub
Delimita una porzione del modello sintattico, mostrando delle parentesi graffe (raggruppamento obbligatorio).
synverbar
È un elemento vuoto che mostra una barra verticale (alternativa).
var
Rappresenta una metavariabile sintattica.
synellipsis
È un elemento vuoto che mostra un'ellissi (ripetizione).
snewline
È un elemento vuoto che consente di spezzare una riga del modello, sottolineando il fatto che nella situazione a cui ci si riferisce, la riga dovrebbe essere continua.
synstar
È un elemento vuoto che consente di mostrare una stellina (un asterisco), da intendere come simbolo di qualunque cosa. In pratica, lo si intende come si farebbe per una shell POSIX, ma anche in contesti estranei alla digitazione di comandi del sistema operativo.

Si tenga in considerazione il fatto che gli elementi synsqb, syncub, synverbar, synellipsis e var, possono essere utilizzati anche al di fuori dell'elemento syntax, in qualità di inserzioni normali nelle righe.

La riga di un modello sintattico che si estende troppo in orizzontale, può essere spezzata e ripresa inserendo l'elemento vuoto snewline, in modo da ottenere una segnalazione evidente nella composizione finale, senza lasciare ambiguità. La stessa cosa, eventualmente, si può fare nell'elemento pre, usando l'elemento vuoto pnewline. Si osservi l'esempio seguente che si riferisce a un modello sintattico:

<syntax border="1">
pippo --primo <synverbar> <snewline>--secondo <synverbar> --terzo
</syntax>

Ecco cosa si ottiene:

pippo --primo | \
  \--secondo | --terzo

Quando si usa un elemento come snewline, pnewline o cnewline, vicino a uno spazio orizzontale, è bene che lo spazio venga lasciato prima dell'inserzione dell'elemento stesso, senza eliminarlo, in modo da sottolinearne la presenza.

Comandi

I comandi che si impartiscono attraverso una riga di comando, possono essere rappresentati con l'elemento command. Si osservi l'esempio seguente:

<command><prompt>$ </prompt><type>ls -l</type><kbd>Invio</kbd></command>

Ecco come appare:

ls -l[Invio]

Nell'ambito dell'elemento command è quasi tutto facoltativo; tuttavia, l'invito, rappresentato dall'elemento prompt, va messo per primo. Dopo l'elemento type, che serve a delimitare il testo che viene inserito sulla riga di comando, è possibile anche specificare il tasto che serve a concludere la digitazione, come in questo caso, oppure se ne può fare a meno, lasciandolo sottinteso.

Il testo che viene restituito da un comando si rappresenta normalmente con l'elemento verbatimpre o pre, contenuto in un elemento object.

A volte, si ha la necessità di rappresentare dei comandi piuttosto lunghi, che nella composizione stampata potrebbero risultare spezzati in modo imprevedibile e indesiderabile. È possibile indicare esplicitamente dove spezzare il comando, facendo in modo che nella composizione si intenda chiaramente questo fatto. Per questo si usa l'elemento vuoto cnewline, che si inserisce all'interno di type.

Figura u95.32. Sintassi semplificata per l'uso dell'elemento command.

command
  |--prompt
  |    `--testo_lineare
  |--type
  |    `--[testo_lineare|cnewline]...
  `--[kbd|button]

Tabella u95.33. Elementi SGML che servono a rappresentare un comando.

Elemento Descrizione
command
Comando da digitare.
prompt
Stringa dell'invito.
type
Digitazione del comando.
cnewline
Elemento vuoto per continuare il comando a riga nuova.
kbd
Tasto o combinazione di tasti da premere.
button
Bottone o tasto grafico da selezionare.

«a2» 2013.11.11 --- Copyright © Daniele Giacomini -- appunti2@gmail.com http://informaticalibera.net