HTML per sopravvivere

Autore: M. Piai
Data: 2004-08-26
Aggiornamenti:2004-08-27, 2004-08-28, 2004-08-29, 2004-09-04, 2004-09-07, 2004-09-13, 2004-09-26, 2004-09-29, 2004-09-30, 2004-10-01, 2004-10-03

Indice


1   Premessa

Il presente documento vuole illustrare l'uso dei principali elementi HTML, con un'impostazione volutamente poco formale e operativa, senza però voler tralasciare del tutto aspetti importanti come la verifica della correttezza sintattica dei documenti HTML.

L'obiettivo principale è quello di portare rapidamente il lettore a scrivere semplici documenti HTML privi di errori grossolani, in modo da poter sfruttare i principali programmi per la gestione e l'elaborazione dei documenti stessi. Successivamente vengono introdotti ulteriori concetti maggiormente tecnici e orientati ad applicazioni specifiche legate a HTML, come i moduli FORM e altro ancora.

Diverse parti del presente documento derivano più o meno esplicitamente da spunti - sia stilistici che di contenuto - ricavati dagli «Appunti di informatica libera» di Daniele Giacomini, come spiegato nella sezione intitolata Copyright. Inoltre - sebbene gran parte dei concetti qui esposti siano standard e quindi indipendenti dalla piattaforma hardware e software utilizzata - gli esempi illustrati sono stati verificati su un sistema GNU/Linux e su una piattaforma hardware i386 (Intel).

Questo documento è stato realizzato utilizzando gli strumenti Docutils.

2   La struttura fondamentale di un documento

Quando si compone un documento scritto, solitamente si espongono i concetti voluti mediante parole, le quali vengono raggruppate in proposizioni.

Esempio

Per esempio:

L'Italia è una Repubblica democratica

è una proposizione formata da sei parole; come è noto, le parole sono separate le une dalle altre tramite spazi, oppure mediante speciali simboli del linguaggio, come l'apostrofo, «'», o altri ancora.

Le proposizioni possono essere raggruppate in periodi, e più periodi in paragrafi.

Esempio

Per esempio:

L'Italia è una Repubblica democratica, fondata sul lavoro.

è un periodo fomato da due proposizioni; come è noto, le proposizioni sono separate le une dalle altre tramite spazi, speciali simboli di punteggiatura, come la virgola, «,», e altri ancora, oppure congiunzioni.

Ancora:

L'Italia ripudia la guerra come strumento di offesa alla
libertà degli altri popoli e come mezzo di risoluzione delle
controversie internazionali

è un periodo formato da due proposizioni, separate dalla congiunzione «e»; come è noto, ciascuna proposizione dovrebbe essere retta da un predicato verbale, anche se talvolta questo è incompleto o addirittura omesso (o sottinteso, specie per evitare ripetizioni dello stesso).

Ancora:

L'Italia ripudia la guerra come strumento di offesa alla
libertà degli altri popoli e come mezzo di risoluzione delle
controversie internazionali; consente, in condizioni di
parità con gli altri Stati, alle limitazioni di sovranità
necessarie ad un ordinamento che assicuri la pace e la
giustizia fra le Nazioni; promuove e favorisce le
organizzazioni internazionali rivolte a tale scopo.

è un paragrafo formato da tre periodi, separati l'uno dall'altro tramite punto e virgola, «;». Il paragrafo è concluso dal punto, «.», che a volte può essere utilizzato anche per separare i periodi all'interno dello stesso paragrafo.

Più paragrafi possono essere raggruppati in un documento, formando ad esempio una sezione di testo. Per separare i paragrafi è prassi l'utilizzo di una riga di testo vuota.

Esempio

Ecco una sezione formata da tre paragrafi:

Questo è il primo paragrafo... bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla. Bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla.

Questo è il secondo paragrafo... bla bla bla bla bla bla bla
bla bla. Bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla. Bla bla bla bla bla bla bla bla bla bla bla
bla bla.

Questo è il terzo paragrafo... bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla.

3   Elementi fondamentali di HTML

3.1   Generalità

È possibile utilizzare alcuni degli elementi del linguaggio HTML per marcare le parti del testo di un documento, ossia per assegnare alle stesse un particolare significato; tale marcatura potrebbe in seguito essere utilizzata da dei programmi per la visualizzazione, la composizione per la stampa, o per altre particolari elaborazioni relative al documento stesso.

Gli elementi HTML sono caratterizzati da marcatori di apertura e di chiusura (questi ultimi possono a volte essere omessi; in certi casi non sono neppure previsti) e da un contenuto, ossia da tutto ciò che si trova fra il marcatore di apertura e quello di chiusura relativi all'elemento stesso. I marcatori di apertura hanno la seguente forma:

<NOME>

mentre quelli di chiusura hanno la seguente forma:

</NOME>

dove, con NOME si intende il nome dell'elemento.

Nota

La forma generale dei marcatori di apertura potrebbe essere più complessa di quella illustrata, per esempio potrebbe contenere attributi; ad esempio:

<NOME ATTRIBUTO1="valore1" ATTRIBUTO2="valore2">

è un marcatore che presenta due attributi, ciascuno con un suo valore. Si tenga presente che i marcatori di chiusura sono sempre privi di attributi.

3.2   I principali elementi di blocco

L'elemento che si utilizza per marcare i paragrafi è l'elemento P.

Esempio

L'esempio precedente potrebbe essere marcato come segue:

<P>Questo è il primo paragrafo... bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla. Bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla.</P>

<P>Questo è il secondo paragrafo... bla bla bla bla bla
bla bla bla bla. Bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla. Bla bla bla bla bla bla
bla bla bla bla bla bla bla.</P>

<P>Questo è il terzo paragrafo... bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla.</P>

Tipicamente, un gruppo omogeneo di paragrafi costituisce una sezione autonoma del documento; come tale, la sezione dovrebbe iniziare con un titolo che la contraddistingua all'interno del documento. HTML mette a disposizione una serie di elementi appositi a tale scopo, da H1 a H6; intuitivamente, il primo rappresenta un titolo di importanza maggiore, mentre l'ultimo è quello di importanza minore. Nel caso più semplice, ossia quello di un documento formato da un'unica sezione, su utilizza solitamente solo l'elemento H1, che in questo caso potrebbe servire a marcare anche il titolo del documento stesso (anche se a questo scopo è designato un altro elemento, TITLE, di cui si parlerà in seguito).

Esempio

Facendo sempre riferimento ai precedenti esempi, si potrebbe aggiungere un titolo di sezione principale in questo modo:

<H1>Questo è il titolo della sezione</H1>

<P>Questo è il primo paragrafo... bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla. Bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla.</P>

<P>Questo è il secondo paragrafo... bla bla bla bla bla
bla bla bla bla. Bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla. Bla bla bla bla bla bla
bla bla bla bla bla bla bla.</P>

<P>Questo è il terzo paragrafo... bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla.</P>

Se invece si volesse strutturare il documento in modo più complesso, si potrebbe procedere come segue:

<H1>Questo è il titolo della sezione principale</H1>

<H2>Questo è il titolo della prima sezione di secondo
livello</H2>

<P>Questo è il primo paragrafo della prima sezione di
secondo livello...  bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla. Bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla.</P>

<P>Questo è il secondo paragrafo...  bla bla bla bla bla
bla bla bla bla. Bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla. Bla bla bla bla bla bla
bla bla bla bla bla bla bla.</P>

<H2>Questo è il titolo della seconda sezione di secondo
livello</H2>

<P>Questo è il primo paragrafo della seconda sezione di
secondo livello...  bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla.</P>

4   Resa ed elaborazione di un documento HTML

Verranno ora illustrati alcuni programmi per la resa e l'elaborazione dei documenti HTML.

Nota

