Ipermedia_e_HTML - Io, Informatico

Transcript

Ipermedia_e_HTML - Io, Informatico
www.tesseract.it
Io, Informatico
Un Viaggio consapevole tra Informatica e Computer
Capitolo 12
Ipermedia e HTML
Carlo A. Mazzone
Tutti i diritti sono riservati. Nessuna parte di questa pubblicazione può essere riprodotta,
memorizzata in sistemi di archivio, o trasmessa in qualsiasi forma o mezzo, elettronico, meccanico,
fotocopia, registrazione o altri senza la preventiva autorizzazione dell'autore.
1 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Capitolo 12 – Ipermedia e HTML
Capitolo 12 – Ipermedia e HTML
Internet e, più specificatamente, il web hanno assunto in questi ultimi anni una rilevanza davvero
eccezionale. Ciò è vero non solo in relazione agli aspetti informatici ma anche e soprattutto rispetto
ai mezzi di comunicazione e più in generale alla società nel suo complesso.
E' ovvio, che in questo contesto ciò che più ci interessa, non essendo il sottoscritto un sociologo,
sono sicuramente gli aspetti informatici della questione. Voglio qui comunque sottolineare un
elemento di carattere generale a mio avviso di grande importanza. E' pur vero che l'informatica è
senza dubbio teoria, logica e matematica ma, d'altro canto, essa deve servire al progresso della
civiltà umana. E' bene quindi, ogni volta che ci si accinge a progettare un sistema informatico,
verificare quali siano gli impatti concernenti la vita reale e tutti i possibili coinvolgimenti ad essa
collegati.
Ok, vediamo di passare al sodo della questione. Prima di addentrarci negli inevitabili dettagli
pratici, è bene, rispettando la filosofia di “Io, Informatico”, capire come “attaccare” questi concetti
al resto del sistema.
Ciò che in definitiva si vuole ottenere è la creazione di pagine per il web. Per pagina si intende un
certo documento che può essere usufruito tramite internet.
Più in generale, una pagina web può essere vista come un elemento di una vera e propria
applicazione informatica (un programma per computer). Un sito web, infatti, ospita normalmente
diverse pagine tra di esse collegate. L'insieme di queste pagine può essere visto come un vero e
proprio programma. Ciò è tanto più vero quando le pagine sono “dinamiche”, cioè quando il loro
contenuto dipende dalle scelte effettuate dall'utente. Un esempio, semplice e chiarificatore, può
essere un motore di ricerca: le pagine web restituite dal motore di ricerca avranno un contenuto
diverso in base alle parole da noi inserite.
Multimedia, ipermedia ed ipertesti
Le applicazioni informatiche alle quali siamo interessati in questo contesto hanno la particolarità di
utilizzare oltre al classico e semplice testo anche altri elementi come immagini, suoni e video.
Queste applicazioni utilizzano quindi differenti mezzi espressivi per presentare un certo contenuto
informativo. Tali mezzi, che come vi ho appena detto sono il testo, le immagini, i video, ecc.,
prendono il nome di media1. Un'applicazione che ne utilizzo più di uno viene definita applicazione
multimediale.
Multimedialità statica e dinamica
Un contesto multimediale, più in generale definito con il termine di multimedialità, può essere
classificato in base al modo in cui è possibile interagire con esso. Più precisamente si effettua una
distinzione tra le applicazione multimediali a seconda della possibilità o meno, da parte dell'utente,
di scegliere un determinato percorso di lettura e visualizzazione dei contenuti; nel primo caso si
parla di multimedialità statica e nel secondo di multimedialità dinamica.
1
Media è il plurale del termine latino medium che significa appunto mezzo.
2 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Multimedia, ipermedia ed ipertesti
Cercando di essere più schematico vi presento di seguito, in maniera più dettagliata, le due
situazioni:


multimedialità statica (o passiva): l'utente dell'applicazione deve limitarsi a leggere e
visualizzare i contenuti così come progettato dall'autore. L'utente non può decidere, ad
esempio, se visualizzare prima un certo contenuto piuttosto che un altro. Le pagine o
videate vengono presentate una dopo l'altra, normalmente con tempi predefiniti, e come
detto stabiliti dal creatore dell'applicazione.
multimedialità dinamica (o interattiva): l'utente può scegliere di propria iniziativa un
percorso di consultazione dei contenuti dall'applicazione. Agendo con il mouse, la tastiera o
monitor sensibili al tatto (touch screen) egli può visualizzare e consultare sezioni specifiche
dell'applicazione, ovviamente, sempre all'interno dei collegamenti realizzati dall'autore
dell'applicazione stessa.
Ipermedia: colleghiamo i contenuti di un'applicazione multimediale
Con il termine ipermedia si vuole indicare un'applicazione multimediale interattiva. Ipermedia è
quindi un'applicazione, costituita da più media, nella quale vi sono dei contenuti tra di essi in vario
modo collegati e che l'utente può consultare a proprio piacimento. I collegamenti presenti tra i
differenti contenuti vengono definiti in gergo informatico link.
Per immaginarsi un esempio di applicazione ipermediale si può pensare ad un'enciclopedia
informatica, di quelle distribuite su dvd oppure su uno o più cd-rom. In tali applicazioni sono
presenti testi, immagini ed altri contenuti; la cosa notevole consiste nella possibilità di “saltare” da
un contenuto ad un altro cliccando su di una voce (link) per consultare direttamente ciò che più ci
interessa in un dato momento.
Ipertesti
Con il termine ipertesto si intende un'applicazione ipermediale che utilizza un unico mezzo
comunicativo: appunto il testo.
Fu Vannevar Bush, nel 1945, a proporre per primo una struttura di testo non lineare che doveva
corrispondere alla natura associativa della mente umana. Questo lavoro influenzò Ted Nelson che
battezzò tale testo “ipertesto” (Hypertext).
Il termine stesso, ipertesto1, vuole indicare la natura e la capacità di tale tipo di testo di andare oltre
rispetto al testo tradizionale. In quest'ultimo, infatti, la fruizione avviene in maniera sequenziale,
procedendo, almeno in un primo momento, la possibilità di comprendere il senso globale dei
contenuti e non dando la possibilità di accedere in maniera diretta a specifici dettagli e contenuti in
genere.
La parola ipertesto è data dalla composizione delle parole greche yper e textus. Yper significa "sopra, oltre": usata
come prefisso, indica un grado superlativo di ciò che è specificato nel secondo termine del nome composto.
1
3 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Multimedia, ipermedia ed ipertesti
Organizzazione di un ipertesto
Realizzare un buon ipertesto è una questione di tecnica e di esperienza.1
L'approccio più comune, ed anche il più errato, è quello di iniziare a scrivere i contenuti delle
pagine man mano che vengono in mente i dettagli di ciò che vogliamo presentare ai nostri ipotetici
futuri lettori.
E' un impulso irrefrenabile: appena è in possesso di un minimo di indicazioni su come produrre una
pagina per il web il nostro neo-autore si tuffa a capofitto nella produzione. Questi inizia a riempire
la sua pagina con tutto ciò che gli viene in mente sull'argomento che vuole proporre quasi si
trattasse di una gara a tempo. Il risultato, dopo un certo numero di ore di lavoro, è un minestrone
difficilmente digeribile. L'aspetto, spesso disgustoso, ne suggerisce la sorte più idonea: webspazzatura. Fateci caso: internet è piena di spazzatura non raccolta. Un enorme numero di pagine e
relativi siti i cui contatori delle visite, prossimi allo zero, mostrano senza alcuna pietà come quelle
creature siano state totalmente abbandonate. Ambienti desolati e desolanti dove nemmeno gli autori
passano più. Ci si imbatte per caso utilizzano i motori di ricerca; una rapida occhiata per capire che
lì non si troverà niente di interessante e si naviga via oltre. Nel mio caso specifico tali ambienti,
ormai “morti” mi lasciano addosso una spiacevole sensazione di vecchio, di solitudine e di
abbandono. Una sensazione di incompiuto, promesse fatte e non mantenute. In una sola parola:
fallimento.
Voglio essere chiaro: non esiste una ricetta assoluta per il successo di un sito. Ma in definitiva anche
il termine “successo” potrebbe essere fuorviante. Si può realizzare un buon lavoro anche senza
ottenere risultati di visibilità eccezionali: il lavoro sarà comunque valido.
Dovremmo, infatti, distinguere tra bontà dei contenuti del sito e, d'altro canto, bontà
dell'organizzazione dei contenuti stessi.
Relativamente al primo caso mi permetto un suggerimento: specializzare il proprio lavoro. Con
questo intendo dire che quanto più settoriale e specialistico sarà il nostro sito tanto più avrà
possibilità di successo. Internet è stracolmo di contenuti. C'è di tutto. Essere troppo generalisti pone
al rischio di essere poco accattivanti ed al contempo di disperdere le energie per gestire i troppi e
differenti contenuti.
Relativamente al secondo punto, “bontà dell'organizzazione dei contenuti”, il tutto si potrebbe
concentrare in tre parole: progettazione, progettazione ed, ancora, progettazione. Credo di aver reso
l'idea. La progettazione attenta e preventiva del nostro lavoro sarà un ottimo viatico per ottenere un
buon lavoro.
La prima fase della progettazione dovrebbe prevedere un brain storming. Il brain storming è una
metotologia di ricerca, usata soprattutto in campo pubblicitario per stimolare la produzione di idee
creative, basata sulla libera esposizione di impressioni, idee ed intuizioni da parte dei partecipanti.
Essa consiste in intense sessioni di dibattito volte a stimolare proposte e a identificare la soluzione
migliore.
Le regole generali di una seduta di brain storming sono:
•
•
•
1
definire e concordare gli obiettivi da raggiungere;
escludere ogni giudizio critico;
accettare ogni forma di proposta;
Vedi “Designing and Writing Online Documentation” di William Horton.
4 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Multimedia, ipermedia ed ipertesti
•
•
•
produrre un gran numero di idee;
sintesi delle idee espresse;
scelta finale
Da questa fase bisognerebbe uscire con delle idee ben chiare relative agli obiettivi che il nostro
lavoro si propone di raggiungere ed in particolare quali sono i destinatari, i fruitori, principali ai
quali è indirizzato il tutto.
A questo punto risulta necessario organizzare i contenuti.
Esistono dei modi ormai standardizzati per organizzare tali contenuti in un ipertesto. Di seguito vi
mostro i più classici.
Gerarchie
HOME
Ogni rettangolo rappresenta uno specifico argomento. Per home si intende il punto di ingresso
dell'ipertesto. Le frecce rappresentano i collegamenti tra gli argomenti.
Liste lineari
HOME
Liste lineari con alternative
5 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Multimedia, ipermedia ed ipertesti
E' possibile, quando richiesto dall'applicazione, superare la rigidità della lista lineare inserendo dei
percorsi alternativi.
HOME
Reti
Le reti si prestano bene nel sistemi in cui gli argomenti sono abbastanza disomogenei.
HOME
6 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Un po' artisti ed un po' registi: lo storyboarding
Un po' artisti ed un po' registi: lo storyboarding
Una volta organizzati i contenuti è necessario dettagliare il funzionamento dell'ipertesto. A tale
scopo si utilizza di norma uno schema conosciuto come storyboard.
Per storyboard si intende una descrizione dettagliata dell'ipertesto con riferimenti alle singole
pagine, ai collegamenti tra tali pagine ed altre informazioni vitali per l'applicazione.
Il concetto di storyboarding nasce in campo cinematografico; in buona sostanza si tratta di avere
un'idea precisa delle sequenze da girare, delle singole inquadrature, dei dialoghi e così via, prima di
girare le singole scene e di assemblarle successivamente per dare vita alla pellicola finale.
Lo storyboard di un sito web deve esplodere e dettagliare la struttura scelta per costruire l'ipertesto
(gerarchia, lista o rete che sia).
Per siti molto semplici si potrebbe pensare che l'uso di uno storyboard risulti superfluo. In realtà, se
per progetti di medie e grandi dimensioni esso è assolutamente indispensabile, nel caso di piccole
applicazioni web può rappresentare in ogni caso un ottimo modo per evitare di procedere in modo
confuso e disorganizzato nel proprio lavoro.
Non esiste, d'altra parte, un modo univoco per creare uno storyboard. Esso può addirittura essere
rappresentato tramite semplici fogli di carta sui quali appuntare le caratteristiche salienti delle
pagine dell'applicazione.
In ogni caso a partire dal grafico della struttura scelta (ad esempio una gerarchia) bisognerebbe
indicare il nome di ogni cartella e dei file coinvolti:
www.tesseract.it
/index.html
/azienda/chiSiamo.html
/azienda/contatti.html
/servizi/index.html
/servizi/web.html
/servizi/software.html
/links/index.html
/downloads/index.html
/images
Per ogni singolo file elencare gli elementi in esso presenti (immagini e loro posizione), posizione
degli elementi testuali ed i link di collegamento con le altre pagine presenti. Ciò può essere
realizzato sia a mano libera su fogli di carta sia utilizzando appositi software.
Per progetti più complessi ed importanti si potrebbe anche pensare di utilizzare appositi modelli per
definire i contenuti di ogni singola pagina.
Tali modelli potrebbe essere sia esclusivamente testuali che contenenti schizzi grafici del contenuto:
Nome progetto:____________________
Nome pagina: _____________________
URL:
_____________________
Contenuto:
_____________________
_____________________
Link:
_____________________
Azioni:
_____________________
Risorse:
_____________________
Note:
_____________________
Schizzo grafico del contenuto della pagina
7 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Dal contenuto alla sua rappresentazione
Dal contenuto alla sua rappresentazione
Uno degli aspetti cardine del trattamento dell'informazione è dato dalla dicotomia tra contenuto
dell'informazione e sua rappresentazione. Una qualsiasi realtà codificata dalla macchina ha un suo
contenuto informativo che in generale è indipendente da come questo venga poi mostrato
all'esterno.
Un esempio dovrebbe chiarire ciò che intendo dire. Consideriamo la classica frase “Salve mondo”.
Indipendentemente dal supporto attraverso il quale possiamo memorizzare tale frase all'interno di un
certo dispositivo essa sarà sempre la stessa. Se utilizziamo il classico editor di testi Microsoft Word
per scrivere tale frase essa sarà memorizzata in formato su disco con una codifica come la seguente.
La codifica della parole "Salve mondo" in formato Word
Per verificarlo è sufficiente aprire il file con il Blocco Note, o con qualsiasi altro editor di testo
puro.
Salvando il file in formato rft avremo il seguente risultato su disco.
8 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Dal contenuto alla sua rappresentazione
Il contenuto informativo sarà sempre lo stesso; ciò che cambia è il modo di codificare tale
contenuto.
9 - Io, Informatico – Carlo A. Mazzone – versione 20091018
HTML
HTML
Chiunque voglia affacciarsi al mondo del web come autore di contenuti, e non quindi come
semplice utilizzatore, dovrà inevitabilmente confrontarsi con HTML. Ciò è valido oggi e continuerà
ad esserlo per diversi anni a venire.
HTML è ancora una volta un acronimo: HyperText Markup Language ovvero linguaggio di
contrassegno per ipertesti. In realtà, onde evitare equivoci, vi voglio premettere che esso non è un
vero e proprio linguaggio di programmazione come lo sono al contrario, tanto per portare qualche
esempio, C, Pascal, Java ed anche ASP, JavaScript e PHP che analizzeremo in seguito.
HTML non ha, infatti, caratteristiche di programmazione che gli consentano di effettuare scelte in
base ad un certo contesto così come non può effettuare manipolazioni di dati e quant'altro consentito
ad un qualsiasi linguaggio artificiale. HTML non è nato per questo.
Il suo scopo principale è quello di mostrare il contenuto di una pagina e non il suo aspetto.
La prima versione di HTML è opera di Tim Berners-Lee. Questi ha anche coniato il nome World
Wide Web ed ha prodotto il primo server ed il primo client per il web (siamo nel 1990).
Le sue specifiche iniziali sono state in seguito discusse e perfezionate da una vasta comunità di
utenti e programmatori.
L'organizzazione che si occupa della standardizzazione del linguaggio HTML è nota come W3C
(World Wide Web Consortium). Sono state rilasciate diverse versioni di questo linguaggio.
L'ultima, risalente al dicembre 1999, è la 4.01.
Successivamente l'HTML si è evoluto in XHTML (un HTML riformulato con l'ausilio del
linguaggio XML).
Come dicevo, lo scopo, almeno inizialmente, era quello di visualizzare un certo contenuto
indipendentemente dal sistema utilizzato. Con il passare del tempo crescevano le richieste degli
utenti per sempre nuovi elementi di formattazione1. I due principali browser web (visualizzatori di
pagine HTML) Microsoft Internet Explorer e Netscape Nagivator presenti agli albori del web
introducevano ad ogni versione nuove funzionalità di formattazione, spesso purtroppo non
compatibili per entrambi i software.
E' a questa situazione che ci si riferisce quando si parla dell'ormai “epica” guerra dei browser.
Tale guerra, vinta allora dal browser di casa Microsoft, ha lasciato sul campo una vittima illustre: il
contenuto stesso delle pagine. Voglio dire che la sintassi richiesta per arricchire le pagine di nuove
funzionalità ha finito per confondere, spesso anche per un uso improprio del linguaggio, le
caratteristiche di presentazione dei contenuti con i contenuti stessi rendendo le pagine pesanti e
difficilmente modificabili.
Per superare tali problematiche sono nati nuovi standard: dai fogli di stile all'XML. Ma andiamo per
gradi: per ora occupiamoci di HTML.
Per formattazione di una pagina si intende lo stile della pagina stessa: applicazione di un certo tipo di carattere,
allineamento del testo e così via.
1
10 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Salutiamo il mondo in HTML
Salutiamo il mondo in HTML
<html>
<head>
<title>Questo e' il titolo della pagina</title>
</head>
<body>
<!--Questo è un commento-->
Salve <b>mondo</b>
</body>
</html>
La prima cosa che salta all'occhio nel pezzo di codice che vi ho proposto è che HTML è basato su
testo puro. Esso non viene compilato in codice eseguibile, cioè codice direttamente eseguito dal
microprocessore del PC, ma viene interpretato “al volo” dal browser che visualizza i contenuti
descritti dal codice stesso.
Una seconda caratteristica che colpisce chi legge per la prima volta il codice HTML è la presenza,
inframmezzata al testo stesso di alcuni caratteri particolari: le parentesi angolari “<” e “>”.
Tali parentesi racchiudono delle parole che non riguardano direttamente il contenuto che si vuole
rappresentare: <html>, <body>, <title> sono esempi di ciò a cui mi sto riferendo.
Tali oggetti in effetti sono utilizzati allo scopo di definire il comportamento dei contenuti stessi, una
volta che questi dovranno essere visualizzati. Un oggetto del tipo: <nome> viene detto marcatore,
markup o anche Tag.
Come spesso si sente dire: “Niente è per sempre” e ciò vale anche per i contenuti: una pagina web
ha un suo inizio ed una sua fine, così un titolo, un testo in grassetto e così via. Un marcatore
definisce un certo comportamento dei contenuti dal momento in cui lo si incontra nel codice nella
forma <nome> e fa terminare il suo effetto nel momento che lo si incontra nella forma </nome> cioè
con il simbolo “/” (in gergo slash) anteposto, all'interno delle parentesi angolari prima del nome del
tag.
Nell'esempio il frammento di codice:
Salve <b>mondo</b>
mostra come il marcatore <b> (simbolo per il grassetto) modifichi il comportamento della parola
“mondo”.
Il tag <nome> viene detto tag di apertura mentre </nome> viene detto tag di chiusura.
In pratica: Proviamo l'esempio
Per poter provare l'esempio dobbiamo utilizzare un “ambiente di sviluppo” per scrivere il nostro
codice HTML. Almeno all'inizio, si può usare un semplice editor di testo come ad esempio il
Blocco note di Windows. Attenzione: non è possibile usare altri editor più evoluti come Word
oppure Microsoft Word oppure WordPad in quanto questi, in generale, salvano i file NON in
formato testo semplice come richiesto dall'HTML ma aggiungono ai contenuti, come visto all'inizio
del capitolo, tutta una serie di codici proprietari che altererebbero il sorgente della nostra pagina.
11 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Salutiamo il mondo in HTML
Una volta scritto il codice HTML è possibile salvare il file dando un'estensione del tipo .htm oppure
.html. Con tale estensione il Sistema Operativo capirà che il file deve essere aperto da un browser.
Un doppio clic sul nome del file farà il resto.
Tag ed attributi
In generale, un tag da solo non riesce ad esprimere compiutamente una specifica direttiva.
Supponiamo ad esempio di voler realizzare un paragrafo (si utilizza il tag <p>):
<p>Io sono un paragrafo</p>
Come risulta ovvio, deve essere possibile indicare anche ulteriori caratteristiche relative al
paragrafo, come, ad esempio, l'allineamento (a destra, a sinistra, centrato, ...)
In tali occasioni, il tag viene affiancato da un ulteriore “specificatore” detto attributo:
<p align="center">Io sono un paragrafo</p>
Nell'esempio appena riportato vi ho proposto l'attributo align con valore “center” (il valore viene
associato all'attributo con il segno di uguale e racchiuso tra doppi apici).
Nel caso specifico dell'esempio, l'attributo “center” indicato al browser di centrare il paragrafo
all'interno della pagina.
Organizzazione della pagina: sezione head e sezione body
Come potete osservare dal codice dell'esempio, la pagina è organizzata in due sezioni principali:
head
body
La prima, head, detta anche intestazione, definisce alcune caratteristiche generali della pagina,
mentre la seconda, body, o corpo della pagina, serve a racchiudere il vero e proprio contenuto del
documento.
12 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Organizzazione della pagina: sezione head e sezione body
La sezione head
Come detto, tale sezione include una serie di informazioni relative all'intero documento.
Il primo tag da inserire in questa sezione è ovviamente quello relativo al titolo:
<title>Io, Informatico </title>
Di estremo interesse relativamente ai motori di ricerca è il tag meta, che con gli attributi name
(con valore "keywords" e "description") e content aiuta la classificazione del nostro sito sul
web:
Più precisamente, il valore “keywords” serve per creare un elenco di parole chiave che il motore di
ricerca potrà utilizzare indicizzare la pagina:
<meta name="keywords" content="informatica, strutture dati, linguaggi di programmazione">
Il valore "description" potrà essere utilizzato dal motore di ricerca per rendere più indicativa la
catalogazione della pagina:
<meta name="description" content="Un viaggio consapevole tra informatica e computer">
Un altro classico valore utilizzabile per l'attributo name del tag meta è “generator” il quale indica lo
strumento utilizzato per la creazione della pagina:
<meta name="GENERATOR" content="Crimson Editor">
Un ulteriore attributo del tag meta è http-equiv. Nel seguente esempio, esso serve ad indicare la
tipologia di contenuto ed il tipo di caratteri utilizzato:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
Qui di seguito, invece, è mostrato come esso possa servire per impostare un aggiornamento forzato
della pagina ogni 300 secondi, caricando allo scadere dei quali la pagina index.html.
<meta http-equiv="Refresh" content="300;URL=/index.html"/>
E' forse da ribadire che tali informazioni, tranne che per il titolo della pagina, non sono visibili
all'utente all'interno del browser.
Voglio inoltre precisarvi che è ben oltre gli scopi del testo che state leggendo essere esaustivo
sull'argomento HTML e Web. Al contrario, il mio intento è quello di presentare gli argomenti
fondanti tale linguaggio cercando di creare una base sufficientemente solida dalla quale partire per
ulteriori approfondimenti.
Nota sulla gestione dei colori
In diverse circostanze è possibile utilizzare l'attributo “color” per indicare uno specifico colore.
Il valore del colore può essere espresso si attraverso un numero esadecimale (preceduto dal simbolo
# e detto codice RGB) oppure tramite uno dei seguenti sedici nomi di colori:
13 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Organizzazione della pagina: sezione head e sezione body
Nomi dei Colori e valori RGB
Black = "#000000"
Green = "#008000"
Silver = "#C0C0C0"
Lime = "#00FF00"
Gray = "#808080"
Olive = "#808000"
White = "#FFFFFF"
Yellow = "#FFFF00"
Maroon = "#800000"
Navy = "#000080"
Red = "#FF0000"
Blue = "#0000FF"
Purple = "#800080"
Teal = "#008080"
Fuchsia = "#FF00FF"
Aqua = "#00FFFF"
Così, il valore "#FFFF00" e “Yellow” si riferiscono entrambi al giallo.
Il codice RGB (Red, Green, Blue) prevede la composizione di un unico colore attraverso le tre
componenti fondamentali di rosso (Red), verde (Green) e blu (Blue) utilizzando un numero
esadecimale a due cifre (da 00 a FF). Tale metodo è noto con il termine “additivo” in quanto si
passa dall'assenza di colore (il nero) alla massima espressione del colore (bianco) aggiungendo man
mano gradazioni di colore.
Ogni colore in esadecimale è così espresso nella forma:
#RRGGBB
dove RR, GG, BB rappresentano rispettivamente le due cifre esadecimali per le componenti rosso,
verde e blu. Si ha così che il codice #000000 avendo tutte le componenti a zero indica il nero,
#FFFFFF con tutte le componenti al valore massimo FF rappresenta il bianco, #FF0000 con la sola
componente rossa al massimo rappresenta il rosso, e così via miscelando tra loro le varie
componenti. Con tale sistema è possibile creare oltre 16 milioni di differenti combinazioni di
colore.
Paragrafi: p, div, pre
Il testo è pur sempre il principe dei contenuti ed il paragrafo il modo più naturale per organizzarlo.
Per sezionare blocchi di testo come paragrafi si utilizza il tag <p>:
<p>Io sono un paragrafo</p>
L'attributo align ci viene incontro per formattare il nostro paragrafo:
<p align="center">Io sono un paragrafo centrato</p>
Align prevede i seguenti valori: left, center, right, justify.
In maniera analoga al tag <p> è possibile utilizzare il tag <div> che agisce su blocchi di testo senza
creare un vero e proprio paragrafo.
<div align="left">Io sono un blocco di testo allineato a sinistra</div>
Cerco di spiegarmi meglio: un paragrafo è caratterizzato dal fatto di essere separato da altri blocchi
di testo da una o più righe vuote. A differenze dal tag <p>, il tag <div> formatta il testo senza
14 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Organizzazione della pagina: sezione head e sezione body
separarlo con tale “spaziatore”. Tale caratteristica lo rende molto utile per posizionare in maniera
precisa intere sezioni della nostra pagina web.
Infine, a volte, può essere utile formattare il testo così come lo digitiamo all'interno del codice
HTML o perchè ne facciamo il copia e incolla da un altro testo già preformattato. In tali casi
possiamo ricorrere al tag <pre></pre>.
Lorem ipsum
Spesso in una pagina, quando siamo alle prese con la disposizione dei contenuti, abbiamo bisogno
di un insieme di testi di prova. E' stato dimostrato che inserire in una data pagina contenuti testuali
comprensibili distrae colui che li guarda; questi, infatti, viene incuriosito dai contenuti e perde di
vista il “contenitore”. Ciò che si vuole ottenere durante la fase di creazione di un dato stile di
pagina, al contrario, è di far concentrare l'osservatore sugli aspetti grafici ed organizzativi (colore
del testo, disposizione ed allineamento dei paragrafi, ecc. ) .
In tutti questi casi si utilizza il cosiddetto “Lorem ipsum”. Si tratta di un insieme di parole della
lingua latina utilizzate già a partire dal 1500 per prove di stampa. Più precisamente le parole sono
estrapolate da un testo di Cicerone del 45 a.c.
Di seguito vi riporto una parte del brano originale dell'opera in cui sono evidenziate, in grassetto, le
parole estrapolate.
«Sed ut perspiciatis, unde omnis iste natus error sit voluptatem accusantium doloremque
laudantium, totam rem aperiam eaque ipsa, quae ab illo inventore veritatis et quasi architecto beatae
vitae dicta sunt, explicabo. Nemo enim ipsam voluptatem, quia voluptas sit, aspernatur aut odit aut
fugit, sed quia consequuntur magni dolores eos, qui ratione voluptatem sequi nesciunt, neque porro
quisquam est, qui dolorem ipsum, quia dolor sit, amet, consectetur, adipisci velit, sed quia non
numquam eius modi tempora incidunt, ut labore et dolore magnam aliquam quaerat voluptatem.
Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam,
nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit, qui in ea
voluptate velit esse, quam nihil molestiae consequatur, vel illum, qui dolorem eum fugiat, quo
voluptas nulla pariatur? [33] At vero eos et accusamus et iusto odio dignissimos ducimus, qui
blanditiis praesentium voluptatum deleniti atque corrupti, quos dolores et quas molestias excepturi
sint, obcaecati cupiditate non provident, similique sunt in culpa, qui officia deserunt mollitia
animi, id est laborum et dolorum fuga.... »
Considerando solo le parole in grassetto si ottiene quanto segue:
«Lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmod tempor incidunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquid ex ea commodi consequat. Quis aute iure reprehenderit in voluptate velit esse cillum dolore
eu fugiat nulla pariatur. Excepteur sint obcaecat cupiditat non proident, sunt in culpa qui officia
deserunt mollit anim id est laborum.»
Il tutto è evidentemente incomprensibile anche per un latinista ; )
E' da sottolineare comunque il fatto che trattandosi di un testo pseudocasuale ne esistono diverse
versioni. In giro per la rete si trovano diversi servizi web (ed anche software) per generare il testo in
questione: giusto per segnalarne uno vi riporto il sito www.lipsum.com.
15 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Organizzazione della pagina: sezione head e sezione body
Per maggior chiarezza vi riporto l'esempio reale di una pagina che utilizza il Lorem ipsum per
mostrare la propria tipologia di impaginazione.
Esempio di utilizzo del Lorem ipsum
Titoli
Uno dei modi più semplici ed efficaci per organizzare i contenuti è quello di utilizzare dei titoli per
le varie sezioni. Per titoli si intende un testo scritto con un formato normalmente più grande del
testo normale. A tale scopo si utilizzano i tag “header” H1, H2, H3, H4, H5 ed H6.
H1 è il titolo maggiore in dimensioni, H6 il più piccolo:
<H1>Io sono il più grande</H1>
<H6>Io sono il più piccolo</H6>
16 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Organizzazione della pagina: sezione head e sezione body
Il testo
Grassetto, corsivo e sottolineato sono tra gli attributi del testo più comuni.
Per il grassetto il tag è <b> (iniziale di bold)
<b>Testo in grassetto</b>
Per il corsivo il tag è <i> (italic)
<i>Testo in corsivo</i>
Per il testo sottolineato il tag è <u> (underline)
<u>Testo sottolineato</u>
Per controllare la formattazione del testo ci viene in aiuto il tag <font>.
Per impostare la dimensione si utilizza l'attributo size (con valore da 1 a 7)
<font size="7">test</font>
L'attributo face consente, invece, di indicare il tipo di carattere:
<font face="Arial">riga di testo con font</font>
E' possibile indicare differenti tipi di caratteri, (separandoli con una virgola) per far si che se i primi
specificati non sono presenti sulla macchina dell'utente possono essere utilizzati gli altri specificati
come alternativa.
<font face="Arial, Helvetica, sans-serif">riga di testo con font</font>
Per indicare uno specifico colore del testo utilizziamo l'attributo color:
<font color="#FF0000">riga di testo di colore rosso</font>
Modificare le impostazioni della pagina
Per default una pagina html prevede il nero per il colore dei caratteri ed il bianco per lo sfondo.
Il colore di sfondo può essere modificato con l'attributo bgcolor:
<body bgcolor="blue">
o, analogamente:
<body bgcolor=”#0000FF”>
E' possibile personalizzare il testo, i link, i link visitati ed i link attivi (sul clic):
<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#FF0000" alink="#FFFF00">
Per porre un' immagine sullo sfondo della pagina usiamo l'attributo background:
17 - Io, Informatico – Carlo A. Mazzone – versione 20091018
<body background="sfondo.gif">
Gli elenchi
Elenchi non ordinati (Unordered List)
I sette re di Roma
<ul>
<li>Romolo (753 AC - 716 AC)</li>
<li>Numa Pompilio (715 AC - 674 AC)</li>
<li>Tullo Ostilio (673 AC - 642 AC)</li>
<li>Anco Marzio (642 AC - 617 AC)</li>
<li>Tarquinio Prisco (616 AC - 579 AC)</li>
<li>Servio Tullio (578 AC - 535 AC)</li>
<li>Tarquinio il Superbo (535 AC - 510 AC)</li>
</ul>
E ' possibile definire uno stile diverso da quello di default per il pallino nero che identifica
l'elemento:
<ul type=”disc”> (pallino nero: default)
<ul type=”circle”> (pallino vuoto)
<ul type=”square”> (quadrato pieno)
Elenchi ordinati (Ordered List)
I sette re di Roma
<ol>
<li>Romolo (753 AC - 716 AC)</li>
<li>Numa Pompilio (715 AC - 674 AC)</li>
<li>Tullo Ostilio (673 AC - 642 AC)</li>
<li>Anco Marzio (642 AC - 617 AC)</li>
<li>Tarquinio Prisco (616 AC - 579 AC)</li>
<li>Servio Tullio (578 AC - 535 AC)</li>
<li>Tarquinio il Superbo (535 AC - 510 AC)</li>
</ol>
18 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Gli elenchi
Anche in questo caso è possibile modificare il comportamento di default che prevede una
visualizzazione progressiva con i numeri 1, 2, 3 e via dicendo. E' sufficiente usare l'attributo type
nel modo seguente:
<ol type=”1”>, <ol type=”a”>, <ol type=”A”>, <ol type=”i”>, <ol type=”I”>
per ottenere differenti tipi di elenchi (con numeri romani minuscoli, maiuscoli, ecc). Tuttavia, come
nel caso dell'attributo type per la lista non ordinata tale uso non è consigliato dal W3C (come si dice
in gergo è deprecato). Infatti, in generale si cerca di tenere separato il contenuto dalla sua
rappresentazione e si incoraggia a tal proposito l'uso dei CSS (trattati in seguito in questo stesso
capitolo).
Elenchi di definizioni
<DL>
<DT>termine 1
<DD>definizione 1
<DT>termine 2
<DD>definizione 2
<DT>termine 3
<DD>definizione 3
</DL>
19 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Le tabelle
Le tabelle
Man mano che si creano le proprie pagine ci si rende conto di come sia importante posizionare
specifici contenuti in specifiche posizioni all'interno della nostra pagina. I contenuti html sono però
per loro natura sfuggenti alle regole di posizionamento; per ovviare a questi problemi, spesso, il
modo migliore è quello di utilizzare apposite griglie formate da righe e colonne: le tabelle!
Di seguito vi presento il codice per una semplice tabella formata da tre righe (tag <tr>) e due
colonne (tag <td>):
<table width="30%" border="1">
<tr>
<td>A</td>
<td>B</td>
</tr>
<tr>
<td>C</td>
<td>D</td>
</tr>
<tr>
<td>E</td>
<td>F</td>
</tr>
</table>
Il codice precedente darà come risultato la seguente tabella:
I tag <table> e </table> servono per definire la tabella, per la quale l'attributo width valorizzato al
30% definisce l'occupazione in larghezza espressa in percentuale della pagina mentre l'attributo
border ne definisce lo spessore.
L'utilizzo delle tabelle, come dicevo, risulta di estrema importanza per “bloccare” in specifiche
posizioni vari elementi. Un esempio che vede la coesistenza in un due sezioni ben distinte di un
blocco di testo e di un'immagine immagine è il seguente:
20 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Navighiamo tra le pagine: link, percorsi e URL
Navighiamo tra le pagine: link, percorsi e URL
I collegamenti (link) tra pagine html rappresentano la vera essenza del web; sono, infatti, i
collegamenti che rendono i contenuti “ipertestuali” superando in tal modo la sequenzialità del testo
normale.
Il tag da utilizzarsi è <a> con l'attributo href per specificare la risorsa di destinazione del
collegamento:
<p>Clicca <a href="paginaDestinazione.html">qui</a></p>
Nel caso più semplice il valore dell'attributo href (in questo caso paginaDestinazione.html) è il
nome del file html che vogliamo “linkare” (espressione gergale che significa collegare).
Affinché il collegamento dell'esempio funzioni è indispensabile che entrambi i file relativi alle due
pagine da collegare si trovino nella stessa cartella. In caso contrario, cioè quando i due file si
trovano in cartelle differenti è indispensabile indicare con precisione il percorso in cui si trova il
file destinazione. Tale percorso può essere di due diverse tipologie: assoluto oppure relativo.
Per comprendere appieno tale concetto (di assoluta importanza nello sviluppo delle pagine web) mi
corre l'obbligo di aprire una piccola parentesi.
Parlando di storyboad ho fatto vedere come i vari contenuti vadano organizzati in differenti pagine
(file) e come queste ultime, quando cominciano a crescere di numero, vadano organizzate in varie
sottocartelle. La cartella principale, quella dalla quale discendono le varie altre cartelle e nella quale
è presente il file che rappresenta la home page del sito, prende in genere il nome di cartella radice (o
root directory) del sito.
Sviluppo in locale – pubblicazione in remoto
La prassi (dettata dal buon senso) prevede che le pagine vengano sviluppate in locale (si usa dire
anche “localmente”) intendendo dire che esse vengono create e modificate sul proprio PC. Quando
la struttura del sito comincia ad essere sufficientemente completa si può pensare di pubblicare il sito
in remoto. Ciò significa salvare la propria struttura di file e cartelle sul server che ospiterà il nostro
sito e che sarà raggiungile dai vari nostri futuri (si spera molti ;) visitatori.
Mentre in locale, per aprire una pagina html è sufficiente fare un bel doppio clic sul file
corrispondente (oppure usare la voce di menu del browser web “File->Apri” o qualcosa del genere)
la situazione cambia quando vogliamo riferirci ad una specifica pagina presente sul web server. In
questo caso, infatti, dobbiamo riferirci al percorso preciso in cui risiede la pagina. Se facciamo
riferimento alla pagina attraverso un percorso assoluto dobbiamo indicare il cammino che dobbiamo
fare a partire dalla radice del web server fino ad arrivare al file in questione. La radice del web
server è la cartella principale messaci a disposizione sul web server dove andremo a copiare l'intera
struttura del nostro sito. Per indicare un percorso assoluto ad un file iniziamo a scrivere il percorso
utilizzando il simbolo “/” (detto slash ) seguito dal solo nome del file se il file stesso si trova nella
cartella radice del sito. Ad esempio:
/index.html
Già che ci sono faccio notare come tale nome (index.html) dovrebbe essere, per convenzione, il
nome predefinito da dare al file della home page del sito stesso.
Nel caso in cui il file si trovi in una certa sottocartella, per scriverne il percorso assoluto completo
partiremo dalla radice (simbolo “/”) e scriveremo le varie sottocartelle che dovremo attraversare per
21 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Navighiamo tra le pagine: link, percorsi e URL
raggiungere il file in questione. Lo stesso simbolo “/” lo utilizzeremo come separatore tra i nomi
delle cartelle del percorso. Ad esempio:
/documenti/pubblici/chiSiamo.html
rappresenta l'indirizzo assoluto del file “chiSiamo.html”presente nella cartella “pubblici”,
sottocartella della cartella “documenti” a sua volta sottocartella della radice del nostro progetto web.
Il tutto, mi auguro, dovrebbe risultare meno difficile di quanto non appaia a prima vista.
Passiamo ora ad esaminare gli indirizzi relativi. L'aggettivo “relativo” si riferisce al fatto che il
riferimento viene realizzato a partire da un certo file relativamente ad una data cartella. Tale
cartella viene normalmente detta cartella “corrente”. E' intuitivo che essa è “corrente” per il file a
cui ci stiamo riferendo e dal quale faremo partire il link verso un altro file. La cartella corrente vine
di norma indicata con il simbolo “.” (punto). Dovendoci, ad esempio, riferire ad un file presente
nella stessa cartella corrente indicheremo il percorso relativo come segue:
./paginaDestinazione.html
In generale, il simbolo punto viene considerato presente di default (in maniera predefinita) se il
percorso non inizia con il simbolo “/” (quindi non è un percorso assoluto). Possiamo quindi
scrivere, più semplicemente il solo nome di file:
paginaDestinazione.html
Questo è il motivo per cui, nell'esempio dal tag <a> abbiamo potuto scrivere direttamente qualcosa
del tipo:
<p>Clicca <a href="paginaDestinazione.html">qui</a></p>
Sempre a proposito di indirizzi relativi, viene utilizzato un'altra simbologia per indicare la cartella
genitrice, il simbolo “..” (leggiamo punto punto).
Facciamo allora un esempio:
../../contattaci.html
Il precedente percorso si riferisce ad una pagina di partenza del link presente due cartelle al di sotto
della cartella in cui è presente il file destinazione “contattaci.html”.
URL (Uniform Resource Locator )
In generale, un link html non è detto che debba puntare per forza ad una pagina html. La
destinazione del link potrebbe, infatti, essere qualcosa di più generico: un file immagine, un
documento PDF o word o addirittura un indirizzo di posta elettronica. In definitiva una data risorsa
resa disponibile su internet (da noi o da qualcun altro). Esiste, neanche a dirlo, un termine specifico
per tali risorse generiche: URL ovvero Uniform Resource Locator. Un URL non è quindi altro che
l'indirizzo di una risorsa su Internet utilizzabile come valore dell'attributo href all'interno del tag
<a>. Di seguito vi riporto un esempio valido per inserire un collegamento di posta elettronica:
<p>Scrivimi <a href="mailto:[email protected]">qui</a>
Già che ci siamo cerchiamo di essere un po' più formali nella definizione della struttura di un URL.
22 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Navighiamo tra le pagine: link, percorsi e URL
Link all'interno di una pagina
Di solito i link collegano pagine diverse (si parla di link esterni). E' tuttavia possibile far si che un
link si colleghi ad un punto specifico di una data pagina. In definitiva, sia il link che la destinazione
del link si trovano all'interno della stessa pagina. Si parla, in questo caso, di link interni. Tale
organizzazione può risultare abbastanza utile quando un dato argomento è piuttosto corposo
(lungo ;) e non si vuole comunque suddividerlo in più pagine differenti.
Per implementare questa funzionalità è innanzitutto necessario porre un' etichetta per la
destinazione del link nel punto desiderato.
Un primo metodo prevede l'utilizzo di un elemento chiamato “anchor” (àncora) realizzato
utilizzando l'attributo NAME:
<h2><a name="section1">Sezione 1: Introduzione</a></h2>
Un nuovo metodo per porre un' etichetta per la destinazione del link utilizza invece l'attributo ID,
ad esempio:
<h2 id="section1">Sezione 1: Introduzione</h2>
Come seconda operazione è necessario creare il link vero e proprio verso l'etichetta
precedentemente realizzata.
<a href="#section1">vai alla Sezione 1</a>
Come si vede nell'esempio per puntare all'etichetta “section1” se ne indica il nome facendolo
precedere dal carattere "#". Sottolineo ancora che il nome dell'etichetta è il valore del tag NAME o
dell'attributo ID.
E' possibile creare dei collegamenti a punti specifici di un documento anche a partire da un'altra
pagina. Per far ciò la procedura da realizzarsi è sostanzialmente la stessa. L'unica differenza
riguarda la creazione del link attraverso l'attributo href del tag <a> che deve includere nekl suo
valore anche il nome del file della pagina destinazione(seguito come nel caso di link interno dal
carattere '#' e dal nome della sezione).
Ad esempio:
<a href="pagina.html#section1">vai alla Sezione 1</a>
Inserimento di immagini
Le immagini sono un elemento fondamentale del web e trasformano immediatamente un ipertesto in
un ipermedia. Il tag da utilizzarsi è <img> con l'attributo src (source) che indica il file immagine da
caricare:
<img src="pippo.jpg" width="84" height="48">
23 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Inserimento di immagini
Gli attributi width ed height specificano rispettivamente la larghezza e l'altezza a cui si vuole
impostare l'immagine.
E' sufficiente indicare il solo nome del file nel caso in cui esso risieda nella stessa cartella della
pagina html che lo referenzia; in caso contrario è necessario indicarne il percorso completo
(percorso relativo) come nel seguente esempio:
<img src="../images/pippo.jpg" width="84" height="48">
Inserire file multimediali
Per inserire all'interno di una pagina un file multimediale (sonoro o video) è necessario utilizzare un
opportuno tag, <object>:
Vediamo un primo esempio di utilizzo per un file audio:
<object data="filediesempio.wav" type="audio/wav" autostart="true">
<embed src="filediesempio.wav" autostart="true">
</object>
Il tag <embed> inserito all'interno del tag object è un metodo in disuso che serve a gestire il file
sonoro per browser che non interpretano correttamente il tag object.
Per un file video la sintassi potrebbe essere la seguente:
<object data="filmato.mov" type="video/quicktime" width="164" height="140">
<embed src="filmato.mov" type="video/quicktime" width="164" height="140">
</object>
24 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Incorniciamo le nostre pagine: i frame
Incorniciamo le nostre pagine: i frame
Normalmente, in un sito web, differenti pagine contengono elementi comuni: per rendersene conto,
è sufficiente pensare alla sezione della pagina che contiene il logo del sito o il menu che permette la
navigazione all'interno dei principali contenuti del sito stesso.
Per riprodurre questi elementi comuni all'interno di tutte le pagine è necessario riportare il relativo
codice html in tutte le suddette pagine; va da se che manutenere il sito apportando modifiche ad un
solo elemento costringe alla modifica di tutte le pagine coinvolte.
Per ridurre gli inconvenienti insiti in tali contesti è possibile adottare varie strategie. Una, tra tali
strategie si basa sulla suddivisione della pagina in più “sottopagine” dette frames (cornici).
I frame consentono quindi di organizzare i propri documenti web usando contemporaneamente
differenti viste, ognuna delle quali può contenere una differente pagina html.
Esempio di pagina organizzata in tre frame
Di seguito vi riporto un esempio attinente.
<!-- PAGINA DEFAULT.HTML -->
<HTML>
<HEAD>
<TITLE>Pagina con frame</TITLE>
</HEAD>
<FRAMESET ROWS="10%, *" frameborder="1">
<FRAME SRC="header.html">
<FRAMESET cols="10%, *">
<FRAME SRC="menu.html" NAME="menu" marginwidth="10" marginheight="10">
<FRAME SRC="main.html" NAME="main">
</FRAMESET>
</FRAMESET>
</HTML>
25 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Incorniciamo le nostre pagine: i frame
L'intera struttura viene definita ed organizzata in una singola pagina utilizzando i tag frameset e
frame. Tale pagina è composta dai classici tag di apertura e chiusura <html> e </html>. Tuttavia è
presente solo la parte HEAD. Infatti, al posto della sezione <body></body> si utilizza una specifica
sezione <FRAMESET> </FRAMESET> per definire appunto l'organizzazione dei frame. Il tag
frameset viene perfezionato attraverso gli attributi ROWS e COLS.
L'attributo ROWS specifica che le cornici devono essere realizzate su righe mentre COLS dispone
le cornici stesse su più colonne. Nel mio esempio il primo frameset definisce tramite l'attributo
ROWS che vi siano due righe; la prima deve occupare il 10% della pagina mentre la seconda riga
tutta la restante parte. Tale comportamento viene indicato con il “valore” '*'. Avremmo ugualmente
potuto indicare <FRAMESET ROWS="10%, 90%" >.
All'interno di di questa struttura definiamo la presenza le primo frame scrivendo:
<FRAME SRC="header.html">
Di seguito vi presento il codice minimale per la pagina header.html:
<!-- PAGINA HEADER.HTML -->
<HTML>
<body>
<h1>questo è l'header</h1>
</body>
</HTML>
L'attributo frame specifica appunto la presenza del contenuto della cornice tramite l'attributo SRC. Il
file header.html verrà dunque caricato nella prima “riga” della pagina con un'occupazione del 10%.
Poiché vogliamo realizzare al di sotto di questa prima cornice una ulteriore sezione contenente altri
due frames inseriamo un altro tag frameset:
<FRAMESET cols="10%, *">
In questo altro frameset indichiamo con l'attributo cols che richiediamo la presenza di una colonna
con una dimensione del 10% ed un'altra che occupi la parte restante (cols="10%, *")
All'interno di questo frameset, utilizzando i tag frame, definiamo i dettagli relativi alle pagine ch e
andranno ad occupare i frame stessi:
<FRAME SRC="menu.html" NAME="menu" marginwidth="10" marginheight="10">
<FRAME SRC="main.html" NAME="main">
Il primo frame avrà come sorgente la pagina menu.html mentre il secondo, dove verrà visualizzata
una pagina diversa a seconda del link cliccato nella sezione dei menu, conterrà inizialmente la
pagina main.html. Da notare l'attributo NAME associato ai vari frame. Ad esempio NAME="main"
che specifica un nome, in questo caso “main” che rappresenta un'etichetta fondamentale per fare
riferimento allo specifico frame.
Veniamo ora alla sezione importantissima dei menu. Questa, come ho già detto, sarà riempita dalla
pagina menu.html.
Di seguito vi riporto il codice di esempio per organizzare un elenco di menu.
26 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Incorniciamo le nostre pagine: i frame
<!-- PAGINA MENU.HTML -->
<HTML>
<HTML>
<body>
<a href="main.html" target="main">home</a><br><!-- main è il nome del frame centrale -->
<a href="pagina1.html" target="_top">pagina 1</a><br><!-- _top forza la visualizzazione a
tutta pagina -->
<a href="pagina2.html" target="_blank">pagina 2</a><br><!-- _blank apre una nuova
finestra del browser -->
</body>
</HTML>
Nel codice presentato si possono notare i classici tag <a> con gli attributi href che specificano i link
di destinazione. La cosa nuova sulla quale è necessario soffermarsi è data dall'attributo target. Tale
attributo specifica il fatto che la pagina di destinazione del link non dovrà essere visualizzata nel
frame in cui è presente il link (cioè nella sezione dei menu) bensì nella sezione main. Infatti il link è
dato dal codice:
<a href="main.html" target="main">
L'attributo target, oltre al nome del frame di destinazione del link, può avere anche altri valori. Ad
esempio, quando si vuole che la pagina di destinazione sia visualizzata a pagina intera vinene
utilizzato il valore _top. Quando invece si vuole che la pagina destinazione venga visualizzata in
una nuova istanza del browser si usa il valore _blank. Quest'ultimo uso è particolarmente indicato
quando il link di destinazione è riferito ad un sito esterno al “nostro”.
Di seguito trovate il codice minimale per le atre apgine coinvolte nell'esempio.
<!-- PAGINA1.HTML -->
<HTML>
<body>
<center>pagina1</center>
</body>
</HTML>
<!-- PAGINA2.HTML -->
<HTML>
<body>
<center>pagina2</center>
</body>
</HTML>
<!-- MAIN.HTML -->
<HTML>
<body>
<center>main</center>
</body>
</HTML>
Attributi del frameset
<frameset frameborder="no" cols="30%,70%">
frameborder è di default impostato a “yes” ed indica che nel frameset devono essere visualizzati i
bordi; chiaramente con “no” se ne impedisce la visualizzazione.
27 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Incorniciamo le nostre pagine: i frame
Attributi del frame
<frame src=”paginadelframe.html” scrolling=”no” noresize>
Il valore di “scrolling” può essere il default “yes” che appunto consente lo scrolling del contenuto
del frame, “no” che lo impedisce ed “auto” nel qual caso la barra di scorrimento appare solo se
richiesto dalla dimensione dei contenuti presenti nel frame.
L'attributo “noresize” impedisce il ridimensionamento del frame.
Infine, è possibile impostare la distanza (in pixel) tra il contenuto del frame ed il frame stesso
<frame marginwidth="80" marginheight="40" src="pagina.html">
28 - Io, Informatico – Carlo A. Mazzone – versione 20091018
CSS (Cascading Style Sheets)
CSS (Cascading Style Sheets)
I CSS rappresentano per certi aspetti un tentativo di ritorno alle origini dell'HTML: la separazione
tra contenuto e sua rappresentazione.
In breve un foglio di stile è un elenco di regole di visualizzazione a cui deve sottostare una
determinata pagina web.
I fogli di stile possono essere utilizzati internamente alla pagina (fogli incorporati) o al contrario
usando un file esterno, con estensione .CSS, nel quale vengono definite le regole di formattazione
degli elementi. Si parla in questo secondo caso di fogli collegati.
Una regola è fondamentalmente organizzata in due sezioni:
selettore {blocco della dichiarazione}
Il selettore definisce l'elemento al quale verrà applicata la regola (definita all'interno del blocco
della dichiarazione racchiuso tra parentesi graffe). Ad esempio:
body
{
font-family : verdana, Arial, Helvetica;
font-size : 12px;
color : #000000;
margin-top : 0;
}
dove body rappresenta l'elemento da “configurare” relativamente alle proprietà font-family, fontsize, color, margin-top. I valori delle rispettive proprietà vengono impostati separandoli con i due
punti “:” e terminandone la specifica con un punto e virgola.
Il selettore può essere un qualsiasi tag predefinito del linguaggio HTML; ad esempio: <H1>,
<TABLE>, <P> e così via.
Volendo è possibile utilizzare dei commenti all'interno del foglio di stile per chiarire il significato
delle regole; tali commenti prevedono l'uso dei caratteri /* di apertura commento e */ di chiusura,
come di seguito:
/* questo è un commento */
Le Classi
Per ottenere un controllo più fine sulla visualizzazione degli elementi si fa riferimento al concetto di
classe. Infatti, si potrebbe volere che determinati paragrafi abbiano specifiche formattazioni
differenti da quelle impostate a livello generale. Si possono così creare delle classi di
formattazione; per definire una classe è sufficiente indicarne il nome nel file css facendolo
precedere da un punto.
/*definisco una classe*/
.testorosso
{
color : #FF0000;
}
29 - Io, Informatico – Carlo A. Mazzone – versione 20091018
CSS (Cascading Style Sheets)
La classe in questione si chiama testorosso ed ha la proprietà color impostata appunto sul colore
rosso (FF0000).
Per richiamare nel codice HTML tale comportamento è sufficiente utilizzare l'attributo class:
<P class="testorosso">Questo è un paragrafo con classe</P>
Nel caso di fogli di stile incorporati l'elenco delle regole va posto all'interno del tag head
<html>
<head>
<style type="text/css">
/* qui vanno le regole */
</style>
</head>
...
Vediamo ora un esempio completo con un foglio di stile collegato.
<!-- file html -->
<HTML>
<HEAD>
<LINK REL="StyleSheet" HREF="mystyle.css" TYPE="text/css">
<TITLE>Esempio con CSS</TITLE>
</HEAD>
<BODY>
<H1>Questo è il tag H1</H1>
<P>Questo è un paragrafo normale</P>
<P class="testorosso">Questo è un paragrafo con classe</P>
<A HREF="">Questo è un link di esempio fittizio</A>
</BODY>
</HTML>
Analizzando il precedente codice html si può facilmente osservare la presenza di una classe di nome
testorosso (definita all'interno del tag <p>).
Da notare inoltre come all'interno del tag head sia presente il tag LINK che con l'attributo HREF
indica in quale file trovare l'insieme di regole da applicare per la pagina in questione (in questo caso
il file si chiama mystyle.css)
/* mystyle.css */
/*Questo è un foglio di stile di esempio */
h1 { color : orange; }
body
{
font-family : verdana, Arial, Helvetica;
font-size : 12px;
color : #000000;
margin-top : 0;
}
P
{
text-align: center;
}
/*definisco una classe*/
.testorosso
{
30 - Io, Informatico – Carlo A. Mazzone – versione 20091018
CSS (Cascading Style Sheets)
color : #FF0000;
}
body
{
background-image : url(_background.jpg);
}
/* seguono impostazioni di pseudo-classi */
a:hover {
color : #ffffff;
background : #1c3846;
font-size : 10px;
font-weight : bold;
}
a:link {
font-size : 10px;
color : #000000;
text-decoration : underline;
}
a:visited {
font-size : 10px;
color : #808080;
}
ID ed organizzazione dei contenuti: il layout del sito
Mentre l'uso delle classi consente di riferirsi ad interi gruppi di elementi in varie parti della pagina, a
volte può essere necessario individuare in maniera univoca il comportamento di una specifica
sezione della pagina.
Per capire meglio tale concetto è il caso di fermarsi un attimo a ragionare su aspetti generali inerenti
alla costruzione di un sito web.
Una volta definita la “mission” del sito si inizia ad organizzarne i contenuti e, più in generale, si
lavora allo storyboard del sito stesso. In tale contesto uno degli aspetti fondamentali è la
disposizione delle sezioni in cui deve essere organizzata la pagina (il layout). In qualsiasi sito web,
infatti, è banale riconoscere delle sezioni pressoché standard: una sezione di “intestazione” (detta in
generale “header”) con il nome del sito, un eventuale logo ed a volte un menu di navigazione
integrato. Una sezione con i contenuti veri e propri. Infine, una sezione, di solito posta in fondo alla
pagina, detta quindi “footer” con riferimenti ai copyright ed altre “amenità” del genere. In definitiva
una cosa del genere mostrato nella figura qui sotto:
31 - Io, Informatico – Carlo A. Mazzone – versione 20091018
CSS (Cascading Style Sheets)
Il mio sito
Home - FAQ - News - Contatti
Lorem ipsum dolor sit amet,
consectetur adipisici elit, sed
eiusmod tempor incidunt ut labore
et dolore magna aliqua. Ut enim ad
minim veniam, quis nostrud
exercitation ullamco laboris nisi ut
aliquid ex ea commodi consequat.
Copyright 2009 - tesseract.it
Il layout di un generico sito web
Il primo approccio che viene in mente per gestire una situazione come quella presentata in figura
consiste nell'utilizzo di un insieme di tabelle per costringere le varie sezioni della pagina a
conservare la propria posizione. Tuttavia, l'uso delle tabelle comporta una serie di problemi tra i
quali la difficoltà di mantenere in maniera semplice l'omogeneità grafica di un ito complesso.
I CSS mettono a disposizione uno strumento formidabile per risolvere tale problematica e di
conseguenza la differenziazione tra contenuto e rappresentazione: gli ID. Con gli ID, infatti, è
possibile assegnare delle caratteristiche grafiche specifiche ad una specifica sezione: intestazione,
footer, ecc.
Il tag HTML che meglio si presta a fungere da contenitore per le varie sezioni è il tag <DIV>.
Infatti, tale tag non ha nessuna caratteristica particolare di formattazione predefinita. Per meglio
chiarire gli aspetti d'uso concreti riporto l'HTML necessario per organizzare il layout appena
definito:
Per definire un ID si fa precedere il suo nome dal simbolo cancelletto “#” come di seguito:
#header
{
background-color: #0022aa;
color: #ffffff;
}
e come per le classi se ne richiama il funzionamento dalla pagina HTML come segue:
<div id="header">
...
</div>
Di seguito vi propongo il codice completo di un esempio minimale; prima il codice HTML:
<div id="header">
<center>
<h1>Il mio sito</h1>
Home FAQ News Contatti
</center>
</div>
32 - Io, Informatico – Carlo A. Mazzone – versione 20091018
CSS (Cascading Style Sheets)
<div id="principale">
<!-- contenuto -->
<p>
Lorem ipsum
dolor sit amet
</p>
<p>
consectetur adipisici elit, sed eiusmod tempor incidunt ut labore et dolore magna
aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
aliquid ex ea commodi consequat.</p>
</div>
<div id="footer">
&copy; 2009 tesseract.it
</div>
</body>
</html>
e quindi il relativo file di regole CSS:
/*
Foglio di stile di esempio
*/
body
{
background-color: #ffffff;
}
#header
{
background-color: #0022aa;
color: #ffffff;
}
#principale
{
background-color: #f5f5f5;
color: #222222;
}
#footer
{
background-color: #f5f5f5;
text-align: center;
}
33 - Io, Informatico – Carlo A. Mazzone – versione 20091018
CSS (Cascading Style Sheets)
34 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Fammi vedere quello che faccio: gli ambienti WYSIWYG
Fammi vedere quello che faccio: gli ambienti WYSIWYG
Sinceramente non so che impressione vi abbia fatto finora l'HTML; credo, comunque, che un
minimo di disorientamento ed una certa sensazione di incapacità di gestire la mole di tag e relativi
attributi sia abbastanza naturale.
Se da un lato l'HTML risulta relativamente semplice da imparare ed utilizzare d'altro canto esso
comporta un notevole sforzo nel caso si vogliano produrre pagine di una certa complessità grafica.
“Da che mondo è mondo” quando il gioco si fa duro si affilano gli strumenti. Dirò una casa banale
ma dovrebbe essere chiaro che: NON VORRETE MICA PRODURRE LE VOSTRE PAGINE
CON IL BLOCCO NOTE DI WINOWS???
In effetti, il blocco note può risultare utile in un primo momento di avvicinamento al linguaggio ma
subito dopo è il caso di munirsi di strumenti più efficienti.
Tra i tanti editor di testi a disposizione mi sento di suggerirne alcuni: Crimson Editor, NotePad++,
PSPad.
Si tratta di ottimi software (gratuiti) che consentono di scrivere i tag html con semplificazioni tipo la
colorazione del codice, la possibilità di gestire più file aperti contemporaneamente e diversi altri
strumenti. Tutti, però, partono dalla scrittura manuale del codice e dalla verifica attraverso il
browser del risultato ottenuto. Nel caso in cui questo non sia soddisfacente si modificheranno i tag
e, dopo, aver salvato la pagina, si verificherà ancora una volta il risultato finché non si raggiungerà
quello cercato e sperato.
Un approccio totalmente diverso vede, invece, la creazione delle pagine html attraverso software
che
consentono di vedere direttamente ciò che si vuole ottenere; un po' come avviene con
programmi come Microsoft Word in cui si scrive il testo, lo si dispone a piacimento, si inseriscono
immagini e così via. Tale modo di procedere ha fatto si che si creasse un acronimo che identifica
questa tipologia di programmi: WISIWIG.
WISIWIG sta letteralmente per:
What You See Is What You Get
e cioè: ciò che vedi (quando crei la pagina) è effettivamente ciò che ottieni come risultato finale.
Tra i più famosi software che ricadono in questa categoria c'è da segnalare sicuramente Microsoft
FrontPage, così come l'ottimo Adobe Dreamweaver (originariamente prodotto dalla Macromedia).
Come al solito, tuttavia, cerco di segnalarvi qualche soluzione gratuita; anche in tali contesti esiste
una buona alternativa ai più blasonati programmi che ho appena menzionato: kompozer .
Kompozer (reperibile all'indirizzo: http://www.kompozer.net/ ) è un completo sistema di authoring
nato sulle ceneri di un vecchio progetto chiamato NVU (da leggersi N-view, per “new view”) tuttora
non più aggiornato.
35 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Moduli: raccogliamo i dati dal web
Moduli: raccogliamo i dati dal web
Un aspetto di fondamentale importanza per una qualsiasi applicazione informatica, e quindi anche
per quelle scritte per il web, risiede nella gestione dei dati forniti dall'utilizzatore (utente)
dell'applicazione stessa. Normalmente, infatti, una applicazione web non deve semplicemente
limitarsi a consentire la navigazione all'interno dei suoi contenuti ma coinvolgere l'utente
consentendogli, ad esempio, di registrarsi per ricevere materiale informativo, postare propri
commenti (postare è una espressione gergale che significa 'inviare dati'), effettuare acquisti o
quant'altro. Per consentire tali tipi di attività il linguaggio HTML mette a disposizione del
programmatore uno specifico tag: <FORM>
Tale marcatore consente di definire nella pagina web una sezione, nota con il termine di modulo,
(form nella terminologia tecnica) con lo scopo di raccogliere specifiche informazioni inserite nella
pagina dal nostro utente. Un semplice esempio può valere più di mille parole:
Vediamo allora come realizzare il form proposto. Come prima operazione è necessario utilizzare i
tag <FORM> e </FORM> all'interno dei quali andremo a racchiudere il testo ed i tag dei vari
elementi.
<form name="moduloEsempio" method="post" action="pagina.asp">
...
</form>
Il tag <form> prevede l'utilizzo di tre attributi:
–
–
–
name: è un nome simbolico con il quale è eventualmente possibile riferirsi al modulo stesso
method: specifica la metodologia con la quale il modulo invia i dati raccolti
action: indica il nome del file che dovrà processare i dati inviati dal modulo
L'attributo method può assumere due diversi valori: GET e POST.
GET raccoglie tutti i dati in una unica variabile di nome QueryString che viene passata alla pagina
indicata nell'attributo action.
POST al contrario passa alla pagina che processa i dati tante variabili quanti sono i campi di
selezione impostati nel modulo.
Vediamo ora i vari elementi del form. Per far ciò vi propongo il codice HTML completo relativo
all'esempio in oggetto.
--------------------------------------------------------------<form name="moduloEsempio" method="post" action="pagina.asp">
Nome e Cognome:
<input type="text" name="nomecognome">
<p>Professione:
<select name="professione">
<option selected value="studente">Studente</option>
<option value="impiegato">Impiegato</option>
<option value="disoccupato">In cerca di occupazione</option>
<option value="pensionato">Pensionato</option>
<option value="autonomo">Lavoro autonomo</option>
</select>
</p>
<p>Sesso: M
<input type="radio" name="sesso" value="maschio" checked>
F
<input type="radio" name="sesso" value="femmina">
</p>
<p>Interessi: </p>
36 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Moduli: raccogliamo i dati dal web
<p>
<input type="checkbox" name="chkInteressi1" value="Lettura">
Lettura
<input type="checkbox" name="chkInteressi2" value="Sport">
Sport
<input type="checkbox" name="chkInteressi3" value="Televisione">
Televisione
<input type="checkbox" name="chkInteressi4" value="Cinema">
Cinema
<input type="checkbox" name="chkInteressi5" value="Politica">
Politica </p>
<p>
<input type="submit" name="Submit" value="Invia">
<input type="reset" name="Reset" value="Annulla">
</p>
</form>
---------------------------------------------------------------
ed il corrispondente risultato nel browser:
Analizziamo in dettaglio i vari elementi:
Caselle di testo
Le caselle di testo sono probabilmente tra gli elementi più utilizzati. Semplicemente si tratta di
elementi che consentono all'utente di inserire del testo al loro interno.
<INPUT TYPE="text" NAME="nomecognome">
E' possibile definire una dimensione a piacere, espressa in caratteri, per il campo di testo
utilizzando l'attributo SIZE. E' inoltre possibile definire il numero massimo d caratteri inseribili in
un dato campo di testo utilizzando l'attributo MAXLENGHT.
37 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Moduli: raccogliamo i dati dal web
<INPUT TYPE="text" NAME="nomecognome" SIZE ="50" MAXLENGHT="64">
Nel caso in cui, come nell'esempio appena portato, la dimensione (SIZE) del campo sia inferiore al
numero massimo di caratteri digitabili (MAXLENGHT) eventuali caratteri in eccesso scorreranno
in orizzontale fino a raggiungere il valore massimo impostato.
Aree di testo (textarea)
Le aree di testo vengono utilizzate quando si vuole che un dato testo occupi più righe. Un utilizzo
tipico può essere ad esempio quello in cui si voglia che l'utente inserisca dei commenti o più in
generale del testo libero.
<TEXTAREA NAME="areaditesto" ROWS="5" COLS="60">
questo è un testo di esempio inserito nell'area di testo
</TEXTAREA >
Gli attributi ROWS e COLS specificano rispettivamente il numero di righe e di colonne di testo del
campo.
Pulsanti di opzione (radio button)
I pulsanti di opzione servono per realizzare elenchi di oggetti dei quali uno solo di essi può essere
selezionato. Quando uno di questi pulsanti viene selezionato gli altri vengono deselezionati in
maniera del tutto automatica.
<input type="radio" name="sesso" value="Maschio" checked>
L'attributo checked associato ad un certo pulsante definisce il pusante stesso come quello che risulta
selezionato in maniera predefinita al momento del caricamento della pagina.
E' possibile definire più elenchi indipendenti di oggetti selezionabili; per far ciò è sufficiente
associare a gruppi di pulsanti diversi attributi NAME differenti.
Caselle di selezione (checkbox)
Le caselle di selezione consentono di scegliere uno o più elementi da un dato elenco. Ogni casella
può essere attiva (stato ON) oppure disattiva (stato OFF) e quindi, al contrario dei pulsanti di
opzione, è possibile selezionare (attivare) contemporaneamente differenti valori.
<INPUT TYPE="checkbox" NAME="chkInteressi1" VALUE="Informatica">
Elenchi a discesa
Gli elenchi a discesa permettono di realizzare liste di elementi in forma di menu dai quali
selezionare la voce di interesse.
<SELECT NAME="professione">
38 - Io, Informatico – Carlo A. Mazzone – versione 20091018
Moduli: raccogliamo i dati dal web
<OPTION NAME="studente">Studente</OPTION>
...
...
</SELECT >
E' possibile associare ad uno degli elementi dell'elenco l'attributo SELECTED per rendere tale
elemento selezionato in maniera predefinita al momento del caricamento della pagina contenente il
modulo.
Pulsanti
I pulsanti sono gli elementi che controllano il funzionamento del form. Ogni form dovrebbe avere
un pulsante di inoltro dati.
<INPUT TYPE="submit" NAME="Submit" VALUE="Invia">
L'attributo TYPE specifica che il pulsante in oggetto deve, una volta premuto, richiamare lo script
indicato nell'attributo ACTION del tag <FORM> passando a quest'ultimo i vari campi e relativi
valori presenti nel modulo stesso.
E' possibile utilizzare un ulteriore bottone che consenta di reimpostare allo stato iniziale i vari
elementi presenti nel form.
<INPUT TYPE="reset" NAME="Reset" VALUE="Annulla">
39 - Io, Informatico – Carlo A. Mazzone – versione 20091018
XML
XML
HTML ha rappresentato senza ombra di dubbio un elemento fondamentale nello sviluppo del web.
La sua estrema semplicità ha reso accessibile ad un enorme numero di utenti la possibilità di
pubblicare e condividere straordinarie quantità di informazioni.
Ma HTML ha mostrato al contempo anche un punto debole di notevole impatto. Quello di non
riuscire a tenere separate le funzionalità relative alla gestione dei contenuti rispetto a quelle legate
alla pura rappresentazione.
Mi preme qui sottolineare come al crescere delle possibilità di comunicazione e scambio di
informazioni si sia fatta sempre più pressante la necessità di avere standard che permettano lo
scambio dei dati tra sistemi tra loro eterogenei. Tale problematica è presente sia se ci riferiamo a
sistemi tra loro geograficamente separati sia, al contrario, relativamente ad entità presenti su di un
medesimo sistema. Il problema è sostanzialmente relativo alla natura del dato che deve essere
convertito da un sistema ad un altro indipendentemente dalla sua rappresentazione esterna.
Un esempio può aiutare a meglio capire il concetto: qualche anno fa i sistemi tipicamente utilizzati
per le riprese video amatoriali erano le cineprese che utilizzavano delle semplici pellicole. Ormai
tali apparecchiature sono praticamente sparite. Successivamente le riprese video sono state
effettuate con sistemi che riversano i filmati su videocassette di differenti formati. I più moderni ed
attuali sistemi utilizzano tecniche digitali di ripresa. In definitiva i mezzi meccanici si modificano
tecnologicamente nel tempo, gli oggetti delle riprese (i filmati video ovvero le informazioni) sono
sempre gli stessi e pressante si fa il problema di convertire i vecchi formati in quelli nuovi al fine di
conservare memoria di quanto già acquisito.
Un discorso simile può essere applicato al campo più squisitamente informatico. Il punto centrale di
ogni contenuto è l'informazione in esso presente e non tanto la sua rappresentazione. Il fulcro è la
comunicazione semplice è standard dei contenuti ai quali si potrà successivamente associare uno
stile, ad essi legato, ma allo stesso tempo indipendente.
L'attuale e più importante risposta a tali problematiche è XML.
Il World Wide Web Consortium (W3C), vale a dire il gruppo che si occupa del coordinamento del
linguaggio HTML, è anche il promotore di XML (Extensible Markup Language).
XML è in realtà una forma semplificata di un altro standard per la gestione dei documenti noto
come SGML (Standard Generalized Markup Language). 1
La natura di XML è quella di essere una semplificazione ed un ridimensionamento di SGML.
Quest'ultimo linguaggio, infatti, già in uso dagli anni '80 nelle grandi industrie tecnologiche e
tipografiche, è troppo “pesante” e “corposo” per adattarsi al web.
La discendenza diretta di XML da SGML rappresenta un suo altro punto di forza. Ciò permette alle
tante compagnie che utilizzano SGML di migrare facilmente i loro contenuti verso XML.
XML è un meta-linguaggio (un linguaggio per creare linguaggi). Esso non è limitato a dei tag
predefiniti come HTML. Al contrario esso permette la creazione di tag propri consentendo la
realizzazione di specifici linguaggi per specifici contesti (matematici, chimici e così via).
Molto del merito relativo alla creazione di XML va probabilmente attribuito a Jon Bosak della Sun Microsystems.
Questi ha infatti presieduto il primo gruppo di lavoro su XML: XML Working Group (originariamente noto come
SGML Editorial Review Board).
1
40 - Io, Informatico – Carlo A. Mazzone – versione 20091018
XML
Ma la vera forza di XML, lo ribadisco, è la sua capacità di rendere isolabile il contenuto dalla
rappresentazione. Inoltre, esso utilizza, per rappresentare tale contenuto, testo in chiaro e non in
formato binario. Ciò consente al contenuto stesso di essere direttamente visualizzato ed interpretato
da un operatore umano. Vi assicuro che questo è un aspetto di enorme importanza nello sviluppo di
una qualsiasi applicazione.
Organizzazione di un documento XML (contenuto, struttura e stile)
Analizzando una data realtà informativa si possono facilmente individuare tre differenti elementi
fondamentali: il suo contenuto, la sua struttura interna ed un suo determinato stile. Come sempre un
esempio può essere chiarificatore.
Immaginiamo di voler elencare e gestire le caratteristiche di una serie di libri. Per ogni singolo libro
possiamo individuare una serie di caratteristiche comuni come ad esempio un titolo, un autore, un
prezzo, un editore, il numero delle pagine, e via dicendo. All'interno di questi elementi possiamo
individuare anche delle relazioni strutturali: un autore avrà un suo nome e cognome, la sua
biografia, così come eventualmente una lista di altri libri pubblicati ad egli associata.
Un ulteriore elemento caratterizzante tale realtà informativa è rappresentato dallo stile con cui
visualizziamo tali informazioni. Potremmo elencare il tutto con una tabella, piuttosto che con una
lista ed applicare font e colori diversi a seconda di preferenze e contesti specifici.
Lo standard XML prevede per questi tre aspetti individuali tre tipi di file separati.
Il primo e più importante è il file del contenuto la cui estensione, senza sorprese è XML.
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<libri>
<libro>
<titolo>Astronomia</titolo>
<editore>De Agostini</editore>
<autore>
<nome>Gianluca</nome>
<cognome>Ranzini</cognome>
<biografia>Laueato in Astrofisica...</biografia >
</autore>
<numeropagine>320</numeropagine >
<prezzo valuta="euro">18.08</prezzo>
</libro>
</libri>
Come potete notare, un file XML è abbastanza simili ad un file HTML. Sono, infatti, facilmente
individuabili una serie di marcatori (tag) che delimitano contenuti specifici. La grossa differenza
nella gestione dei tag, come dicevo prima, sta nel fatto che in generale non siamo costretti a servici
41 - Io, Informatico – Carlo A. Mazzone – versione 20091018
XML
di tag già definiti per noi come avviene in HTML. In HTML abbiamo tag del tipo <p></p> per
definire paragrafi, <Img> per inserire immagini e così via. In ogni caso possiamo fare uso solo dei
tag che la versione specifica del linguaggio HTML ci mette a disposizione.
In XML siamo noi a decidere quali debbano essere i tag e come questi debbano essere organizzati
all'interno del nostro documento. Badate bene che qui stiamo definendo l'organizzazione dei
contenuti e non ci stiamo affatto preoccupando, almeno per il momento, del modo in cui tali
contenuti debbano essere visualizzati.
Ad ogni elemento di interesse si fa corrispondere un tag specifico. Ad esempio, nel nostro caso,
titolo, editore, prezzo e così via. La cosa di rilevo da notare è che non sempre è facile stabilire se
una certa caratteristica debba essere realizzata utilizzando uno specifico tag o se questa debba più
propriamente essere indicata utilizzando un attributo di un altro tag. Molto dipende dal contesto
specifico e dal tipo di utilizzo che si immagina per la struttura in oggetto.
Analizzando con più dettaglio il nostro primo file xml notiamo senza dubbio la prima riga
contenente il tag xml con una serie di attributi:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
Tale sezione del file prende il nome di dichiarazione XML.
In essa l'attributo version specifica a quale versione di XML fa riferimento il file in oggetto.
L'attributo encoding specifica invece lo schema di codifica dei caratteri utilizzati (UTF-8, EUCJP, ...).
L'attributo standalone rappresenta la dichiarazione di documento autonomo. Esso può assumere i
due valori yes e no. Nel primo caso si indica che non esiste alcun ulteriore documento, collegato a
quello in oggetto, che definisca ulteriori caratteristiche relative al contenuto. Al contrario, un valore
“no”, specifica che esiste un altro documento, esterno al primo, contenente altri dettagli formali per
meglio definire caratteristiche e vincoli dei contenuti da gestire. Tali dettagli prendono il nome di
DTD (Document Type Definition) e possono essere, un po' come avviene per i CSS, sia interni al
documento XML sia esterni ad esso. In questo secondo caso è ovviamente necessario indicare nel
documento XML dove reperire il DTD specifico. Da notare che in SGML l'uso del DTD è
obbligatorio.
Livelli di correttezza per un documento XML
Esistono due differenti livelli in cui può essere classificato e gestito un documento XML.
Documenti ben formati
I documenti ben formati rappresentano un primo livello, non molto restrittivo, in cui può ricadere
un file XML. Per definirsi ben formato un file XML deve sottostare alle seguenti regole:
–
–
Bilanciamento dei tag: ogni tag di apertura (ad esempio <libro>) deve avere un corrispondente
tag di chiusura (ad esempio </libro>). Se tuttavia il tag è un elemento vuoto, che non ha quindi
un tag di chiusura, la sua sintassi deve essere la seguente: </tagvuoto>. Facendo riferimento ad
HTML, un tag che non prevede chiusura è, ad esempio, il tag <br> utilizzato per inserire un
ritorno a capo. Volendo utilizzare in XML un tag di tale tipo esso dovrebbe essere espresso come
<br/>.
Tutti gli elementi devono essere annidati: non si possono avere sovrapposizioni tra tag. Ad
esempio <p><i></p></i> in XML non è consentito.
42 - Io, Informatico – Carlo A. Mazzone – versione 20091018
XML
–
–
–
Valori degli attributi tra virgolette: tutti i valori degli attributi di un elemento devono essere
espressi racchiudendoli tra doppi apici. Ad esempio: <prezzo valuta="euro">
Un solo elemento radice: il documento XML deve avere un unico elemento 'radice' in cui tutti
gli altri elementi devono risultare annidati.
Differenza tra maiuscole e minuscole: i tag sono case sensitive; <Tag> è diverso da <TAG>
Documenti validi
Un documento si ritiene essere valido se ha associato un DTD (Document Type Definition) e se il
documento rispetta i vincoli in esso espressi. Il DTD deve apparire prima del primo elemento del
documento.
Il nome del DTD per convenzione corrisponde a quello dell'elemento radice.
Il DTD, se è interno al documento XML, inizia con una dichiarazione DOCTYPE:
<!DOCTYPE
elemento_radice
[elemento, attributo, entità, notazione]>
Se, al contrario il DTD è esterno esso viene referenziato come segue:
<!DOCTYPE elemento_radice SYSTEM "file.dtd">
In sintesi il DTD serve a definire in maniera formale e rigorosa l'organizzazione dei contenuti
all'interno del file XML.
Anche l'occhio vuole la sua parte: applichiamo uno stile ad XML
Abbiamo visto alcune delle caratteristiche essenziali di XML. Tutto ciò ha riguardato
esclusivamente l'aspetto relativo al contenuto. E' intuitivo come sia necessario individuare dei
metodi che consentano al contenuto di avere una determinata forma usufruibile dall'utente umano.
La risposta è ancora una volta un acronimo: XSL.
L'Extensible StyleSheet Language consente attraverso l'uso di specifici tag di indicare precise regole
di formattazione per ogni singolo elemento di un file XML.
Di seguito riporto un semplice esempio di file XML con un suo corrispondente file XSL.
<!--
File di esempio XML -->
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="sample.xsl"?>
<tasks>
<task>
<name>Interfaccia grafica</name>
<description>configurazione gui</description>
<startDate>14/10/2004</startDate>
<endDate>27/10/2004</endDate>
<priority>Normale</priority>
<percentComplete>0</percentComplete>
<status>Non iniziata</status>
</task>
</tasks>
43 - Io, Informatico – Carlo A. Mazzone – versione 20091018
XML
<!--
File di esempio XSL -->
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="uri:xsl">
<xsl:template match="/">
<HTML>
<BODY>
<TABLE BORDER="0">
<TR STYLE="font-weight:bold" bgcolor='#9faccb' width="100%">
<TD>Attivita'</TD>
<TD width="50%">Descrizione</TD>
<TD>Data inizio</TD>
<TD>Data fine</TD>
<TD>Priorita'</TD>
<TD>Stato</TD>
<TD>% completamento</TD>
</TR>
<xsl:for-each select="tasks">
<xsl:apply-templates/>
</xsl:for-each>
</TABLE>
</BODY>
</HTML>
</xsl:template>
<xsl:template match="task">
<TR>
<TD><xsl:value-of
<TD><xsl:value-of
<TD><xsl:value-of
<TD><xsl:value-of
<TD><xsl:value-of
<TD><xsl:value-of
<TD><xsl:value-of
</TR>
select="name"/></TD>
select="description"/></TD>
select="startDate"/></TD>
select="endDate"/></TD>
select="priority"/></TD>
select="status"/></TD>
select="percentComplete"/></TD>
</xsl:template>
</xsl:stylesheet>
La prima cosa che salta all'occhio è il fatto che il file XSL è molto simile ad un file XML. La cosa è
del tutto normale: i file XSL sono a loro volta dei documenti XML.
44 - Io, Informatico – Carlo A. Mazzone – versione 20091018