From: Subject: CORSO DI HTML Date: Fri, 29 Feb 2008 15:17:59 +0100 MIME-Version: 1.0 Content-Type: multipart/related; type="text/html"; boundary="----=_NextPart_000_0000_01C87AE6.45703F30" X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3198 This is a multi-part message in MIME format. ------=_NextPart_000_0000_01C87AE6.45703F30 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Location: http://www.vincenzigabriele.com/cartellasalvaguai/Documents/CORSO_DI_HTML.htm CORSO DI HTML



















    CORSO DI=20 HTML
















Prof. Fulvio = Ferroni=20


Scritto tra = il 1998 e il=20 2001










Copyright =A9 2001 Fulvio Ferroni =

Via Longarone, = 6/8 - 31030 -=20 Dosson di Casier - Treviso - fuferro@tin.it

Questo documento, = o parte di=20 esso, pu=F2 essere riprodotto e distribuito con qualunque mezzo, fisico = o=20 elettronico, purch=E9 sia accompagnato da questo copyright e da questa=20 licenza.





Sommario

1=20 INTERNET 3

1.1=20 Cenni storici 3

1.2=20 I protocolli 4

1.3=20 INTRANET e EXTRANET 5

1.4=20 Il WORLD WIDE WEB 6

1.5=20 Gli indirizzi delle risorse di Internet 10

1.6=20 Collegarsi a Internet da casa 13

2=20 IL LINGUAGGIO HTML 15

2.1=20 Introduzione 15

2.2=20 Storia dell'HTML 15

2.3=20 Aspetto di un file HTML 16

2= .4=20 Strumenti per la creazione di documenti HTML 16

2.5=20 Struttura di un documento HTML 17

2.6=20 Nidificazione dei tag 20

2.7=20 Set di caratteri 20

2.8=20 Altri elementi di uso frequente 22

2.9=20 Elenchi o Liste 24

2.10=20 Collegamenti 27

2.11=20 Immagini nei documenti 30

3=20 DOCUMENTI AVANZATI 33

3.1=20 Informazioni supplementari nell'intestazione 33

3.2=20 Uso delle tabelle 34

3.3=20 Cenni a FRAME, CSS, Oggetti multimediali 41

4=20 PAGINE INTERATTIVE E DINAMICHE 50

4.1=20 Introduzione 50

4.2=20 Moduli e programmi CGI 50

4.3=20 Definizione e utilizzo dei programmi CGI 59

4.4=20 WEB e database,PHP 68

4.5=20 Script attivi, DHTML, applet, servlet 80

4.6=20 WEB ad oggetti 87

4.7=20 Conclusioni 88

5=20 DA HTML A XML: CENNI 90

5.1=20 Limiti dell'HTML 90

5.2=20 Genesi e natura dell'XML 91

5.3=20 Documenti XML ben formati e validi 91

5.4=20 Parser ed applicazioni XML 94

6=20 BIBLIOGRAFIA 97

1 INTERNET

1.1=20 Cenni storici

Internet =E8=20 una rete internazionale formata dall'interconnessione di molte migliaia = di reti=20 di computer. La sua storia inizia negli anni sessanta e precisamente nel = 1962=20 quando negli Stati Uniti viene creata, nell'ambito del Dipartimento = della=20 Difesa, un'agenzia di nome DARPA (Defence = Advanced=20 Research Projects Agency).

Il = suo scopo=20 fondamentale era quello di riacquisire il primato tecnologico nei = confronti=20 dell'Unione Sovietica che nel 1957 aveva lanciato il primo satellite = artificiale=20 della storia, lo Sputnik. L'ARPA doveva in particolare progettare un = sistema di=20 telecomunicazioni in grado di funzionare in caso di attacco bellico = anche di=20 tipo nucleare. I primi studi portarono alla definizione di quella che = sarebbe=20 diventata la rete Arpanet che pu=F2 essere considerata l'antenata di = Internet.=20 Essa non aveva nessuna autorit=E0 centrale, i nodi che ne facevano parte = erano=20 autonomi ed in grado di operare in una situazione di forte instabilit=E0 = in modo=20 che la rete potesse sopportare anche la distruzione di uno o pi=F9 dei = nodi=20 stessi.

Il = 30 agosto=20 1969 venne installato il primo nodo presso l'Universit=E0 della = California a Los=20 Angeles dotato di un computer "Processore di messaggi di interfaccia = Honeywell=20 numero 1". Nel giro di 3 mesi i nodi divennero quattro: Stanford = Research=20 Institute, Universit=E0 della California a Santa Barbara, Universit=E0 = dello=20 Utah.

Nel corso=20 degli anni '70 molte istituzioni collegarono le loro reti o i loro = computer ad=20 Arpanet e gli utenti iniziarono ad usare la rete principalmente per = scambiarsi a=20 distanza messaggi sotto forma di posta elettronica o per inviare e = ricevere file=20 contenenti dati o programmi.

All'inizio=20 degli anni '80, la rete cominci=F2 ad espandersi in modo massiccio = divenendo a=20 tutti gli effetti una "rete di reti" e utilizzando Arpanet come dorsale = (rete ad=20 alta velocit=E0 che unisce tra loro altre reti locali). Nel 1981 i = computer=20 collegati erano 213.

Rimanevano=20 per=F2 esclusi gli atenei e i centri di ricerca che non avevano rapporti = con il=20 Dipartimento della Difesa degli Stati Uniti. Per potere estendere = l'accesso a=20 tutti gli interessati fu necessario il disimpegno dei militari che nel = 1983=20 crearono una loro rete (Milnet) mentre Arpanet assunse il nome e le=20 caratteristiche di Internet. Nel 1985 vi si collegavano gi=E0 100 reti = diverse,=20 salite poi a 500 nel 1989, saturando completamente la capacit=E0 della = dorsale=20 Arpanet. Fu a questo punto che la NSF (National Science = Foundation),=20 istituita dal governo americano con lo scopo di favorire la crescita di = sistemi=20 di comunicazione tra le universit=E0, decise di creare la nuova dorsale = Nfsnet al=20 fine di sostituire Arpanet che fu infatti definitivamente smantellata = nel=20 1990.

Adesso=20 esistono molte altre dorsali affiancate a Nfsnet ed =E8 cos=EC possibile = il=20 collegamento ad Internet di migliaia di reti (oltre 50.000 nel 1995) e = milioni=20 di singoli computer o HOST (5 = nel 1995=20 saliti a 36 a fine 1998) attraverso vari mezzi trasmissivi come: = cavi in=20 fibra ottica, cavi coassiali, cavi telefonici, satelliti, onde radio. =

Nella=20 tabella seguente viene riepilogato il numero di utenti di Intenet nel = Mondo,=20 negli USA e in Italia negli ultimi anni (i dati sono espressi in = milioni):


Anno

Mondo

USA

Italia

1995

14

10

0,45

1996

38

23


1997

90

40

2,3

1998

142

63


1999

200

80

5

2000

260

105

10



Come si vede=20 da queste cifre in Italia il numero di utenti =E8 stato a lungo molto = basso=20 rispetto al totale ma ultimamente sta crescendo con grande rapidit=E0. = Quindi=20 anche nel nostro paese Internet si sta sempre pi=F9 affermando come = fondamentale=20 mezzo di comunicazione e anche come uno strumento di lavoro efficace e = uno=20 sbocco commerciale di notevole importanza; molte aziende infatti stanno=20 spostando del tutto o in parte la loro attivit=E0 pubblicitaria e = commerciale=20 sulla rete dando impulso al cosiddetto E-commerce (commercio=20 elettronico).


La = caratteristica pi=F9 "bella" e interessante di Internet =E8 che nessuno = ne =E8=20 "proprietario"; tutti gli enti che sono collegati alla rete ne = gestiscono una=20 parte e sono responsabili di una frazione dell'immensa mole di = informazioni in=20 essa contenute. In ultima analisi anche un utente finale (cio=E8 = chiunque di noi)=20 che crea e pubblica delle pagine e le diffonde in rete diviene = "comproprietario"=20 di Internet.

Siamo dunque=20 in presenza di un mezzo di comunicazione moderno, in continua = espansione,=20 diffuso in tutto il Mondo e soprattutto libero. La differenza con le=20 televisioni, i giornali, le case editrici, discografiche e = cinematografiche =E8=20 infatti evidente: esse sono sempre o quasi di propriet=E0 di qualcuno = che,=20 volendo, pu=F2 manipolarle a piacimento in modo da influenzare le = opinioni, i=20 gusti e le scelte degli "utenti" per i propri scopi pi=F9 o meno leciti. = Inoltre=20 con tali mezzi difficilmente si riesce ad avere un ruolo attivo nel = processo di=20 comunicazione, cosa invece spesso possibile con Internet.

Grazie al=20 computer e alle reti =E8 nato dunque questo strumento di comunicazione e = di=20 condivisione delle informazioni totalmente libero con ci=F2 smentendo le = paure di=20 molte persone (espresse anche in tanti libri o film) che temevano che il = calcolatore potesse divenire una sorta di "Grande Fratello" in grado di=20 controllare e condizionare la vita di tutti i cittadini limitandone in = modo=20 inaccettabile la libert=E0. Almeno per ora queste macchine cos=EC = bistrattate sono=20 servite esattamente al contrario: sono infatti uno strumento di = libert=E0 di cui=20 praticamente tutti possono usufruire (almeno nei paesi economicamente=20 avanzati).

Visto che=20 siamo entrati in questi ragionamenti "filosofici", pu=F2 essere = opportuno=20 aggiungere qualche parola su certe "campagne" giornalistiche che, = basandosi=20 sulla sostanziale ignoranza (nel senso di non conoscenza) del fenomeno, = sia da=20 parte del grande pubblico sia, cosa molto pi=F9 grave, da parte dei = giornalisti=20 che le conducono, tendono a criminalizzare Internet dipingendola come la = fonte=20 delle peggiori nefandezze ed arrivando ad affermare che darebbe = addirittura=20 assuefazione come la droga. Questo modo di dipingere la situazione non = fa altro=20 che portare acqua al mulino di chi, a vari livelli, vorrebbe introdurre = vincoli,=20 limitazioni e, alla fine, censure all'interno della rete e riguardo al = suo=20 utilizzo.

Nessuno pu=F2=20 negare che Internet venga usata anche per scopi illeciti, ma questo = avviene in=20 una percentuale irrisoria di casi e comunque non si dovrebbe incolpare = lo=20 strumento per l'uso che ne viene fatto: se un coltello viene usato per = ferire=20 una persona invece che per affettare il prosciutto =E8 colpa del = coltello? O=20 ancora: si deve proibire l'uso dei telefonini visto che sono molto utili = ai=20 personaggi mafiosi per mantenere i loro collegamenti?

Morale:=20 siamo solo in presenza di uno strumento del quale si pu=F2 fare un uso = buono o=20 cattivo ma, in ogni caso, la responsabilit=E0 =E8 di chi lo usa e non = dello=20 strumento.

1.2 I=20 protocolli

Il = funzionamento di Internet =E8 basato su tutta una serie di = protocolli. Per=20 protocollo si intendono la procedura e le regole da seguire nel = trasmettere e=20 ricevere dati su una rete, oppure su una linea di comunicazione, in modo = che gli=20 utenti possano usare macchine elettroniche per scambiare informazioni in = modo=20 ordinato, cos=EC da riprodurre fedelmente al punto di ricezione quello = che =E8 stato=20 inviato dal punto di trasmissione. Il protocollo specifica il formato = dei dati,=20 la temporizzazione dei segnali, la sequenza d'invio e i sistemi per = verificare=20 la presenza di eventuali errori di trasmissione.

Prima di=20 parlare dei protocolli di Internet =E8 opportuno introdurre un concetto = molto=20 importante su cui essi sono basati, quello della differenza tra = client e=20 server. Un server =E8 un computer (con apposito software) che = fornisce=20 informazioni o servizi; un client =E8 uno strumento o programma, di = solito su un=20 computer diverso, che usufruisce delle informazioni o dei servizi.

La = caratteristica fondamentale di tutti i protocolli di Internet =E8 il = loro essere=20 gratuiti e "aperti" cio=E8 in grado di funzionare con la quasi = totalit=E0 delle reti=20 fisiche e in maniera indipendente dall'hardware di un particolare=20 produttore.

Il = protocollo pi=F9 importante =E8 senza dubbio il TCP/IP (Transfer = Control Protocol=20 / Internet Protocol) basato sulla tecnologia a commutazione di = pacchetto.=20 I dati da inviare vengono suddivisi nel = nodo (computer) di partenza in diverse parti (packet) = il cui=20 cammino attraverso la rete pu=F2 seguire differenti percorsi; nel nodo = di arrivo=20 vengono poi ricomposti controllandone anche l'integrit=E0. Un primo = vantaggio di=20 tale metodo consiste nel fatto che non =E8 necessario n=E9 definire n=E9 = conoscere il=20 cammino da compiere; =E8 il software che, lungo la rete, si preoccupa di = instradare i dati evitando le eventuali interruzioni e scegliendo, = comunque, il=20 percorso pi=F9 veloce. Un altro vantaggio =E8 che vengono sfruttati al = meglio i=20 canali trasmissivi che non sono mai interamente occupati da un'unica=20 trasmissione (come avviene ad esempio nelle comunicazioni telefoniche = nelle=20 quali la "linea" tra il chiamante ed il ricevente =E8 occupata per tutta = la durata=20 della telefonata). Quindi se ipotizziamo che il computer A invii = dati al=20 computer B, le due macchine non devono necessariamente essere collegate = in modo=20 diretto; saranno presenti altri "nodi" intermedi attraverso i quali = verranno=20 smistati i pacchetti che, allo scopo, contengono al loro interno = l'indirizzo del=20 nodo di destinazione (oltre che di quello di origine).




Nell'esempio=20 precedente se ipotizziamo che il messaggio inviato da A a B sia = suddiviso in tre=20 pacchetti potremmo avere i seguenti percorsi:


pacchetto 1:=20 A - Z - G - X - B

pacchetto 2:=20 A - C - X - B

pacchetto 3:=20 A - Z - G - H - B


Approfondimenti=20 sul protocollo TCP/IP e sulle reti di computer in generale esulano dagli = scopi=20 di questo corso, si consiglia la consultazione di testi specifici.


Altri=20 protocolli e servizi importanti in Internet sono:


1.3 INTRANET e = EXTRANET

Una Intranet=20 =E8 una rete invariabilmente imperniata sul protocollo TCP/IP e che = spesso=20 utilizza server WEB (vedremo pi=F9 avanti cosa =E8) come punto di = centralizzazione e pubblicazione delle informazioni. Viene realizzata = entro i=20 confini di una azienda o di una qualunque organizzazione (anche una = scuola) ed =E8=20 invisibile o solo parzialmente visibile dall'esterno o perch=E9 non =E8 = collegata=20 con Internet o perch=E9 =E8 collegata tramite un computer firewall = che ha il=20 compito di proteggere i dati dalle intrusioni esterne non desiderate. = Viene=20 utilizzata come struttura per convogliare informazioni utili alle = attivit=E0=20 interne e per facilitarne l'uso da parte degli utenti. In una Intranet = si usano=20 infatti gli stessi strumenti di Internet, come ad esempio i browser = grafici che=20 sono molto "amichevoli" e facili da usare e i programmi per la gestione = della=20 posta elettronica.


Una Extranet=20 =E8 invece l'opposto di Internet, nel senso che =E8 una rete geografica = di ampia=20 portata sempre imperniata sul protocollo TCP/IP che per=F2 viene = utilizzata=20 unicamente per scopi privati e alla quale possono accedere solamente le = persone=20 autorizzate da una determinata azienda che ne =E8 gestore oltre che = proprietaria.=20 Con essa si ha l'esportazione all'esterno dei confini aziendali delle=20 informazioni che sono reperibili sulla Intranet aziendale. La Extranet = comprende=20 le aziende e le persone che si trovano all'esterno del firewall con le = quali=20 l'azienda desidera comunque mantenere uno scambio di informazioni.

1.4 Il WORLD WIDE WEB

Il = World=20 Wide Web (WWW o anche = WEB)=20 rappresenta uno spazio definito all'interno di Internet. Si usa la = parola=20 spazio perch=E9 =E8 difficile descriverlo in altro modo. Infatti = non si=20 tratta di un oggetto fisico e nemmeno di un'entit=E0 riconducibile a = confini=20 geografici, bens=EC =E8 un sistema di presentazione e soprattutto = d'interconnessione=20 tra le informazioni, concepito in modo da favorire il passaggio = automatico da un=20 documento all'altro e consentire la navigazione in un grande mare = informativo, basandosi esclusivamente su ci=F2 che appare sullo schermo = del=20 computer. Il World Wide Web fa parte di Internet ma comprende solo una = parte=20 delle risorse disponibili all'interno di quest'ultima, ecco perch=E9 lo = definiamo=20 come uno degli spazi contenuti all'interno del grande universo = Internet.

Il = progetto=20 WEB =E8 nato nel 1991 presso i1 CERN (Consiglio Europeo per la = Ricerca=20 Nucleare) di Ginevra quale sistema per semplificare lo scambio=20 d'informazioni tra ricercatori scientifici che gi=E0 utilizzavano = Internet per far=20 circolare i loro articoli e pubblicazioni. Il metodo che veniva usato = era=20 infatti basato sul protocollo FTP e presupponeva la conoscenza esatta = della=20 dislocazione fisica delle informazioni da scaricare dalla rete . Era = inoltre=20 essenziale possedere i programmi adatti ad "aprire" i documenti = scaricati che=20 potevano essere scritti con gli strumenti pi=F9 diversi. Infine non era = previsto=20 nessun meccanismo di collegamento automatico tra le varie informazioni, = cosa=20 invece possibile con gli ipertesti, (come vedremo tra breve). =

Nel 1989 Tim=20 Berners-Lee, uno dei ricercatori del CERN, che pu=F2 essere considerato = il "padre"=20 del WWW, stil=F2 un documento in cui si chiedeva di creare un = sistema che=20 rendesse pi=F9 rapida la condivisione d'informazioni, a livello = mondiale, tra le=20 diverse =E9quipe di ricercatori che si occupavano di fisica nucleare per = le alte=20 energie, risolvendo i tre problemi prima evidenziati.


La = proposta=20 prevedeva tre componenti essenziali:


Il = nome=20 stesso del progetto, WWW, sottolinea l'interconnessione tra = informazioni,=20 infatti la traduzione =E8 ragnatela estesa quanto il mondo.

In = sostanza=20 si trattava di trasformare l'enorme capacit=E0 informativa disponibile = su Internet=20 in qualcosa che chiunque potesse usare e consultare con facilit=E0.

Per questo=20 fu necessario definire un nuovo linguaggio universale per la creazione = di=20 documenti con caratteristiche ipertestuali (il linguaggio HTML = oggetto di queste dispense), una = notazione=20 universale di localizzazione degli stessi (gli URL, che illustreremo tra breve), un = nuovo=20 protocollo ottimizzato per il trasferimento di ipertesti = (l'HTTP).=20 L'architettura risultante =E8 di tipo client/server. Il WEB = infatti=20 funziona grazie a dei computer, dotati di apposito software, chiamati = WEB=20 server su cui sono depositati documenti il cui formato e sistema di=20 visualizzazione =E8 conforme alle specifiche definite dal CERN; gli = utenti possono=20 poi usufruire di queste informazioni grazie a dei programmi client = chiamati=20 browser o navigatori.

Il = progetto=20 del CERN non fu subito considerato importante ma alla fine del 1990 = inizi=F2 il=20 lavoro per sviluppare i primi strumenti World Wide Web. Essi si basavano = ancora=20 sull'interfaccia a caratteri tipica di Unix e del DOS, ma tra essi c'era = anche=20 il primo browser che si = chiamava www=20 e inizi=F2 a essere utilizzato su scala ridotta nel marzo del 1991. = Un'altra=20 tappa determinante fu l'installazione di WAIS (Wide Area Information = Servers)=20 per consentire da World Wide Web la ricerca di documenti su scala = mondiale=20 usando come parole chiave i termini contenuti nel testo dei documenti = stessi.=20 Verso la fine del 1991, il CERN annunciando l'esistenza del progetto a = tutti gli=20 scienziati impegnati nella ricerche sulla fisica nucleare per le alte = energie,=20 diede il "battesimo" ufficiale al World Wide Web.

Nel gennaio=20 del 1993 erano gi=E0 operativi 50 server=20 WEB e alla fine dello stesso anno erano diventati 623.

La = progressione negli anni seguenti =E8 stata impressionante:


Periodo

Numero server = WEB

gennaio 1993

50

dicembre 1993

623

giugno 1994

2.738

dicembre 1994

10.022

giugno 1995

23.500

gennaio 1996

90.000

giugno 1999

3.600.000


Riprendiamo=20 la storia del World Wide Web con l'uscita del primo browser grafico per = WWW: si=20 chiamava Viola e funzionava su terminali X-Window cio=E8 su terminali = grafici=20 collegati in rete locale che usano un particolare protocollo per = accedere a un=20 minicomputer dotato del sistema operativo Unix.

Nel 1993=20 l'NCSA (National Center for Supercomputing Applications) diffuse = la prima=20 versione di Mosaic per X-Window sviluppata da Marc Andreesen. Per molto = tempo=20 Mosaic =E8 stato il principale browser per World Wide Web ed il suo = impiego si =E8=20 esteso alle piattaforme pi=F9 diverse, tra cui anche Windows. Dal suo = ceppo sono=20 nati tutti gli altri browser oggi in circolazione.

Nel 1994=20 iniziarono a nascere le prime societ=E0 di software specializzate nella = produzione=20 di prodotti per World Wide Web e per Internet. Una delle pi=F9 = importanti tra=20 queste =E8 la Mosaic Communication Corporation fondata in California = dallo stesso=20 Marc Andreesen che alla fine del 1994 rilasci=F2 un browser per Windows, = Macintosh=20 e X Window che si chiamava Netscape. Il prodotto divenne talmente = popolare da=20 trasferire il proprio nome anche all'azienda medesima, che oggi si = chiama=20 appunto Netscape Communications.

Nel luglio=20 del 1994 il CERN inizi=F2 a trasferire il progetto WEB a un altro ente, = il W3C=20 (World Wide Web Consortium), al quale partecipa anche il MIT=20 (Massachusetts Institute of Technology) e, per l'Europa, l'INRIA=20 (Institut National de Recherche en Informatique et en Automatique -=20 Istituto Nazionale della Ricerca sull'Informatica e = sull'Automazione). Tale=20 ente, libero e senza fini di lucro, =E8 attualmente impegnato in = attivit=E0=20 finalizzate all'evoluzione delle tecnologie e nella definizione degli = standard=20 del WEB.

1.4.1 Ipertesti e Ipermedia

La=20 proposta originariamente avanzata da Tim Berners-Lee descriveva in = dettaglio=20 l'utilit=E0 di avere un sistema che fosse facile da consultare su = qualsiasi tipo=20 di computer o terminale, nel quale fosse possibile eseguire ricerche e = che=20 creasse una connessione il pi=F9 fitta possibile tra documenti pubblici = e privati,=20 al fine di facilitare e incoraggiare la navigazione tra questi ultimi. = L'attuale=20 struttura del World Wide Web rispecchia queste specifiche iniziali ed = =E8 basata=20 su tre componenti essenziali:


Internet

ipertesti

multimediali­t=E0


Con il=20 termine MULTIMEDIALITA' si intende l'uso di una pluralit=E0 di mezzi di=20 comunicazione (MEDIA) per la trasmissione di messaggi ed informazioni; i = pi=F9=20 importanti tra tali mezzi sono: testo scritto, suoni, immagini fisse o = in=20 movimento (filmati e animazioni grafiche).

E' = noto che=20 l'efficacia della trasmissione di un messaggio =E8 legata alla = ridondanza dei=20 mezzi elementari con cui essa =E8 effettuata. Pensiamo ad esempio alla = narrazione,=20 presente nella Bibbia, della consegna dei comandamenti a Mos=E8 che = avviene in=20 mezzo a bufere, lampi, tuoni e forti sensazioni fisiche, oppure alla = differenza=20 che c'=E8 tra leggere il testo di una commedia o vederla rappresentata, = o ancora=20 alla molteplicit=E0 di stimoli con cui vengono bombardati i ragazzi di = oggi nelle=20 discoteche.

Recenti=20 studi dimostrano che, nella mente umana, il ricordo di una comunicazione = persiste tanto pi=F9 quanto maggiore =E8 il numero dei MEDIA impiegati = per=20 trasmetterla e tale persistenza =E8 massima se c'=E8 interazione tra le = parti=20 coinvolte nella comunicazione.




Dal punto di=20 vista informatico la multimedialit=E0 consiste in un insieme di = tecnologie basate=20 su un P.C. con le quali vengono combinati testo, immagini, suoni, = filmati, per=20 formare un unico messaggio ricco di informazioni ed efficace dal punto = di vista=20 della comunicazione. Pi=F9 precisamente pu=F2 essere chiamato SISTEMA = INTERATTIVO=20 MULTIMEDIALE un sistema di elaborazione in grado di utilizzare=20 contemporaneamente almeno tre dei seguenti MEDIA: testo, grafici, = animazioni grafiche, segnali audio, suoni musicali, voce, immagini, = filmati.

La = tecnologia oggi disponibile =E8 comunque gi=E0 in grado di assicurare = l'integrazione=20 di tutti questi media su una stessa macchina; si trovano infatti sul = mercato=20 personal computer equipaggiati con scheda audio, casse acustiche, scheda = video=20 in grado di gestire filmati, microfono, lettore di CD-ROM.

Fra le=20 applicazioni multimediali meritano un'attenzione particolare gli = IPERMEDIA che=20 sono estensioni degli IPERTESTI.

Gli=20 IPERTESTI nascono da un'idea di Ted Nelson che nel 1965 ipotizz=F2 un = sistema=20 software in grado di memorizzare articoli, annotazioni, relazioni ed = altre=20 informazioni testuali nel quale l'utente poteva navigare = liberamente.

Alla base=20 dell'idea di Nelson c'era l'osservazione che l'uomo parla in modo = sequenziale=20 perch=E9 =E8 dotato di un solo tratto vocale, legge e scrive = sequenzialmente perch=E9=20 in tal modo sono organizzati i testi, ma ha una capacit=E0 di pensiero = molto pi=F9=20 sofisticata. Infatti la nostra mente opera spesso per associazione di = idee ed =E8=20 in grado di costruire una vera e propria "rete" di conoscenze molto = complessa in=20 cui molti elementi sono in relazione non lineare tra loro.

Gran parte=20 dei sistemi informatici forniscono strumenti, anche sofisticati, in = grado di=20 gestire e manipolare dati ed informazioni in modo solo sequenziale e = senza=20 alcuna visione integrata. Gli ipertesti invece permettono di stabilire=20 collegamenti e rimandi all'interno dei documenti o fra documenti diversi = creando=20 una organizzazione non lineare del testo che non pu=F2 essere "resa" su = una=20 singola pagina; si aggiunge in pratica una "terza dimensione" al testo = in modo=20 da "entrare dentro" di esso.

Pensiamo ad=20 esempio di avere un testo riguardante Foscolo e leggiamo che in un certo = periodo=20 della sua vita egli fu ammiratore di Napoleone; se vogliamo maggiori=20 informazioni su quest'ultimo dobbiamo cambiare testo e passare ad uno = che lo=20 riguardi. Con un ipertesto invece si pu=F2 passare con un semplice = comando (un=20 "click" del mouse sul nome Napoleone) alle informazioni che ci = interessano.=20 Inoltre possiamo continuare la nostra "navigazione" nel documento in = modo molto=20 libero sfruttando i collegamenti in esso presenti ed arrivando ad = esempio alla=20 Napoli dei primi anni dell'800 passando per Gioacchino Murat, cognato di = Napoleone, che fu re nella citt=E0 in quel periodo.

Tecnicamente=20 gli ipertesti si basano su grafi (reti) di nodi (concetti, idee, = documenti) tra=20 loro collegati e vengono creati con appositi programmi e con tecniche di = cui=20 comunque l'utilizzatore non deve preoccuparsi.

I=20 collegamenti tra i vari documenti avvengono grazie a dei = riferimenti. Il=20 riferimento (detto iperlink o collegamento ipertestuale) = deve=20 essere evidenziato in qualche modo rispetto al resto del testo, ad = esempio con=20 un colore diverso o con la sottilineatura.


Si = parla di=20 IPERMEDIA quando in un ipertesto vengono integrati suoni, immagini, = filmati ed=20 altro ancora.

Nell'esempio=20 precedente si potrebbe pensare di avere a disposizione anche l'immagine=20 digitalizzata di un quadro raffigurante Napoleone oppure un paesaggio = della=20 Napoli di inizio =91800 o, ancora, l'attacco della Terza Sinfonia di = Beethoven che=20 era stata appunto dedicata al Bonaparte.

1.4.2 Come funziona il WWW

Come=20 evidenziato in precedenza gli ipertesti e la multimedialit=E0 (e quindi = gli=20 ipermedia) sono componenti essenziali del WWW che, non a caso, viene = anche=20 definito iperspazio.

In = essi=20 l'elemento fondamentale =E8 l'iperlink attraverso il quale si pu=F2 = passare ad un=20 altro documento che pu=F2 trovarsi sul nostro computer, sul server a cui = siamo gi=E0=20 collegati o addirittura su un altro server situato in qualunque parte = del mondo=20 (purch=E9 collegato ad Internet). Il salto pu=F2 comunque anche avvenire = verso=20 un'altra sezione dello stesso documento in cui gi=E0 ci troviamo.

Se = il=20 sistema ipertestuale =E8 ben fatto il documento in cui si arriva = dovrebbe=20 contenere un collegamento a quello di provenienza cos=EC che sia sempre = possibile=20 ritornare sui propri passi. Poich=E9 nel mondo WWW questo viene fatto di = rado, =E8=20 compito del browser compensare questa mancanza tenendo traccia del = percorso e=20 permettendo in qualsiasi momento di muoversi a ritroso (tasto = BACK).=20 Parlando di documenti multimediali il collegamento pu=F2 portarci in = ogni genere=20 di contenitore e produrre la risposta pi=F9 diversa. Per il momento, una = buona=20 parte dei collegamenti che si trovano sul World Wide Web rimandano a = pagine di=20 testo oppure a elementi grafici statici; sempre pi=F9 spesso per=F2 si = hanno=20 connessioni con veri e propri programmi scritti con linguaggi come il = PERL o=20 JAVA che permettono di realizzare e visualizzare pagine WEB = "dinamiche".

L'elemento=20 cardine per il funzionamen­to del World Wide Web =E8 l'HTTP = (Hypertext=20 Transfer Protocol) che =E8 un protocollo client-server, basato su TCP/IP per lo=20 scambio dei documenti ipertestuali. Si tratta di un protocollo = molto=20 semplice che regola l'interazione tra il nostro browser e il particolare = server=20 con cui quest'ultimo di volta in volta si connette a seguito di una = nostra=20 richiesta diretta oppure seguendo un collegamento ipertestuale.


La = transazione tra queste due entit=E0 si svolge in quattro fasi:


connessione - richiesta del documento - risposta =96=20 disconnessione


Le = prime tre=20 sono di solito segnalate nella finestra del browser con scritte che ci = spiegano=20 cosa sta succedendo. Nella richiesta il browser deve specificare al = server quale=20 protocollo deve essere utilizzato (HTTP oppure FTP o altro ancora) in = quanto lo=20 stesso browser pu=F2 essere utilizzato per collegarsi anche con server = che non=20 fanno parte del World Wide Web e che offrono servizi Internet pi=F9 = tradizionali,=20 come appunto lo scaricamento di file attraverso il protocollo FTP.

Dopo che la=20 pagina =E8 giunta sulla nostra macchina. la connessione col server = s'interrompe e=20 va ripresa quando si chiede di passare a una seconda pagina sul medesimo = server=20 oppure a un secondo server. Questo talvolta vale anche per il percorso a = ritroso, dove si chiede di visualizzare una seconda volta una pagina che = avevamo=20 gi=E0 visto.

L'eventuale=20 presenza di grafica rende questo andirivieni abbastanza lento poich=E9 = tutte le=20 volte gli elementi grafici (spesso "grandi" diversi Kbyte o Mbyte) = devono essere=20 scaricati di nuovo. Una soluzione pratica per eliminare questo = inconveniente=20 consiste nel creare una cache (memoria di transito) sul disco = della=20 nostra macchina o sul server che fa da gateway (porta di accesso = verso=20 Internet). Cos=EC, ogni volta che chiediamo una pagina gi=E0 vista, la = caricheremo=20 dal nostro disco locale oppure dal disco del server vicino anzich=E9 = richiamarla=20 dalla rete.

Un = sistema=20 per non dover scaricare continuamente la stessa pagina consiste nel = salvarla=20 sulla propria macchina come file a s=E9 stante e nel richiamarla = dall'interno del=20 browser come si richiamerebbe un qualsiasi documento dall'interno di un = word=20 processor (tra l'altro, alcuni programmi di elaborazione dei testi = permettono di=20 visualizzare e modificare queste pagine scaricate in locale senza dover=20 ricorrere al browser).

1.5 = Gli=20 indirizzi delle risorse di Internet

1.5.1 Indirizzi IP e URL (o URI)

Abbiamo=20 visto come, con il protocollo HTTP, si possa accedere alle informazioni = presenti=20 in Internet; questo per=F2 =E8 possibile solo se si conosce = l'indirizzo della=20 risorsa (pagina WEB o altro) a cui si vuole fare riferimento e cio=E8 il = suo=20 URL (Uniform Resource Locator) o URI (Uniform Resource = Identifier).

Ogni URL=20 della rete identifica una certa risorsa e non possono esistere due = risorse=20 diverse con stesso indirizzo.

Spesso si=20 dice anche che un URL identifica un sito Internet dove con = sito si=20 intende la sezione del disco di un particolare computer nella quale = risiedono i=20 documenti WEB; il significato viene per=F2 solitamente esteso fino a = comprendere=20 anche la macchina nel suo complesso e l'organizzazione che la usa per = pubblicare=20 le proprie informazioni in Internet.

Un = URL =E8 una=20 stringa che inizia con il nome del protocollo da utilizzare per reperire = la=20 risorsa (esempio http://). Per illustrare completamente la sua struttura = occorre=20 per=F2 fare prima riferimento al modo in cui i computer sono = identificati in=20 Internet (o in qualsiasi rete basata su protocollo TCP/IP): ogni = computer =E8=20 individuato univocamente da un indirizzo IP o IP-address = composto=20 da quattro ottetti di bit (cio=E8 da quattro gruppi di 8 bit).


Ad = esempio=20 il server WEB della casa editrice Mondadori =E8 su un computer che ha=20 indirizzo:


11000010.10001100.11100000.10100001


Come si vede=20 l'IP-address =E8 espresso con quattro numeri binari; ci=F2 si giustifica = in quanto=20 sappiamo benissimo che il linguaggio dei computer =E8 il sistema binario = costituito dai soli simboli 0 e 1. Per comodit=E0 per=F2 gli indirizzi = IP vengono=20 sempre indicati "tradotti" in decimale e cos=EC il precedente = diventa:


194.140.224.161

Gli indirizzi IP sono suddivisi in classi e ne esistono = alcuni che=20 sono riservati per usi speciali (ad esempio quelli che iniziano con = 192.168 e=20 che sono usati per le reti private locali); questi argomenti non vengono = per=F2=20 approfonditi in questa sede.

L'assegnazione degli indirizzi di rete viene curata da = una=20 organizzazione senza fini di lucro, l'ICANN (Internet Corporation for = Assigned Names and Numbers, www.icann.org), la quale a sua volta = delega ad=20 enti nazionali la gestione degli indirizzi di rete nei vari paesi. In = Italia=20 tale gestione =E8 stata curata fino al 1998 dal GARR (Gruppo = Armonizzazione=20 delle Reti di Ricerca) e adesso dalla Registration Authority=20 italiana, che fa capo al CNR (Consiglio Nazionale delle = Ricerche), in=20 base alle indicazioni fornite dalla Naming Authority italiana = (che opera=20 in stretto rapporto con il Ministero delle poste e delle = telecomunicazioni).=20 Maggiori dettagli sull'assegnazione degli indirizzi IP si possono = trovare=20 all'indirizzo = http://www.nic.it .=20

Un difetto del complesso, ma efficiente, metodo di = indirizzamento=20 degli Host di Internet =E8 che gli indirizzi sono limitati e con gli = attuali ritmi=20 di crescita della rete si corre seriamente il rischio di esaurire entro = poco=20 tempo tutti gli indirizzi disponibili. Per questa ragione =E8 stata = sviluppata=20 recentemente una versione evoluta del protocollo IP, denominata "IP Next = Generation" o "IPV6", basata su un sistema di indirizzamento a 128 bit = che=20 assicurer=E0 un massiccio incremento nella disponibilit=E0 di indirizzi = di rete.

L'indirizzo numerico comunque non =E8 utilizzabile = comodamente e non=20 =E8 facile da ricordare; sarebbe molto meglio poter individuare i vari = computer=20 con un nome. Questo =E8 possibile grazie all'introduzione nella rete del = DNS=20 (Domain Name Server).

Il DNS =E8 il meccanismo con cui si riesce a indirizzare = le risorse=20 su Internet utilizzando una notazione mnemonica, allettante anche dal = punto di=20 vista commerciale, garantendo al tempo stesso una individuazione univoca = della=20 risorsa sulla rete.

Attraverso il DNS ogni host di Internet pu=F2 essere = dotato di un=20 nome composto da stringhe di caratteri. Tali stringhe, a differenza=20 dell'indirizzo numerico, possono essere di lunghezza illimitata.

L'indirizzo del server della Mondadori diviene dunque=20 www.mondadori.com che =E8 senz'altro pi=F9 comodo da utilizzare e = da=20 ricordare (oltre che pi=F9 gradito alla stessa azienda Mondadori).

Come si pu=F2 vedere, anche i nomi mnemonici sono = sequenze di=20 simboli separati da punti e questo rispecchia la struttura gerarchica = del DNS.=20 Esso infatti suddivide l'intera rete in settori, denominati = domini, a=20 loro volta divisi in sottodomini, e cos=EC via per vari livelli; = ogni=20 sottodominio fa parte del dominio gerarchicamente superiore: all'ultimo = livello=20 della gerarchia ci sono i singoli computer.

L'identificativo di un host riassume le varie gerarchie = di domini=20 a cui appartiene: illustriamo il concetto servendoci di un altro esempio = di nome=20 mnemonico:


www.prog-aut.itis.biella.it


in realt=E0 il nome del computer =E8 solo www, il = resto della=20 stringa serve ad indicare chi ha la responsabilit=E0 di tale computer e = del suo=20 nome. Scorrendo la stringa da destra a sinistra troviamo it che = =E8 il=20 dominio di primo livello e sta ad indicare che il computer si = trova in=20 una gerarchia facente capo ad una autorit=E0 nazionale italiana = (it st=E0 per=20 Italy). Successivamente abbiamo biella che =E8=20 un sottodominio di primo livello ed indica che l'autorit=E0 facente capo = alla citt=E0 di=20 Biella ha ricevuto il permesso da quella immediatamente superiore (in = questo da=20 quella del dominio it) di poter a sua volta concedere sottodomini = ad=20 altre autorit=E0 sottostanti o nomi ai propri computer. Continuando = troviamo=20 itis che =E8 un=20 sottodominio di secondo livello che viene gestito da una autorit=E0 per = questo delegata=20 da quella di livello superiore (in questo caso biella). Ancora = pi=F9 a=20 sinistra troviamo prog-aut che =E8 un sottodominio di terzo = livello=20 gestito da una autorit=E0 gerarchicamente sottostante a quella che = gestisce il=20 sottodominio itis. Questa autorit=E0 ha deciso di chiamare www = il=20 computer che contiene la pagina iniziale (home page) del = sito in=20 questione.

Naturalmente non tutti gli identificativi sono cos=EC = articolati; ad=20 esempio in:


www.linux.it


abbiamo solo il sottodominio di primo livello = linux, e=20 l'autorit=E0 che lo gestisce ha deciso di chiamare www il = computer che=20 ospita la home page del sito.

Il numero e le sigle dei domini di primo livello, o = domini=20 principali, sono fissati a livello internazionale e vengono gestiti = da=20 appositi organismi. Nell'ambito di ognuno di tali domini possono essere = creati=20 un numero qualsiasi di sottodomini rispettando per=F2 le regole = stabilite da ogni=20 autorit=E0 nazionale di gestione del DNS.

Quando il DNS =E8 stato sviluppato, Internet era = diffusa, salvo rare=20 eccezioni, solo negli Stati Uniti e la rete venne suddivisa in sei = domini=20 principali o gTld (General Top Level Domain), tuttora = esistenti,=20 le cui sigle caratterizzano il tipo di ente o organizzazione che = possiede un=20 certo sito:


EDU per gli=20 enti di ricerca e universit=E0

COM per le=20 organizzazioni commerciali

GOV per gli=20 enti governativi

MIL per gli=20 enti militari

NET per gli=20 enti di gestione della rete

ORG per gli=20 enti diversi (volontariato, associazioni senza fini di lucro)


Quando la rete ha cominciato a diffondersi a livello=20 internazionale sono stati creati altri domini, chiamati regionali o = ccTld=20 (Country Code Tld), uno per ogni nazione, ad esempio:


IT = per=20 l'Italia

UK = per=20 l'Inghilterra

FR = per la=20 Francia

DE = per la=20 Germania

Talvolta=20 anche negli Stati Uniti si usano suffissi geografici.


Nel luglio=20 del 2000 l'ICANN ha aumentato il numero dei gTld introducendone altri = sette:


AERO=20 aeronautica

BIZ=20 affari

COOP=20 cooperative

INFO=20 informazione

MUSEUM=20 musei

NAME pagine=20 personali

PRO=20 professionisti



Vediamo=20 altri esempi di URL completi:


http://www.tin.it/ =E8 l'indirizzo del = sito della=20 Telecom Italia Net

http://www.deejay.it/=20 =E8 l'indirizzo del sito di Radio Deejay

http://www.cambridge.edu/=20 =E8 l'indirizzo del sito dell'universit=E0 di Cambridge negli USA

http://www.fbi.gov/=20 =E8 l'indirizzo del sito dell'FBI

http://www.ci.berkeley.ca.us/ =E8 = l'indirizzo della=20 rete civica della citt=E0 di Berkeley in California.


Dal punto di vista tecnico il DNS =E8 costituito da un = sistema di=20 archivi distribuiti nella rete e collegati tra loro chiamati "name=20 server". Essi svolgono la funzione di tradurre i nomi in indirizzi = numerici=20 (tecnicamente si parla di "risoluzione dei nomi") per conto degli host o = di=20 altri name server. Infatti la comunicazione effettiva tra i computer = della rete=20 avviene sempre e solo attraverso gli indirizzi IP numerici.

Quando un computer deve collegarsi ad un altro, con nome = ad=20 esempio www.linux.it, esso interroga il proprio name server locale per = risolvere=20 il nome in questione (=E8 per questo che quando ci abboniamo con un = fornitore di=20 servizio, o "provider" per navigare in Internet, fra i parametri che ci = vengono=20 forniti per impostare il browser c'=E8 anche l'indirizzo IP di un server = DNS).

Nel caso il name server non sia in grado di risolvere il = nome=20 richiesto, chiede "aiuto" ad un altro server, detto name server di = primo=20 livello la cui scelta =E8 determinata dal dominio principale = dell'indirizzo in=20 questione. Questo server, a sua volta, pu=F2 non essere in grado di = rispondere e=20 ricorre quindi ad altri name server (di livello inferiore). Il = procedimento=20 continua fino al reperimento dell'indirizzo del computer cercato, se = esiste.

Nello svolgere questo compito il name server memorizza = gli=20 indirizzi che ha conosciuto in modo da rispondere pi=F9 velocemente a = successive=20 richieste.

Grazie a questo meccanismo il DNS =E8 sempre aggiornato = in modo=20 automatico e non =E8 necessaria alcuna autorit=E0 centrale che memorizzi = nomi ed=20 indirizzi dei milioni di computer collegati ad Internet.

Come avviene per gli indirizzi IP, la gestione del DNS = in un=20 dominio di primo livello viene affidata a degli enti specifici. Questi = enti=20 hanno il compito di assegnare i nomi di sottodominio, controllando che = non ci=20 siano omonimie, e di gestire l'archivio principale del dominio di cui = sono=20 responsabili.


In Italia l'ente che si occupa dell'assegnazione dei = nomi di=20 dominio e della gestione dei registri e del nameserver primario per il = ccTld .it=20 =E8 ancora la Registration Authority sotto il controllo della Naming = Authority che=20 stabilisce procedure operative e regolamento in base al quale opera la = RA.

Negli Stati Uniti la gestione dei nomi =E8 affidata a = delle=20 compagnie private sotto il controllo della gi=E0 citata ICANN.
I = servizi=20 forniti dalla RA sono rivolti ai provider, cio=E8 a quelle = organizzazioni=20 che registrano domini per conto terzi (ad esempio http://www.register.it/ o http://www.cyb.it/) e ai = mantainer, cio=E0 a=20 qyelle persone o organizzazioni che gestiscono autonomamente il proprio = sito=20 senza rivolgersi ad un provider esterno.

Per concludere notiamo che, usando i browser pi=F9 = recenti, possiamo=20 scrivere gli URL tralasciando il protocollo (ammesso che sia http) in = quanto=20 viene assegnato automaticamente dal programma come http://; inoltre = nessuno=20 vieta l'uso di indirizzi numerici per fare riferimento ad un certo sito = anche se=20 =E8 molto pi=F9 difficile ricordarli; ad esempio per collegarsi al sito = dell'FBI si=20 potrebbe anche digitare l'URL: http://199.170.0.150/

1.5.2 URL con percorsi e nomi di file

Gli esempi=20 visti sinora si riferiscono sempre all'indirizzo della home page dei = siti=20 considerati; se invece vogliamo visualizzare con il nostro browser una = pagina=20 particolare, contenuta in una certa directory del server, dovremo = aggiungere=20 all'URL il percorso completo delle directory ed il nome del file che = contiene la=20 pagina desiderata.

Ad = esempio:=20 http://www.meteo.fr/tpsreel/e_tpsre.html fa riferimento alla = pagina=20 contenuta nel file di nome e_tpsre.html nella directory = tpsreel=20 del server www del sito meteo della Francia (=E8 una pagina che = contiene le=20 immagini dell'europa inviate dal satellite per le previsioni meteo). =

Si = noti come=20 nell'indicazione del percorso si usa il simbolo "/" per indicare le=20 sottodirectory, anzich=E9 il simbolo "\" come si fa, ad esempio, in = MS-DOS.

L'importante=20 comunque =E8 conoscere l'URL della pagina iniziale di un sito in quanto = da essa,=20 seguendo i vari collegamenti (iperlink), sar=E0 possibile = rintracciare le=20 altre pagine che fanno parte del sito.

1.5.3 URL con altri protocolli

Gli URL=20 permettono di individuare risorse Internet generiche e non solo siti WEB = come=20 negli esempi visti sinora; =E8 infatti possibile inserire altri = protocolli al=20 posto di http:// come ad esempio ftp://. Questo =E8 il protocollo = usato per=20 il trasferimento di file da un computer ad un altro. Di solito i siti = FTP si=20 trovano su macchine che si chiamano ftp (e non www) e allora i loro URL = saranno=20 simili al seguente:


ftp://ftp.winsite.com/=20


Altri=20 protocolli come gopher://, mailto:, news: sono molto meno usati.=20 Importante =E8 invece la stringa file:// (usata al posto del = protocollo=20 anche se non =E8 un protocollo); con essa si vuole fare riferimento a = dei file=20 contenuti sul computer locale, cio=E8 quello che stiamo usando = con il=20 browser per "navigare" in Internet. Ad esempio l'URL=20 file://esempi/indice.htm ci collega con la pagina contenuta nel = file di=20 nome indice.htm, che =E8 nella directory esempi del nostro = computer.

1.6 Collegarsi = a Internet=20 da casa

Per=20 collegarsi a Internet sono necessari (oltre naturalmente ad un computer) = un=20 modem ed un abbonamento ad un ISP (Internet Service Provider). Un = ISP =E8=20 una azienda che fornisce a pagamento o, ultimamente anche gratis, la = possibilit=E0=20 di collegarsi alla rete, di avere una o pi=F9 caselle di posta = elettronica e,=20 talvolta, anche un p=F2 di spazio sul proprio server per pubblicare = pagine in=20 Internet. In Italia possiamo citare tra i provider pi=F9 noti TIN = (Telecom=20 Italia Net), Libero, Tiscali.

Si = deve=20 inoltre avere il protocollo TCP/IP sul proprio computer ed anche il = protocollo=20 PPP (Point to Point Protocol). Questo non =E8 un problema visto = che questi=20 protocolli sono forniti a corredo di tutti i sistemi operativi pi=F9 = diffusi per=20 Personal Computer.

Il = protocollo PPP consente di usare i protocolli Internet (IP), normalmente = utilizzati su connessioni Ethernet, cio=E8 in reti locali, su = linee seriali=20 e quindi per i collegamenti via modem attraverso la porta seriale del = personal=20 computer (RS-232)..

Il MODEM=20 (MODulatore DEModulatore), =E8 una periferica che permette il = collegamento tra=20 computer fisicamente distanti tra loro usando le normali linee = telefoniche in=20 quanto trasforma (in un modo che qui non approfondiamo) i segnali = digitali=20 (bit), propri degli elaboratori, in segnali analogici adatti a essere=20 trasportati su tali linee (originariamente progettate per la = comunicazione=20 vocale).

Se = due=20 computer distanti (chiamiamoli C1 e C2) si devono scambiare informazioni = saranno=20 necessari due modem (rispettivamente M1 e M2) uno per ogni elaboratore = collegati=20 alla linea telefonica; se il computer C1 invia un messaggio questo = sar=E0=20 convertito (modulato) in analogico da M1 e instradato sulla linea; = all'arrivo=20 presso C2 il messaggio viene riconvertito (demodulato) in digitale da = M2. Se =E8=20 C2 a inviare un messaggio i ruoli dei dispositivi sono naturalmente=20 invertiti.

I = modem si=20 classificano secondo la loro velocit=E0, misurata in base ai bit al = secondo (bps)=20 che riescono ad inviare o ricevere; gli apparecchi di ultima generazione = riescono ad arrivare a 55.600 bps ed i loro prezzi sono abbordabili = (molto sotto=20 al mezzo milione).

Da = qualche=20 tempo =E8 possibile collegarsi al provider anche con la linea ISDN, = usufruendo di=20 una velocit=E0 di 64.000 o 128.000 bps, grazie ad un dispositivo = chiamato modem=20 ISDN . In questo caso per=F2 il nome non =E8 corretto in quanto si = tratta solo=20 di un adattatore e non di un vero e proprio modem visto che la linea = ISDN, pur=20 sfruttando i normali cavi telefonici, =E8 digitale e non analogica. = Anche i prezzi=20 degli adattatori ISDN sono ormai molto bassi e paragonabili a quelli dei = modem.=20

A = proposito=20 di costi =E8 bene ricordare come sia fondamentale abbonarsi ad un ISP = che abbia=20 almeno un POP (Point Of Presence), cio=E8 un server a cui = collegarsi via=20 modem e telefono, nella propria citt=E0 in modo da usufruire della = tariffa=20 telefonica urbana; diversamente la "navigazione nell'iperspazio" = potrebbe=20 causare forti aumenti della bolletta telefonica.


2 IL LINGUAGGIO HTML

2.1=20 Introduzione

I = documenti=20 presenti nel WEB hanno un formato particolare e usano al proprio interno = una=20 serie di codici che dicono al browser come visualizzare il testo e le = immagini=20 che vi sono associate. Il pi=F9 diffuso tra i linguaggi usati per questa = codifica=20 =E8 l'HTML (Hypertext Markup Language - linguaggio per la codifica = degli=20 ipertesti attraverso marcatori) che costituisce una versione = semplificata=20 dell'SGML (Standard Generalized Markup Language - linguaggio di = codifica=20 standard e generalizzato).

L'SGML =E8=20 stato sviluppato dall'organizzazione internazionale per gli standard nel = 1986=20 per definire linguaggi markup progettati per vari scopi diversi. Ogni = linguaggio=20 della famiglia SGML deve rispettare certi requisiti fra i quali quello = che tutti=20 i simboli siano definiti e descritti usando un DTD (Document Type=20 Definition); il DTD per l'HTML definisce i marcatori disponibili e = il modo=20 di usarli.

L'HTML non =E8=20 un linguaggio di programmazione e un documento scritto in HTML non =E8=20 assolutamente un programma cio=E8 una serie di istruzioni da eseguire su = dei dati.=20 Piuttosto il documento HTML =E8 esso stesso un dato ed il linguaggio = definisce le=20 regole per l'inserimento di particolari TAG (marcatori) che = indicano ai=20 browser quale struttura avr=E0 la pagina da visualizzare.

La = funzione=20 principale dell'HTML =E8 quella di classificare le varie parti che = compongono un=20 documento: si pu=F2 indicare quale parte rappresenta il titolo, in quali = posizioni=20 inserire delle immagini, quali parti enfatizzare e cos=EC via. Sono = presenti anche=20 alcuni comandi di formattazione e layout ma queste funzioni riguardanti=20 l'aspetto esteriore del documento sono secondarie rispetto alla = descrizione=20 della struttura generale dei suoi contenuti.

Un = aspetto=20 importantissimo dell'HTML =E8 che =E8 indipendente da qualsiasi = piattaforma Hardware=20 e software: in altre parole una volta scritto un documento con gli = elementi=20 standard di HTML, si pu=F2 essere sicuri che la pagina verr=E0 = visualizzata nello=20 stesso modo con qualsiasi browser su qualsiasi computer. Inoltre il suo = utilizzo=20 =E8 libero, non ci sono licenze n=E9 aggiornamenti da comprare e non si = dipende da=20 nessuna azienda produttrice di software.

2.2=20 Storia dell'HTML

L'HTML si=20 sta evolvendo rapidamente e ne sono state gi=E0 rilasciate alcune = versioni. E'=20 stato ideato nel 1989 insieme al WWW da Tim Berners Lee. Attualmente la=20 definizione degli standard dell'HTML (oltre che di quelli dell'HTTP e di = altre=20 tecnologie WEB) =E8 sotto la responsabilit=E0 del consorzio W3C.

La = prima=20 versione dell'HTML si chiamava HTML (senza numero di versione) e non ha = avuto=20 una grande diffusione perch=E9 quando =E8 apparsa esistevano pochissimi = server WEB.=20 E' comunque servita da base per le successive versioni che hanno sempre=20 conservato la compatibilit=E0 all'indietro (i documenti scritti con la = prima=20 versione possono essere tranquillamente usati con le versioni pi=F9 = recenti).

Nel 1993=20 Dave Ragget ha sviluppato una versione aggiornata di HTML, chiamata = HTML+ che=20 non =E8 mai diventato uno standard ufficiale ma le cui innovazioni sono = state=20 incorporate nella versione 2.0.

Alla fine=20 del 1994 =E8 stato approvato lo standard HTML 2.0, pi=F9 affidabile e un = po' pi=F9=20 semplice delle versioni precedenti. Esso ha conosciuto una grande = diffusione=20 anche se =E8 stato criticato dagli sviluppatori di siti WEB perch=E9 = permetteva=20 l'utilizzo di un numero troppo esiguo di comandi di formattazione del = documento.=20

Per questo=20 motivo, e anche per la lentezza con la quale il W3C approvava i nuovi = standard,=20 le societ=E0 produttrici di programmi browser (principalmente Netscape e = Microsoft) hanno iniziato a supportare tag non standard e non approvati = dal W3C,=20 conosciuti come estensioni per l'HTML. Naturalmente ogni browser = gestiva=20 le proprie estensioni e i programmi rimasti "fedeli" agli standard non = erano in=20 grado di interpretare i nuovi tag.

Nel 1995 =E8=20 stato redatto lo standard HTML 3.0 che per=F2 prevedeva troppi = cambiamenti=20 rispetto alla versione 2.0 e quindi non =E8 stato preso in = considerazione dagli=20 sviluppatori.

Migliore=20 fortuna ha avuto invece la versione HTML 3.2 del 1996 che era = maggiormente=20 compatibile con la versione 2.0 e comprendeva anche le estensioni usate = dai=20 browser pi=F9 diffusi (NETSCAPE NAVIGATOR e INTERNET EXPLORER di = Microsoft).

La = versione=20 pi=F9 recente di HTML =E8 la 4.0 che rispetto alla 3.2 incorpora alcune = funzioni che=20 erano estensioni per la 3.2, gestisce un insieme di caratteri (chiamato = UNICODE)=20 pi=F9 esteso del precedente (chiamato LATIN-1) ed anche un nuovo = marcatore per gli=20 oggetti multimediali.

Occorre=20 comunque osservare che la versione di HTML supportata sicuramente anche = dai=20 browser di minore diffusione =E8 la 3.2.

2.3 Aspetto di un file = HTML

Le = pagine=20 scritte in HTML sono costituite da puro testo in formato ASCII, = non=20 contengono informazioni specifiche di una certa piattaforma o di un = certo=20 programma e possono essere lette o modificate con qualsiasi editor di = testo (ad=20 esempio EDIT del MS-DOS o vi di LINUX). Tali pagine sono = chiamate=20 anche sorgenti HTML per distinguerle dalle stesse pagine = visualizzate con=20 un browser.

Al = loro=20 interno si trovano due tipi di oggetti:


il=20 testo del documento

i = TAG=20 HTML


Un = tag (o=20 elemento HTML) =E8 un insieme di simboli con un significato = speciale:=20 inizia con il simbolo di minore (<), continua con una parola = riservata=20 e termina con il segno di maggiore (>). I seguenti sono esempi di = tag:


<html>=20 </B> <BODY> <P>


Nei tag non=20 si ha distinzione tra lettere maiuscole e minuscole, quindi = <BODY>,=20 <body>, <Body> rappresentano lo stesso tag.

In = questo=20 testo gli elementi del linguaggio HTML saranno quasi sempre indicati in=20 maiuscolo all'unico scopo di favorirne una migliore individuazione = all'interno=20 dei sorgenti, anche se sarebbe preferibile l'uso dei caratteri minuscoli = in=20 quanto questo diviene obbligatorio in alcune evoluzioni dell HTML come=20 l'XHTML (del quale parleremo brevemente nell'ultimo = capitolo).

Esistono due=20 tipi di tag: quelli di inizio con i quali si attivano certe opzioni o = funzioni,=20 e quelli di fine con i quali si disattivano le stesse opzioni e = funzioni.=20 Compreso tra essi c'=E8 il contenuto dell'elemento HTML = contrassegnato dai=20 tag in questione.

I = marcatori=20 di fine si scrivono nello stesso modo di quelli di inizio eccetto per il = fatto=20 che dopo il simbolo di minore (<) si ha sempre il simbolo della barra = (/). Se=20 ad esempio scriviamo nel documento HTML:


<B>Questo=20 testo sar=E0 in grassetto</B>


il = testo=20 compreso tra i due tag, (cio=E8 il contenuto di quell'elemento) sar=E0 = visualizzato=20 in grassetto (B sta per Bold cio=E8, appunto, grassetto).

Esistono=20 anche degli elementi che non prevedono obbligatoriamente il tag di fine = come=20 <P>, che indica l'inizio dell'elemento paragrafo ed il cui = contenuto =E8 il=20 testo del paragrafo stesso. Inoltre ci sono degli elementi senza neanche = il=20 contenuto come <HR>, che provoca l'inserimento nella pagina di una = riga=20 orizzontale.

Alcuni tag=20 prevedono anche degli attributi, cio=E8 degli elementi opzionali = che=20 definiscono le modalit=E0 di funzionamento di quell'elemento HTML.

La = cosa pi=F9=20 importante da capire riguardo ai tag =E8 che essi non vengono mai = visualizzati dal=20 browser; viene invece visualizzato il loro "effetto". Inoltre se qualche = tag =E8=20 scritto male, contiene errori di sintassi o non =E8 riconosciuto per = qualsiasi=20 altro motivo, viene semplicemente ignorato dal browser che non da = nessuna=20 segnalazione di errore al riguardo.

2.4=20 Strumenti per la creazione di documenti HTML

Per scrivere=20 un documento in linguaggio HTML, come detto, si pu=F2 usare un = comunissimo e=20 semplicissimo editor di testo. Esistono per=F2 anche altri strumenti = pi=F9=20 sofisticati che si suddividono fondamentalmente in due categorie:


  • editor=20 studiati appositamente per la scrittura di codice HTML ma a = formattazione=20 differita (il risultato della formattazione del documento =E8 visibile = solo=20 successivamente usando un browser).

  • editor a=20 formattazione immediata (il risultato finale della formattazione del = documento=20 =E8 visibile immediatamente) che creano automaticamente il codice = HTML;


Nel primo=20 caso si tratta di editor con delle funzioni aggiuntive per la scrittura = degli=20 elementi HTML, per il controllo ortografico, per l'ordinamento del testo = ed=20 altre ancora.

Nel secondo=20 caso si hanno strumenti come NETSCAPE COMPOSER o MICROSOFT FRONTPAGE che = permettono di comporre la pagina partendo dal suo aspetto e generano=20 automaticamente il sorgente non richiedendo quindi alcuna conoscenza del = linguaggio HTML. Questi programmi sono detti anche editor WYSIWYG = (What You See Is What You Get, ci=F2 che vedi =E8 ci=F2 che = ottieni) ed=20 il loro uso pu=F2 apparire conveniente tanto da far ritenere superfluo = un corso di=20 HTML. I fautori di tali strumenti affermano tra l'altro che con essi i = creatori=20 di pagine WEB sono sollevati dalla necessit=E0 di imparare comandi molto = complicati e che la produttivit=E0 e la qualit=E0 del lavoro sono = migliori. Si=20 devono per=F2 anche considerare dei punti a sfavore non trascurabili: = intanto le=20 regole dell'HTML sono molto semplici e lineari; inoltre se si conosce il = linguaggio si hanno maggiori possibilit=E0 di correggere errori e = risolvere=20 problemi sfruttando a pieno le sue potenzialit=E0 e si pu=F2 intervenire = sui propri=20 documenti da qualsiasi computer e con qualunque editor; infine il codice = HTML=20 creato automaticamente =E8 solitamente di cattiva qualit=E0, non = efficiente, male=20 organizzato e pu=F2 contenere elementi incompatibili con gli standard = ufficiali=20 del linguaggio.

Quindi =E8=20 utile conoscere l'HTML e per la creazione di documenti non =E8 = consigliabile l'uso=20 di programmi troppo sofisticati; bastano i semplici editor come EDIT del = MS-DOS,=20 vi di LINUX, NOTEPAD di WINDOWS o al massimo gli editor specifici per = l'HTML.=20

2.5 Struttura = di un=20 documento HTML

La = struttura=20 generale di un documento HTML viene definita con i seguenti elementi=20 fondamentali:


html

head

body

title


Il = solo=20 elemento <title> =E8 obbligatorio in quanto gli altri, se assenti, = vengono=20 automaticamente inseriti da molti browser; =E8 comunque buona norma = includere=20 tutti e quattro questi elementi in qualsiasi documento HTML.

All'inizio=20 del sorgente HTML si deve inoltre inserire una riga che specifichi quale = =E8 la=20 versione di HTML utilizzata. Per fare questo si usa la dichiarazione=20 <!DOCTYPE> che non =E8 un tag HTML ma una entit=E0 SGML.

Molti=20 browser gestiscono tranquillamente anche documenti WEB mancanti di tale = elemento=20 ma =E8 comunque opportuno inserirlo per evitare incompatibilit=E0.

Per la=20 versione HTML 3.2 la linea da scrivere =E8 la seguente (vengono omessi i = dettagli=20 sul significato dei singoli elementi di tale dichiarazione):

<!DOCTYPE=20 HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">


Essendo essa=20 abbastanza complessa e da ricordare pu=F2 essere conveniente crearsi un = modello di=20 documento HTML, che includa solo tale linea, da riempire di volta in = volta con=20 il contenuto desiderato.

2.5.1 L'elemento HTML

Lo = scopo di=20 questo elemento =E8 quello di indicare che il file che si sta scrivendo = =E8=20 realizzato in linguaggio HTML. Tutto il testo, comprensivo degli altri = tag,=20 dovr=E0 essere racchiuso tra i tag di inizio e fine dell'elemento = html:


<HTML>

....

....=20 documento

....

</HTML>


Un = documento=20 HTML deve sempre contenere due sezioni o parti:


    la sezione HEAD che = contiene elementi=20 che non influenzano la visualizzazione da parte dei browser;

    la sezione BODY che contiene il documento = vero e=20 proprio.

2.5.2 L'elemento HEAD

La = sezione=20 HEAD inizia con il tag <HEAD> e termina con </HEAD> e = contiene di=20 solito solo il titolo del documento racchiuso tra i tag <TITLE> e=20 </TITLE> anche se pu=F2 contenere altre informazioni come i dati = sull'autore=20 e sul programma che ha generato il documento, o anche degli script = cio=E8=20 insiemi di comandi scritti in un qualche linguaggio apposito e che = possono=20 svolgere varie attivit=E0 interagendo con il browser.


<HEAD>

<TITLE>Istituto=20 F. Besta</TITLE>

</HEAD>


Il = titolo=20 deve essere una descrizione del documento breve, perch=E9 viene = visualizzato dai=20 browser nella barra del titolo della finestra, e significativa, perch=E9 = viene=20 utilizzato dai programmi che catalogano i documenti di Internet per = creare=20 indici di ricerca.

2.5.3 L'elemento BODY

La = sezione=20 BODY =E8 racchiusa tra i tag <BODY> e </BODY> e contiene la = parte del=20 documento che viene visualizzata dai browser quando si apre la pagina. =

Il = seguente=20 =E8 un semplicissimo esempio che riassume la struttura generale di una = pagina HTML=20 con l'uso dei tag sinora illustrati:


<!DOCTYPE=20 HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">


<HTML>

<HEAD>

<TITLE>Istituto=20 F. Besta =96 Esempio in HTML</TITLE>

</HEAD>

<BODY>=20

Questo =E8=20 il testo che viene visualizzato

</BODY>

</HTML>

2.5.4 Elementi di blocco e elementi di testo

All'interno=20 della sezione body possono essere presenti molti elementi suddivisi=20 fondamentalmente secondo due tipologie:


  • elementi=20 di testo

  • elementi=20 di blocco


i = primi si=20 usano per inserire immagini, creare collegamenti, modificare l'aspetto = del=20 testo, i secondi per definire gruppi di testo con uno scopo specifico, = come=20 intestazioni, tabelle ed altro ancora.

La = differenza principale tra i due tipi di elementi =E8 che quelli di = blocco=20 provocano interruzioni di paragrafo e quelli di testo invece no.

2.5.5 Intestazioni

Le = intestazioni sono elementi DI BLOCCO e ne esistono sei livelli diversi. = Non =E8=20 obbligatorio usarli ma sono utili perch=E9 aiutano a organizzare in modo = razionale=20 le pagine.

Ogni=20 intestazione inizia con <Hn> e termina con </Hn> dove n =E8 = il numero=20 corrispondente al livello desiderato. Nei tag di inizio =E8 possibile = inserire i=20 seguenti attributi:


ALIGN=3D"LEFT"

ALIGN=3D"RIGHT"

ALIGN=3D"CENTER"

ALIGN=3D"JUSTIFY"=20 (novit=E0 dell'HTML 4.0) e quindi non supportata da tutti i browser


Il = loro=20 effetto =E8 rispettivamente quello di allineare le intestazioni a = sinistra,=20 destra, centro e ad entrambi i margini.

2.5.6 Paragrafi

In = HTML=20 l'inizio di un paragrafo =E8 indicato con il tag <P> mentre non = =E8=20 obbligatorio il tag di fine </P>.

E' = molto=20 importante notare che la presenza di spazi o righe vuote nel sorgente = HTML viene=20 ignorata dai browser (gli spazi vengono compattati) e quindi l'unico = modo per=20 separare correttamente i paragrafi =E8, appunto, l'uso del tag = <P>.

Per chiarire=20 meglio il discorso consideriamo le seguenti porzioni di codice HTML:


<H1>Semplice=20 esempio</H1>

<P>=20 Questo =E8 un semplice esempio con due righe di testo.

<P>=20 Questa =E8 la seconda riga


oppure

<H1>

Semplice=20 esempio

</H1>=20

<P>=20 Questo =E8 un semplice esempio con due righe di testo.

<P>=20 Questa =E8 la seconda riga


oppure

<H1>Semplice=20 esempio

</H1>=20

<P>=20 Questo =E8 un semplice

esempio=20 con due righe di testo.

<P>=20 Questa =E8 la seconda riga


questi tre=20 esempi produrranno esattamente lo stesso effetto al momento della=20 visualizzazione con il browser.

A = proposito=20 dei paragrafi si deve anche ricordare che non =E8 opportuno cercare di = inserire=20 righe vuote con una sequenza di <P> consecutivi perch=E9 molti = browser in=20 questo caso li riducono ad un solo <P> annullando lo sforzo = compiuto=20 dall'autore del sorgente HTML.

All'interno=20 dell'elemento paragrafo si possono utilizzare gli attributi di = allineamento=20 visti per le intestazioni.

Naturalmente=20 il tag <P> =E8 un elemento DI BLOCCO.

2.5.7 Righello orizzontale

Con il tag=20 <HR> si inserisce nel documento una riga orizzontale, oltre a = separare il=20 testo in due paragrafi separati. Questo elemento =E8 DI BLOCCO ed =E8 = sempre gestito=20 anche se non tutti i browser visualizzano la riga nello stesso modo.

2.5.8 Centratura

I = tag=20 <CENTER> e </CENTER> vengono usati per centrare tutto ci=F2 = che =E8=20 contenuto tra essi, testo o immagini. Anche questo =E8 un elemento DI = BLOCCO.

2.5.9 Interruzione di linea

Per=20 interrompere una linea e "tornare a capo" si pu=F2 usare il tag = <BR>. Questo=20 elemento =E8 DI TESTO e si differenzia da <P> perch=E9 = quest'ultimo, oltre a=20 terminare la linea termina anche il paragrafo iniziandone uno nuovo.

2.5.10 Grassetto, corsivo, sottolineato

Con i tag=20 <B> e </B> si enfatizza il testo compreso, con <I> e=20 </I> si visualizza in corsivo, con <U> e </U> si = sottolinea.=20 Sono tutti elementi DI TESTO.

2.6 Nidificazione dei = tag

In = un=20 documento HTML i tag sono sempre nidificati (cio=E8 inseriti uno nel = contenuto di=20 uno precedente). Abbiamo visto ad esempio come l'elemento body sia = contenuto=20 all'interno dell'elemento html. Consideriamo ora la seguente porzione di = codice=20 HTML:


<P>

<B>Esempio=20 con tag <I>nidificati</I></B>

</P>


Abbiamo il=20 marcatore per il corsivo all'interno di quello per il grassetto che, a = sua volta=20 =E8 all'interno di quello per la separazione dei paragrafi. L'effetto di = questi=20 tag far=E0 visualizzare il testo in grassetto e la parola "nidificati" = anche in=20 corsivo.


Riguardo=20 alla nidificazione ci sono alcune regole da ricordare:


  • gli=20 elementi devono essere completamente nidificati e non chiusi = nell'ordine=20 sbagliato;

  • gli=20 elementi di testo possono essere nidificati in elementi di blocco o in = altri=20 di testo;

  • gli=20 elementi di blocco possono essere nidificati solo in altri elementi di = blocco.


Alla luce di=20 queste regole i seguenti esempi risultano errati:


<B><I>

Esempio=20 con nidificazione sbagliata per colpa dei tag di chiusura

</B></I>


<B>Esempio=20 sbagliato con tag di <P>blocco</P> interno a uno di=20 testo</B>


Alcuni=20 browser riescono ugualmente ad interpretare sorgenti HTML contenenti = errori=20 simili a questi ma, come pi=F9 volte detto in precedenza, =E8 sempre = bene rispettare=20 le regole standard.

2.7=20 Set di caratteri

Le = prime=20 versioni di HTML, fino alla 3.2, utilizzano un set di caratteri chiamato = LATIN-1 o ISO 8859-1. (L'ISO =E8 l'Organizzazione = Internazionale per=20 le Standardizzazioni e ha il compito di definire gli standard in vari = ambiti a=20 livello mondiale).

Questo set=20 comprende i caratteri stampabili del codice ASCII, cio=E8 quelli di = valore=20 decimale da 32 a 126, e altri caratteri numerati da 160 a 255 che = includono=20 simboli speciali e lettere straniere.

Con l'HTML=20 4.0 viene introdotto l'uso del set di caratteri UNICODE o = UCS=20 (Universal Character Set) che contiene 38.885 caratteri che fanno = parte=20 delle lingue scritte in tutto il Mondo. Essendo questo standard ancora=20 abbastanza nuovo pu=F2 capitare che un browser non gestisca i caratteri = UCS ed=20 inoltre non =E8 detto che il computer che utilizziamo contenga il = FONT di=20 caratteri in grado di visualizzare determinati simboli UCS.

2.7.1 Entit=E0 per caratteri speciali

Torniamo=20 allora al set di caratteri LATIN-1 e vediamo come si possono utilizzare = i=20 simboli speciali (quelli che non hanno codice ASCII compreso tra 32 e = 126); si=20 devono usare le ENTITA' PER CARATTERI SPECIALI cio=E8 dei codici che = rappresentano=20 tali simboli.

Le = entit=E0=20 per caratteri speciali possono assumere due forme: con NOME o con = NUMERO. Per=20 esempio il simbolo "=E0" corrisponde all'entit=E0 &agrave; = oppure=20 &#224;.

Tutte le=20 entit=E0 iniziano con "&" e finiscono con ";" , in quelle con numero = le cifre=20 sono precedute dal simbolo "#".

Di = seguito=20 sono elencati alcuni dei caratteri speciali pi=F9 usati (almeno in = Italia) con i=20 rispettivi codici:


Carattere

Nome

Numero




=E0

&agrave;

&#224;

=E8

&egrave;

&#232;

=E9

&eacute;

&#233;

=EC

&igrave;

&#236;

=F2

&ograve;

&#242;

=F9

&ugrave;

&#249;

=A3

&pound;

&#163;

=C8

&Egrave;

&#200;


2.7.2 Entit=E0 per caratteri riservati

Con lo=20 stesso sistema viene risolto anche il problema dell'uso di caratteri = "normali"=20 ma che per HTML hanno un significato particolare come i simboli di = maggiore e=20 minore, la "&" e le virgolette. Si usano in questo caso le ENTITA' = PER=20 CARATTERI RISERVATI con le stesse regole di sintassi:



Carattere

Nome

Numero




"

&#34;

<

&lt;

&#60;

>

&gt;

&#62;

&

&amp;

&#38;


Per le=20 virgolette esisterebbe anche l'entit=E0 con nome &quot; che per=F2 = non fa parte=20 dello standard riconosciuto dal W3C e quindi =E8 meglio usare l'entit=E0 = con numero=20 &#34;.

2.7.3 Lo spazio unificatore

Tra i=20 caratteri speciali ce n'=E8 uno molto importante: lo SPAZIO UNIFICATORE = con il=20 quale si inserisce uno spazio tra due parole facendo in modo per=F2 che = esse=20 rimangano sempre nella stessa riga. Per inserire tale simbolo si usano = le entit=E0=20 &nbsp; oppure &#160;.

Con lo=20 spazio unificatore si riesce anche ad ottenere il rientro della prima = riga di un=20 paragrafo cosa impossibile da con gli spazi "normali" o i tabulatori = visto che=20 questi verrebbero compattati dal browser in fase di visualizzazione.

2.8 Altri = elementi di=20 uso frequente

2.8.1 I commenti

In = un=20 documento HTML si possono inserire commenti e annotazioni che non = verranno=20 visualizzate ma che possono essere utili per chi esamina il codice = sorgente. I=20 commenti devono essere racchiusi tra i caratteri: <!- e ->.

2.8.2 Uso dei colori

In = un=20 documento HTML si possono gestire i colori dello sfondo e del testo e si = pu=F2=20 definire un'immagine come sfondo usando alcuni attributi del tag body. = Come=20 prerequisito occorre per=F2 conoscere i codici RGB (Red, Green, = Blu) dei=20 colori: tali codici sono costituiti da tre coppie di numeri esadecimali = che=20 specificano rispettivamente la quantit=E0 di rosso, di verde e di blu = presenti nel=20 colore (combinando in vario modo questi tre colori fondamentali si = ottengono=20 infatti tutti i colori possibili). Per indicare il verde si dovr=E0 = avere il=20 massimo di verde e niente rosso e blu e quindi il codice sar=E0 #00FF00. = Ogni=20 codice esadecimale deve essere preceduto dal simbolo di cancelletto "#". = I=20 codici dei colori pi=F9 usati sono:


Colore

Codice RGB

bianco

#FFFFFF

marrone

#800000

rosso

#FF0000

verde

#00FF00

blu

#0000FF

giallo

#FFFF00

fucsia

#FF00FF

ciano

#00FFFF

blu=20 scuro

#000080

grigio

#808080

violetto

#800080

nero

#000000


Gli=20 attributi del tag body da usare sono BGCOLOR per il colore dello sfondo, = TEXT=20 per il colore del testo e BACKGROUND per usare un'immagine come = sfondo.

Nel seguente=20 esempio viene definito un documento con sfondo nero e testo bianco:


<HTML>

<HEAD>

<TITLE>Esempio=20 con i colori</TITLE>

</HEAD>

<BODY=20 BGCOLOR=3D"#000000" TEXT=3D"#FFFFFF">

<B>Testo</B>

</BODY>

</HTML>


Se = si vuole=20 usare l'immagine contenuta nel file clouds.jpg come sfondo si scrive = invece:


<BODY=20 BACKGROUND=3D"clouds.jpg">


Se = gli=20 attributi di body non vengono specificati la visualizzazione del = documento=20 avviene secondo lo standard del browser, di solito testo nero su sfondo=20 bianco.

2.8.3 Elemento FONT

E' = un=20 elemento DI TESTO che consente di cambiare il colore, la dimensione ed = il tipo=20 dei caratteri utilizzando rispettivamente gli attributi COLOR, SIZE e = FACE.

Per i colori=20 si usano i codici esadecimali visti in precedenza, per il tipo carattere = si usa=20 il suo nome, per la dimensione ci sono sette possibilit=E0 numerate da = 1, la pi=F9=20 piccola, a 7, la pi=F9 grande. Si pu=F2 per=F2 anche indicare una = dimensione relativa=20 rispetto alla dimensione normale del testo. Ecco alcuni esempi:


<FONT=20 SIZE=3D"5">Esempio con dimensione 5</FONT>

<FONT=20 SIZE=3D"-1">Esempio con dimensione minore di uno di quella=20 normale</FONT>

<FONT=20 SIZE=3D"+1">Esempio con dimensione maggiore di uno di quella=20 normale</FONT>


Gli ultimi=20 due esempi equivalgono ai seguenti in cui si usano i tag SMALL e = BIG:


<SMALL>Esempio=20 con dimensione minore di uno di quella normale</SMALL>

<BIG>Esempio=20 con dimensione maggiore di uno di quella normale</BIG>


Naturalmente=20 i tre attributi possono essere combinati come nel seguente esempio:


<FONT=20 COLOR=3D"#00FF00" SIZE=3D"2" FACE=3D"Arial">Esempio con colore verde, = grandezza 2=20

e=20 tipo Arial</FONT>


L'elemento=20 FONT pu=F2 essere utilizzato anche per modificare colore e dimensione = delle=20 intestazioni se viene nidificato all'interno dei tag <H1>, = <H2>=20 ecc.

2.8.4 Elemento ADDRESS

Questo=20 elemento DI BLOCCO viene usato per inserire informazioni che riguardano = l'autore=20 del documento ed =E8 contraddistinto dai tag <ADDRESS> e=20 </ADDRESS>.

2.8.5 Elemento DIV

L'elemento=20 DI BLOCCO DIV suddivide il documento in sezioni ed =E8 delimitato dai = tag=20 <DIV> e </DIV>. Ogni sezione pu=F2 essere definita con un = particolare=20 allineamento del testo grazie all'uso degli stessi attributi visti per = paragrafi=20 e intestazioni. Se ad esempio si vuole centrare una porzione di testo = composta=20 da molti paragrafi, invece di centrarli uno ad uno si pu=F2 ricorrere al = tag DIV=20 nel seguente modo:


<DIV=20 ALIGN=3D"CENTER">


testo da=20 centrare

</DIV>

2.8.6 Elemento PRE

E' = un=20 elemento DI BLOCCO che permette di visualizzare del testo nel modo in = cui viene=20 scritto nel file sorgente, senza che gli spazi siano compattati dal = browser.=20 Tutto il testo contenuto fra i tag <PRE> e </PRE> viene = visualizzato=20 cos=EC come =E8 scritto e viene usato un carattere monospaziato = (generalmente il=20 Courier).

2.8.7 Elementi SUBSCRIPT e SUPERSCRIPT

Sono=20 elementi DI TESTO che servono a trasformare il testo rispettivamente in = pedice e=20 in apice. I tag sono <SUB> e </SUB>, <SUP> e = </SUP>.=20

Quindi per=20 visualizzare in un documento la forma normale di un equazione di secondo = grado=20 si deve scrivere:

A*X<SUP>2</SUP>=20 +B*X+C=3D0

2.8.8 Elementi EMPHASIS e STRONG

Sono=20 elementi DI TESTO che servono rispettivamente a enfatizzare e a = enfatizzare=20 molto quanto viene racchiuso tra i rispettivi tag <EM> e = </EM>,=20 <STRONG> e </STRONG>. Con alcuni browser questi elementi = hanno lo=20 stesso effetto rispettivamente dei tag <I> e <B>.

2.9=20 Elenchi o Liste

Gli elenchi=20 o liste sono elementi DI BLOCCO e sono fra i pi=F9 usati in HTML insieme = ai=20 paragrafi e alle intestazioni. Sono definiti cinque tipi di liste:


  • liste=20 numerate e ordinate

  • liste=20 puntate con richiamo grafico

  • liste a=20 glossario o di definizione

  • liste a=20 menu

  • liste a=20 directory


Gli ultimi=20 due tipi sono usati molto raramente e sono anzi sconsigliati; esaminiamo = quindi=20 solo le altre tre tipologie di elenchi.

2.9.1 Liste numerate

I = tag di=20 inizio e fine di una lista numerata sono <OL> e </OL>; = ciascuna voce=20 dell'elenco deve essere poi preceduta dal marcatore <LI> che non = necessita=20 obbligatoriamente del corrispondente </LI>. E' possibile stabilire = il tipo=20 di numerazione desiderata con l'attributo TYPE del tag <OL>:


TYPE=3D"1"=20 numeri arabi

TYPE=3D=20 "a" carattere minuscolo

TYPE=3D=20 "A" carattere maiuscolo

TYPE=3D=20 "i" numeri romani minuscoli

TYPE=3D"I"=20 numeri romani maiuscoli


Inoltre si=20 pu=F2 stabilire il punto di partenza della numerazione con l'attributo = START.

Le = impostazioni di default sono: numerazione araba e partenza da 1.

Anche il tag=20 <LI> prevede un attributo, VALUE per assegnare ad una certa voce = un valore=20 specifico.


Il = seguente=20 codice:


<OL=20 TYPE=3D"1" START=3D"1">

<LI>=20 Penne

<LI>=20 Matite

<LI>=20 Quaderni

<LI=20 VALUE =3D "5"> Libri

<LI>=20 Zaini

</OL>


viene=20 visualizzato dal browser nel seguente modo:


    1. Penne

    2. Matite

    3. Quaderni

    1. Libri

    2. Zaini








In = questo=20 esempio la lista contiene solo testo non formattato; =E8 comunque = possibile=20 inserire qualsiasi elemento di blocco o di testo come voce = dell'elenco.

2.9.2 Liste puntate

I = tag di=20 inizio e fine di una lista non numerata sono <UL> e </UL>; = ciascuna=20 voce dell'elenco deve essere poi preceduta dal marcatore <LI> che = non=20 necessita obbligatoriamente del corrispondente </LI>. E' possibile = stabilire il tipo di carattere di richiamo degli elementi con = l'attributo=20 TYPE:


TYPE=3D=20 "CIRCLE" cerchio vuoto

TYPE=3D=20 "DISC" cerchio pieno

TYPE=3D=20 "SQUARE" quadrato


E' = importante notare che le liste (anche quelle numerate) possono essere = nidificate=20 in modo da creare delle sottoliste. I caratteri standard di richiamo = sono il=20 disco per le liste principali, il cerchio per le sottoliste di primo = livello e=20 il quadrato per le altre.


Esempio (i=20 rientri utilizzati nel sorgente HTML hanno il solo scopo di aumentare la = leggibilit=E0 dello stesso in quanto, come pi=F9 volte detto, gli spazi = sono=20 ignorati dal browser):


<UL>

<LI>Hardware

<UL>

<LI>=20 Unit&agrave; centrale

<UL>

<LI>CPU

<LI>Memoria=20 centrale

<LI>Clock=20 </UL>

<LI>=20 Periferiche

<UL>

<LI>Memorie=20 di massa

<UL>=20

<LI>Nastro

<LI>Floppy=20 Disk

<LI>Hard=20 Disk

<LI>CD-ROM=20 </UL>

<LI>Stampante

<LI>Tastiera

<LI>Mouse

<LI>Schermo=20 </UL>

</UL>=20

<LI>Software

<UL>

<LI>Software=20 di base

<LI>Software=20 applicativo </UL>

</UL>=20


Il = risultato=20 =E8:










2.9.3 Liste a glossario

Le = liste a=20 glossario sono delimitate dai tag <DL> e </DL>; le voci = dell'elenco=20 sono contrassegnati dal marcatore <DT> e <DD> viene usato = per=20 fornirne la definizione.


Esempio:


<DL>

<DT>Hardware

<DD>Insieme=20 degli elementi del computer che hanno una consistenza fisica

<DT>Software

<DD>Insieme=20 dei programmi.

</DL>


Viene cos=EC=20 visualizzato:


Hardware=20

Insieme=20 degli elementi del computer che hanno una consistenza fisica

Software=20

Insieme=20 dei programmi.






2.10=20 Collegamenti

La = possibilit=E0 di definire collegamenti ipertestuali o LINK tra = documenti=20 diversi =E8 senz'altro uno dei motivi del successo del WEB in quanto = permette di=20 passare facilmente da una pagina ad un'altra senza preoccuparsi delle = rispettive=20 collocazioni fisiche. I documenti collegati possono infatti risiedere = stessa=20 macchina o su macchine diverse, distanti anche migliaia di chilometri, = purch=E9=20 collegate ad Internet ed =E8 anche possibile definire dei link ad altre = parti di=20 una stessa pagina.

L'entit=E0=20 HTML da usare per definire i collegamenti =E8 chiamata =E0ncora = ed =E8 un=20 elemento DI TESTO. I tag da usare sono <A> e </A> = accompagnati da=20 vari attributi tra i quali i pi=F9 usati sono NAME e HREF. Il testo che = si trova=20 tra i tag di apertura e chiusura (senza considerare gli attributi) =E8 = quello che=20 il browser evidenzier=E0 in qualche modo per attirare l'attenzione sulla = presenza=20 del link.

Ogni browser=20 mette in risalto i link in modo diverso: di solito vengono differenziati = quelli=20 gi=E0 "visitati", da quelli da visitare e da quelli attivi (un link =E8 = attivo per=20 il breve tempo in cui viene selezionato dall'utente). NETSCAPE NAVIGATOR = e=20 INTERNET EXPLORER usano rispettivamente i seguenti colori standard: blu=20 (#0000FF), violetto (#800080) e rosso (#FF0000).

Si = possono=20 comunque impostare i colori del testo dei collegamenti secondo i nostri = gusti=20 ricorrendo a degli attributi del tag <BODY> e precisamente: LINK = per il=20 colore dei collegamenti, VLINK per il colore dei collegamenti gi=E0 = visitati,=20 ALINK per il colore dei collegamenti attivi.

Per esempio=20 potremmo avere rispettivamente verde, marrone, fucsia:


<BODY=20 LINK=3D"#00FF00" VLINK=3D"#800000" ALINK=3D"#FF00FF">

2.10.1 Collegamenti esterni

Per=20 collegamenti esterni si intendono quelli che puntano a documenti = memorizzati su=20 macchine diverse. Per definire questo tipo di collegamenti =E8 = necessario usare=20 l'attributo HREF (che sta per Hypertext REFerence) seguito = dall'URL della=20 pagina alla quale ci si vuole collegare.


Esempio:


<A=20 HREF=3D"http://www.istruzione.it">Ministero della Pubblica = Istruzione</A>=20


La = scritta=20 Ministero della Pubblica Istruzione viene evidenziata dal = browser; la=20 selezione di tale voce con il mouse o con la tastiera attiva il = collegamento con=20 il sito del M.P.I. ed il browser visualizza la pagina iniziale o "di = benvenuto"=20 di tale sito. Di solito =E8 la pagina contenuta nel file index.html che = viene=20 aperta per default se, come nell'esempio in questione, non =E8 indicato=20 espressamente un nome di file.


Altro=20 esempio:


<A=20 HREF=3D"http://www.rcs.it/corriere/benven.htm">Corriere della=20 Sera</A>


In=20 questo modo si definisce un collegamento con la pagina "benven.htm" del = sito del=20 Corriere della Sera.


Altro=20 esempio:


<A=20 HREF=3D"mailto:pippo@tin.it">Invia=20 messaggio a pippo</A>


In=20 questo modo si definisce un collegamento attivando il quale si accede = alla=20 definizione di un messaggio di posta elettronica da inviare a = pippo@tin.it.


2.10.2 Collegamenti a etichette in un documento

L'attributo=20 NAME del tag <A> permette di inserire delle etichette o label che = fanno=20 riferimento a diverse sezioni di un documento. In un'altra pagina HTML = si pu=F2=20 poi sfruttare la presenza di tali etichette definendo dei link che = puntano al=20 documento non pi=F9 in modo generico ma indicando una sezione specifica = associata=20 ad una delle label..


Se=20 ad esempio definiamo una pagina di nome "esempio.html" sulla macchina=20 "giobix.mat.besta" in modo che contenga etichette:


...

....

<A=20 NAME=3D"E1">Esempio di etichetta numero 1</A>

...

...

<A=20 NAME=3D"E2">Esempio di etichetta numero 2</A>


=E8=20 poi possibile collegarsi ad essa da un altro documento in vari modi come = mostrato di seguito:


Da=20 <A HREF=3D"http://giobix.mat.besta/esempio.html"> qui </A> = ci si=20 collega all'inizio della

pagina=20 esempio.

Da=20 <A HREF=3D"http://giobix.mat.besta/esempio.html#E1"> qui = </A> ci si=20 collega alla pagina

esempio=20 all'etichetta 1.

Da=20 <A HREF=3D"http://giobix.mat.besta/esempio.html#E2"> qui = </A> ci si=20 collega alla pagina esempio all'etichetta 2.


Quindi=20 per collegarsi ad una certa etichetta di un documento basta aggiungere = al=20 riferimento di quest'ultimo (URL e nome) il simbolo "#" seguito dal nome = dell'etichetta a cui vogliamo fare riferimento.

2.10.3 Usare i collegamenti insieme ad altri = elementi

L'elemento=20 <A> pu=F2 essere utilizzato insieme ad altri tag HTML ma si deve = ricordare=20 che =E8 proibito nidificarlo in altri elementi <A>. Vediamo alcuni = esempi:


collegamento=20 all'interno di una intestazione


<H3><A=20 HREF=3D"http://giobix.mat.besta/"> Esempio di intestazione con=20 link</A></H3>

si=20 noti che <A> che =E8 un elemento di testo deve essere interno al = tag di=20 intestazione che =E8 un elemento di blocco;


collegamento=20 in corsivo


<I><A=20 HREF=3D"http://giobix.mat.besta/"> Esempio di collegamento in=20 corsivo</A></I>


oppure=20


<A=20 HREF=3D"http://giobix.mat.besta/"> <I>Esempio di collegamento = in=20 corsivo</I></A>


lista=20 di collegamenti


<P>I=20 seguenti sono i server a cui ci possiamo collegare:

<UL>

<LI><A=20 HREF=3D"http://giobix.mat.besta/">Giobix</A>

<LI><A=20 HREF=3D"http://bella.mat.besta/">Bella</A>

<LI><A=20 HREF=3D"http://muscolis.inf.besta/">Muscolis</A>

<LI><A=20 HREF=3D"http://lazzaro.mat.besta/">Lazzaro</A>

<LI><A=20 HREF=3D"http://stella.mat.besta/">Stella</A>

</UL>


Sarebbe=20 anche possibile cambiare il colore del testo dei collegamenti, = nidificando il=20 tag <FONT> all'interno del tag ancora, ma questa =E8 un'operazione = sconsigliata in quanto si verrebbero a perdere le impostazioni relative = ai=20 colori di default dei collegamenti con la distinzione tra quelli = visitati, non=20 visitati e attivi e quindi l'utente non sarebbe pi=F9 in grado di = riconoscere i=20 link gi=E0 visitati.

2.10.4 Collegamenti interni

I=20 collegamenti interni sono quelli che fanno riferimento a file residenti = sul=20 proprio sito WEB; si definiscono nello stesso modo di quelli esterni = eccetto per=20 il fatto che =E8 possibile fare riferimento anche ad URL = relative. Queste=20 ultime sono delle URL in cui l'indirizzo non =E8 specificato interamente = come=20 avviene invece nelle URL assolute che abbiamo visto fino a questo = momento.

Se = ad=20 esempio stiamo scrivendo una pagina HTML residente su=20 "giobix.mat.besta/classi/4d/pippo/" e vogliamo fare riferimento al = documento=20 "esempio2.html" presente sulla stessa macchina e stessa directory, = baster=E0=20 scrivere:


<A=20 HREF=3D"esempio2.html">Link alla pagina esempio2</A>


=E8 poi il=20 browser che, al momento del collegamento integra l'indirizzo aggiungendo = la=20 parte mancante.


Se = invece=20 vogliamo collegarci ad un documento presente sulla stessa macchina ma in = directory differenti dovremo specificare il percorso per raggiungerlo=20 ricorrendo, se necessario, alla notazione ".." che indica la directory = "madre"=20 della directory corrente. Vediamo i seguenti esempi:


<A=20 HREF=3D"/pluto/esempio2.html">Link alla pagina = esempio2</A>


in = questo=20 caso ci colleghiamo al file esempio2.html che =E8 in=20 "giobix.mat.besta/classi/4d/pippo/pluto";


<A=20 HREF=3D"../paperino/esempio2.html">Link alla pagina = esempio2</A>


in = questo=20 caso ci colleghiamo al file esempio2.html che =E8 in=20 "giobix.mat.besta/classi/4d/paperino".


Per i=20 collegamenti interni =E8 sempre consigliato l'uso di URL relative in = quanto con=20 esse i link continuano a funzionare senza modifiche (o quasi) anche se = tutti i=20 documenti del nostro sito vengono spostati in un'altra posizione del = disco o=20 addirittura su un'altra macchina. Se si usano URL assolute questo = naturalmente=20 non =E8 possibile e gli indirizzi dei vari collegamenti devono essere = modificati=20 in caso di spostamento dei documenti.

2.10.5 Collegamenti ad altre parti della stessa = pagina

Grazie=20 all'uso delle etichette =E8 possibile definire collegamenti ad altre = parti dello=20 stesso documento in modo da poter "saltare" immediatamente ad esse. = Questa=20 possibilit=E0 pu=F2 essere sfruttata in caso di pagine molto lunghe = oppure per=20 creare degli indici relativi a un documento HTML.


Ad = esempio=20 se si definisce in un documento una etichetta:


<A=20 NAME=3D"sezione1">Sezione 1</A>


poi si pu=F2=20 stabilire il link ad essa scrivendo:


<A=20 HREF=3D"#sezione1">Link alla sezione 1</A>


Nel caso si=20 voglia definire l'indice di un documento (di nome "esempio.html") =E8 = opportuno=20 inserire delle etichette ad ogni intestazione del documento stesso:


<H1><A=20 NAME=3D"cap1">CAPITOLO 1</A></H1>

...

...

<H1><A=20 NAME=3D"cap2">CAPITOLO 2</A></H1>

...

ecc.=20 ecc.


L'indice pu=F2=20 risiedere nel documento stesso (di solito all'inizio) oppure in un = altro. Nel=20 primo caso viene definito cos=EC:


<A=20 HREF=3D"#cap1">Capitolo 1. Il sistema di = elaborazione</A>

<A=20 HREF=3D"#cap2">Capitolo 2. I sitemi operativi</A>

...

ecc.=20 ecc.


Nel secondo=20 caso invece (supponendo che l'indice sia in un altro documento ma nella = stessa=20 macchina e directory):


<A=20 HREF=3D"esempio.html#cap1">Capitolo 1. Il sistema di=20 elaborazione</A>

<A=20 HREF=3D"esempio.html#cap2">Capitolo 2. I sitemi = operativi</A>

...

ecc. ecc.=20

2.11=20 Immagini nei documenti

2.11.1 Tipi di immagini

Nei=20 documenti HTML =E8 possibile inserire immagini ed i formati pi=F9 = comunemente=20 utilizzati sono GIF (Graphic Interchange Format) e = JPEG=20 (Joint Photographic Experts Group). I file corrispondenti hanno=20 rispettivamente le estensioni ".gif" e ".jpg" o ".jpeg".

Il = formato=20 GIF =E8 stato sviluppato da Compuserve alla fine degli anni '80 ed =E8=20 particolarmente adatto per linee, icone, immagini generate dal computer = e con=20 colori netti, non sfumati. Il formato JPEG si =E8 diffuso dal 1993 ed = =E8 progettato=20 per le fotografie e per altre immagini con colori sfumati.

Tra i due il=20 formato GIF =E8 senz'altro il pi=F9 diffuso ed anche il meglio gestito = dai vari=20 browser. Inoltre le immagini GIF, grazie a specifici software, possono = anche=20 essere rese trasparenti e animate (qui per=F2 non approfondiamo queste=20 possibilit=E0). A vantaggio delle immagini JPEG c'=E8 invece la maggiore = qualit=E0=20 (sono "a 24 bit" cio=E8 possono avere 16 milioni di colori contro gli "8 = bit" e=20 256 colori delle GIF) e la compattezza: la stessa immagine in formato = JPEG=20 occupa circa un quarto dello spazio in byte del formato GIF.

La = scelta=20 tra i due formati dipende dai tipi di immagini che si vogliono = utilizzare; di=20 solito in un documento WEB si trovano entrambi.

Nel 1995 il=20 W3C ha definito un nuovo formato di immagini per la rete, il PNG = (Portable=20 Network Graphics) che offre buona qualit=E0 e poco ingombro ma che = non =E8=20 ancora ben supportato dai browser pi=F9 diffusi.

2.11.2 Inserimento di immagini

L'elemento=20 che si utilizza per l'inserimento di immagini =E8 <IMG>; =E8 un = elemento DI=20 TESTO, prevede l'attributo SRC per specificare il file contenente = l'immagine e=20 l'attributo ALT per indicare un testo alternativo nel caso quest'ultima = non=20 possa essere visualizzata.


Esempio:


<IMG=20 SRC=3D"topolino.gif" ALT=3D"Topolino">


In = questo=20 modo si inserisce l'immagine contenuta nel file di nome "topolino.gif" = residente=20 nella directory corrente; il testo altrnativo =E8 "Topolino".


I = motivi per=20 cui pu=F2 essere necessario il testo alternativo sono i seguenti:


il = browser=20 non supporta la grafica;

il = browser =E8=20 programmato per pronunciare il testo al posto dell'immagine (browser per = utenti=20 ciechi);

il = browser =E8=20 stato configurato solo per il testo in modo da velocizzare il = caricamento dei=20 documenti WEB;

alcuni=20 browser visualizzano il testo alternativo mentre l'immagine viene = caricata;

l'immagine=20 da visualizzare non viene trovata dal browser.

2.11.3 Posizionamento delle immagini

Le = immagini=20 possono essere posizionate con l'attributo ALIGN del tag <IMG>. I = valori=20 possibili sono "TOP", "BOTTOM" e "MIDDLE" per l'allineamento verticale e = "LEFT"=20 e "RIGHT" per l'allineamento orizzontale.

Il = valore di=20 default =E8 "BOTTOM" con il quale il bordo inferiore dell'immagine =E8 = allineato con=20 la riga di testo di cui essa fa parte (si ricordi che l'elemento = <IMG> =E8=20 di testo).

Invece con=20 ALIGN=3D"TOP" =E8 il bordo superiore dell'immagine ad essere allineato = con la riga=20 di testo e con ALIGN=3D"MIDDLE" quest'ultimo viene allineato con la = parte centrale=20 dell'immagine.

Con le=20 scelte ALIGN=3D"RIGHT" e ALIGN=3D"LEFT" l'immagine viene posizionata = rispettivamente=20 al margine destro o sinistro della pagina ed il testo che segue = l'elemento=20 <IMG> viene visualizzato affiancato all'immagine stessa. Se si = vuole=20 interrompere la visualizzazione del testo affiancato e far posizionare = gli=20 elementi successivi sotto l'immagine si deve usare l'interruzione di = linea con=20 attributo CLEAR nel seguente modo:


<BR=20 CLEAR=3D"LEFT"> oppure <BR CLEAR=3D"RIGHT"> oppure = <BR=20 CLEAR=3D"ALL">


rispettivamente=20 nel caso che l'immagine sia sul bordo sinistro o sul bordo destro o ci = siano=20 immagini su entrambi i lati.

2.11.4 Dimensionamento delle immagini

Attraverso=20 l'uso di altri attributi del tag <IMG> si possono dimensionare le=20 immagini, impostare lo spessore del bordo e stabilire quanto spazio = vuoto=20 lasciare tra esse e il testo che le "circonda".

Gli=20 attributi WIDTH e HEIGHT permettono di specificare rispettivamente la = larghezza=20 e l'altezza di un'immagine espressa in PIXEL.


Esempio:


<IMG=20 SRC=3D"topolino.gif" WIDTH=3D"100" HEIGHT=3D"200" = ALT=3D"Topolino">


L'attributo=20 BORDER permette di specificare un bordo di un certo spessore espresso in = pixel.=20 Il default =E8 BORDER=3D"0" cio=E8 nessun bordo.


Esempio:


<IMG=20 SRC=3D"topolino.gif" WIDTH=3D"100" HEIGHT=3D"200" BORDER=3D"10"=20 ALT=3D"Topolino">


Si = noti che=20 in questo caso l'immagine avr=E0 una larghezza totale di 120 pixel e = un'altezza=20 totale di 220 pixel.


Con gli=20 attributi HSPACE e VSPACE si indica infine lo spazio vuoto, sempre = espresso in=20 pixel, da lasciare a sinistra o destra (con HSPACE) e sopra e sotto (con = VSPACE)=20 all'immagine.

2.11.5 Collegamenti con immagini

E' = possibile=20 usare immagini al posto del testo o anche insieme al testo come ancore = per i=20 collegamenti.


Esempi:


<A=20 HREF=3D"http://giobix.mat.besta/"><IMG SRC=3D"topolino.gif"=20 ALT=3D"Topolino"></A>


<A=20 HREF=3D"http://giobix.mat.besta/">Link a Giobix<IMG = SRC=3D"topolino.gif"=20 ALT=3D"Topolino"></A>


Nel primo=20 caso il collegamento =E8 definito sull'immagine, nel secondo =E8 = definito sia=20 sull'immagine che sul testo.

Occorre=20 ricordare che alcuni navigatori aggiungono automaticamente un bordo blu = intorno=20 ad una immagine collegamento per evidenziare la presenza di = quest'ultimo, quindi=20 non =E8 opportuno definire bordi personalizzati per tali immagini..


3 DOCUMENTI AVANZATI

3.1=20 Informazioni supplementari nell'intestazione

La = sezione=20 HEAD di un documento HTML pu=F2 contenere altre informazioni oltre al = titolo del=20 documento che, come abbiamo visto nel capitolo precedente, viene = assegnato=20 tramite il tag <TITLE>.

Esistono=20 infatti i seguenti elementi che possono essere inseriti al suo = interno:

<META>,=20 <LINK>, <BASE>, <STYLE>, <SCRIPT>, = <ISINDEX>.

3.1.1 L'elemento META

E' = un=20 elemento usato per descrivere alcune propriet=E0 del documento ed =E8 = solitamente=20 accompagnato da due attributi: NAME o HTTP-EQUIV che a loro volta = necessitano=20 dell'attributo CONTENT.

Vediamo=20 alcuni esempi di uso del tag META con attributo NAME:


<META=20 NAME=3D"Author" CONTENT=3D"Paolino Paperino">

<META=20 NAME=3D"Copyright" CONTENT=3D"Walt Disney Italia">


in = questo=20 modo si informa il browser su chi =E8 l'autore del documento e si danno=20 informazioni sul copyright;;


<META=20 NAME=3D"GENERATOR" CONTENT=3D"Mozilla/4.04 [en] (Win95; I) = [Netscape]">


qui invece=20 si indica il programma usato per creare il documento HTML; quando si = usano=20 editor HTML una linea simile a questa viene automaticamente inserita = nella=20 sezione HEAD. Nell'esempio l'editor usato =E8 la versione 4.04 in = inglese di=20 NETSCAPE COMPOSER (conosciuta con il "soprannome" di Mozilla).


<META=20 NAME=3D"DESCRIPTION" CONTENT=3D"Breve descrizione del = documento">

<META=20 NAME=3D"KEYWORDS" CONTENT=3D"Qui, Quo, Qua, 313, Paperopoli, = Paperina">


in = questi=20 esempi si danno informazioni utili per i cosiddetti motori di = ricerca.=20 Questi ultimi sono dei programmi in grado di indicizzare i siti WEB per = poi=20 permettere agli utenti di Internet ricerche basate sui criteri pi=F9 = vari. Nel=20 caso esposto si forniscono una piccola descrizione della pagina WEB ed = una serie=20 di parole chiave riguardanti il suo contenuto, inserendo rispettivamente = "DESCRIPTION" e "KEYWORDS" nell'attributo NAME e i valori corrispondenti = in=20 CONTENT.


L'attributo=20 HTTP-EQUIV del tag META =E8 usato per vari scopi, ad esempio:


    • per=20 causare il refresh automatico della pagina dopo un certo tempo = (nell'esempio=20 15 secondi)


<META=20 HTTP-EQUIV=3D"REFRESH" CONTENT=3D"15">


    • per=20 richiamare automaticamente un'altra pagina trascorso un certo=20 tempo


<META=20 HTTP-EQUIV=3D"REFRESH"=20 CONTENT=3D"10;url=3Dhttp://www.aaa.it/altrapagina.html">


    • per=20 evitare che il documento venga memorizzato nella cache e quindi il=20 navigatore richieda sempre una nuova copia dello = stesso


<META=20 HTTP-EQUIV=3D"EXPIRES" CONTENT=3D"0">


Inoltre pu=F2=20 essere usato per indicare la data di scadenza della pagina in modo che i = navigatori prelevino la versione aggiornata al momento opportuno, oppure = per=20 classificare il contenuto del documento in modo che possano essere = attivati=20 meccanismi di protezione per i bambini da parte dei browser. L''uso di = tale=20 attributo non viene comunque ulteriormente approfondito in questa = sede.

3.1.2 L'elemento LINK

Con questo=20 elemento si possono definire delle relazioni tra il documento ed altre = pagine=20 WEB. Non si deve confondere questo tag con un collegamento (link = in=20 inglese) che, come abbiamo visto, si realizza con il tag <A>. Sono = utilizzabili i due attributi REL e REV, con il primo si stabilisce una = relazione=20 tra il nostro documento ed un'altra pagina WEB, con il secondo invece si = indica=20 che un'altra pagina =E8 in relazione con la nostra.

Se = ad=20 esempio abbiamo una pagina chiamata "pagina1.html" che fa parte = di un=20 sito il cui indice =E8 memorizzato (come avviene di solito) in = "index.html"=20 pu=F2 essere opportuno indicare nella testata di =93pagina1.html=94:


<LINK=20 REL=3D"INDEX" HREF=3D"index.html">


in=20 tal modo i navigatori e i motori di ricerca saranno informati della = relazione=20 esistente tra i due documenti e lo saranno ancor meglio se nella testata = di=20 "index.html" si inserisce:


<LINK=20 REV=3D"INDEX" HREF=3D"pagina1.html">


Queste=20 informazioni potrebbero anche essere sfruttate da browser avanzati che = includano=20 tra i pulsanti di navigazione un tasto "INDEX" che permetta di saltare=20 immediatamente all'indice del sito in cui =E8 contenuta la pagina = visualizzata in=20 un certo momento.

3.1.3 Gli elementi BASE, SCRIPT, STYLE, ISINDEX

Gli elementi=20 BASE (con il quale si pu=F2 indicare la URL in cui risiede il documento) = e ISINDEX=20 (indica che la pagina =E8 in effetti un programma che effettua = operazioni di=20 ricerca) sono poco importanti ed usati molto raramente.

Invece i tag=20 <STYLE>, </STYLE>, <SCRIPT>, </SCRIPT> sono = abbastanza=20 importanti in quanto servono rispettivamente per inserire un FOGLIO = DI=20 STILE (CSS, Cascading Style Sheet) ed uno SCRIPT nel=20 documento. Tali argomenti saranno ripresi e approfonditi = successivamente.

3.2 = Uso delle=20 tabelle

Le = tabelle=20 sono elementi molto usati per la realizzazione di documenti in HTML in = quanto=20 permettono di organizzare i dati in strutture formate da righe e colonne = e di=20 impostare il layout di una pagina disponendo i paragrafi in colonne, = oppure=20 creando dei margini, o ancora distribuendo testo ed immagini in modo = pi=F9 vario e=20 movimentato.

Nelle=20 tabelle di un documento HTML, come in qualsiasi tabella si identificano = i=20 seguenti componenti:


  • un titolo,=20 cio=E8 una descrizione opzionale della tabella;

  • le celle,=20 cio=E8 le intersezioni tra righe e colonne, che contengono i dati;

  • le=20 intestazioni delle righe o colonne, cio=E8 delle celle contenenti le = etichette=20 che identificano i tipi di dati delle righe o colonne=20 corrispondenti.


La = tabella=20 pi=F9 piccola che si pu=F2 creare contiene una sola cella, cio=E8 una = riga e una=20 colonna; non ci sono invece restrizioni teoriche sul numero massimo di = celle=20 definibili. Esiste per=F2 un limite dettato da ragioni pratiche in = quanto =E8=20 opportuno che la tabella entri per larghezza nella finestra del browser = onde=20 evitare il ricorso, scomodo e spesso sgradito, alla barra di scorrimento = orizzontale di quest'ultimo.

Le = tabelle=20 sono ormai supportate da quasi tutti i browser e ne esistono due diversi = modelli: quello dell'HTML 3.2 contenente una serie molto semplice di = elementi e=20 quello dell'HTML 4.0 che ha introdotto nuovi attributi conservando = per=F2 la=20 compatibilit=E0 con il precedente.

Nella=20 maggior parte dei casi =E8 sufficiente conoscere il modello di tabelle = pi=F9=20 semplice; le funzioni pi=F9 complesse dell'HTML 4.0 sono necessarie solo = per=20 lavori abbastanza sofisticati.

Esaminiamo=20 quindi in modo pi=F9 approfondito il modello di tabelle dell'HTML = 3.2.

3.2.1 Esempi di tabelle

Introduciamo=20 gli elementi per la definizione delle tabelle con un semplice = esempio:


<HTML>

<HEAD>

<TITLE>Esempio</TITLE>

</HEAD>

<BODY>

<P>

<TABLE=20 BORDER>

<CAPTION>Tabella=20 di prova</CAPTION>

<TR>

<TH>Alunno

<TH>Voto=20 orale

<TH>Voto=20 scritto

<TH>Media

</TR>

<TR>

<TD>Pippo

<TD>5

<TD>7

<TD>6

</TR>

<TR>

<TD>Pluto

<TD>6

<TD>8

<TD>7

</TR>

</TABLE>

</BODY>

</HTML>


L'elemento=20 da usare per la creazione di una tabella =E8 <TABLE>; =E8 un = elemento DI=20 BLOCCO e richiede il tag </TABLE> alla fine della definizione = della=20 tabella stessa.

Con=20 <CAPTION> e </CAPTION> si pu=F2 inserire il titolo della = tabella che=20 comunque =E8 opzionale.

Il = tag=20 <TR> definisce le varie righe suddivise nelle celle il cui = contenuto =E8=20 definito con <TD> in caso siano celle normali, o con <TH> in = caso=20 siano intestazioni. I tag </TR>, </TD>, </TH> non sono = obbligatori.


L'esempio=20 precedente viene visualizzato nel seguente modo da INTERNET EXPLORER = 4:


Tabella di prova

Alunno

Voto = orale

Voto = scritto

Media

Pippo

5

7

6

Pluto

6

8

7



Vediamo=20 anche un esempio di tabella in cui le intestazioni sono per riga invece = che per=20 colonna:


<HTML>

<HEAD>

<TITLE>Esempio</TITLE>

</HEAD>

<BODY>

<P>

<TABLE=20 BORDER CELLPADDING=3D"9">

<CAPTION>Tabella=20 2</CAPTION>

<TR>

<TH>Matematica

<TD>Prof.=20 Pippo

<TD>Ore:=20 5

</TR>

<TR>

<TH>Storia

<TD>Prof.=20 Pluto

<TD>Ore:=20 3

</TR>

</BODY>

</HTML>


Il = risultato=20 in questo caso =E8 il seguente:


Tabella n. 2

Matematica =

Prof. Pippo

Ore: 5

Storia =

Prof. Pluto

Ore: 3 =



Nel=20 seguente, ulteriore esempio si ha invece una tabella con le intestazioni = sia=20 nelle righe che nelle colonne:


<HTML>

<HEAD>

<TITLE>Esempio</TITLE>

</HEAD>

<BODY>

<P>

<TABLE=20 ALIGN=3D"CENTER" BORDER=3D"15">

<CAPTION>Terza=20 tabella</CAPTION>

<TR>

<TH>Alunni/Materie

<TH>Italiano

<TH>Storia

<TH>Matematica

<TH>Diritto

</TR>

<TR>

<TH>Pippo

<TD>5

<TD>7

<TD>6

<TD>6

</TR>

<TR>

<TH>Pluto

<TD>6

<TD>8

<TD>7

<TD>7

</TR>

<TR>

<TH>Paperino

<TD>6

<TD>6

<TD>7

<TD>7

</TR>

</TABLE>

</BODY>

</HTML>


Con questo=20 sorgente HTML si ottiene:


Terza tabella

Alunni/Materie=20

Italiano =

Storia =

Matematica=20

Diritto=20

Pippo =

5

7

6

6

Pluto =

6

8

7

7

Paperino =

6

6

7

7=20


3.2.2 Attributi dell'elemento <TABLE>

Gli=20 attributi degli elementi per la definizione delle tabelle sono tutti = opzionali;=20 se non se ne specifica alcuno si ottiene una tabella allineata a = sinistra e=20 senza bordi.

Iniziamo=20 a considerare gli attributi del tag <TABLE> che sono: ALIGN, = BORDER,=20 CELLSPACING, CELLPADDING, BGCOLOR, WIDTH.


Con=20 l'attributo ALIGN, usato nel terzo degli esempi precedenti, si specifica = l'allineamento della tabella. I valori possono essere ALIGN=3D"LEFT", = che =E8 il=20 default, ALIGN=3D"CENTER", ALIGN=3D"RIGHT".


Attraverso=20 BGCOLOR si specifica il colore dello sfondo della tabella usando i = codici dei=20 colori visti in precedenza.


L'attributo=20 BORDER permette di aggiungere i bordi a tutte le celle della tabella. Se = si=20 specifica anche un valore in pixel, come nel terzo esempio, si ottiene = il=20 dimensionamento dei bordi, ma solo di quelli esterni.


Con=20 CELLSPACING=3D"val" dove val =E8 un valore espresso in pixel si pu=F2 = inserire dello=20 spazio tra le celle che altrimenti risultano unite.


Con=20 CELLPADDIND=3D"val" dove val =E8 un valore espresso in pixel si pu=F2 = inserire dello=20 spazio tra il contenuto e il bordo delle celle. Questo attributo =E8 = stato usato=20 nel secondo esempio.


Con=20 WIDTH si imposta la grandezza della tabella, in percentuale rispetto = alla=20 larghezza della finestra del browser, oppure in base a un valore = espresso in=20 pixel.

Ad = esempio:

<TABLE=20 WIDTH=3D"50%"> oppure

<TABLE=20 WIDTH=3D"300">


Se=20 questo attributo non viene usato, la tabella =E8 dimensionata in base al = contenuto=20 della sue celle. A questo proposito =E8 opportuno sottolineare, come = emerge anche=20 dagli esempi, che la larghezza di una colonna di una tabella =E8 = determinata dalla=20 larghezza della cella pi=F9 grande appartenente alla colonna stessa. = Stessa cosa=20 vale per l'altezza di una riga che si "adegua" all'altezza della cella = pi=F9=20 grande presente in essa.

3.2.3 Attributi del titolo

All'interno=20 del titolo, cio=E8 tra <CAPTION> e </CAPTION> si possono = inserire solo=20 elementi di testo. Con l'attributo ALIGN si pu=F2 decidere se il titolo = sta sopra=20 (impostazione di default) o sotto la tabella:


<CAPTION=20 ALIGN=3D"TOP">Titolo sopra</CAPTION> oppure

<CAPTION=20 ALIGN=3D"BOTTOM">Titolo sotto</CAPTION>

3.2.4 Attributi delle righe e delle celle

I=20 tag <TR>, <TH>, <TD> prevedono gli attributi ALIGN, = VALIGN,=20 BGCOLOR. Esistono inoltre gli attributi ROWSPAN, COLSPAN, WIDTH che si = applicano=20 solo a <TH> e <TD>.


Con=20 ALIGN=3D"LEFT" o "CENTER" o "RIGHT" si imposta l'allineamento = orizzontale dei dati=20 in una cella o in tutte le celle di una riga a seconda che tale = attributo sia=20 inserito nei tag <TD> e <TH> o nel tag <TR>. Il valore = di=20 default =E8 "LEFT".


Discorso=20 analogo vale per l'attributo VALIGN con il quale si imposta = l'allineamento=20 verticale dei dati. I valori possibili sono: "TOP", "MIDDLE","BOTTOM",=20 "BASELINE" e il default =E8 "MIDDLE". Il valore "BASELINE" =E8 simile a = "TOP" e=20 imposta quindi un posizionamento in alto nella cella; la differenza =E8 = nel fatto=20 che con "BASELINE" la parte inferiore della prima riga di testo di ogni = cella =E8=20 sempre allineata qualunque sia la dimensione dei caratteri usati nelle = varie=20 celle.


L'attributo=20 BGCOLOR permette di specificare il colore di sfondo di una riga o di una = cella.=20 Naturalmente l'impostazione del colore di una riga o di una cella = prevale=20 sull'impostazione dell'intera tabella. Se ad esempio abbiamo:


<TABLE=20 BGCOLOR=3D"#FF0000">

<TR>

<TD>Cella=20 1

<TD>Cella=20 2

</TR>

<TR=20 BGCOLOR=3D"#00FF00">

<TD>Cella=20 3

<TD=20 BGCOLOR=3D"#0000FF">Cella 4

</TR>

</TABLE>


La=20 tabella ha lo sfondo rosso ma la seconda riga lo ha verde e la cella 4, = che fa=20 parte della seconda riga, ha lo sfondo blu.


Gli=20 attributi COLSPAN e ROWSPAN servono ad unire orizzontalmente e = verticalmente pi=F9=20 celle di una tabella. Vediamone il funzionamento con un esempio in cui = si usa=20 ROWSPAN (l'utilizzo di COLSPAN =E8 analogo):


<HTML>

<HEAD>

<TITLE>Esempio</TITLE>

</HEAD>

<BODY>

<P>

<TABLE=20 BORDER>

<CAPTION>Tabella=20 n. 4</CAPTION>

<TR>

<TH=20 ROWSPAN=3D"2">Milano

<TD>Minima

<TD>-2

</TR>

<TR>

<TD>Massima

<TD>10

</TR>

<TR>

<TH=20 ROWSPAN=3D"2">Roma

<TD>Minima

<TD>4

</TR>

<TR>

<TD>Massima

<TD>13

</TR>

</TABLE>

</BODY>

</HTML>


Il=20 risultato che si ottiene =E8 il seguente:


Tabella n. 4

Milano =

Minima

-2

Massima

10

Roma =

Minima

4

Massima

13



Infine=20 l'attributo WIDTH permette di specificare la larghezza in pixel di una = cella=20 indipendentemente dal suo contenuto. Ad esempio:


<TD=20 WIDTH=3D"20">


Si=20 ricordi comunque che le celle di una colonna assumono sempre una = larghezza pari=20 a quella della cella pi=F9 larga della colonna stessa.

3.2.5 Immagini ed altri elementi nelle celle

In = una cella=20 si pu=F2 inserire praticamente tutto ci=F2 che pu=F2 essere definito = nella sezione=20 <BODY> di un documento e quindi:


  • testo

  • elementi=20 di blocco (paragrafi, elenchi, altre tabelle, ecc.)

  • elementi=20 di testo (font, collegamenti, immagini, ecc.)


Grazie a=20 questo qualche volta le tabelle vengono usate per definire il layout, = cio=E8=20 l'aspetto, della pagina che si sta creando. In pratica il documento = viene=20 definito come una grossa tabella ed il testo, le immagini e gli altri = elementi=20 vengono inseriti nelle sue celle. Tale utilizzo delle tabelle, pur non = essendo=20 molto ortodosso, permette di ottenere risultati estetici anche gradevoli = con=20 sforzo non eccessivo.

3.2.6 Creazione di celle vuote

Per creare=20 una cella vuota =E8 sufficiente digitare il tag <TD> seguito = immediatamente=20 da </TD>. Molti browser per=F2 non visualizzano i bordi di una = cella vuota;=20 per essere sicuri che questi siano visibili =E8 possibile inserire nella = cella=20 vuota uno spazio unificatore:


<TD>&#160;</TD>=20

3.2.7 Tabelle nidificate

Una=20 tabella =E8 nidificata quando viene inserita in una cella di un'altra = tabella.=20 Tale inserimento si usa abbastanza spesso anche perch=E9 =E8 l'unico = modo per=20 ottenere due tabelle affiancate. Vediamo proprio un esempio con due = tabelle=20 affiancate inserite in due celle di una tabella pi=F9 grande definita = senza=20 bordo:


<HTML>

<HEAD>

<TITLE>Esempio</TITLE>

</HEAD>

<BODY>

<P><TABLE=20 ALIGN=3D"CENTER">

<CAPTION>Tabella=20 n.5</CAPTION>

<TR>

<TD>

<TABLE=20 BORDER=3D"10">

<CAPTION>I=20 Quadrimestre</CAPTION>

<TR><TD></TD><TH>Orale=20 <TH>Scritto <TH>Pratico </TR>

<TR><TD>Pippo=20 <TD>6 <TD>7 <TD>7 </TR>

<TR><TD>Pluto=20 <TD>7 <TD>8 <TD>8 </TR>

</TABLE>

</TD>

<TD>

<TABLE=20 BORDER=3D"10">

<CAPTION>II=20 Quadrimestre</CAPTION>

<TR><TD></TD><TH>Voto=20 finale </TR>

<TR><TD>Pippo=20 <TD>7 </TR>

<TR><TD>Pluto=20 <TD>8 </TR>

</TABLE>

</TD>

</TR>

</TABLE></BODY></HTML>



Il=20 risultato che si ottiene =E8 il seguente:







3.3 = Cenni a=20 FRAME, CSS, Oggetti multimediali

In = questo=20 paragrafo vengono illustrati velocemente alcuni argomenti "avanzati" e=20 relativamente "nuovi" dell'HTML. Per maggiori approfondimenti si = consiglia la=20 consultazione di manuali di HTML 4.0.

3.3.1 Uso dei FRAME

I=20 FRAME (riquadri) sono delle suddivisioni della finestra del = browser in=20 cui possono essere visualizzati documenti HTML diversi. In pratica con = essi si=20 possono presentare pagine WEB multiple in finestre indipendenti definite = all'interno di una finestra principale del navigatore.

La = prima=20 versione di HTML che include i frame =E8 la 4.0; non tutti i browser = sono per=F2 in=20 grado di supportarli ed inoltre i documenti che li contengono non sempre = vengono=20 visualizzati nello stesso modo. Se a questo aggiungiamo che frame non = ben=20 strutturati possono confondere gli utenti, che causano problemi di = stampa, che=20 alcuni motori di ricerca non lavorano bene in loro presenza e che spesso = si crea=20 confusione tra la URL del documento che contiene i frame e le URL dei = documenti=20 che sono in essi contenuti, si pu=F2 concludere che il loro uso =E8 = raccomandabile=20 solo quando veramente necessario.

Ad = esempio=20 possono essere utili se si hanno siti WEB con molti livelli di pagine; = in tal=20 caso si potrebbe pensare di usare un frame per visualizzare un indice = del sito=20 in modo permanente ed un altro per contenere le varie pagine che si = richiamano=20 durante la navigazione.

Per definire=20 una pagina che deve contenere frame si usa un documento HTML particolare = chiamato FRAMESET che si differenzia da quelli visti finora in = quanto=20 contiene l'elemento <FRAMESET> al posto di <BODY>.

Vediamo un=20 esempio:


<HTML>

<HEAD>

<TITLE>Esempio=20 con i FRAME</TITLE>

</HEAD>

<FRAMESET=20 COLS=3D"50%,50%" BORDERCOLOR=3D"#00FF00">

<FRAME=20 SRC=3D"doc1.html">

<FRAME=20 SRC=3D"doc2.html" NAME=3D"FRAME2">

<NOFRAMES>

<BODY>

Se=20 vedete questo messaggio il vostro browser non gestisce i frame.

Per=20 visualizzare i documenti cliccare sui link:

<A=20 HREF=3D"doc1.html">Primo documento</A>

<A=20 HREF=3D"doc2.html">Secondo documento</A>

</BODY>

</NOFRAMES>

</FRAMESET>

</HTML>


Il = bordo del=20 riquadro viene impostato di colore verde con l'attributo BORDERCOLOR (il = default=20 =E8 grigio).

In = questa=20 pagina si ha una suddivisione in due colonne uguali, grazie = all'attributo=20 COLS=3D"50%,50%", contenenti rispettivamente i documenti doc1.html e = doc2.html. Se=20 si vogliono definire frame in orizzontale si usa ROWS al posto di COLS e = si=20 possono anche definire delle "griglie" di frame unendo i due attributi; = ad=20 esempio:


<FRAMESET=20 COLS=3D"300,*" ROWS=3D"25%,50%,25%">


La = grandezza=20 dei riquadri pu=F2 essere specificata anche in pixel: nell'esempio la = prima=20 colonna =E8 grande 300 pixel, la seconda colonna occupa lo spazio = restante nella=20 finestra (*).

E' = anche=20 possibile usare frame nidificati continuando a dividere un riquadro in = pi=F9 parti=20 fino ad un massimo di nove frame presenti nella finestra. Si deve per=F2 = tenere=20 presente che l'uso contemporaneo di pi=F9 di 2-3 riquadri pu=F2 favorire = errori=20 nella realizzazione del documento e pu=F2 creare disorientamento = nell'utente=20 finale che lo visualizza.

Quando si=20 usano i riquadri nidificati, il primo frameset si chiama frameset di=20 appartenenza e gli altri frameset dipendenti.


Esempio con=20 frameset nidificati:


<HTML>

<HEAD>

<TITLE>Esempio=20 con i FRAME nidificati</TITLE>

</HEAD>

<FRAMESET=20 COLS=3D"200,*" BORDERCOLOR=3D"#00FF00">

<FRAME=20 SRC=3D"doc1.html">

<FRAMESET=20 ROWS=3D"50%,50%">

<FRAME=20 SRC=3D"doc2.html" NAME=3D"FRAME2">

<FRAME=20 SRC=3D"doc3.html" NAME=3D"FRAME3">

</FRAMESET>

</FRAMESET>

</HTML>


In = questo=20 modo si ottiene una finestra suddivisa in due colonne, una larga 200 = pixel e=20 l'altra la restante parte dello spazio e a sua volta suddivisa in due = righe di=20 uguale grandezza.


La = parte=20 compresa tra <NOFRAMES> e </NOFRAMES>, nell'esempio = precedente,=20 viene utilizzata dal browser in caso esso non sia in grado di gestire i = frame;=20 infatti rispecchia la struttura di un documento HTML "normale" con i tag = <BODY> e </BODY>.


L'attributo=20 NAME del tag <FRAME> serve ad assegnargli un nome. Ci=F2 =E8 utile = nel caso si=20 voglia fare in modo che i collegamenti attivati su un frame abbiano = "effetto"=20 sull'altro.

Ad = esempio=20 potremmo avere in doc1.html il link seguente in cui compare l'ulteriore=20 attributo TARGET:


<A=20 HREF=3D"doc3.html" TARGET=3D"FRAME2">Cliccare per vedere documento 3=20 </A>


Se = viene=20 attivato questo collegamento, il frame che lo contiene non si altera = mentre sul=20 frame chiamato "FRAME2" si ha la visualizazione della pagina = doc3.html.


Nel caso in=20 un documento ci siano molti link tutti con stesso TARGET si pu=F2 = evitare di=20 scrivere l'attributo per ognuno di essi ricorrendo all'elemento BASE da = inserire=20 nella sezione <HEAD> nel seguente modo:


<HEAD>

<TITLE>Titolo</TITLE>

<BASE=20 TARGET=3D"nome del frame">

</HEAD>


Esistono=20 quattro nomi di destinazioni "speciali" che =E8 possibile assegnare = all'attributo=20 TARGET e precisamente:


"_blank"=20 indica di caricare il documento aprendo una nuova finestra del = navigatore;


"_parent"=20 fa riferimento al frameset di appartenenza (pu=F2 essere utile se si = usano=20 riquadri nidificati);


"_self"=20 indica di caricare il documento nel frame corrente (questa =E8 = l'impostazione di=20 default e quindi ha senso usare questa opzione solo nel caso si voglia = cambiare=20 la destinazione stabilita con un BASE TARGET precedente);

"_top"=20 =E8 forse l'opzione pi=F9 utile e permette di rimuovere tutti i riquadri = presenti=20 nella finestra.


Altri=20 attributi di FRAME sono:


FRAMEBORDER=3D"0"=20 oppure "1" (il default =E8 "1"), con "0" si elimina il bordo di = separazione tra un=20 frame e quello adiacente. In Internet Explorer e Netscape Navigator si = possono=20 usare anche i valori "NO" per avere un bordo normale e "YES" per averlo=20 tridimensionale e si pu=F2 anche impostare lo spessore del bordo con = l'attributo=20 BORDER del tag FRAMESET; questi attributi comunque sono estensioni HTML = fuori=20 dallo standard.


BORDERWIDTH,=20 BORDERHEIGHT si possono usare per stabilire quanto spazio in pixel deve = essere=20 inserito tra i bordi del riquadro (rispettivamente i bordi destro e = sinistro=20 oppure superiore e inferiore) ed il suo contenuto.


NORESIZE=20 permette di impedire il ridimensionamento del frame da parte = dell'utente.


SCROLLING=3D=20 "YES" oppure "NO" oppure "AUTO", il default =E8 "AUTO" ed indica che le = barre di=20 scorrimento vengono aggiunte al riquadro automaticamente quando = necessario; il=20 valore "YES" fa inserire le barre di scorrimento sempre ed il valore = "NO" mai=20 (sconsigliato).

3.3.2 L'elemento INLINE FRAME

L'elemento=20 INLINE FRAME =E8 un elemento di TESTO introdotto con l'HTML 4.0 e = permette di=20 visualizzare un documento separato come parte di una pagina. I tag da = usare sono=20 <IFRAME> e </IFRAME> con gli stessi attributi del tag FRAME = ed in=20 pi=F9 WIDTH, HEIGHT e ALIGN con ovvio significato. Un inline frame = dovrebbe sempre=20 contenere anche del testo alternativo da visualizzare se il browser non = supporta=20 tale elemento.

Vediamo=20 un esempio:


<HTML>

<HEAD>

<TITLE>Esempio=20 con i IFRAME</TITLE>

</HEAD>

<BODY>

Dopo=20 questo testo abbiamo un elemento IFRAME contenente un altro documento=20 HTML

<IFRAME=20 SRC=3D"doc1.html" ALIGN=3D"CENTER" BORDERCOLOR=3D"#00FF00"

NAME=3D"RIQUADRO">

<P>=20 Testo alternativo: il browser non supporta gli IFRAME

<P><A=20 HREF=3D"doc1.html">Cliccare qui per il doc.</A>

</IFRAME>

</BODY>

</HTML>


Come si vede=20 dall'esempio anche ai riquadri IFRAME pu=F2 essere assegnato un nome = esattamente=20 allo stesso scopo visto per i frame: in tal modo =E8 possibile definire = in un=20 altra pagina un collegamento che apra un documento nel riquadro voluto = tramite=20 l'attributo TARGET (con valore "RIQUADRO").

3.3.3 Formattazione con i CSS

I = CSS=20 (Cascading Style Sheet) o fogli di stile sono raccolte di = definizioni che=20 agiscono sull'aspetto di un documento HTML senza influire sulla sua = struttura=20 interna. In teoria i browser grafici potrebbero utilizzare qualsiasi = tipo di=20 foglio di stile, ma per ora l'unico riconosciuto e supportato =E8 quello = di=20 livello 1 chiamato CSS1 e sviluppato dal W3C

Il = vantaggio=20 dell'uso del CSS1 =E8 nel fatto che con esso si pu=F2 intervenire = sull'aspetto del=20 documento senza interferire sul suo contenuto. Per questo in certi casi = =E8=20 preferibile usare i fogli di stile e non gli elementi HTML che servono = allo=20 stesso scopo (ad esempio i tag <HR>, <B>, <FONT>); ad = esempio=20 si pu=F2 creare un unico foglio di stile da utilizzare per tutte le = pagine di un=20 certo sito in modo che il loro aspetto sia uniforme e che le modifiche=20 riguardanti l'aspetto esteriore non debbano essere fatte sui singoli = documenti=20 ma solo sul foglio di stile.

Purtroppo=20 per=F2, a fronte di questi vantaggi, i fogli di stile presentano anche = degli=20 inconvenienti dovuti in parte alla loro natura ed in parte al fatto che = sono=20 strumenti relativamente nuovi e non ancora gestiti in modo completamente = affidabile dai browser grafici. Tra i limiti pi=F9 evidenti del CSS1 = possiamo=20 citare:


  • non =E8=20 stato pensato per definire le operazioni di layout di pagina (cosa = invece=20 possibile ai programmi di Desktop Publishing);

  • non=20 consente il posizionamento assoluto degli oggetti all'interno della=20 pagina;

  • neanche=20 usando il CSS1 =E8 possibile sapere con certezza quali font usa un = certo=20 computer e che dimensioni di finestra verranno usate per visualizzare = il=20 documento e quindi rimane il problema della mancanza di uniformit=E0=20 dell'aspetto di una pagina WEB visualizzata su piattaforme diverse.=20

Vediamo=20 brevemente in che modo si definiscono e si usano i fogli di stile.

Prima di=20 tutto si deve impostare il linguaggio di default (sempre text/css che=20 corrisponde al CSS1) del foglio di stile con:


TYPE=3D"text/css"=20 come attributo di tutti gli elementi di tipo stile usati


oppure=20 inserendo nella sezione HEAD il seguente elemento:


<META=20 HTTP-EQUIV=3D"Content-Style-Type" CONTENT=3D"text/css">


il = secondo=20 metodo ha il vantaggio di effettuare la definizione una volta per tutte=20 all'interno della pagina.


Successivamente=20 si pu=F2 associare un foglio di stile al documento HTML nelle due = maniere di=20 seguito illustrate.

3.3.3.1 Fogli di stile incorporati

In = questo=20 caso i fogli di stile sono definiti all'interno della pagina con l'uso = del tag=20 <STYLE>; esempio:


<HTML>

<HEAD>

<TITLE>Esempio=20 con foglio di stile

</TITLE>

<STYLE=20 TYPE=3D"text/css">

H1,=20 H2 { border: thick solid red;

text-align:=20 center } <! bordo spesso rosso centrato !>

BODY=20 { color: black; background: white; }

P.pippo=20 { font-size: larger;

font-weight:=20 bolder;

text-align:=20 center; }

</STYLE>

</HEAD>

<BODY>

<H1>=20 TITOLO di tipo H1 </H1>

<P>=20

Questo=20 documento &egrave; realizzato con un foglio di stile = incorporato

<P>

<P=20 CLASS=3D"pippo"> Questo paragrafo &egrave; definito nel CSS come = paragrafo=20 di tipo pippo con font grassetto, testo centrato e di dimensioni = grandi

<HR>

Questo=20 invece &egrave; un paragrafo normale.

</BODY>

</HTML>


Alcune brevi=20 spiegazioni: il foglio di stile =E8 definito tra i tag <STYLE> e=20 </STYLE> in esso ci sono una serie di definizioni di elementi (H1e = H2=20 raggruppate, BODY e P.pippo singole) con uno o pi=F9 selettori a = sinistra e delle=20 dichiarazioni racchiuse tra parentesi graffe e separate da ";". Il = significato=20 delle prime due definizioni nell'esempio =E8 abbastanza semplice da = comprendere:=20 tutti gli elementi H1, H2 e BODY del documento assumono le = caratteristiche=20 dichiarate nel foglio di stile.

Qualche=20 considerazione in pi=F9 merita la definizione di P.pippo: con essa si = definisce un=20 paragrafo (P) di =93tipo" pippo con determinate caratteristiche; = successivamente=20 nel documento attraverso l'uso dell'attributo CLASS si fa riferimento a = tale=20 tipo di paragrafo.


Il = risultato=20 che si ottiene con il sorgente dell'esempio =E8 il seguente:



Per maggiori=20 dettagli sulla sintassi del linguaggio CSS1 si rimanda ai testi dedicati = all'argomento.


3.3.3.2 Fogli di stile esterni

Il = modo=20 migliore per associare un foglio di stile ad una pagina HTML =E8 quello = di=20 definirlo esternamente alla pagina stessa (come detto in precedenza = questo=20 permette di definire uno stile standard anche per un intero sito WEB e = di=20 concentrare le modifiche solo sul foglio di stile e non su tutte le = pagine).

Per il=20 collegamento al foglio esterno si usa il tag <LINK> nella sezione = HEAD con=20 gli attributi HREF e REL. Vediamo un esempio:


<HTML>

<HEAD>

<TITLE>Esempio=20 con foglio di stile esterno</TITLE>

<META=20 HTTP-EQUIV=3D"Content-Style-Type" CONTENT=3D"text/css">

<LINK=20 HREF=3D"foglio1.css" REL=3D"STYLESHEET>

</HEAD>


L'attributo=20 REL pu=F2 avere anche il valore "ALTERNATE STYLESHEET" per definire un = foglio di=20 stile alternativo; inoltre si pu=F2 aggiungere l'attributo TITLE per = indicare il=20 nome del foglio (questo servir=E0 in futuro quando i browser saranno in = grado di=20 mostrare all'utente la lista dei fogli di stile associati ad un = documento=20 permettendo di disabilitare quelli non desiderati).

Il = foglio di=20 stile a cui si riferisce l'esempio si chiama foglio1.css e potrebbe = avere il=20 seguente contenuto (definito con un normale editor di testo):


/*=20 Esempio di foglio di stile */

@import=20 url(http://lazzaro.mat.besta/libcss/foglio2.css)

H1,=20 H2 { border: thick solid red;

text-align:=20 center }

BODY=20 { color: black; background: white; }

P.pippo=20 { font-size: larger;

font-weight:=20 bolder;

text-align:=20 center; }


La = riga=20 racchiusa tra /* e */ =E8 un commento; la riga @import serve ad = importare=20 all'interno del foglio di stile ulteriori definizioni contenute nel = foglio a cui=20 fa riferimento l'url (in questo caso foglio2.css nella directory libcss = del=20 server WEB lazzaro.mat.besta; le altre definizioni sono le stesse = utilizzate=20 anche nell'esempio con il CSS incorporato.

3.3.4 Oggetti multimediali

Per inserire=20 oggetti multimediali (suoni e filmati) in un documento HTML si usa=20 principalmente l'elemento di TESTO <OBJECT> che per=F2 =E8 una = novita=20 dell'HTML 4.0 e quindi pu=F2 non essere supportato correttamente da = tutti i=20 browser. Questi, per riprodurre suoni e filmati, usano dei programmi = chiamati=20 PLUG-IN che sono quasi sempre incorporati al loro interno.

Grazie alla=20 tecnica dello streaming =E8 anche possibile ascoltare suoni e = vedere=20 filmati in tempo reale (cio=E8 durante il trasferimento, senza dover = attendere che=20 il file relativo all'oggetto multimediale sia stato completamente = scaricato=20 dalla rete) ma sono necessari appositi programmi come REALAUDIO o = REALVIDEO=20 della societ=E0 NetStream. Si deve comunque tenere conto che la = tecnologia attuale=20 (seppure in costante evoluzione) permette ai personal computer di = riprodurre=20 filmati solo in una porzione ridotta dello schermo e ai "normali" utenti = di=20 Internet, connessi via modem, di ricevere i dati relativi ai video ad = una=20 velocit=E0 che provoca talvolta una riproduzione "a scatti".


I = formati=20 pi=F9 comuni dei file audio sono:


.au Unix=20 audio

.wav=20 Microsoft Wave

.aif=20 Macintosh audio

.ra o .ram=20 RealAudio

.mid o midi=20 MIDI (Music Instrument Digital Interface)

.MP3=20 standard MPEG-1 audio layer III


i = primi=20 quattro contengono suoni digitalizzati con una qualit=E0 non eccezionale = e una=20 richiesta di memoria notevole per pochi secondi di registrazione. I file = MIDI=20 invece contengono "istruzioni musicali" che vengono interpretate ed = eseguite=20 dalla scheda audio del computer che cos=EC pu=F2 riprodurre il brano. I = file midi=20 sono molto piccoli e offrono suoni di elevata qualit=E0 (almeno se si ha = una=20 scheda audio di discreta qualit=E0 dotata di wave table).

I = file MP3=20 sono sicuramente i pi=F9 "famosi" e stanno cambiando la maniera di = acquisire,=20 ascoltare, archiviare musica. L'MP3 =E8 uno standard di compressione di = musica=20 digitalizzata che permette di memorizzare brani con qualit=E0 pari a = quella dei CD=20 occupando circa un decimo dello spazio che sarebbe necessario senza la=20 compressione (una canzone di tre minuti occupa circa 3 MB di memoria). = Diventa=20 quindi possibile scaricare i brani da internet anche con una normale = connessione=20 casalinga, ascoltarli con opportuni lettori software e conservarli sul = proprio=20 hard disk. Gi=E0 si trovano in commercio lettori MP3 simili a walk-man = ma privi di=20 qualsiasi supporto magnetico o ottico in quanto contengono i brani in = una=20 memoria interna aggiornabile. Non =E8 qui il caso di esaminare le = questioni legali=20 che la diffusione dei file MP3 in internet ha scatenato con la = contrapposizione=20 tra le maggiori case discografiche ed alcuni siti che permettevano di = scaricare=20 gratuitamente brani musicali. Sicuramente possiamo prevedere che l'MP3 = sar=E0 per=20 i CD quello che i CD sono stati per i dischi in vinile: il futuro della=20 diffusione della musica sar=E0 basato su Internet e sul formato MP3 o = sulle sue=20 evoluzioni.

Passando ai=20 formati video abbiamo i seguenti tra i pi=F9 diffusi:


.mpg o .mpeg=20 MPEG (Moving Pictures Expert Group)

.avi=20 Microsoft AVI (Audio Video Interleave)

.mov o .qt=20 QuickTime


Tutti i tipi=20 di file video supportano anche l'audio associato ma occupano una grande = quantit=E0=20 di memoria (almeno 1 Mb per 30 secondi di filmato). I migliori da questo = punto=20 di vista sono i filmati MPEG che offrono anche una buona qualit=E0 di=20 riproduzione.

3.3.4.1 Attributi degli oggetti multimediali

L'elemento=20 <OBJECT> prevede gli attributi DATA, TYPE e molti degli attributi = gi=E0=20 visti per le immagini (per definire larghezza, altezza, allineamento, = bordo,=20 ecc.). Non =E8 per=F2 previsto l'attributo ALT in quanto il testo = alternativo si=20 inserisce semplicemente tra i tag <OBJECT> e </OBJECT>.

Esempi:


<OBJECT=20 DATA=3D"symphony.mid" TYPE=3D"audio/midi">Sinfonia in formato=20 midi</OBJECT>


<OBJECT=20 DATA=3D"meteo.mov" TYPE=3D"video/quicktime" ALIGN=3D"LEFT" WIDTH=3D"200" = HEIGHT=3D"150">Filmato da satellite meteo</OBJECT>


L'attributo=20 TYPE pu=F2 essere tralasciato ma si deve essere sicuri che il browser = sar=E0 poi in=20 grado di identificare il tipo di oggetto multimediale solo = dall'estensione del=20 file in questione.

In = certi=20 casi =E8 possibile specificare altri tag: ad esempio, nel caso di file = midi, per=20 far partire automaticamente la riproduzione del brano:


<OBJECT=20 DATA=3D"symphony.mid" TYPE=3D"audio/midi">

<PARAM=20 NAME=3D"AUTOSTART" VALUE=3D"TRUE">

Sinfonia=20 in formato midi

</OBJECT>

3.3.5 Estensioni HTML

Le = estensioni sono degli elementi dell'HTML definiti al di fuori dello = standard=20 ufficiale ma spesso utilizzati dai browser pi=F9 diffusi. Naturalmente = il loro=20 utilizzo non =E8 consigliato se non si =E8 sicuri che tutti coloro che = navigano=20 nelle nostre pagine WEB possono usufruire delle caratteristiche proprie = di tali=20 estensioni. In ogni caso il loro utilizzo non provoca danni: se non sono = supportate sono quasi sempre semplicemente ignorate dal browser.

Alcune delle=20 estensioni pi=F9 diffuse sono le seguenti:


      • testo lampeggiante (funziona in Netscape=20 Navigator):


<BLINK>testo=20 che deve lampeggiare </BLINK>


      • testo=20 scorrevole (funziona con Internet = Explorer):


<MARQUEE=20 ALIGN=3D"TOP" BEHAVIOR=3D"SCROLL" DIRECTION=3D"LEFT"

BGCOLOR=3D"#FF0000"=20 LOOP=3D"INFINITE" SCROLLDELAY=3D"100"

HEIGHT=3D"200"=20 WIDTH=3D"200">

Testo da=20 far scorrere

</MARQUEE>

altri=20 valori possibili per BEHAVIOR sono "SLIDE" e "ALTERNATE";

HEIGHT e=20 WIDTH permettono di dimensionare l'area del testo;

SCROLLDELAY=20 d=E0 il ritardo (in millisecondi) tra scorrimenti successivi.


      • linee=20 colorate (funziona con Intenet Explorer):


<HR=20 COLOR=3D"#FF0000" SIZE=3D"5">

      • musica=20 di sottofondo (funziona con Internet = Explorer)


<BGSOUND=20 SRC=3D"canon.mid" LOOP=3D"INFINITE">


si=20 noti che per avere la musica di sottofondo si pu=F2 anche ricorrere al = seguente=20 elemento da definire nella sezione HEAD (questa non =E8 una = estensione):


<META=20 HTTP-EQUIV=3D"REFRESH" CONTENT=3D"5; URL=3Dcanon.mid">

(il=20 5 significa che la riproduzione parte dopo 5 secondi)


      • oggetti=20 multimediali (funziona con IE e NV)


<EMBED=20 SRC=3D"canon.mid">

Cliccare=20 sul pulsante PLAY per ascoltare il brano

<NOEMBED>

Il=20 browser non &egrave; in grado di riprodurre questo oggetto

</NOEMBED>

</EMBED>


Il=20 testo compreso tra <NOEMBED> e </NOEMBED> viene visualizzato = se il=20 browser non =E8 in grado di riprodurre l'oggetto incorporato.


      • Immagini=20 di sfondo in una tabella (funziona con IE e = NV):


<TABLE>

<TR>

<TD=20 BACKGROUND=3D"immagine.gif">Cella con sfondo</TD>

<TD>Cella=20 senza sfondo</TD>

</TR>

</TABLE>

3.3.6 Immagini mappate

Abbiamo=20 visto in precedenza come sia possibile inserire in un documento una = immagine che=20 agisca come link. Solitamente per=F2 l'effetto dell'attivazione del = collegamento =E8=20 sempre lo stesso in qualsiasi punto dell'immagine lo si attivi. Con le = immagini=20 mappate =E8 invece possibile definire collegamenti diversificati per le = varie zone=20 di una immagine.

I=20 tag da utilizzare per includere delle immagini a mappa in un documento = sono=20 <MAP> e <AREA> nel seguente modo:

<MAP=20 NAME=3D"nomemappa">

<AREA=20 SHAPE=3D"RECT" COORDS=3D"x1,y1,x2,y2" HREF=3D"doc1.html">

<AREA=20 SHAPE=3D"RECT" COORDS=3D"w1,w2,z1,z2" HREF=3D"doc2.html">

...

...=20

</MAP>


Nell'esempio=20 viene definita una immagine di mappa con nome "nomemappa" e varie aree = definite=20 come rettangoli con vertici x1,y1 x2,y2 w1,w2 z1,z2 ecc. che puntano=20 rispettivamente a doc1.html, doc2.html ecc.


Altri valori=20 possibili di SHAPE sono:


"CIRCLE" in=20 tal caso l'area =E8 un cerchio e con COORDS=3D"x,y,raggio" si indicano = le coordinate=20 del centro e la misura del raggio;

"POLY" in=20 tal caso l'area =E8 un poligono e con COORDS=3D"x1,y1,x2,y2,=85.,xN,yN" = si indicano i=20 vertici del poligono.


Per usare la=20 mappa cos=EC definita si deve poi ricorrere al tag IMG con un = l'attributo=20 USEMAP:


<IMG=20 SRC=3D"immag.jpg" USEMAP=3D"#nomemappa">


si = deve=20 notare che il valore si USEMAP =E8 un indirizzo URL standard; = nell'esempio si fa=20 riferimento ad una mappa definita nello stesso documento in cui =E8 = inserito=20 l'elemento IMG, nulla vieta di usare mappe definite in file esterni o=20 addirittura in altri siti WEB.

4 PAGINE = INTERATTIVE E=20 DINAMICHE

4.1=20 Introduzione

Tra i=20 documenti del WEB esiste una importante suddivisione: ci sono pagine = "statiche",=20 quelle esaminate fino a questo momento, e pagine "dinamiche che sono = oggetto di=20 questo capitolo. La spiegazione dei due termini =E8 molto importante = anche per=20 chiarire che le pagine dinamiche non sono assolutamente quelle che = contengono=20 oggetti in movimento (come ad esempio immagini gig animate) ma sono = qualcosa di=20 molto diverso.

Un = documento=20 =E8 statico quando viene definito una volta per tutte e messo a = disposizione degli=20 utenti in una forma fissa almeno finch=E9 il gestore del sito di cui = esso fa parte=20 non decide di variarlo o cancellarlo.

Un = documento=20 =E8 invece dinamico quando viene creato, tutto o in parte, in seguito ad = operazioni interattive svolte dall'utente.

Un = esempio=20 classico =E8 quello di una persona che richiede su Internet informazioni = su un=20 prodotto inserendo i parametri di ricerca in una pagina WEB definita a = tale=20 scopo; i dati vengono inviati al server WEB (presumibilmente della ditta = che=20 commercializza il prodotto) che interroga il database aziendale e = costruisce la=20 pagina HTML di risposta da reinviare al browser dell'utente.

La = tecnologia che per prima ha permesso la realizzazione di documenti WEB = dinamici=20 =E8 stata la CGI (Common Gateway Interface); si tratta di un = protocollo=20 standard che descrive come un WEB server possa invocare programmi = esterni per=20 elaborare dati ricevuti dall'utente ed inseriti in appositi moduli = definiti in=20 pagine HTML.

Ulteriori=20 possibilit=E0 di definire pagine WEB dinamiche si hanno grazie all'uso = delle=20 APPLET o degli SCRIPT ATTIVI definiti con linguaggi di scripting come = JAVASCRIPT=20 o PHP.


Vediamo una=20 prima classificazione di questi strumenti in base alle loro = caratteristiche:


  • una=20 applicazione CGI pu=F2 essere scritta con uno qualsiasi dei linguaggi = di=20 programmazione esistenti, anche quelli "classici" come C o FORTRAN, = =E8=20 "server-side" in quanto viene eseguita sulla macchina in cui risiede = il server=20 WEB ed =E8 "esterna", cio=E8 fisicamente scritta in un file separato = da quello=20 contenente il codice della pagina HTML;

  • le APPLET=20 e gli SCRIPT ATTIVI sono "client-side" cio=E8 eseguiti sulla macchina = in cui=20 risiede il programma di navigazione, le prime sono esterne i secondi = invece=20 sono "embedded" in quanto il loro codice =E8 scritto all'interno dello = stesso=20 file che contiene il sorgente HTML;

  • gli script=20 PHP, infine, sono server-side ed embedded.


Ancho il=20 linguaggio HTML mette a disposizione degli elementi necessari alla = definizione=20 di documenti dinamici: i FORM o MODULI, grazie ai quali possono essere = raccolti=20 i dati immessi dagli utenti.


Inizieremo=20 l'esame delle pagine interattive proprio dai form illustrandone l'uso in = associazione ai programmi o script CGI. Successivamente verranno = trattati:=20 l'interfacciamento ai database con PHP, gli SCRIPT ATTIVI, le APPLET e = verranno=20 fatti cenni al DYNAMIC HTML, alle SERVLET, al WEB ad OGGETTI. Non = saranno invece=20 prese in considerazione soluzioni proprietarie quali ad esempio le ASP=20 (Active Server Page).

4.2 Moduli e programmi = CGI

I = moduli si=20 definiscono in un documento HTML con il tag <FORM> ma la loro = gestione, o=20 meglio, la gestione dei dati in essi contenuti, non avviene con gli = strumenti=20 dell'HTML ma grazie a dei programmi esterni chiamati programmi o script = CGI.=20

Occorre=20 quindi esaminare due aspetti distinti:


    • definizione=20 in HTML degli elementi che compongono il modulo;

    • scrittura=20 del programma, in linguaggio di programmazione, che deve gestire i = dati=20 immessi con esso.

Pi=F9 in=20 dettaglio, la corretta gestione di un form passa attraverso le seguenti=20 fasi:


  • inserimento=20 nella pagina HTML dei tag per la definizione del modulo;

  • indicazione,=20 tramite un attributo dell'elemento FORM, del nome del programma = esterno che=20 deve elaborare i dati;

  • visualizzazione=20 del form da parte del browser che raccoglie gli input dell'utente e li = invia=20 al server WEB;

  • attivazione,=20 da parte del server WEB, del programma indicato al quale sono forniti = gli=20 input ricevuti dal modulo;

  • elaborazione=20 dei dati da parte del programma

  • restituzione=20 dei risultati al browser, spesso mediante la creazione di una nuova = pagina WEB=20 da visualizzare.




I = CGI sono=20 di due tipi in base al linguaggio di programmazione utilizzato per=20 scriverli:


PROGRAMMI=20 CGI, se si usano linguaggi compilati come C, C++, Java;

SCRIPT CGI,=20 se si usano linguaggi interpretati come Perl, script di shell UNIX o = Linux.


Nel proseguo=20 useremo il termine programmi CGI o anche solo CGI per riferirci ad = entrambe le=20 tipologie.


Di = solito=20 tutti i CGI vengono memorizzati in una stessa directory del server WEB = di nome=20 cgi-bin.

Esiste anche=20 un'alternativa per la gestione dei dati di un modulo che consiste = nell'inviarli=20 ad un indirizzo di posta elettronica anzich=E9 ad un programma = esterno.


Nei prossimi=20 due paragrafi si prenderanno in esame le due fasi della gestione di un = form: la=20 sua definizione in HTML e l'elaborazione dei dati con i programmi = CGI.

4.2.1 I moduli

I = form=20 (moduli) iniziano con il tag <FORM> che richiede la chiusura=20 </FORM>; =E8 un elemento di BLOCCO e pu=F2 contenere qualsiasi = altro elemento=20 ma non altri form; i suoi attributi sono:

ACTION, per=20 specificare l'URL a cui inviare i dati del form;

METHOD, per=20 specificare l'azione da svolgere sui dati, i valori possibili sono "GET" = o=20 "POST"; ENCTYPE, per indicare il tipo di MIME usato per il trasferimento = delle=20 informazioni.

TARGET, per=20 definire una nuova finestra dove visualizzare la risposta elaborata dal = CGI.


Esistono poi=20 i cosiddetti attributi di evento come ONMOUSEOVER, ONCLICK, ONSUBMIT, = ONRESET=20 che verranno presi in esame al momento di trattare gli script attivi e = le=20 applet.

Gli=20 attributi pi=F9 importanti sono ACTION e METHOD. Il valore di ACTION = corrisponde=20 all'indirizzo a cui inviare i dati; pu=F2 essere o un indirizzo di posta = elettronica o il nome del programma CGI (completo di percorso) che = dovr=E0=20 ricevere ed elaborare in qualche modo i dati del form.

Il = valore di=20 METHOD pu=F2 essere "GET" oppure "POST"; nel primo caso i dati vengono = accodati=20 all'URL indicato in ACTION, nel secondo caso i dati vengono passati in = modo=20 autonomo attraverso lo standard input al server.

Torneremo=20 pi=F9 diffusamente su questi aspetti nel paragrafo dedicato alla = definizione dei=20 programmi CGI.


Riguardo=20 all'attributo ENCTYPE =E8 opportuno soffermarsi brevemente sui tipi MIME = (Multipurpose Internet Mail Extension) creati originariamente per = descrivere gli allegati di posta elettronica e ora usati, pi=F9 = generalmente, per=20 riconoscere la natura dei file presenti sul WEB. Sono composti da due = parti,=20 tipo principale / tipo specifico come ad esempio: "image/gif" (immagini = di tipo=20 gif), "text/plain" (testo puro) e molti altri.

Un = elenco=20 abbastanza completo =E8 il seguente:


MIME type

Estensione del file

application/activemessage

 

application/andrew-inset

 

application/applefile

 

application/atomicmail

 

application/dca-rft

 

application/dec-dx

 

application/mac-binhex40

hqx

application/mac-compactpro

cpt

application/macwriteii

 

application/msword

doc

application/news-message-id

 

application/news-transmission

 

application/octet-stream

bin dms lha lzh exe class

application/oda

oda

application/pdf

pdf

application/postscript

ai eps ps

application/powerpoint

ppt

application/remote-printing

 

application/rtf

rtf

application/slate

 

application/wita

 

application/wordperfect5.1

 

application/x-bcpio

bcpio

application/x-cdlink

vcd

application/x-compress

 

application/x-cpio

cpio

application/x-csh

csh

application/x-director

dcr dir dxr

application/x-dvi

dvi

application/x-gtar

gtar

application/x-gzip

 

application/x-hdf

hdf

application/x-koan

skp skd skt skm

application/x-latex

latex

application/x-mif

mif

application/x-netcdf

nc cdf

application/x-sh

sh

application/x-shar

shar

application/x-stuffit

sit

application/x-sv4cpio

sv4cpio

application/x-sv4crc

sv4crc

application/x-tar

tar

application/x-tcl

tcl

application/x-tex

tex

application/x-texinfo

texinfo texi

application/x-troff

t tr roff

application/x-troff-man

man

application/x-troff-me

me

application/x-troff-ms

ms

application/x-ustar

ustar

application/x-wais-source

src

application/zip

zip

audio/basic

au snd

audio/midi

mid midi kar

audio/mpeg

mpga mp2

audio/x-aiff

aif aiff aifc

audio/x-pn-realaudio

ram

audio/x-pn-realaudio-plugin

rpm

audio/x-realaudio

ra

audio/x-wav

wav

chemical/x-pdb

pdb xyz

image/gif

gif

image/ief

ief

image/jpeg

jpeg jpg jpe

image/png

png

image/tiff

tiff tif

image/x-cmu-raster

ras

image/x-portable-anymap

pnm

image/x-portable-bitmap

pbm

image/x-portable-graymap

pgm

image/x-portable-pixmap

ppm

image/x-rgb

rgb

image/x-xbitmap

xbm

image/x-xpixmap

xpm

image/x-xwindowdump

xwd

message/external-body

 

message/news

 

message/partial

 

message/rfc822

 

multipart/alternative

 

multipart/appledouble

 

multipart/digest

 

multipart/mixed

 

multipart/parallel

 

text/html

html htm

text/plain

txt

text/richtext

rtx

text/tab-separated-values

tsv

text/x-setext

etx

text/x-sgml

sgml sgm

video/mpeg

mpeg mpg mpe

video/quicktime

qt mov

video/x-msvideo

avi

video/x-sgi-movie

movie

x-conference/x-cooltalk

ice

x-world/x-vrml

wrl vrml


Il = tipo di=20 MIME da usare per trasferire i dati dal form al server HTTP =E8:=20 "application/x-www-form-urlencoded" e deve essere specificato solo nel = caso si=20 usi il METHOD "POST"; questo valore =E8 comunque quello di default = dell'attributo=20 ENCTYPE.

In = pratica=20 serve a comunicare al server che i dati saranno inviati attraverso lo = standard=20 input (il metodo =E8 "POST") ma codificati alla stessa maniera che con = il metodo=20 "GET".

4.2.2 Controlli dei Moduli

Gli elementi=20 specifici usati all'interno dei moduli sono elementi di TESTO chiamati=20 "controlli"; i pi=F9 importanti sono:


<INPUT>=20 per creare vari tipi di input diversi;

<SELECT>=20 per creare menu a scorrimento le cui opzioni sono indicate con il tag=20 <OPTION>;

<TEXTAREA>=20 per l'immissione di righe di testo multiple.

<FIELDSET>=20 per raggruppare pi=F9 controlli di un form.


I = primi tre=20 prevedono l'attributo NAME che permette di indicare il nome della = variabile o=20 del campo che contraddistingue l'elemento in questione. Talvolta si = utilizza=20 anche l'attributo VALUE con il quale si assegna un valore alla variabile = o al=20 campo; pi=F9 spesso per=F2 il valore assunto corrisponde a ci=F2 che = l'utente ha=20 digitato o scelto in corrispondenza di quel campo.

Il = nome ed=20 il valore dei campi sono naturalmente di fondamentale importanza per il=20 programma CGI che deve elaborare i dati inviati dal modulo e si deve = prestare=20 molta attenzione al loro diverso ruolo: in pratica siamo in presenza = della=20 distinzione tra nome di una variabile e suo contenuto, ben nota a chi = conosca i=20 rudimenti della programmazione.

4.2.2.1 Elemento INPUT

Vediamo=20 prima di tutto un esempio molto semplice di modulo con un campo di = input:


<HTML>

<HEAD>

<TITLE>Esempio=20 di modulo</TITLE>

</HEAD>

<BODY>

<H4>ESEMPIO=20 DI INPUT CON RICHIAMO DI PROGRAMMA CGI</H4>

<FORM=20 ACTION=3D"/cgi-bin/cgi-prova.sh" METHOD=3D"GET">

<P><BR><B>Inserire=20 dato da passare al programma&nbsp;&nbsp;</B>

<INPUT=20 TYPE=3D"TEXT" NAME=3D"datoin" SIZE=3D"5" MAXLENGTH=3D"3">

<INPUT=20 TYPE=3D"SUBMIT" VALUE=3D"Invio">

</FORM>

</BODY>

</HTML>


L'aspetto del modulo =E8 il = seguente:


ESEMPIO DI INPUT CON RICHIAMO DI = PROGRAMMA=20 CGI


Inserire dato da passare al = programma  =20 =







In=20 questo esempio si chiede l'inserimento di un dato che viene passato con = metodo=20 "GET" al programma "cgi-prova.sh" (presumibilmente scritto con i comandi = della=20 shell di linux o unix, data l'estensione "sh") residente nella directory = "/cgi-bin". Il dato viene identificato come "datoin" dal programma, = viene=20 immesso in una casella lunga 5 caratteri ma pu=F2 essere lungo al = massimo 3=20 caratteri. L'invio dei dati avviene cliccando sul pulsante definito dal=20 controllo "SUBMIT". In questo esempio tale controllo non ha l'attributo = NAME che=20 potrebbe invece servire nel caso si debbano distinguere vari pulsanti di = invio=20 in uno stesso modulo.


Tra gli=20 attributi di <INPUT> il pi=F9 importante =E8 TYPE il cui valore = permette di=20 definire vari tipi di controlli:


TYPE=3D"SUBMIT"=20 crea un pulsante da usare per l'invio dei dati;

TYPE=3D"RESET"=20 crea un pulsante per la reinizializzazione dei campi del modulo;

TYPE=3D"TEXT"=20 crea un campo di testo di una sola riga;

TYPE=3D"RADIO"=20 crea un pulsante di opzioni

TYPE=3D"CHECKBOX"=20 crea una casella di selezione

TYPE=3D"IMAGE"=20 come submit ma con una immagine al posto del pulsante

TYPE=3D"HIDDEN"=20 crea un elemento che non appare nel modulo ma ha un nome e un valore

TYPE=3D"PASSWORD"=20 crea un campo in cui i dati immessi sono visualizzati come = asterischi

TYPE=3D"BUTTON"=20 crea un pulsante generico definito dal programmatore

TYPE=3D"FILE"=20 usato per inviare un file insieme ai dati del modulo


Nei prossimi=20 due esempi sono presenti tutti i controlli della lista ancora non = esaminati (ad=20 eccezione di "BUTTON" che verr=E0 usato in seguito) nonch=E9 altri = possibili=20 attributi del tag <INPUT>:


<HTML>

<HEAD><TITLE>Esempio=20 con controlli vari</TITLE></HEAD>

<BODY>

<DIV=20 ALIGN=3D"CENTER"><B>Esempio con controlli=20 vari</B></DIV>

<P><BR><P>

<FORM=20 ACTION=3D"/cgi-bin/cgi-prova.sh" METHOD=3D"GET">

<INPUT=20 TYPE=3D"HIDDEN" NAME=3D"nascosto" VALUE=3D"aaa">

<P>Fascia=20 di et&agrave;:

<P><INPUT=20 TYPE=3D"RADIO" NAME=3D"fascia" VALUE=3D"0-15">0-15

<P><INPUT=20 TYPE=3D"RADIO" NAME=3D"fascia" VALUE=3D"16-30" CHECKED>16-30

<P><INPUT=20 TYPE=3D"RADIO" NAME=3D"fascia" VALUE=3D"30-50">30-50

<P><INPUT=20 TYPE=3D"RADIO" NAME=3D"fascia" VALUE=3D"50-99">50-99

<P><BR><P>

Seleziona=20 i tuoi campi di interesse:

<P>

<INPUT=20 TYPE=3D"CHECKBOX" NAME=3D"int" VALUE=3D"computer"=20 CHECKED>&nbsp;Computer

<INPUT=20 TYPE=3D"CHECKBOX" NAME=3D"int" = VALUE=3D"musica">&nbsp;Musica

<INPUT=20 TYPE=3D"CHECKBOX" NAME=3D"int" = VALUE=3D"sport">&nbsp;Sport

<P><BR><P>

Inserisci=20 la password:&nbsp;<INPUT TYPE=3D"PASSWORD" NAME=3D"psw" = SIZE=3D"8"=20 MAXLENGTH=3D"8">

<P><INPUT=20 TYPE=3D"IMAGE" SRC=3D"poweredby.png" ALT=3D"Invio" = ALIGN=3D"RIGHT">

<P><INPUT=20 TYPE=3D"RESET" VALUE=3D"Pulisci campi" SIZE=3D"10">

</FORM>

</BODY>

</HTML>


L'aspetto=20 di questo modulo =E8 il seguente:







Alcuni=20 degli attributi utilizzati in questo esempio sono di immediata = comprensione,=20 anche perch=E9 gi=E0 visti in precedenza (come SRC, ALT, ALIGN). = L'attributo CHEKED=20 viene usato in caso di controlli che prevedono pi=F9 alternative per = preimpostarne=20 una o alcune.

I=20 controlli "HIDDEN" possono essere utili nel caso si debbano inviare dei = dati=20 fissi al programma CGI senza che l'utente possa vederli e tantomeno=20 variarli.

L'invio=20 dei dati del modulo avviene cliccando sull'immagine che appare in fondo = a=20 destra.



<HTML>

<HEAD><TITLE>Esempio=20 con trasf. di file</TITLE></HEAD>

<BODY>

<DIV=20 ALIGN=3D"CENTER"><B>TRASFERIMENTO DI = FILE</B></DIV>

<P><BR><P>

<FORM=20 ENCTYPE=3D"multipart/form-data" = ACTION=3D"/cgi-bin/cgi-prova.sh">

<P>

File=20 da inviare:&nbsp;<INPUT TYPE=3D"FILE" NAME=3D"file">

<P>

<INPUT=20 TYPE=3D"SUBMIT" SIZE=3D"5" VALUE=3D"INVIO">

</FORM>

</BODY>

</HTML>


Questo=20 modulo ha il seguente aspetto:


TRASFERIMENTO DI FILE



Sfoglia

File da inviare: 

=










Il=20 controllo "FILE" permette di inviare un file al programma CGI; presenta = un=20 bottone "BROWSE" o "SFOGLIA" inserito automaticamente per permettere la = ricerca=20 del file da inviare all'interno della macchina locale. Si noti che nel = caso di=20 invio di un file si deve usare l'attributo di <FORM> ENCTYPE con = valore=20 "multipart/form-data".

4.2.2.2 = Elemento=20 SELECT

L'elemento=20 <SELECT> crea un menu a cascata e prevede obbligatoriamente = l'attributo=20 NAME; le opzioni del menu sono indicate ognuna con <OPTION> e al = termine =E8=20 necessario il tag di chiusura </SELECT>.

Altri=20 attributi utilizzabili sono:

SIZE=20 (attributo di <SELECT>) per indicare il numero di voci di menu = visibili=20 contemporaneamente;

MULTIPLE=20 (attributo di <SELECT>) per dare la possibilit=E0 di selezionare = pi=F9 di una=20 voce;

SELECTED=20 (attributo di <OPTION>) per indicare una voce di default;

VALUE=20 (attributo di <OPTION>) per indicare un testo, associato alla = scelta=20 effettuata, da inviare al programma CGI; se manca tale attributo, il = testo=20 inviato corrisponde al nome dell'opzione.

4.2.2.3 Elemento=20 TEXTAREA

Con l'elemento <TEXTAREA> si pu=F2 = creare una=20 casella di testo contenente pi=F9 righe. Si deve chiudere con = </TEXTAREA> ed=20 =E8 obbligatorio l'attributo NAME. Ci sono anche gli attributi = ROWS e COLS=20 con i quali si indica l'ampiezza della casella di testo senza per=F2 = limitare la=20 quantit=E0 di caratteri inseribili. Quasi tutti i browser infatti = inseriscono le=20 barre di scorrimento a sinistra ed in basso in caso la quantit=E0 di = caratteri=20 immessi superi la dimensione della casella.

Si = pu=F2 anche=20 inserire un testo di default semplicemente scrivendolo tra i tag=20 <TEXTAREA> e </TEXTAREA>.


Nel seguente=20 esempio viene mostrato l'uso degli elementi <SELECT> e=20 <TEXTAREA>:


<HTML>

<HEAD><TITLE>Esempio=20 con SELECT e TEXTAREA</TITLE></HEAD>

<BODY>

<DIV=20 ALIGN=3D"CENTER"><B>Esempio con SELECT e=20 TEXTAREA</B></DIV>

<P><BR><P>

<FORM=20 ACTION=3D"/cgi-bin/cgi-prova.sh" METHOD=3D"POST">

Componenti=20 da acquistare:<P>

<SELECT=20 NAME=3D"comp" MULTIPLE SIZE=3D"6">

<OPTION=20 SELECTED>Main board

<OPTION=20 SELECTED>Cpu

<OPTION=20 SELECTED>Ram

<OPTION>Floppy=20 disk 120 Mb

<OPTION>Floppy=20 disk 1,44 Mb

<OPTION>Hard=20 disk IDE

<OPTION>Hard=20 disk SCSI

<OPTION>Scheda=20 video

<OPTION>Scheda=20 audio

</SELECT>

<P><BR><P>Inserire=20 un commento<P>

<TEXTAREA=20 NAME=3D"commento" ROWS=3D"5" COLS=3D"50">

Testo=20 inserito preventivamente

</TEXTAREA>

<P><INPUT=20 TYPE=3D"SUBMIT" SIZE=3D"5" VALUE=3D"INVIO">

</FORM>

</BODY>

</HTML>


Il=20 modulo che si ottiene =E8 il seguente:


Esempio con SELECT e TEXTAREA



Componenti da acquistare:

=20

Inserire un commento

=


























4.2.2.4Elemento FIELDSET e attributo TABINDEX

Con=20 l'elemento <FIELDSET> si possono raggruppare, incorniciandoli=20 automaticamente, pi=F9 controlli di un form. Si raggruppano tutti i = controlli=20 presenti fino al tag di chiusura </FIELDSET>; all'interno si pu=F2 = usare il=20 tag <LEGEND> per aggiungere una legenda posizionandola con = l'attributo=20 ALIGN.


Resta infine=20 da segnalare l'attributo TABINDEX, utilizzabile per tutti i controlli di = un=20 form, con il quale si pu=F2 cambiare l'ordine di selezione dei controlli = all'interno di un modulo. La sintassi da usare =E8:


TABINDEX=3D"numero"


i numeri alti hanno la precedenza rispetto a quelli = bassi o=20 negativi. I caso di assenza di questo attributo, l'ordine di selezione = dei=20 controlli corrisponde a quello di apparizione all'interno del = modulo.

4.3 = Definizione=20 e utilizzo dei programmi CGI

4.3.1 Scrittura di un CGI

Per potere=20 scrivere ed utilizzare dei programmi CGI occorre prima di tutto che il = server=20 WEB sia configurato per la loro esecuzione e che sia possibile = memorizzarli in=20 una apposita directory dello stesso (di solito /cgi-bin); inoltre =E8 = necessario=20 che sul server sia possibile eseguire i programmi nel linguaggio di=20 programmazione scelto per realizzare i CGI (ad esempio se si scrivono in = linguaggio PERL, sul server deve essere installato l'interprete = PERL).

Soddisfatti=20 questi prerequisiti si pu=F2 passare alla realizzazione dei programmi. = Essi=20 generalmente ricevono dati in input dal browser tramite il server WEB = (vedere il=20 diagramma ad inizio capitolo) e possono manipolarli liberamente.

I = risultati=20 invece devono avere caratteristiche molto precise; innanzitutto devono = iniziare=20 con una particolare intestazione che non viene mai visualizzata e pu=F2 = essere:=20 "Location", "Status", o "Content-type". Quest'ultima =E8 la pi=F9 usata = e serve a=20 fornire al browser informazioni sul contenuto del documento di risposta; = il suo=20 formato =E8:


Content-type:=20 "tipo MIME"


e=20 deve essere seguita necessariamente da una riga vuota.

Dei=20 tipi MIME abbiamo gi=E0 parlato in precedenza, ricordiamo solo i pi=F9 = utilizzati in=20 questo contesto:


Contenuto=20 output Tipo MIME da usare


HTML=20 text/html

testo=20 text/plain

immagine=20 GIF image/gif

immagine=20 JPEG image/jpeg

video=20 MPEG video/mpeg


Naturalmente=20 il contenuto della parte rimanente dell'output deve essere congruente = con quanto=20 dichiarato nell'intestazione; quindi nel caso ad esempio Content-type = sia=20 "text/html", il programma CGI deve creare il resto del documento di = risposta in=20 linguaggio HTML.


Un=20 altro tipo di risposta che pu=F2 essere fornita da un programma CGI = consiste=20 nell'invio di una pagina WEB gi=E0 pronta, residente sul server o presso = qualsiasi=20 altro indirizzo in rete. In tal caso il documento di output deve = contenere solo=20 l'intestazione che sar=E0 di tipo "Location" con questa sintassi:


Location:=20 "URL della pagina da inviare"


anche=20 in questo caso =E8 necessario aggiungere una riga vuota dopo = l'intestazione.


Il=20 terzo tipo di risposta si ottiene con la riga di intestazione "Status", = sempre=20 seguita da una riga vuota. Pu=F2 essere utilizzata nel caso il programma = CGI non=20 debba fornire alcun risultato visibile; si scrive allora la seguente=20 intestazione nel documento di output:


Status:=20 204 No Response


I=20 browser sono in grado di interpretare vari codici di stato nell'ambito = della=20 connessione al server tramite il protocollo HTTP; in particolare il = codice 204=20 viene interpretato come richiesta di non svolgere alcuna operazione. =


Altri=20 codici di risposta importanti in cui pu=F2 capitare di imbattersi = sono:


200=20 OK;

404=20 Documento non trovato;

500=20 Errore interno del server.

4.3.2 Passaggio dei dati del modulo

Al = momento=20 della definizione di un modulo, come abbiamo visto, occorre specificare = il nome=20 e la locazione del CGI che deve trattare i dati e anche il modo in cui = essi=20 vengono trasferiti al CGI stesso. Ricordando che allo scopo si usano gli = attributi ACTION e METHOD del tag <FORM>, vediamo il seguente = esempio di=20 definizione di un modulo (tralasciando i dettagli dei controlli) in cui = si fanno=20 queste ipotesi:


il = programma=20 CGI si chiama cgi-prova.sh e risiede nella directory /cgi-bin del server = WEB,

nel modulo=20 sono inseriti due campi con NAME "cognome" e "nome",

i = valori dei=20 due campi inseriti dall'utente sono "Paperino" e "Paolino" = rispettivamente.


<FORM=20 ACTION=3D"/cgi-bin/cgi-prova.sh" METHOD=3D"GET">

...

...

</FORM>


In = caso di=20 invio con metodo "GET" i dati, nella forma "nome=3Dvalore", vengono = accodati=20 all'URL indicato in ACTION separandoli da esso con il carattere "?"; = inoltre=20 ogni coppia nome-valore =E8 separata dalla successiva con il carattere = "&".=20 Quindi l'URL effettivo diventa:


"cgi-bin/cgi-prova.sh?cognome=3DPaperino&nome=3DPaolino"


Il = programma=20 cgi-prova.sh riceve i dati nella variabile di ambiente QUERY_STRING che = assume=20 il valore "cognome=3DPaperino&nome=3DPaolino".


L'alternativa =E8=20 usare il metodo "POST":


<FORM=20 ACTION=3D"/cgi-bin/cgi-prova.sh" METHOD=3D"POST">

...

...

</FORM>


In=20 questo caso i dati vengono passati attraverso il canale di input = standard mentre=20 la variabile QUERY_STRING rimane vuota; il programma CGI deve quindi=20 preoccuparsi di leggere lo standard input dove trova la stringa:=20 "cognome=3DPaperino&nome=3DPaolino".

Il=20 metodo "POST" =E8 quello da usare obbligatoriamente nel caso i dati = debbano essere=20 trasferiti ad un indirizzo di posta elettronica; negli altri casi si = possono=20 usare indifferentemente i due metodi.

Occorre=20 per=F2 osservare che il metodo "GET" =E8 il meno indicato per due = motivi: =E8 soggetto=20 ai limiti di lunghezza degli URL (circa 2 Kbyte) e quindi d=E0 problemi = in=20 presenza di una grossa mole di dati da trasferire e rende visibili i = dati=20 accodati agli URL anche se questi sono di tipo password.


Nel=20 caso infine si usi un modulo per trasferire un file, il programma CGI = deve=20 essere di tipo particolare: non deve aspettarsi stringhe in input n=E9 = in=20 QUERY_STRING n=E9 nello standard input, ma deve essere predisposto alla = lettura=20 del file inviato dallo standard input.

4.3.3 Decodifica dell'input

Come=20 abbiamo visto, indipendentemente dal metodo usato per l'invio, l'input = arriva al=20 programma CGI come una stringa composta da coppie nome=3Dvalore come la=20 seguente:


"nome1=3Dvalore1&nome2=3Dvalore2&nome3=3Dvalore3......";<= /P>

questo=20 formato di invio prende il nome di "codifica URL" e si basa sulle = seguenti=20 regole:

    • ogni=20 coppia nome=3Dvalore =E8 separata dal carattere "&";

    • gli=20 elementi di ogni coppia sono separati dal simbolo di uguale;

    • se=20 un campo non contiene alcun valore, la coppia corrispondente diventa = "nome=3D";

    • gli=20 spazi nell'input sono rappresentati da segni "+";

    • i=20 caratteri speciali, cio=E8 quelli con codice ASCII maggiore di 127, = e i=20 caratteri "=3D", "&", "%", "/", "~", "@", "+" vengono = rappresentati in=20 esadecimale preceduti dal simbolo "%".


Vediamo=20 in dettaglio le codifiche di questi ultimi:


Carattere=20 - Codifica


=3D=20 - %3D

&=20 - %26

%=20 - %25

/=20 - %2F

~=20 - %7E

@=20 - %40

+=20 - %2B


Il=20 programma CGI deve per prima cosa fare il "parsing" dell'input, cio=E8=20 decodificarlo, tenendo conto di tutte le regole appena illustrate , solo = successivamente pu=F2 svolgere le elaborazioni sui dati cos=EC = ottenuti.

Essendo=20 la fase di decodifica necessaria in qualsiasi elaborazione CGI, esistono = moltissimi strumenti, reperibili anche in Internet, che svolgono questa=20 operazione.

Un=20 esempio e' il programma "uncgi" scritto in linguaggio C scaricabile=20 all'indirizzo


"http://www.midwinter.com/~koreth/uncgi.html",


utilizzabile=20 su server Linux, Unix e, in certi casi anche Windows.

Una=20 volta scaricato il programma si deve compilarlo, seguendo le istruzioni=20 allegate, e installare l'eseguibile ottenuto nella directory apposita = del server=20 (presumibilmente /cgi-bin).

Per=20 illustrarne il funzionamento riprendiamo in considerazione l'esempio del = paragrafo precedente in cui la stringa di input era:


"cognome=3DPaperino&nome=3DPaolino"

per=20 fare in modo che tale input venga decodificato dal programma uncgi = l'attributo=20 ACTION deve essere valorizzato nel modo seguente:


ACTION=3D"/cgi-bin/uncgi/cgi-prova.sh"

In=20 questo modo infatti i programmi indicati dopo "/cgi-bin" vengono = eseguiti uno=20 dopo l'altro: per primo "uncgi" che riceve la stringa di input e la=20 decodifica.

Si=20 deve notare che tale programma funziona indifferentemente con entrambi i = metodi=20 di invio "GET" e "POST". Al termine della sua esecuzione restituisce le=20 variabili della stringa di input decodificate e precedute dal prefisso=20 "WWW_".

Il programma "cgi-prova.sh" quindi pu=F2 = essere scritto=20 senza preoccuparsi della fase di decodifica e tenendo conto che le = variabili=20 provenienti dal form hanno i nomi: "WWW_cognome" e = "WWW_nome".

4.3.4 Variabili di ambiente

Un=20 programma CGI ha a disposizione un gruppo di "variabili di ambiente" che = vengono=20 valorizzate automaticamente dal server HTTP e che il programma pu=F2 = usare=20 liberamente.

Segue=20 l'elenco delle pi=F9 importanti di tali variabili con una breve = descrizione del=20 loro contenuto:


NOME=20 VARIABILE CONTENUTO


SERVER_NAME=20 Nome della macchina su cui funziona il programma CGI;

SERVER_SOFTWARE=20 Il server WEB utilizzato, ad esempio Apache 1.2.4;

GATEWAY_INTERFACE=20 Versione del CGI in esecuzione (di solito CGI/1.1);

SERVER_PROTOCOL=20 Protocollo HTTP usato dal server (di solito HTTP/1.0);

SERVER_PORT=20 Porta per il collegamento al server WEB (di solito 80);

REQUEST_METHOD=20 Metodo usato per l'invio dei valori: "POST" o "GET";

HTTP_ACCEPT=20 Elenco di MIME che il browser =E8 in grado di accettare;

SERVER_ADMIN=20 Indirizzo E-Mail dell'amministratore del server;

HTTP_USER_AGENT=20 Nome e versione del browser che ha inviato i dati;

HTTP_REFERER=20 Nome del documento HTML che ha inviato i dati;

SCRIPT_NAME=20 Nome del programma CGI completo di percorso;

QUERY_STRING=20 Stringa di input se il metodo di invio =E8 "GET";

REMOTE_HOST=20 Nome della macchina che ha inviato i dati;

REMOTE_ADDR=20 Indirizzo IP della macchina che ha inviato i dati;

REMOTE_USER=20 Nome dell'utente che ha inviato i dati (valorizzato solo se il server = richiede=20 l'autenticazione dell'utente);

CONTENT_TYPE=20 Tipo MIME dei dati inviati;

CONTENT_LENGTH Numero di byte nello = standard input,=20 se il metodo di invio =E8 "POST";

PATH_INFO=20 Informazioni aggiuntive passate aggiungendo un percorso in coda all'URL=20 specificato come valore di ACTION;

PATH_TRANSLATED=20 Percorso completo ottenuto da quello contenuto nella variabile = precedente=20 aggiungendo in testa il DOCUMENT ROOT del server WEB cio=E8 il percorso = di base=20 dei documenti HTML (di solito /home/httpd/html).


Il=20 contenuto di queste variabili si ottiene anteponendo al loro nome il = simbolo=20 "$".


Di=20 seguito vediamo un esempio in cui si usa un modulo di input che richiama = un=20 programma CGI scritto con i comandi della shell Bash di Linux; tale = programma=20 crea un documento di risposta in cui sono visualizzati i valori delle = variabili=20 appena elencate.


Sorgente=20 HTML del modulo:


<HTML>

<HEAD>

<TITLE>Esempio=20 di modulo per visualizzare variabili</TITLE>

</HEAD>

<BODY>

<H4>ESEMPIO=20 DI INPUT E VISUALIZZAZIONE VARIABILI DI AMBIENTE</H4>

<FORM=20 ACTION=3D"/cgi-bin/uncgi/cgi-var.sh/altri_dati/passati/via_url"=20 METHOD=3D"GET">

<P><BR><B>Inserire=20 dato da passare al programma&nbsp;&nbsp;</B>

<INPUT=20 TYPE=3D"TEXT" NAME=3D"dato" SIZE=3D"5" MAXLENGTH=3D"3">

<INPUT=20 TYPE=3D"SUBMIT" VALUE=3D"Invio">

</FORM>

</BODY>

</HTML>


Aspetto=20 del modulo:


ESEMPIO DI INPUT E VISUALIZZAZIONE VARIABILI DI = AMBIENTE


Inserire dato da passare al = programma  =20









Programma=20 CGI cgi-var.sh:


#!/bin/sh

#

#=20 Programma cgi scritto in shell per la visualizzazione delle var. di=20 ambiente

#

echo=20 "Content-type: text/html"

echo

echo=20 "<HTML>"

echo=20 "<HEAD>"

echo=20 "<TITLE>Test variabili di ambiente CGI</TITLE>"

echo=20 "</HEAD>"

echo=20 "<BODY>"

echo=20 "<H4>Test variabili di ambiente CGI</H4>"

echo=20 "<PRE>"

echo

echo=20 "SERVER_NAME =3D $SERVER_NAME"

echo=20 "SERVER_SOFTWARE =3D $SERVER_SOFTWARE"

echo=20 "GATEWAY_INTERFACE =3D $GATEWAY_INTERFACE"

echo=20 "SERVER_PROTOCOL =3D $SERVER_PROTOCOL"

echo=20 "SERVER_PORT =3D $SERVER_PORT"

echo=20 "REQUEST_METHOD =3D $REQUEST_METHOD"

echo=20 "HTTP_ACCEPT =3D $HTTP_ACCEPT"

echo=20 "SERVER_ADMIN =3D $SERVER_ADMIN"

echo=20 "HTTP_USER_AGENT =3D $HTTP_USER_AGENT"

echo=20 "HTTP_REFERER =3D $HTTP_REFERER"

echo=20 "SCRIPT_NAME =3D $SCRIPT_NAME"

echo=20 "QUERY_STRING =3D $QUERY_STRING"

echo=20 "REMOTE_HOST =3D $REMOTE_HOST"

echo=20 "REMOTE_ADDR =3D $REMOTE_ADDR"

echo=20 "REMOTE_USER =3D $REMOTE_USER"

echo=20 "CONTENT_TYPE =3D $CONTENT_TYPE"

echo=20 "CONTENT_LENGTH =3D $CONTENT_LENGTH"

echo=20 "PATH_INFO =3D $PATH_INFO"

echo=20 "PATH_TRANSLATED =3D $PATH_TRANSLATED"

echo

echo=20 "Standard input:"

cat

echo=20 "</PRE>"

echo=20 "</BODY>"

echo=20 "</HTML>"


Aspetto=20 del documento di risposta creato da cgi-var.sh:



Test variabili di ambiente CGI

SERVER_NAME =3D =
ferronif.inf.besta
SERVER_SOFTWARE =3D =
Apache/1.3.12 (Unix)  (Red Hat/Linux) PHP/3.0.15 mod_perl/1.21
GATEWAY_INTERFACE =3D =
CGI/1.1
SERVER_PROTOCOL =3D =
HTTP/1.0
SERVER_PORT =3D 80
REQUEST_METHOD =3D GET
HTTP_ACCEPT =3D image/png, =
image/*, */*
SERVER_ADMIN =3D =
root@localhost
HTTP_USER_AGENT =3D Mozilla/3.0 =
(compatible; StarOffice/5.1; Linux)
HTTP_REFERER =3D =
http://127.0.0.1/ese4.html
SCRIPT_NAME =3D =
/cgi-bin/uncgi/cgi-var.sh
QUERY_STRING =3D =
dato=3Dpro
REMOTE_HOST =3D 
REMOTE_ADDR =3D =
127.0.0.1
REMOTE_USER =3D 
CONTENT_TYPE =3D 
CONTENT_LENGTH =3D 
PATH_INFO =3D =
/altri_dati/passati/via_url
PATH_TRANSLATED =3D =
/home/httpd/html/altri_dati/passati/via_url

Standard input:






















4.3.5 Esempio completo

A=20 questo punto possiamo illustrare un esempio completo comprendente un = modulo per=20 l'immissione di alcuni campi di input, il programma CGI per il = trattamento degli=20 stessi (stavolta scritto in linguaggio PERL) e il documento di risposta = creato=20 da tale programma.


Sorgente=20 HTML del modulo:


<HTML>

<HEAD>

<TITLE>Modulo=20 di prova</TITLE>

</HEAD>

<BODY>

<DIV=20 ALIGN=3D"CENTER">

<H4>INPUT=20 DEI DATI</H4></DIV>

<FORM=20 ACTION=3D"/cgi-bin/uncgi/cgi-modulo.pl" METHOD=3D"POST">

<TABLE>

<TR>

<TD>Inserire=20 il cognome&nbsp;&nbsp;

<TD><INPUT=20 TYPE=3D"TEXT" NAME=3D"cognome" SIZE=3D"20" MAXLENGTH=3D"20">

</TR><TR>

<TD>Inserire=20 il nome&nbsp;&nbsp;

<TD><INPUT=20 TYPE=3D"TEXT" NAME=3D"nome" SIZE=3D"20" MAXLENGTH=3D"20">

</TR><TR>

<TD>Inserire=20 la professione&nbsp;&nbsp;

<TD><INPUT=20 TYPE=3D"TEXT" NAME=3D"professione" SIZE=3D"20" = MAXLENGTH=3D"20">

</TR><TR>

<TD>Vuoi=20 informazioni via e-mail ?&nbsp;&nbsp;

<TD>Si<INPUT=20 TYPE=3D"CHECKBOX" NAME=3D"risp" VALUE=3D"si">

No<INPUT=20 TYPE=3D"CHECKBOX" NAME=3D"risp" VALUE=3D"no">

</TR><TR>

<TD>Indirizzo=20 e-mail&nbsp;&nbsp;

<TD><INPUT=20 TYPE=3D"TEXT" NAME=3D"email" SIZE=3D"20" MAXLENGTH=3D"20">

</TR><TR>

<TD><INPUT=20 TYPE=3D"SUBMIT" VALUE=3D"Invio">

<TD><INPUT=20 TYPE=3D"RESET" SIZE=3D"8">

</TR>

</TABLE>

</FORM>

</BODY>

</HTML>


Aspetto=20 del modulo:



INPUT DEI DATI


Inserire il cognome  

=

Inserire il nome  

Inserire la professione  

=

Vuoi informazioni via e-mail ?   =

Si=20 No

Indirizzo e-mail  

=

=20




















Programma=20 CGI cgi-modulo.pl:


#!/usr/bin/perl

#

#=20 cgi-modulo.pl

#

#=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D

#=20 Funzione messaggio

#=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D

sub=20 messaggio {

print=20 ("<P>Clicca <A HREF=3D$ENV{'HTTP_REFERER'}> qui</A> = per tornare=20 a correggere\n");

return=20 0

};

#=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D

#=20 Main

#=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=20

$cognome=20 =3D $ENV{'WWW_cognome'};

$nome=20 =3D $ENV{'WWW_nome'};

$professione=20 =3D $ENV{'WWW_professione'};

$risp=20 =3D $ENV{'WWW_risp'};

$email=20 =3D $ENV{'WWW_email'};

print=20 ("Content-type: text/html\n");

print=20 ("\n");

print=20 ("<HTML>\n");

print=20 ("<HEAD>\n");

print=20 ("<TITLE>Test CGI</TITLE>\n");

print=20 ("</HEAD>\n");

print=20 ("<BODY>\n");

print=20 ("<H1>Resoconto immissione dati</H1>\n");

if=20 ($cognome eq "") {

print=20 ("<P>Cognome obbligatorio\n");

&messaggio;

}=20

else=20 {

if=20 ($nome eq "") {

print=20 ("<P>Nome obbligatorio\n");

&messaggio;

}=20

else=20 {

if=20 (($risp eq "si") && ($email eq "")) {

print=20 ("<P>Se vuoi e-mail inserisci il tuo indirizzo\n");

&messaggio;

}

else=20 {

print=20 ("<P>Cognome:&#160;&#160;&#160;&#160;");

print=20 ("&#160;&#160;&#160; $cognome <P>\n");

print=20 ("Nome:&#160;&#160;&#160;&#160;&#160;&#160;&#= 160;");

print=20 ("&#160;&#160;&#160;&#160;&#160;&#160;&#160; = $nome=20 <P>\n");

print=20 ("Professione:&#160;&#160;&#160;&#160;");

print=20 ("&#160;$professione <P>\n");

print=20 ("Richiesta mail: $risp <P>\n");

print=20 ("Indirizzo:&#160;&#160;&#160;&#160;&#160;&#160;"= );

print=20 ("&#160;&#160;&#160;&#160;&#160;&#160;$email=20 <P>\n");

}=20 } };

print=20 ("</BODY>\n");

print=20 ("</HTML>\n");


Aspetto=20 del documento di risposta creato da cgi-modulo.pl:




4.3.6 Considerazioni finali

Come pi=F9=20 volte fatto notare i programmi CGI vengono sempre eseguiti sul server = WEB al=20 quale ci si collega; ci=F2 comporta alcuni limiti, in particolare:


    • problemi=20 di sicurezza: in quanto attraverso i programmi CGI alcuni utenti = potrebbero=20 accedere, volontariamente o meno, a dati confidenziali contenuti nel = server;

    • problemi=20 di prestazioni: in quanto il server deve elaborare le richieste = provenienti=20 da pi=F9 utenti anche contemporaneamente e quindi la velocit=E0 di = risposta pu=F2=20 diminuire anche drasticamente in caso di sovraccarico del sistema; = inoltre=20 le prestazioni dipendono fortemente dalla velocit=E0 della = connessione tra=20 macchina locale e server visto che tra esse c'=E8 un continuo = scambio di=20 dati;

    • problemi=20 di accessibilit=E0: in quanto, a causa dei problemi di sicurezza, = molti=20 gestori di siti WEB non consentono agli utenti di creare CGI = personalizzati=20 sul proprio server.


Ci = sono per=F2=20 anche importanti vantaggi:


    • compatibilit=E0:=20 in quanto i CGI funzionano con qualsiasi browser, essendo eseguiti = sul=20 server, e producendo risultati in formati universalmente = riconosciuti come=20 l'HTML;

    • utilit=E0:=20 in quanto i CGI possono leggere e scrivere dati centralizzati sul = server,=20 raccogliere dati statistici sugli accessi, interrogare o aggiornare=20 database.


A=20 quest'ultimo aspetto, cio=E8 l'interazione tra pagine WEB e database, = che =E8 molto=20 importante, viene dedicato un approfondimento nel prossimo = paragrafo.

4.4 = WEB e=20 database,PHP

La = possibilit=E0 di interfacciare un database relazionale con il WEB =E8 = senza dubbio=20 assai interessante in quanto unisce la potenza, l'affidabilit=E0, la = sicurezza dei=20 moderni RDBMS (Relational Data base Managment System) con = la=20 facilit=E0 d'uso e la diffusione ormai universale degli strumenti di = navigazione=20 sia in Internet che nelle Intranet aziendali.

I = campi di=20 impiego di questa tecnologia sono numerosissimi: si pensi ad esempio = alla=20 possibilit=E0 di fornire ai cittadini l'accesso via Internet a dati di = interesse=20 pubblico o personale, oppure, all'interno di una azienda, alla gestione = di=20 database con interfacce basate sui normali, e molto amichevoli, = programmi di=20 navigazione.


Queste=20 applicazioni si basano su una architettura a tre livelli: FRONT-END,=20 MIDDLE-TIER, BACK-END.

Il = primo=20 livello =E8 costituito dal form visualizzato con il browser sul client; = il server=20 WEB occupa il secondo livello mentre nel terzo livello risiede il = database=20 server.




In = generale=20 tutte le applicazioni software che prevedono l'accesso a data base si = possono=20 rappresentare come dei sistemi costituiti da tre componenti:


UI = (User=20 Interface), l'interfaccia che acquisisce e convalida gli input = dell'utente e=20 presenta all'utente gli output;

AL = (Application Logic), la componente in cui sono eseguiti gli = algoritmi di=20 manipolazione dei dati;

DB = (Data=20 Base), la componente per la memorizzazione ed il reperimento dei = dati.


Nel nostro=20 caso la componente UI =E8 costituita dal browser in esecuzione sulla = macchina=20 client, la cpmponente AL =E8 il server WEB corredato delle opportune = applicazioni=20 CGI, PHP, ASP o quant'altro, la componente DB =E8 ovviamente il server = DBMS.

Nei prossimi=20 paragrafi esamineremo pi=F9 da vicino i metodi e gli strumenti per = utilizzare e=20 gestire i dati di un database all'interno di un sito.

4.4.1 Strumenti necessari

Per la prima=20 volta nell'ambito di questi appunti viene fatta una precisa scelta "di = campo"=20 relativamente agli strumenti da utilizzare, privilegiando il software = OPEN=20 SOURCE e segnatamente:


    • Linux=20 (distribuzione RedHat) come sistema operativo delle macchine che = fungono da=20 server WEB;

    • Apache=20 come server WEB;

    • PostgreSQL=20 come RDBMS;

    • PHP come=20 linguaggio di interfaccia tra WEB e database.


I = motivi di=20 questa scelta sono in parte "etici" (e qui non ci dilunghiamo in = approfondimenti=20 circa l'opportunit=E0 di usare software libero anzich=E9 proprietario in = ambito=20 educativo), in parte pratici in quanto con estrema facilit=E0 (e = gratuitamente) si=20 ha disposizione tutto il necessario per realizzare siti che utilizzano = database.=20 La scelta =E8 altres=EC pienamente giustificata anche dal punto di vista = tecnico=20 essendo tali prodotti all'avanguardia nel loro settore e molto diffusi = in ambito=20 professionale. Apache, ad esempio =E8 il server WEB nettamente pi=F9 = diffuso nel=20 Mondo mentre PHP =E8 un linguaggio di scripting in grado di rivaleggiare = tranquillamente con il concorrente "proprietario" ASP.


In = questa=20 sede non vengono forniti dettagli sul reperimento e l'installazione dei=20 pacchetti software citati; a tale proposito si rimanda ad appositi testi = o alla=20 documentazione presente anche in Internet.

Supponiamo=20 quindi di avere gi=E0 installato con successo tutto il software su un = Personal=20 computer su cui effettuare le prove e di avere il server Apache che = risponde=20 all'indirizzo http://localhost; inoltre diamo per scontato che il server = sia=20 completo dei moduli di supporto del linguaggio PHP.


Riguardo a=20 PostgreSQL vengono introdotti i comandi necessari alla realizzazione di = semplici=20 esempi di gestione e interrogazione dati tramite il linguaggio PHP.=20 Relativamente ai database relazionali in generale, data la vastit=E0=20 dell'argomento, si consiglia di ricorrere all'abbondante letteratura=20 specialistica.

4.4.2 Database con PostgreSQL (cenni)

PostgreSQL =E8=20 un Sistema di gestione basi dati relazionali molto avanzato e quasi del = tutto=20 rispondente allo standard SQL (Structured Query Language). E' stato = sviluppato=20 originariamente dal dipartimento di informatica dell'Universit=E0 di = Berkeley in=20 California ed =E8 di pubblico dominio e open source.


Una volta=20 installato PostgreSQL con successo si pu=F2 iniziare ad usarlo senza = grosse=20 difficolt=E0. La directory in cui vengono salvati gli archivi =E8 per = default=20 /var/lib/pgsql e l'amministratore del database =E8 l'utente = "postgres" al=20 quale =E8 consigliabile assegnare una password (operazione che deve = essere svolta=20 dall'utente "root" di linux).

Prima di=20 iniziare si deve attivare il programma di gestione del database con il = comando=20 (eseguito sempre da root):


#=20 /etc/rc.d/init.d/postgresql start


Essendo la=20 prima volta che viene eseguito il programma di amministrazione dei = database,=20 vengono creati i file fondamentali per la loro gestione.

In = vista=20 delle esecuzioni successive =E8 opportuno inserire il servizio = postgresql tra=20 quelli attivati automaticamente al boot della macchina mediante il = comando=20 "setup".


Per testare=20 l'installazione collegandosi come root si crea un utente=20 "fulvio":


#=20 adduser fulvio
# passwd fulvio


Poi ci si=20 connette come postgres e si crea lo stesso utente per=20 PostgreSQL:


$=20 createuser fulvio


Il = sistema=20 pone a questo punto delle domande relative al nuovo utente: si risponde = in modo=20 che non sia abilitato a creare database e non sia superuser e si accetta = la=20 creazione automatica di un database che egli possa gestire.


Finalmente =E8=20 il momento di collegarsi come "fulvio" ed eseguire "psql" che =E8 il = programma di=20 interfaccia, in modalit=E0 testuale, verso il database.


Si = pu=F2=20 creare una tabella per le prove di nome rubrica dove archiviare alcuni=20 indirizzi:


fulvio=3D>=20 create table rubrica(cognome varchar(20), nome varchar (20),

fulvio->=20 indirizzo varchar (40), telefono varchar (15), email varchar = (30));


come si vede=20 il comando pu=F2 essere spezzato su pi=F9 righe e non =E8 concluso con = il tasto=20 "Invio" ma con il simbolo ";" la seconda riga =E8 quindi una riga di = continuazione=20 e ci=F2 =E8 evidenziato anche dal prompt che si chiude con i simboli = "->" invece=20 che con "=3D>".


Per inserire=20 un paio di record si usano i seguenti comandi:


fulvio=3D>=20 insert into rubrica values('Rossi', 'Mario',

fulvio->=20 'via Roma 34 Treviso', '04220101010','marioro@aaaa.= it');


fulvio=3D>=20 insert into rubrica values('Paperino', 'Paolino',

fulvio->=20 'via Roma 1 Paperopoli', '010011234567','paperino@abcd.com');


Verifichiamo=20 i dati inseriti con il comando:


fulvio=3D>=20 select * from rubrica;


che ci=20 dovrebbe dare il seguente risultato:


cognome |=20 nome | indirizzo | telefono | email

-------+-----+----------------+-----------+-----------------

Rossi |=20 Mario | via Roma 34 Treviso | 04220101010 | marioro@aaaa.it

Paperino |=20 Paolino| via Roma 1 Paperopoli |010011234567 | paperino@abcd.com

(2 = rows)










Le = stesse=20 operazioni possono essere fatte mediante il programma = "PgAccess"=20 (incluso in Postgres) che fornisce un'interfaccia grafica pi=F9 = amichevole.


Non=20 approfondiamo ulteriormente l'uso di questi strumenti e "conserviamo" il = piccolo=20 archivio creato per utilizzarlo, nel proseguo, come database da = interfacciare=20 con pagine WEB.

4.4.3 Il linguaggio PHP (cenni)

Il = PHP=20 (Personal Home Page) nasce nel 1994 per mano di Rasmus Lerdorf ed = =E8 oggi=20 utilizzato in molte decine di migliaia di siti in tutto il mondo; = essendo un=20 linguaggio di scripting non =E8 dotato di "vita propria" ma viene = utilizzato per=20 estendere le possibilit=E0 dell'HTML.. Viene eseguito dal lato server ed = =E8=20 embedded cio=E8 incluso nei documenti HTML. Si presta molto bene per = scrivere=20 pagine WEB con funzioni di amministrazione di database. I database = supportati=20 sono PostgreSQL, MySQL, Oracle, Sybase, Informix.

La = versione=20 pi=F9 diffusa =E8 la 3 e di questa ci occupiamo, anche se =E8 ormai = disponibile il=20 nuovo PHP4.


I = comandi=20 PHP si inseriscono all'interno di un documento HTML in qualunque = posizione e si=20 distinguono dai normali tag di quest'ultimo racchiudendoli tra le = stringhe=20 "<?php" e "?>".

I = documenti=20 contenenti comandi PHP devono avere necessariamente l'estensione "php" o = "php3"=20 e non "html".


Come primo=20 esempio definiamo nella nostra DOCUMENT ROOT (presumibilmente = /home/httpd/html)=20 un file "prova1.php" con l'unica linea:


<?php=20 phpinfo() ?>


Se = si accede=20 al file con un browser si ottiene una risposta contenente numerose = informazioni=20 riguardanti il PHP, il proprio server WEB ed altro ancora.


Il = linguaggio PHP pu=F2 essere utilizzato anche indipendentemente dalla = connessione a=20 database come evidenziato dal seguente esempio in cui =E8 presente un = documento=20 HTML per l'immissione di dati arricchito con alcuni comandi PHP; i dati = di input=20 vengono passati ad un altro file e trattati ancora con istruzioni = PHP.


Il = sorgente=20 del primo documento =E8:


<HTML>

<HEAD><TITLE>Esempio=20 1 con php</TITLE></HEAD>

<BODY>

<H3>Modulo=20 gestito con PHP</H3>

<P><BR><P>

Sei=20 collegato al server WEB:

<B><?php=20 echo $SERVER_NAME; ?></B>

&nbsp;all'indirizzo:

<B><?php=20 echo $SERVER_ADDR; ?> </B>

<P>Server=20 powered by:

<B><?php=20 echo $SERVER_SOFTWARE; ?></B>

<P>Sei=20 collegato dall'indirizzo:

<B><?php=20 echo $REMOTE_ADDR; ?></B>

<P><BR><P>

Inserisci=20 i tuoi dati anagrafici

<P><FORM=20 ACTION=3D"./php1r.php" METHOD=3D"POST">

<P>Cognome:=20 <INPUT TYPE=3D"TEXT" NAME=3D"cognome" SIZE=3D"20" = MAXLENGTH=3D"20">

<P>Nome:=20 <INPUT TYPE=3D"TEXT" NAME=3D"nome" SIZE=3D"20" = MAXLENGTH=3D"20">

<P>Eta':

<P><INPUT=20 TYPE=3D"RADIO" NAME=3D"eta" VALUE=3D"1-18">1-18

<P><INPUT=20 TYPE=3D"RADIO" NAME=3D"eta" VALUE=3D"19-40">19-40

<P><INPUT=20 TYPE=3D"RADIO" NAME=3D"eta" VALUE=3D"41-65">41-65

<P><INPUT=20 TYPE=3D"RADIO" NAME=3D"eta" VALUE=3D"66-99">66-99

<P>E-mail:=20 <INPUT TYPE=3D"TEXT" NAME=3D"email" SIZE=3D"30" = MAXLENGTH=3D"30">

<P><INPUT=20 TYPE=3D"RESET" VALUE=3D"Reset">

<INPUT=20 TYPE=3D"SUBMIT">

</FORM></BODY>

</HTML>


Il = suo=20 aspetto visualizzato dal browser =E8 il seguente:

Modulo gestito con = PHP



Sei collegato al server WEB: = ferronif.inf.besta=20  all'indirizzo: 127.0.0.1

Server powered by: Apache/1.3.12 (Unix) (Red = Hat/Linux)=20 PHP/3.0.15 mod_perl/1.21

Sei collegato dall'indirizzo: 127.0.0.1

Inserisci i tuoi dati anagrafici

Cognome:

Nome:

Eta':

1-18

19-40 =

41-65 =

66-99 =

E-mail:

=20

































Commentiamo=20 brevemente i comandi di PHP inseriti in questo esempio.


Come gi=E0=20 accennato il PHP =E8 un linguaggio embedded ed infatti le istruzioni = sono inserite=20 all'interno del documento HTML racchiuse tra i tag speciali = <?php e=20 ?>.

Ogni=20 istruzione viene conclusa con ;.

Si = possono=20 inserire commenti su un'unica linea facendoli precedere da // = oppure=20 multilinea racchiudendoli tra /* e */.

Nella prima=20 parte del documento vengono visualizzate informazioni sulla connessione = grazie=20 all'istruzione echo e all'uso di alcune variabili di ambiente=20 (SERVER_NAME, SERVER ADDR, ecc.).

Il = resto del=20 documento contiene la definizione del modulo per la richiesta di = semplici dati=20 anagrafici.

Si = noti che=20 i dati del modulo vengono inviati a "php1r.php" che risiede nella stessa = directory del documento di partenza e non ad un eseguibile memorizzato = in=20 /cgi-bin e scritto in C, PERL o in altri linguaggi non embedded come = invece=20 avveniva nel caso di form gestiti con programmi CGI.


Il = documento=20 di risposta "php1r.php" non =E8 altro che un ulteriore pagina HTML = contenete=20 istruzioni PHP; il suo contenuto =E8:


<HTML>

<HEAD>

<TITLE>Risposta=20 esempio 1 con php</TITLE>

</HEAD>

<BODY>

<H3>Risposta=20 gestita con PHP</H3>

<P><BR><P>

Sei=20 collegato al server WEB:

<B><?php=20 echo $SERVER_NAME; ?></B>

&nbsp;all'indirizzo:

<B><?php=20 echo $SERVER_ADDR; ?> </B>

<P>

Server=20 powered by:

<B><?php=20 echo $SERVER_SOFTWARE; ?></B>

<P>

Sei=20 collegato dall'indirizzo:

<B><?php=20 echo $REMOTE_ADDR; ?></B>

<P><BR><P>

Hai=20 inserito i seguenti dati:

<P>Cognome:=20 <?php echo $cognome; ?>

<P>Nome:=20 <?php echo $nome; ?>

<P>Eta':=20 <?php echo $eta; ?>

<P>E-mail:=20 <?php echo $email; ?>

<P><BR><P><B>

<?php


$var1=20 =3D strstr($HTTP_USER_AGENT, "Mozilla");

if=20 (!strstr($var1, "compatible") and ($var1)) {

echo=20 "Stai usando Netscape Navigator"; }

elseif=20 (strstr($var1, "MSIE")) {

echo=20 "Stai usando Internet Explorer"; }

else=20 {

echo=20 "Stai usando un browser diverso da Explorer e Navigator"; }

?>=20

</B>=20

</BODY>

</HTML>



E = viene cos=EC=20 visualizzato:

Risposta gestita con = PHP



Sei collegato al server WEB: = ferronif.inf.besta=20  all'indirizzo: 127.0.0.1

Server powered by: Apache/1.3.12 (Unix) (Red = Hat/Linux)=20 PHP/3.0.15 mod_perl/1.21

Sei collegato dall'indirizzo: 127.0.0.1



Hai inserito i seguenti dati:

Cognome: Rossi

Nome: Mario

Eta': 19-40

E-mail: rossima@aaaaa.it



Stai usando un browser diverso da Explorer e = Navigator=20



























La = prima=20 parte ricalca quella del primo documento; successivamente vengono = visualizzati i=20 dati inviati dal modulo.

Qui si nota=20 un'altra differenza fondamentale rispetto ai programmi CGI: i dati = inviati sono=20 gi=E0 a disposizione con i nomi definiti nel modulo (grazie = all'attributo NAME) e=20 non occorre alcuna operazione di decodifica n=E9 tantomeno l'uso della = variabile=20 QUERY_STRING o la lettura dello standard input. Inoltre =E8 del tutto = ininfluente=20 che il metodo usato per l'invio sia "POST" oppure "GET".


Nell'ultima=20 parte del sorgente c'=E8 un blocco di codice PHP pi=F9 complesso:

prima viene=20 definita una variabile con nome $var1 (notare che i riferimenti a = tutte=20 le variabili in PHP avvengono facendo precedere il nome dal simbolo = $);=20 il suo contenuto =E8 il risultato della funzione PHP strstr = definita sulla=20 stringa $HTTP_USER_AGENT (altra variabile di ambiente contenente il nome = del=20 browser usato) con argomento "Mozilla". Il risultato di tale funzione = =E8 la=20 stringa ottenuta da quella di partenza escludendo la parte precedente la = parola=20 "Mozilla".

Successivamente=20 viene utilizzata l'istruzione if.....elseif....else.... sulla = quale =E8=20 opportuno soffermarsi pi=F9 a lungo: le condizioni da verificare sono = racchiuse=20 tra parentesi tonde, il simbolo ! significa negazione, il blocco = di=20 istruzioni da eseguire nel caso di condizione verificata =E8 racchiuso = tra=20 parentesi graffe.

La = logica di=20 questa istruzione =E8 la seguente:

se = $var1 =E8 diversa dalla stringa vuota e non contiene la stringa=20 "compatible" stiamo usando il browser "Mozilla" (o Netscape Navigator),=20 altrimenti se $var1 contiene la stringa "MSIE" stiamo usando = Internet=20 Explorer, altrimenti stiamo usando un browser diverso da entrambi.

4.4.4 Funzioni PostgreSQL di PHP (cenni)

Il = linguaggio PHP comprende molte funzioni da utilizzare per lavorare con=20 PostgreSQL; l'elenco completo si pu=F2 trovare nel manuale=20 (http://www.php.net/manual). Per i nostri scopi attuali =E8 sufficiente = conoscere=20 solo alcune di queste funzioni e precisamente:


  • pg_connect=20 - apre una connessione a PostgreSQL; richiede come parametri un = nome-host, il=20 nome del database, nome utente e password;

  • pg_exec -=20 esegue un'istruzione SQL;

  • pg_numrows=20 - restituisce il numero di record contenuti nel risultato di=20 un'istruzione;

  • pg_result=20 - ritorna dei valori estratti da una tabella di interrogazione = ottenuta con=20 pg_exec;

  • pg_errormessage=20 - restituisce l'eventuale messaggio di errore dopo una operazione = senza buon=20 esito su una certa connessione;

  • pg_close -=20 chiude la connessione corrente.


Nell'esempio=20 seguente viene realizzato un modulo per inserire i dati nella base dati=20 "rubrica" definita in precedenza con PostgreSQL. Con lo stesso modulo = =E8 anche=20 possibile effettuare un'interrogazione all'archivio specificando alcuni=20 parametri. I dati da inserire o da usare per la ricerca vengono passati = ad un=20 file PHP che effettua l'operazione richiesta e crea una opportuna pagina = di=20 risposta.


Il = sorgente=20 del modulo =E8 definito come segue (il file pu=F2 avere estensione = ".html" in quanto=20 non contiene istruzioni PHP):


<HTML>

<HEAD>

<TITLE>Gestione=20 Base Dati Rubrica</TITLE>

</HEAD>

<BODY=20 BGCOLOR=3D"#FFFFFF" TEXT=3D"#000000">

<CENTER><H3>Gestione=20 Rubrica</H3></CENTER>

<FORM=20 METHOD=3D"GET" ACTION=3D"./phpsql.php">

<P><B>Cognome:=20 </B>

<INPUT=20 TYPE=3D"text" NAME=3D"cognome" MAXLENGTH=3D25 = size=3D20>**<P>

<P><B>Nome=20 &#160;&#160;&#160;&#160;&#160;&#160;: = </B>

<INPUT=20 TYPE=3D"text" NAME=3D"nome" MAXLENGTH=3D25 = SIZE=3D20>**<P>

<P><B>Indirizzo=20 &#160;: </B>

<INPUT=20 TYPE=3D"text" NAME=3D"indirizzo" MAXLENGTH=3D40 SIZE=3D40>

<P><BR><P>

<P><B>Telefono=20 &#160;: </B>

<INPUT=20 TYPE=3D"text" NAME=3D"telefono" MAXLENGTH=3D15 SIZE=3D15>**

<P><BR><P>

<P><B>E-mail=20 &#160;&#160;&#160;&#160;&#160;: </B>

<INPUT=20 TYPE=3D"text" NAME=3D"email" MAXLENGTH=3D30 SIZE=3D30>

<P><BR><P>

**=20 =3D campi validi per l'interrogazione

(lasciarli=20 <B>tutti vuoti </B>per ottenere la <B>lista completa=20 </B>dell'archivio)

<P><BR><P>

<TABLE><TR><TD><INPUT = TYPE=3D"reset"=20 VALUE=3D"Azzera"></TD><TD WIDTH=3D30></TD>

<TD><INPUT=20 TYPE=3D"submit" VALUE=3D"Inserisci" NAME=3D"sub"></TD>

<TD><INPUT=20 TYPE=3D"submit" VALUE=3D"Interroga"=20 NAME=3D"sub"></TD></TR></TABLE>

</FORM>

<P>=20

</BODY>

</HTML>


Viene=20 visualizzato in questo modo:


Gestione=20 Rubrica


Cognome: **

Nome       : = **

Indirizzo  : =20



Telefono  : **=20



E-mail      :



** =3D campi validi per l'interrogazione (lasciarli = tutti=20 vuoti per ottenere la lista completa dell'archivio)

N.B. In caso di inserimento il cognome =E8 = obbligatorio.






































Il = file=20 "phpsql.php" che svolge le operazioni sul database =E8 il seguente:


<HTML>

<HEAD>

<TITLE>Interrogazione=20 / inserimento Rubrica</TITLE>

</HEAD>

<BODY=20 BGCOLOR=3D"#FFFFFF" TEXT=3D"#000000">

<CENTER>


<?php

//=20 imposta le variabili per la connessione al database e la apre


$PG_DATABASE=3D"fulvio";

$PG_HOST=3D"localhost";

$PG_PORT=3D5432;

$PG_USER=3D"fulvio";

$PG_PSW=3D"";


$conn=3Dpg_connect("dbname=3D$PG_DATABASE = host=3D$PG_HOST port=3D$PG_PORT=20 user=3D$PG_USER password=3D$PG_PSW");


if=20 (! $conn) {

echo=20 "<P><B>Connessione al database non = riuscita</B>";

exit();=20 }

//=20 verifica se richiesto un inserimento o una interrogazione


if=20 ($sub =3D=3D "Interroga") {

echo=20 "<P><H3>Risultato=20 dell'interrogazione</H3></P></CENTER>";

//=20 interrogazione: prepara la variabile alt in base ai parametri = richiesti


$alt=3D0;

if=20 ($cognome !=3D "") $alt=3D100;

if=20 ($nome !=3D "") $alt +=3D 10;

if=20 ($telefono !=3D "") $alt +=3D 1;


/*=20 L'istruzione switch permette di eseguire l'interrogazione appropriata in =

base=20 all'impostazione dei parametri */


switch=20 ($alt)

{

case=20 111:

$richiesta=3Dpg_exec($conn,"SELECT=20 * FROM rubrica WHERE cognome=3D'$cognome' AND

nome=3D'$nome'=20 AND telefono=3D'$telefono';");

$righe=3Dpg_numrows($richiesta);

break;


case=20 110:

$richiesta=3Dpg_exec($conn,"SELECT=20 * FROM rubrica WHERE cognome=3D'$cognome' AND

nome=3D'$nome';");

$righe=3Dpg_numrows($richiesta);

break;


case=20 101:

$richiesta=3Dpg_exec($conn,"SELECT=20 * FROM rubrica WHERE cognome=3D'$cognome' AND

telefono=3D'$telefono';");

$righe=3Dpg_numrows($richiesta);

break;


case=20 100:

$richiesta=3Dpg_exec($conn,"SELECT=20 * FROM rubrica WHERE cognome=3D'$cognome';");

$righe=3Dpg_numrows($richiesta);

break;


case=20 11:

$richiesta=3Dpg_exec($conn,"SELECT=20 * FROM rubrica WHERE nome=3D'$nome'

AND=20 telefono=3D'$telefono';");

$righe=3Dpg_numrows($richiesta);

break;=20


case=20 10:

$richiesta=3Dpg_exec($conn,"SELECT=20 * FROM rubrica WHERE nome=3D'$nome';");

$righe=3Dpg_numrows($richiesta);

break;


case=20 1:

$richiesta=3Dpg_exec($conn,"SELECT=20 * FROM rubrica WHERE telefono=3D'$telefono';");

$righe=3Dpg_numrows($richiesta);

break;


default:

$richiesta=3Dpg_exec($conn,"SELECT=20 * FROM rubrica;");

$righe=3Dpg_numrows($richiesta);

}=20 // fine switch


/*=20 se l'interrogazione ha restituito un risultato, da esso vengono estratti = i=20

dati=20 e vengono formattati nel documento di risposta */


if=20 ($righe > 0)

{

print=20 "<UL>";

$cont=3D0;

while=20 ($cont < $righe)

{=20 $v1 =3D pg_result($richiesta,$cont,"cognome");

$v2=20 =3D pg_result($richiesta,$cont,"nome");

$v3=20 =3D pg_result($richiesta,$cont,"indirizzo");

$v4=20 =3D pg_result($richiesta,$cont,"telefono");

$v5=20 =3D pg_result($richiesta,$cont,"email");

print=20 "<P>Cognome : ";

print=20 $v1;

print=20 "<BR>Nome : ";

print=20 $v2;

print=20 "<BR>Indirizzo : ";

print=20 $v3;

print=20 "<BR>Telefono : ";

print=20 $v4;

print=20 "<BR>Email : ";

print=20 $v5;

print=20 "<P>";

$cont++;

}=20 // fine while

print=20 "</UL>";

}

else

print=20 "<P><CENTER><B>Nella base dati non presente alcuna=20 informazione<BR>

con=20 le caratteristiche specificate<B><CENTER><P>";

}=20 // fine if ($righe)


else=20

//=20 Inserimento: il cognome deve essere indicato

{

if=20 (! $cognome)

echo=20 "<P><B> Il cognome &egrave; obbligatorio";

else

{

$inser=20 =3D "insert into rubrica values ('$cognome', '$nome', = '$indirizzo',

'$telefono',=20 '$email')";

$ris=20 =3D pg_exec($conn, $inser );

if=20 ( ! $ris )

echo=20 "Errore : " + pg_errormessage( $conn );

else

echo=20 "Inserimento di $cognome $nome effettuato";

}//=20 fine if (! $cognome)

}=20 // fine if ($sub.....)


pg_close($conn);

print=20 "<P> </P>";

print=20 "<CENTER><HR WIDTH=3D30%><P>

<A=20 HREF=3D\"./moduloxphp.html\"><B>Nuova = operazione</B></A>=20 </CENTER>";

?>


</BODY>

</HTML>


Nel=20 caso venga richiesta una interrogazione fornendo come unico parametro il = cognome=20 "Rossi" si ottiene la risposta riportata sotto (naturalmente si suppone = che=20 prima siano stati inseriti anche i dati di Rossi Andrea oltre a quelli = di Rossi=20 Mario gi=E0 presenti):

Risultato=20 dell'interrogazione


    Cognome : Rossi
    Nome : Mario
    Indirizzo : via = Roma 34=20 Treviso
    Telefono : 04220101010
    Email : marioro@aaaa.it

    Cognome : Rossi
    Nome : Andrea
    Indirizzo : = -
    Telefono=20 : 0422888888
    Email : andrearo@aaaa.it

= Nuova=20 operazione




















La stringa = "Nuova operazione"=20 =E8 un link per tornare al modulo di partenza.


Sebbene il = sorgente=20 "phpsql.php" contenga dei commenti che illustrano alcuni dei punti pi=F9 = significativi dell'elaborazione, =E8 senz'altro opportuno spiegarne = ulteriormente=20 la logica di funzionamento soffermandosi specialmente sulle funzioni di=20 collegamento al database.


Nella prima = parte vengono=20 definite le variabili contenenti il nome del computer, del database,=20 dell'utente, la password, che vengono usate nella funzione di = connessione al=20 database pg_connect. La variabile $conn contiene il = risultato del=20 tentativo di connessione e viene quindi subito testata per verificare = che=20 l'operazione sia andata a buon fine.

Con il test = sulla variabile=20 $sub si stabilisce se l'utente ha richiesto una interrogazione o = un=20 inserimento.


Nel primo caso = viene=20 preparata la variabile $var in base ai parametri di ricerca = impostati;=20 poi tale variabile viene testata con l'istruzione switch tramite = la quale=20 si esaminano le varie combinazioni possibili di parametri di ricerca che = l'utente pu=F2 avere impostato.

In ognuno dei = casi esaminati=20 (istruzioni case....) viene fatta l'interrogazione alla base dati = con la=20 funzione pg_exec: essa richiede il nome della = connessione ($conn) e l'operazione da svolgere espressa secondo = la=20 sintassi dell'SQL, in una forma molto vicina alla lingua inglese e = quindi=20 facilmente comprensibile. La variabile $richiesta contiene il = risultato=20 dell'interrogazione e $righe viene caricata con il numero di = elementi=20 trovati grazie alla funzione pg_numrows; l'istruzione = break serve=20 a concludere quel particolare blocco case. Il blocco = default viene=20 eseguito se il valore di $var non coincide con nessuno dei "case" = previsti.

Successivamente con il=20 test su $righe si stabilisce se si sono estratti dei record = dall'archivio=20 (altrimenti si emette un opportuno messaggio); in caso = affermativo=20 si esegue un ciclo con l'istruzione while tante volte quante sono = le=20 righe estratte. Il contatore del ciclo =E8 $cont e viene = incrementato di=20 una unit=E0 con l'istruzione $cont++. Per ogni iterazione si = estraggono i=20 dati con la funzione pg_result che richiede il nome della = variabile che=20 contiene il risultato dell'interrogazione ($richiesta), il numero = di riga=20 ($cont) e il nome del campo che si vuole estrarre. Tali dati = vengono poi=20 emessi sulla pagina di riposta con le istruzioni print.


Nel caso invece l'utente abbia richiesto un inserimento, = si=20 controlla che sia stato indicato almeno il cognome e, in caso = affermativo, si=20 inseriscono in archivio i dati provenienti dal modulo grazie alla = funzione=20 pg_exec per la quale viene impostata l'operazione richiesta nella = variabile $inser. La bont=E0 dell'inserimento =E8 verificata con = il test su=20 $ris; in caso di problemi si emette l'errore verificatosi = grazie=20 all'uso della funzione pg_errormessage.

A questo punto si conclude anche il ramo = else=20 della istruzione if iniziale sulla variabile=20 $sub.


Non resta quindi altro che chiudere la connessione al = database con=20 la funzione pg_close ed emettere sul documento di risposta la = stringa che=20 funge da link per tornare al modulo di partenza.


Si noti infine l'uso del carattere di escape "\"=20 nell'ultima print per fare in modo che le virgolette usate per il = valore=20 di HREF non vengano interpretate come virgolette di inizio e fine = stringa da=20 parte di PHP.

4.5 = Script attivi,=20 DHTML, applet, servlet

4.5.1 Java e JavaScript

Gli=20 script attivi e le applet sono programmi o porzioni di = codice=20 eseguiti dal lato client e sono molto usati per rendere pi=F9 dinamiche = e=20 interattive le pagine WEB.

Le = applet=20 sono chiamate anche applet Java perch=E9 scritte quasi sempre in = linguaggio=20 Java e vengono eseguite in una porzione di un documento WEB senza = possibilit=E0 di=20 interferire con ci=F2 che avviene al di fuori della finestra di = esecuziione.

Gli script=20 attivi invece possono intervenire sulle pagine WEB modificandole e anche = creandone di nuove.

Esistono=20 fondamentalmente due linguaggi per la scrittura di script attivi: = JavaScript=20 creato dalla Netscape (JScript nella versione della Microsoft) e = VBScript=20 (Visual Basic scripting Edition). Quest'ultimo =E8 un linguaggio = di script=20 sviluppato da Microsoft per essere simile a Visual Basic e si rivolge=20 esclusivamente agli utenti che usano piattaforme Windows essendo = supportato solo=20 da Internet Explorer. JavaScript invece =E8 supportato da tutti i = browser pi=F9=20 importanti e quindi continuiamo ad occuparci solo di quest'ultimo.


Prima di=20 proseguire =E8 per=F2 opportuno chiarire le differenze che ci sono, e = sono notevoli,=20 tra Java e JavaScript malgrado la somiglianza fra i nomi (in effetti il = nome=20 originale di JavaScript era LiveScript e fu cambiato per motivi di=20 "marketing"):


  • Java =E8 un=20 linguaggio compilato mentre JavaScript =E8 interpretato;

  • le=20 applicazioni Java possono essere anche indipendenti ed essere eseguite = fuori=20 dalle pagine WEB, il codice JavaScript invece =E8 sempre legato ad un = documento=20 HTML e non pu=F2 essere eseguito separatamente (da questo punto di = vista tra=20 Java e JavaScript c'=E8 la stessa differenza esistente tra PERL e = PHP);

  • le applet=20 Java sono confinate in una ben definita regione della pagina, = JavaScript=20 invece pu=F2 controllare un'intero documento e rispondere alla = pressione di=20 pulsanti, click del mouse o altri eventi simili;

  • le applet=20 Java sono programmi separati dal codice HTML, vengono scaricati dalla = rete ed=20 eseguiti da un browser compatibile con Java; il codice JavaScript =E8 = invece=20 generalmente embedded cio=E8 inserito all'interno del sorgente HTML ed = =E8=20 eseguito da un browser compatibile con JavaScript.


Ci=F2 che=20 accomuna le applet Java e i JavaScript =E8 invece il fatto che, per = motivi di=20 sicurezza, non possono leggere o scrivere file. Questa attenzione alla = sicurezza=20 differenzia fondamentalmente le applet Java dalla tecnologia concorrente = degli=20 ActiveX di Microsoft.

ActiveX non=20 =E8 un linguaggio di programmazione ma un formato per dati ricavato da = due=20 tecnologie Microsoft esistenti: OLE (Object Linking and = Embedding) che=20 permette ai programmi di comunicare con altre applicazioni e COM = (Component=20 Object Model) che =E8 un formato per la definizione di interazioni = tra=20 oggetti, poi evolutasi nella tecnologia DCOM (Distributed=20 COM) per la definizione di iterazioni remote tra oggetti.

Gli Activex=20 possono essere scritti in molti linguaggi ma sono molto difficili da = includere=20 nelle pagine WEB senza usare altri strumenti Microsoft, inoltre sono = supportati=20 solo da Internet Explorer e, cosa pi=F9 grave, possono interagire con la = macchina=20 client salvando o modificando file, lanciando l'esecuzione di altri = programmi,=20 aprendo documenti ed altro ancora.

E' = ovvio=20 quindi che questi strumenti, se non usati con i dovuti accorgimenti, = possono=20 rappresentare un pericolo riguardo ad esempio alla diffusione attraverso = Internet di virus informatici o alla violazione della riservatezza dei = dati=20 contenuti nel computer di un utente.

4.5.2 Script attivi (cenni)

JavaScript =E8=20 un linguaggio di script embedded sviluppato da Netscape (originariamente = con il=20 nome di LiveScript).

L'elemento=20 da utilizzare =E8 <SCRIPT> che pu=F2 essere posizionato sia nella = sezione HEAD=20 che nella sezione BODY di un documento HTML e prevede il tag di chiusura = </SCRIPT>. Le istruzioni JavaScript si scrivono tra i due tag ma = =E8=20 opportuno "mascherarle" ulteriormente come commenti HTML per evitare che = vecchi=20 browser, per errore, le mostrino insieme al contenuto della pagina. = Quindi il=20 codice JavaScript inizia di solito con "<!-- Begin script" e si = conclude con=20 "// -->".

Si = noti che=20 i commenti di JavaScript si inseriscono con i caratteri "//" oppure "/*" = e "*/"=20 nel caso di commenti multilinea.

L'elemento=20 <SCRIPT> prevede come attributi LANGUAGE e TYPE; usando JavaScript = i=20 valori da assegnare sono rispettivamente: "JavaScript" e = "text/javascript".


Un = altro=20 attributo =E8 SCR con il quale si pu=F2 fare riferimento ad uno script = esterno che=20 viene caricato dal browser ed eseguito. Gli script esterni (da non = confondere=20 assolutamente con gli script CGI di cui abbiamo parlato in precedenza) = risiedono=20 su file separati che hanno di solito estensione ".js", contengono = esclusivamente=20 comandi JavaScript e possono essere utili in quanto permettono di = modificare una=20 volta sola il codice usato in molti documenti HTML diversi. Si tenga = per=F2 conto=20 dell'aggravio di tempo necessario a ricevere dal server anche il file = contenente=20 lo script oltre alla pagina WEB che lo richiama e del fatto che alcuni = server=20 WEB possono non essere configurati per un corretto invio degli script=20 esterni.


Vediamo=20 adesso un semplice esempio in cui si usa una funzione scritta in = JavaScript per=20 far immettere all'utente il proprio nome e poi presentarlo in una pagina = di=20 risposta.


<HTML>

<HEAD><TITLE>Esempio con=20 JavaScript</TITLE>

<SCRIPT LANGUAGE=3D"JavaScript"=20 TYPE=3D"text/javascript">

<!--Begin script

function InsNome() {

nomeut =3D prompt("Inserire il proprio nome:"," = ");

if (nomeut =3D=3D "" || nomeut =3D=3D null) {

nomeut =3D "Utente sconosciuto";

}

return (nomeut);

}

// -->

</SCRIPT>

</HEAD>

<BODY>

<DIV ALIGN=3D"CENTER"><B>Esempio con=20 JavaScript</B></DIV>

<P><BR><P>

Il nome inserito &egrave;:

<SCRIPT LANGUAGE=3D"JavaScript" = TYPE=3D"text/javascript">=20

<!--Begin script

document.write (InsNome());

// -->

</SCRIPT>

</BODY>

</HTML>


Nella prima=20 parte viene definita una funzione chiamata InsNome(); tale = funzione non=20 necessita di alcun parametro e serve a far inserire all'utente il = proprio nome=20 con l'istruzione prompt. Il nome inserito viene poi testato con=20 l'istruzione if (i simboli || all'interno del test = corrispondono=20 alla or) e valorizzato automaticamente se =E8 vuoto. L'ultima istruzione = della=20 funzione =E8 return che serve a restituire il risultato della = funzione=20 stessa, in questo caso il nome inserito dall'utente.

Nella=20 seconda parte del documento c'=E8 un altro blocco di codice JavaScript: = in esso=20 viene richiamata la funzione InsNome() all'interno dell'istruzione=20 document.write con la quale il nome inserito viene scritto all'interno = della=20 pagina HTML.


La = visualizzazione di questo documento avviene secondo la seguente = logica:

viene=20 iniziata la visualizzazione della sezione BODY, poi viene eseguito il = codice=20 JavaScript all'interno di BODY e quindi l'istruzione di scrittura. = All'interno=20 di quest'ultima c'=E8 per=F2 il richiamo alla funzione InsNome() = e quindi,=20 prima che la scrittura sia ultimata, appare una piccola maschera con la=20 richiesta del nome (effetto dell'istruzione prompt). Ad = inserimento=20 effettuato la maschera di input scompare e il nome inserito viene = visualizzato=20 insieme al resto del contenuto della sezione BODY.

4.5.2.1 Attributi di evento

Nell'HTML=20 4.0 sono disponibili una serie di attributi di evento che si possono = abbinare ad=20 immagini, collegamenti e ad altri elementi; ad ogni evento si pu=F2 poi = associare=20 del codice JavaScript da eseguire nel momento in cui l'evento in = questione si=20 verifica.


Vediamo=20 quali sono gli attributi di evento iniziando da quelli pi=F9 largamente=20 utilizzabili:


ONCLICK: si=20 verifica quando si clicca con il mouse su un elemento;

ONDBCLICK:=20 quando si fa doppio clic con il mouse su un elemento;

ONKEYPRESS:=20 quando un tasto viene premuto e rilasciato su un elemento;

ONKEYDOWN:=20 quando un tasto viene premuto su un elemento;

ONKEYUP:=20 quando un tasto viene rilasciato su un elemento;

ONMOUSEDOWN:=20 si verifica quando si clicca con il mouse su un elemento (senza = rilasciare);

ONMOUSEUP:=20 si verifica quando si rilascia il pulsante del mouse su un elemento;

ONMOUSEMOVE:=20 quando il puntatore del mouse si muove sopra ad un elemento;

ONMOUSEOVER:=20 quando il puntatore del mouse passa su un elemento proveniendo da = "fuori" di=20 esso;

ONMOUSEOUT:=20 quando il puntatore del mouse "lascia" un elemento.


I = seguenti=20 attributi si possono usare solo all'interno dei FORM:


ONSUBMIT: si=20 verifica quando un modulo viene inviato (si usa solo nel tag = <FORM>);

ONRESET:=20 quando il contenuto di un modulo viene ripristinato (si usa solo nel tag = <FORM>);

ONSELECT:=20 quando si seleziona del testo (si usa solo con i tag <INPUT> e=20 <TEXTAREA>);

ONCHANGE:=20 quando cambia il valore di un controllo (si usa solo con i tag = <INPUT>,=20 <TEXTAREA> e <SELECT>).


I = seguenti=20 attributi si possono usare con i FORM e con i collegamenti:


ONFOCUS: si=20 verifica quando un elemento viene selezionato (si dice che "riceve il = fuoco")=20 con il mouse o la tastiera;

ONBLUR:=20 quando un elemento perde il fuoco.


Infine i=20 seguenti attributi si possono usare solo nei tag <BODY> e=20 <FRAMESET>:


ONLOAD: si=20 verifica quando il navigatore termina il caricamento del documento;

ONUNLOAD:=20 quando il navigatore accede ad un altro documento.


Per usare=20 correttamente gli attributi di evento si deve definire il linguaggio di = script=20 di default del documento: a questo scopo si usa il seguente elemento=20 <META>:


<META=20 HTTP-EQUIV=3D"Content-Script-Type" = CONTENT=3D"text/javascript">


Nel=20 seguente esempio abbiamo l'uso di JavaScript per controllare l'input in = due=20 campi di un form:


<HTML>

<HEAD><TITLE>Esempio=20 con JavaScript</TITLE>

<META=20 HTTP-EQUIV=3D"Content-Script-Type" = CONTENT=3D"text/javascript">

<SCRIPT=20 LANGUAGE=3D"JavaScript" TYPE=3D"text/javascript">

<!--=20 Begin script

function=20 Contr(campo) {

if=20 (campo.length > 0) {

return=20 (true);

}=20

else=20 {

alert("Campo=20 " + campo.name + " obbligatorio!");

return=20 (false)

}

}

//=20 -->

</SCRIPT>=20

</HEAD>

<BODY>

<DIV=20 ALIGN=3D"CENTER"><B>Input gestito con=20 JavaScript</B></DIV>

<P><BR><P>

<FORM=20 ACTION=3D"/cgi-bin/uncgi/cgi-var.sh" METHOD=3D"GET">

Cognome:=20 <INPUT NAME=3D"cognome" TYPE=3D"TEXT"=20 ONBLUR=3D"Contr(cognome)"><P>

Nome:=20 <INPUT NAME=3D"nome" TYPE=3D"TEXT" = ONBLUR=3D"Contr(nome)"><P>

<INPUT=20 TYPE=3D"SUBMIT" VALUE=3D"INVIO">

</FORM>=20

</BODY>

</HTML>


Infine=20 ecco un esempio in cui viene presentata una immagine cliccando sulla = quale si=20 apre un'altra pagina HTML:


<HTML>

<HEAD><TITLE>Finestra=20 da aprire in JavaScript</TITLE>

<META=20 HTTP-EQUIV=3D"Content-script-type" = CONTENT=3D"text/javascript">

</HEAD>

<BODY>

<DIV=20 ALIGN=3D"CENTER"><B>Finestra da aprire con=20 JavaScript</B></DIV>

<P><BR><P>

<A=20 HREF=3D"#" onclick=3D'window.open("esejs3b.html",

"Prova=20 Javascript","scrollbars=3Dno,resizable=3Dno")'>

<IMG=20 SRC=3D"gaia.jpg" WIDTH=3D"80" HEIGTH=3D"80"></A>

</BODY>

</HTML>


4.5.2.2 Disabilitazione dei JavaScript

L'uso di=20 JavaScript offre senz'altro grandi possibilit=E0 (che gli esempi appena = illustrati=20 mostrano in misura molto modesta) ma non bisogna sottovalutare alcuni = aspetti=20 negativi:


  • molti=20 browser non supportano gli enunciati JavaScript e anche quelli che li=20 supportano si comportano spesso in modo diverso di fronte ad una = stessa=20 istruzione;

  • il=20 linguaggio ha dei limiti dovuti ad importanti ragioni di = sicurezza;

  • JavaScript=20 viene spesso usato per creare effetti che alla lunga possono risultare = noiosi=20 e fastidiosi; alcuni utenti preferiscono addirittura disabilitare,=20 intervenendo su opportune opzioni dei browser, l'esecuzione degli=20 script.


Per questi=20 motivi =E8 lecito aspettarsi che un documento contenete istruzioni = JavaScript=20 possa venire visualizzato da navigatori non in grado di eseguirle = correttamente;=20 =E8 quindi opportuno prevedere subito dopo la fine di uno script, l'uso = dei tag=20 <NOSCRIPT> e </NOSCRIPT> all'interno dei quali inserire le=20 istruzioni HTML alternative allo script stesso.

4.5.3 DHTML (cenni)

Il = DHTML=20 (Dynamic HTML) non =E8 uno specifico linguaggio e neanche una = evoluzione=20 dell'HTML, =E8 invece un insieme di tecniche utilizzabili in modo = coordinato per=20 costruire pagine WEB dinamiche "client-side".


Le = tecnologie coinvolte nell'uso del DHTML sono:


  • un=20 linguaggio di scripting;

  • i fogli di=20 stile CSS;

  • un modello=20 ad oggetti del documento o DOM (Document Object Model) che = permette di=20 integrare le altre due tecnologie definendo un'interfaccia di = programmazione=20 indipendente da linguaggio e piattaforma per accedere a contenuto, = stile e=20 struttura di un documento DHTML; grazie al DOM =E8 possibile gestire e = controllare ogni singolo oggetto del documento con una opportuna = sintassi=20 derivata dalla programmazione ad oggetti.


Il = consorzio=20 W3C ha definito degli standard ufficiali per ognuna delle tre = componenti:


  • per il=20 linguaggio di scripting lo standard =E8 ECMAScript nato dal JavaScript = 1.1 e dal=20 quale comunque non si discostano di molto i successivi JavaScript 1.2 = e 1.3=20 (da notare che il meno usato Jscript di Microsoft aderisce invece allo = standard);

  • per il CSS=20 la versione ufficiale =E8 dal 1998 la CSS-2;

  • per il=20 DOM, nel 1998 =E8 stato pubblicato il "DOM Level 1 = Recommendation.


Attualmente=20 i DOM di Netscape Navigator e Internet Explorer sono molto diversi tra = loro e=20 questo provoca notevoli problemi a livello di fruibilit=E0 universale = dei=20 documenti DHTML; talvolta gli sviluppatori sono addirittura costretti a = creare=20 versioni diverse della stessa pagina da visualizzare ognuna con il = navigatore=20 pi=F9 appropriato.

Questa=20 situazione dovrebbe comunque cessare visto che il DOM di Microsoft =E8 = in procinto=20 di essere adottato dal W3C come DOM standard.


Maggiori=20 dettagli sugli oggetti contenuti nei DOM e, pi=F9 in generale, sull'uso = delle=20 tecniche del DHTML si possono reperire sui testi relativi all'argomento = cui si=20 fa riferimento al termine del capitolo.

4.5.4 Applet Java (cenni)

4.5.4.1 Caratteristiche del linguaggio Java

Java =E8 un=20 linguaggio di programmazione creato nel 1995 da Sun Microsystem (forse = la pi=F9=20 agguerrita concorrente di Microsoft) e deve il suo nome a una variet=E0 = di caff=E8=20 tropicale. Inizialmente ideato per essere incorporato nei microchip che=20 governano gli elettrodomestici si =E8 poi affermato come linguaggio di=20 programmazione soprattutto nell'ambito del WEB.


Uno dei=20 principali motivi del successo di Java in ambito Internet =E8 la sua = sicurezza=20 intrinseca: con esso si viene a creare un "firewall", cio=E8 una = barriera=20 protettiva tra l'applicazione di rete e il computer dell'utente.

Infatti=20 quando si scaricano con un browser compatibile le applicazioni Java non = ci sono=20 rischi di infezione virale o di comportamenti illeciti da parte delle = stesse=20 applicazioni in quanto i programmi Java vengono confinati in un apposito = ambiente di esecuzione senza alcuna possibilit=E0 di accedere ad altre = parti dei=20 computer.

Altro=20 aspetto fondamentale =E8 quello della portabilit=E0: un programma = scritto in Java=20 pu=F2 essere eseguito indifferentemente su ogni sistema operativo e su = ogni=20 piattaforma senza subire modifiche.


Ci=F2 che=20 consente a Java di essere cos=EC sicuro e portabile =E8 il fatto che = l'output della=20 compilazione di un sorgente di tale linguaggio non =E8 codice eseguibile = bens=EC=20 "bytecode".

Un = bytecode=20 =E8 un insieme ottimizzato di istruzioni che vengono eseguite da una = "macchina=20 virtuale" detta JVM (Java Virtual Machine) che viene emulata=20 dall'ambiente di esecuzione di Java, attingendo alle risorse della = macchina=20 reale.

L'eseguibile=20 non ha alcuna possibilit=E0 di "sconfinare" al di fuori della macchina = virtuale a=20 tutto beneficio della sicurezza. Inoltre =E8 sufficiente realizzare su = piattaforme=20 diverse diversi sistemi run-time di Java, uno per ogni piattaforma, = affinch=E9 su=20 tutte possa girare qualsiasi programma Java ; cos=EC anche la = portabilit=E0 =E8=20 assicurata.

L'ambiente=20 di esecuzione (o run-time) di Java non =E8 altro che un interprete del = bytecode;=20 il fatto che i programmi Java vengano interpretati e non compilati e poi = eseguiti, comporta senza dubbio problemi a livello di prestazioni. Tali = problemi=20 per=F2 vengono largamente compensati, almeno a livello di applicazioni = per il WEB,=20 dai vantaggi riguardanti la sicurezza e la portabilit=E0.


Altri motivi=20 per cui Java =E8 molto apprezzato dai programmatori sono:


  • =E8 semplice=20 (almeno per chi gi=E0 conosce il linguaggio C++);

  • =E8=20 orientato agli oggetti con un approccio molto "pulito" e utilizzabile = (il tema=20 della programmazione ad oggetti =E8 di una tale vastit=E0 e = complessit=E0 che=20 scoraggia qualsiasi tentativo di semplificazione e sintesi; gli = interessati a=20 tale argomento a anche a maggiori approfondimenti sul linguaggio Java = possono=20 consultare i testi dedicati a questi argomenti);

  • =E8=20 multithreaded perch=E9 consente di scrivere programmi che fanno pi=F9 = cose=20 contemporaneamente in quanto il run-time di Java comprende un'elegante = e=20 sofisticata soluzione per la sincronizzazione multiprocesso;

  • =E8 solido e=20 affidabile sia perch=E9 fortemente "tipizzato" (le variabili devono = essere=20 dichiarate prima di essere utilizzate e non sono possibili conversioni = implicite di tipo), sia perch=E9 privo di puntatori (il cui uso da = parte di=20 programmatori non esperti =E8 spesso fonte di errori), sia perch=E9 = dotato di=20 "automatic garbage collection" cio=E8 di un sistema automatico che = analizza la=20 memoria e libera quella inutilizzata (in altri linguaggi come il C++ = questa=20 operazione =E8 invece a carico del programmatore e pu=F2 determinare = errori);

  • =E8=20 distribuito in quanto =E8 stato progettato appositamente per lo = sviluppo di=20 applicazioni distribuite; quindi un'applicazione Java pu=F2 essere = costituita da=20 pi=F9 moduli, residenti su diversi computer, in grado di operare = congiuntamente=20 attraverso una rete telematica.

4.5.4.2 Creazione ed esecuzione delle applet = Java

Per creare=20 una applet Java si devono compiere le seguenti operazioni:


prima di=20 tutto si deve scrivere il sorgente Java salvandolo in un file con = estensione=20 ".java" e con nome uguale a quello della classe definita nel sorgente = stesso=20 (supponiamo sia "EseJava");

poi si deve=20 compilare il sorgente utilizzando un compilatore Java (ad esempio JDK - = Java=20 Development Kit disponibile gratuitamente presso = http://java.sun.com; il=20 comando =E8


javac=20 EseJava.java


si = ottiene=20 un file con stesso nome ed estensione ".class"; nel nostro esempio=20 "EseJava.class";


l'eseguibile=20 ottenuto pu=F2 anche essere eseguito indipendentemente da qualsiasi = pagina WEB,=20 tramite l'interprete java con il comando:


java=20 EseJava.class


Per inserire=20 invece l'applicazione Java all'interno di una pagina WEB si usa = l'elemento di=20 TESTO <APPLET> che prevede il tag di chiusura </APPLET>. = Qualsiasi=20 testo inserito tra questi due marcatori viene visualizzato nel caso il = browser=20 non sia compatibile con Java.


Vediamo gli=20 attribuiti di questo elemento (i primi tre sono obbligatori):


CODE, per=20 indicare il nome del file bytecode da eseguire;

WIDTH e=20 HEIGHT, per indicare le dimensioni in pixel dell'area rettangolare nella = quale=20 eseguire l'applet;

HSPACE,=20 VSPACE, ALIGN, con lo stesso significato visto per il tag = <IMG>;

NAME, per=20 assegnare un nome all'applet (pu=F2 servire in caso pi=F9 applet debbano = comunicare=20 tra loro se si usano tecniche Java avanzate come "LiveConnect" di = Netscape);

CODEBASE,=20 indica la directory che contiene tutti i file a cui la applet fa = eventualmente=20 riferimento per il suo funzionamento.


Un = altro=20 elemento che si pu=F2 usare con le applet =E8 <PARAM> che serve ad = indicare un=20 parametro da passare all'applicazione Java. Si possono passare pi=F9 = parametri=20 usando pi=F9 volte questo tag e l'ordine con cui avviene il passaggio = non =E8=20 influente. Naturalmente si possono passare parametri solo ad una applet = che sia=20 stata scritta per accettarli e utilizzarli in qualche maniera. Di solito = le=20 applet gi=E0 pronte sono documentate ed =E8 quindi possibile sapere se o = previsti=20 parametri, con quali scopi e con quali nomi.

L'elemento=20 <PARAM> si inserisce tra <APPLET> e </APPLET> e = prevede due=20 attributi:


NAME, per=20 indicare il nome del parametro;

VALUE, per=20 indicare il valore del parametro.

Quando un=20 documento contenente l'applet viene richiesto, quest'ultima viene = inviata dal=20 server insieme a tutti gli altri file multimediali: se il browser =E8 in = grado di=20 interpretare il linguaggio, il programma viene eseguito. In questo modo = le=20 pagine WEB possono animarsi, integrare suoni in tempo reale, = visualizzare video=20 ed animazioni, presentare grafici dinamici ed altro ancora.


<HTML>

<HEAD><TITLE>Esempio=20 con Java</TITLE>

</HEAD>

<BODY>

<DIV=20 ALIGN=3D"CENTER"><B>Esempio con applet = Java</B></DIV>

<P><BR><P>

Qui=20 sotto ci dovrebbe essere l'applet <P>

<APPLET=20 CODE=3D"EseJava.class" WIDTH=3D"100" HEIGHT=3D"100">

Java=20 non va

</APPLET>=20

</BODY>

</HTML>


Concludiamo=20 con una osservazione circa il fatto che con HTML 4.0 =E8 sconsigliato = l'uso=20 dell'elemento <APPLET> che dovrebbe essere sostituito da = <OBJECT> di=20 cui abbiamo parlato nel capitolo 3.


L'esempio=20 precedente dovrebbe quindi essere inserito nella pagina WEB in questo = modo:


<OBJECT=20 CODETYPE=3D"application/octet-stream" CLASSID=3D"java:EseJava.class" =

WIDTH=3D"200"=20 HEIGHT=3D"250">

Il=20 Browser non supporta Java

</OBJECT>


Non tutti i=20 browser, specie le vecchie versioni, accettano questa sintassi per = l'inserimento=20 delle applet.

Per il=20 futuro =E8 comunque da preferire l'uso dell'elemento <OBJECT> in = quanto=20 permette di inserire applicazioni scritte in linguaggi di programmazione = diversi=20 da Java.

4.5.5 Servlet Java e Java Server Pages

Le = servlet Java, come suggerisce il nome, hanno delle analogie con = le applet=20 essendo applicazioni scritte in Java, ma vengono eseguite sul server = anzich=E9 sul=20 client. Esse vengono quindi attivate dalle pagine WEB esattamente come i = programmi CGI con i vantaggi relativi (indipendenza dalla piattaforma = client,=20 possibilit=E0 di accedere a database ecc.) ma si differenziano (in = meglio) anche=20 da questi ultimi per il motivo seguente: in presenza di "normali" CGI il = server=20 HTTP esegue un processo ex-novo ogni volta che riceve una nuova = richiesta di=20 attivazione di quel programma; le servlet invece vengono eseguite e = conservate=20 in un determinato spazio di memoria in modo da potere essere richiamate = in modo=20 rapidissimo al sopraggiungere di successive richieste di esecuzione.

Per potere=20 utilizzare le servlet Java occorre installare una estensione di Apache = di nome=20 JServ (reperibile presso http://java.apache.org). Al termine=20 dell'installazione non dovrebbero essere necessarie altre operazioni o=20 configurazioni particolari; si ricordi solo che le applicazioni servlet=20 eseguibili devono risiedere per default nella directory = /home/http/servlets=20 anzich=E9 in /home/http/cgi-bin.


Il = principale difetto delle servlet java =E8 che esse, come le applicazioni = CGI,=20 costruiscono la risposta al loro interno definendo delle stampe virtuali = in=20 codice HTML; =E8 quindi evidente che ogni variazione nella risposta = comporta la=20 necessit=E0 di ricompilare la servlet.


Le = JSP=20 (Java Server Pages) sono un tentativo di risolvere questo = incoveniente in=20 quanto non sono altro che pagine HTML che incorporano codice Java, = sempre=20 eseguito sul lato server. In pratica possiamo affermare che una JSP sta = ad una=20 servlet come una pagina PHP sta ad un programma CGI.

Pi=F9 in=20 dettaglio le JSP rappresentano un esempio di tecnologia Java in grado di = integrare in uno stesso file codice HTML, componenti riutilizzabili come = i=20 Javabeans, codice Java e script "Java-like".


Una pagina=20 JSP appare come una normale pagina HTML contenente anche tag JSP = attraverso i=20 quali si possono definire singole operazioni (ad esempio chiamate al = codice=20 esterno di un componente riusabile Javabeans) o blocchi di codice Java, = chiamati=20 SCRIPLET, che vengono compilati ed eseguiti quando si accede al = documento.

Una pagina=20 JSP viene eseguita da un "JSP engine" installato sul WEB server, che non = fa=20 altro che creare dinamicamente ed in modo trasparente la servlet = corrispondente.=20 Questo permette di conservare i vantaggi delle servlet e di superare i = problemi=20 dovuti alla loro eccessiva rigidit=E0 nei confronti delle modifiche.

Ovviamente i=20 lati positivi di una soluzione sono sempre, almeno in parte, bilanciati = da=20 quelli negativi: le JSP impogono la presenza sul server di un = compilatore Java,=20 non necessario per le servlet, e hanno una minore velocit=E0 di = esecuzione.

4.6 WEB = ad=20 oggetti

Il = protocollo HTTP con l'interfaccia CGI =E8 abbastanza lento e inadeguato = per=20 applicazioni che prevedano forte interazione tra componenti o oggetti in = esecuzione sul cliente e sul server. Come abbiamo visto, la modalit=E0 = standard di=20 interazione client/server dell'HTTP =E8 data dalla FORM che =E8 = senz'altro=20 insufficiente in caso di una architettura ad oggetti in cui, ad esempio, = un=20 oggetto client debba "invocare" direttamente un oggetto server. Inoltre=20 nell'attuale architettura l'elaborazione =E8 quasi sempre spostata sul = server e=20 ci=F2 non contribuisce certo a bilanciare il carico elaborativo tra i = nodi di una=20 rete.

Un = passo=20 avanti importante, in questo ambito, si ha con l'introduzione nel WEB di = soluzioni basate sugli oggetti che conducono al cosiddetto "WEB ad = oggetti". In=20 questo ambiente gli oggetti client possono fare riferimento direttamente = agli=20 oggetti server e i vari componenti possono essere residenti su pi=F9 = nodi di=20 elaborazione distribuendo cos=EC il carico elaborativo.


L'uso degli=20 oggetti nella programmazione WEB contribuisce poi alla diffusione della=20 "componentistica software", termine con il quale si indica una = tecnologia=20 tendente a portare nel campo della produzione del software alcune = metodologie di=20 tipo industriale "classico", superando i metodi artigianali = preesistenti.

Con essa lo=20 sviluppo delle applicazioni si scompone in due attivit=E0 distinte:


  • creazione=20 di componenti ("semilavorati" software);

  • costruzione=20 di applicazioni integrando i componenti gi=E0 pronti.


Il = WEB ad=20 oggetti richiede la presenza di una infrastruttura di oggetti = distribuiti come=20 CORBA (Common Object Request Broker Architecture) che =E8 una = tecnologia=20 aperta, disponibile per molte piattaforme, definita da un cartello di = industrie=20 informatiche (IBM, SUN, NETSCAPE ed altre) o DCOM (Distributed Common = Object=20 Model) che =E8 la tecnologia analoga di Microsoft su cui si basano i = controlii=20 ACTIVEX.

Entrambe le=20 tecnologie non sono legate a specifici linguaggi di programmazione: un = server =E8=20 in grado di mettere a disposizione servizi di un processo servente a = vari=20 client, residenti su macchine diverse, anche se realizzati con linguaggi = differenti.

La = comunicazione tra gli oggetti avviene solitamente in reti TCP/IP e pu=F2 = usare=20 protocolli come l'HTTP oppure protocolli definiti appositamente come, = per CORBA,=20 l'IIOP (Internet InterOrb Protocol).


L'indifferenza=20 dal linguaggio di programmazione pone la questione di come descrivere = gli=20 oggetti CORBA o DCOM in modo che i programmi possano fare riferimento ad = essi=20 qualunque sia il linguaggio in cui sono scritti. A questo scopo =E8 = stato definito=20 un apposito linguaggio per la definizione di interfacce, l'IDL = (Interface=20 Definition Language) per CORBA e l'MIDL per DCOM.


La = tendenza=20 attuale =E8 quella di utilizzare CORBA come infrastruttura per = l'interoperabilit=E0=20 tra le componenti e di scrivere queste ultime utilizzando Java; in = questo=20 contesto CORBA rende trasparente la presenza della rete e Java rende = universale=20 l'implementazione degli oggetti in quanto ormai qualsiasi piattaforma = possiede=20 una propria Java Virtual Machine.

4.7 = Conclusioni

In = questo=20 capitolo si sono introdotti una serie di argomenti, ognuno dei quali, = come pi=F9=20 volte fatto notare, avrebbe meritato ben altro spazio e approfondimento. = Qui si=20 =E8 cercato solo di fornire una panoramica sui principali strumenti per = rendere le=20 pagine WEB dinamiche e interattive; il lettore interessato pu=F2 = approfondire gli=20 aspetti che ritiene pi=F9 utili e interessanti consultando i testi che = trattano=20 tali argomenti.


Essendo=20 questi ultimi numerosissimi pu=F2 essere utile dare qualche = indicazione:


Per Linux e=20 il "movimento Open Sources":

"I = segreti=20 di Red Hat Linux" di N. Barkakati - Ed. Apogeo 1999

"Open=20 Sources" di R. Stallman, L. Torvalds e altri - Ed.Apogeo


Per=20 Apache:

"Apache" di=20 B. Laurie, P. Laurie - Ed. Apogeo 1997


Per il=20 linguaggio Perl:

"Perl guida=20 di riferimento" di E. Siever, S. Spainhern - Ed. Apogeo


Per il=20 linguaggio SQL:

"Guida a=20 SQL" di A. Guidi, D. Dorbol=F2 - Ed. McGraw-Hill 1996


Per Linux,=20 Apache, Perl, PostgreSQL:

"Appunti=20 Linux" di D. Giacomini (ora "Appunti di informatica libera") - URI:

http://www.allnet.it/AppuntiLi= nux


Per PHP:

"PHP manual"=20 di autori vari - URI: htt= p://linuxdidattica.org/docs/besta/corso-html/teo-html.sdw


Per=20 JavaScript e DHTML:

"JavaScript=20 la guida" di D. Flanagan - Ed. Apogeo

"JavaScript=20 esempi di programmazione" di S. Feather - Ed. Jackson Libri

"CSS e=20 DHTML" di D. Livingston, M. Brown - Tecniche Nuove 2000


Per la=20 programmazione ad oggetti:

"Programmazione=20 orientata agli oggetti" di J. Cox Brad - Ed. Addison-Wesley 1990


Per=20 Java:

"Java 1.2=20 guida completa" di L. Lemay, R. Cadenhead -Ed. Apogeo 1997

"Java guida=20 al linguaggio per scrivere pagine WEB interattive" di M. e O. Gurewich - = Ed.

Mondadori=20 1996


Per molti=20 degli argomenti che riguardano le pagine WEB statiche e dinamiche:

"Sito di=20 HTML.IT" - URI: http://www.html.it/


5 DA HTML A XML: CENNI

5.1 = Limiti=20 dell'HTML

Come abbiamo=20 visto all'inizio di queste dispense, l'HTML deriva dall'SGML che =E8 un = linguaggio=20 a marcatori molto pi=F9 potente, complesso e disponibile dal oltre 20 = anni in=20 varie forme e per vari scopi. Esso infatti non =E8 solo un linguaggio di = formattazione o di contrassegno ma =E8 un "metalinguaggio" con il quale = gli utenti=20 possono definire propri linguaggi di contrassegno per oggetti molto = diversi:=20 formule matematiche, spartiti musicali, formule chimiche, ipertesti (=E8 = il caso=20 dell'HTML).

Uno di=20 questi linguaggi =E8 l'XML del quale parliamo brevemente in questo = capitolo.


L'SGML=20 specifica degli identificatori di contenuto con i quali formattare il = testo in=20 modo coerente per permettere ai sistemi di gestione dei documenti di = reperire=20 facilmente le informazioni; si presta bene per la gestione di grandi = quantit=E0 di=20 dati con struttura omogenea come cataloghi, manuali tabelle = statistiche.

Siccome usa=20 marcatori basati sul contenuto e non sul formato, =E8 possibile cambiare = agevolmente le regole di formattazione per inviare il documento a = dispositivi di=20 memorizzazione o di visualizzazione di tipo diverso.

Nonostante=20 questi pregi l'SGML =E8 utilizzato solo da organizzazioni di una certa = mole, come=20 l'IBM o alcuni enti statali americani, in quanto =E8 notevolmente = complesso e=20 difficile da usare in modo corretto.


L'HTML=20 conserva traccia delle sue "origini" soprattutto nella sintassi dei = marcatori ma=20 =E8 indubbiamente molto pi=F9 semplice e molto pi=F9 limitato nelle = funzionalit=E0.=20 Malgrado questo ha svolto un ruolo importante contribuendo in modo = decisivo alla=20 diffusione e al successo delle pagine WEB presso il grande pubblico.


I = limiti pi=F9=20 evidenti dell'HTML sono:


  • la=20 rigidit=E0, in quanto ha un numero finito di tag;

  • la scarsa=20 coerenza, in quanto prevede sia tag che indicano la natura di un = elemento,=20 come <TITLE>, sia tag che indicano la sua rappresentazione, come = <FONT> , sia, ancora, tag "ibridi", come <P = ALIGN=3D"center"> o=20 <TABLE> usato per migliorare il layout della = pagina.


E' = utile=20 soffermarsi a questo punto sulle caratteristiche che ogni elemento di un = documento possiede:


  • sintassi:=20 cio=E8 come =E8 scritto;

  • semantica:=20 cosa significa, cosa rappresenta, in che relazione sta con gli altri=20 elementi;

  • rappresentazione:=20 come appare sullo schermo o in stampa;

  • comportamento:=20 come reagisce all'interazione con l'utente (vale per gli elementi=20 dinamici).


La = maggior=20 parte dei tag dell'HTML ha sintassi, semantica, rappresentazione e = comportamento=20 predefiniti e quindi i browser dovrebbero essere in grado di trattarli=20 uniformemente; il condizionale dipende dal fatto, pi=F9 volte = evidenziato, che=20 ogni browser in effetti fa "di testa sua".


Con il=20 passare degli anni e con la sempre maggiore diffusione, l'HTML si =E8 = via via=20 discostato dalla sua natura iniziale di strumento per la definizione = della=20 struttura dei documenti per divenire un linguaggio di formattazione, = spostando=20 quindi l'accento dalla semantica alla rappresentazione degli = elementi.

Questo =E8=20 avvenuto malgrado l'introduzione dei CSS che permettono di definire la=20 formattazione della pagina, liberando da questo onere i tag HTML e = restituendoli=20 alla loro funzione originale di descrittori del contenuto.


Abbiamo=20 quindi, da una parte un linguaggio ricco di potenzialit=E0, molto = rigoroso e=20 versatile ma eccessivamente complesso come l'SGML, dall'altra un = linguaggio=20 molto semplice e di larga diffusione ma molto rigido e incoerente come = l'HTML;=20 in questo contesto si inserisce il linguaggio XML.

5.2 Genesi=20 e natura dell'XML

XML=20 (eXtensible Markup Language) =E8 un linguaggio a marcatori = derivato=20 dall'SGML con lo scopo dichiarato di conservarne l'80% delle = potenzialit=E0 con=20 solo il 20% della complessit=E0.

E' = stato=20 creato da un gruppo di lavoro del W3C coordinato da Tim Berners-Lee e si = propone=20 come base per gli sviluppi futuri del WEB.


Con XML =E8=20 possibile definire nuovi marcatori (questo =E8 il motivo del termine = extensible) e=20 specificare separatamente sintassi, semantica, rappresentazione e = comportamento=20 di ogni tag.

Grazie alla=20 possibilit=E0 di definire nuovi marcatori si pu=F2 affermare che anche = l'XML, come=20 l'SGML =E8 un metalinguaggio attraverso il quale definire linguaggi da = usare in=20 vari ambiti; ad esempio gi=E0 esistono, basati su XML: CML (Chemical = Markup=20 Language) per la chimica, MathML (Mathematical Markup = Language), WML=20 (Wireless Markup Language) per le navigazione con i telefonini e = tanti=20 altri.


La = differenza sostanziale tra HTML e XML =E8 che quest'ultimo si usa per = descrivere=20 il significato dei dati e non il loro aspetto; questo =E8 un grosso = passo avanti=20 che, insieme alla flessibilit=E0 e versatilit=E0 del linguaggio, apre = prospettive di=20 utilizzo al di l=E0 della rappresentazione dei dati nelle reti e nel WEB = . L'XML=20 si propone infatti come possibile formato universale per la = rappresentazione dei=20 dati superando i cronici problemi di incompatibilit=E0 tra formati = generati con=20 applicazioni diverse.


Si = deve=20 infine notare come l'XML non sia stato concepito per sostituire HTML, ma = per=20 integrarlo ed estenderlo, tanto =E8 vero che quest'ultimo pu=F2 essere=20 reinterpretato nell'architettura XML dando origine ad un nuovo = linguaggio:=20 l'XHTML (eXtensible HTML).

5.3 = Documenti XML ben=20 formati e validi

Un = documento=20 XML =E8 un semplice file testuale, realizzabile quindi con un qualsiasi = editor,=20 contenente testo e marcatori. Questi ultimi sono racchiusi fra i simboli = "<"=20 e ">" come in HTML; a differenza che in quest'ultimo, per=F2, qui ci = sono=20 regole sintattiche molto rigide:


  • ogni tag=20 deve essere necessariamente chiuso con il relativo tag di = chiusura;

  • non =E8=20 possibile avere annidamenti con tag sovrapposti; ci=F2 significa che = la seguente=20 porzione di codice:

      <U>=20 testo sottolineato<B> e grassetto = </U></B>


che in HTML=20 =E8 accettata, anche se scorretta, in XML =E8 del tutto vietata;

  • i valori=20 degli attributi devono essere sempre racchiusi tra virgolette;

  • deve=20 essere sempre presente almeno un elemento e fra gli elementi uno ed = uno solo=20 ha un ruolo speciale ed =E8 chiamato radice; gli altri elementi sono = tutti=20 "figli", "nipoti" e comunque discendenti della radice secondo una = struttura=20 gerarchica.


Un = documento=20 che rispetti queste regole si dice "ben formato" o = "conforme".


Vediamo un=20 primo esempio di documento XML (biblioteca.xml) in cui si definiscono = dati=20 relativi ad una biblioteca usando dei tag definiti liberamente a questo=20 scopo:


<?xml=20 version=3D"1.0" standalone=3D"yes" ?>

<BIBLIOTECA>

<LIBRO>

<TITOLO>XML=20 LE BASI</TITOLO>

<AUTORE>S.=20 ST. LAURENT</AUTORE>

<CASAED>TECNICHE=20 NUOVE</CASAED>

<ARGOMENTO>WEB=20 - XML</ARGOMENTO>

<ANNOED>1999</ANNOED>

</LIBRO>=20

<LIBRO>

<TITOLO>PRIMI=20 PASSI CON LINUX</TITOLO>

<AUTORE>P.=20 D'IGNAZIO</AUTORE>

<CASAED>INFOMEDIA</CASAED>

<ARGOMENTO>S.O.=20 - LINUX</ARGOMENTO>

<ANNOED></ANNOED>

</LIBRO>=20

</BIBLIOTECA>=20

L'indentatura,=20 come al solito, ha il solo scopo di aumentare la leggibilit=E0 del = sorgente.

Si = deve=20 notare che il linguaggio =E8 "case sensitive", quindi <LIBRO> e=20 <libro> sono tag diversi.


Nel caso di=20 elementi vuoti si pu=F2 usare una notazione abbreviata:


<ANNOED></ANNOED>=20


pu=F2 essere=20 sostituito con


<ANNOED/>=20


Nell'esempio=20 l'elemento radice =E8 <BIBLIOTECA> mentre la prima riga =E8 un po' = particolare=20 in quanto rappresenta una istruzione di elaborazione XML; tali = istruzioni=20 iniziano con i caratteri "<?" e terminano con "?>. Questa = istruzione=20 presenta due attributi: version il cui significato =E8 ovvio e=20 standalone il cui significato verr=E0 chiarito pi=F9 avanti.


Le = regole=20 elencate in precedenza forniscono solo un primo livello di validazione; = un=20 secondo livello si ottiene grazie alla DTD (Document Type = Definition) che=20 =E8 un testo che descrive le regole sintattiche per il documento XML e = pu=F2 essere=20 contenuto in quest'ultimo oppure, pi=F9 frequentemente, risiedere in un = file=20 esterno.

La = seconda=20 alternativa =E8 ovviamente da preferire in caso di pi=F9 documenti = definiti con una=20 stessa DTD in quanto permette di scrivere quest'ultima una volta = sola.


Un = documento=20 che rispetti le regole sintattiche di una DTD si dice = "valido".


L'esempio=20 "biblioteca.xml" deve essere cos=EC modificato nella parte iniziale:


<?xml=20 version=3D"1.0" standalone=3D"yes" ?>

<!DOCTYPE=20 BIBLIOTECA [

<!ELEMENT=20 BIBLIOTECA (LIBRO+)>

<!ELEMENT=20 LIBRO (TITOLO, AUTORE*, CASAED, ARGOMENTO, ANNOED?)>

<!ELEMENT=20 TITOLO (#PCDATA)>

<!ELEMENT=20 AUTORE (#PCDATA)>

<!ELEMENT=20 CASAED (#PCDATA)>

<!ELEMENT=20 ARGOMENTO (#PCDATA)>

<!ELEMENT=20 ANNOED (#PCDATA)>

]>

<BIBLIOTECA>

<LIBRO>

......


La=20 DTD pu=F2 essere esterna e residente, ad esempio, nel file = "biblioteca.dtd"=20 seguente:


<?xml=20 version=3D"1.0" ?>

<!ELEMENT=20 BIBLIOTECA (LIBRO+)>

<!ELEMENT=20 LIBRO (TITOLO, AUTORE*, CASAED, ARGOMENTO, ANNOED?)>

<!ELEMENT=20 TITOLO (#PCDATA)>

<!ELEMENT=20 AUTORE (#PCDATA)>

<!ELEMENT=20 CASAED (#PCDATA)>

<!ELEMENT=20 ARGOMENTO (#PCDATA)>

<!ELEMENT=20 ANNOED (#PCDATA)>


Allora=20 il documento "biblioteca.xml" assumerebbe questo aspetto:


<?xml=20 version=3D"1.0" standalone=3D"no" ?>

<!DOCTYPE=20 BIBLIOTECA SYSTEM "biblioteca.dtd">

<BIBLIOTECA>

<LIBRO>

......


A=20 questo punto dovrebbe essere chiaro il significato dell'attributo = standalone:=20 vale "no" quando almeno una definizione DTD =E8 esterna al = documento.


La=20 parola chiave SYSTEM si usa per DTD definite localmente; in certi casi = =E8 utile=20 usare DTD pubbliche gi=E0 definite con questa sintassi:


<!DOCTYPE=20 nome PUBLIC "nome DTD" "url DTD">


Le=20 linee contenute nella DTD si chiamano "dichiarative", iniziano con i = simboli=20 "<!" seguiti dal tipo di dichiarativa e terminano con ">".

Il nome scritto nella dichiarativa !DOCTYPE = (che=20 ricordo essere presente anche nei sorgenti HTML) deve coincidere = con la=20 radice del documento XML a cui la DTD si riferisce; tra le parentesi = quadrate =E8=20 racchiusa la definizione del documento.


Il = tipo=20 !ELEMENT permette di specificare il tipo di elemento; la sua sintassi = =E8:


<!ELEMENT=20 nome contenuto>


Nel=20 nostro esempio il primo elemento ha nome BIBLIOTECA e contiene uno o = pi=F9 di uno=20 (questo =E8 il significato del simbolo"+") elementi LIBRO.

A=20 sua volta LIBRO contiene una sequenza di elementi (la sequenza si indica = elencando gli oggetti separati da virgola) TITOLO, AUTORE, CASAED, = ARGOMENTO,=20 ANNOED. In caso si dovesse invece avere la scelta tra una lista di = elementi la=20 sintassi da usare sarebbe (el1 | el2 | el3 ....).


AUTORE=20 =E8 opzionale e pu=F2 esserci una o pi=F9 volte (=E8 il significato del = simbolo "*");=20 PREZZO pu=F2 esserci zero o una volta (=E8 il significato del = simbolo"?"). Gli altri=20 elementi devono tutti comparire una ed una sola volta.

La=20 parola chiave #PCDATA indica che quell'elemento =E8 un elemento di = testo.


Un=20 altro tipo di dichiarativa =E8 !ATTLIST che permette di indicare gli = attributi di=20 un elemento, con questa sintassi:


<!ATTLIST=20 nome terna*>


dove=20 "terna" =E8 composta da nome-attributo tipo-attributo = valore-default


ad = esempio:


<!ATTLIST=20 ARGOMENTO

id = ID=20 #REQUIRED

nome-fig=20 CDATA #IMPLIED

visible (yes=20 | no) "yes" >


ID = indica=20 l'identificativo del tag e permette di identificarlo univocamente nel = documento,=20 CDATA una stringa di testo, #REQUIRED impone che l'attributo sia = specificato,=20 #IMPLIED indica che l'attributo non =E8 obbligatorio.

Un = altro=20 valore possibile =E8 #FIXED che indica un attributo con valore = fisso.


Il = terzo=20 tipo di dichiarativa =E8 quello per le entit=E0, !ENTITY che pu=F2 = essere di due tipi:=20 generale o di parametro.

Le = entit=E0=20 generali sono definite nelle DTD ma si usano poi nei documenti XML; la = loro=20 sintassi =E8:

<!ENTITY=20 nome definizione>


ad = esempio=20 per definire il carattere "&" si usa:


<!ENTITY=20 amp "&#38">


oppure per=20 definire un'entit=E0 associata ad un testo ripetitivo da inserire pi=F9 = volte in un=20 documento:


<!ENTITY=20 sost "Questo =E8 il testo sostitutivo">


Il = riferimento alle entit=E0 si effettua anteponendo il simbolo "&" e = posponendo=20 il simbolo ";".


Quindi se in=20 un documento si vuole inserire il testo dell'esempio sopra illustrato si = scrive:=20


&sost;


Le=20 entit=E0 di parametro si usano esclusivamente nelle DTD esterne; la loro = sintassi=20 =E8:


<!ENTITY=20 % nome definizione>


Queste=20 entit=E0 vengono di solito usate per fare riferimento a definizioni di = dati=20 contenute in file esterni; definizione in questo caso corrisponde = ad un=20 url.


Non=20 approfondiamo ulteriormente questi argomenti; maggiori dettagli sulle = DTD si=20 possono reperire liberamente sul sito del consorzio W3C: http://www.w3.org/.

5.4=20 Parser ed applicazioni XML

Come abbiamo=20 visto un documento XML contiene solo la definizione di un insieme di = dati=20 ottenuta grazie ad un set arbitrario di marcatori. Sorgono a questo = punto due=20 problemi:


1 = - il=20 documento deve essere analizzato e validato;

2 = - i dati=20 devono in qualche modo essere gestiti (ad esempio visualizzati con un=20 browser).


Gli stessi=20 problemi in verit=E0 esistono anche per i documenti HTML che per=F2 = contengono tag=20 appartenenti ad un insieme rigido e prefissato; quindi =E8 bastato = costruire in=20 modo opportuno i browser "istruendoli" su come interpretare e gestire i = vari tag=20 ed i problemi sono stati risolti.


Nel caso=20 dell'XML le cose sono un po' pi=F9 complicate; la questione della = validazione=20 viene affrontata dai PARSER XML che svolgono le seguenti operazioni:


  • analizzano=20 il documento verificando che sia conforme e, nel caso sia specificata = una DTD,=20 valido;

  • lo=20 suddividono nelle sue componenti generando una qualche forma di output = specifico per la piattaforma di esecuzione.


Esistono due=20 tipi di parser:


  • i parser=20 DOM (Document Object Model), che forniscono in output una = struttura=20 gerarchica ad albero che rispecchia la struttura del documento XML; = tale=20 struttura =E8 indipendente dalla piattaforma ed =E8 adatta per = applicazioni=20 interattive perch=E9 viene sempre mantenuta interamente in memoria = centrale;

  • i parser=20 SAX, che leggono il documento XML e generano eventi corrispondenti = alla sua=20 struttura; richiedono un uso pi=F9 limitato della memoria ma = impediscono di=20 tornare indietro nell'analisi degli elementi XML. Sono preferiti nel = caso di=20 filtraggio dei dati o di applicazioni server-side nelle quali non sia=20 richiesta la rappresentazione in memoria dei dati.


Attualmente=20 tutti i browser pi=F9 recenti sono in grado di effettuare il parsing di = un=20 documento XML.


Il = problema=20 della gestione dei dati viene invece affrontato dalle applicazioni XML = che si=20 occupano di manipolare le informazioni ricevute dal parser = trasformandole in=20 elementi di varia natura adatti ad essere visualizzati, stampati, = memorizzati o=20 inviati ad altri dispositivi di output.


Nel caso il=20 documento XML debba essere solo visualizzato con un browser =E8 = possibile=20 ricorrere semplicemente ai CSS, a patto che il browser sia almeno in = grado di=20 fare il parsing.


Riprendendo=20 l'esempio "biblioteca.xml" vediamo un possibile foglio di stile,=20 "biblioteca.css", che permette la sua visualizzazione sia con MOZILLA = 0.9 sia=20 con INTERNET EXPLORER 5.5:


/*=20 CSS per esempio biblioteca.xml */

BIBLIOTECA=20 { background-color: white}

LIBRO=20 { display: block;

padding-bottom:=20 0.4in}

TITOLO=20 { display: block;

text-align:=20 center;

color:=20 blue;

padding:=20 0.2in;

font-style:=20 italic;

font-weight:=20 bold;

font-size:=20 18pt}

AUTORE,=20 CASAED, ARGOMENTO, ANNOED { display: block;

text-align:=20 left;

text-indent:=20 3.8in;

color:=20 black;

font-size:=20 14pt}



Per usarlo=20 occorre aggiungere a "biblioteca.xml", come seconda linea:


<?xml-stylesheet=20 type=3D"text/css" href=3D"biblioteca.css" ?>

Il = risultato=20 che si ottiene aprendo "biblioteca.xml" con MOZILLA =E8 il seguente:




Con i fogli=20 CSS si pu=F2 comunque solo modificare il formato degli elementi XML ed = agire solo=20 sui singoli elementi. Se si vuole invece manipolare in modo pi=F9 = consistente un=20 documento XML, ad esempio riordinando gli elementi o nascondendone = alcuni, si=20 deve ricorrere ai fogli XSL.


L'XSL=20 (eXtensible Style Language) comprende sia un linguaggio di=20 trasformazione, l'XSLT (XSL Transformation), che uno di = formattazione,=20 l'XSL:FO (XSL: Formatting Object), entrambi definiti usando = XML.

La = trattazione sull'uso di questi linguaggi nonch=E9 dei linguaggi XLink e = XPointer=20 per il collegamento tra documenti XML e dell'XMLSchema definito = anch'esso in XML=20 e alternativo alle DTD, esula dagli scopi di questo corso; si rimanda, = come al=20 solito, all'ampia letteratura disponibile sull'argomento.


6 = BIBLIOGRAFIA


"Il manuale=20 di HTML 4.0" di S.E. Mack, J. Platt - Ed. Jakson Libri 1998


"Professione=20 Internet" di autori vari - Ed. McGraw-Hill - La Repubblica 1998


"Linux e=20 programmazione WEB" di M. Sciabarr=E0 - Ed. McGraw-Hill 1999


"XML Le=20 basi" di S. ST. Laurent - Tecniche Nuove 1999


"Appunti=20 Linux" (ora "Appunti di informatica libera") - URI: http://www.allnet.it/AppuntiLi= nux


Articoli=20 vari da riviste tra cui:

"Inter.net"=20 - Ed. Systems comunicazioni S.r.l. - http://www.interpuntonet.it/

"Linux &=20 C." - Ed. Piscopo S.r.l. - http://oltrelinux.com/

"Linux=20 Magazine" Ed. Edizioni Master - http://www.edmaster.it/


Articoli=20 vari da riviste elettroniche tra cui:

"Pluto=20 Journal" - http://www.pluto.linux.it/

"Linux=20 Gazete ed. italiana" - http://linux.cassino.edu/lgei<= /P>



------=_NextPart_000_0000_01C87AE6.45703F30 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.vincenzigabriele.com/cartellasalvaguai/Documents/CORSO_DI_HTML_files/teo-html_html_20a9d823.gif R0lGODlhygLeAPAAAAAA/wD//yH5BAEAAAIALAAAAADKAt4AhwAAAP////wD+wAAAP///wAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAj/AAUIHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOq XMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1 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 ------=_NextPart_000_0000_01C87AE6.45703F30 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.vincenzigabriele.com/cartellasalvaguai/Documents/CORSO_DI_HTML_files/teo-html_html_1fda0aad.gif R0lGODlhBAJCAfAAAAAA/wD//yH5BAEAAAUALAAAAAAEAkIBhwAAAEBAQGRgZICAgP////wD+wAA AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAj/AAEIHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePFQmIHEmypMmTKFOq XMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fMgUCHUq0qNGjSJMqXcq0qVOaQp9KnUq1qtWrWLNqDQpg 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 AAA7 ------=_NextPart_000_0000_01C87AE6.45703F30 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: http://www.vincenzigabriele.com/cartellasalvaguai/Documents/CORSO_DI_HTML_files/teo-html_html_758f6e4d.jpg /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAGMAYADASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiq moX1vpunXN/dyeXbW0TzSvtJ2ooJY4HJwAelAFuivLfA/wAaNM8Y+J5dE/s6exkk3Gyd38zzwoJI YAfu22jOMsOCM5xu9SoAxL3xZ4d027ks7/X9LtLqPG+Ge8jjdcgEZUnIyCD+NF74s8O6bdyWd/r+ l2l1HjfDPeRxuuQCMqTkZBB/GuQ8cXM1t8UPh/PFZT3ki/2jiCAoHf8AcqOC7KvHXkjp68VBrOoX V/8AFzwD9p0a+07Z/aO37U8LeZmAZx5Uj9Md8dRjPOAD1GivKvE/xE1nw4mtXlwdHQ6depHHpABn uprYtGPOeSOXEIYOSN8eASgOSwzoDxJ401XxX4q0TSLfQIH0d7YwPdGZxIsqlsNtxyV+bIHykbcP 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 ------=_NextPart_000_0000_01C87AE6.45703F30 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: http://www.vincenzigabriele.com/cartellasalvaguai/Documents/CORSO_DI_HTML_files/teo-html_html_7146653c.jpg /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCADwAnwDASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAorz3xt4L0AaF4y1+fToLrUrrT5ZfPuY1kMJjt9qeXkfJjbnI5JPXgAQeFvC2g2Xg/wv4ph 0fbqenaUl1nToFE10XtsOrKAPMZs5Ged2OeTkA9JqpYX9pqdlHeWN3BdW0mdk0EgkRsEg4YcHBBH 4Vxlt4zlvdb0bw74g0K1tn1+zklS1W7M7xqE3FLiJ4k2grvX+LlSMdSOU+HPiufwv8I9Ev73Sv8A iQxSyR3V8LgGSIPPIBIIQDujDMqn5g+dxCEAEgHtNVJr+0t7y2s5ruCO5ud3kQvIA8u0Zbap5bA5 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 KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9k= ------=_NextPart_000_0000_01C87AE6.45703F30 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: http://www.vincenzigabriele.com/cartellasalvaguai/Documents/CORSO_DI_HTML_files/teo-html_html_2a0d0b1f.jpg /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCADwAxIDASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDtaKK8 mh1LWLiURQ3t/JI3RElck/gDXNXrqja6vc9bK8plmCk4zUeW17+Z6zRXmH/FT/8AUX/8i0f8VP8A 9Rf/AMi1l9c/uM9L/Vlf8/4np9FeYf8AFT/9Rf8A8i0f8VP/ANRf/wAi0fXP7jD/AFZX/P8Aien0 V5h/xU//AFF//ItH/FT/APUX/wDItH1z+4w/1ZX/AD/ien0V5h/xU/8A1F//ACLR/wAVP/1F/wDy LR9c/uMP9WV/z/ien0V5h/xU/wD1F/8AyLR/xU//AFF//ItH1z+4w/1ZX/P+J6fRXmH/ABU//UX/ APItH/FT/wDUX/8AItH1z+4w/wBWV/z/AInp9FeYf8VP/wBRf/yLR/xU/wD1F/8AyLR9c/uMP9WV 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 DPG6+eYyjp0YYJOT8wOMMAAB0oE3iHxbrunXF9e21vp0UMcC2dw0J3SpuaRip+ZhgAZ+UDscmoPB XhOOy0DT11bTHh1CzmeTa026Nn3MVl2qxQsFYAMRuG30ArodT8PaXq83nXlu7S+S0DPFM8TPG3JR ihG5fY5HX1oA4XTtW1TX7jwVLdandQjUI7xLmO2fylk8sEZOBnLAcnPHVdp5rXuLRrTXrPRY9R1j U3jsXkW2N20JBMv+ulnVlJHO0KFYgAkD16SXw/pk19Y3jW7rNYKFtfKmeNYh6BFIXBHB45GAeOKf faHpuo3cd1dW2+dIzFuV2TfGSCUcKQHTI+62R145NAHm2kmXXLjwDcahdXUs88d9HJItw8bMIwQv KkEHHBYct3JrZa4vNT03xXrD6jewXGl3M8NolvOUijEA3LlPuuWP3twORwMVvw+BvDkH2by9O/49 twizPI2Fb7yHLcocnKnK/M3HzHNu88M6RqF5JdXVnvkl8vzgJXVJthynmICFfH+0D6dKALGjXsmp aFp19MqLLc20czhBhQWUE4z25q9RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRXN6/4nksNXstC0y1S61e9UtGsr7Iokw3zue4G0naOSFPQ4zFres614XtF1K+S y1HT0YLcfZomglhBYAOAzuHHJGODkjnGcAHU0VnPr+kQ2drdz6la28F3GJIGnlEXmKQDkBsHoR+d Tf2rp39o/wBnfb7X7d/z7ecvmdN33c56c/SgC3RVS+1XTtM8v7ff2tp5mdnnzLHuxjOMnnGR+dPv dQstNhE19d29rEzbQ88gRSeuMk9eD+VAFiiszVvEGm6LpMupXVyn2eNig8shmeQEjYo7tkEY7YOc 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 xBbErHHcjO3IX7hKKMqMBgOQao694e0uL4Uxaulu635060VpvOfLgtGcMM4Yc8ZBwAoGAox6Qmi6 VHZSWKaZZLZyNue3WBRGx45K4wTwPyFD6LpUllHYvplk1nG25LdoFMannkLjAPJ/M0AcmNH08fEt tO+yobKTRxPNAxJSeQTEB5Qf9Y3J5fJzz15rD0N47/w94JtLm3fULiVrvybe5n22zBN4zJlHJKrg IAOOeRXov9gaN5vm/wBkWHmeX5W/7Mmdm3Ztzjpt+XHpx0o/sDRvsf2P+yLD7L5nm+T9mTZvxjdt xjOOM0AeYT3MTfC/xTbrdW8ipqkn2dYTtj8sTQkmJcnCZcHAJA3Dnmug8Wzq/jnT7PU7qyt9M+xN LB/aNuZLZrjcQ2RuUFgnTcSBngZYV18mg6PMZvN0iwfzpPNl3WyHe/PzNxyfmbk+p9amn0rTrqzi s7iwtZrWLHlwyQqyJgYGFIwMDigCloVxHa6Rp1nc6wl9cSK6wzyjy3uQpPzKpOWAXHzDORhsnOa2 Khktbea4huJLeJ54N3lSMgLR7hg7T1GRwcVNQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFAH//Z ------=_NextPart_000_0000_01C87AE6.45703F30 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.vincenzigabriele.com/cartellasalvaguai/Documents/CORSO_DI_HTML_files/teo-html_html_216b53b.gif R0lGODlhIQJ7AfAAAAAA/wD//yH5BAEAAAIALAAAAAAhAnsBhwAAAP////wD+wAAAP///wAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAj/AAUIHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOq XMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1 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 kT3Ikfy4iEdpXEGpk+uobkWJhk+5XVEJhzs5djVJhFeJaVmZhT/Jfh3plGNpiTmplVM5b125g195 S2kplluZdFVZhm8ZiDaWaIU4lw7IkoJ4lhnUatH4LkOJlo/olYA5ije3dAJVmIFZlz7Jl0xZdFA1 mEyTmIa2fYR4l4fpbcf4maC5JHhplZgpkaBDJFI5kxvXkmYpmTSZj1+2O46pmJC5h665mo8Jlh14 h7eJjz1pm2vJmoHHmFBZYo2JmZfYmsFZln5VkUCJkuqomqXnl0ZZmjQ2ktNpmCqpjL+ZnX/Zm4u3 TfD/mIK/GIIX1mSW6Zwrg5yjaZfWyY1zs2cOSZ69VVr1mJmMCJ7QKZyJ+J7VRU3UJ3vQ15zwGZ1L +ZrdaZP+KZ7bVF53F12/6GD5JJMHiptNuZkLSqANSn4JWI4G6FsaaqDxh6DUSZr6yY4Ein8hJV3S WHtcNlBh+E+hWY0Nw5lseIEiSXjluZucdZ4TqmTSaYsFY6O1uZ8kqpQjKqRck6F62ZeTKZfLqaSp eKJU6WKdyJYUmqRSOjBEmqDCpo1UuqXCxqS0F5NAWqFiGolhypNFppBilqYS06UlumJgGqVwWnRk SpZ56abcdqdLuqZcaaYieoV+yqV5apx7up0LWaiG/wqodJmSWUqojKovcsqfjqaobzqpjWqnT1oy dRqkmpqEjuqklxqpZxiqU8qpR1qqZ6qlqIqno5qDkNqqkvqqBHao9xl1n4qmtloyuKqeYyaUv9qr fhirQhiWvKmqxIqpiGdzszqop7qs9mis6CioSFqr0uqr1OqbbcqszZqtGTOsNNqkqcmr4Fptyuqd iWqq+3iuFrmtWzej1rKr5COv9nqv+BqawypwYdgi42pOxXIq7kqMAfs7A2tBBes9B2uNCZtLC+uE DetPDwuxEasQ/1pK/coiF8tJGbsiG2tIHasiH9tFIZsiI4tEJYsiJxtDKXsiK4tBLWsiL+s/MVsi M9D7PjVLIvm6szzrMRX7s0AbtEI7tERbtEZ7tEibtEq7tEzbtE77tFAbtVI7tVRbtVZ7tVibtVq7 tVzbtV77tWAbtmI7tmRbtmZ7tmibtmq7tmzbtm77tnAbt3I7t3Rbt3Z7t3ibt3q7t3zbt377t4Ab uII7uIRbuIZ7uIibuIq7uIzbuI77uJAbuZI7uZRbuZZ7uZibuZq7uZzbuZ77uaAbuqI7uqRbuqZ7 uqibuqq7uqzbuq77urAbu7I7u7Rbu7Z7u7ibu7q7u7zbu74bFQEBACH/C1NUQVJESVYgNS4wCQEU NwAAECcAAAA7 ------=_NextPart_000_0000_01C87AE6.45703F30 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: http://www.vincenzigabriele.com/cartellasalvaguai/Documents/CORSO_DI_HTML_files/teo-html_html_3904fcd4.jpg /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAH4A/ADASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKwPGN1d2PgzWb2xupLa7tbKW4imRUYhk UuBhwQQduDx0Jxg4I5XwLqmq6/caXcN4m1WXybCC61G0vdMiijnadHCiFxGjBVdGO4blYbQGPNAH pNFcRpfxFs9cS3udK0XWL2wnvfsa3tvHE6I27G90EnmRpj5sugwCDjkZ0NV8Y22n6rcabZ6dqOr3 lpb/AGi7i06NHNun8Ifc6jewyVQZYgE4xjIB09FcLq/xT0DSYtOufKvr2y1K0muba7solkRxEpZ1 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 NcpcvZW6W4mSIxB1QbVO0s2DtAzzycnjoIPFPhuLxNpkVu1zJa3drcJd2V1GAxt7hM7H2nhwMkFT wQT0OCN6igDD02y12LUZbnVtaguYTEI47W1shbxq2SS5LO7lsYHDBQAeCTkc1/wrM/2P/wAIx/a3 /FJfavtH9nfZv32zd5nkefvz5fmfNnbvx8u/vXoNFAHBT+AtSnv/ABhcDW7VV8SW627obBj9nVUM akHzvmPlswPTLYPAG0z3HgWa58H+HtHfVUF5oVxbXFrdC2Plu0HCB49+SCvBw455GB8tdtRQByOo eHvEep6Fq+nXfiO1d9RQwHGmYit4WjKMI1Eu/eSd253Ydgoq/wCGNG1LQtGttLvNQtLyG0git7Zo bNoGCou3L5kcMSAOgXv68b9FAHn3/Csz/Y//AAjH9rf8Ul9q+0f2d9m/fbN3meR5+/Pl+Z82du/H y7+9XvFnhXWPEt5YOmsWNra6fqEOoW0bae8j+ZGDgO3nKGUkngKp6DPGT2dFAHMa3omva14cl0pt X06J7u3mt7uYac5DK4Kgxr5/yEKT1LZPPHSjRNE17RfDkWlLq+nSvaW8NvaTHTnAVUAUmRfP+clQ OhXB556V09FAHGeE/CuseGry/d9Ysbq11DUJtQuY109438yQDIRvOYKoIHBVj1Gecjs6KKAOJ8b/ AA+h8Y3FncJql1pcyI1tdSWgAa6tXILwseDjIyM5UZbKnNT+JvBUOujRlge0gh0t28uxubMXFlIp jKAPCGQEoPuHPy88c8dfRQB57Z/Du80zwzr2hafqtjBa6zLJLIP7OOIPNi2SrGqygBcgFBzsAwd/ UdH4Y0bUtC0a20u81C0vIbSCK3tmhs2gYKi7cvmRwxIA6Be/rxv0UAcL/wAIj4j/AOEx/wCEo/4S DS/tv9n/ANn+X/ZMnl+X5nmZx9pzuz3zjHau6oooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA orL13VU0PQ73VZraeeGziaaSODbv2LyxG5lHAyevbjJwKqWPiKS61iPTLrRdR0+aW3kuI2umgZXW No1YDypXIOZU6gd6AN+iiigAooooAKKq2V19shaXyJodsskWydNrHY7JuA/utt3Ke6kHvVqgAooo oAKKzNM1VNTn1KFbaeCSwuzbSCbb8x2I4ZdrH5SsikZweeQDVmyuvtkLS+RNDtlki2TptY7HZNwH 91tu5T3Ug96ALVFFFABRVO5vbe2ns4Z5Nkl1KYoBtJ3uEaQjjp8qMefT1xVygAoqhpl3Nd27G6tZ LW5icxzRNll3AA5R8AOhBBDADrghWDKL9ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFAHN+OfMfwHr0UdvPPLNYTQxxQQtK7u6FVAVQSeSO3HU4AJqXwxp1hY2V1ca a2peVfXBuGGombzQwRIsfvh5mMRgjdnrxxgDfooA8u02O+Pi/TdRbTzbXLXbtqaxaNcpMivG6iN7 xmK3EayvEMINuEVwFSPjQ8ZWlrdeIF+02f2nbaoF+3eHJ9Vtl+d8+V5RHlyf38/eHlY+6a9BooA4 m705YtH0CLUtGk/sG3svLu9JjVrzyZdsYiDKoJmRMSLwG+Zkfb8u9J9JtdE07QtXmh03Uhpd5cbn tbiylkLKY44tqW+0yCLChdjKMAHAEe2uvooA43wFdW0WlvpMGn3tl5V3eSxRzabPbRrC11I0YUui r9x1IUHIHbg4wNNjvj4v03UW0821y127amsWjXKTIrxuoje8ZitxGsrxDCDbhFcBUj49RooAK5nx NbJLc2Umo2cl/oSJKLu0jga43Skp5TtEoJkRcSDaA2GdG2/LuTpqKAOB8NHT7G08VRz6NqMOmS3q PHazafNL5lu9vDGAkYViUyrDywMxrhWVMbRc8BXVtFpb6TBp97ZeVd3ksUc2mz20awtdSNGFLoq/ cdSFByB24OOyooAK828T6dfSeIrufURBJbNsOmynQ7m/e3UIobY8EimCTflt20Mcph22bY/SaKAO B13QLa7tfDGpa7pEep3Fm6DUppdOSaZk+zyrgxxh8jznQ7E3AE5HA3VqPNFH4Muk0HRp7O2XMUMK 2r2pVGI8yVIU2yjbudtoCO5Q7fvKx6qigDgfAsEtnrOopHbRwafPbwmBLXRZtNg81Gk80mKQnDlX h+fjeAAM+W2NvSYNPTxd4ikttIvrW9k+zfa76ZWEN3iM7PKJYg7B8rYA5POa6OigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoorlZ9c1bUpp/8AhG4LO4tbfcr3 E7/LLIADsQAj1+8eD6jGSAdVRVWzmmntY5LiBreYj54WYNsPpkcEe/8ALpVqgAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKw/DumXGiafLYyyCSFJ3NsQclYicgNwOckk/WtyigBqA5JPU1x7aNZ+KNa8Q/2khL2cqW NlKoG+z/AHEcvnQlgfLm3T/fXH+rj4yuT2VYGr+GLbV55pZLu7gS6txaXsURTbdwAtiN9ykqP3kg yhRvnPPC4AK+neKUbwtoeqajBd+fqNlFcMLDT57hVZkVmH7tXKjLcbjz74NaCXK69pcv2C51LTzv 2CZrNoJVIwTtS4jwQRxnaRyccjjXqne28tzZyQRXs9nIxGJ4AhdMEHgOrLz05B6+vNAGJ4IhW28O ywI0jJHqV+itJIzsQLyYcsxJY+5JJ71g6bolto1817rvhTRx52rzNDqY2S3IeW7YwM6+XlQS6KCr sVJTIUbinTaD4dk0EyAa3qN7A7yyGC6WDaJJJDI7gpErZLM3GcfMeOmCDwzbwXMf+lXb6dA4kttN cp9nhcHKlQF3kKeVVmKodu1RsTaAb9FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV4x4 o8UW7Wul6rquk3+qDUrt7O3trCX5bNfl9vmnPVUPDj0wBXs9UrXT7ewM5tVKfaJWml5J3O3U8njp QAtnC9rbpbtPNcGIbfMmILsO2SAMn3/OqFx4m0u31y10UT+df3EpiaOH5/IPlNKPNI+5uVDtB5bq AQGI2VUKMD9a4rxV4k0Ox8R+Hbe61rToJ7XUme4jlukVoVNncAFwTlQS6AE/3h6igDqNU1S10exa 9vWkWBHRP3UTysWdwigKgLElmAwAetJp97Pe27Sz6Xd2DhyBFctEzEYHzDy3cY5x1zweOmcDxXHF qFroWoreyJpcF4Lm4vbSUDZbtbzJvDjJCEyKC68qrF9y7dymizXVymoQ+H9UjuNMVITY392z3qea WbzkDmQNKgATDbzhnddx2bFAOvrAg8TW89zH/ot2mnTuI7bUnCfZ5nJwoUht4DHhWZQrnbtY703W NOg12O4ZtU1HTriDYQEtrB4GDZHJZpnBGM8Y7jnjnBvNTsdS1rTprCSQ+IbeeJJNLml3NbxFiszy Q7isZWN3ImGN3yKrusgVwDW1fxPbaRPNFJaXc6WtuLu9liCbbSAlsSPuYFh+7kOEDt8h45XO/XGt rNn4X1rxD/aTkPeSpfWUSkb7z9xHF5MIYjzJt0H3Fz/rI+ctgbfhrT5tI8LaTplw0Zns7KG3kaMk qWRApIyAcZHoKANeiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArm9Q8STw3ctvpWkzakbcN9o kjfaiMMfIDg7n55Uc/XnHSVznhTTrjRdLmsbmGNPKuJPKkRQDMnGHbBPJ6ewAFAGzaXK3lrHOsc0 QcZ8uZCjqe4IPQ/5FWqYgOWYjGT0rmPE1leiOa/R9VuZI/8Aj1h06cwC2wuTJIoJ875hyNknG0LE x37wDqqK5S9nfVrzQtJ/tAtBeWkt9cXVhK0IuEjEahY2RtyKzzo4KueI9p3Bial0rVodMs9Wg1XU Ejt9Jvfs3227mCjy3SOWMMzHqqzJHuYksU3E5bFAHTUVkad4l0LV52t9L1rTr6dVLtHa3SSsFyBk hSTjJAz7iuV0eILqckuuW3iK2kbVbkQXk+pzLayH7S/koIlm4UrsVd8ao3ABJdQwB6DRXIz2lz4i 1XW1j1G7sX010tbIwTOFjnMKzGZ0VlEo/exjy33L+6P99hW3oOp/214f03VfJ8n7daxXPlbt2zeg bbnAzjOM4FAGnRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFA BRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR QAUUUUAFFFFABRRRQAUUUUAFYl7pmpveSS6drP2SK4x9oSWDzyhAA3QEsBG2OzB0yAdmS+/booAw Lnw8sNnpcejyx2E+lIIrR3RpkEWzYYnG5WdMBTjePmjRjnbg29I0w6baOjz+fczyvcXM5XaZJGOT xkkKBhFBJKoirk4zWpRQAVzg8PXcssVveap9p0m3lSaGB4T55aNg8YknLneqsAR8oY7V3M3z7+jo oA5zU/D95c3t3Lp2qfYI9QiWG9CwkucAr5sLK6+XNtbbvYP9yPjCYO3b28NrbxW8EUcMEShI40UK qKBgAAcAAcYqxRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFcbbxX/jCF9RTUbvTLI747SK3bazYIHmOQeeQRt4xjg9yAdlRVSyW 5S2jju5lnnUYeVU2Bvfbk4P+eOlZ+oeJtO03UTYTC+kuViWZktdPuLjajFgpJiRgMlG6+hoA26Ky 7nWrOz06C9uWnVJ9oijW2kaZyRu2iIL5hYAElduQFYkAA4sWN7BqNpHdWsnmQvkAlSpBBIZWU4Ks CCCpAIIIIBFAFyiisiHxDplxqh06K4kM+9o1YwSCKR1zuRJSux3G1sqrEjY+R8rYANeisjUfEOma VcLDdzyI5QSOUgkkWFCSA8rKpEScN8zlR8rc/Kca9ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVl6Zo8GkRXEdmSI552nKMAAhbHCg AYAxwK1KKAGKu0HnJPU1yl/aBvEmq6rbeJZNNltbKCO4heGPygqGWRZJTIMtEfMYZRk+4435B2dd VC80nTtQuba4vdPtLme0ffbSTQq7QtkHKEjKnKg5HoPSgDAW8lvdb8J6lqFrJZpdWU+LWbJMN46R yKpBAIdYkuRuIGBuHG7Bk0Z7xY/EVzpcME8b6q/2OKaYwxHasaT8hWKfv1uCfl+Zst0bcd+/sLTU 7KSzvrSC6tpMb4Z4xIjYIIyp4OCAfwp9vbw2tvFbwRRwwRKEjjRQqooGAABwABxigChp0+uyXDLq mnadbwbCQ9tfvOxbI4KtCgAxnnPYcc8cprOnXOnLoegW+rwfYzqFp/Z2neQBO8UEscrq0pYho440 Y5Cq3yxguzEh/QqoWek6dp9zc3Flp9pbT3b77mSGFUaZsk5cgZY5YnJ9T60AYmvRf2FFqOtx65Dp FhNibUZJ7bziGCrGHiO4bZCqooBWRSVTCZLb9DwpZz6b4P0Swu4/LubawghlTIO11jUMMjg4IPSr cmladNqcWpy6faSX8KbIrtoVMqLzwr4yB8zcA9z61foAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAM3W/wC0 P7In/srP2vK4xt37dw37N3y+Zs3bN3y7tu75c1z/AIehij8QgR3Wt2TR2sok0jVJnm3MzxnzklZ3 D7QoBCO6r5g+4zMG39a0iDXdONhdSTpC0sUpaCUxvmORZFww5XlByMH0IPNR6bows7hru5v7vUbs qY1ubsRho4yQSiiNEVQSASQMthckhVAAObsPiXpF9qNsq3elmzvJUgtjHqSPdFnIVC9uBlVY46Mz LuUsq/Ps1NciMHifw1dRXF2jy3r20sa3MgieP7LcPhot2wncqncRngc8VYg8NfZbiIW+q6jFp0Th o9NjaNYEwchQwTzQgPOzftx8mNny1HqnhmbVdTgvf+Eh1W1+zS+dbwwJb7In8toyRvhZjlXf7xP3 uMYGAA8S+KbTw59lgluLFLu73mAX94LWHamN5aQg4xuUAAMxLDjaGZTSvE6654fvb/SooL68tfMi a3t7pXjknVAwRJh8pVty4bsG+YKwZRcu9G+2QWub67iv7ZdseoxCMTcgB8goUIbAJUptyAQAVUhU 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 XL5ylRD/AKQ+wxkyZj7qzj5Nv3zjBC4bD4ZtgNdiuru6vbfWnZrmCYoqqDGIiqFFVgNiovJJ+UHO SSQC3psusS+b/atlY2uMeX9ku3uN3XOd0SY7dM5yemOeXsPiXpF9qNsq3elmzvJUgtjHqSPdFnIV C9uBlVY46MzLuUsq/Ps6TTNJmsrhp7nWdS1FyhRBdGJVQEgnCxIgJOBywJGDjGWzXg8NfZbiIW+q 6jFp0Tho9NjaNYEwchQwTzQgPOzftx8mNny0AV9S1vWbXxLDpNpotrci5t5Z7aZr8xgCMxB/NHlE oMy4GzeScZABJWPWPGCaHZ2SX6WNlqV35myG9v1ggAjIDt52DleV2gLvO9couH2WNQ8MS3muJqsX iHVLOaOJ4Yo4FtikaPsLgb4WJyYkPJOMcYHFX9U0tNR8qVLmezu4ciG7t9okjDY3L8ysrK2BlWBG QpxuVSAChpXiu01bw9earaobx7LzEng09xc7pEQOViZcCTcCpXofmAIVsqK/hzxTca9qMkKrok9r HEXkuNK1gXnlPkBUdfLQjcN5B5+4fatVNHYaRd2EmqajLLdI6vetKqzKWXaGTaoRCABjaoGRkgkk mKw0E2moi/u9VvtTuUiaGF7sQr5SOVLgCKNAdxRPvZxtGMZOQDI/4TG4m8Rf2Xa2ultILryDaz6q Ir3YHw8otzHyoUNIvz/MmCME4pNb8fWGlaxNpyz6V5lntN2l7qcdrJllDhYkcfvG2kHLFEyyjfnd s0f+EZMt1uutc1S6sxd/ahZTGIxhxJ5qAMIxJtRwpUb+igHK8VPe6E1zeyXVjql7pcsuDObQQkTk ABWZZY3G4AY3AAkBQSQq4AC81m4l8Mrq/h/T/wC2JZoo5rWDzRb+cjlTnc4+X5Tu5HbHWtusjU9F XUtBbR0v9SsVKIi3NrdMLhQpB4kbJJO3BJySCc9a16ACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArgNK0LQ9TvdVl1S FGuJNWngh3TMhbA37VAIycBz64B9K7+uUm8Eafqml6jp2u20F9a3moSXgjO5fLJPy4YEEHA5Ix94 jkdQCLwpb+GLuWbU9Bs3MUM0ltHdku0c20Dc8RYkMuSU3DqVYDI5PYVVt7aO1ght4Io4YIVCRxRr tVFAwAAOAAO1WqAMvWNVTSbNJzbXFzNLMkUFtb7fNmdj0UMyjgbmOSMKrE8A1UsdT1ltYj0/UtEj t0e3km+1210Z4Mq0aiMkxoQ53McEAYUYLfMEk1+wvLuKxutNED39hdrcwx3LlInyrRurMqsR+7kk wQOG2k5GQakr69r9veWotJdCtJrOaFZ5pVa6SdgAkiCJ2QIoLHO/cWA4UDLAGvZ6tp2oXNzb2WoW lzPaPsuY4ZldoWyRhwDlTlSMH0PpVP8A4Svw55P2j/hINK8ryvP8z7bHt8vf5e/Ofu7/AJc9N3HW qFpaXt3qekk6L/Y0Ok7lJWSNkmQxlPJh2HPk52v84T/VR/Jn7nGXPhXVLyxuyPC7x3Vxb68ql3tt yzXTK0LkiQ8mMGLIJIxg4XmgD0m91zSNNkkiv9VsrSSOITuk9wkZWMsEDkE8KWIXPTJx1qVtW06O 3s7iTULVYLx0S2kaZQs7OMoEOcMWHIAzntXMazLcf8Jp4bvo9Eku549NvZfspeITwlmtVJQs2wuN 20/OBtL4Y8BpJtF1CTQ711g2TXGqW+qR6eHXMKxywyNEDnZ5jmJ3PIXzJW+YjLkA6C41zSLT7Z9p 1axh+xbPtfmXCL9n3/c8zJ+Xd2zjPaqegeLtC8TW8D6XqdpLNLAtw1os6NPEpA4dFYlSCwB9DxVL R/7Wn8Y6jqF7o09ja3NhbRQtJPE7BopJiyyBGO1j5oI27l2jlgx2hfCn9q6dpWk6DcaNPGthaR20 97JPF5L+XGF3RBWZ23MAQHVPlJJwQFIBtyarp0OpxaZLqFpHfzJvitGmUSuvPKpnJHytyB2PpUd3 rukafdraXuqWVvdGJpxDNcIjmNQSz7Sc7QFYk9BtPpXE6j4a1xZNTsVm1u5hvrt7lJrSSxjhQs2Y 97yoZ0aPCKGTzCqxoUwQEXa8WJe3OqaCYfDt3qdvYXovZHja32giGZFAEsinerujZxgYyDkYoA6S wv7TU7KO8sbuC6tpM7JoJBIjYJBww4OCCPwq3VO1jQxG4Fn9lludss8bBd+/aB85UkFgFVcgn7ow SAKuUAcVHoOm634y8QDULbzvJ+zbPnZcZj5+6R6CtW38IaFY3UN1b6eqzRsCjGR2wfXBJFWLLS5r TXNV1AyIy3piCoAcqETHJ9yT+Q9eNQqzEZ24BzxQBJXP+Kten8N6ONUi0+S/jSeGKWCFyJSsjiP9 2u0733MuFJXPPI79BXO+L47ybRoI7HT576Vb+zmaOF41ISKdJWOZHUdIyBz1I7ZIAIo/FkV54wtd D06FLuCSye9lv1nHlKo2bUTaCHciWNiCVwjq2TuArUTXdIktLW8j1Wxe2upRBbTLcIUmkJICI2cM 2QRgc8Gufs9COi+MdOGn6ZO2mra3olug0ISN5ZIWRMbg21EgEa4U7VES5wDto31lrtvpMmlW2hTX Xla2NSa4S4hRJIjfi52xhnDGQKQCHCLw2GOF3AHXanrukaL5X9q6rY2HnZ8v7VcJFvxjONxGcZHT 1FV9Y8R2GleH31f7ZZNG8Rez868jhjunKFkRZGO35scH056VkeILfU18QNc6bZa4gktYo5LzSpbI +bteQiN0ufu7NxIZevmEH7opPEMGrf8ACvpNDttCNze3WlSWjLprRR21vIYtgAEroRHk8YBIC8jp kA7OszT9c0jV8f2bqlje53Y+zXCSZ27d33Sem9M+m5fUVn38V74j8OXEB06fT5jLGfs188ZFwiOj tGxieQCOQBo2znhmypHBLBG1HxAuq3HhqfTrqK1a2+13c0RkdGdW8sCJ3DLlScsRtONoO5sAGpHq unTanLpkWoWkl/Cm+W0WZTKi8csmcgfMvJHcetX685sdL8Q/21o895balts717m6jAsksy8iSxu8 ATExG+Yv+8OSgYnL4B9GoAzdf/5FvVP+vOX/ANANYGj+C9AutEsLibT90sttG7t50gyxUEnhq6TV LZr3Sb20iKiSeB41LdAWUgZ9uaNPtHsdNtbPeH8iFIt+MbtoAzj8KAINL0bT9HEsdhbCFGYM3zFi ePUkn8Pc+talMVWDMWxz6U+gDEv9UvEv/wCzdJs4Ly+jiW4nFzcmCOKNiyp8wRyWYo+AFxhGyV+U MWGupLplvdarD/Y0093JaxW17KquziR0RRzhmcLuAUnOeCw5OZ4htZ7zWR9r8KR6vp8NuhtbiB4l u4J2Z95jMjpsAVIjvVlYMVxu5KU/EdheRfD6CxvhDqE7ahZIYbiQtGytexbYXdlLOoUhC7KWYDcR kkUAdXpuradrNu1xpl/a3sCuUaS2mWVQ2AcEqSM4IOPcUWeradqFzc29lqFpcz2j7LmOGZXaFskY cA5U5UjB9D6Vz82napr9zeXSw3fh95NMmsFZ3jadncgpKfKcjEXzbPmzmWT7nV5bS0vbvU9JJ0X+ xodJ3KSskbJMhjKeTDsOfJztf5wn+qj+TP3AC/N4r8OW/wBo8/xBpcX2aUQT77yNfKkO7CNk/K3y NweflPoar6j428OaTriaRf6zZW1yYnlfzrqNBFt2YV8sCrMJAVGOQrHtVCEX8fxBvdTfwxfNDJaQ WEV7vtTsVZZmd/8AW7xGQ8ZwBuO3lcgVb1Czn03WNJv9O0l7u1s7K4sRaWRijaMO0DIVDsiBAISM A5GVwCMkAG/b3EN1bxXEEsc0Eqh45EYMrqRkEEcEEc5qxVOxmuJ7WOW6tfssz5JhMgcoMnaGI43Y xkAkA5ALAbjcoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigDLutC0i91GDULvSrK4voNvk3M1ujyR7TuXaxGRgk kY6GtSiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACqGpaTp2 s262+p2FrewK4dY7mFZVDYIyAwIzgkZ9zV+igCvb28NrbxW8EUcMEShI40UKqKBgAAcAAcYqxRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUVTvWvUtJGsIYZrkY2RzzGJG5GcsFYjjP8ACfTjrWT4b1jWNZEs97plla2iSzwBob95nMkUrRN8 phQbSUYg5z0454AOiorHtvEmh31xbW9rrWnTz3SF7eOK6RmlUFgSgBywBRwSP7p9DUup67pGi+V/ auq2Nh52fL+1XCRb8YzjcRnGR09RQBp0VQl1XTrbTBqk+oWkWnlFcXTzKsRVsbTvJxg5GDnnIol1 XTrbTBqk+oWkWnlFcXTzKsRVsbTvJxg5GDnnIoAv0VmWmu6RqF21pZapZXF0IlnMMNwjuI2AKvtB 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 CE23AQhSXD9SsWOjV11FAHnWneHPEUV7p1pcRp/YcF6Ihai5yYbW2e4ktHxjqWNsDglsQpuLb3Cb d3aXtpqerEaL/bMOrbVBaSNUhQRhPJm3nPk53P8AIH/1snyZ+/1VFAHE+ItMvx4N0zQzp914hdGs xdSloQJlhliaQyCaQZLqjcfNz1I61p6lp8uvaFK62Bsr248oSwXezdLHFLv8iVoy48txvU8sAsrf KclT0dFAHG26aleePdP1iTw1PZQDT7iyluJprczAl4pE3hHb938jhcMx3M2VUfM2vpySr4i1l30G GyjbyNmpJIhe/wAIc7gBuHl/dG4nOeOK26KACuf+yzjx2bzyn+zDTRF5mON5lJx78D8OPUV0FFAD PM/2G/KjzP8AYb8qfRQAzzP9hvyo8z/Yb8qfRQAzzP8AYb8qPM/2G/Kn0UAM8z/Yb8qWMEIAadRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU UAFFFFACUVm63rdh4f0m41PU7hYLSBdzux/IAdyTwB3rwPV/jd4j1y5lTw8kOlWSnCySIsszfXOV HToBx6mplJRV2aUqM601Cmrtn0dSdK+XLT4ofEPTpPPk1iG8UZJgnt0IbH+6oP5GvYfh38UtP8dI 1pLELLV4l3PbFsiQd2Q9x6jqPfrRGcZ/Cyq+Gq0GlUi1c9EorJ1m8vLOO1FjGsk083l7SgY42O3A LoM/L3b1qld6zqEM08McETXCRtttl3O5Ii3iQHglN/7v7oye+flqjE6OiuQuvEt5EhkQWyxGfy1l ZQVwTMRy0iryiRN94cPnnIqSfxBfW5vWAt5YIY2EMyoQsji3E3BDknPPGAMfxk8EA6uiuSPiO5WG 3kW5sZWdZn8tVG6Rk2bYV2ysN7bjjBbqPlrT8Q6nNpVpbSQmJTJN5ZaUAgDYzfxOg6qOrCgDaorI s768uNReGWKFI1gSYhQ24bwAo+YDoyS5yBxs75A16ACiq90xW2dhwQCR+VY3224/56f+OigDoaK5 77bcf89P/HRR9tuP+en/AI6KAOhornvttx/z0/8AHRR9tuP+en/jooA6Giue+23H/PT/AMdFN8J3 dxew6pJcymRk1CSNc/wqFUAAdqAOjooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK KKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo oAKKKKAPnr48601/4m03wy0xjtIYftMig/flYkKD9FHH+8a8z+zixQRpbGaDO7g8g4/UV678UfhX 4j8Y+PBf6WLZLRrSNWnuJdqq4LArgAt0wc4xzUsnwkkuPDMP9mmW31myi8m6t7ksY7mYBSWSQ/wk EkEAjkA7SGA560Jy1j9x7OWYvD0k41VZ9JJX+TT6HlcEiywq6KQuMYI6e36VlQyX/hnXrXXrIhXt pxImDjHP3T7EcfQ16DH8OPGjLtfQij85X7XASOn+33z+ledalez3l1/ZcEJMpl8raDuLPuwAMe9c 9CFWE9FoexmmJwGIw3vTvJLS3f07H2BeeKNH07TLDUL+9S1tr5o0geTOGZ13KMjpx+FVJ/H3he18 PQa/PrMKaZcO6QzFWzIVYqwVcbjgqeg9+lcr8SvBmq634H8P6LplqL2SxuoDOpkRP3aRMrHLEA9R wOear/EzwHqd/deH7/w1bTLDpZkVrTTrhLORFcg7omI2qeueK9A+OO7Xxh4fbw2fEQ1a3/sgDm5y cA5xjHXOeMYzXJeH/iNH4n+KDaVo1/Fd6G2lmfcIirLMHAI+YAjgjgiuY1D4Z6rf/Ca706xs9Rt9 Rk1P+0DaahfxTPMdu05dAq853YPORya2/Cmh+J5vil/wlGr6Bb6VazaV5HlxXKSeW4ZQFIGDkhc8 AgAgZzmgDp9C8eadqNpB9tc2t1NdS2gAhkMXmJK0ar5u3YGYKCFJz83etXUvFGk6TcmC9uJodpUP MbWUwxk4xvlC7FzkdWHWuVbwzq3/AAq86QLT/iY/2n9oEXmJ9z7f527dnH+r5657deKreLdG8Ra5 b+JrCSy1K6M6Mulm3v1gtVj8oDDgOpZt+7IcMDkdByADprrxnZWnjSDw48F2ZpoWcyrbTMqvujCr kIQVIkyXztXGDgmuorkZbO/t/HekaiLGWa1GlS2UskbJ+6kaSJgWBYHbhG5Ga66gCve/8esn+6f5 GvIJJ/s+t64tvdaoNSTUESx82e4azUyQwkJIWPkhS7tlfv4bCDdsFev3v/HrJ/un+RrgX8MRyjWo 5dTvpINXWRZ4T5QVC6LHlCIwwIRVUZJHGSCeaAI9e8V2uj3yWAn01LsxiZhqF8LWMISQMMVYsxKn gAgBTkjKhpv+EltZvC/9u2a+dAeBlwFQ79jF3GQEVslnG4BVLDcMZnudHM/kyxaleW16kYie8hEX mTKOzhkKHkkj5RgltuAzAvk0ppNIFiupX8UgZX+1pIPOLBw5OSCuCRgrt24JUADAoAoaZ4l+02Oo ahef2cun2cfmNd2F/wDbIzgMzqcIpDKoU4wchxioNJ8aWWpapDYmbTd91u+zLaailzJwpYrKqj5G 2gn5S65Ujd93dp2mhww/a2vLibUpbuNYJpLxY/niXdiMqiqu3537ZO45JGAC00aS1uUkfV9SuYYs +VbzSJsTjAywUO+ASPnZs9TlgCADM0fUvEl1qmpw3Nhpxgt71ImxevmFTDE5CjyBv++W5K8sR0AN dR4I/wCPTV/+wpN/Jax7jQBLe3E8Gp39pHdMHuYLdkCzMFCZ3FC6koqrlGXGMjBya2PBH/Hpq/8A 2FJv5LQB1FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAY97osE9 xLd2sMFtqU6eQ9+kQ85Yu4DY5PHGeAeecYNXSvBPhrRbe3isdFskNuwdJmgVpdw5DFyNxb3zmuio oAwfE2m3mp2Vutl5PnQXcNwBM5VW8tw2MgEjOPStW3882ifaEjScqN6xsWUHvgkAkfgKscUUW1uV zvlUexi+G9Mn0nREs7goZBNM+UJIw8ruOoHZh+NYVt4S1CDxkNXN3GbY30lwYASRtaDy1I44bJbP YjHPGK7ekAqXBNJdjSNecXKS+1e/zMXxJpk+q6bHHasizwXMNyiyEhWMbhtpIBIBxjODj0p/hzTZ NI0SK0lYGQPJI+05ALuzkA4GQN2M4HStijFHKr3I9pLk5Ol7nI2nh28t/G8+sMtp9lk37YlLboyQ o8wcY3tghunGOTzXXCkzyaOlNRS2CpVlUab6KxVvoJ7mymht51hldcLK0e/b74yM/wCetc9/wi2t f9DN/wCSCf411tFMg5L/AIRbWv8AoZv/ACQT/Gj/AIRbWv8AoZv/ACQT/GutooA5L/hFta/6Gb/y QT/Gj/hFta/6Gb/yQT/GutooA5L/AIRbWv8AoZv/ACQT/GtTw/or6JaXEMt19qknuGnaTy9nLAA8 ZPp+tbNFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAf//Z ------=_NextPart_000_0000_01C87AE6.45703F30 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.vincenzigabriele.com/cartellasalvaguai/Documents/CORSO_DI_HTML_files/teo-html_html_7d02fbec.gif R0lGODlhNgK+APAAAAAA/wD//yH5BAEAAAIALAAAAAA2Ar4AhwAAAP////wD+wAAAP///wAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAj/AAEIHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEMaDECypMmTKFOq XMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHVpSINGjSJMqXcq0qdOnUKNKhWp0qtWrWLNq3cq1 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 CQE5OQAAjBMAAAA7 ------=_NextPart_000_0000_01C87AE6.45703F30 Content-Type: image/gif Content-Transfer-Encoding: base64 Content-Location: http://www.vincenzigabriele.com/cartellasalvaguai/Documents/CORSO_DI_HTML_files/teo-html_html_1c7aac9f.gif R0lGODlhIQLGAPAAAAAA/wD//yH5BAEAAAIALAAAAAAhAsYAhwAAAP////wD+wAAAP///wAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAj/AAUIHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOq XMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1 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 CQEUNwAAVRQAAAA7 ------=_NextPart_000_0000_01C87AE6.45703F30 Content-Type: image/jpeg Content-Transfer-Encoding: base64 Content-Location: http://www.vincenzigabriele.com/cartellasalvaguai/Documents/CORSO_DI_HTML_files/teo-html_html_m72cffd49.jpg /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAEyAzIDASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKAOF+JNx4j03RI9V0LVHs4bRt17HHapO7xEqC6hhjKDJxlQQSSwxUeiT+KPEWr 3WuWurm08Otxp9pc2SsbhfL2+YfuuqF8OoJBYf3QRVXV4vE/iDxVHZ6r4Zf/AIRe2eVzHFewn7a6 ZMTSKSCVJC4jOBuYFiQMVlWFt44tvhzqHhyTwu8zEPaWjSanEzrBIsgyzZwxj+VcDbkMMAbTXrQg lQULw5u947N/mrfJPoZt631/ExPBvxU1v7DqEetXT3mq3axJokD2yos0jM6feUKu3eFBJYfdbHII oPiLxuPh7ZeJv+Evke6vp/s9rp8elRM0snmMgUMF64Rm+72x1IrWu/C+tf2Zp+p2fhi9XXbfTX0q 1jTVosWcYRkWdnAXdL87YC5XHOVOKii0/wAZppvhrTT4AiNnokqXDIupRIZ5kQhXBBG352LkENuP U9c+g54eT9pThFXaum4dE9Ffo9Ne99bEa7O/4npvh+x1bT7F4dZ1n+1rkyllm+zJBtTAAXavB5BO ff2rZNed6TbeJtd+INnrHiDw/wD2ZZadZSraJ9sjn2zuyhmymCcx5GCCBjPU16JXz+Jhyz1abert ay8lbT7jaLujgPilqmt6LolrfaJq72dy04t47SOzWdruRyNqgkHaQFc9OenXFdN4fsdW0+weLWNZ /ta5MpZZvsyQbUwAF2rweQTn39q5HxmPFWoeI9NjtPCKX+laZdreJIdQjia4kWM7MZIKBXYkgg7t o6DOakn/AAmmo+K4dfvfBu0aZYutjZ/2nCd08jort5g6fuy3DAj5OOTXaqLlh4QvFbu94312W6fr fZPXYi9m3/mY1jrviS81ifTD8QnW6TVJNNjhXR4HkYom4ylFbcse4Mu7kDAJwM7fSvBraw/hLTZf EEvmapLGZJyYwhG4llUqFXDBSoIx1B69a8ys9F8XwaM6y+AIn19vtD/23FqMEM4ll8wF/kweBIcD djgYxgY9t5xwKeYyStBctu65en+HWz8xwvu/1EJNeG3HibxNZaXrd1ffEa0t7rT7meCCz+xW7yXP lttU7R8ybmBGCDgfN05r2LWLq/stKmuNN046jeIV8u185YvMywB+duBgEn8MV45aeD9eTwknh9fh zpqXkkZhbV7y6t5HjLn5pMKu7jcduCSuF+9jl5bGCTlO1rpa8t7dfi/RfkKd+n6naeLNc1y2+G+n 6rBevpeszLAWt47RZHmmkXHkLHIcg72z3YBDwa0vAGtX2reH54dVm+06pp17NY3cyoqrI6NnKAAf LtZR0B4PFcVJ4P8AFGta1o2i6rbX9p4e0iEQwXdnfRIxliBCXO3BYFgqgLyU3Z3dcr4X03x94c03 xHBbaFcg3a/aLNrnUbeaRbltqOzPgByQd/zAD93jq2a1lQpPD+zUo8177paN2Svvpu10BPW+pNYe JfFXiRHvbbxJpel6ijSiDw15MbzSmMsfLlMjK6sdpBwAAoDcc466C18Uav4I0k/24dK1lo45bqc2 CsTlDmMxscK2SMkY5U4ABwOP1Lw94s8R/Z7G58L6dYaj5sQufE6zRPKfKx+9QIFdWYoMDsDj5eo6 zxlfeKlhuNN0Dw/JdpcWbIt/HqEcLQSMGXhW5JX5WyCOvtWdZJyjGnyp3v8AZsl5vZr1101CPW9/ xMz4e/8ACY6vp+l6/q/iSR7WcO76c+nRIWX5lU+YMHB+VwQORjsc16N1rkfAT67DoUGm6zof9mjT 7aGCGT7Wk32jau1jhfuY2jgk/e9q66uLGycq8rpJX05bWt8tH67lx2FooormGFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRXE6tpjXmt3l1PpV pr8ELqsYjulS709tinZCrAKr5IlMnmRvh16+WmQDtqKyfDUdjD4X0mLTJpJ9PSzhW1lkGGeIINjH gclcHoPoK1qACiivNotIs0GnXmsWEE5nurWRPEenXAd7p/NQxGcFVIjkfywsa+ai5GCgjRgAek0V 59rvg/R5fFmm3t/p9leyaprRZzPaIxWNdPkURknO5d0IfHTJ6ZGa67QdM/sXw/puled532G1itvN 27d+xAu7GTjOM4yaANOiiigAorhfD9hoHhq/8Y6ounWNhFY3eGmgtVUxwCztpGUbRnbnLbR1POM1 j+LUs4fFmpanZ6ZM+s2Gno9ncafp0kzTXZbeYp5IkOPkigTBKny7hxnDggA9Sorjbyx0jVviD4f1 BrSyvc6VdTwXJjSTO2W1aN1bnpvYqR03HHU1z+o6Ho9n4S+J0FrpVjBCu8COK3RVGyxhkTgD+F2Z h6MSRyaAPUqK43w5DBa+IHgtNI/4R2A2pdtNKRL9qbeB5yrEzRjYPlJVix8xd4ULEW5jw94ZsWuw 9x4e0Sx0yDVbp4NThEa3PnxakBBFyg2KcNGApbIAGUyAQD1mivMotK06z8WeI7mewtJdM1DV4bHU beSBWjZngtnglKkHJE8jLgDk3G9j8lZ9z4W068+DenalLa2hWw8J3Biga2VgJpYY5POU/wALho2O QMkuTn1APXaKxNB8PWfh5tTSwihgtru7FwlvBCIkh/dRxlQBxyYy2cD734nboAKKKKACiiigAooo oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKwbnwjol5f3N5Nayef duGutlxKi3OEVAsqqwWRAqgbGBXluPmbO9XA61odw3iqzlu9R1EQajq/lxxWup3MKrbrYO2wqjqq nzoi+RycjnkigDrNa0TT/EekT6Tqtv59lPt8yLeybtrBhypBHIB4NaVefa5Y39lo/gu1vZNUvr5J VtLtdO1KSB7oi0lZzvMke754lfLEHg+pBntjf6R4Iku4p723udVltfs8V9NJcSaY9wIYdpMxJfy3 ZpNpxk5XA60Ad1WBpfhHRNEktzp9rJElsm23hNxK8UPy7SyRsxRXILZcAMdz5J3Nmu3hNhd2sseu axsDu17G97Iwut0Tp2YeSQz7x5W1QQPl4Qpw2nyXc3gvQ7XUdT1V7t/7Mura6XUZ45LiC6ngWdXZ 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 AXjBJJg07whpemabqNinny21/dG6KSPjyDhAixFQDGsYjTZjlNowRgY6KigDI03RhZ3DXdzf3eo3 ZUxrc3YjDRxkglFEaIqgkAkgZbC5JCqBU/4RSD7Vn+0L77B9r+2/2b+68nzvN87du2eb/rf3mN+M 8Y2/LXRUUAZl9pFnqV3YXVym6SzlMqcAhuPutkcqGCPjj54o26qKr63ojazcWEqapf2MljK00TWg hOXZGjyfMjforOO33j1IGNuigDI0bRf7FF6Wvru9mvbj7RNPdCMMW8tIwAI0VQAsa9vWteiigAoo ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArmdV8J RajcaxcJNHBPf2SW8MghBa2mUsfPU5B35EByMH/R4+flXb01czql/rNt4o0SBPssOl3F60DbWMkt wPss0nzZUCMK0Y6Fi3HK4KsASavoN5cNo39j3Vlp8elymSOKSxMqf6p4lUBZE2qFkbgf7PQAg1rr w5rF/wCGde0291uGW61bcgmWzcRW8bRJEypGZSeis33sbnJwehs+JtQlshbJJf8A9k6fLv8AtGqf J+4YY2J84KJvJPzuCvy7PvSIRn6f4lvLzw/qstgf7Rm0+7W1ju/JP7+MpE/n+WoHmbUl3YjwJdmU 2h1AANO10jUp7+2utb1C1uzZuZLVLW0a3VZGVkLtukcsQrMoGQBuYkMdpXfrjPD/AIghn8RJpNp4 g/t+3mtZbkXv7o+S0bxqY98KrG2RKp243JjJyJF20V8Vy211aT3er79SuLuC2uvD2xD9jEsqx5yq +Yuwsp81yY5P4Qvmx7QD0GiiigDJ16w1LUtMa003Uo9PldxvmaFpCY/4lXa6FSem4HIBOMHDCkNC vLLVvtOi3Vjp9k1r5Mll9hLK8irtjk+WRQNoCLgKCVG0nhNnR0UAccPB15F4S0zSLfULFL2y+xo9 62nk+dHayCSJSolBHIGfmI5fAG7i1qOi67c+JINWstX06BLeCW3him015SFkMTOWYTrk7ohjAGAS DnrXT0UAZOgaZNo+lfZZ7iO5na4uLh5Y4jEpaWZ5SApZiAC+Op6VrUUUAFFFFABRRRQAUUUUAFFF FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUU AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFcprtr4 ku9Z0yexsNLktdOuzco0+oSRvLmCSIqVEDBcGUnOTnb2zx1dFAGZczaulhA1nY2Mt6cedDLdvHGn HzbXETFsHAGVXI546VW0vTbzStPvZHmhvtVupZLmWXabeOWTAVFxl9ihEjTI3HC7jkk53KKAMDTd O1KTWG1jWHtVnWA29ta2xZ1tlZgZCZCFMhcpEeUXbsAGcszR3VhrGsahBHfiyttKtrtbjyopHmku 9h3RbiVTydrrG5A37iNuQM7ujooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigBKKM1wVx8T7WHWb/S4vDfiO6nsZfLm+zWIkA67W4fO 1gMqSBkc1dOlOo3yK9twbS3O9orjdZ+Imk6Vp2lajDb3+p2mqMUt5LCISAvxhDkghicgL1yrDGRU /h3xxZ6/q02lHTtV0y+jgFyINRtvKaSPdtLLyeAcDnHXjODi3hqqjzuLsv00Yrq9jq6K4LUvida6 ZrJ0uXw34ke4MskcPl2IIuNn3miy4LrjnIHQg0zWfitpOgWOnXGo6Trdu16sjpBLaBJIwjbfm3MB k9cAk4IJxkZqOCrycVGLd9vP+rMOZdzv6WuR8SeP9O8Oaxa6Q1jqV/qFzEZVt7CDzXCjPOCRn7rd M/dOccZoan8TrbTNZOly+G/Eb3Blkjh8uxBFxs+80WXBdcc5A6EGlHCVpWtHdXXouoOSR3tFZ2i6 mdY0qK+NleWfm7v9HvIvLlTDEfMuTjOMj2IrRrBqzs9xhRXBXHxOtoNZ1DS4vDfiS6uLGXy5/s1i JAOu1uHztYDKkgZHNaup+NdPsPC0HiG2gvdU0+bkPp8PmFFwxLsCRtUbSDnoeDWrwtZNJx32+e33 iujqKM81jeG/ENr4o0G21iyjmjtrjftWYAONrFTkAkdVPeuen+KGhrPILS01XULGBytxqNlZtJbQ FT825+4UYYlQRggjNKOHquTgou60fkwurXO6ork7nx/olr4d07V5muQNSXNnaeQ32idiMhFjHJJO AD907l+bDAlmi+PrHWdZj0htM1jT7+SN5RDe2bRkIuBuJGQFJJAJ4ypBwSu5/V6tubldv8twuu51 4orgtT+J9rpusnS5PDfiN7gyyRw+XYgi42feaLLguuOcgdCDXWaLqR1fSob82V5Z+bu/0e8i8uVM MR8y5OM4yPYilOhUpxUpKyewJpuxo0UHpXGan8RdMs9RnsLGx1XWbm1bZdJpVoZhbt2DtkDJ5GAT gqwOCKmnTnUdoq420js6K5geN9HfwtH4hSSZrSeRobaNUJluZA7IqRp1LMVOBwccnGDinpnxCs9T mvrY6PrVpfWtobwWd1Z7Jp4wSD5a5OTnAAOMk8ZwcX9Xq6+69NGK6OzoridI+JGl674cvtY06x1K 4+xyLHJZxQq9w27GGVFY/Lyecj7jelbXhjxHF4n0kalDYX9pEzYjW9hEbSLtDB1wSCpDcHPODRPD 1Kd+dWs7P1BNPY3KKQtXB6Z8TrXU9ZGlxeG/EaXAljjm8yxAFvv+60uHJRcc5I6Ampp0p1E3BXS3 8ht23O9orG8Qa7/wj9jHc/2ZqWobpRH5WnwebIuQTuIyPl4xn1Irm9J+J1rrcYls/DfiR7ZopZEn FiDG+xWJUMHILEqVA7sQKqGHqSg5xWncTdnY700VxWkfEjS9e8O32sadY6ncfYpFjezihV7ht2MM qKx+Xk85H3G9KzV+LtizWiL4Z8TF7xS9sosVzOoG4lPn+YAEHIzwc1p9Sr3ceV3W/l1/LUOZdz0e iuMHj+P+3LLSv+Ec8QrLdLG6yNZAIquEJLHdkBDIoc4+U5FVoPilpc+g6xrDaVq9vb6VIkU6zwKj mRm2lFG/G5SRuBIIyPWpWErNJqPb8XZfew5kd5RWdoupnWNKivzZXln5u7/R7yLy5UwxHzLk4zjI 9iK0awas7PdDFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiig AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAK1xcQ2tvLPPKkUUSl3kdgqooGSSTw AB3rx/QtQ8VavrPiWTw5qfhZpb29mKyzSb7ryY8RRuBHkbFAG3cDkknkNk+wT28V1BJBPEksMqlH jkUMrqRggg8EEdqo6f4d0XSZ2n07SLCzlK7DJb26RsVyDjKgHGQOPaujD140oyVrt23XzJkm2jzH WtLj06/8GeCtI1+ws3sWlmmklWKRkuNq+W/lSMTud5XKqD/HkD5ARo/Dueylu7/W9f1nzfFcEUtr qMVxcIq2kUUhztRQFCcISwyuc8gls97P4d0W41L+0ptIsJL4Mri6e2QyhlxtO4jORgYOeMChPDui xz3U8ekWCzXaulxILdA0yucsHOMsCeoPWumeOU6Xs2tXu7K7d23d72d9vJCUWnc4m+8W+Gb74n6U 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 utNs57ODb5VvLArRptGBtUjAwCQMdqqP4Q8Nyqkcnh/SnSJdkatZxkIuS2BxwMsxx6knvU08ZSjf R6q2/S353s/kDibwooorziwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKK ACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAK5We78SXPizUNNsL/S7e2t7S3uU8/T5JnPmtKpUkToODCTnH8WO2T1VcTqfhebVPGk2pX3h7 QNT0+S3t7VGvpS0sKo0jO6oYWGT5uNu4Z2DJGeADo9F1P+2NHgvvJ8rzdwwG3o21iu9GwN8bY3I2 BuUqcDOK06zdc/tf+x5/7B+xf2n8vk/bt/k/eG7ds+b7u7GO+K0qACuFtPEPiO10WfW9QfS7uwtb u4guo4LeS3eGGGd45Jwxkk34WMv5eATnAYkAN3VcLaeHvEd1os+iagml2lhdXdxPdSQXElw80M07 ySQBTHHsyshTzMkjGQoJBUA37uLWJvFGnPbXX2fSbeKV7xGjRvtbsMRop+8uzDMTxnKgbsttr+L7 zV9J8PX2raVc2Uf2G1muZIru1eXzdibgoKyJt6EZIbqPTno65zxfZ6vq3h6+0nSrayk+3Ws1tJLd 3TxeVvTaGAWN93UnBK9B68AElzf6loWgXN1qMlrqF4HCWyWsLWyyyOVSKI7nkwWkYLvJwNwJAAJq Bm8YrdWyE6O8Fw7+cyQyZsh5TlOrjzx5nlgsPLOAflG7KT3NhqWu6Bc2uox2un3hcPbPazNcrFIh V4pTuSPJWRQ2wjB2gEkEise98Oalq2uafqep6PoEl1pbmWC7V2L3TKkixowaImFN8gk4eTaVGAx+ YAGbY+MfEeo+EtOvxJpdpqby2a3ML2ckkbx3ckQhkj/eqwULIQSchnjkUEbc1r634h1jSPEExV7G 40eztVvb+PyHSa2hLhN3meYQ/C3EmFQnEOzGXVqy4fB2unRfDduRp1vdaa9lbXhjuXdLm1t3ilD/ AOrU+aHiIVTlVEknOWyNC68JXGs3+v3OtW0couEEFlHbatcwrLbqhAinEaqMFmdskSEeaw5CjIBr 67NrUNzA9hd6dZafHbzTXl5fQGRYypTaMCWPAKmQljkDZ2zUekyeI73RZ5Lmeygu3lzZyvYSIPJ+ XBkgMu5WPz4G8EAruAbcgoXdh4rvNE0myvItLvZFiK6rE148SXTjaF+ZYDmNvmZ49q54XJTcG1LN vEq2WoT3dvp0l49wGtLRbtvKji2RqVaXyQ2dwkb7h+8BnHQAr+FrzXdTimu9UvNOlt0uLm2WK1sn ibdFO8W8s0rjBCE7cfxDnjmp/wAJBrH9kf8ACT7rH+wf9f8AZ/s7+d9j3f8AHx5vmY/1f77Z5e7H yfe5q34Ws9d0yKa01Sz06K3e4ublZbW9eVt0s7y7CrRIMAORuz/COOeKn/CP6x/ZH/CMbbH+wf8A UfaPtD+d9j3f8e/leXj/AFf7nf5m7Hz/AHuKAOxooooAKKKKACiiigAooooAKKKKACiiigAooooA KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAo oooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACuY1nWdc03VrK1tNI064hvZ/s9vLLqT xNuELykuogYKMRuBgnt0ycdPXI+IZ9Uk13SDaeHNSu4NOvDcSTxS2yrIrW80eEDzK2Q0ozkDoevG QB+oeKLvSfEGi6deabALfUIiZ7mK6LfZpA8cYXYYwXUyTQoGyD8xJVQpqvJ4r1e30bxNfXWj2Sza F1ii1F3WbEKTP8xhG3COuODlsg7RyV1i1utV8Q6d9p8P30+mXGl3NleYmgXyvtDw5Vv3ob5VifcU z1G0t2zBpPiNvBHjO1vrGS41TUGlgtykkKm7H2aK3E+NwWMMULlScqMgZwMgHRabrGsT64dPv9Ls oo1jkZ57G+e5EUi+URHIDCmxmWUMBnJAJxjmoP8AhKLz7P8A2r/ZkP8Awj/m7Ptn2s+b5e/Z5/l+ Xs8nP7zf5mPK+f8A2a0PDmmWGmafIbDRf7GW6lM0tniMbXwEziNmQZVFPyn3PJNYH9mav/wjP/CF /wBlzfZPK/s/+0/Ni8r7HnZn7/med5HGfL2+b22c0AW08bQw3/iGyvrKWGfSHHlpDIJPtqsiMqxZ ClpcyRqUGcNLGNx3ioo/Fer3GjeGb610eyabXekUuouiw5heZPmEJ3ZRGzwMNgDcOQy20WS41zW9 Sv8ARrsNBqQvLIb4D9rUW0UWwfOcDzIVkAYp8ywsSCpC5b6NfSeEfBOnah4Vn1Eabs+3WbNbOB5d tJCMh5QrZd1YYJ4GTg4FAG2/irUovCWs63JpVqW09DNEsN8zwXcIhSXzI5vKGRtZgMKQWUjPcaFn rN8mq2+m6zpiWc1wrvbz29z51vIVwTHvZUYS43Nt2YKqxDHDAYt1aarcfDnXtHtvD89ootW0/S7F pojKYTbpGpdvNZeHL87s7VHBPXSSPUtb1rTru70yTTLDT3knRLiaNriSco0Y+WMugi2Syfxbi23g AfMAR2et+I5/EMulT6LpcfkRQTzypqkj4jleRRtBtxuYeUxwSB055ODVfFF5pGvizn0yGTTFiE89 5DdkyW0ZdEDyxmMKi7mY5L42Qyt/AVqCxvNWPjG7vpfC2qw213aWlqHea0PlmOScszBZyduJl6ZP B46ZqahoGo+IL/xNJeLrGn281uLGOKzazP2+2VX4+feVcvJMASYxtaPOCGwAd7RWZok+o3Wh2U+r WYstSaJftMAKkJIOG2lWYbSckck4IzzkVp0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRR RQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUA FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFYl7r6Wl5JbwaffX/kY+1vZqri2B AI3AsGZtp3bIw742/L8ybtuuF1KWI67qJXTvEVherKkdtd6arvHet5SEsUIMAYbhHvmXbhRh/kPl gHV6RqUWsaNY6nAsiQ3lvHcRrIAGCuoYA4JGcH1NSahfW+m6dc393J5dtbRPNK+0naigljgcnAB6 Vn3mp3mi+GV1C/sJ769hij+0W2kwmVnkJVW8pSQSoJJ552ijxNZT32hSJaR+bdQSw3cMO4L5rwyp Mse48LvMYXcem7ODjFABYa8bvURYXelX2mXLxNNCl2YW81EKhyDFI4G0un3sZ3DGcHG3XKfah4j1 7SXtLe+ittNlku5Zrqymt8uYniSMLKqlsiV23Lnb5YBHzg1sWuqm61bUtP8AsF9D9i8r/SZodsNx vXd+6bPzbejdMGgDTorEvdHvru8kng8S6pZxsRiCCO1KJgAcF4WbnryT19OK07eNooI45J5J2VAr SSBQzkD7x2gDJ68AD0AoAjvbiW2s5J4rKe8kUjEEBQO+SBwXZV468kdPXiqmga0viDRoNUSxurSG 4RZYVujHukjZQyuNjsACD0JB4OQKt317HYWklzKs7xxkZEEDzOckDhEBY9ew469K43wnrdzDofhD RYdO1FJ1t4re/wDtWmXMSwKlqxJEjIqZ8xEXqc7jj1ABsWviq5udYbTD4Y1mGdEikmaSS12xRyM6 q52zkkZjfhQT8vTkZIPF8dzqur6ZDpOovfaa6qYD5Km5ztJaEtIFYKrxs2SpUSJkZYCs+w123l8c XtwLLWFgurKztoZJNIu0UyLLcFgS0YCgCRDubA568HFAvKmu+INRtLHUvt1jqX2yIfYZlF3bLbW8 M0aOUAkLbHKIGw0kcbcqM0Abdh4yXUpNGW30LVCNVtftkLsbcCOEMqln/e54EkbYAJw4wCQwEUnj Yw2eo3UnhzWUGnXEcFyha1yhZFfcSJtoRVdCzE4AfPRWK0NFt7jRtI8HandWd35Vlof2K6hjt3km heRbcgmJQXIBhKkAEgsOMBitxNRn0Ox1nW20y+n/ALUv0ltLaO2laXb5MUQaVURmjX90znILBSAV 3/JQBtSa2I/EUOirY3crtb/aJLmMxmKBckAPl94LEYX5Tu5xna+3YrkNAQ+HNTTw89tJKlypuo7y 2sJEhVuhidgCiABcRjccRqqHG1Gk6+gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi iigAooooA//Z ------=_NextPart_000_0000_01C87AE6.45703F30--