Un documento HTML è un file di testo che contiene elementi HTML rispettando la sintassi specificata dal linguaggio HTML. Affinchè la sintassi sia corretta, è necessario che i vari elementi siano distribuiti in uno specifico ordine; inoltre alcuni elementi non possono essere omessi. Per il momento si ignoreranno tali aspetti formali, anche perchè i programmi che verranno utilizzati sono piuttosto «tolleranti» rispetto alla correttezza sintattica; sia chiaro, comunque, che gli esempi visti sinora non rispettano appieno la sintassi del linguaggio.

Per rendere (ossia visualizzare) un documento HTML si è soliti utilizzare un programma di navigazione ipertestuale; ad esempio si potrebbe utilizzare Mozilla.

Esempio

Si supponga quindi di disporre di un file di testo, esempio.html, contenente il testo del precedente esempio, e si esegua il seguente comando da un terminale a finestra:

$ mozilla esempio.html

il risultato che dovrebbe apparire potrebbe essere simile al seguente:

[hxs_01_01.jpeg]

Si noti quanto segue:

  • i paragrafi vengono resi in modo da essere separati l'uno dall'altro mediante una riga vuota, coerentemente a quanto precedentemente osservato;
  • gli spazi e la suddivisione in righe all'interno dei singoli paragrafi vengono adattati in modo da occupare in modo ottimale la larghezza della finestra del navigatore; in particolare, se una riga viene interrotta all'interno del documento, nella resa tale interruzione è ignorata;
  • i titoli delle varie sezioni vengono resi con dimensioni differenti allo scopo di segnalarne la relativa importanza.

Volendo, è possibile sfruttare il navigatore per stampare su carta la resa del documenti HTML; tuttavia i risultati possono essere insoddisfacenti, e si preferisce quindi utilizzare programmi specifici per la composizione per la stampa; uno di questi è HTML2ps.

Mediante HTML2ps è possibile, a partire da un documento HTML, generare un file PostScript; tale file può successivamente essere visualizzato e stampato tramite, ad esempio, GV.

Esempio

A titolo di esempio, per generare un file PostScript, denominato esempio.ps, a partire dal file esempio.html, si esegue il comando:

$ html2ps -o esempio.ps esempio.html  

dopodiché è possibile visualizzare il file PostScript mediante il comando:

$ gv esempio.ps  

ed eventualmente stamparlo su carta utilizzando la voce «Print document...» del menù «File».

HTML2ps offre alcune possibilità aggiuntive per controllare l'aspetto del file PostScript generato, tramite l'uso di opzioni della linea di comando.

Esempio

A titolo di esempio, il comando:

$ html2ps -s 2 -L -2 -n -S "paper {type: A4;}" -l it -o esempio.ps esempio.html

produce un file PostScript con il testo ingrandito a dimensioni doppie (opzione -s 2), orientato orizzontalmente (opzione -L), organizzato su due colonne (opzione -2), con le pagine numerate (opzione -n), con un formato per la stampa su carta A4 (opzione -S "paper {type: A4;}") e specificando che il documento aderisce alle convenzioni della lingua italiana (opzione -l it).


Se si desidera preparare una versione puramente testuale del proprio documento, adatta ad esempio alla stampa a caratteri o alla visualizzazione su terminale, è possibile utilizzare il navigatore ipertestuale W3M.

Esempio

Per esempio, con il comando:

$ w3m -dump esempio.html > esempio.text

si genera, a partire dal sorgente HTML, una resa puramente testuale contenuta nel file esempio.text.

In seguito è possibile stampare il file esempio.text mediante il comando:

$ lpr esempio.text

Si può notare che W3M produce un file di testo ottimizzato per una larghezza pari a 80 colonne di testo; se lo si desidera, è possibile preventivamente ridurre le colonne occupate in larghezza dal file di testo usando l'opzione -cols:

$ w3m -dump -cols 66 esempio.html > esempio.text

e poi eventualmente stampare il file esempio.text.

5   Alcuni elementi di testo

Il contenuto di un elemento P si chiama anche testo lineare, mentre l'elemento P, nel suo complesso, costituisce un esempio di ciò che comunemente viene detto blocco (o block element). È possibile marcare alcune parti del testo lineare mediante elementi di testo (o inline element), che permettono di qualificare in modo più dettagliato le parti stesse. Fra i più comuni vi sono gli elementi: EM, STRONG, Q, CODE, SUB, SUP, BR.

L'elemento EM enfatizza il testo contenuto, di solito in corsivo.

L'elemento STRONG evidenzia il testo contenuto, di solito in neretto.

L'elemento Q marca il testo come citato, di solito indicandolo fra qualche tipo di delimitatore (ad esempio virgolette).

L'elemento CODE marca il testo come codice usato in una elaborazione, e viene di solito reso in carattere dattilografico (monospaziato).

Gli elementi SUB e SUP marcano il testo come, rispettivamente, a pedice e ad apice.

L'elemento BR permette di interrompere una riga di testo lineare senza interrompere il testo stesso; in pratica permette di andare a capo all'interno di un paragrafo; si tratta di un elemento vuoto, ossia privo di contenuto, e quindi non prevede il marcatore di chiusura.

Esempio

Il seguente frammento di documento HTML:

<H1>Elementi del testo lineare</H1>

<P>All'interno di un <EM>testo lineare</EM> si possono
usare elementi che delimitano e qualificano il testo che
racchiudono.<BR>Questo è un <STRONG>neretto</STRONG>, questa
è la molecola dell'acqua: <CODE>H<SUB>2</SUB>O</CODE>.</P>

<P>Si osservi comunque che non tutti gli elementi che
delimitano del testo lineare producono necessariamente
un effetto visibile nel risultato ottenuto attraverso
il navigatore, oppure possono prevedere l'inserzione di
altri simboli.  Per esempio, Dante Alighieri scrisse:
<Q>Nel mezzo del cammin di nostra vita mi ritrovai per
una selva oscura ché la diritta via era smarrita.</Q></P>

potrebbe essere reso come segue:

[hxs_01_02.jpeg]

Si noti che l'elemento BR interrompe la riga del testo lineare ma non il paragrafo, come suggerito dal fatto che la sua presenza (dopo la parola «racchiudono.») non introduce una riga vuota.

6   Inserimento immagini

Il linguaggio HTML prevede l'utilizzo di elementi per l'inserimento di immagini, provenienti da file esterni, all'interno del testo lineare; tuttavia, per evitare problemi di compatibilità con i vari programmi di navigazione, è bene staccare tali elementi dal testo normale, racchiudendoli esplicitamente all'interno di un elemento P.

L'elemento tradizionale per inserire immagini è IMG. Esso prevede diversi attributi, in particolare SRC per indicare il file esterno contenente l'immagine da includere e ALT per fornire un testo alternativo da presentare in caso di impossibilità di visualizzazione dell'immagine.

Esempio

Si consideri il seguente frammento HTML:

<H1>Inclusione di oggetti</H1>

<P>... bla bla bla...</P>

<P>Infine, per essere certi che tutto funzioni anche con
un vecchio navigatore, è sempre meglio limitarsi a usare
l'elemento <CODE>IMG</CODE> per le immagini:</P>

<P><IMG SRC="philosophical-gnu-sm.jpg" ALT="GNU
filosofico"></P>

<P>... bla bla bla...</P>

Qualora l'immagine sia accessibile, la resa potrebbe essere la seguente:

[hxs_01_03.jpeg]

Se, invece, per qualche motivo l'immagine non fosse accessibile, la resa potrebbe essere la seguente:

[hxs_01_04.jpeg]

7   Verifica di correttezza sintattica

Quando si compongono documenti HTML, è utile avere a disposizione degli strumenti che possano aiutare a verificare la presenza o l'assenza di errori sintattici.

7.1   Verifica sommaria

Come accennato, i vari elementi di un documento HTML devono distribuirsi secondo determinate regole, così come i vari marcatori relativi agli elementi. Le regole sono di solito codificate all'interno di opportuni documenti pubblicati dal soggetto internazionale responsabile dello standard HTML, il W3C, oppure da altri soggetti come ISO. Però anche un documento HTML incompleto può essere, in parte, controllato, senza tuttavia sperare di validarlo. In ogni caso gli strumenti del pacchetto SP permettono una verifica sommaria, mediante il comando:

$ nsgmls -s FILE_HTML

oppure:

$ nsgmls -s FILE_HTML 2>&1 | less

a seconda della «consistenza» della lista di messaggi generata dal comando nsgmls.

Bisogna, però, avere l'accortezza di utilizzare anche l'elemento BODY; si tratta di un elemento obbligatorio che contiene ciò che viene visto normalmente in fase di resa, altrimenti il comando nsgmls non può funzionare.

Esempio

Consideriamo ad esempio il seguente frammento HTML:

<BODY>

<H1>Questo è il titolo della sezione</H1>

<P>Questo è il primo paragrafo... bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla. Bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla.</P>

</P>Questo è il secondo paragrafo... bla bla bla bla bla
bla bla bla bla. Bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla. Bla bla bla bla bla bla
bla bla bla bla bla bla bla.<P>

<P>Questo è il terzo paragrafo... bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla.</P>

</BODY>

Se si effettua la verifica sintattica si ottiene quanto segue:

$ nsgmls -s esempio2.html 
nsgmls:esempio2.html:1:0:E: no document type declaration; will parse without validation
nsgmls:esempio2.html:11:3:E: end tag for element "P" which is not open
nsgmls:esempio2.html:23:6:E: end tag for "P" omitted, but its declaration does not permit this
nsgmls:esempio2.html:15:8: start tag was here

La prima riga del responso del comando nsglms è inevitabile, poiché il frammento analizzato è incompleto; la seconda riga dice che alla riga 11 del frammento si trova il marcatore di chiusura per un elemento P che non era stato ancora aperto... effettivamente, ad un'analisi più attenta, risulta che nel secondo paragrafo i marcatori dell'elemento P risultano invertiti... una volta corretto tale errore, ed effettuata di nuovo la verifica sintattica si ottiene il messaggio:

$ nsgmls -s esempio2.html 
nsgmls:esempio2.html:1:0:E: no document type declaration; will parse without validation

ossia il frammento è in sostanza sintatticamente corretto. Nel seguito si vedrà come far sparire anche questo messaggio.

7.2   Verifica completa

7.2.1   Standard HTML

In precedenza si è specificato che solo di un documento HTML formattato secondo le specifiche di qualche standard si può controllare la validità. Esistono diversi standard che specificano la struttura di un documento HTML; tali standard si sono sviluppati a partire dal 1990, dando luogo a caratteristiche fra di loro a volte incompatibili. Senza indulgere in dettagli sulla storia evolutiva degli standard, si specifica che lo sviluppo conclusivo è stato condotto da W3C e l'ultima versione è la 4.01; la stabilizzazione dello standard HTML con le versioni 4.* di W3C ha portato alla definizione dello standard ISO 15445, che precisa meglio i limiti di questo formato. Si osservi che un documento conforme allo standard ISO 15445 è anche conforme allo standard HTML 4.01 di W3C.

Secondo lo standard ISO 15445, la struttura generale di un documento HTML deve rispettare il seguente schema:

<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HTML//EN">

<HTML>

<HEAD>

<TITLE>...</TITLE>

</HEAD>

<BODY>

...
...
...

</BODY>

</HTML>

ove, al posti delle ellissi ... si devono inserire il titolo del documento e il corpo del documento.

La prima riga serve a dichiarare l'intenzione di aderire allo standard ISO 15445, e va sempre indicata esattamente come sopra riportato.

L'intero documento, tranne la dichiarazione iniziale, deve essere contenuto nell'elemento HTML.

Il documento si compone sostanzialmente di due elementi: HEAD e BODY; l'elemento BODY, come già accennato, contiene sostanzialmente tutto quello che poi viene visualizzato in fase di resa; l'elemento HEAD precede l'elemento BODY, e può contenere diverse informazioni di carattere «amministrativo», fra le quali l'unica obbligatoria è costituita dall'elemento TITLE, il quale denota il titolo del documento.

7.2.2   Esempio di validazione di un documento standard

Supponendo di avere a disposizione il seguente documento HTML:

<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HTML//EN">

<HTML>

<HEAD>

<TITLE>Un esempio di documento conforme a ISO 15445</TITLE>

</HEAD>

<BODY>

<H1>Elementi del testo lineare</H1>

<P>All'interno di un <EM>testo lineare</EM> si possono
usare elementi che delimitano e qualificano il testo che
racchiudono.<BR>Questo è un <STRONG>neretto</STRONG>, questa
è la molecola dell'acqua: <CODE>H<SUB>2</SUB>O</CODE>.</P>

<P>Si osservi comunque che non tutti gli elementi che
delimitano del testo lineare producono necessariamente
un effetto visibile nel risultato ottenuto attraverso il
navigatore, oppure possono prevedere l'inserzione di altri
simboli.  Per esempio, Dante Alighieri scrisse: <Q>Nel mezzo
del cammin di nostra vita mi ritrovai per una selva oscura
ché la diritta via era smarrita.</Q></P>

</BODY>

</HTML>

se si esegue il comando:

$ nsgmls -s esempio.html

si osserverà l'assenza di output, il che significa che il documento aderisce allo standard dichiarato nella prima riga, ossia ISO 15445.

8   Testo preformattato

Il carattere tipografico che si ottiene normalmente, visualizzando un documento HTML attraverso un navigatore grafico (o anche un sistema di elaborazione per la stampa), ha una larghezza proporzionale. Quando c'è la necessità di rappresentare qualcosa con un carattere a larghezza uniforme, ovvero «dattilografico», si usano alcuni elementi appositi: CODE nell'ambito di un testo lineare; PRE come blocco separato. L'elemento PRE in particolare è molto utile per la rappresentazione di listati, come può essere una porzione di un sorgente di un linguaggio di programmazione, o il risultato dell'elaborazione di un programma.

Esempio

Si consideri il seguente frammento HTML:

<H3>Contenuto delle directory</H3>

<P>Le directory si esplorano con il comando
<CODE>ls</CODE>:</P>

<PRE>
$ ls /bin[Invio]

arch           dd             gzip           nisdomainname  tar
ash            df             hostname       ping           touch
awk            dmesg          kill           ps             true
basename       dnsdomainname  ln             pwd            umount
bash           doexec         login          rm             uname
bsh            domainname     ls             rmdir          vi
cat            echo           mail           rpm            view
chgrp          egrep          mkdir          sed            vim
chmod          ex             mknod          sh             ypdomainname
chown          false          more           sleep          zcat
cp             fgrep          mount          sort
cpio           gawk           mt             stty
csh            grep           mv             su
date           gunzip         netstat        sync
</PRE>

La resa potrebbe essere simile alla seguente:

[hxs_01_13.jpeg]

Ciò che in particolare si deve comprendere dall'esempio, è il comportamento dell'elemento PRE: è un blocco che contiene testo lineare, ma a differenza dell'elemento P, gli spazi orizzontali e le interruzioni di riga vengono rispettati nella resa finale, così come sono nel sorgente.

9   Elenchi numerati e puntati

A volte, in un testo è necessario introdurre degli elenchi (o liste) di voci; è comune far precedere ciascuna voce da uno speciale simbolo tipografico (ad esempio un cerchietto) o da un numero di una sequenza. A tale scopo HTML mette a disposizione alcuni speciali elementi di blocco che tra breve saranno illustrati.

Si tenga presente che un elenco ha una struttura necessariamente più complessa rispetto a un blocco di testo lineare, dunque per realizzarlo saranno necessari più elementi. In particolare, per realizzare un elenco saranno necessari almeno due tipi di elemento: uno per indicare l'elenco stesso, e uno per ciascuna voce dell'elenco. Nel caso degli elenchi numerati, l'elemento per indicare l'elenco è OL, mentre nel caso degli elenchi puntati l'elemento è UL. Ciascuna voce dell'elenco è invece indicata dall'elemento LI. Ciascun elemento OL (oppure UL) contiene uno o più elementi LI, che possono contenere testo lineare, oppure uno o più blocchi (per esempio possono contenere dei sottoelenchi); comunque, per evitare ambiguità, conviene usare sempre dei blocchi per il contenuto degli elementi LI.

Esempio

Seguono alcuni esempi.

Il seguente frammento HTML:

<P>I - Immobilizzazioni immateriali</P>
            
<OL><LI>

  <P>costi di impianto e di ampliamento</P>

</LI><LI>

  <P>costi di ricerca, di sviluppo e di
  pubblicità</P>

</LI><LI>

  <P>diritti di brevetto industriale e diritti di
  utilizzazione delle opere dell'ingegno</P>

</LI><LI>

  <P>concessioni, licenze, marchi e diritti simili</P>

</LI><LI>

  <P>avviamento</P>

</LI><LI>

  <P>immobilizzazioni immateriali in corso e acconti</P>

</LI><LI>

  <P>altre immobilizzazioni immateriali</P>

</LI></OL>

potrebbe venir reso come segue:

[hxs_01_14.jpeg]

Si noti come la numerazione venga generata automaticamente in fase di resa, senza che sia necessario includerla nel sorgente HTML; si noti altresì l'allineamento della lista rispetto al testo normale.

Ecco un esempio di elenco puntato:

<P>Immobilizzazioni</P>

<UL><LI>
        
  <P>I - Immobilizzazioni immateriali</P>
            
</LI><LI>

  <P>II - Immobilizzazioni materiali</P>

</LI><LI>

  <P>[...]</P>

</LI></UL>

che potrebbe essere reso come segue:

[hxs_01_15.jpeg]

Ecco, infine, un esempio di elenchi «annidati»; in pratica, è possibile fare in modo che una voce di un elenco contenga un altro elenco:

<P>Immobilizzazioni</P>

<UL><LI>
        
  <P>I - Immobilizzazioni immateriali</P>
            
  <OL><LI>

    <P>costi di impianto e di ampliamento</P>

  </LI><LI>

    <P>costi di ricerca, di sviluppo e di
    pubblicità</P>

  </LI><LI>

    <P>diritti di brevetto industriale e diritti di
    utilizzazione delle opere dell'ingegno</P>

  </LI><LI>

    <P>concessioni, licenze, marchi e diritti simili</P>

  </LI><LI>

    <P>avviamento</P>

  </LI><LI>

    <P>immobilizzazioni immateriali in corso e acconti</P>

  </LI><LI>

    <P>altre immobilizzazioni immateriali</P>

  </LI></OL>

</LI><LI>

  <P>II - Immobilizzazioni materiali</P>

  <OL><LI>

    <P>terreni e fabbricati</P>

  </LI><LI>

    <P>[...]</P>

  </LI></OL>

</LI><LI>

  <P>[...]</P>

</LI></UL>

Ed ecco la resa del precedente frammento HTML:

[hxs_01_16.jpeg]

10   Tabelle e cenni sugli stili

10.1   Introduzione alle tabelle

Le tabelle sono elementi molto usati per la realizzazione di documenti in HTML in quanto permettono di organizzare i dati in strutture formate da righe e colonne.

Nota

Per molto tempo diversi autori di documenti HTML hanno utilizzato le tabelle anche allo scopo di impostare il layout di una pagina disponendo i paragrafi in colonne, oppure creando dei margini, o ancora distribuendo testo ed immagini in modo più vario e movimentato; sebbene questo utilizzo non otrodosso delle tabelle sia ancora molto in voga, si tratta di una pratica deprecata dal W3C, il quale suggerisce di utilizzare gli stili a questo scopo; di conseguenza, negli esempi di questa sezione, ci si asterrà dall'utilizzo delle tabelle a scopo meramente estetico.

La tabella è definita dall'elemento TABLE; al suo interno può essere inclusa una didascalia rappresentata dall'elemento CAPTION, quindi il contenuto della tabella viene distinto in intestazione, piede e corpo, all'interno dei quali si inseriscono le righe della tabella stessa. L'intestazione e il piede non sono obbligatori; in ogni caso, se si utilizzano vanno inseriti ordinatamente prima del corpo.

Inoltre, si tenga presente che lo standard ISO 15445 obbliga all'utilizzo dell'attributo SUMMARY nell'elemento TABLE. Questo attributo dovrebbe permettere di riassumere il contenuto della tabella per quelle situazioni in cui dovesse essere impossibile consultarla correttamente (eventualmente, è anche possibilile non sfruttare questa possibilità, pur mantenendo l'aderenza allo standard, semplicemente dando valore nullo all'attributo, così: SUMMARY="").

Ecco gli elementi da usare per la realizzazione delle tabelle HTML:

Elemento Significato
TABLE Delimita la tabella.
CAPTION Didascalia.
THEAD Righe di intestazione.
TFOOT Righe del piede.
TBODY Righe del corpo.
TR Riga normale (table row).
TH Elemento evidenziato di una riga (table head).
TD Elemento di una riga (table data).

Esempio

Poiché intestazione e piede non sono obbligatori, un caso semplificato al massimo di tabella potrebbe essere illustrato dal seguente frammento HTML:

<TABLE SUMMARY="I numeri interi da 1 a 6"><TBODY><TR><TD>

<P>uno</P></TD><TD><P>due</P>

</TD></TR><TR><TD>

<P>tre</P></TD><TD><P>quattro</P>

</TD></TR><TR><TD>

<P>cinque</P></TD><TD><P>sei</P>

</TD></TR></TBODY></TABLE>

La resa grafica potrebbe essere simile alla seguente figura:

[hxs_01_19.jpeg]

Vale la pena di sottolineare il fatto che gli elementi TD, ovvero le celle all'interno delle righe, possono contenere sia testo normale, sia blocchi di testo, ma qui, come nelle altre sezioni del presente articolo, si preferisce usare sempre solo blocchi.

Si noti che la resa grafica del precedente esempio non presenta nessun tipo di messa in risalto dei bordi della tabella; in effetti, lo standard ISO 15445 non consente l'utilizzo di attributi per la descrizione dei bordi da far risaltare, perché per questo si possono applicare degli stili, come viene illustrato nel seguito.

10.2   Introduzione agli stili

L'evoluzione del linguaggio HTML si è sviluppata attraverso la ricerca di introdurre elementi e attributi per il controllo della resa estetica. Tuttavia, questo approccio ha dimostrato di non essere efficace e lo standard ISO 15445 ha eliminato tutto il superfluo, per lasciare il controllo dell'estetica al di fuori del linguaggio, contando eventualmente sui fogli di stile CSS per questo scopo.

Il modo più semplice per utilizzare gli stili è forse quello di incorporare il contenuto di un foglio di stile direttamente all'interno di un documento HTML usando (all'interno dell'elemento HEAD) l'elemento STYLE, come nell'esempio seguente:

<HEAD>

<TITLE>Esempio</TITLE>

<STYLE TYPE="text/css"><!--

H1 { color: blue; }

P { font-size: 8pt; color: red; }

--></STYLE>

</HEAD>

<BODY>

<H1>Questo è il titolo della sezione principale</H1>

<H2>Questo è il titolo della prima sezione di secondo
livello</H2>

<P>Questo è il primo paragrafo della prima sezione di
secondo livello...  bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla. Bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla.</P>

<P>Questo è il secondo paragrafo...  bla bla bla bla bla
bla bla bla bla. Bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla. Bla bla bla bla bla bla
bla bla bla bla bla bla bla.</P>

<H2>Questo è il titolo della seconda sezione di secondo
livello</H2>

<P>Questo è il primo paragrafo della seconda sezione di
secondo livello...  bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla.</P>

</BODY>

Teoricamente, il titolo principale dovrebbe apparire di colore blu e il testo dei paragrafi di colore rosso con dimensioni del carattere leggermente ridotte rispetto al normale, come si vede nella figura successiva:

[hxs_01_20.jpeg]

Il linguaggio CSS (Cascading style sheet) permette di esprimere le caratteristiche «stilistiche» delle varie componenti di un documento HTML; questo avviene tramite regole come la seguente:

H1 { color: blue; }

in cui è presente un selettore (in questo caso H1) seguito da una dichiarazione fra parentesi graffe { e } terminata dal simbolo ;; la dichiarazione è composta da una proprietà separata dal successivo valore tramite il simbolo :. Una dichiarazione può eventualmente essere composta da più coppie proprietà/valore, come nel seguente esempio:

P { font-size: 8pt; color: red; }

Inoltre, al posto di un singolo selettore potrebbe essere indicata una lista di selettori separata dal simbolo ,.

Il selettore di una regola CSS è qualcosa che rappresenta una parte del testo a cui si vogliono applicare le dichiarazioni relative. Nella situazione più semplice, il selettore viene indicato con il nome dell'elemento a cui si attribuisce, come già apparso negli esempi mostrati in precedenza.

10.3   Applicazione degli stili alle tabelle

Un caso particolarmente interessante di utilizzo degli stili è quello che permette di «decorare» opportunamente le tabelle HTML, le quali (si rammenti) normalmente vengono rese in una forma esteticamente piuttosto spoglia. A tale scopo sono utili le proprietà CSS seguenti: border-style, border-width, background-color.

Esempio

Si riconsideri l'esempio iniziale, e lo si completi come segue:

<HEAD>

<TITLE>Esempio</TITLE>

<STYLE TYPE="text/css"><!--

TABLE { border-style: dotted; border-width: thick; }

--></STYLE>

</HEAD>

<BODY>

<TABLE SUMMARY="I numeri interi da 1 a 6"><TBODY><TR><TD>

<P>uno</P></TD><TD><P>due</P>

</TD></TR><TR><TD>

<P>tre</P></TD><TD><P>quattro</P>

</TD></TR><TR><TD>

<P>cinque</P></TD><TD><P>sei</P>

</TD></TR></TBODY></TABLE>

</BODY>

ossia, si attribuisca (tramite il corrispondente selettore) all'elemento TABLE la proprietà di avere un bordo spesso con stile puntato. Graficamente il risultato potrebbe essere simile al seguente:

[hxs_01_21.jpeg]

Uno stile più consueto potrebbe essere il seguente:

<STYLE TYPE="text/css"><!--

TABLE { border-style: solid; border-width: medium; }

TD { border-style: dashed; border-width: thin;
background-color: yellow; }

--></STYLE>

corrispondente alla seguente resa grafica:

[hxs_01_22.jpeg]

Si tenga comunque presente che, in generale, l'uso dei colori deve essere considerato con attenzione, sia per il fatto che alcuni possibili utenti del documento potrebbero non essere in grado di visualizzarli correttamente, sia perché alcuni programmi che trasformano documenti HTML in altri formati non supportano pienamente l'intero repertorio CSS (senza contare il fatto che spesso i documenti vengono stampati con stampanti in bianco e nero).

Se l'unico effetto che si vuole ottenere (ed è il caso più comune) è quello di bordare la tabella e le singole celle, sono sufficienti le regole seguenti:

TABLE { border-style: solid; border-width: thin; }

TD { border-style: dotted; border-width: thin; }

o qualcosa del genere.

10.4   Approfondimento

Ecco nel dettaglio le principali proprietà di interesse nello stile delle tabelle e di tutti i blocchi rettangolari:

Proprietà Valori Descrizione
border-width thin Bordo sottile.
medium Bordo medio.
thick Bordo spesso.
border-color colore Colore del bordo.
border-style none Bordo non visibile.
dotted Bordo puntato.
dashed Bordo tratteggiato.
solid Bordo continuo.
double Bordo continuo doppio.
width auto Larghezza automatica.
n pt Larghezza in punti.
n cm Larghezza in centimetri.
n mm Larghezza in millimetri.
n % Larghezza relativa in percentuale.
height auto Altezza automatica.
n pt Altezza in punti.
n cm Altezza in centimetri.
n mm Altezza in millimetri.
n % Altezza relativa in percentuale.

Nel capitolo intitolato «Blocchi» degli «Appunti di informatica libera» il lettore potrà trovare ulteriori informazioni in merito.

10.5   Tabelle più complesse

Si consideri ad esempio la seguente figura:

[hxs_01_23.jpeg]

la quale rappresenta una tabella con piede, corpo e intestazione. Per ottenere una simile tabella, completa di bordi sulle singole celle, è possibile scrivere il seguente codice HTML:

<HEAD>

<TITLE>Esempio tabella con stili</TITLE>

<STYLE TYPE="text/css"><!--

THEAD { background-color: cyan; }

TFOOT { background-color: yellow; }

TD { border-style: solid; border-width: thin; }

--></STYLE>

</HEAD>

<BODY>

<TABLE SUMMARY=""><THEAD><TR><TD>

<P>Codice RGB</P></TD><TD><P>Denominazione</P>

</TD></TR></THEAD><TFOOT><TR><TD>

<P>Codice RGB</P></TD><TD><P>Codice RGB</P>

</TD></TR></TFOOT><TBODY><TR><TD>

<P>255,0,0</P></TD><TD><P>Rosso</P>

</TD></TR><TR><TD>

<P>0,255,0</P></TD><TD><P>Verde</P>

</TD></TR><TR><TD>

<P>0,0,255</P></TD><TD><P>Blu</P>

</TD></TR></TBODY></TABLE>

</BODY>

Come esercizio per il lettore volenteroso, si provi l'effetto della proprietà border-collapse in corrispondenza del selettore TABLE, tenendo presente i valori separate e collapse.

10.6   Accorgimenti per HTML2ps

HTML2ps (versione 1.0 beta3) non gestisce che un limitato sottoinsieme di regole del linguaggio CSS, e in particolare sembra ignorare le proprietà riguardanti i bordi dei blocchi rettangolari, il che influsce sulla resa delle tabelle. Inoltre non considera le proprietà riguardanti il colore dello sfondo, e altre ancora come la larghezza delle celle.

Per risolvere, almeno in parte, il primo problema si deve uscire dall'ambito dello standard ISO 15445, e in particolare utilizzare l'attributo BORDER dell'elemento TABLE 1, previsto ad esempio da standard meno restrittivi, come HTML 4.01 o addirittura HTML 3.2 di W3C.

Esempio

Si consideri il primo esempio presentato nella sezione intitolata Applicazione degli stili alle tabelle. La resa PostScript prodotta da HTML2ps potrebbe essere qualcosa del genere:

[hxs_01_28.jpeg]

Volendo, se si sostituisce la riga:

<TABLE SUMMARY="I numeri interi da 1 a 6"><TBODY><TR><TD>

con la riga:

<TABLE SUMMARY="I numeri interi da 1 a 6" BORDER="1"><TBODY><TR><TD>

si avrebbe una resa PostScript simile alla seguente:

[hxs_01_29.jpeg]

Ci sono almeno due effetti collaterali indesiderati nella soluzione proposta nel precedente esempio:

  1. il documento HTML modificato non può essere conforme allo standard ISO 15445, e una verifica sintattica potrebbe fornire il messaggio there is no attribute "BORDER";
  2. volendo prevedere sia la produzione di documenti conformi allo standard ISO 15445 che di versioni stampate complete, è necessario mantenere parallelamente almeno due versioni del documento, una per ciascun tipo di esigenza.

Per quanto riguarda il secondo problema, può venire in aiuto il seguente script SED:

#!/bin/sed -f
#
# htmltableborder.sed
#
s/\(<TABLE\)/\1 BORDER=\"1\"/g

Per illustrarne il funzionamento si consideri il seguente esempio interattivo:

$ cat tab.html
<TABLE SUMMARY="I numeri interi da 1 a 6"><TBODY><TR><TD>
<P>uno</P></TD><TD><P>due</P>
</TD></TR><TR><TD>
....
$ ./htmltableborder.sed tab.html > tab-no-iso.html
$ cat tab-no-iso.html
<TABLE BORDER="1" SUMMARY="I numeri interi da 1 a 6"><TBODY><TR><TD>
<P>uno</P></TD><TD><P>due</P>
</TD></TR><TR><TD>
....

Pertanto, se si desidera aggiungere l'attributo non conforme BORDER prima di dare il documento HTML in pasto a HTML2ps, si può procedere con una pipeline, come segue:

$ ./htmltableborder.sed tab.html | html2ps -o tab.ps

Nota

Esistono altri problemi inerenti il difettoso supporto di HTML2ps al linguaggio CSS, nell'ambito delle tabelle: ad esempio non sembrano essere supportate alcune proprietà relative all'allineamento e alla larghezza. Anche in questi casi può essere necessario deviare temporaneamente dallo standard ISO 15445, e introdurre attributi specifici per i vari elementi. Preparare opportuni script che siano di ausilio a rendere (per quanto possibile) automatici tali inteventi può essere un utile esercizio per il lettore diligente e interessato.

Si consiglia comunque di non intestardirsi troppo nella ricerca di aspetti estetici più o meno soddifacenti, poiché è nella loro natura che siano soggetti a continue e mai terminate revisioni. È meglio invece concentrarsi sullo studio degli elementi strutturali dei documenti che si preparano (e sul contenuto) e accontentarsi dell'aspetto finale dei risultati che si ottengono automaticamente, poichè spesso è il migliore che si possa avere da più punti di vista.

11   Supporto alla composizione dei sorgenti HTML

La composizione di un documento HTML richiede una solida conoscenza del linguaggio, ma le caratteristiche sintattiche del linguaggio sono tali da indurre anche i più esperti in errori od omissioni. Allo scopo di evitare - per quanto possibile - questo genere di inconvenienti è necessario utilizzare degli strumenti di composizione abbastanza sofisticati da consentire di automatizzare l'inserimento dei marcatori e delle varie componenti sintattiche, magari secondo uno stile personalizzato.

11.1   nVI

Ovviamente la realizzazione pratica di quanto sopra descritto dipende sia dallo specifico editor utilizzato che dallo stile che l'autore sceglie di adottare; per quanto riguarda lo stile, una lettura attenta degli esempi proposti dovrebbe chiarire alcuni aspetti stilistici congeniali all'autore del presente documento; relativamente all'editor, si propone in questa sezione una soluzione che riguarda nVI, l'editor utilizzato dall'autore (se il lettore intende adattare tali proposte al suo editor preferito dovrà ovviamente consultare l'opportuna documentazione).

11.1.1   Abbreviazioni

nVI consente l'uso di abbreviazioni; ciò significa che è possibilie associare a opportune sequenze di caratteri delle altre.

Esempio

Se, ad esempio, durante una sessione di editing si esegue il comando:

:ab CPP Codice di Procedura Penale

allora, da quel momento in poi, ogni volta che si inserisce nel testo la stringa CPP, essa verrà automaticamente sostituita con la stringa Codice di Procedura Penale.

La validità delle abbreviazioni definite nel corso di una sessione di editing termina con la sessione stessa. Per fare in modo che le abbreviazioni siano permanenti è necessario inserire i corrispondenti comandi nel file di configurazione ~/.exrc: i comandi presenti in questo file vengono eseguiti all'avvio di ciascuna sessione di nVI.

11.1.2   Utilizzo di un file di configurazione personalizzato

Nel tempo, ogni utente di nVI tende a personalizzare il file ~/.exrc, per adattarlo alle proprie esigenze. L'autore del presente documento non fa eccezione e propone in questa sede il proprio; il file in questione è reperibile via Internet presso http://linuxdidattica.org/docs/altre_scuole/msm_p/hxs_01_01.exrc o localmente presso il nodo che serve questo documento. e una volta scaricato va opportunamente collocato e rinominato per l'uso, oppure combinato col proprio file personalizzato, qualore esso già esistesse.

Il file contiene in particolare una serie di abbreviazioni utili alla composizione «manuale» di documenti HTML, coerentemente a quanto già esposto nelle precedenti sezioni; inoltre sono presenti dei comandi che rendono più semplice l'utlizzo generale dell'editor oltre a delle abbreviazioni che corrispondono a comandi utili per la riformattazione dei paragrafi, e altro ancora.

11.1.3   Abbreviazioni per HTML

Ecco di seguito riassunte le abbreviazioni di interesse per l'editing di documenti HTML presenti nel file di configurazione, opportunamente commentate:

Abbreviazione Significato
HThtml Elemento HTML
HThead Elemento HEAD
HTbody Elemento BODY
HTp Elemento P
HTh1 Elemento H1
HTh2 Elemento H2
HTh3 Elemento H3
HTh4 Elemento H4
HTh5 Elemento H5
HTh6 Elemento H6
HTem Elemento EM
HTstrong Elemento STRONG
HTq Elemento Q
HTcode Elemento CODE
HTsub Elemento SUB
HTsup Elemento SUP
HTimg Elemento IMG
HTpre Elemento PRE
HTol1 Elenco numerato, formato da un solo elemento
HTol2 Elenco numerato, formato da due elementi
HTol3 Elenco numerato, formato da tre elementi
HTol4 Elenco numerato, formato da quattro elementi
HTol5 Elenco numerato, formato da cinque elementi
HTol6 Elenco numerato, formato da sei elementi
HTol7 Elenco numerato, formato da sette elementi
HTol8 Elenco numerato, formato da otto elementi
HTol9 Elenco numerato, formato da nove elementi
HTul1 Elenco puntato, formato da un solo elemento
HTul2 Elenco puntato, formato da due elementi
HTul3 Elenco puntato, formato da tre elementi
HTul4 Elenco puntato, formato da quattro elementi
HTul5 Elenco puntato, formato da cinque elementi
HTul6 Elenco puntato, formato da sei elementi
HTul7 Elenco puntato, formato da sette elementi
HTul8 Elenco puntato, formato da otto elementi
HTul9 Elenco puntato, formato da nove elementi
HTtable1 Tabella con corpo e spazio per una sola riga
HTtable2 Tabella con corpo e spazio per due righe
HTtable3 Tabella con corpo e spazio per tre righe
HTtable4 Tabella con corpo e spazio per quattro due righe
HTtable5 Tabella con corpo e spazio per cinque righe
HTtable6 Tabella con corpo e spazio per sei righe
HTtable7 Tabella con corpo e spazio per sette righe
HTtable8 Tabella con corpo e spazio per otto righe
HTtable9 Tabella con corpo e spazio per nove righe
HTtablecaption1 Come sopra, con in più la didascalia
HTtablecaption2 Come sopra
HTtablecaption3 Come sopra
HTtablecaption4 Come sopra
HTtablecaption5 Come sopra
HTtablecaption6 Come sopra
HTtablecaption7 Come sopra
HTtablecaption8 Come sopra
HTtablecaption9 Come sopra
HTtablecaptionthead1 Come sopra, con in più l'intestazione
HTtablecaptionthead2 Come sopra
HTtablecaptionthead3 Come sopra
HTtablecaptionthead4 Come sopra
HTtablecaptionthead5 Come sopra
HTtablecaptionthead6 Come sopra
HTtablecaptionthead7 Come sopra
HTtablecaptionthead8 Come sopra
HTtablecaptionthead9 Come sopra
HTtablecaptiontheadtfoot1 Come sopra, con in più il piede
HTtablecaptiontheadtfoot2 Come sopra
HTtablecaptiontheadtfoot3 Come sopra
HTtablecaptiontheadtfoot4 Come sopra
HTtablecaptiontheadtfoot5 Come sopra
HTtablecaptiontheadtfoot6 Come sopra
HTtablecaptiontheadtfoot7 Come sopra
HTtablecaptiontheadtfoot8 Come sopra
HTtablecaptiontheadtfoot9 Come sopra
HTtablerow1 Una riga di una tabella, formata da una sola cella
HTtablerow2 Una riga di una tabella, formata da due celle
HTtablerow3 Una riga di una tabella, formata da tre celle
HTtablerow4 Una riga di una tabella, formata da quattro celle
HTtablerow5 Una riga di una tabella, formata da cinque celle
HTtablerow6 Una riga di una tabella, formata da sei celle
HTtablerow7 Una riga di una tabella, formata da sette celle
HTtablerow8 Una riga di una tabella, formata da otto celle
HTtablerow9 Una riga di una tabella, formata da nove celle
HTstyle Elemento STYLE
HTahref Riferimento ipertestuale
HTquot Entità &quot;
HTamp Entità &amp;
HTlt Entità &lt;
HTgt Entità &gt;
HTcomment Commento
HTbr Interruzione di linea
HTdoctype Dichiarazione del tipo di documento
HTmetaascii Elemento META per dichiarare la codifica (us-ascii)
HTmetalatin1 Elemento META per dichiarare la codifica (ISO-8859-1)

Esempio

Da una sessione nVI, se si inserisce il testo HTtablecaption4, esso viene sostituito da quanto segue:

<TABLE SUMMARY=""><CAPTION> </CAPTION><TBODY><TR><TD>



</TD></TR><TR><TD>



</TD></TR><TR><TD>



</TD></TR><TR><TD>



</TD></TR></TBODY></TABLE>

A questo punto, se ci si posiziona in corrispondenza dello spazio corrispondente alla prima riga e si inserisce il testo HTtablerow3, esso viene sostituito da:

<P> </P></TD><TD><P> </P></TD><TD><P> </P>

Ripetendo l'ultima procedura altre tre volte si arriva ad aver preparato, con soli cinque «comandi», lo schema completo di una tabella 4 per 3, e resta solo da inserire il testo in corrispondanza delle celle.

11.2   Script per la post-elaborazione

Quando si studia il linguaggio HTML capita spesso di fare dei tentativi allo scopo di imparare l'uso dei vari elementi del linguaggio; tali tentativi si concretizzano nella composizione di frammenti HTML, ossia di parti incomplete che successivamente si intende inserire in un documento HTML completo e conforme. Alle volte tali frammenti raggiungono dimensioni ragguardevoli, mancando per renderli completi solamente la parte «amministrativa» del documento, ossia gli elementi HTML, HEAD, TITLE e i marcatori dell'elemento BODY, nonchè la dichiarazione del tipo di documento.

Sarebbe una buona pratica che ciascuno mantenesse a propria disposizione un file che contenga lo schema generale di un documento HTML, come esemplificato nella sezione intitolata Standard HTML, e partire da quello schema ogni volta che si intendesse preparare un documento nuovo; tuttavia, qualora invece si volesse completare un frammento già preparato, può tornar utile il seguente script di shell POSIX:

#!/bin/sh
#
# htmlcomp.sh
#
cat <<fInE
<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HTML//EN">

<HTML>

<HEAD>

<TITLE> </TITLE>

</HEAD>

<BODY>

fInE
cat $1
cat <<fInE

</BODY>

</HTML>
fInE

il cui utilizzo è esemplificato nella seguente sessione interattiva:

$ cat frammento.html
<H1>Esempio con liste</H1>

<OL><LI>

  <P>primo</P>

</LI><LI>

  <P>secondo</P>

  <UL><LI>

    positivo

  </LI><LI>

    negativo

  </LI></UL>

</LI><LI>

  <P>terzo</P>

</LI></OL>
$ ./htmlcomp.sh frammento.html            
<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HTML//EN">

<HTML>

<HEAD>

<TITLE> </TITLE>

</HEAD>

<BODY>

<H1>Esempio con liste</H1>

<OL><LI>

  <P>primo</P>

</LI><LI>

  <P>secondo</P>

  <UL><LI>

    positivo

  </LI><LI>

    negativo

  </LI></UL>

</LI><LI>

  <P>terzo</P>

</LI></OL>

</BODY>

</HTML>
$ ./htmlcomp.sh frammento.html | nsgmls -s
$ 

12   Riferimenti ipertestuali

La sigla HTML fa riferimento esplicitamente a un sistema ipertestuale (Hypertext markup language), pertanto, la realizzazione di collegamenti del genere è una funzionalità essenziale di questo tipo di documento.

Nel caso più semplice, il riferimento punta a un (altro) documento che si trova nella stessa directory in cui si trova il documento che contiene il riferimento.

Per i riferimenti ipertestuali si utilizza l'elemento A, coadiuvato dall'attributo HREF il quale serve a indicare la collocazione del documento puntato.

Esempio

Il seguente frammento:

<A HREF="prova.html">Pagina di prova</A>

offre un esempio in cui la frase «Pagina di prova» serve come riferimento al documento prova.html. Ecco come appare il tutto all'interno di un navigatore ipertestuale (ad esempio Mozilla):

[hxs_01_17.jpeg]

Si noti che il riferimento ipertestuale appare in una forma caratteristica (colore azzurro e sottolineato); se si attiva il riferimento (per esempio mediante un dispositivo di puntamento) si visualizzerà il documento puntato (prova.html), sempre a patto che esso sia disponibile, altrimenti un messaggio di errore.

13   Esercizi

I seguenti esercizi dovrebbero essere svolti dopo aver letto più volte quanto precede; è maggiormente istruttivo cercare di svolgerli senza «sbirciare»; è molto importante cercare degli esempi significativi per illustrare le proprie risposte.

13.1   Premessa

Qual è l'obiettivo principale del presente documento?

13.2   La struttura fondamentale di un documento

Si prenda in considerazione un testo scritto, per esempio una pagina di un romanzo oppure una parte di un libro di testo (di Storia, di Geografia, eccetera); se ne analizzi attentamante la struttura: in particolare se ne contino le varie componenti (parole, spazi e altri simboli speciali, proposizioni, periodi, paragrafi, simboli di punteggiatura, congiunzioni, predicati verbali, sezioni di vario livello, eccetera).

13.3   Elementi fondamentali di HTML

Cosa significa l'acronimo «HTML»? Cosa si intende con la frase «marcare un testo»?

Si specifichi la struttura generale di un elemento HTML. Cosa si intende per «marcatore», «contenuto», «attributo»?

Cos'è una «sezione»? Come si può specificare l'inizio di una sezione? Che differenza c'è fra l'elemento H1 e l'elemento TITLE?

13.4   Resa ed elaborazione di un documento HTML

Fare degli esempi di programmi idonei alla visualizzazione e alla preparazione per la stampa su carta dei documenti HTML.

Scrivere il comando necessario per trasformare il documento HTML denominato pippo.html nel file PostScript denominato pluto.html.

Ripetere l'esercizio del precedente paragrafo specificando che si vuole ottenere la numerazione delle pagine su carta formato A3.

13.5   Alcuni elementi di testo

Cosa si intende con «testo lineare»?

Che differenza c'è fra l'elemento EM e l'elemento STRONG?

Che differenza c'è fra l'elemento SUB e l'elemento SUP?

13.6   Inserimento immagini

Illustrare l'uso dell'elemento IMG; spiegare in particolare lo scopo dell'attributo ALT.

13.7   Verifica di correttezza sintattica

Cosa significano gli acronimi «W3C» e «ISO»?

Quale comando si può utilizzare per verificare la correttezza sintattica di un documento HTML?

Provare a modificare o spostare i marcatori degli elementi di un documento HTML inizialmente corretto per indurre il verificatore sintattico a rilevare gli errori introdotti.

13.8   Testo preformattato

Spiegare le differenze fra gli elementi CODE e PRE.

Spiegare le differenze fra gli elementi P e PRE.

13.9   Elenchi numerati e puntati

Che differenza intercorre fra l'elemento OL e l'elemento UL? E fra di essi e l'elemento LI?

Cosa si intende per elenchi «annidati»?

13.10   Tabelle e cenni sugli stili

Elencare gli elementi che contribuiscono alla creazione di una tabella HTML.

Spiegare la differenza fra l'elemento CAPTION e l'elemento SUMMARY.

Correggere il seguente esempio errato:

<TABLE SUMMARY="radicchio a 10 euro/kg, zucchine a 8 euro/kg,
ciliege a 20 euro/kg" CAPTION="Lista prodotti ortofutticoli
2004" BORDER="0"><TBODY><TD>

<P>Radicchio</P><TD></TD><P>10....

....

trasformandolo in un frammento conforme ISO 15445.

Spiegare la differenza fre l'elemento TH e l'elemento THEAD.

Quali sono gli elementi obbligatori per una tabella? Quali quelli facoltativi? In quale ordine devono susseguirsi?

Per quale motivo lo standard ISO 15445 non permette di evidenziare i bordi?

Cosa significa l'acronimo «CSS»?

Cosa c'è di errato nella seguente dichiarazione CSS?

H1 ( color=blu, font-size=monospace: )

Effettuare una ricerca per determinare quali sono i colori utilizzabili (invocandoli per nome) in un documento HTML.

Fare un esempio ciascuno, in linguaggio CSS, di regola, selettore, dichiarazione, proprietà, valore.

Elencare le principali proprietà CSS inerenti alla decorazione delle tabelle HTML. Per ciascuna di esse si elenchino almeno due valori.

Esercitarsi all'uso dello script border.sed.

13.11   Riferimenti ipertestuali

Si spieghi cosa non va nel seguente esempio di riferimento ipertestuale:

<A="prova.html">Pagina di prova</A>

13.12   Esercizi vari

Nei seguenti esercizi non si tralasci la verifica sintattica dei documenti che di volta in volta si chiede di preparare.

13.12.1   Si consideri...

... la seguente figura:

[hxs_01_05.jpeg]

e si scriva un frammento di documento HTML che produca una resa grafica simile, utilizzando titoli per sezioni di primo e di secondo livello.

13.12.2   Si svolga...

... l'esercizio precedente facendo riferimento alla seguente figura:

[hxs_01_06.jpeg]

13.12.3   Si svolga...

... l'esercizio precedente facendo riferimento alla seguente figura:

[hxs_01_07.jpeg]

facendo anche uso dell'elemento Q.

13.12.4   Si svolga...

... l'esercizio precedente facendo riferimento alla seguente figura e portando particolare attenzione a un uso appropriato degli elementi P e BR:

[hxs_01_08.jpeg]

13.12.5   Si prepari...

... un documento HTML contente un titolo di primo livello, tre blocchi di testo lineare e la seguente immagine:

[hxs_01_09.jpeg]

non trascurando l'indicazione di un testo alternativo.

13.12.6   Si prepari...

... un documento HTML che produca un risultato abbastanza simile a quello seguente, quando viene visto attraverso un navigatore:

[hxs_01_10.jpeg]

ricordando di usare l'elemento PRE quando ciò è appropriato.

13.12.7   Si prepari...

... un documento HTML che produca un risultato abbastanza simile a quello seguente, quando viene visto attraverso un navigatore:

[hxs_01_11.jpeg]

ricordando di usare opportuni elementi HTML per gli elenchi.

13.12.8   Si prepari...

... un documento HTML che produca un risultato abbastanza simile a quello seguente, quando viene visto attraverso un navigatore:

[hxs_01_25.jpeg]

ricordando di usare opportuni elementi HTML per le tabelle; la figura rappresenta parte della tabella pitagorica della moltiplicazione. Successivamente si aggiunga una didascalia con il testo «Tavola Pitagorica». Si estenda la tabella fino a includere la moltiplicazione 12*12. Infine si aggiunga un bordo attorno a ciascuna casella, un bordo tratteggiato attorno alla tabella e si faccia in modo (usando gli elementi TH) che le caselle numerate nella prima riga e nella prima colonna abbiano lo sfondo rosso.

13.12.9   Si prepari...

... un documento HTML che produca un risultato abbastanza simile a quello seguente, quando viene visto attraverso un navigatore:

[hxs_01_24.jpeg]

ricordando di usare opportuni elementi HTML per le tabelle e gli stili. Successivamente si aggiunga un'intestazione alla tabella, in modo da ottenere un risultato simile al seguente:

[hxs_01_26.jpeg]

Infine si aggiunga una didascalia, per ottenere un risultato simile al seguente:

[hxs_01_27.jpeg]

13.12.10   Si preparino...

... tre documenti HTML, in modo che il primo contenga dei riferimenti ipertestuali che puntino agli altri due, e questi ne contengano in modo da puntarsi reciprocamente, come nel seguente schema:

[hxs_01_12.jpeg]

13.12.11   L'obiettivo...

... del presente esercizio è eseguire una serie di passaggi, che portino al termine alla creazione di un file PostScript che una volta stampato appaia (a parte i margini) come segue:

[hxs_01_18.jpeg]

e alla creazione di un file di testo avente il seguente aspetto:

Due favole di Esopo

La volpe e l'uva

`Che fame!' esclamò la volpe, che era a digiuno da un
paio di giorni e non trovava niente da mettere sotto i
denti; girellando qua e là, capitò per caso in una
vigna, piena di grappoli bruni e dorati.

`Bella quell'uva!' disse allora la volpe, spiccando un
primo balzo per cercare di afferrarne un grappolo. `Ma
com'è alta!' e fece un altro salto. Più saltava e più
le veniva fame: fece qualche passo indietro e prese la
rincorsa: niente ancora! Non ce la faceva proprio.
Quando si accorse che tutti i suoi sforzi non
servivano a nulla e che, continuando così, avrebbe
potuto farsi deridere da un gattino che se ne stava a
sonnecchiare in cima alla pergola, esclamò: `Che
brutta uva! È ancora acerba, e a me l'uva acerba non
piace davvero!' E si allontanò di là con molta
dignità, ma con una gran rabbia in cuore.

Il lupo e l'agnello

Un agnello si dissetava alla corrente di un ruscello
purissimo. Sopraggiunse un lupo in caccia: era digiuno
e la fame lo aveva attirato in quei luoghi.

- Chi ti dà tanto coraggio da intorbidare l'acqua che
bevo? - disse questi furioso.
- Sire. - rispose l'agnello - io sto dissetandomi
nella corrente sotto di lei, per ciò non posso
intorbidare la sua acqua!
- La sporchi - insisté la bestia crudele - E poi so
che l'anno scorso hai detto male di me.
- Io?! Ma se non ero nato - rispose l'agnello.
- Se non sei stato tu, è stato tuo fratello.
- Non ho fratelli.
- Allora qualcuno dei tuoi; perché voi, i vostri
pastori e i vostri cani ce l'avete me. Me l'hanno
detto: devo vendicarmi.

Detto questo il lupo trascinò l'agnello nel fitto
della foresta e se lo mangiò.

Per prima cosa si deve preparare un documento HTML conforme allo standard ISO 15445, utilizzando obbligatoriamente gli elementi P, H1, H2, BR, Q; successivamente si utilizzi HTML2ps per generare il file PostScript, tenendo presente che dovrà essere stampato su un unico foglio formato A4; infine si usi W3M per generare il file di testo formattato a partire dal documento HTML.