Progetto di tecnologie informatiche per la realizzazione di

POLITECNICO DI TORINO
III Facoltà di Ingegneria
Corso di Laurea in Ingegneria Informatica
Tesi di Laurea
Progetto di tecnologie
informatiche per la realizzazione di
un Sistema Informativo finalizzato
alla gestione di scavi archeologici
Relatori:
prof. Angelo Raffaele Meo
prof. Alessandro Roccati
ing. Gianluca Cumani
Candidati:
Davide Boltri
Matteo Onofrio Bovero
Gennaio 2007
Indice
Prefazione
1
1 Introduzione
1.1 L’archeologia che si evolve
1.2 Il progetto ArcheoMap . .
1.3 ArcheoMap e l’open source
1.4 Organizzazione del volume
.
.
.
.
3
3
4
5
6
.
.
.
.
.
.
.
.
.
.
.
7
7
9
11
11
13
31
31
32
34
36
38
.
.
.
.
.
.
.
.
.
45
45
46
47
49
50
50
54
54
55
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2 Il Database di ArcheoMap
2.1 Nozioni generali sui Database . . . . . . . . .
2.2 I requisiti del Database . . . . . . . . . . . . .
2.3 Progetto concettuale . . . . . . . . . . . . . .
2.3.1 Modello entità-relazioni . . . . . . . .
2.3.2 Stesura del modello E-R di ArcheoMap
2.4 Progetto logico . . . . . . . . . . . . . . . . .
2.4.1 Ristrutturazione dello schema E-R . .
2.4.2 Ristrutturazione del diagramma E-R di
2.4.3 Traduzione verso il modello logico . . .
2.4.4 Schema logico del progetto ArcheoMap
2.4.5 Progettazione fisica . . . . . . . . . . .
3 L’interfaccia Web
3.1 Introduzione alla tecnologia Web . .
3.2 Requisiti per la realizzazione del sito
3.3 Architettura generale . . . . . . . . .
3.4 Apache e il linguaggio PHP . . . . .
3.5 L’interfaccia del sito . . . . . . . . .
3.5.1 Creazione del template . . . .
3.5.2 CSS . . . . . . . . . . . . . .
3.6 Business Logic . . . . . . . . . . . . .
3.6.1 Le Web application . . . . . .
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
ArcheoMap
. . . . . . .
. . . . . . .
. . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3.7
3.6.2 PEAR DB, l’interfaccia al database
3.6.3 Gestione della sicurezza . . . . . .
3.6.4 L’interfaccia multilingua . . . . . .
Le pagine del sito . . . . . . . . . . . . . .
3.7.1 Pagina di login . . . . . . . . . . .
3.7.2 Elenco dei progetti . . . . . . . . .
3.7.3 Dettagli della località . . . . . . . .
3.7.4 Inserimento di una nuova località .
3.7.5 Diario si scavo . . . . . . . . . . . .
3.7.6 Inserimento nuovo articolo . . . . .
3.7.7 Galleria fotografica . . . . . . . . .
3.7.8 Dettagli immagine . . . . . . . . .
3.7.9 Elenco dei reperti . . . . . . . . . .
3.7.10 Dettagli reperto . . . . . . . . . . .
3.7.11 Gestione dei permessi . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4 Gestione delle mappe
4.1 Introduzione ai sitemi GIS e al Web mapping
4.1.1 Formati digitali delle mappe . . . . . .
4.1.2 Gestori delle mappe . . . . . . . . . . .
4.1.3 GIS e Web Mapping . . . . . . . . . .
4.2 Requisiti del sistema di Web Mapping . . . . .
4.3 Il gestore di mappe: MapServer . . . . . . . .
4.3.1 Il mapfile . . . . . . . . . . . . . . . .
4.3.2 I layer di ArcheoMap . . . . . . . . . .
4.3.3 PHP/MapScript . . . . . . . . . . . .
4.4 MapServer integrato nel sito di ArcheoMap . .
4.5 Google Maps . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
56
57
60
60
61
62
63
64
65
66
68
69
70
70
71
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
75
75
76
76
77
77
78
79
82
83
85
87
5 Il programma su Palm
5.1 Introduzione ai dispositivi palmari . . . . . . . .
5.2 Requisiti del programma su PalmTM . . . . . .
5.3 Tecniche di ingegneria del software . . . . . . .
5.4 Progetto del programma su Palm . . . . . . . .
5.4.1 Analisi dei requisiti . . . . . . . . . . . .
5.4.2 Progetto del software, i diagrammi UML
5.4.3 Diagramma delle classi di ArcheoMap . .
5.4.4 Codifica . . . . . . . . . . . . . . . . . .
5.5 Panoramica sul software finito . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
93
93
95
95
98
98
100
103
115
119
2
6 Il GPS
6.1 Introduzione al GPS . . . . . . . . . . .
6.2 Standard NMEA . . . . . . . . . . . . .
6.3 Implementazione . . . . . . . . . . . . .
6.3.1 Interfacciamento Palmare / GPS
6.3.2 Parsing delle frasi NMEA . . . .
6.4 Il form di modifica e inserimento reperti
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7 La sincronizzazione tra palmare e Database
7.1 Introduzione alla sincronizzazione dei palmari . . . .
7.2 Requisiti per la sincronizzazione . . . . . . . . . . . .
7.3 Inizializzazione del palmare . . . . . . . . . . . . . .
7.3.1 PDB, il formato file di PalmOS . . . . . . . .
7.3.2 Classi Perl per la creazione dei PDB . . . . .
7.3.3 Processo di inizializzazione . . . . . . . . . . .
7.4 HotSync, Coldsync e Conduit . . . . . . . . . . . . .
7.5 La Conduit di sincronizzazione dei dati di ArcheoMap
7.6 Trattamento dei conflitti di sincronizzazione . . . . .
8 Conclusione
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
126
126
128
130
130
132
133
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
137
. 137
. 138
. 139
. 139
. 140
. 142
. 143
. 145
. 146
149
9 Appendice
151
9.1 Codice per creazione del database . . . . . . . . . . . . . . . . . . . . 151
9.2 Codice del mapfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Bibliografia
167
Webografia
168
3
Elenco delle figure
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
2.10
2.11
2.12
2.13
2.14
2.15
2.16
2.17
2.18
2.19
2.20
2.21
2.22
2.23
2.24
2.25
Esempio di Database . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Formalismi grafici per i costrutti del modello E-R . . . . . . . . . . . 13
Schema grafico dell’entità località . . . . . . . . . . . . . . . . . . . 15
Schema grafico dell’entità scavo . . . . . . . . . . . . . . . . . . . . . 15
Schema grafico dell’entità progetto . . . . . . . . . . . . . . . . . . . 17
Schema grafico delle entità diario, galleria e insieme reperti . . 17
Schema grafico dell’entità articolo . . . . . . . . . . . . . . . . . . . 19
Schema grafico dell’entità immagine . . . . . . . . . . . . . . . . . . . 19
Schema grafico dell’entità reperto . . . . . . . . . . . . . . . . . . . 20
Fac-simile della scheda ministeriale, fronte . . . . . . . . . . . . . . . 21
Fac-simile della scheda ministeriale, retro . . . . . . . . . . . . . . . . 22
Schema grafico dell’entità utente . . . . . . . . . . . . . . . . . . . . 23
Schema grafico dell’entità permesso . . . . . . . . . . . . . . . . . . . 24
Schema grafico delle entità capo progetto e direttore scavo . . . 24
Schema grafico della relazione “composizione” . . . . . . . . . . . . 25
Schema grafico delle tre relazioni “sezione diario” “sezione galleria”
e “sezione reperti” . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Schema grafico delle relazioni “elenco articoli” e “scrittura” . . 26
Schema grafico delle due relazioni “elenco immagini” e “foto” . . . 27
Schema grafico delle relazioni che coinvolgono l’entità “reperto” . . . 28
Schema grafico delle relazioni che coinvolgono gli utenti . . . . . . . . 29
Schema grafico della relazione “esportazione” . . . . . . . . . . . . 29
Schema E-R concettuale completo per il database di ArcheoMap . . . 30
Schema grafico dell’entità “località” dopo l’accorpamento degli attributi dell’entità “scavo” . . . . . . . . . . . . . . . . . . . . . . . . 33
Schema E-R concettuale ridotto per il database di ArcheoMap . . . . 35
Schema di funzionamento di un indice per una tabella . . . . . . . . . 42
3.1 Diagramma temporale di una Web Application . . . . . . . . . .
3.2 Il modello usato per la costruzione del sito di ArcheoMap . . . .
3.3 Diagramma della classe di template “tpl” . . . . . . . . . . . .
3.4 Esempio di diagramma delle classi per il sito Web di ArcheoMap
4
.
.
.
.
.
.
.
.
.
.
.
.
48
51
52
53
3.5
3.6
3.7
3.8
3.9
3.10
3.11
3.12
3.13
3.14
3.15
3.16
Schermata
Schermata
Schermata
Schermata
Schermata
Schermata
Schermata
Schermata
Schermata
Schermata
Schermata
Schermata
della
della
della
della
della
della
della
della
della
della
della
della
pagina
pagina
pagina
pagina
pagina
pagina
pagina
pagina
pagina
pagina
pagina
pagina
di login . . . . . . . . . . . . . . . . . . . . .
con l’elenco dei progetti . . . . . . . . . . . .
con i dettagli di una località . . . . . . . . . .
per la creazione di una nuova località . . . . .
del diario di scavo . . . . . . . . . . . . . . .
per l’inserimento di un nuovo articolo di diario
con la galleria fotografica . . . . . . . . . . .
con i dettagli dell’immagine . . . . . . . . . .
con l’elenco dei reperti . . . . . . . . . . . . .
con i dettagli di un reperto . . . . . . . . . .
di gestione degli utenti . . . . . . . . . . . . .
con i dettagli sui permessi utente . . . . . . .
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
Schema di funzionamento di MapServer . . . . . . . . . . . . .
Schema gerarchico degli oggetti definiti in MapServer . . . . .
Schema grafico di alcune classi di PHP/MapScript . . . . . . .
Schema di funzionamento di PHP/MapScript . . . . . . . . .
Schermata iniziale della mappa disegnata da MapServer . . . .
Schermata della mappa in seguito ad uno zoom . . . . . . . .
Schermata della mappa in seguito ad un ricentramento . . . .
Schermata della mappa con i rilievi montuosi . . . . . . . . . .
Schermata della mappa in seguito ad una richiesta di calcolo
distanza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.10 Schermata della mappa di Google Maps . . . . . . . . . . . . .
4.11 Schermata con dettaglio di Google Maps ingrandita . . . . . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
della
. . .
. . .
. . .
. 90
. 91
. 92
5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8
5.9
5.10
5.11
5.12
5.13
5.14
5.15
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Immagine di un dipositivo Palm . . . . . . . . . . . . . . . . .
Ciclo di vita del software secondo il modello a cascata . . . . .
Schema grafico di una classe in un diagramma UML . . . . . .
Schema grafico delle relazioni in un Class Diagram . . . . . .
Esempio di Sequence Diagram per l’interzione tra due oggetti .
Diagramma di flusso di un evento . . . . . . . . . . . . . . . .
Schema grafico della classe “GenericForm” . . . . . . . . . . .
Diagramma delle classi degli oggetti dell’interfaccia grafica . .
Diagramma delle classi per “ProjectsForm” . . . . . . . . . .
Diagramma delle classi per “LocationsForm” . . . . . . . . .
Diagramma delle classi per “ArticlesForm” . . . . . . . . . .
Diagramma delle classi per “ImagesForm” . . . . . . . . . . .
Diagramma delle classi per “FindsForm” . . . . . . . . . . . .
Diagramma delle classi per “ArticleEditForm” . . . . . . . .
Diagramma delle classi per “ImageEditForm” . . . . . . . . .
5
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
61
62
63
65
66
67
68
69
71
72
73
74
79
81
84
84
86
87
88
89
94
96
101
102
103
104
105
106
107
108
108
109
109
110
110
5.16
5.17
5.18
5.19
5.20
5.21
5.22
5.23
5.24
5.25
5.26
5.27
5.28
5.29
5.30
5.31
5.32
5.33
Schema grafico della classe “Project” . . . . . . . . .
Schema grafico della classe “Location” . . . . . . . . .
Schema grafico della classe “Article” . . . . . . . . .
Schema grafico della classe “Image” . . . . . . . . . . .
Schema grafico della classe “Find” . . . . . . . . . . .
Schema grafico della classe “MinistrySheet” . . . . .
Diagramma temporale del form “ProjectsForm” . . .
Schema grafico della classe “Permission” . . . . . . .
Schermata con l’elenco dei progetti . . . . . . . . . . .
Schermata delle preferenze . . . . . . . . . . . . . . . .
Schermata con l’elenco delle località . . . . . . . . . . .
Schermata con i dettagli di una località . . . . . . . . .
Schermata con l’elenco degli articoli di diario . . . . . .
Schermata per la modifica / creazione di un articolo . .
Schermata con l’elenco dei reperti e relativi riferimenti
Schermata con l’elenco delle immagini della galleria . .
Schermata per la creazione o modifica di un’immagine .
Schermata di gestione della fotocamera integrata . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
111
112
112
113
113
114
114
115
119
120
120
121
122
122
123
124
124
125
6.1
6.2
6.3
6.4
6.5
6.6
6.7
Uno dei satelliti della rete GPS . . . . . . . . . . . . . .
Rilevamento della posizione dall’incrocio di tre sfere . . .
Schema grafico delle classi di interfacciamento al GPS . .
Diagramma a stati di un parser NMEA . . . . . . . . . .
Schermata del form di modifica reperti . . . . . . . . . .
Schermata del form di scelta degli articoli . . . . . . . .
Schermata del form di creazione della scheda ministeriale
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
126
128
131
132
134
135
136
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
140
141
144
147
7.1 Schema descrittivo della PDB . . . . . . . . . . .
7.2 Classe generica per la creazione dei PDB . . . . .
7.3 Schermata di apertura di HotSync . . . . . . . . .
7.4 Algoritmo per la rilevazione di conflitti sui record
6
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Prefazione
ArcheoMap è il nome del progetto di mappatura di siti archeologici descritto in
questo volume, il cui scopo è quello di fornire un’architettura software integrata e
unitaria per la raccolta e georeferenziazione dei reperti portati alla luce nel corso
delle numerose campagne di scavo condotte sul suolo italiano, eccezionalmente fertile
sotto questo punto di vista.
ArcheoMap nasce come punto d’incontro ideale tra la cultura storica e la tecnologia informatica, il cui continuo evolversi mette a disposizione nuovi strumenti per
un’efficiente catalogazione e divulgazione delle scoperte archeologiche. Lo sviluppo
del progetto è stato promosso da I.I.C.E. (Istituto Italiano per la Civiltà Egizia), associazione culturale che raccoglie i principali studiosi di archeologia dalle università
italiane, e da due aziende torinesi che operano nel settore dell’Information Tecnology: la Tower Technologies S.r.l. e la Risolviamo S.r.l. che hanno supervisionato
tutta la fase di progettazione e implementazione.
Visto l’entusiasmo con cui è stata accolta la proposta di realizzazione del progetto
ArcheoMap da parte dei membri di I.I.C.E., si è previsto di realizzare una versione
dimostrativa tesa a metterne in luce le potenzialità e gli eventuali limiti. Per la
progettazione e implementazione si è indetta una tesi di laurea sperimentale presso
il prestigioso ateneo del Politecnico di Torino che ha immediatamente raccolto i
favori sia degli studenti sia del corpo docente nella persona del Prof. Angelo Raffaele
Meo, nella sua funzione di Relatore interno, in collaborazione con l’Università La
Sapienza di Roma nella persona del Prof. Alessandro Roccati, sotto il patrocinio di
Risolviamo S.r.l. e Tower Technologies S.r.l. in qualità di committenti.
La tesi è stata svolta da due studenti iscritti al corso di laurea di Ingegneria
Informatica: Davide Boltri e Matteo Onofrio Bovero che hanno cosı̀ potuto mettere
a frutto le esperienze e le conoscenze accumulate durante il loro corso di studi.
L’intero lavoro di progettazione e codifica è stato equamente suddiviso fra i due
laureandi.
In particolare, Davide Boltri si è occupato della creazione del sito Web di ArcheoMap, della progettazione e creazione di un programma per palmari Palm e
dell’interazione di quest’ultimo con il sistema di posizionamento satellitare GPS.
Matteo Onofrio Bovero si è occupato, parallelamente, del progetto del database
1
di ArcheoMap, della gestione delle mappe e del programma per la sincronizzazione
dei dati da un device Palm con il database.
I due studenti hanno lavorato congiuntamente alla risoluzione delle problematiche di volta in volta emerse durante il processo di progettazione e sviluppo, e si
sono accordati sulla corretta integrazione delle parti. Per la definizione dei requisiti
si sono rivolti ai membri di I.I.C.E., in quanto futuri utenti di ArcheoMap, e alle
aziende Risolviamo S.r.l. e Tower Technologies S.r.l. per la valutazione delle scelte
progettuali adottate.
2
Capitolo 1
Introduzione
1.1
L’archeologia che si evolve
4 Novembre 1922, Valle dei Re, Tebe, in Egitto: l’inglese Howard Carter1 scopre la
tomba di Tutankhamon, con il suo corredo funerario in gran parte intatto, e mette di
fronte agli occhi del mondo i tesori dei Faraoni. Si tratta di un risultato straordinario,
frutto di anni di lavoro e di ricerche compiute in un sito archeologico considerato
dai più esaurito, affidandosi unicamente alla propria esperienza, all’osservazione e
all’intuito.
Oggi, oltre 80 anni dopo, si scava ancora nella Valle dei Re e proprio nel corso del
2006 si annunciano nuove scoperte, forse non spettacolari come quella di Carter, ma
sicuramente altrettanto preziose dal punto di vista archeologico per la ricostruzione
storica. Ancora una volta sono fondamentali l’esperienza e l’acume degli studiosi,
ma nel frattempo il progresso tecnologico, ed in particolare l’informatica applicata,
hanno messo a disposizione di questi ultimi dei validi strumenti di ausilio nella
ricerca e nella conduzione della campagna di scavo. Ad esempio, l’equipe guidata
da Nicholas Reeves2 fa uso della tecnologia radar per sondare il terreno e ne analizza
le anomalie del segnale di eco per identificare le zone da sottoporre a indagine.
L’archeologia dunque, ben lungi dall’aderire allo stereotipo dell’Indiana Jones,
si presenta oggi come una scienza in evoluzione che sfrutta appieno le possibilità
offerte da apparecchiature elettroniche ed informatiche per procedere ad affinare le
ricerche sul passato e la ricostruzione storica.
La tecnologia informatica può fornire un concreto aiuto agli archeologi in diversi
1
Howard Carter (1873 - 1939), archeologo inglese. Giunto in Egitto come disegnatore, iniziò
ad interessarsi all’archeologia. La sua fortuna iniziò con l’incontro di Lord Carnarvon, un nobile
inglese appassionato di egittologia, che lo sovvenzionò economicamente per 7 anni. La tomba del
faraone Tutanchamon nel 1922 è la sua principale scoperta.
2
Nicholas Reeves, egittologo inglese e autore di vari libri sull’Antico Egitto, è attualmente
direttore dell’Amarna Royal Tomb Project, un progetto responsabile degli scavi nella Valle dei Re
3
1 – Introduzione
campi, uno dei quali, oggetto di questa tesi, è la catalogazione e mappatura dei
reperti. Scopo dell’archeologia è in prima istanza la ricostruzione del passato sulla
base delle informazioni tramandateci dai reperti che affiorano dalla terra o che giacciono sommersi in fondo al mare. Per raggiungere questo obiettivo non è sufficiente
una mera raccolta di oggetti, ma è necessaria soprattutto una loro efficiente catalogazione che permetta di scoprire le relazioni esistenti tra un oggetto e il luogo in cui
è stato rinvenuto, l’epoca a cui risale e come si lega ad altri oggetti scoperti nello
stesso luogo o altrove.
Muovendosi da queste considerazioni nasce il progetto ArcheoMap, la cui progettazione e prototipazione saranno descritti nel corso di questo volume.
1.2
Il progetto ArcheoMap
Il progetto ArcheoMap nasce con il proposito di creare un’infrastruttura informatica
che consenta di supportare attivamente le campagne di scavo effettuate da Università
e centri di ricerca in Italia e nel mondo.
L’obiettivo è quello di creare strumenti che consentano la mappatura approfondita di un sito archeologico e la completa catalogazione di quanto rinvenuto, nella
speranza che dal confronto e dall’analisi di queste informazioni gli studiosi di archeologia possano migliorare la nostra comprensione del passato. Tali strumenti
sono frutto dell’integrazione di tecnologie di georeferenziazione e condivisione dei
contenuti diffuse e collaudate, cosı̀ da permettere, anche ai non tecnici, di divenire
subito operativi.
Il progetto ArcheoMap può essere visto come l’integrazione di cinque componenti
base:
• Database: è il cuore di ArcheoMap, dove vengono raccolti e gestiti i dati
inerenti reperti e siti archeologici;
• Web: è il luogo di presentazione e condivisione dei contenuti raccolti durante
le campagne di scavo;
• Gestore delle mappe: permette la visualizzazione grafica e il trattamento
dei dati geografici;
• Computer palmare: è lo strumento che accompagna gli archeologi durante
gli scavi e consente la raccolta di informazioni sul campo;
• GPS: per la raccolta dei dati geografici inerenti la posizione dei reperti;
Operativamente, lo scenario tipo per il quale è stato sviluppato il progetto ArcheoMap è questo: gli archeologi, dotati del proprio computer palmare e di un GPS
4
1 – Introduzione
ad esso collegato, potranno muoversi lungo il sito dello scavo e annotare tramite il
software presente sul loro PDA3 i dati relativi ad ogni reperto. Sullo schermo del
palmare compariranno vari form 4 da cui sarà possibile redarre annotazioni per il
diario di scavo, scrivere dati per le schede di catalogazione, scattare fotografie (se
il palmare è dotato di macchina fotografica integrata) e acquisire i dati di posizione tramite il ricevitore GPS. Al termine della giornata i dati raccolti da tutti gli
archeologi sui propri dispositivi portatili potranno quindi essere sincronizzati su un
database ospitato in un server e resi disponibili via web a tutti gli utenti o solo ad
una parte di essi in base alla politica di riservatezza dei dati che si vuole adottare.
1.3
ArcheoMap e l’open source
Considerata la complessità e la varietà degli strumenti di cui si compone il progetto
ArcheoMap, è stato inevitabile per autori ed ideatori rivolgere la propria attenzione
al mondo Open Source.
Con tale termine si indica un movimento ideologico, prima ancora che un orientamento tecnico, la cui filosofia di fondo è quella di rendere pubblico il codice sorgente
del software prodotto per consentire ad eventuali altri sviluppatori di osservarne da
vicino il funzionamento a scopo didattico o semplicemente per apportare modifiche
a quanto già scritto.
Il grande vantaggio dei prodotti Open Source è quello di poter disporre di strumenti di buona se non ottima qualità, perché frutto della libera collaborazione di
una numerosa schiera di sviluppatori, e di cui esistono ampia documentazione e una
serie di case studies da analizzare.
Più in particolare, gli aspetti del mondo Open Source che principalmente interessano il progetto ArcheoMap sono riassumibili nei seguenti punti:
• Disponibilità di formati aperti: nell’ottica di costruire un progetto duraturo, è
indispensabile orientarsi verso formati file di cui siano note le specifiche e ben
documentati, cosı̀ da permetterne l’utilizzo anche in futuro quando il software
attuale diventerà obsoleto;
• Possibilità di manipolare il codice sorgente degli strumenti utilizzati, in modo da garantirne l’adattabilità a condizioni particolari o l’implementazione di
nuove caratteristiche, qualora se ne presenti la necessità;
• Abbattimento dei costi: quasi tutti gli strumenti utilizzati sia nel corso dello
sviluppo sia nella messa in opera del progetto (ad esempio il server web Apache
3
PDA (Personal Digital Assistent) è sinonimo di computer palmare, un piccolo dispositivo
elettronico delle dimensioni di una mano, che consente la raccolta ed elaborazione di dati
4
Quando riferito ai palmari, il termine form indica la videata di un’applicazione in cui si possono
scrivere o leggere dati
5
1 – Introduzione
e il sistema operativo Linux che formano la piattaforma su cui dovrà funzionare
ArcheoMap) sono gratuiti, cosı̀ da permettere un buon abbattimento dei costi
rispetto all’utilizzo di soluzioni proprietarie.
Nel corso del presente documento verranno meglio descritti i singoli strumenti
utilizzati man mano che se ne presenterà l’occasione.
1.4
Organizzazione del volume
Il volume è organizzato in nove capitoli, di cui il primo è questa breve introduzione.
Nel secondo capitolo si introducono alcune nozioni generali sui database e sui
formalismi grafici adottati per la loro progettazione; si illustrano i requisiti a cui
deve soddisfare il database di ArcheoMap e se ne vede l’applicazione pratica.
Nel terzo capitolo, dopo aver passato in rassegna le tecnologie e le norme di
buona progettazione che sono alla base dello sviluppo di un sito Web dinamico, si
descrive il progetto del sito Web di ArcheoMap il cui scopo è la divulgazione delle
informazioni sugli scavi archeologici e l’amministrazione degli utenti che collaborano
alle singole campagne di scavo.
Nel quarto capitolo vengono spiegate le principali problematiche relative alla
rappresentazione delle mappe digitali e ne viene descritta la loro gestione ad opera
del software MapServer; al termine del capitolo viene vista l’integrazione del sito
con il servizio GoogleMaps di Google.
Nel quinto capitolo si introducono le tecniche di Ingegneria del Software e se
ne vede l’applicazione pratica alla progettazione del software di ArcheoMap sui
dispositivi Palm.
Nel sesto capitolo si parla del sistema di posizionamento satellitare GPS e dei
modelli software adottati per supportare la comunicazione seriale tra il ricevitore e
il dispositivo palmare.
Nel settimo capitolo si descrivono le principali problematiche legate alla sincronizzazione dei dati tra i dispositivi palmari utilizzati dagli archeologi nel corso delle
campagne di scavo e il database.
L’ottavo capitolo conclude la trattazione.
Infine, come nono capitolo, è stata aggiunta un’appendice in cui sono riportati
frammenti del codice sorgente scritto durante la fase di sviluppo del progetto.
6
Capitolo 2
Il Database di ArcheoMap
2.1
Nozioni generali sui Database
Il termine Database indica un insieme di dati riguardanti uno stesso argomento o
più argomenti correlati tra di loro, strutturati in modo tale da consentire l’uso dei
dati stessi (e il loro aggiornamento) da parte di applicazioni software che prendono
il nome di DBMS (DataBase Management System).
A partire dagli anni ’60, quando hanno cominciato ad affermarsi i primi sistemi
di gestione delle basi dati, si sono affacciate sul mercato diverse soluzioni relative
al tipo di struttura in cui organizzare le informazioni, ma attualmente, per ragioni di semplicità ed efficienza, la soluzione più diffusa prende il nome di “modello
relazionale”.
Nel modello relazionale i dati sono organizzati in tabelle, collegate tra di loro da
relazioni. Le tabelle sono le strutture nelle quali sono ospitati i dati di uno stesso
tipo e sono formate da un numero di colonne (o campi) pari al numero di attributi
che si intende catalogare per un determinato tipo di informazione. Le relazioni sono
i legami logici che si possono instaurare tra i dati contenuti in tabelle diverse.
Per dare maggiore concretezza alla definizione di modello relazionale or ora presentata, si espone un breve esempio di database per corsi universitari. Tale database
è costituito da tre tabelle:
1. Una tabella in cui disporre i dettagli relativi agli allievi, i cui attributi (quindi
le colonne) sono il numero di matricola, il nome, il cognome e la data di nascita;
2. Una tabella in cui catalogare i corsi, i cui campi sono il codice del corso, il
nome del corso e il docente;
3. Una tabella in cui memorizzare gli esiti degli esami composta da tre campi:
uno per la matricola dello studente che ha sostenuto l’esame, un altro per il
7
2 – Il Database di ArcheoMap
codice del corso a cui si riferisce l’esame ed infine l’ultimo per la votazione
ottenuta.
La figura 2.1 visualizza il possibile contenuto di queste tabelle.
TABELLA STUDENTI
Matricola
Nome
Cognome
276545
Maria
Rossi
Data di
nascita
25/11/1971
485755
Anna
Neri
23/04/1972
200768
Fabio
Verdi
12/02/1972
TABELLA CORSI
TABELLA ESAMI
Studente
Voto
Corso
Codice
Titolo
Docente
276545
28
01ANA
01ANA
Analisi
Giani
276545
27
03CHI
02FIS
Fisica
Melli
200768
25
02FIS
03CHI
Chimica
Belli
Figura 2.1.
Esempio di Database
Alcune colonne sono ripetute in tabelle diverse e permettono di creare dei collegamenti logici tra il contenuto di queste : il campo Matricola mette in relazione
la “tabella studenti” e la “tabella esami” (con esso è possibile sapere quali studenti
hanno sostenuto un certo esame); il campo Codice della tabella dei corsi mette in
relazione la “tabella corsi” con la “tabella esami” (si può cosı̀ sapere gli esami che
riguardano un certo corso).
Se la matricola e il codice del corso sono univoci, ovvero se ad ogni studente
corrisponde una e una sola matricola e ad ogni corso corrisponde uno e un solo
codice, allora è possibile instaurare delle relazioni che consentano di interrogare il
database e scoprire senza ambiguità quali esami sono stati sostenuti da un determinato studente oppure quali studenti hanno superato l’esame di un determinato
corso. Proprio perché i campi univoci permettono di effettuare ricerche nelle tabelle
senza ambiguità, vengono chiamati “chiavi” nella terminologia tecnica dei database.
Di norma ogni tabella deve avere una chiave e se non è possibile trovare un campo
univoco tra quelli presenti nei suoi attributi, se ne aggiunge uno fittizio che risponda
a tale requisito.
Scoprire quali sono le informazioni essenziali da memorizzare in un database,
quali sono i tipi di dato elementari e da quali attributi sono composti, in altri
8
2 – Il Database di ArcheoMap
termini, individuare le tabelle di cui è formata la base dati, la loro struttura, le loro
chiavi e le relazioni che si possono formare, è compito del processo di progettazione
dei database. Tale processo si compone di quattro fasi, qui brevemente riassunte:
• Raccolta dei requisiti: si prendono contatti con quelli che saranno i fruitori
del database e si cerca di estrapolarne un documento in cui siano raccolte tutte
le informazioni essenziali allo sviluppo del progetto;
• Progettazione concettuale: a partire dall’analisi dei requisiti si conclude
con la redazione di uno schema concettuale in cui si descrive in modo formale il
progetto ad un elevato livello di astrazione senza preoccuparsi né della modalità
con la quale le informazioni verranno codificate nel sistema reale né della loro
efficienza;
• Progettazione logica: a partire dallo schema concettuale si produce uno
schema logico in cui si definiscono i dati in modo ancora slegato dalla realtà
fisica (quindi dal prodotto finale) ma concreto perché disponibile nei sistemi
di gestione delle basi dati;
• Progettazione fisica: è la parte finale, in cui lo schema logico viene completato con la specifica dei parametri fisici di memorizzazione dei dati propri del
DBMS che si intende utilizzare. Il prodotto di questa fase è il database finito,
pronto all’uso.
Nel seguito di questo capitolo si analizzeranno le singole fasi del progetto vedendo
in dettaglio in cosa queste consistono e mostrandone l’applicazione al database del
progetto ArcheoMap.
2.2
I requisiti del Database
La raccolta dei requisiti è la prima fase del processo di progettazione del database. È
estremamente importante riuscire a chiarire bene i dati e le relazioni che si intende
trattare, in modo da mettere in luce quali sono le caratteristiche a cui l’utente è
interessato e costruire una solida base di partenza per la definizione del progetto.
Il documento dei requisiti, che si può stilare al termine di questa fase, è descritto
in linguaggio naturale, in modo da risultare comprensibile anche ad un pubblico
non tecnico, ma nel contempo deve essere abbastanza rigoroso da non presentare
ambiguità e facilitare il successivo lavoro di analisi.
Dai dialoghi avuti presso il committente del progetto e dalle opinioni dei futuri
utilizzatori di ArcheoMap, si è giunti alla definizione dei seguenti punti:
9
2 – Il Database di ArcheoMap
1. Il database deve tener conto delle informazioni relative a località geografiche
interessate da studi archeologici. Ogni località è contraddistinta dal nome
geografico attuale, dal nome del luogo nell’antichità (se disponibile), dal nome
della nazione, città e comune in cui è collocato, dal proprio indirizzo e dalle
coordinate geografiche. L’accesso ai dati ospitati nell’ambito di una località
può essere pubblico o privato;
2. Ogni località è corredata da un testo descrittivo ed eventualmente note di vario
genere;
3. Ogni località può avere delle referenze per i contatti esterni: numero di telefono, indirizzo e-mail, indirizzo di un sito internet ed eventuali indicazioni
stradali su come raggiungerlo;
4. Ogni località può essere correntemente teatro di scavi archeologici, ed in tal
caso deve essere indicata la data di inizio ed eventuale data di fine dei lavori,
e può essere ad accesso pubblico o ad accesso privato;
5. Le località sono organizzate in progetti: ogni progetto può contenere più località, ma ognuna di esse è legata ad un unico progetto. I progetti sono caratterizzati da un nome, una descrizione, un indirizzo internet di riferimento,
un indirizzo e-mail, un numero di telefono, una data di apertura e una data di
chiusura;
6. Ogni località è dotata di tre sezioni: un diario di scavo, una galleria fotografica
e un insieme di reperti. La relazione tra diario di scavo, galleria fotografica e
reperti è univoca nei confronti della località a cui appartengono;
7. Il diario di scavo è l’insieme degli articoli scritti dai partecipanti ad una campagna archeologica per annotare tutto ciò che viene considerato rilevante ai
fini della ricerca. Le informazioni di interesse per ogni articolo sono: il titolo,
il testo del messaggio, la data in cui è stato scritto, l’autore, la data in cui è
stato modificato l’ultima volta e l’autore dell’ultima modifica;
8. Poiché spesso l’articolo non viene scritto di getto, ma può necessitare di rielaborazioni e modifiche prima di renderne pubblico il contenuto, deve essere
possibile decidere se il testo corrente sia visibile agli altri oppure no;
9. La galleria fotografica è l’insieme delle immagini inserite nel contesto della
località. Di ogni immagine si vuole conoscere il nome del file, la data di inserimento, la data di ultima modifica, eventuali note, l’utente che l’ha inserita e
l’utente che l’ha modificata;
10
2 – Il Database di ArcheoMap
10. Ogni reperto è definito da un nome, da una data di inserimento, da una data di
ultima modifica, dall’autore che l’ha inserito, dall’autore che l’ha modificato,
dalle coordinate geografiche in cui è stato scoperto e dall’insieme di articoli
del diario di scavo e immagini della galleria fotografica inerenti il reperto;
11. Ogni reperto va documentato con uno o più moduli ufficiali chiamati “schede
ministeriali”. Si vuole dare la possibilità di inserire la scheda ministeriale nel
database con i suoi singoli campi;
12. L’accesso ad ogni componente di ArcheoMap può essere ristretto a singoli utenti, distinti da un nome, un cognome, uno username, una password, un’indirizzo
e-mail e la lingua parlata;
13. Ogni utente deve avere a disposizione un insieme di permessi che gli consentano di accedere in modo limitato alle località e ai progetti, ma devono essere
presenti anche almeno due tipi di utenti privilegiati: i capi progetto, che si
occupano della gestione di uno o più progetti, e i direttori di scavo, che si
occupano della direzione di singole località. Il sistema deve comunque essere abbastanza flessibile da consentire l’introduzione di nuovi permessi e livelli
utente nel futuro, qualora lo si ritenesse necessario;
14. Poichè ogni utente ha a sua disposizione un palmare, occorre tenere traccia dei
progetti e delle località che ognuno desidera copiare sul proprio dispositivo.
2.3
Progetto concettuale
La fase di progettazione concettuale consiste nell’analisi dei requisiti e nella definizione di uno schema che sia in grado di descrivere al meglio le specifiche sui dati
di un’applicazione, mettendone in rilievo i concetti fondamentali e come questi si
legano tra di loro. Il tipo di schema che si intende generare segue un formalismo
rigoroso che viene ormai accettato come standard nello sviluppo delle basi dati. Si
tratta del “modello entità-relazioni”.
2.3.1
Modello entità-relazioni
Il modello entità-relazioni, spesso abbreviato come “modello E-R”, è un modello
concettuale di dati e, come tale, fornisce una serie di costrutti atti a descrivere la
realtà di interesse in una maniera facile da comprendere e che prescinde dai criteri
di organizzazione dei dati nei calcolatori. Questi costrutti vengono utilizzati per
definire degli schemi grafici che descrivono l’organizzazione e la struttura dei dati.
Nel seguito si analizzano le principali componenti di un modello E-R: entità, relazioni
e loro cardinalità, attributi, identificatori e generalizzazioni.
11
2 – Il Database di ArcheoMap
Le entità nel modello E-R rappresentano classi di oggetti (fatti, cose, persone,
per esempio) che hanno proprietà comuni ed esistenza autonoma ai fini dell’applicazione di interesse.
Le relazioni descrivono legami logici significativi tra due o più entità. Il numero
di entità legate prende il nome di grado della relazione. Solitamente si cerca, per
quanto possibile, di inserire relazioni di grado due.
Ad ogni relazione è assegnata una cardinalità, che specifica per ciascuna entità
che partecipa alla relazione quante volte l’occorrenza di una di queste entità può essere legata ad occorrenze delle altre. La cardinalità viene indicata con una coppia di
numeri (a,b), in cui il primo valore è la cardinalità minima, il secondo è la cardinalità
massima. La cardinalità minima è il numero minimo di partecipazione relativa e
può essere zero o uno: se zero la partecipazione è opzionale; se uno la partecipazione
è obbligatoria. La cardinalità massima è il numero massimo di partecipazione
relativa e può essere uno o molti (abbreviato in N ): se uno, vuol dire che a ogni
occorrenza di una entità corrisponde al massimo una occorrenza dell’altra; se N ,
vuol dire che ad ogni partecipazione di una entità corrisponde un numero arbitrario
di occorrenze dell’altra entità.
Gli attributi descrivono le proprietà elementari di entità o relazioni che si vogliono memorizzare nel database. La scelta degli attributi riflette il livello di dettaglio
con il quale si vogliono rappresentare le informazioni. Ad ogni attributo è associato
l’insieme di valori che questo può assumere: ad esempio vi possono essere attributi
solo numerici, oppure sotto forma di stringhe di testo a lunghezza fissa o variabile,
etc.
Tra gli attributi è necessario individuare gli identificatori, ovvero quell’insieme
minimale di attributi che consentono di identificare in modo univoco il singolo oggetto memorizzato nel database. Se non è possibile individuare un identificatore tra
gli attributi presenti, è prassi comune aggiungere un ulteriore attributo, ad esempio
un codice precostituito, che funga da identificatore.
Nel costrutto di generalizzazione si distinguono due tipi di entità: una entità
padre e una o più entità figlie relazionate in modo particolarmente stretto perché le
entità figlie sono da considerarsi delle specializzazioni o casi particolari dell’entità
padre. Ad esempio, l’entità “persona” è una generalizzazione delle entità “uomo” e
dell’entità “donna”. Ogni occorrenza delle entità figlie è anche occorrenza dell’entità
padre, e condividono gli stessi attributi.
Ad ogni costrutto del modello E-R corrisponde un formalismo grafico, come si
può vedere nella figura 2.2. Il grafico (a) rappresenta un’entità con i suoi attributi:
l’entità è raffigurata da un rettangolo con all’interno il nome che gli si vuole assegnare; i suoi attributi sono simboleggiati da dei pallini vuoti e l’identificatore da un
pallino nero. Si noti come nella rappresentazione grafica degli attributi non venga indicato l’insieme dei valori di appartenenza, perché questa informazione viene
demandata alla documentazione di corredo allo schema.
12
2 – Il Database di ArcheoMap
attr1
(a)
(0,1)
A
(1,1)
B
Rel
Entity
Id
(1,1)
A
attr3
(0,N)
B
Rel
attr2
(1,N)
Padre
Figlio
A
Rel
B
(c)
(b)
Figura 2.2.
(0,N)
Formalismi grafici per i costrutti del modello E-R
Il grafico (b) illustra un esempio di generalizzazione: l’entità Figlio è un caso
particolare dell’entità Padre, e tale legame viene delineato da una freccia che punta
verso l’entità più generica.
Le relazioni (grafico (c)) sono rappresentate come dei rombi, con all’interno il
nome che si intende assegnare loro, e da segmenti che uniscono le entità che la
relazione lega. Accanto alle entità viene riportata la cardinalità delle relazioni.
Sulla base della cardinalità si distinguono tre tipi di relazione:
• Relazioni uno a uno (grafico (c), primo schema): un’istanza dell’entità A
può legarsi al più con una istanza dell’entità B, mentre un’istanza dell’entità
B si lega ad una e una sola istanza dell’entità A;
• Relazioni uno a molti (grafico (c), secondo schema): un’istanza dell’entità
A si lega ad una e una sola istanza dell’entità B, mentre un’istanza dell’entità
B può legarsi con un numero imprecisato di istanze dell’entità A;
• Relazioni molti a molti (grafico (c), terzo schema): un’istanza dell’entità
A si lega a più istanze dell’entità B, e analogamente un’istanza dell’entità B
si lega a più istanze dell’entità A.
2.3.2
Stesura del modello E-R di ArcheoMap
Per tracciare il modello E-R del database che si intende progettare è necessario
analizzare i requisiti esposti nella sezione 2.2 allo scopo di individuare quali siano le
13
2 – Il Database di ArcheoMap
entità di interesse. A tale risultato si perviene leggendo accuratamente il testo dei
requisiti e annotando, tra i sostantivi e gli aggettivi presenti, i termini più rilevanti,
quali identificano delle classi di oggetti con esistenza autonoma e quali invece sono
attributi.
Entità del progetto
Leggendo i primi 3 punti dei requisiti, il sostantivo principale, quello che viene
più naturale associare ad un’entità, è sicuramente la parola “località” mentre
i vocaboli “nome”, “nazione”, “città”, “comune”, “indirizzo”, “coordinate”,
”descrizione”, “note”, “numero di telefono”, “indirizzo e-mail”, “indirizzo internet” e “indicazioni stradali” sono degli attributi che servono a
meglio specificare le proprietà di ogni singola istanza della classe “località”. Una
località, inoltre, può essere ad accesso pubblico o privato, e per tenerne traccia si aggiunge un ulteriore attributo “pubblico” di tipo booleano1 che indica lo stato della
località. Rimane da scegliere una chiave, ossia un attributo univoco. Dal momento
che nessuno degli attributi elencati rispetta tale proprietà, si decide di aggiungere
un campo “idLocalità” che serva allo scopo. Per brevità si anticipa che in tutte le successive entità si è optato di aggiungere un attributo chiamato “id[nome
entità]” nella forma di un codice numerico progressivo da utilizzare come identificatore univoco. Nella figura 2.3 è riportato lo schema grafico mentre nella tabella
2.1 è riportata la documentazione, con, per ogni attributo, il tipo di valori che può
assumere e una breve descrizione.
Il quarto punto informa che le località possono essere oggetto di scavo, ed in tal
caso hanno come attributi specifici la data di inizio e la data di fine dei lavori. Il modo
migliore di tradurre questo requisito è quello di introdurre una nuova entità “scavo”
che presenti gli stessi attributi dell’entità “località”, con in più le due proprietà
“data inizio” e “data fine”. Si è di fatto introdotta una generalizzazione, in cui
“località” è l’entità padre e “scavo” è l’entità figlia. Nella figura 2.4 è riportato
lo schema grafico e nella tabella 2.2 è riportata la documentazione degli attributi
che sono da aggiungere a quelli dell’entità “località”.
Nel quinto punto il termine più rilevante, da trattare come entità, è “progetto”,
che ha come attributi “nome”, “descrizione, “indirizzo internet”, “e-mail”,
“telefono”, “data apertura” e “data chiusura”. Nella figura 2.5 è riportato
lo schema grafico per l’entità “progetto”, mentre nella tabella 2.3 è riportata la
documentazione degli attributi.
Il sesto punto definisce le entità “diario”, “galleria” e “insieme reperti”,
ognuna delle quali non presenta attributi, oltre naturalmente ai rispettivi identificatori “idDiario”, “idGalleria” e “idInsiemeReperti”, aggiunti per rispettare il
1
Si dice “booleano” un’informazione che può assumere solo due valori: si/no oppure on/off.
14
2 – Il Database di ArcheoMap
nome_antico
idLocalità
città
nome_nuovo
comune
pubblico
indicazioni
Località
nazione
e−mail
indirizzo
telefono
note
coordinate
descrizione
internet
Figura 2.3.
Schema grafico dell’entità località
data inizio
località
scavo
data fine
idScavo
Figura 2.4.
Schema grafico dell’entità scavo
criterio di univocità delle chiavi. Nella figura 2.6 è rappresentato lo schema grafico
delle tre entità “diario”, “galleria” e “insieme reperti” mentre nella tabella
2.4 ne è data la documentazione.
15
2 – Il Database di ArcheoMap
Nome attributo Valori
Descrizione
id Località
Numero progressivo Codice che identifica in modo univoco la località
nome nuovo
Stringa di caratteri Nome assunto dalla località correntemente
nome antico
Stringa di caratteri Nome assunto dal luogo nell’antichità
nazione
Stringa di caratteri Nazione in cui è ubicata la località
città
Stringa di caratteri Nome della città in cui è situata la
località
comune
Stringa di caratteri Nome del comune in cui è situata la
località
indirizzo
Stringa di caratteri Indirizzo completo a cui è situata la
località
coordinate
Numeri e caratteri
Coordinate geografiche della località
descrizione
Stringa di caratteri Testo descrittivo della località
note
Stringa di caratteri Testo in cui vengono inserite annotazioni sulla località
telefono
Numeri
Numero di telefono di riferimento
per la località
email
Stringa di caratteri Indirizzo e-mail di riferimento per la
località
internet
Stringa di caratteri Indirizzo WWW di riferimento per
la località
indicazioni
Stringa di caratteri Testo in cui vengono fornite indicazioni stradali utili per raggiungere la
località
pubblico
Booleano
Valore che indica se la località è ad
accesso pubblico o privato
Tabella 2.1.
Documentazione per l’entità località
Il settimo e l’ottavo punto hanno come comune denominatore il termine “articolo”, che quindi è il candidato più adatto a diventare un’entità. I suoi attributi sono
“titolo”, “testo”, “data scrittura” e “data modifica”. Il termine “autore”
non viene trattato come attributo perché è un elemento troppo forte per essere
trattato in tal senso. Alla luce di quanto specificato nei punti dodici e tredici dei requisiti, si è ritenuto più appropriato considerare gli autori istanza dell’entità utente.
Si specifica poi che è possibile scegliere, dopo aver scritto un articolo, se pubblicarlo
16
2 – Il Database di ArcheoMap
Nome attributo Valori
Descrizione
id scavo
Numero progressivo Codice che identifica in modo univoco lo scavo
data inizio
Data
Data di inizio dello scavo
data fine
Data
Data di fine dello scavo
Tabella 2.2. Documentazione per l’entità scavo da aggiungere a quella
dell’entità località
descrizione
nome
idProgetto
internet
data chiusura
progetto
e−mail
data apertura
telefono
Figura 2.5.
Schema grafico dell’entità progetto
insieme
diario
reperti
idDiario
idInsiemeReperti
galleria
idGalleria
Figura 2.6.
Schema grafico delle entità diario, galleria e insieme reperti
17
2 – Il Database di ArcheoMap
Nome attributo Valori
Descrizione
idProgetto
Numero progressivo Codice che identifica in modo univoco il progetto
nome
Stringa di caratteri Nome con cui è noto il progetto
descrizione
Stringa di caratteri Testo descrittivo del progetto
internet
Stringa di caratteri Indirizzo internet di riferimento per
il progetto
email
Stringa di caratteri Indirizzo e-mail di riferimento per il
progetto
telefono
Numeri
Numero telefonico di riferimento per
il progetto
data apertura Data
Data in cui viene aperto il progetto
data chiusura Data
Data in cui viene chiuso il progetto
Tabella 2.3.
Documentazione per l’entità progetto
Nome attributo
idDiario
Valori
Descrizione
Numero progressivo Codice che identifica in modo univoco un’istanza dell’entità diario
idGalleria
Numero progressivo Codice che identifica in modo univoco un’istanza dell’entità galleria
idInsiemeReperti Numero progressivo Codice che identifica in modo univoco un’istanza dell’entità insieme
reperti
Tabella 2.4.
Documentazione per le entità diario, galleria e insieme reperti
immediatamente oppure no. Si risolve la richiesta introducendo l’attributo booleano
“visibile”. Impostando per ogni articolo questo attributo booleano l’autore può
scegliere se renderlo visibile oppure no. Nella figura 2.7 è riportato lo schema grafico
dell’entità “articolo” mentre nella tabella 2.5 ne è data la documentazione.
I punti nove e dieci dei requisiti definiscono l’entità “immagine”, con attributi “nome file”, “data inserimento”, “data modifica” e “note”(si veda figura
2.8 per la rappresentazione grafica e la tabella 2.6 per la documentazione), e l’entità “reperto” con attributi “nome”, “data inserimento”, “data modifica” e
“coordinate geografiche” (si veda figura 2.9 per la rappresentazione grafica e la
tabella 2.7 per la documentazione).
Nel punto undici si legge che ogni reperto può essere associato a una o più schede
ministeriali. Poiché si tratta di un documento ufficiale, che gli archeologi devono
18
2 – Il Database di ArcheoMap
testo
titolo
idArticolo
articolo
data modifica
visibile
data scrittura
Figura 2.7.
Schema grafico dell’entità articolo
Nome attributo
idArticolo
Valori
Descrizione
Numero progressivo Codice che identifica in modo univoco un’istanza dell’entità articolo
testo
Stringa di caratteri Testo dell’articolo
titolo
Stringa di caratteri Titolo dell’articolo
data scrittura Data
Data in cui è stato scritto l’articolo
data modifica
Data
Data in cui è stato modificato
l’articolo
Tabella 2.5.
Documentazione dell’entità articolo
note
data inserimento
data modifica
idImmagine
file
immagine
Figura 2.8.
Schema grafico dell’entità immagine
compilare in seguito al rinvenimento di un reperto, elencandone le caratteristiche
rilevanti al momento della scoperta, non si è ritenuto opportuno specificare nei
requisiti le singole parti di cui è composto. Nelle figure 2.10 e 2.11 sono mostrati il
19
2 – Il Database di ArcheoMap
Nome attributo
idImmagine
Valori
Descrizione
Numero progressivo Codice che identifica univocamente
un’istanza dell’entità immagine
note
Stringa di caratteri Note di vario genere relative all’immagine
data inserimento Data
Data in cui è stata inserita l’immagine
data modifica
Data
Data di ultima modifica dell’immagine
file
Stringa di caratteri Percorso del file dell’immagine
Tabella 2.6.
Documentazione dell’entità immagine
nome
data inserimento
data_modifica
idReperto
reperto
coordinate
Figura 2.9.
Schema grafico dell’entità reperto
Nome attributo
idReperto
Valori
Descrizione
Numero progressivo Codice che identifica univocamente
un’istanza dell’entità reperto
nome
Stringa di caratteri Nome assegnato al reperto reperto
data inserimento Data
Data in cui è stato inserito il reperto
data modifica
Data
Data di ultima modifica del reperto
coordinate
Stringa di caratteri Coordinate geografiche a cui è stato
trovato il reperto
Tabella 2.7.
Documentazione dell’entità reperto
fronte e il recto di un fac-simile della scheda ministeriale. Dal momento che si vuole
fornire la possibilità di memorizzare le schede ministeriali nel database, quello che si
fa è di introdurre l’entità “scheda ministeriale” e far corrispondere ogni campo
della scheda a un suo attributo.
Infine nei punti dodici e tredici vengono descritti gli utenti e i permessi associati. Applicando lo stesso procedimento adottato fino ad ora, si definisce l’entità
20
2 – Il Database di ArcheoMap
Figura 2.10.
Fac-simile della scheda ministeriale, fronte
21
2 – Il Database di ArcheoMap
Figura 2.11.
Fac-simile della scheda ministeriale, retro
22
2 – Il Database di ArcheoMap
“utente”, con attributi “nome”, “cognome”, “username”, “password”, “e-mail” e
“lingua ” (si veda figura 2.12 per lo schema grafico e la tabella 2.8 per la documentazione) e l’entità “permesso” con attributo “tipo permesso” (schema grafico
alla figura 2.13 e documentazione alla tabella 2.9). In questo modo si ottiene la
flessibilità richiesta, perché nel caso in cui si vogliano aggiungere nuovi permessi al
sistema sarà sufficiente aggiungere una nuova istanza della classe “permesso”. Per
quanto riguarda gli utenti privilegiati capo progetto e direttore scavo, questi sono a
tutti gli effetti degli utenti particolari, quindi la soluzione più naturale è di definirli
come entità separate, “capo progetto” e “direttore scavo”, specializzazioni dell’entità “utente”. Detto in modo più formale, si introducono tre generalizzazioni,
in cui “utente” è l’entità padre, “capo progetto” e “direttore scavo” sono le
entità figlie (figura 2.14).
nome
cognome
email
idUtente
username
utente
lingua
password
Figura 2.12.
Schema grafico dell’entità utente
Nome attributo Valori
Descrizione
idUtente
Numero progressivo Codice che identifica univocamente
un’istanza dell’entità utente
nome
Stringa di caratteri Nome di battesimo dell’utente
cognome
Stringa di caratteri Cognome dell’utente
username
Stringa di caratteri Username scelto dall’utente
password
Stringa di caratteri Password scelta dall’utente
email
Stringa di caratteri E-mail dell’utente
lingua
Stringa di caratteri Lingua parlata dall’utente
Tabella 2.8.
Documentazione dell’entità utente
23
2 – Il Database di ArcheoMap
tipoPermesso
idPermesso
permesso
Figura 2.13. Schema grafico dell’entità permesso
Nome attributo Valori
Descrizione
idPermesso
Numero progressivo Codice che identifica univocamente
un’istanza dell’entità permesso
tipo permesso Stringa di caratteri Nome assegnato al tipo di permesso
Tabella 2.9.
Documentazione dell’entità permesso
capo progetto
utente
direttore scavo
Figura 2.14.
Schema grafico delle entità capo progetto e direttore scavo
L’ultimo punto dei requisiti non introduce nessuna entità rilevante, e perciò ad
esso non corrisponde alcuno schema.
Relazioni del progetto
Una volta ultimata la ricerca e la definizione delle entità, con i loro attributi e le
generalizzazioni, il passo successivo è rileggere il documento dei requisiti mettendone
in luce questa volta le relazioni, ossia i legami tra le entità. Per ogni relazione, oltre a
stabilirne un nome simbolico che la identifichi nello schema finale, se ne deve fissare
la cardinalità, stabilendo se è del tipo uno a uno, uno a molti o molti a molti.
24
2 – Il Database di ArcheoMap
I primi quattro punti dei requisiti si limitano a definire le entità “località” e
“scavo“ e i loro attributi, non vi compaiono relazioni. Al punto cinque si legge
che le località sono organizzate in progetti: questa è la prima relazione da introdurre. Si definisce dunque una relazione di nome “composizione”2 che lega le entità
“località” e “progetto”. Tale relazione sta a significare che ogni progetto si compone di località, e che ogni località fa parte di un progetto. La relazione è di tipo uno
a molti: ogni istanza dell’entità “progetto” è relazionata a più istanze dell’entità
“località”, mentre ogni istanza dell’entità località si relaziona a una e una sola
istanza della classe “progetto”. Nella figura 2.15 è riportato lo schema grafico della
relazione con le entità che essa lega e la cardinalità.
(1,1)
località
Figura 2.15.
(0,N)
composizione
progetto
Schema grafico della relazione “composizione”
Il punto sei definisce tre relazioni che legano l’entità “località” con l’entità
“diario”, l’entità “galleria” e l’entità “insieme reperti”. I nomi assegnati simbolicamente a queste relazioni sono rispettivamente: “sezione diario”, “sezione
galleria” e “sezione reperti”. In tutti e tre i casi si tratta di una relazione del
tipo uno a uno: ogni istanza dell’entità “località” si lega a una e una sola istanza
delle entità “diario”, “galleria” e “insieme reperti”; viceversa, ogni istanza di
queste tre entità è legata in modo univoco a un’istanza di “località”. Nella figura
2.16 è riportato lo schema grafico delle tre relazioni.
Il punto sette definisce tre relazioni. La prima lega “diario” con “articolo”, a
cui si assegna il nome “elenco articoli”. Si tratta di una relazione del tipo uno
a molti, perché ogni articolo fa parte di un solo diario, ma ogni diario è formato da
più articoli. La seconda è la relazione che lega ogni articolo di diario al suo autore
(vale a dire un’istanza della classe “utente”), a cui si dà nome “scrittura”. Tale
relazione è ancora del tipo uno a molti: ogni articolo di diario viene scritto da uno e
un solo autore, mentre ogni autore può scrivere più articoli. La terza relazione, simile
alla precedente, lega ancora “articolo” con “utente” e serve per tener traccia
dell’ultimo utente che ha modificato l’articolo. Si tratta di una relazione uno a
molti perchè un utente può essere stato l’ultimo a modificare una serie di articoli.
Nella figura 2.17 è riportato lo schema risultante dall’unione delle tre relazioni.
2
Contrariamente a quanto avviene con la definizione delle entità, nel dare un nome alle relazioni
non è obbligatorio rimanere fedeli alla terminologia adottata nei requisiti: è sufficiente coglierne il
senso senza stravolgerlo
25
2 – Il Database di ArcheoMap
(1,1)
(1,1)
sezione
località
diario
diario
(1,1)
(1,1)
sezione
località
galleria
galleria
(1,1)
(1,1)
sezione
località
insieme reperti
reperti
Figura 2.16. Schema grafico delle tre relazioni “sezione diario” “sezione
galleria” e “sezione reperti”
(0,N)
(1,1)
elenco
diario
articolo
articoli
(1,1)
(1,1)
scrittura
(0,N)
modifica
utente
diario
(0,N)
Figura 2.17.
Schema grafico delle relazioni “elenco articoli” e “scrittura”
Il punto nove definisce la relazione “elenco immagini” che lega ogni galleria
a più immagini e ogni immagine ad una galleria (è dunque una relazione del tipo
uno a molti); la relazione “foto” che lega ogni utente alle immagini inserite e ogni
immagine all’unico utente che l’ha inserita (nuovamente una relazione uno a molti);
e la relazione “modifica foto” che lega un’immagine all’ultimo utente che l’ha
modificata. Fare riferimento alla figura 2.18 per lo schema grafico.
Il punto dieci delinea la relazione con cardinalità uno a molti “elenco reperti”
che lega le istanze dell’entità “reperto” alle istanze dell’entità “insieme reperti”;
la relazione uno a molti “catalogo” che lega i reperti all’utente che li ha inseriti;
26
2 – Il Database di ArcheoMap
(0,N)
(1,1)
elenco
immagini
galleria
immagine
(1,1)
(0,N)
(1,1)
foto
modifica
utente
foto
(0,N)
Figura 2.18.
Schema grafico delle due relazioni “elenco immagini” e “foto”
e la relazione uno a molti “modifica reperto” che associa un reperto all’ultimo
utente che l’ha modificato. Bisogna poi aggiungere due relazioni del tipo molti
a molti: “riferimento immagine” e “riferimento diario” che rispettivamente
legano i reperti agli articoli di diario e alle immagini della galleria. Infatti, ogni
istanza dell’entità “reperto” può fare riferimento a più immagini e più articoli di
diario che lo descrivono, e viceversa ogni istanza dell’entità “immagine” o dell’entità
“articolo” può fare riferimento a più reperti.
Nel punto undici si legge che ogni reperto può essere legato a una o più schede ministeriali, quindi si introduce la relazione “documentazione” del tipo uno a
molti che lega ogni reperto alle schede ministeriali che lo descrivono e ogni scheda
ministeriale al reperto descritto. Le schede ministeriali sono poi associate all’utente
che le ha create e all’utente che ha effettuato l’ultima modifica: in entrambi i casi
si tratta di relazioni uno a molti. Nella figura 2.19 è riportato lo schema grafico
che riassume tutte le relazioni che coinvolgono l’entità “reperto” e l’entità “scheda
ministeriale”.
Nei punti dodici e tredici viene trattata la gestione dei permessi. Tramite l’entità
“permesso” viene regolato l’accesso degli utenti alle località, perciò l’unica soluzione
è quella di creare una relazione ternaria “autorizzazione”, del tipo molti a molti,
che leghi contemporaneamente l’entità permesso alle entità “utente” e “località”.
Ci sono poi gli utenti privilegiati, vale a dire i capi progetto e direttori scavo, che
sono legati alle entità da essi controllate (rispettivamente progetti e località) da
opportune relazioni molti a molti “gestione” e “direzione”. Quest’intreccio di
associazioni viene rappresentato graficamente nella figura 2.20.
Infine nel punto quattordici si richiede di tener traccia dei progetti e delle località
che un utente vuol esportare sul proprio palmare. Questo si ottiene introducendo
un’ultima relazione, a cui si dà nome “esportazione”, che lega ogni utente alle
località e progetti che questo ha deciso di esportare. Si tratta di una relazione molti
27
2 – Il Database di ArcheoMap
(1,1)
(0,N)
insieme
reperti
elenco
reperto
reperti
(1,1)
(0,N)
utente
catalogo
(0,N)
(0,N)
(1,1)
modifica
(0,N)
reperto
modifica
scheda
redazione
(1,1)
(1,1)
(0,N)
scheda
ministeriale
documentazione
(1,1)
(0,N)
riferimento
articolo
diario
(0,N)
(0,N)
(0,N)
riferimento
immagine
immagine
Figura 2.19.
Schema grafico delle relazioni che coinvolgono l’entità “reperto”
a molti (perchè ogni istanza delle entità coinvolte può partecipare alla relazione con
cardinalità multipla), ed è una relazione ternaria per via del legame esistente tra
località e progetti: non è infatti possibile esportare una località senza esportare
contemporaneamente anche il progetto di cui fa parte. Nella figura 2.21 è dato lo
schema grafico che risolve quest’ultimo punto dei requisiti.
Lo schema completo
Una volta determinate le entità e le relazioni coinvolte nel progetto si uniscono
i singoli grafici e si traccia il modello E-R completo del database, riportato nella
figura 2.22. Per ragioni di praticità e per evitare di rendere troppo intricato lo
28
2 – Il Database di ArcheoMap
direttore
scavo
capo
progetto
utente
(1,N)
(1,N)
(1,N)
autorizza−
direzione
gestione
zione
(1,N)
(1,N)
(0,N)
(0,N)
località
Figura 2.20.
permesso
progetto
Schema grafico delle relazioni che coinvolgono gli utenti
utente
(0,N)
località
(0,N)
progetto
esportazione
(0,N)
Figura 2.21.
Schema grafico della relazione “esportazione”
schema, si sono rappresentate le entità senza specificarne gli attributi, per i quali si
deve fare riferimento alla documentazione nella sezione 2.3.2; per lo stesso motivo
si sono omesse le cardinalità delle relazioni. Si tratta di un modello concettuale,
ancora distante da quello che sarà il prodotto definitivo, perché in esso sono presenti
ridondanze e complessità che è possibile eliminare o semplificare. A partire da questo
schema si può procedere quindi con la fase di progettazione logica.
29
Figura 2.22.
30
permesso
utente
autorizzazione
gestione
riferimento
articolo
riferimento
immagine
composizione
scavo
esportazione
progetto
direttore
scavo
capo
progetto
modifica
diario
elenco
articoli
articolo
scrittura
località
direzione
elenco
immagini
immagine
foto
modifica
immagine
sezione
galleria
sezione
diario
sezione
reperti
elenco
reperti
reperto
catalogo
insieme
reperti
galleria
diario
scheda
redazione
modifica
scheda
documen−
tazione
modifica
reperto
2 – Il Database di ArcheoMap
Schema E-R concettuale completo per il database di ArcheoMap
2 – Il Database di ArcheoMap
2.4
Progetto logico
L’obiettivo di questa fase di progetto è quello di costruire uno schema logico in grado
di descrivere, in maniera corretta ed efficiente, tutte le informazioni contenute nello
schema E-R prodotto nella fase di progettazione concettuale. Non si tratta di una
semplice traduzione da un modello ad un altro perché prima di passare allo schema
logico occorre ristrutturare il modello E-R con il fine di ottimizzare il progetto. I
passi che portano alla definizione dello schema logico sono pertanto due:
• Ristrutturazione dello schema E-R;
• Traduzione verso il modello logico.
2.4.1
Ristrutturazione dello schema E-R
Scopo della ristrutturazione logica è quello di analizzare lo schema E-R prodotto nel
corso della progettazione concettuale e generare un altro schema E-R, equivalente
al primo in quanto rappresentazione stilizzata dei requisiti, ma ottimizzato perché
privo di ridondanze e costrutti superflui.
Le parti del diagramma concettuale che sono da considerare ridondanti sono
quelle che possono essere derivate da altre entità o relazioni senza alterare la compatibilità con i requisiti. Tipicamente ricadono in questa categoria:
• attributi che corrispondono ad informazioni ottenibili con semplici operazioni
da altre parti del modello;
• relazioni e entità che nel modello concettuale sono state introdotte per chiarezza ma che possono essere eliminate perchè desumibili da altri elementi del
modello.
Non esistono tecniche standard per individuare cosa vada tolto e cosa no, ci si deve
basare unicamente sull’esperienza e sulla capacità del progettista che, anche sulla
base di considerazioni prestazionali, può optare per una determinata scelta. Possono
infatti esserci situazioni in cui un’entità o un attributo, apparentemente ridondanti,
devono essere mantenuti; la loro eliminazione, infatti, causerebbe un eccessivo carico computazionale sul prodotto finito con impatto negativo sulle performance del
database.
Il passo successivo verso uno schema più essenziale è l’eliminazione delle generalizzazioni. Come si è detto nella sezione 2.3.1 le generalizzazioni sono forme
particolari di un’entità più generica che condividono con quest’ultima parte degli
attributi, introducendone eventualmente di nuovi. È evidente quindi che la ripetizione degli attributi in entità cosı̀ strettamente legate è un’inutile ridondanza che va
risolta. I modi di procedere sono sostanzialmente tre:
31
2 – Il Database di ArcheoMap
1. Accorpamento dell’entità figlia nell’entità padre: si crea un’unica entità, con il
nome dell’entità padre, e gli attributi dell’entità figlia vengono accorpati agli
attributi dell’entità padre. È la soluzione più adatta quando le entità figlie
introducono differenziazioni non sostanziali;
2. Accorpamento dell’entità padre nelle entità figlie: si creano tante entità quante
sono le entità figlie, ognuna di esse con gli attributi propri e, in aggiunta, quelli
dell’entità padre, che può cosı̀ essere eliminata. È la soluzione più adatta
quando la generalizzazione è totale, ossia quando le entità figlie sono ben
differenziate tra di loro;
3. Sostituzione con relazioni: se le entità padre e le entità figlie sono ben distinte e
si vogliono mantenere separati gli accessi alle singole entità, conviene sostituire
la generalizzazione con una vera e propria relazione.
2.4.2
Ristrutturazione del diagramma E-R di ArcheoMap
Dopo aver descritto cosa si intende per ristrutturazione di un diagramma E-R, se
ne dà un esempio pratico di applicazione sul progetto ArcheoMap.
Come sottolineato nella sezione precedente, il primo obiettivo è quello di ricercare
gli elementi che si possono eliminare perché ottenibili da altre entità e relazioni già
presenti nel progetto. Analizzando lo schema concettuale di figura 2.22 si possono
fare le seguenti considerazioni:
• L’entità “diario” è una ridondanza. Quello a cui si è effettivamente interessati
è poter accedere all’insieme di articoli scritti per una determinata località,
quindi in tal senso “diario” rappresenta solo un ponte concettuale che non
ha alcuna utilità pratica effettiva. Si opta dunque, per ragioni di efficacia,
per la sua eliminazione, e per collegare direttamente l’entità “articolo” con
l’entità “località”;
• Discorso del tutto analogo può essere fatto per le entità “insieme reperti”
e “galleria”;
• Vi sono ridondanze nella gestione dei permessi. Se è vero che dal punto di
vista concettuale le entità “capo progetto” e “direttore scavo” sono figlie
dell’entità “utente”, è anche vero che i ruoli svolti da queste all’interno dell’organizzazione di ArcheoMap possono essere ricavati dai permessi. In altre
parole, un utente che ha un permesso di tipo capo progetto è automaticamente identificato come un capo progetto, senza necessità di assegnargli un’entità
distinta. Si è scelto quindi di eliminare queste due entità senza che ciò vada
ad inficiare il corretto funzionamento del sistema;
32
2 – Il Database di ArcheoMap
• Le relazioni “riferimento immagine”, “riferimento articolo” e “documentazione” hanno la stessa cardinalità e svolgono dal punto di vista concettuale lo stesso compito: tener conto di quando articoli, immagini e schede
ministeriali sono da considerarsi di riferimento per un reperto catalogato. Si
è ritenuto più conveniente eliminare queste tre relazioni e tenerne una sola,
chiamata “riferimento”, con un attributo “tipo” in modo da tener conto di
quale categoria di riferimento si tratta.
Una volta risolte le ridondanze, il passo successivo è eliminare le generalizzazioni
rimaste, che nel caso in esame è una sola: quella che lega l’entità padre “località”
con l’entità figlia “scavo”. Poiché le due entità non presentano sostanziali differenze,
tra le possibili soluzioni prospettate nella sezione 2.4.1 si è optato per la prima, cioè
l’accorpamento dell’entità figlia nell’entità padre: tutti gli attributi dell’entità figlia
vengono aggiunti all’entità padre e per riconoscere quando una località è uno scavo,
si aggiunge un ulteriore attributo booleano chiamato “scavo”. Nella figura 2.23
è riportato lo schema grafico dell’entità “località” cosı̀ come si presenta dopo
l’accorpamento degli attributi dell’entità “scavo”.
nome_antico
data_fine
idLocalità
città
nome_nuovo
data_inizio
comune
pubblico
indicazioni
Località
nazione
scavo
e−mail
indirizzo
telefono
note
coordinate
descrizione
internet
Figura 2.23. Schema grafico dell’entità “località” dopo l’accorpamento degli
attributi dell’entità “scavo”
Non essendoci altre ottimizzazioni da fare, si può considerare conclusa la fase di
33
2 – Il Database di ArcheoMap
ristrutturazione e applicare quanto detto allo schema concettuale per ottenerne il
grafico di figura 2.24.
2.4.3
Traduzione verso il modello logico
A partire dallo schema E-R ristrutturato, si procede alla creazione del modello logico
vero e proprio. Si tratta di un modello che delinea in modo sufficientemente preciso
quella che sarà la struttura finale del database relazionale che si sta progettando, in
termini di tabelle, attributi e chiavi, senza tuttavia scendere in dettagli dipendenti
dalla particolare piattaforma DBMS scelta, la cui definizione viene demandata alla
fase successiva, la progettazione fisica.
Le tabelle sono descritte con un formalismo grafico: si dichiara il nome della
tabella seguito, fra parentesi, dalla lista degli attributi, ossia dei campi di cui è composta. Uno o più di questi campi sono sottolineati per indicare la chiave primaria,
cioè le colonne che identificano in modo univoco ogni voce inserita.
NomeTabella(chiave, attributo1, attributo2, ...)
La traduzione di un modello E-R in un modello logico segue delle regole generali
che sono di seguito esposte:
• Ogni entità è una tabella, le cui colonne sono gli attributi e la cui chiave
univoca è l’identificatore;
• Ogni relazione molti a molti diviene una tabella, le cui colonne sono gli identificatori delle entità associate, che fungono anche da chiave primaria;
• Le relazioni del tipo uno a molti con partecipazione obbligatoria (cardinalità
minima uno), vengono sciolte, e all’entità che ha partecipazione massima uno
viene aggiunto un attributo che è la chiava primaria dell’entità a cui è associata;
• Le relazioni del tipo uno a molti con partecipazione opzionale (cardinalità
minima zero) possono venire tradotte come nel punto precedente, altrimenti
possono generare una nuova tabella, avente come nome quello della relazione,
e come colonne gli identificatori delle entità associate. La chiave primaria è
la colonna corrispondente all’identificatore dell’entità che ha partecipazione
massima uno;
• Le relazioni del tipo uno a uno con partecipazione obbligatoria da parte di
entrambe le entità, vengono sciolte e ad una delle due entità (a scelta) viene
aggiunta una colonna corrispondente all’identificatore dell’altra entità;
34
Figura 2.24.
35
(1,N)
utente
(0,N)
permesso
(0,N)
elenco
articoli
(1,N)
autorizzazione
(1,N)
(0,N)
(1,1)
(0,N)
(1,1)
immagine
foto
(1,N)
località
(0,N)
(1,1)
elenco
immagini
(0,N)
riferimento
tipo
composizione
(0,N)
0,N
progetto
(0,N)
esportazione
modifica
diario
(1,1)
articolo
(1,1)
scrittura
(0,N)
modifica
immagine
(1,1)
elenco
reperti
0,N
reperto
(1,1)
catalogo
modifica
reperto
(0,N)
modifica
scheda
(1,1)
scheda
(1,1)
redazione
2 – Il Database di ArcheoMap
Schema E-R concettuale ridotto per il database di ArcheoMap
2 – Il Database di ArcheoMap
• Le relazioni del tipo uno a uno in cui una sola delle entità è a partecipazione obbligatoria sono tradotte in modo analogo alle precedenti, ma la colonna aggiuntiva corrispondente all’identificatore dell’altra entità è obbligatorio
associarla all’entità avente cardinalità minima zero;
• Le relazioni del tipo uno a uno in cui entrambe le entità hanno partecipazione
opzionale non vengono sciolte, ma si trasformano in una tabella avente come
colonne gli identificatori delle entità associate e come chiave primaria una di
queste colonne a scelta.
Le regole di traduzione appena elencate coprono tutte le possibili casistiche
e consentono di trasformare qualunque modello E-R ristrutturato in uno schema
logico.
2.4.4
Schema logico del progetto ArcheoMap
Si applicano ora le regole di traduzione al diagramma E-R ridotto di figura 2.24 per
tracciare lo schema logico del database.
Come passo preliminare si crea una tabella per ogni entità dello schema mettendo
come attributi quelli noti dallo studio concettuale:
articolo(idArticolo, testo, titolo, data scrittura, data modifica, visibile);
immagine(idImmagine, note, data inserimento, data modifica, file);
località(idLocalità, città, comune, nazione, scavo, indirizzo, coordinate, descrizione,
indirizzo internet, note, telefono, e-mail, indicazioni, data inizio, data fine,
nome nuovo, nome antico, pubblico);
progetto(idProgetto, nome, descrizione, internet, e-mail, telefono, data apertura,
data chiusura);
permesso(idPermesso, tipo permesso);
reperto(idReperto, nome, data inserimento, data modifica, coordinate);
scheda ministeriale(idScheda, data inserimento, data modifica, . . . , attributi scheda);
utente(idUtente, nome, cognome, username, password, e-mail, lingua);
La mossa successiva è quella di tradurre le relazioni. Per cominciare, la relazione
“autorizzazione” è del tipo molti a molti con partecipazione obbligatoria. Per
quanto detto, la soluzione è quella di creare una nuova tabella che abbia come
campi le chiavi delle entità “utente”, “progetto”, “località” e “permesso”:
36
2 – Il Database di ArcheoMap
autorizzazione(idPermesso, idUtente, idProgetto, idLocalità);
La relazione “scrittura” è del tipo uno a molti con partecipazione opzionale. Ci
sono due possibili modi per tradurla, tra questi si opta per lo scioglimento della
relazione e l’aggiunta di un nuovo attributo all’entità “articolo”, attributo che
punta alla chiave dell’entità “utente”, in questo modo:
articolo(idArticolo, testo, titolo, data scrittura, data modifica, visibile, idAutore);
La relazione “modifica diario” è identica alla precedente, quindi allo stesso modo
si aggiunge un nuovo attributo all’entità “articolo” che punta alla chiave dell’entità
“utente”:
articolo(idArticolo, testo, titolo, data scrittura, data modifica, visibile, idAutore,
idModificatore);
Un procedimento del tutto analogo si applica anche alle relazioni “foto”, “modifica foto”, “catalogo”, “modifica reperto”, “redazione” e “modifica scheda”, che quindi scompaiono, sostituite da attributi aggiunti alle entità che partecipano alla relazione con cardinalità massima uno:
immagine(idImmagine, note, data inserimento, data modifica, file, idAutore,
idModificatore);
reperto(idReperto, nome, data inserimento, data modifica, coordinate, idAutore,
idModificatore);
scheda ministeriale(idScheda, data inserimento, data modifica, . . . , attributi scheda,
. . . , idAutore, idModificatore);
La relazione “elenco articoli” è ancora una relazione uno a molti con partecipazione opzionale, e nuovamente si preferisce il suo scioglimento e l’aggiunta di un attributo all’entità “articolo”, che quindi va un’altra volta modificato,
aggiungendogli la chiave dell’entità associata, “località”:
articolo(idArticolo, testo, titolo, data modifica, data scrittura, visibile, idAutore,
idModificatore, idLocalità);
Stessa cosa per le relazioni “elenco immagini” e “elenco reperti”:
immagine(idImmagine, note, data inserimento, data modifica, file, idAutore,
idModificatore, idLocalità);
reperto(idReperto, nome, data inserimento, data modifica, coordinate, idAutore,
idModificatore, idLocalità);
37
2 – Il Database di ArcheoMap
La relazione “composizione”, che lega le località ai progetti, è un altro caso di
relazione uno a molti, ma questa volta a partecipazione obbligatoria (ogni località
deve appartenere a uno e un solo progetto), quindi non si hanno scelte: nella traduzione verso il modello logico è necessario sciogliere la relazione e aggiungere un
attributo all’entità che ha partecipazione massima uno, ossia “località”:
località(idLocalità, città, comune, nazione, scavo, indirizzo, coordinate, descrizione,
indirizzo internet, note, telefono, e-mail, indicazioni, data inizio, data fine,
nome nuovo, nome antico, pubblico, idProgetto);
La relazione molti a molti “riferimento” viene mantenuta e genera una tabella
siffatta:
riferimento(idRiferimento, idReperto, idOggetto, tipo);
dove “idOggetto” è la chiave dell’oggetto associato, che di volta in volta può essere
un articolo, un’immagine o una scheda ministeriale, in base a quanto indicato dal
campo “tipo”.
Infine la relazione ternaria molti a molti “esportazione” dà origine ad una
nuova tabella costituita dalle sole chiavi primarie che essa lega:
esportazione(idUtente, idProgetto, idLocalità)
Nel tentativo di rendere edotto il lettore su come si sviluppa passo per passo
il progetto logico, alcune tabelle sono state modificate più volte nel corso della
trattazione. Per chiarezza si mostra nella tabella 2.10 lo schema logico completo.
Con questo il database può uscire dall’astrazione progettuale per essere tradotto
in realtà fisica, implementato su un DBMS reale.
2.4.5
Progettazione fisica
La progettazione fisica è la fase finale del processo di pianificazione e creazione di
una base dati. Lo scopo di questa fase è quello di dare un’implementazione pratica
su calcolatore dello schema logico prodotto al termine della fase precedente. Al
prodotto finale si giunge per passi successivi:
1. Scelta del DBMS da utilizzare;
2. Creazione delle tabelle, sfruttando i tipi di dato e i costrutti specifici del DBMS
scelto;
3. Creazione di particolari procedure interne al DBMS, i trigger, per il mantenimento dell’integrità relazionale;
38
2 – Il Database di ArcheoMap
articolo(idArticolo, testo, titolo, data scrittura, data modifica, visibile, idAutore,
idModificatore, idLocalità);
autorizzazione(idPermesso, idUtente, idProgetto, idLocalità);
immagine(idImmagine, note, data inserimento, data modifica, file, idAutore,
idModificatore, idLocalità);
località(idLocalità, città, comune, nazione, scavo, indirizzo, coordinate, descrizione, indirizzo internet, note, telefono, e-mail, indicazioni, data inizio, data fine,
nome nuovo, nome antico, pubblico, idProgetto);
progetto(idProgetto, nome, descrizione, internet, e-mail, telefono, data apertura,
data chiusura);
permesso(idPermesso, tipo permesso);
reperto(idReperto, nome, data inserimento, data modifica, coordinate, idAutore,
idModificatore, idLocalità);
riferimento(idRiferimento, idReperto, idOggetto, tipo, data inserimento, idUtente);
scheda ministeriale(idScheda, data inserimento, data modifica, . . . , attributi
scheda, . . . , idAutore, idModificatore);
utente(idUtente, nome, cognome, username, password, email, lingua);
Tabella 2.10.
Schema logico del database di ArcheoMap
4. Ottimizzazione delle prestazioni per mezzo di particolari strutture chiamate
“indici”.
È fondamentale chiarire che il progetto del database ottenuto dall’applicazione successiva della progettazione concettuale e della progettazione logica è totalmente
indipendente dalla realizzazione fisica finale. Questo significa che quanto esposto
nei paragrafi seguenti rappresenta solo un esempio dei molti modi in cui è possibile implementare un prototipo del database: lo stesso si sarebbe potuto ottenere utilizzando un qualsiasi altro strumento tra i molti che il mercato mette a
disposizione.
PostgreSQL
DBMS (Database Management System) è il termine con cui in informatica si fa
riferimento a sistemi software disegnati appositamente per la creazione e la manipolazione di basi dati da parte di più utenti. Nell’obiettivo di utilizzare software
Open Source per lo sviluppo di un prototipo del progetto ArcheoMap, si è cercato
tra questi quale DBMS usare nell’implementazione del database. La scelta è caduta su PostgreSQL nella sua versione 7.4, a oggi considerato uno dei migliori DBMS
39
2 – Il Database di ArcheoMap
Open Source in circolazione, in grado di confrontarsi senza timori con i più blasonati
sistemi commerciali.
Nato nel 1985 come derivato del DBMS commerciale Ingres sviluppato in seno
all’università di Berkeley, ha goduto dei contributi della comunità di sviluppatori di
tutto il mondo, assumendo il nome attuale nel 1996 dopo che è stato introdotto il
supporto al linguaggio di interrogazione dei database SQL3 . La versione 7.4 utilizzata
come riferimento nella realizzazione del prototipo del progetto analizzato in questa
tesi è stata rilasciata nel 2003.
Questo DBMS supporta interrogazioni complesse in SQL, fa uso degli indici per
l’ottimizzazione delle prestazioni, consente la creazione di trigger per il mantenimento della integrità relazionale ed è improntato alla multi-utenza in modo da garantire
un accesso selettivo e sicuro ai dati. Mette inoltre a disposizione una serie di meccanismi per il backup e il restore dei dati in modo da mettersi al riparo da eventuali
guasti senza perdita di informazioni.
La caratteristica più importante è la sua espandibilità: è dotato di un linguaggio
di programmazione interno, chiamato PL/SQL, che consente la creazione di tipi di
dati complessi e di nuove funzionalità in modo da adattarsi facilmente a tutte le
esigenze.
Tipi di dato di PostgreSQL
Per tradurre il modello logico all’interno del DBMS occorre scegliere, tra i tipi di
dato messi a disposizione da questo, quelli che sono più adatti a rappresentare i
campi delle singole tabelle. Dalla documentazione delle entità viste nelle tabelle 2.1
– 2.9 i tipi di dato da utilizzare sono: numeri, numeri progressivi, numeri booleani,
stringhe di caratteri e date.
Per quanto riguarda la rappresentazione dei numeri, PostgreSQL mette a disposizione il tipo di dato integer che consente di trattare numeri interi su 32 bit fino
ad un valore massimo di 2147483647.
I numeri progressivi sono utilizzati per la definizione dei codici univoci delle
chiavi delle tabelle. PostgreSQL mette a disposizione per queste esigenze il tipo di
dato serial, anch’esso su 32 bit, con la caratteristica che ad ogni nuovo inserimento
in una tabella il codice viene incrementato di uno. In questo modo il primo elemento
inserito avrà codice 1, il secondo 2 e cosı̀ via, garantendo che nessun elemento abbia
lo stesso identificativo.
Per i numeri booleani si utilizza l’apposito tipo boolean che può assumere solo
due valori: true se il campo deve essere asserito, altrimenti false.
Per quanto riguarda la rappresentazione delle stringhe di caratteri, PostgreSQL
offre due possibilità: il tipo character varying(n) e il tipo text. Nel primo
3
SQL, Simple Query Language, linguaggio caratterizzato da pochi e semplici istruzioni
ottimizzate per l’interrogazione dei database
40
2 – Il Database di ArcheoMap
caso è possibile definire stringhe di caratteri che hanno una lunghezza massima n
specificata, nel secondo caso si possono inserire stringhe di caratteri di lunghezza
illimitata. Sebbene la seconda soluzione possa sembrare in prima istanza la più
conveniente, in realtà una stringa di caratteri di tipo text occupa più spazio di
una stringa con lunghezza massima dichiarata, quindi è conveniente utilizzare il
tipo text solo quando strettamente necessario. Si è perciò scelto di tradurre come
text solo i campi di lunghezza indefinita, come per esempio i testi di descrizioni e
articoli di diario, mentre per tutti gli altri campi si è adottato il tipo character
varying(n) impostando il parametro n ad una dimensione appropriata. Per esempio
l’attributo “nome” della tabella “utente” è stato fissato ad una lunghezza massima
di 80 caratteri, sufficienti ad ospitare nomi anche molto lunghi.
Infine per l’inserimento delle date si è utilizzato il tipo di dato timestamp
che consente di memorizzare in un intero di 32 bit data e ora con precisione al
millisecondo.
Terminata la scelta dei tipi di dato da utilizzare, è possibile scrivere il codice
SQL che istruisce il DBMS PostgreSQL su come creare le tabelle e la loro struttura.
Nella sezione 9.1 dell’appendice è riportato tale codice.
Trigger
Il termine trigger indica una procedura scritta all’interno del database che consente
di eseguire particolari azioni ogni volta che si effettuano delle modifiche (inserimento,
aggiornamento, cancellazione) ai dati di una tabella. Con i trigger si realizza la
cosiddetta “base dati attiva”: il database reagisce automaticamente a determinati
eventi, eseguendo il codice del trigger ogni volta che questo è necessario. In questo
modo i trigger vengono a far parte della struttura stessa del database e consentono
di mantenere tra i dati delle tabelle legami complessi che non è possibile esprimere
in meri termini di diagrammi E-R perché, essendo selettivi, hanno necessariamente
bisogno del supporto di un linguaggio di programmazione più completo del semplice
SQL. PostgreSQL possiede un proprio linguaggio interno per la definizione di trigger
che prende il nome di PL/SQL.
All’interno del database di ArcheoMap si sono definiti tre trigger, tutti sulla
tabella “autorizzazione” in cui sono registrati i permessi che regolano l’accesso degli
utenti. Il primo trigger, a cui si è dato il nome “check leader”, si scatena ogni
volta che viene effettuata una cancellazione su questa tabella per assicurarsi che un
progetto non venga lasciato senza almeno un capo progetto, come si richiede nei
requisiti. Se si sta togliendo il permesso di capo progetto all’ultima persona che ha
tale qualifica nell’ambito di un progetto, questo trigger se ne accorge, genera un
messaggio di errore e impedisce l’operazione.
Il secondo trigger si scatena dopo che sono stati cancellati i permessi di una persona nell’ambito di una località. Ogni utente presente nel database, per poter essere
41
2 – Il Database di ArcheoMap
considerato un collaboratore ad una località, deve obbligatoriamente avere almeno
un permesso associato ad essa. Tuttavia si deve tener conto di situazioni transitorie
in cui un utente, pur collaborando ancora ad un progetto o a una località, è stato
privato dei suoi permessi senza che gliene siano stati assegnati di nuovi. Per trattare
questa casistica, si è inserito un permesso fittizio chiamato “na” (abbreviazione di
not assigned ) agli utenti che si trovano nella situazione descritta. Si è creato allora il
trigger “set na” che automaticamente, alla cancellazione dei permessi di un utente,
se questo non ne ha altri nell’ambito della località, gli assegna il permesso fittizio.
Il terzo ed ultimo trigger, a cui si è dato nome “delete na”, è complementare
al precedente e si scatena quando viene inserito un nuovo permesso. Se il nuovo
permesso inserito riguarda una persona che si trova nello stato “na” per una data
località, il trigger automaticamente inserisce il nuovo permesso e cancella il permesso
fittizio, di cui non c’è più bisogno.
Indici
Con il termine “indice” nell’architettura delle basi dati si intende una struttura ad
albero binario che consente di velocizzare le operazioni di ricerca nelle tabelle.
In condizioni normali, per ottenere i risultati di un’interrogazione ad una tabella,
il DBMS effettua una scansione da cima e fondo, restituendo le righe della tabella
che soddisfano i criteri di ricerca. Tale modo di procedere, come è facile intuire, è
molto dispendioso nel caso di tabelle di grosse dimensioni.
La soluzione per velocizzare considerevolmente le operazioni di ricerca consiste
nell’affiancare ad una tabella una struttura ausiliaria a forma di albero binario (un
indice, per l’appunto) in cui ogni nodo contiene un valore del campo che si vuole
indicizzare e un puntatore alla posizione della riga che lo contiene nella tabella.
Nella figura 2.25 è rappresentato un’albero binario e, con una linea tratteggiata,
x4
x
x2
x5
x7
x6
x3
Figura 2.25.
x1
Schema di funzionamento di un indice per una tabella
il puntatore alla riga della tabella contenente lo specifico valore del campo. La
proprietà saliente degli alberi binari è che per ogni nodo, nel sotto albero di destra
42
2 – Il Database di ArcheoMap
sono contenuti solo valori minori, mentre nel sotto-albero di sinistra sono contenuti
solo valori maggiori. In questo modo le operazioni di ricerca vengono velocizzate
perché, partendo dal nodo superiore (nodo radice) e operando gli opportuni confronti
sul valore che si intende cercare, è possibile spostarsi a destra o a sinistra lungo
i singoli rami dell’albero escludendo automaticamente dalla ricerca l’intero sotto
albero opposto. È possibile dimostrare in termini matematici che il tempo di ricerca
medio negli alberi binari è log2 N dove N è il numero di valori complessivamente
contenuti nella tabella. Per esempio, per ricercare un elemento all’interno di una
tabella di 1000 righe, con una ricerca esaustiva è necessario effettuare mediamente
500 confronti, in un albero binario se ne effettuano mediamente 10 soltanto!
L’uso degli indici ha tuttavia una controindicazione: per mantenere aggiornato
l’albero binario, è necessario che ad ogni inserimento o cancellazione di un elemento in una tabella debba corrispondere anche un inserimento o una cancellazione
nell’indice. Risulta quindi sconveniente costruire indici su tutti i campi delle tabelle, è consigliato piuttosto stabilirne un numero ridotto solo per i campi più selettivi
effettivamente necessari, ovvero quelli maggiormente interessati dai criteri di ricerca.
PostgreSQL, cosı̀ come altri DBMS, costruisce automaticamente un indice per
le chiavi primarie delle tabelle, questo perché tali campi, essendo utilizzati nella
costruzione delle relazioni, sono spessissimo coinvolti nelle operazioni di ricerca.
Ipotizzando quali possano essere le operazioni compiute più frequentemente sul
database, si sono isolati, per ogni tabella, i campi più utilizzati e si è optato per la
definizione dei seguenti indici:
• Un indice per il campo “nome nuovo” della tabella “località” per velocizzare
la ricerca per nome delle località;
• Un indice per la coppia di campi “username“ e “password” della tabella
“utente” per velocizzare le operazioni di autenticazione degli utenti;
• Un indice sul campo “idAutore” della tabella “articolo” per velocizzare le
ricerche degli articoli scritti da un determinato utente;
• Un indice sul campo “idAutore” della tabella “immagine” per velocizzare le
ricerche delle immagini inserite da un determinato utente;
• Un indice sul campo “idAutore” della tabella “reperto” per velocizzare le
ricerche dei reperti catalogati da un determinato utente;
• Un indice sul campo “idLocalità” della tabella “articolo” per velocizzare
la ricerca degli articoli di diario collegati ad una determinata località;
• Un indice sul campo “idLocalità” della tabella “immagine” per velocizzare
la ricerca delle immagini collegate ad una determinata località;
43
2 – Il Database di ArcheoMap
• Un indice sul campo “idLocalità” della tabella “reperto” per velocizzare la
ricerca dei reperti collegati ad una determinata località;
• Un indice sulla tripla di campi “idReperto”, “idOggetto”, e “tipo” della
tabella “riferimento” per accelerare la ricerca dei riferimenti di un reperto.
44
Capitolo 3
L’interfaccia Web
3.1
Introduzione alla tecnologia Web
La prima pagina Web della storia venne pubblicata il 6 agosto 1991 da un matematico, Tim Bernes Lee, che può a buon merito essere considerato il fondatore del
Web. L’idea ispiratrice di tale evento era l’intenzione di condividere documentazione
scientifica in un formato elettronico indipendente dalla piattaforma utilizzata e di
renderla disponibile a chiunque ne fosse interessato tramite un collegamento di rete.
Il Web nasce quindi come un ideale mezzo per presentare e condividere contenuti
informativi tra persone distanti tra loro migliaia di chilometri, indipendentemente
dal sistema operativo o dal tipo di hardware in loro possesso. Per raggiungere
questo obiettivo il Web si basa sull’uso di una serie di standard e protocolli ideati
appositamente per lo scambio di documenti su reti dati, e di questi i principali sono
il protocollo HTTP e il linguaggio HTML.
L’HTML (sigla di HyperText Markup Language) è un semplice linguaggio che
permette di marcare le singole parti di un documento per descriverne in modo rigoroso il contenuto logico indicandone la funzione (tabelle, elenchi, paragrafi, link,
immagini, etc.) e lo stile (dimensione e colore del carattere da utilizzare, dimensioni
e colori dei bordi, etc.). I documenti scritti in tale linguaggio vengono interpretati da
un apposito software, il browser, che provvede a trasformare le indicazioni contenute
nel documento HTML in elementi visuali per la presentazione grafica dei contenuti.
Il protocollo HTTP (sigla di HyperText Transfer Protocol ) è un insieme di comandi standard per il trasferimento di documenti ipertestuali (come i file HTML)
sulle reti di dati che si basa su un meccanismo di richiesta / risposta: un calcolatore,
che svolge il ruolo di client, effettua le richieste, e dall’altro capo del collegamento
un altro calcolatore, che svolge il ruolo di Web Server, risponde inviando le informazioni richieste. Il processo svolto dal Web Server per la generazione delle risposte
porta a classificare le pagine Web in due tipi di categorie: pagine Web statiche e
45
3 – L’interfaccia Web
pagine Web dinamiche.
Le pagine Web di tipo statico sono il caso più semplice: il contenuto è determinato a priori e non cambia, lasciando all’utente l’unica scelta di visualizzare o
non visualizzare la pagina. In tal caso le operazioni compiute sono relativamente
semplici: il browser, sulla macchina client, invia al Web Server remoto la richiesta di
una determinata pagina, e quest’ultimo risponde cercando nella propria memoria il
file HTML corrispondente alla pagina richiesta e inviandola al client come risposta.
Il browser fa una scansione del file inviato, interpreta le indicazioni contenute, e
visualizza in forma grafica la pagina all’utente. Se durante il processamento del documento si rende necessario scaricare immagini, suoni o altri elementi multimediali,
si generano altre richieste al Web Server a cui seguono le risposte, ognuna contenente
il file necessario. Si noti che il termine “statico” riferito alle pagine Web fa riferimento strettamente al contenuto, indipendentemente da quale esso sia. Questo significa
che una pagina, anche se contiene immagini in movimento, filmati o elementi sonori,
è comunque statica se l’utente non ha avuto modo di operare precedentemente una
scelta su quali di questi elementi visualizzare.
Le pagine Web di tipo dinamico sono il caso di maggiore interesse per lo sviluppo
del progetto ArcheoMap: il contenuto cambia sulla base dei parametri di richiesta
impostati dall’utente. Le tipiche operazioni compiute durante la transazione sono
leggermente più complesse rispetto al caso precedente, e possono variare in alcuni
passi sulla base della soluzione adottata. Come architettura generale, per inviare
il contenuto personalizzato, il Web Server elabora un programma (quello che viene
detto Web application) e interagisce con un database da cui preleva i contenuti da
visualizzare secondo la richiesta.
Nel corso di questo capitolo si vedrà dapprima quale soluzione si è adottata per la
creazione del sito di ArcheoMap, quale l’architettura generale, strumenti e linguaggi
utilizzati e infine si farà una carrellata sulle principali pagine del sito.
3.2
Requisiti per la realizzazione del sito
All’interno del progetto ArcheoMap si vuole realizzare un sito che faccia da interfaccia verso il database. I DBMS hanno infatti un livello di interazione limitato
all’inserimento di istruzioni SQL, il risultato della cui esecuzione compare a schermo
sotto forma strettamente tabellare, senza alcuna presentazione grafica e in modo difficile da capire per i non tecnici in quanto troppo legato all’architettura interna del
database. Per questo è prassi comune realizzare un sito Web che funga da front-end.
Con tale termine si intende un’applicazione che traduca operazioni semplici, come il
click su un menu grafico, su un bottone o la compilazione di un modulo, in istruzioni
SQL da far eseguire al DBMS e ne presenti, in forma il più possibile user friendly,
46
3 – L’interfaccia Web
i risultati, nascondendo all’utente la complessità tecnica dell’interazione con la base
dati.
Detto questo, i requisiti che si intende soddisfare sono, sinteticamente, i seguenti:
• Il sito deve consentire all’utente di “navigare” le informazioni contenute nel
database, e rispettarne l’organizzazione logica dei dati;
• Il sito deve essere progettato con l’obiettivo della chiarezza: l’utente deve
sempre sapere in quale parte del sito si sta trovando e come raggiungere i
contenuti di cui ha bisogno;
• Poiché ogni utente ha permessi diversi, il sito deve limitare l’accesso ai dati ai
soli utenti che ne sono autorizzati, previa autenticazione, e limitatamente alle
sole informazioni consentite;
• Poiché il progetto ArcheoMap è aperto alla comunità internazionale, il sito
deve essere dotato di un’interfaccia multilingua, che consenta ad un utente di
navigare tra i contenuti senza ostacoli linguistici.
3.3
Architettura generale
Nella stesura del progetto di un sito Web dinamico ciò che si cerca di realizzare, per
evitare ridondanze e rendere il prodotto finale facilmente mantenibile ed espandibile,
è la separazione tra Presentation Logic, Business Logic e Data Access Logic.
Con il termine Presentation Logic si intende tutta quella parte dell’applicazione
Web che si occupa della presentazione dei dati all’utente: si tratta quindi del design
dell’interfaccia grafica, della sua usabilità e in generale del modo in cui vengono
presentati i contenuti.
Per Business Logic si intende l’insieme di meccanismi che regolano l’accesso ai
dati, per assicurare che gli utenti compiano solo le operazioni a loro consentite e
sull’insieme di dati a cui possono accedere, rispettando l’organizzazione prevista nel
database.
Con il termine Data Access Logic, infine, si intende l’insieme di meccanismi che
si occupano dell’accesso ai dati e prelevano dal database i risultati delle operazioni
di ricerca e di inserimento.
L’architettura generale che si intende seguire è quella rappresentata in figura
3.1: sull’asse orizzontale si sviluppano i processi, ovvero la sequenza di operazioni
che sono scatenate da un evento generato dall’utente, mentre sull’asse verticale è il
tempo, per cui ciò che è più in basso nel diagramma accade temporalmente dopo
ciò che è più in alto. Il diagramma rappresenta, sotto forma di use case 1 , il modo di
1
Per use case si intende un modello del modo in cui gli utenti interagiscono con il sistema e dei
processi scatenati dalla loro interazione
47
3 – L’interfaccia Web
Interfaccia
Sicurezza
Script
DataBase
Comando
Verifica sicurezza
Elaborazione comando
timeline
Accesso dati
Elaborazione
Visualizzazione
Figura 3.1.
Diagramma temporale di una Web Application
procedere dell’applicazione Web. I passi principali attraverso cui si dipana l’azione
sono i seguenti:
1. L’utente vede dal browser l’interfaccia grafica su cui può operare delle scelte,
ad esempio compilando un modulo o cliccando su un bottone;
2. Il comando dell’utente viene sottoposto ad un controllo sui permessi, per
assicurarsi che esso abbia i privilegi necessari;
3. In caso l’utente sia autorizzato, il comando viene elaborato dal programma
residente sul Web Server che, se necessario, compila una o più istruzioni SQL
per interrogare il database;
4. Il database esegue le istruzioni SQL e restituisce i risultati all’applicazione
Web;
5. Il programma elabora i risultati ottenuti e dispone i contenuti all’interno di
un documento HTML preparato dinamicamente;
6. Il codice HTML viene formattato secondo quanto stabilito dall’interfaccia
grafica e presentato all’utente, che può infine visualizzare quanto richiesto.
48
3 – L’interfaccia Web
Le entità che partecipano al processo, e che compaiono nella figura, sono quattro: l’interfaccia grafica che visualizza i contenuti; un modulo per la sicurezza che
limita l’uso delle sole operazioni consentite; un programma residente sul Web Server
sotto forma di script2 per l’implementazione della logica di funzionamento; infine il
database che raccoglie i dati da elaborare. Nel seguito verranno descritte le prime
tre entità, in quanto l’ultima è già stata esaurientemente dettagliata nel capitolo 2.
3.4
Apache e il linguaggio PHP
Prima di descrivere le componenti logiche in cui è suddiviso il progetto, è bene
introdurre gli strumenti utilizzati durante lo sviluppo.
Per l’implementazione del sito sono necessari un Web Server e un linguaggio
di programmazione in grado di interfacciarsi con esso per l’accesso al database e la
produzione delle pagine. Dal momento che si è scelto, come obiettivo di progetto,
di fare uso unicamente di software open source, come Web Server si usa Apache, e
come linguaggio di programmazione PHP.
Apache è un Web Server sviluppato a partire dal 1995 dalla comunità open
source e giunto nel corso del 2006 alla versione 2.0. Al momento in cui sono iniziati
i lavori sul progetto ArcheoMap la versione disponibile era la 1.3, che viene perciò
presa come riferimento. Nonostante la concorrenza di prodotti proprietari, Apache
è il Web Server più diffuso al mondo, perciò anche la documentazione relativa è
abbondante. Conseguenza diretta del suo successo è il gran numero di estensioni che
permettono ad Apache, per esempio, di interagire con diversi linguaggi di scripting,
tra cui PHP, di implementare internamente dei meccanismi di autenticazione e di
gestire transazioni sicure su canali di comunicazione cifrato.
PHP, acronimo di Personal Home Page è un linguaggio di programmazione inventato da Rasmus Lerdorf nel 1994 e reso di pubblico dominio nel 1995. La versione del linguaggio presa come riferimento per lo sviluppo di ArcheoMap è PHP4.
Si tratta di un linguaggio concepito appositamente per la gestione delle pagine Web
dinamiche, e come tale si caratterizza per la semplicità di integrazione nel codice
HTML e per l’ampio supporto ai diversi DBMS. PHP è un linguaggio di scripting
che si appoggia ad un Web Server, in particolare ad Apache, per l’esecuzione. Lo
scenario di utilizzo del PHP nel contesto di un sito Web dinamico è il seguente:
1. L’utente, tramite il browser, fa richiesta al Web Server di un file avente
estensione .php;
2. Il server cerca nella sua memoria tale file e lo interpreta;
2
Si definisce scriptun programma il cui codice viene interpretato ed eseguito da un altro software.
La programmazione su Web fa uso di script il cui interprete è chiamato dal Web Server
49
3 – L’interfaccia Web
3. Il programma che viene interpretato accede a un database per prelevare i
contenuti e genera del codice HTML in cui sono inseriti i contenuti appena
prelevati;
4. Il Web Server riceve questo codice HTML come risultato dell’esecuzione del
file PHP e invia il codice HTML all’utente come risposta.
A partire dalla release n◦ 4 del linguaggio, quella usata in ArcheoMap, PHP
supporta la programmazione ad oggetti (anche se in verità non in modo completo,
ma comunque sufficiente per le esigenze del caso) e quindi permette di scrivere codice
più pulito e strutturato.
3.5
L’interfaccia del sito
Nel contesto di un sito Internet il termine “interfaccia” indica l’aspetto grafico del
sito, composto da elementi passivi, che non offrono interazione all’utente (per esempio immagini e testi) e da elementi attivi che permettono all’utilizzatore di interagire
ed esprimere delle scelte o effettuare delle richieste (per esempio bottoni, link e moduli da compilare). L’interfaccia riveste quindi, all’interno del progetto, il ruolo di
Presentation Logic: mostra e organizza visualmente i contenuti e fornisce i modi per
richiederli e gestirli. Per mantenere la separazione tra presentazione e gestione dei
contenuti si hanno a disposizione due strumenti: i template e l’uso di fogli di stile,
meglio noti come CSS.
3.5.1
Creazione del template
Nella realizzazione dell’aspetto grafico di un sito Internet non c’è limite alla fantasia
dei designer, tuttavia considerazioni di carattere pratico e di immediatezza d’uso
verso l’utente hanno, con il tempo, portato alla definizione di alcune linee guida
da seguire per realizzare un sito usabile. Una di queste consiglia di mantenere
l’interfaccia grafica del sito il più omogenea possibile nel passaggio da una pagina
all’altra: in questo modo l’utente, abituatosi ai colori e alla disposizione delle aree
funzionali, si sente più a suo agio nella navigazione e gli risulta più facile capire dove
rivolgere lo sguardo alla ricerca di ciò che gli interessa.
Questo tipo di considerazione porta a stabilire, per l’aspetto grafico, un modello
comune a tutte le pagine del sito, ovvero un template. Il template di un sito è la
descrizione del suo aspetto generale in termini di disposizione dei contenuti nello
spazio della finestra del browser e del loro ruolo funzionale.
Esistono numerosi “motori di template”, piattaforme di sviluppo che permettono
la generazione di modelli per i siti Web. Tra le alternative open source si è preferito
50
3 – L’interfaccia Web
utilizzare, per via della sua flessibilità e semplicità, Savant2, totalmente scritto in
PHP e quindi ben integrabile con il resto del progetto.
Il modello che si è pensato di utilizzare per il sito di ArcheoMap è un classico
layout a tre colonne, con intestazione e fondo pagina. Nella figura 3.2 è mostrata
Figura 3.2.
Il modello usato per la costruzione del sito di ArcheoMap
un’immagine del modello adottato. Nella parte alta di ogni pagina c’è un’intestazione che visualizza il titolo e il menu di navigazione che punta alle sezioni principali
del sito: home page, mappe, elenco dei progetti, login/logout, link a siti associati
e una pagina di riconoscimenti. La parte mediana è divisa in tre pannelli: uno
centrale, più ampio, riservato alla presentazione dei contenuti veri e propri (vuota
nel caso della figura), e due pannelli laterali più stretti, di cui quello di sinistra per
l’accesso alle funzioni specifiche di ogni sezione, e quello di destra per la visualizzazione di una struttura ad albero che mostra all’utente in quale progetto e in quale
località sta operando in quel momento. Lo spazio a fondo pagina è riservato al logo
di ArcheoMap e a due link per testare l’aderenza agli standard del Web.
Per sfruttare i vantaggi offerti in termini di manutenibilità e chiarezza dal paradigma della programmazione ad oggetti, si è definita una classe di template chiamata
tpl, che definisce attributi e metodi generali della pagina. Nel diagramma 3.3 è ri51
3 – L’interfaccia Web
tpl
−titolo
−nome_menu
+pannello_sx()
+pannello_centro()
+pannello_dx()
+javascript()
+query()
+login()
+utente()
Figura 3.3.
Diagramma della classe di template “tpl”
portato lo schema della classe “tpl”. Come si può vedere, gli attributi definiti sono
essenzialmente due: “titolo”, in cui viene specificato di volta in volta il titolo di
ogni pagina, e “nome menu” in cui è indicato il tipo di menu da caricare pagina per
pagina, coerentemente con le operazioni che si intende svolgere sul contenuto. I
metodi messi a disposizione sono:
• “pannello sx()”: disegna il pannello di sinistra della pagina, contenente il
menu e, opzionalmente, dei bottoni per l’accesso alle funzioni amministrative;
• “pannello centro()”: disegna il pannello centrale, in cui sono visualizzati i
contenuti;
• “pannello dx()”: disegna il pannello di destra con il menu ad albero in
cui viene indicata, in modo gerarchico, la posizione attuale dell’utente tra
le località e i progetti che sta visitando;
• “javascript()”: include nel foglio HTML le istruzioni JavaScript per aggiungere effetti grafici alle pagine;
• “query()”: dal momento che molte operazioni compiute durante la navigaziona del sito richiedono uno o più accessi al database, questo metodo mette a
disposizione il codice per avviare la connessione al DBMS, eseguire la query,
prelevare i risultati e chiudere la connessione;
• “login()”: questo metodo serve per testare se l’utente che sta visualizzando
una pagina ha già effettuato login oppure no. Se si, nel menu di navigazione
52
3 – L’interfaccia Web
in alto stampa la scritta “logout”, altrimenti stampa la scritta “login” e il link
per effettuare l’autenticazione;
• “utente()”: stampa nella parte in alto a destra della pagina, subito sopra il
menu di navigazione, il nome dell’utente correntemente loggato3 .
Questa classe costituisce la base su cui sono create tutte le pagine del sito. In
particolare, ogni pagina è a sua volta una classe, che estende la classe base “tpl” e ne
sovrascrive i metodi per adattarli alle necessità proprie del contenuto da visualizzare
e gestire. In termini di progettazione si realizza il diagramma di figura 3.4 dove
progetto.php
località.php
progetti.php
reperti.php
reperto.php
tpl
scheda_min.php
diario.php
articolo.php
Figura 3.4.
immagine.php
galleria.php
Esempio di diagramma delle classi per il sito Web di ArcheoMap
compaiono le principali pagine del sito di ArcheoMap, ognuna collegata tramite una
freccia alla classe di template ad indicare appunto che ognuna di esse è una classe
figlia di “tpl”.
3
Per brevità, si userà nel corso del testo l’inglesismo “loggarsi” per intendere l’azione di un
utente che effettua log-in, ovvero si autentica per effettuare l’accesso al sito
53
3 – L’interfaccia Web
3.5.2
CSS
Se la realizzazione del template permette di definire la “forma” di ogni pagina,
specificando di quante parti è composta e la relativa posizione nello spazio, tutto ciò
che riguarda lo stile, quindi i colori, la dimensione dei caratteri, i bordi e gli sfondi
degli elementi grafici che compaiono a schermo, sono definiti nel CSS.
Il termine CSS è abbreviazione di Cascading Style Sheet, che in italiano può
essere reso come “fogli di stile”, e identifica lo standard definito dal W3C4 nel 1996
per descrivere la resa grafica di una pagina HTML. La sintassi di un CSS è composta
da una sequenza di istruzioni in cui, per ogni elemento, è possibile specificare una
serie di attributi riguardanti il suo aspetto. È inoltre possibile creare delle categorie
che racchiudono più elementi con un aspetto comune.
Una delle caratteristiche più apprezzate dei CSS è la possibilità di poter raggruppare tutte le istruzioni che li formano in un file esterno alla pagina. Questo consente
di rendere il codice del template più snello e pulito, in quanto le parti riguardanti
la resa grafica, quindi non strettamente inerenti alle funzioni definite nel template,
sono separate e raccolte in un documento a parte.
Ad esempio, nel layout adottato per ArcheoMap si è definito tramite CSS che
lo sfondo della pagina deve essere bianco, con i contenuti scritti in nero; che i menu
laterali devono essere in caratteri bianchi su sfondo azzurro; che i bottoni e gli
elementi di input devono essere di colore grigio, e che le etichette dei campi di un
modulo che è obbligatorio compilare siano in rosso.
Con l’accoppiata template e CSS si è ottenuta la separazione dell’aspetto grafico
dai contenuti, obiettivo che ci si era prefissi. Se infatti un designer professionista
desiderasse intervenire per cambiare la grafica del sito, tutto ciò che dovrebbe fare
sarebbe modificare il template e il CSS (soli due file!), e l’interfaccia del sito vi si
adatterebbe automaticamente.
3.6
Business Logic
Nel concetto di Business Logic è raccolta tutta la parte del sito che gestisce gli input
dell’utente, in modo del tutto trasparente, e genera una risposta facendo accesso al
database ed elaborando le informazioni ottenute per presentarle in un file HTML
leggibile dal browser. Ogni pagina PHP di cui è composto il sito è a tutti gli effetti
una Web application a sé stante che esegue tutte le operazioni necessarie e gestisce,
ad alto livello, l’accesso alla base dati.
4
W3C è il consorzio super partes che si occupa della definizione degli standard per le tecnologie
del Web
54
3 – L’interfaccia Web
3.6.1
Le Web application
Quando si parla di Web application si intende l’insieme di codice, interpretato dal
Web Server, che opera esattamente come un programma tradizionale: a fronte di
uno o più input da parte dell’utente, esegue delle elaborazioni e produce un output.
I modi in cui è previsto l’utente interagisca con una Web application in ArcheoMap sono sostanzialmente due: i link parametrizzati e i form.
I link parametrizzati sono link che si presentano nella forma:
/localita.php?prj=1&loc=3
Al nome della pagina da richiamare, nell’esempio “localita.php”, segue un punto
interrogativo (“?”) e poi dei parametri predefiniti passati come coppie nome parametro / valore. Nell’esempio si passano alla pagina referenziata (che è a sua volta
una Web application) i due parametri “prj”, con valore 1, e “loc” con valore 3. La
pagina richiamata legge questi parametri e in base ad essi elabora dei dati. Il link
di esempio riportato apre la pagina che mostra i dettagli della località avente codice
3 nel database e che fa parte del progetto 1.
I form sono dei moduli che possono essere compilati dall’utente tramite l’inserimento di caratteri in uno o più campi di input e con un pulsante di invio. Quando
l’utente clicca su tale pulsante, i parametri inseriti vengono inviati dal browser al
Web Server, che richiama il codice PHP delegato alla loro elaborazione.
Tutto il codice deputato all’elaborazione delle pagine è scritto all’interno dei
metodi definiti dalla classe base “tpl” (vedasi figura 3.3), la cui implementazione
effettiva dipende dal contesto.
Nel caso più generico, l’algoritmo seguito dalla Web application è il seguente:
1. Legge i parametri inviati dall’utente tramite un link o un form;
2. Controlla che l’utente abbia i permessi necessari ad eseguire l’operazione richiesta. Se è cosı̀ prosegue, altrimenti mostra un messaggio di avvertimento e
termina l’esecuzione;
3. Se è richiesta una lettura da database:
(a) Crea la query in SQL per interrogare il DBMS;
(b) Esegue la query;
(c) Se il database ha restituito dei risultati, li formatta in codice HTML per
presentarli e termina l’esecuzione;
(d) Se il database non ha restituito risultati, genera un messaggio di errore;
4. Se è richiesto l’inserimento di nuovi dati nel database:
55
3 – L’interfaccia Web
(a) Controlla che i campi siano stati compilati correttamente. Se non è cosı̀ ripresenta la pagina per permettere all’utente di modificare le informazioni,
altrimenti prosegue;
(b) Crea la query in SQL per richiedere un inserimento al DBMS;
(c) Esegue la query;
(d) Se non si sono verificati errori, viene presentata una pagina contenente
un messaggio di conferma dell’avvenuto inserimento;
5. Se è richiesta la cancellazione di dati già presenti nel database:
(a) Mostra un messaggio di conferma, per essere sicuri che l’utente abbia
veramente intenzione di cancellare i dati scelti;
(b) Crea la query in SQL per richiedere la cancellazione al DBMS;
(c) Esegue la query;
(d) Se non si sono verificati errori, viene presentata una pagina contenente
un messaggio di conferma dell’avvenuta cancellazione.
3.6.2
PEAR DB, l’interfaccia al database
PEAR sta per PHP Extension and Application Repository ed è una sorta di biblioteca per programmatori PHP che raccoglie e rende disponibili a tutti gli interessati
un’ampia serie di classi e di funzioni che risolvono molti problemi in cui spesso ci si
imbatte durante lo sviluppo di un programma PHP. In questo modo si può disporre
di codice già scritto e testato dalla comunità open source che può essere da subito
integrato nell’applicazione abbreviando notevolmente i tempi.
Tra i vari pacchetti presenti su PEAR è risultato molto utile, ai fini del progetto
ArcheoMap, PEAR DB, un layer di astrazione che consente di accedere ai database
indipendentemente dal DBMS utilizzato. Se è vero che come base di sviluppo di
ArcheoMap si è scelto di utilizzare PostgreSQL, è altresı̀ buona norma cercare di
mantenere il front-end, in altre parole il sito, slegato, per quanto possibile, dall’implementazione del DBMS sottostante. La ragione di ciò è presto detta: se nel futuro
si desiderasse sostituire PostgreSQL con altro prodotto analogo, è meglio poterlo
fare con il minor numero di modifiche possibile. La progettazione a componenti utilizzata lungo tutto lo sviluppo di ArcheoMap è abbastanza modulare da consentire
questo e PEAR DB occupa un ruolo importante.
Dopo aver impostato un file di configurazione in cui vengono scritti alcuni parametri fondamentali per la connessione al DBMS (indirizzo, porta su cui è in ascolto,
username, password, nome del database), si è provveduto a scrivere tutto il codice
delle Web application utilizzando le sole funzioni di PEAR DB per creare e chiudere
56
3 – L’interfaccia Web
connessioni, eseguire query, estrarre i risultati e gestire eventuali messaggi di errore.
Per il suo ruolo di “mediazione”, si può affermare che dal punto di vista progettuale
PEAR DB agisce come un connettore tra la Business Logic e la Data Access Logic.
3.6.3
Gestione della sicurezza
Tra i requisiti di progetto del sito Web di ArcheoMap vi è la richiesta che il contenuto
di una località, quindi il suo diario di scavo, la sua galleria e il suo catalogo di
reperti, sia, qualora ritenuto necessario dal capo progetto, ad accesso riservato: solo
gli utenti assegnati alla località devono poter leggere e inserire articoli, immagini o
reperti. Il problema della sicurezza dei dati si risolve con il garantire l’autenticazione
e l’autorizzazione. Sebbene i due termini siano spesso, impropriamente, considerati
sinonimi, rappresentano in realtà due aspetti ben distinti della questione.
Con “autenticazione” si intende il processo tramite il quale un software verifica
che l’utente con cui sta interagendo sia effettivamente chi egli sostiene di essere. Con
“autorizzazione” si intende invece l’insieme di regole per l’accesso ai dati. Va da sé
che l’autorizzazione può essere perseguita con successo solo dopo che un utente è
stato correttamente autenticato.
Adottando una prassi ormai comune tra i siti Web dinamici che vogliono garantire la riservatezza dei dati, si è scelto di mantenere diviso il software che si occupa
dell’autenticazione dalla parte che si occupa dell’autorizzazione. L’autenticazione
è sostanzialmente affidata ad una coppia username e password : l’utente, prima di
accedere alle parti riservate del sito, deve dimostrare la propria identità scrivendo la
giusta combinazione di username e password riservate. Se il test viene passato con
successo, l’utente è considerato autenticato e può procedere alla fase di autorizzazione: ogni volta che richiede una risorsa, sono consultati i suoi permessi contenuti
nella tabella “autorizzazione” del database e sulla base di questi si decide se consentire o meno l’operazione. L’autenticazione viene quindi fatta una volta soltanto,
mentre l’autorizzazione accompagna ogni accesso ai dati. Prima di vedere come
viene gestita l’autenticazione con ArcheoMap, è necessaria una breve dissertazione
sul protocollo HTTP e sulle sessioni.
Cookie e sessioni
Il protocollo HTTP ha i suoi pregi nella semplicità ed efficenza nella gestione dei
documenti ipertestuali come i file HTML, ma ha il difetto di essere un protocollo
stateless, senza stati. Un protocollo di comunicazione senza stati esegue le singole
operazioni come unità scollegate le une dalle altre, vale a dire che ogni richiesta
viene portata a termine indipendentemente dal risultato delle richieste precedenti.
Per questa ragione il protocollo HTTP non gestisce nativamente l’autenticazione e
57
3 – L’interfaccia Web
l’autorizzazione, perché ad ogni richiesta è impossibile sapere se l’utente si è già
autenticato oppure no.
Per ovviare a questa mancanza, fin dagli albori di Internet è valso l’uso dei
cookie. Un cookie è, nel gergo delle comunicazioni di rete, un piccolo file di testo,
delle dimensioni di pochi byte, che viene creato dal Web Server e memorizzato nel
computer dell’utente tramite il browser. All’interno dei cookie sono scritte poche
informazioni utili al Web Server per tener traccia delle precedenti richieste. Ad
esempio il Web Server, se riconosce la correttezza di username e password di un
utente, crea un cookie in cui scrive un codice di identificazione e lo fa memorizzare
dal browser. Nelle richieste successive il Web Server richiede al browser di inviargli
il contenuto del cookie e se questo corrisponde a quanto atteso si ha la prova che
l’utente è autenticato.
I cookie hanno una scadenza, oltre la quale non sono più considerati validi. Il
periodo di tempo che intercorre tra il momento in cui l’utente fa login e viene autenticato e il momento in cui i cookie scadono prende il nome di “sessione”. Durante
la sessione l’utente viene considerato autenticato e tutte le operazioni svolte sono
sottoposte regolarmente al processo di autorizzazione. Quando la sessione scade
l’utente la deve rinnovare effettuando il login. In questo modo viene creata una
struttura a stati che opera al di sopra di un protocollo senza stati.
Modulo Perl di Apache per l’autenticazione
Il software utilizzato per implementare l’autenticazione in ArcheoMap è Apache mod
perl. Si tratta di un’estensione al Web Server Apache a cui aggiunge un interprete Perl, un linguaggio di scripting che gode molta fama presto gli amministratori
di sistema Linux per la creazione di script di gestione. Apache mod perl consente
al programmatore di creare dei moduli specifici per aggiungere funzionalità direttamente al Web Server. Si è quindi scritto un modulo per far gestire ad Apache
l’autenticazione degli utenti e creare due cookie: in uno è contenuto un codice identificativo che permette di riconoscere il cookie come appartenente ad ArcheoMap, e
un secondo codice che identifica in modo univoco l’utente autenticato. Il modulo è
programmato per entrare in funzione quando si inviano username e password dalla
pagina login.php e svolge le seguenti operazioni:
1. Si connette al database e verifica dalla tabella “utente” se username e password segreta corrispondono;
2. Qualora il test precedente abbia risultato negativo lo script termina con un codice di errore e Apache non processa la richiesta. Dal punto di vista dell’utente,
questi vede il browser tornare alla pagina di login senza venire autenticato;
3. Se il test su username e password è andato a buon fine vengono generati i due
58
3 – L’interfaccia Web
cookie di ArcheoMap di cui si è detto poco sopra. L’utente vede ricaricarsi la
pagina di login ma, al posto del form si trova un messaggio di benvenuto. Da
questo momento ha inizio la sessione e l’autenticazione è effettuata.
Quando l’utente effettua il logout, il Web Server cancella i cookie e la sessione
termina.
Autorizzazione
L’autorizzazione riguarda strettamente il controllo di accesso ai dati e per questo è
distribuita nelle pagine e non centralizzata. Per controllare quale tipo di operazioni
possono essere effettuate e quali no, si fa riferimento alla tabella “autorizzazione” e
alla tabella “permesso” del database. In quest’ultima, in particolare, sono contenuti
i tipi di permesso che è possibile assegnare ad un utente di ArcheoMap:
• scrittura diario: un utente che ha questo tipo di permesso può inserire nuovi
articoli nel diario di scavo;
• lettura diario: un utente che ha questo tipo di permesso può leggere gli
articoli correntemente presenti nel diario di scavo;
• scrittura galleria: un utente che ha questo tipo di permesso può inserire
nuove immagini nella galleria fotografica;
• lettura galleria: un utente che ha questo tipo di permesso può vedere le
immagini correntemente inserite nella galleria;
• capo progetto: un utente che ha questo tipo di permesso ha implicitamente
l’autorizzazione a leggere e scrivere nei diari di scavo e nelle gallerie di tutte
le località che fanno parte del progetto da lui controllato; può creare nuove
località nell’ambito del suo progetto; può creare nuovi progetti; può infine
gestire i permessi degli utenti associati al progetto e delle località che ne fanno
parte;
• direttore scavo: un utente che ha questo tipo di permesso ha implicitamente
l’autorizzazione a leggere e scrivere nei diari di scavo e nelle gallerie della
località da lui controllata; può gestire i permessi degli utenti associati alla sua
località;
Ogni file PHP, nel momento in cui deve processare una pagina, richiama una
funzione di controllo, la procedura “getPerm()”, la quale restituisce un valore booleano, vero o falso. Se l’utente ha il permesso richiesto restituisce “vero”. Altrimenti
restituisce “falso”. Qualora la località in cui si sta navigando sia ad accesso pubblico, la “getPerm()“ restituisce automaticamente “vero” per ogni richiesta di un
59
3 – L’interfaccia Web
permesso di lettura, indipendentemente da chi sia l’utente; restituisce “falso” per le
richieste di scrittura. Il valore ritornato dalla “getPerm()” viene quindi gestito dal
codice PHP che l’ha richiesto per elaborare in modo opportuno la pagina o mostrare
messaggi d’errore nel caso in cui l’accesso non sia consentito.
3.6.4
L’interfaccia multilingua
Il pubblico fruitore di ArcheoMap può essere di qualsiasi nazionalità, non deve quindi
essere legato ad una specifica lingua. Per questo nei requisiti si è richiesto esplicitamente di predisporre l’interfaccia del sito in modo da poterla tradurre facilmente in
altre lingue, oltre all’Italiano.
La soluzione adottata è predisporre dei file di dizionario contenenti la traduzione di ogni etichetta di testo e di ogni bottone dell’interfaccia. Si è creata una
cartella “lang” al cui interno sono tanti file quante sono le lingue in cui è tradotta
l’interfaccia. Ogni file ha un nome che segue la convenzione:
archeo [codice lingua]
Ad esempio il file contenente la traduzione dell’interfaccia in italiano si chiama
“archeo it”; il file con la traduzione dell’interfaccia in inglese si chiama “archeo en”
e cosı̀ via.
All’interno del codice PHP il testo di ogni etichetta, menu e bottone che fa
parte dell’interfaccia è identificato da un codice. Invece di scriverne direttamente il
testo, si richiama la funzione “traduci” che si occupa di cercare nel file corretto la
traduzione dell’etichetta corrispondente al codice.
Per decidere in quale lingua va tradotta l’interfaccia, si seguono due strategie
distinte, a seconda che il visitatore del sito sia un utente registrato oppure un utente anonimo: se l’utente è registrato, nella tabella “utente” è riportato il campo
“lingua” in cui è memorizzata la lingua di appartenenza di una persona e sulla
base del valore di questo campo si usa per la traduzione il file opportuno. Se invece
l’utente è un visitatore anonimo, si usa per default la lingua del browser.
3.7
Le pagine del sito
Viene ora presentata, nel seguito, una carrellata delle principali pagine del sito di
ArcheoMap seguendo un ideale percorso compiuto da un utente che intenda esplorare le potenzialità del progetto. Per ognuna di esse verrà data una descrizione
dell’interfaccia e delle operazioni compiute sul database, qualora ve ne siano.
60
3 – L’interfaccia Web
Figura 3.5.
3.7.1
Schermata della pagina di login
Pagina di login
Da questa pagina, di cui viene data un’immagine nella figura 3.5 è data la possibilità
all’utente di effettuare il login, ossia di farsi riconoscere dal sistema e acquisire le
credenziali necessarie per navigare nelle altre pagine del sito. Il modello utilizzato
è, naturalmente, il template “tpl” adoperato per tutte le altre pagine, ma in questa
non sono presenti menu laterali. Questo significa che i metodi “pannello sx()”
e “pannello dx()” sono ridefiniti vuoti, non disegnano nulla. La grafica è molto semplice: in centro è presentato un form composto da due campi di testo in
cui l’utente che intende loggarsi scrive il proprio username e la propria password.
Quando l’utente preme il bottone “Login” i dati sono spediti al Web Server Apache e intercettati, come descritto nella sezione 3.6.3 dal modulo Perl. Se l’utente
è riconosciuto, viene impostata la sessione, memorizzati i cookie e infine mostrato
un messaggio di benvenuto all’utente, che da ora in avanti può proseguire con la
navigazione. Altrimenti viene mostrato un messaggio di errore.
61
3 – L’interfaccia Web
3.7.2
Elenco dei progetti
La pagina progetti.php, mostrata nella figura 3.6 permette di accedere all’elenco
Figura 3.6.
Schermata della pagina con l’elenco dei progetti
dei progetti e delle località ospitati nel database di ArcheoMap. Il pannello di destra
è vuoto, mentre nel pannello di sinistra è mostrato un menu “Crea nuovo progetto”
da cui un utente con i privilegi di capo progetto può creare un nuovo progetto da
inserire in ArcheoMap. Tale menu non viene fatto comparire qualora l’utente non
abbia i permessi sufficienti. Nella parte centrale della pagina è mostrato il contenuto,
in forma tabellare. La tabella viene generata dinamicamente quando si fa richiesta
di caricare la pagina: il codice PHP del metodo “pannello centro()” esegue una
query in SQL sulle tabelle “progetto“ e “località” del database per recuperare
l’elenco di tutti i progetti e, per ognuno di essi, di tutte le località, gestite al momento
da ArcheoMap.
La tabella è organizzata in tre colonne: nella colonna di sinistra è il nome del
progetto; nella colonna di centro è una breve descrizione e l’elenco delle località che
ne fanno parte; nella colonna di destra infine sono mostrati dei pulsanti con funzione
amministrativa per cancellare un progetto o per modificarne i dati associati, anche
62
3 – L’interfaccia Web
questi attivati solo per utenti che hanno permesso di capo progetto. Le località che
sono ad accesso riservato sono indicate da una piccola icona di un lucchetto (nell’esempio Pompei). I nomi dei progetti e delle località celano dei link parametrizzati:
l’utente, cliccando su di essi, viene rediretto ad una pagina contenente i dettagli per
l’elemento scelto.
3.7.3
Dettagli della località
Dalla pagina riportata nella figura 3.7 si leggono le informazioni relative ad una
località, e che sono contenute nella tabella “località” del database.
Figura 3.7.
Schermata della pagina con i dettagli di una località
La grafica di questa pagina sfrutta tutte e tre i pannelli messi a disposizione
dal template. Nel pannello di sinistra vi è il menu principale: nella parte alta i
link per accedere alle sezioni con l’elenco dei reperti, il diario di scavo e la galleria
fotografica. Seguono poi dei link a carattere amministrativo, che sono nascosti ai
normali utenti, e visibili solo per capo progetto e direttore scavo: un link per la
gestione del personale impiegato nella località, e due bottoni “Cancella” e “Modifica”
per cancellare la località oppure per modificarne le informazioni associate.
63
3 – L’interfaccia Web
Un bottone al fondo della colonna di sinistra permette di scegliere se la località
deve essere esportata sul palmare dell’utente oppure no. Il testo del bottone cambia
sulla base dello stato corrente: se la località è già selezionata per l’esportazione
su palmare (come è il caso dell’esempio in figura) allora il bottone permette di
disabilitare tale opzione; viceversa, se la località non è scelta per l’esportazione, il
testo del bottone cambia per consentire all’utente di abilitarla. Quando il bottone
viene premuto il codice della Web Application in esecuzione sul server scrive (o
cancella) un record dalla tabella “esportazione” del database e ricarica la pagina
per riflettere le modifiche apportate.
Il pannello di centro mostra il contenuto in forma tabellare. Nella colonna di
sinistra sono i nomi dei singoli campi e nella colonna di destra le informazioni vere
e proprie. Per la generazione dinamica di questa tabella il codice PHP attivato al
momento del caricamento della pagina prende i parametri passati nel link (visibili
nella barra degli indirizzi del browser ) e in base a questi crea una query per interrogare il database sulla località scelta. I campi sono quindi formattati in HTML per
visualizzare i dati cosı̀ come mostrato nella figura.
Infine il pannello di destra mostra una struttura ad albero che indica visivamente
all’utente in quale progetto e in quale località si trova attualmente. Il progetto e la
località attuali sono scritti in blu scuro su fondo azzurro, mentre le rimanenti sono
scritte in bianco su sfondo azzurro.
Pressoché identica è la pagina che mostra i dettagli per il progetto, su cui perciò
non ci si soffermerà oltre.
3.7.4
Inserimento di una nuova località
L’operazione di inserimento di una nuova località in un progetto è riservata ai soli
utenti che hanno privilegi di capo progetto per il progetto in cui la nuova località va
inserita. Se questo requisito è soddisfatto, dalla pagina con i dettagli del progetto c’è
un pulsante “Nuova località” che apre la schermata di figura 3.8 da dove è possibile
effettuare l’inserimento.
Lo spazio della pagina è dominato da un lungo form da compilare, costituito
da un elenco di campi di testo al cui interno si devono inserire le informazioni
richieste dalle etichette a fianco. In rosso sono segnalati i campi obbligatori. Al
fondo del form, non visibile nell’immagine per questioni di spazio, c’è il bottone che
scatena l’evento di inserimento. Quando questo bottone viene premuto, i dati del
form sono inviati al Web Server, il quale esegue il codice PHP contenuto nella Web
application. Viene costruita una query di inserimento che aggiunge un nuovo record
nella tabella “località”. Se l’inserimento è andato a buon fine e non si generano
errori, la località viene inserita nel database e collegata al progetto corrente. Poichè
è obbligatorio che una località abbia un proprio direttore scavo (vedasi figura 2.20:
la relazione “direzione” è a partecipazione obbligatoria), di default viene assegnato
64
3 – L’interfaccia Web
come direttore scavo lo stesso capo progetto. Starà poi a quest’ultimo, se lo ritiene
necessario, andare nella pagina di gestione degli utenti e assegnare un nuovo direttore
scavo.
Figura 3.8.
3.7.5
Schermata della pagina per la creazione di una nuova località
Diario si scavo
Se alla pagina dei dettagli della località si clicca sul link “Diario di scavo” la pagina
che viene mostrata è quella di figura 3.9. Qui è possibile leggere il diario di scavo
scritto mano a mano dagli utenti che collaborano alla località. Nel menu di sinistra
sono mostrati dei link che consentono di spostarsi verso le altre sezioni di interesse
o di ritornare alla località, e un bottone per inserire una nuova nota al diario. Nel
menu di destra è mostrato lo schema ad albero del sito e un form che consente di
ricercare termini nel testo degli articoli.
Nella parte centrale sono elencati gli articoli contenuti nel diario di scavo al
momento. Per ottenere questo elenco il codice PHP genera una query che prende dal link parametrizzato l’identificatore della località corrente (parametro “loc”
nella barra degli indirizzi) e ne usa il valore come chiave di ricerca nella tabella
“articolo”. Vengono estratti tutti gli articoli che fanno riferimento alla località
65
3 – L’interfaccia Web
Figura 3.9.
Schermata della pagina del diario di scavo
indicata e ordinati per data. Il risultato della query viene formattato come si vede
nell’immagine e presentato all’utente.
3.7.6
Inserimento nuovo articolo
Se l’utente preme sul pulsante “Nuova Nota” accede alla pagina mostrata nella figura
3.10 da cui può inserire un nuovo articolo nel diario di scavo.
Nella parte sinistra è presente il consueto menu di navigazione, che permette di
spostarsi verso altre sezioni del sito: elenco dei reperti, diario di scavo e galleria
fotografica.
Nella parte destra, sopra la struttura ad albero che indica la posizione corrente
all’interno del sito, è disposto un elenco di link utili per la gestione degli articoli di
diario inseriti da un singolo utente: “Upload” consente di caricare un file di testo
da utilizzare come allegato dell’articolo; “Ultime note visibili” permette di caricare
l’elenco degli ultimi articoli resi visibili dall’utente; “Note non visibili” permette di
caricare l’elenco degli ultimi articoli resi non visibili dall’utente; “Note eliminate”
66
3 – L’interfaccia Web
Figura 3.10.
Schermata della pagina per l’inserimento di un nuovo articolo di diario
mostra l’elenco degli ultimi articoli cancellati dall’utente ed eventualmente di ripristinarli. Infatti, per motivi di sicurezza e conservazione dei dati, gli articoli eliminati
dal diario non vengono materialmente cancellati dal database ma sono contrassegnati
con un flag e non più visualizzati. Infine, il link “Abbreviazioni da tastiera” visualizza
un breve help in linea in cui è mostrato il legame tra le funzioni della pagina e una
scorciatoia da tastiera per velocizzarne l’uso.
Al centro della pagina, il contenuto è rappresentato dal form per l’inserimento
della nuova nota. L’utente può inserire il titolo e il corpo dell’articolo nei due campi
di testo al centro. Il campo con il nome dell’autore è automaticamente precompilato
con il nome dell’utente corrente. Per rendere l’interfaccia il più famigliare possibile
agli utenti, si è modellato l’aspetto del form cosı̀ da assomigliare agli editor di testo di
comune utilizzo sui PC, con i loro formalismi grafici ormai riconosciuti per accedere
alle funzioni implementate:
• Il correttore ortografico: utilizza il dizionario multilingue open source myspell
per trovare eventuali errori di battitura nel testo ed evidenziarli;
• Pulsanti per cambiare l’aspetto di una parte del testo mettendolo in corsivo
67
3 – L’interfaccia Web
oppure in grassetto;
• Pulsanti per cambiare la formattazione del testo: allineamento a sinistra,
allineamento a destra, centrato oppure giustificato;
• Pulsanti per salvare l’articolo corrente, per cancellarlo o per effettuare ricerche.
Un checkbox al fondo della pagina permette all’autore di decidere se l’articolo deve
essere visibile a tutti oppure no dopo averlo salvato.
Quando l’utente preme il bottone a forma di dischetto per salvare la nota appena
inserita, il contenuto del form viene inviato al Web Server e da questo al codice PHP
della pagina che si occupa di generare una query per l’inserimento nella tabella
“articolo”.
3.7.7
Galleria fotografica
Dalla pagina “galleria.php” si accede alla galleria fotografica associata alla località, che si presenta come in figura 3.11.
Figura 3.11.
Schermata della pagina con la galleria fotografica
68
3 – L’interfaccia Web
I pannelli di sinistra e di destra ospitano, come nel resto del sito, i menu contestuali per la navigazione e l’accesso alla funzione di inserimento di una nuova
immagine. Il contenuto è l’insieme di miniature delle immagini della galleria, organizzate in una griglia. Per generare la pagina, il codice PHP esegue una query
che seleziona, tra tutte le immagini presenti nella tabella “immagine”, quelle che
corrispondono alla località corrente, genera le miniature se ancora non esistono, e
crea l’interfaccia. Ogni miniatura nasconde un link parametrizzato che, se cliccato,
apre la pagina con i dettagli dell’immagine.
3.7.8
Dettagli immagine
Se l’utente decide di visualizzare i dettagli di un’immagine, clicca sulla miniatura
corrispondente nella galleria e gli viene aperta una pagina simile a quella di figura
3.12
Figura 3.12.
Schermata della pagina con i dettagli dell’immagine
Al centro viene presentata l’immagine selezionata, con sotto il nome del file e la
descrizione. Se l’utente desidera visualizzare l’immagine in una dimensione differente, è sufficiente che operi una scelta dal menu a tendina immediatamente sopra alla
69
3 – L’interfaccia Web
foto. Se invece si desidera vedere l’immagine nelle sue dimensioni reali, è sufficiente
cliccare sul link “Vedi originale”. Si fa notare che, al momento dell’inserimento di
una nuova immagine, l’utente ne deve solo specificare il file e la descrizione. Le
miniature e lo scalamento a dimensioni differenti da quella reale sono gestite in toto
dal codice PHP lato server che procede alla creazione dei file necessari la prima volta
che questi vengono richiesti. Inoltre, per venire incontro alle esigenze dei semplici
visitatori, si è inserita una funzione di carrellata che permette di vedere tutte le immagini in sequenza, con l’intervallo tra un’immagine e la successiva programmabile
dall’utente in 2, 4, 6, 8 o 10 secondi.
Nel pannello di sinistra della pagina sono presenti tre pulsanti per l’amministrazione dell’immagine correntemente visualizzata (operazioni di cancellazione e
modifica) oppure per l’inserimento di una nuova. Se l’utente che sta visualizzando
l’immagine corrente non ne è l’autore stesso o non ha i privilegi di capo progetto o
direttore scavo, tale pannello non viene visualizzato.
3.7.9
Elenco dei reperti
Nella figura 3.13 è mostrata la schermata della pagina con l’elenco dei reperti
associati ad una località.
Il contenuto è presentato sotto forma di una tabella a quattro colonne. La prima colonna da sinistra mostra il nome del reperto; la seconda colonna mostra la
data di inserimento; la terza colonna riporta la data di ultima modifica; l’ultima
colonna a destra contiene un pulsante di amministrazione per cancellare il corrispondente reperto. Tale pulsante viene mostrato solo nel caso in cui un utente
abbia effettivamente i privilegi per compiere l’operazione (l’autore del reperto e gli
utenti capo progetto e direttore scavo che hanno come ambito di competenza la
località corrente).
Se un utente clicca sul nome del reperto viene aperta la pagina con i dettagli dello
stesso; se clicca sul link “Inserisci nuovo reperto” apre la pagina per l’inserimento di
un nuovo reperto.
3.7.10
Dettagli reperto
La pagina con i dettagli dei reperti si presenta come in figura 3.14. Il contenuto, a
centro pagina, ne mostra dapprima le informazioni di contorno (nome del reperto,
data di inserimento, autore, coordinate). Questi dati sono prelevati dal database
con una query che seleziona, tra i reperti presenti nella tabella “reperto”, quello
che corrisponde alla chiave di ricerca selezionata.
Subito sotto vengono mostrati, in forma tabellare, i riferimenti a cui il reperto
è legato. La tabella è divisa in quattro colonne: la prima a sinistra dice il tipo di
riferimento (galleria fotografica, nota da diario, scheda ministeriale); nella seconda
70
3 – L’interfaccia Web
Figura 3.13.
Schermata della pagina con l’elenco dei reperti
colonna è posta la data di inserimento del riferimento; la terza colonna porta il
nome del responsabile che ha inserito il reperto; infine l’ultima colonna a destra ha
un pulsante di amministrazione, per la cancellazione del riferimento, se l’utente ha
le credenziali sufficienti.
3.7.11
Gestione dei permessi
L’ultima sezione del sito presa in considerazione è quella che riguarda la gestione
degli utenti. Si tratta di pagine a cui può accedere solamente il personale con
permessi di capo progetto o di direttore scavo. Se dalla pagina con i dettagli della
località (vedi figura 3.7) si clicca sulla voce “Personale” del menu di sinistra, si apre
la schermata riportata nella figura 3.15.
Da questa pagina si vede l’elenco degli utenti che sono al momento associati con
la località corrente. Per ottenere questi dati il codice PHP si connette al database ed effettua una query sulla tabella “autorizzazione” filtrando solo le righe il
cui attributo “idLocalità” corrisponde alla località corrente. Una volta ottenuto
71
3 – L’interfaccia Web
Figura 3.14.
Schermata della pagina con i dettagli di un reperto
l’elenco, viene formattato e presentato nel pannello centrale dei contenuti, sotto forma di una tabella divisa in tre colonne: nelle prime due a partire da sinistra sono
il nome e il cognome dell’utente; nella terza è un campo che indica se l’utente ha
responsabilità di direttore scavo; infine nella quarta colonna più a destra sono due
bottoni per cambiare le impostazioni dei permessi.
Il nome dell’utente è cliccabile e se premuto apre la pagina di figura 3.16 in cui
sono visibili i dettagli dell’utente: il suo nome, cognome, username e lingua; segue
poi una tabella in cui sono riportate le località a cui l’utente è associato e i relativi
permessi.
72
3 – L’interfaccia Web
Figura 3.15.
Schermata della pagina di gestione degli utenti
73
3 – L’interfaccia Web
Figura 3.16.
Schermata della pagina con i dettagli sui permessi utente
74
Capitolo 4
Gestione delle mappe
4.1
Introduzione ai sitemi GIS e al Web mapping
Una mappa è un modello bidimensionale della superficie terrestre che cerca di riportare nel modo più fedele possibile la posizione e la distanza relativa nello spazio di
elementi geografici e urbanistici. Le mappe hanno sempre giocato un ruolo di primo
piano nelle attività umane, fin da tempi antichissimi. I primi tentativi di disegnare
una mappa risalgono addirittura al 6500 a.C. (mappa di Chatalhöyük in Turchia),
vale a dire ben 3000 anni prima dell’avvento della scrittura.
Sebbene indispensabili in più di un’occasione, le tradizionali mappe cartacee
presentano alcuni limiti:
1. Sono scomode da utilizzare: per poter offrire una rappresentazione accurata
di un’estensione geografica sono necessari fogli di grandi dimensioni che non
sono facili da maneggiare;
2. Non sono aggiornabili: l’attività umana porta alla continua modifica dell’ambiente tramite la creazione, per esempio, di nuove strade, nuovi incroci, nuove
strutture abitative, etc. L’unico modo per tener traccia di questi cambiamenti
è l’acquisto di una nuova mappa;
3. Non permettono di selezionare il tipo di informazione a cui si è interessati: la
mappa riporta costantemente tutte le informazioni disponibili senza la possibilità di visualizzarne temporaneamente solo alcune per una maggior facilità
di consultazione.
Questi limiti sono facilmente superati dalle mappe digitali consultabili via Internet dal browser del proprio PC: mettono infatti a disposizione un metodo conveniente ed efficiente di rappresentazione dei dati geografici, che ne rendono immediata
la fruibilità e consentono la creazione di nuovi servizi. È il caso di ArcheoMap, in
75
4 – Gestione delle mappe
cui si è sviluppato un sistema per visualizzare, in tempo reale, su una mappa, la
dislocazione delle località e dei reperti memorizzati nel database.
Per realizzare una mappa digitale sono necessari due tipi di risorse: la mappa
vera e propria, ossia la collezione di dati geografici che descrivono il territorio e le sue
componenti; e un software che sia in grado di presentare all’utente la mappa in un
formato grafico e ne permetta un qualche tipo di interazione. Vista la complessità
della materia, di seguito verranno date alcune definizioni e accennati aspetti utili a
comprendere la gestione delle mappe e i servizi associati.
4.1.1
Formati digitali delle mappe
Le informazioni geografiche digitali si dividono in due famiglie: dati vettoriali e dati
raster. I dati vettoriali rappresentano gli oggetti geometrici da cui è formata la mappa come l’elenco dei punti che li definiscono e relative coordinate. Questo significa
che una mappa memorizzata in formato vettoriale è come un complesso poligono,
di cui sono forniti i punti, ad ognuno dei quali corrispondono delle coordinate per
la georeferenziazione1 .
I dati raster, diversamente, sono delle immagini aeree del territorio. Per poter
far corrispondere a queste immagini una posizione geografica, sono accompagnate da
informazioni aggiuntive che collegano i bordi dell’immagine alle coordinate spaziali.
Solitamente in formato vettoriale sono le mappe stradali e le mappe geopolitiche
dei confini nazionali e comunali, perché facilmente riconducibili ai concetti geometrici di linea e segmento. In formato raster sono invece le immagini satellitari o
le mappe dei rilievi montuosi perché richiedono una resa grafica ricca di sfumature
di colore e di dettagli dalle forme troppo complesse per poter essere riprodotte con
punti e linee.
4.1.2
Gestori delle mappe
I software di gestione delle mappe hanno lo scopo di leggere le mappe digitali e
renderizzarle in un’immagine che visualizzi su schermo la cartina geografica trattandone adeguatamente le informazioni spaziali. Ad esempio, se l’utente clicca su
un punto della mappa a schermo, il software è in grado di dire a quale coordinata geografica corrisponde, effettuando cioè la georeferenziazione. Una caratteristica
propria dei software di gestione per le mappe digitali è quella di poter visualizzare contemporaneamente mappe riportanti informazioni diverse. Ad esempio, se si
hanno tre mappe vettoriali dell’Italia, di cui una con i confini regionali, una con il
tracciato delle strade e una con il tracciato dei fiumi, e una mappa raster con le
1
La georeferenziazione in generale è una procedura che permette di assegnare le coordinate
standard (secondo una data proiezione) ai punti di un’immagine
76
4 – Gestione delle mappe
immagini satellitari del Paese, è possibile visualizzarle assieme (sovrapponendo le
immagini satellitari con i tracciati stradali) oppure selezionare quali vedere in un
dato momento. Si realizza cioè la selettività delle informazioni.
4.1.3
GIS e Web Mapping
Le mappe digitali si prestano alla creazione di molteplici servizi su base geografica
tra cui quelli di maggior interesse ai fini del progetto ArcheoMap sono i sistemi GIS
e il Web Mapping.
Con il termine GIS (acronimo di Geographical Information System) si intende
un sistema software per l’acquisizione, memorizzazione, estrazione, trasformazione
e visualizzazione di dati spaziali dal mondo reale. Si tratta quindi di un sistema in
grado di produrre e gestire dati spaziali associando a ciascun elemento geografico
una o più descrizioni. L’obiettivo di un sistema GIS è di consentire all’utente di
cercare informazioni spaziali che possano essere utili per lo svolgimento di attività
lavorative o private e di visualizzarle selettivamente su di una mappa. Un sistema
GIS è formato pertanto da un gestore di mappe che sia in grado di interfacciarsi
ad un database: nella base dati vengono catalogate le informazioni che si vogliono
descrivere e georeferenziare; quando si effettuano delle ricerche, il sistema colloca
sulla mappa dei marcatori che contrassegnano la posizione nello spazio dei dati
memorizzati nel database.
Per Web Mapping si intende, infine, un servizio di fruizione delle mappe da
remoto sulla rete Internet. Lo scopo è quello di pubblicare e rendere fruibili sulla rete
informazioni a carattere geografico, garantendone l’accesso tramite uno strumento
ben conosciuto, il browser, e senza bisogno di installare software aggiuntivi. Viene
realizzato per mezzo di un gestore di mappe che è in grado di interfacciarsi ad un Web
Server : l’utente, dal suo browser, fa richiesta di una pagina Web su cui è disegnata
la mappa e può interagire con essa. Tutte le richieste riguardanti la mappa sono
prima inviate al Web Server, il quale le gira al gestore delle mappe per l’elaborazione
e la generazione della risposta. Il tutto avviene in modo trasparente all’utente finale
il quale dalla sua postazione di lavoro vede semplicemente il ricaricamento della
pagina con la mappa ridisegnata.
4.2
Requisiti del sistema di Web Mapping
L’obiettivo è quello di creare per ArcheoMap un sistema informativo che consenta
di visualizzare su una mappa la dislocazione delle località e dei reperti inseriti nel
database e di renderle disponibili ad utenti remoti che si connettano ad un Web
Server. Si vuole quindi realizzare un sistema GIS e contemporaneamente un servizio
di Web Mapping.
77
4 – Gestione delle mappe
L’utente deve visualizzare la mappa all’interno di una pagina Web e poter interagire con essa tramite un pannello di comandi. Si richiede di implementare almeno le
principali funzioni di zoom (ingrandimento della mappa), pan (scorrimento) e scelta
di layer (selettività delle informazioni).
Nel seguito del capitolo si descriveranno le soluzioni proposte per ottemperare
ai requisiti, gli strumenti utilizzati e verranno infine mostrate alcune immagini di
esempio per illustrare il funzionamento del prodotto finale.
4.3
Il gestore di mappe: MapServer
In ambito Open source il miglior software che consente la gestione delle mappe e
la realizzazione di un sistema di Web Mapping è MapServer. Realizzato presso
l’Università del Minnesota in collaborazione con la NASA, viene mantenuto oggi da
una comunità di sviluppatori sparsi in tutto il mondo e impiegato in una pluralità
di progetti che puntano ad offrire servizi via Web su base geografica.
L’obiettivo di MapServer è quello di fornire uno strumento per gestire e pubblicare mappe via Web, ma non è, per scelta degli autori, un sistema GIS in quanto
non prevede strutture integrate per la connessione ai database e dispone di limitate
capacità analitiche sui dati. Tuttavia le funzioni di MapServer sono rese disponibili
tramite un’API2 per vari linguaggi di programmazione, tra cui il PHP: è quindi
possibile creare applicazioni che si connettano ai database ed operino in modo complesso sui dati, sfruttando il motore di gestione delle mappe di MapServer per la
rappresentazione spaziale.
Nella figura 4.1 è illustrato il modo in cui lavora MapServer e come interagisce
con il Web Server. L’utente dal suo browser vede una pagina web che contiene
un’immagine della mappa, su cui può effettuare delle operazioni tramite un apposito
pannello di controllo posto nella stessa pagina. Quando viene effettuata una delle
operazioni previste, si scatena una richiesta al Web Server che attiva il seguente
processo:
1. Il Web Server riconosce, tra i parametri inviatigli dal browser dell’utente,
la richiesta di una funzione di aggiornamento della mappa e la inoltra a
MapServer;
2. MapServer legge dal disco i dati geografici in formato vettoriale o raster che
sono contenuti in opportuni file e genera la mappa come un’immagine, cosı̀ da
essere facilmente comprensibile per i browser;
2
API, Application Programming Interface, nell’ambito della scrittura di un software è uno
strumento fornito ai programmatori che rende disponibili un insieme di procedure per utilizzare le
funzioni messe a disposizione da un sistema o da un altro software
78
4 – Gestione delle mappe
Figura 4.1.
Schema di funzionamento di MapServer
3. L’immagine della mappa viene spedita al Web Server, il quale la include nella
pagina HTML generata e la restituisce al browser dell’utente.
La costruzione delle mappe in MapServer avviene gerarchicamente secondo il
concetto di layer. Ogni mappa è il prodotto della sovrapposizione di più layer,
ossia di livelli di informazione, ognuno contenente un insieme di dati omogenei che
devono essere rappresentati insieme. La visualizzazione dei layer è sotto il controllo
attivo dell’utente, che può scegliere quale visualizzare. Durante la generazione della
mappa, inoltre, MapServer può svolgere autonomamente determinate operazioni
come la visualizzazione delle etichette di testo, con la possibilità di non mostrare le
etichette al di sotto di un certo fattore di ingrandimento per evitare di sovraffollare
la mappa; può generare autonomamente la legenda e l’indicatore del fattore di scala;
può infine generare una piccola mappa secondaria di riferimento che mostra quale
parte della mappa generale si sta visualizzando nell’immagine principale.
Il numero e il tipo di layer che devono essere gestiti da MapServer e la scelta
di quali opzioni attivare viene controllata da un particolare file di configurazione
avente estensione .map (mapfile) che controlla il funzionamento del programma.
4.3.1
Il mapfile
Il mapfile è un file di testo che MapServer utilizza per determinare l’aspetto della
mappa e il modo in cui deve comportarsi quando gli giungono richieste dal Web
Server.
Il mapfile si presenta come una collezione di oggetti strutturati gerarchicamente,
79
4 – Gestione delle mappe
la cui definizione inizia con una parola chiave che identifica il tipo di oggetto e
termina con l’istruzione “end”. All’interno di un oggetto possono venir elencati dei
parametri (espressi come coppie nome / valore), oppure altri oggetti, il cui ambito
di valenza è ristretto all’oggetto che li include, da cui sono dipendenti. Un esempio
di sintassi di un mapfile è questo:
oggetto1
parametro1 valore
parametro2 valore
...
oggetto1.1
parametro valore
...
end
end
oggetto2
parametro1 valore
parametro2 valore
...
end
Si definiscono tre oggetti “oggetto1”, “oggetto2“ e “oggetto1.1”, di cui i primi
due sono indipendenti, e il terzo è figlio del primo, in quanto dichiarato al suo
interno, e viene perciò processato solo quando è processato oggetto1.
Gli oggetti definiti all’interno del mapfile non sono a discrezione dell’utente ma
devono rispettare una ben determinata nomenclatura e gerarchia riconosciute da
MapServer. Nella figura 4.2 sono illustrati in uno schema i principali oggetti predefiniti da MapServer e la loro organizzazione gerarchica, cosı̀ come va rispettata nel
mapfile.
Come si può vedere, alla testa di tutto è l’oggetto “map” che fa da contenitore
per tutti gli altri oggetti. Ciò che viene dichiarato al di fuori di esso è ignorato da
MapServer. Al suo interno vengono definiti i parametri generali della mappa che si
vuole disegnare, indicandone in particolare il formato di output (immagine di tipo
jpg, gif o png), la dimensione, in pixel, dell’immagine, il colore di sfondo, l’unità di
misura adottata e la directory in cui MapServer deve cercare i file di dati contenenti
le informazioni sulla mappa.
L’oggetto “layer” definisce le caratteristiche di ogni singolo livello di informazione di cui è composta la mappa. In un mapfile devono quindi essere dichiarati
tanti oggetti “layer” quanti sono i livelli. Ogni layer è caratterizzato da un nome,
da un tipo di dato (poligoni o punti nel caso di dati vettoriali, raster per immagini
aeree o satellitari), da un’etichetta che lo identifica nella legenda e da un parametro
80
4 – Gestione delle mappe
Figura 4.2.
Schema gerarchico degli oggetti definiti in MapServer
che indica se il layer è attivo oppure no, altrimenti detto, se deve essere visualizzato
automaticamente oppure solo su richiesta. Le informazioni di ogni layer sono memorizzate in un file dedicato, il cui nome viene indicato a MapServer da un opportuno
parametro.
Per definire le specifiche di visualizzazione di un layer in termini di colore di
sfondo, colore dei bordi, dimensioni e stile del font in cui vanno scritte le etichette si
fa uso dell’oggetto “class”. Ogni layer può avere più oggetti “class” definiti al suo
interno, l’importante è che ve ne sia almeno uno. Il motivo per cui MapServer consente la definizione di più oggetti “class” è di poter applicare, selettivamente, stili
di visualizzazione differenti ai dati memorizzati nei singoli file. Ad esempio, nel caso
di una mappa geopolitica dell’Italia, è possibile assegnare ad ogni regione un colore
differente. Per specificare a quali dati si applica un determinato oggetto “class”
si usa il parametro “expression” il quale prende come argomento un’espressione
logica che seleziona i dati contenuti nel file del layer ; qualora tale espressione sia
soddisfatta viene applicato su tali dati lo stile descritto nell’oggetto “class”.
L’oggetto “web” specifica il template che deve essere usato per la generazione
81
4 – Gestione delle mappe
della pagina Web contenente la presentazione della mappa e dei risultati della ricerca. Sono inoltre esplicitati il percorso in cui MapServer deve salvare le immagini
temporanee create durante il lavoro di processamento.
Con l’oggetto “scalebar” si definiscono le caratteristiche dell’indicatore di scala
della mappa, che si presenta nella forma di un righello graduato. Se ne possono
dettagliare la posizione, il colore, lo stile delle etichette, le dimensioni in pixel, l’unità
di misura e l’intervallo che separa una tacca dall’altra.
L’oggetto “legend” abilita MapServer a disegnare automaticamente la legenda,
un semplice specchietto informativo che associa ai colori della mappa una breve
descrizione del loro significato;
Infine l’oggetto “reference” crea una seconda piccola immagine di riferimento
che permette all’utente di sapere dove si trova sulla mappa generale nel caso in
cui abbia effettuato degli ingrandimenti sull’immagine principale. Della reference
possono essere definiti il colore della mappa, il colore del bordo e la dimensione.
Nell’appendice 9.2 è riportato il mapfile adottato per il progetto ArcheoMap.
Per la creazione della versione dimostrativa si è utilizzata una mappa dell’Italia che
consente di visualizzare: il tracciato dei confini nazionali; i principali corsi d’acqua
e laghi; le principali arterie stradali e la posizione delle maggiori città. Un layer di
tipo raster consente inoltre di sovrapporre delle immagini aeree che mostrano l’andamento dei rilievi montuosi. Come formato di output si è scelto, per il buon rapporto
qualità / dimensione, il formato PNG. Indicatore di scala, legenda e reference map
sono fatti gestire in automatico da MapServer.
4.3.2
I layer di ArcheoMap
Tra i layer definiti nel mapfile di ArcheoMap ve ne sono due su cui è necessario
soffermarsi: il layer “archeo-loc”, contenente i punti di georeferenziazione delle
località di ArcheoMap, e il layer “archeo-reperti”, contenente l’insieme dei punti
di georeferenziazione dei reperti di ArcheoMap.
Ciò che rende particolari questi due layer è che i file in cui sono memorizzati
i loro dati sono creati e modificati dinamicamente dal codice PHP delle pagine di
gestione delle località e dei reperti ogni qual volta vengano creati o cancellati dei
record nelle tabelle “località”e “reperti” del database.
Il formato dei file è “GML”: si tratta di un formato vettoriale in cui viene descritta una collezione di punti utilizzando il formalismo XML: ogni punto è definito
da dei marcatori, detti più propriamente tag, che specificano le singole proprietà di
un dato. La sintassi definita nel GML per la dichiarazione di un punto è la seguente:
<punti fid="1">
<ID>10</ID>
<NAME>Nome della localita’</NAME>
82
4 – Gestione delle mappe
<ogr:geometryProperty>
<gml:Point>
<gml:coordinates>012.99,41.74</gml:coordinates>
</gml:Point>
</ogr:geometryProperty>
</punti>
Il tag <punti> indica che sta iniziando la definizione di un punto; il tag <id>
specifica un identificativo del punto, e il tag <name> gli assegna un nome. Seguono
poi la descrizione dell’elemento geometrico e le coordinate geografiche di riferimento.
Uno script, lanciato in automatico, provvede ad interrogare il database alla ricerca di tutte le località e i reperti di cui è stata specificata la posizione tramite
coordinate. Per ognuno di questi punti viene quindi ripetuta la sequenza di tag
appena vista.
Una volta completata la compilazione del file, questo viene tradotto nel formato
“Shapefile”3 , specificamente pensato per la memorizzazione di informazioni geografiche vettoriali, e gestito da MapServer. In questo modo le località e i reperti del
database di ArcheoMap possono comparire nella cartina geografica digitale, come
richiesto dai requisiti.
4.3.3
PHP/MapScript
PHP/MapScript è un’insieme di funzioni e di classi che permettono al programmatore di accedere alle funzionalità di MapServer da script in PHP: si adatta perfettamente, quindi, alle esigenze del progetto ArcheoMap in quanto consente di integrare
le mappe generate da MapServer all’interno delle pagine Web del sito che, come
descritto nella sezione 3.4 sono scritte in tale linguaggio. Inoltre, sfruttando le potenzialità messe a disposizione da PEAR DB (vedi sezione 3.6.2) diventa possibile
accedere al database per la ricerca e gestione di dati geografici e quindi trasformare
MapServer in un vero e proprio sistema GIS.
L’infrastruttura di PHP/MapScript è costituita da un insieme di classi che ricalcano gli oggetti definiti da MapServer per i mapfile. Ad esempio, è definita una
classe “MapObj” che permette di trattare gli oggetti “map”, una classe “LayerObj”
per trattare gli oggetti “layer”, una classe “ReferenceObj” per trattare gli oggetti
“reference”, etc. Nella figura 4.3 viene dato uno schema grafico di alcune di queste
classi; si tratta di uno schema incompleto, il cui unico scopo è di meglio chiarire come sono strutturate, perché nella realtà gli attributi e i metodi definiti per ciascuna
classe sono molto più numerosi e consentono di modificare ogni singolo aspetto delle
mappe generate da MapServer. È possibile, ad esempio, cambiare dinamicamente il
3
Shapefile è il nome di un formato di dati vettoriale inventato dalla ESRI (Enviromental System
Research Insitute) divenuto uno standard per la diffusione di dati geografici
83
4 – Gestione delle mappe
MapObj
LayerObj
−width
ReferenceMapObj
−extente
−status
−name
−data
−units
−labelitem
+draw()
+draw()
+getLayer()
+queryByPoint()
−height
−imagetype
−width
−heigth
−color
+set()
+setExtent()
Figura 4.3.
Schema grafico di alcune classi di PHP/MapScript
colore di un layer della mappa, cambiare lo stile delle etichette, etc. Tutte cose non
possibili con il semplice mapfile in quanto il suo contenuto è statico e predeterminato
al momento della creazione.
Con l’inclusione di PHP/MapScript il processo di gestione delle mappe cambia
leggermente rispetto a quanto visto nella sezione precedente e diventa come illustrato nella figura 4.4: la richiesta proveniente dal browser dell’utente al Web Server
Figura 4.4.
Schema di funzionamento di PHP/MapScript
non viene immediatamente rediretta a MapServer ma passa prima dall’interprete
84
4 – Gestione delle mappe
PHP, il quale, tramite le funzioni di PHP/MapScript, interroga MapServer per l’elaborazione della mappa. I risultati sono quindi inglobati in una pagina PHP per
la formattazione in HTML e solo allora passati al Web Server che invia la risposta
all’utente. Oltre ad esserci un passaggio in più rispetto al modello della figura 4.1, la
vera novità è costituita dal database, a cui lo script PHP può accedere per integrare
le funzionalità di cartografia e georeferenziazione con le funzionalità di ricerca sui
dati.
Ogni operazione effettuata sulla mappa comporta una o più chiamate a procedure
di PHP/MapScript per processare e disegnare la cartina geografica. In termini
progettuali PHP/MapScript modifica lo stato corrente della mappa, definito da un
insieme di parametri quali: la sua estensione; le coordinate dell’area correntemente
visualizzata; il livello di zoom e l’elenco dei layer attivati. Quando l’utente esegue
un’operazione va a cambiare uno di questi parametri, lasciando gli altri immutati.
PHP/MapScript si occupa quindi di volta in volta di ricordare lo stato precedente e
riprodurlo ad ogni nuova richiesta variandone l’unico parametro che è effettivamente
cambiato.
4.4
MapServer integrato nel sito di ArcheoMap
Una volta descritte le proprietà di MapServer, i concetti fondamentali che stanno
dietro alla sua filosofia di funzionamento e come li si è usati per personalizzare la
mappa, si propone una carrellata di immagini che testimoniano come MapServer sia
stato integrato nel sito di ArcheoMap e quali sono le operazioni che un utente può
effettuare.
Quando si apre la pagina delle mappe, la schermata di fronte a cui si trova
l’utilizzatore è quella di figura 4.5. Lo stile della pagina segue lo schema a tre colonne
utilizzato per tutto il resto del sito: nel pannello a sinistra si trova la reference map
e la legenda; nel pannello a destra si trova il “centro di comando” con i pulsanti da
cui si possono accedere a varie operazioni; infine nel centro è posta la mappa con
l’indicatore di scala. Sulla mappa sono mostrati in prima istanza i layer dei confini
geografici, delle città, delle nazioni, dei laghi e dei siti di ArcheoMap (puntini rossi
sulla cartina).
Se ora l’utente sceglie dal pannello di destra lo strumento “zoomin” e poi punta
con il mouse una zona della mappa, questa viene ingrandita, come mostrato nella
figura 4.6. Si noti come la reference map si modifichi automaticamente per riflettere
l’operazione appena effettuata: un quadratino rosso mostra quale parte della mappa
generale è correntemente visualizzata nell’immagine principale, cosı̀ che l’osservatore
non corra il rischio di perdersi durante la navigazione.
Lo strumento “zoomout” compie l’operazione inversa: dimininuisce il livello di
ingrandimento della mappa fino a riportarla alle condizioni originali.
85
4 – Gestione delle mappe
Figura 4.5.
Schermata iniziale della mappa disegnata da MapServer
Con lo strumento “ricentra” si cambia il punto che è al centro della mappa. Ad
esempio, a partire dalla situazione di figura 4.6, se si punta il mouse sulla città
dell’Aquila si ottiene il risultato di figura 4.7: l’immagine principale si sposta e
inquadra la porzione d’Italia che ha il suo centro sul capoluogo abruzzese, e la
reference map si aggiorna di conseguenza.
Lo strumento “zoombox” permette di effettuare degli ingrandimenti, in modo
analogo a quanto fatto dallo strumento “zoomin” ma, a differenza di questo, invece
di selezionare un singolo punto, viene tracciato per mezzo del mouse un rettangolo
che circoscrive un’intera area su cui deve essere effettuato lo zoom.
Il pulsante “Reset” riporta la mappa alle condizioni originali, quelle di figura 4.5
annullando tutte le operazioni compiute.
Dal pannello di sinistra, come detto, si possono selezionare quali livelli informativi visualizzare. Ad esempio, se si vuole sovrapporre alla mappa il layer raster con
l’immagine dei rilievi montuosi, è sufficiente selezionarlo dal pannello e premere il
bottone “aggiorna”: quello che si ottiene è l’immagine di figura 4.8.
Nel menu intitolato “Informazioni” si dispone di uno strumento per la misura
86
4 – Gestione delle mappe
Figura 4.6.
Schermata della mappa in seguito ad uno zoom
delle distanze e del form di ricerca. Lo strumento con l’icona di un righello consente
di calcolare le distanze tra due punti della mappa. Quello che si ottiene è riportato
in figura 4.9: un segmento di puntini rossi indica i due punti tra cui si è calcolata
la distanza, mentre nel menu in basso a destra ne viene indicato il valore, espresso
in Km. L’operazione di calcolo della distanza non viene effettuata in automatico da
MapServer ma è stata implementata a parte: dapprima si preleva la posizione dei due
punti sull’immagine, poi si calcola a quali coordinate geografiche corrispondono (in
pratica si convertono i punti-immagine in punti-mappa) ed infine, nota l’estensione
della mappa corrente, ne viene computata la distanza.
4.5
Google Maps
“Google Maps” è un servizio di Web Mapping gratuito fornito dal celebre motore
di ricerca Google e messo a servizio del pubblico a partire dalla fine del 2005. Ciò
che ha reso famoso Google Maps rispetto agli altri servizi di Web Mapping presenti
in rete è la disponibilità di un ricco repertorio di foto satellitari ad elevato dettaglio
87
4 – Gestione delle mappe
Figura 4.7.
Schermata della mappa in seguito ad un ricentramento
che consentono di osservare in una sorta di visuale a volo d’uccello molte aree del
pianeta. Le zone della Terra attualmente coperte dalle foto satellitari ad elevato
dettaglio sono limitate, ma tra queste sono comunque comprese le principali aree
abitate degli Stati Uniti, Canada ed Europa più una serie di altri luoghi di interesse
politico o turistico nel resto del mondo. Google sta nel frattempo continuando
l’acquisto di nuove mappe per cui la copertura ad alta definizione aumenta nel
tempo.
Una caratteristica che ha contribuito non poco al successo di questo servizio
di Web Mapping è senza dubbio il rilascio di “Google Maps API”, una libreria di
funzioni che consente agli sviluppatori di integrare le mappe di Google all’interno
di altri siti, previa registrazione gratuita. Google Maps API fa uso della tecnologia
AJAX (Asinchronous Javascript And XML), appositamente pensata per le applicazioni Web interattive, e che trova nel servizio di Web Mapping di Google una delle
più significative forme di utilizzo. Il vantaggio offerto dalla tecnologia AJAX è che,
ad ogni richiesta dell’utente, anzichè ricaricare completamente la pagina con i dati
aggiornati, come avviene nelle applicazioni Web tradizionali, vengono modificate le
88
4 – Gestione delle mappe
Figura 4.8.
Schermata della mappa con i rilievi montuosi
89
4 – Gestione delle mappe
Figura 4.9.
Schermata della mappa in seguito ad una richiesta di calcolo della distanza
sole parti della pagina di cui si ha effettiva necessità, diminuendo cosı̀ la quantità
di dati che deve essere scambiata tra client e server e dando una sensazione di
maggiore reattività all’utente.
Quando Google Maps è divenuto pubblico, nonostante non sia stato rilasciato
con una licenza Open Source (Google ha reso gratuito il servizio, ma si riserva il
diritto di aggiungervi banner pubblicitari o di far pagare licenze ai partner commerciali) è tale la qualità delle mappe messe a disposizione che si è pensato, a titolo
sperimentale, di includerlo in ArcheoMap. Attualmente quindi sul sito sono disponibili due mappe: una gestita con MapServer, che può essere considerata la versione
ufficiale, e una gestita con GoogleMaps a scopo di test. Nella figura 4.10 è mostrata
la pagina con Google Maps: la schermata è dominata dalla mappa satellitare dell’Italia. I comandi sono raccolti in un piccolo pannello a sinistra e uno a destra. A
sinistra ci sono i bottoni per regolare il livello di zoom e gli spostamenti orizzontali
e verticali; a destra ci sono i bottoni per attivare i livelli disponibili: “Map” mostra
la mappa politica e stradale; “Satellite”, la visuale corrente, è la mappa satellitare;
90
4 – Gestione delle mappe
Figura 4.10. Schermata della mappa di Google Maps
“Hybrid” sovrappone le prime due. Sulla cartina si notano due marcatori, corrispondenti al sito archeologico di Pompei e a quello di Forcello. Questo dimostra la
flessibilità dell’API di Google Maps, che consente di integrare la sua cartografia con
dei riferimenti personalizzati, in questo caso i siti archeologici di ArcheoMap.
Nella figura 4.11 è mostrato il livello di dettaglio raggiungibile dalle immagini satellitari di Google Maps; si è fatto un ingrandimento sulla zona archeologica
di Pompei: se ne può distinguere con precisione l’impianto stradale antico, con
il perimetro delle abitazioni, in particolare l’antico anfiteatro con l’inconfondibile
semicerchio delle gradinate.
A riprova dell’utilità che possono rivestire mappe dettagliate come quelle proposte da Google, non si può non citare la recente scoperta di una villa romana nei
dintorni di Parma da parte di un utente di Google Maps che ha segnalato al Museo
Archeologico della propria città di una curiosa macchia in mezzo ai campi osservabile dalle mappe satellitari. Le successive indagini archeologiche hanno effettivamente
rivelato la presenza sul luogo di un insediamento romano del I secolo a.C.
91
4 – Gestione delle mappe
Figura 4.11.
Schermata con dettaglio di Google Maps ingrandita
92
Capitolo 5
Il programma su Palm
5.1
Introduzione ai dispositivi palmari
Il mondo dell’informatica è stato rivoluzionato nella seconda metà degli anni ’90
dalla comparsa dei primi dispositivi palmari, apparecchi elettronici dalle dimensioni ridotte, assimilabili a quelle del palmo di una mano (da cui il nome) capaci di
eseguire operazioni più complesse di una semplice calcolatrice e dotati di una certa
quantità di memoria interna (eventualmente espandibile) che consente di memorizzare programmi e dati di vario genere. Inizialmente pensati come avanzate agende
elettroniche, ne sono ben presto emerse le potenzialità come veri e propri computer
in miniatura tanto da coniare per essi il termine di mobile computing con cui si
intende la possibilità di tenere sempre con sè i propri dati sensibili e le applicazioni
più importanti per mezzo di dispositivi più pratici e agevoli da trasportare e usare
rispetto ai tradizionali personal computer portatili.
Tra i vari produttori che si sono cimentati nel mercato del mobile computing ha
avuto particolare successo l’azienda Palm, tanto che il suo nome è divenuto per un
certo periodo sinonimo di computer palmare. Le caratteristiche che hanno contribuito alla diffusione dei dispositivi di Palm sono la semplicità di utilizzo, il favorevole
rapporto qualità / prezzo e la disponibilità di una ben documentata API, l’interfaccia di programmazione che consente lo sviluppo di applicazioni per il sistema
operativo PalmOS, utilizzato su gran parte dei dispositivi Palm.
Nella figura 5.1 è mostrato un tipico dispositivo prodotto da Palm. La superficie
è dominata dallo schermo touchscreen, diviso in due parti. Nella sezione superiore
è visualizzata l’area di lavoro, dove si vede l’output dei programmi e del sistema
operativo; la sezione inferiore è l’area di scrittura, dove l’utente traccia le lettere
e i numeri che vengono interpretati dal sistema di riconoscimento “Graffiti” per
immetere dei testi qualora richiesto. In basso, infine, alcuni pulsanti per richiamare
velocemente le principali funzioni: la rubrica, l’agenda, la lista delle attività e il
93
5 – Il programma su Palm
Figura 5.1.
Immagine di un dipositivo Palm
blocco note.
Trattandosi di dispositivi dalle dimensioni contenute e che devono fare affidamento sulle proprie batterie interne per operare, i palmari hanno un’architettura
che si discosta molto da quella dei tradizionali PC. Il principale aspetto da tenere
in conto è l’assenza di un hard disk per la memorizzazione permanente dei dati: si
deve fare affidamento sulla sola memoria volatile, di capienza ridotta (valori tipici
sono 32MB o 64MB, ma in molti casi sono inferiori), che viene costantemente tenuta
attiva dalla batteria, anche quando apparentemente il dispositivo è spento. Va da
sè che, qualora la batteria si scaricasse completamente, tutti i file e le applicazioni
verrebbero persi irrimediabilmente.
Queste peculiarità fanno sentire i loro effetti anche sul processo di sviluppo delle applicazioni. In particolare occorre prestare attenzione all’uso della memoria,
impiegandola solo quando strettamente necessario, e occorre progettare accuratamente l’interfaccia grafica, in modo da sfruttare correttamente il ristretto spazio
offerto dallo schermo dei palmari.
Nel corso di questo capitolo si analizzerà il progetto e lo sviluppo dell’applicativo
di ArcheoMap su un dispositivo palmare prendendo a riferimento quelli prodotti da
Palm dotati di sistema operativo PalmOS, mettendo in luce quali sono i requisiti
che si devono soddisfare e le soluzioni proposte. Si concluderà con una carrellata di
94
5 – Il programma su Palm
immagini per illustrare nel dettaglio le funzionalità del prodotto finale.
5.2
Requisiti del programma su PalmTM
L’obiettivo è quello di produrre un’applicazione da far eseguire su un dispositivo
PDA1 prodotto dall’azienda Palm, che consenta di usufruire della base dati di ArcheoMap in modo pratico e intuitivo anche quando non si ha a disposizione un
collegamento di rete. Nell’ambito del progetto ArcheoMap ogni archeologo deve essere dotato di un proprio dispositivo palmare da usare sul luogo stesso dello scavo
per effettuare immediatamente le annotazioni ritenute necessarie, ed eventualmente
leggere quelle già prese da altri. Il legame palmare / utente è univoco, nel senso
che ogni dispositivo, al momento di essere assegnato ad una persona, ne eredita
implicitamente i permessi, ed è responsabilità di chi lo ha in custodia assicurarsi che
nessun altro lo usi a sproposito per leggere informazioni non autorizzate o cancellare
i propri dati.
Coerentemente con questo modello di utilizzo, il software deve fornire le stesse
funzionalità già implementate sul sito, con la stessa organizzazione logica. In particolare si richiede che l’utente, a partire dall’elenco dei progetti, possa esplorarne le
località e i relativi contenuti: diario di scavo, elenco dei reperti, galleria fotografica
e schede ministeriali. Oltre a poter leggere i singoli elementi, l’utente deve poter
aggiungerne di nuovi, se ha i permessi per farlo.
I recenti modelli PDA della Palm sono orientati alla multimedialità, per cui
qualora il dispositivo palmare sia dotato di una macchina fotografica, si richiede
che l’applicazione sia in grado di interfacciarsi con essa per scattare delle foto da
scaricare poi sul database al termine del lavoro.
5.3
Tecniche di ingegneria del software
Il termine “Ingegneria del Software” compare negli anni ’60 quando l’aumento delle
prestazioni dei calcolatori rende possibile la creazione di programmi molto complessi,
la cui scrittura e manutenzione non può più essere affidata alla sola esperienza del
programmatore. Si rende quindi necessaria una maggiore pianificazione che consenta
di definire prima tutte le caratteristiche e le funzionalità che deve avere l’applicazione
che si intende produrre, per procedere solo in un secondo momento alla scrittura del
codice.
L’Ingegneria del software ha introdotto il concetto di “ciclo di vita” di un’applicazione, ossia la successione di fasi tra loro coordinate che accompagnano l’intero processo di sviluppo e realizzazione di un programma da quando questo viene
1
PDA, Personal Digital Assistent, è sinonimo di palmare
95
5 – Il programma su Palm
concepito a quando ne termina la produzione. Queste fasi sono sostanzialmente
cinque:
• Analisi dei requisiti: si discutono, assieme ai committenti, le richieste che il
software deve soddisfare, chiarendone i punti oscuri e definendone le specifiche;
• Progetto: si modellano le strutture dati e il flusso del programma facendo uso
di diagrammi formali che permettono di definire, ad un livello astratto, tutte
le caratteristiche del software, coerentemente con quanto definito nei requisiti;
• Implementazione: i diagrammi generati durante la fase di progetto vengono
tradotti in un linguaggio di programmazione per la stesura del codice;
• Verifica e validazione: il codice prodotto viene sottoposto ad una serie di
test per assicurarsi che non presenti malfunzionamenti, e si certifica assieme
al committente il soddisfacimento dei requisiti;
• Manutenzione: si procede alla correzione di eventuali bug qualora durante
l’utilizzo del software se ne manifestino, oppure si raffinano le caratteristiche
aggiungendo nuove funzionalità richieste dagli utenti;
Nel corso degli anni si sono definiti diversi modelli di processo, ciascuno dei quali
si adatta ad alcune esigenze e ambiti di sviluppo. I principali sono lo sviluppo a
cascata (Waterfall model ) e il modello incrementale (Incremental Model ).
Il modello a cascata prevede che le singole fasi del ciclo di sviluppo si susseguano
una dopo l’altra in modo lineare, come illustrato nella figura 5.2: l’output di ogni
Figura 5.2.
Ciclo di vita del software secondo il modello a cascata
fase è un semilavorato di input per il passo successivo. Il grande pregio di questo
96
5 – Il programma su Palm
modello è la sua semplicità e chiarezza, ma presenta il limite di essere troppo rigoroso. I requisti vengono congelati nelle fasi iniziali e una loro modifica comporta
necessariamente il rifacimento dall’inizio di tutto il processo. Il cliente, inoltre può
osservare il risultato solo alla fine, a produzione compiuta, non potendo partecipare
in alcun modo alle fasi intermedie.
I limiti del modello a cascata sono stati superati da nuovi processi più dinamici
raggruppati sotto il nome di modelli evolutivi, di cui il modello incrementale ne è un
esempio. Le fasi in cui viene scomposto il processo sono le stesse viste poco sopra,
cosı̀ come la loro successione, ma anzichè concludersi con un unico software definitivo
si punta a rilasciare, nel più breve tempo possibile, dei prototipi da sottoporre
all’attenzione del committente e dei clienti. Sulle indicazioni da questi fornite si
procede alla creazione di prototipi via via sempre più raffinati fino a giungere al
prodotto finale. Prodotto finale che può poi, a sua volta, evolvere ulteriormente
nel tempo, qualora incontri successo sul mercato, attraverso il rilascio programmato
di nuove versioni o release che aggiungono nuove funzionalità e ne ottimizzano le
prestazioni. Con i modelli evolutivi di sviluppo del software si riesce ad ottenere una
maggiore soddisfazione da parte dei committenti, che si vedono coinvolti nel ciclo
di sviluppo e sono costantemente informati sullo stato di avanzamento dei lavori,
ma si ha come contropartita una maggior difficoltà dal lato progettuale, in quanto è
imperativo strutturare le singole parti del software in modo sufficientemente flessibile
da facilitarne le modifiche, quando richieste, e occorre programmare per bene l’ordine
di rilascio dei prototipi intermedi.
A supporto del progettista che si deve confrontare con lo sviluppo di software
dalla complessità crescente, si afferma nel corso degli anni ’70 il paradigma della
programmazione ad oggetti. Tradizionalmente la programmazione è vista come una
sequenza di comandi che istruiscono il processore su come svolgere determinati compiti. Tale approccio, detto paradigma procedurale, implica che il programmatore,
nell’elaborare una soluzione per un problema reale, si pone dalla parte della macchina, scomponendo l’assunto iniziale in sottoproblemi via via più semplici riconducibili
a operazioni logiche di assegnamento e di controllo di flusso. Con il paradigma ad
oggetti, viceversa, si pensa ad un programma come un mondo artificiale composto
da elementi che interagiscono tra di loro. Le entità che popolano questo mondo
artificiale sono gli “oggetti”, le cui caratteristiche, in termini di attributi e azioni
che possono compiere, sono definite nelle “classi”. In termini pratici una classe è la
definizione di una struttura dato, mentre gli oggetti ne sono le istanze particolari.
Gli attributi di una classe elencano le informazioni necessarie a descrivere lo stato
corrente di un oggetto. Per cambiare gli attributi, quindi per far cambiare lo stato
di un oggetto, si invocano delle funzioni che, nel gergo della programmazione ad
oggetti, prendono il nome di “metodi”. Proprio come nel mondo reale l’interazione
di un oggetto con un altro si manifesta tramite un cambiamento di stato di uno di
essi, analogamente nel paradigma della programmazione ad oggetti l’azione su un
97
5 – Il programma su Palm
oggetto si manifesta tramite l’esecuzione di un metodo.
Se nel redigere il progetto di un software si definiscono correttamente le classi, i
loro attributi e i metodi, è possibile scrivere codice modulare che facilita il lavoro di
prototipazione e di manutenzione.
5.4
Progetto del programma su Palm
Nello scrivere il software di ArcheoMap per Palm si è adottato un modello di sviluppo incrementale e l’obiettivo di questa tesi consiste nella produzione del primo
prototipo da sottoporre ai committenti per dimostrarne le potenzialità e discuterne
eventuali miglioramenti. Nel seguito sono descritte le fasi di analisi dei requisiti,
progetto e scrittura del codice di questo primo prototipo, mostrando come si è sfruttato il paradigma ad oggetti per la stesura di un software modulare ed efficiente,
tenendo contemporaneamente conto delle difficoltà rappresentante dallo sviluppo su
un sistema dalla limitate capacità come lo sono i computer palmari.
5.4.1
Analisi dei requisiti
Lo scopo dell’analisi dei requisiti è quello di stabilire cosa debba fare il software che
si sta per sviluppare, a partire dalle richieste avanzate dai committenti che, nel caso
di ArcheoMap, sono quelle esposte nella sezione 5.2. Si intende ridefinirne la formulazione, per cercare di renderla più rigorosa e formale, e metterne in luce l’elenco
preciso di specifiche che il programma deve soddisfare. Il prodotto dell’analisi, frutto
della collaborazione tra sviluppatori e committenti per dirimere eventuali dubbi e
incertezze, è il seguente elenco di punti:
1. Il software deve essere dotato di un’interfaccia grafica, tramite cui l’utente
accede alle varie parti di ArcheoMap. Nella terminologia Palm, l’equivalente
di una finestra prende il nome di form;
2. I dati a cui si vuole dare accesso devono essere organizzati in modo coerente
con la struttura del database e quella del sito;
3. Il software deve essere in grado di trattare l’elenco dei progetti di ArcheoMap
e mostrarne le relative informazioni; l’elenco delle località di ogni progetto
e i suoi dettagli; per ogni località se ne deve gestire il diario di scavo come
elenco di articoli, la galleria fotografica come elenco di immagini e l’elenco
dei reperti; se l’utente seleziona un articolo, un’immagine o un reperto dalla
lista, deve poterne visualizzare il contenuto e le informazioni di contorno; nel
caso dei reperti, questi devono presentare una lista di riferimenti agli articoli,
immagini e schede ministeriali che li descrivono; selezionato un riferimento,
98
5 – Il programma su Palm
deve essere possibile visualizzarne il contenuto senza costringere l’utente a
spostarsi in un’altra sezione del programma;
4. L’utente deve poter modificare gli oggetti già esistenti e inserire nuovi articoli
di diario, nuove immagini (qualora il Palm sia dotato di macchina fotografica
integrata), nuovi reperti con i loro riferimenti e compilare le schede ministeriali;
non si deve trattare l’inserimento di nuovi progetti e di nuove locazioni, cosı̀
come non deve essere possibile modificarne le informazioni associate, in quanto
tali azioni sono considerate di livello amministrativo e devono perciò essere
fattibili solo dal sito;
5. Essendo ogni PDA legato in modo diretto ad un utente, la gestione dei permessi è semplificata in quanto il programma eredita automaticamente i permessi
dell’utente a cui è in quel momento associato. Per quel che riguarda i permessi
di lettura, questi sono automaticamente soddisfatti nel momento in cui vengono caricati i dati nella memoria del dispositivo: se un utente, ad esempio,
non può leggere il diario di scavo, non vi dovranno essere articoli in memoria.
Il programma deve però bloccare eventuali tentativi di scrittura o di modifica
dei dati non di sua competenza;
6. Per la stesura di questa prima versione prototipale del programma non sono
richiesti particolari meccanismi di sicurezza dei dati, l’utente stesso è responsabile del dispositivo e del suo contenuto; è però richiesto l’inserimento di
username e password per l’inizializzazione del programma;
7. Poichè il numero di progetti e località presenti nel sito possono essere piuttosto numerosi, per evitare un’eccessiva occupazione di memoria del dispositivo
l’utente deve poter selezionare i progetti e le località che sono di suo interesse;
8. Se il palmare è dotato di macchina fotografica integrata, il programma deve
consentire all’utente di richiamarne l’interfaccia di gestione per scattare delle
foto e offrire gli strumenti necessari per memorizzarle e inserirle nella galleria
di immagini della località;
9. Data la scarsa memoria a disposizione sui PDA, si stabilisce che le sole immagini presenti in memoria siano le foto scattate dalla macchina fotografica
del dispositivo, qualora presente, mentre quelle già inserite nel database non
devono essere caricate. Per tali immagini la galleria fotografica sul palmare ne
contiene quindi le sole informazioni associate, ma non il relativo file grafico.
99
5 – Il programma su Palm
5.4.2
Progetto del software, i diagrammi UML
Se nella fase di analisi dei requisiti si stabilisce cosa deve fare il software, nella fase
successiva, quella di progetto, si decide come implementare le specifiche. Tale fase
non comporta ancora la scrittura di codice: si analizza il problema e si producono una
serie di diagrammi per fissare graficamente le singole componenti dell’applicazione
e il flusso operativo. Tali diagrammi sono raccolti sotto il nome di UML.
Lo Unified Modeling Language, nonostante il nome, non è un vero e proprio
linguaggio di programmazione, quanto piuttosto la formalizzazione di un insieme
di tipologie di diagrammi che vengono utilizzati nella modellazione del software. I
diagrammi definiti dallo standard UML sono sei:
• Diagramma delle classi (Class Diagram);
• Diagramma temporale (Sequence Diagram);
• Diagrammi dei casi d’uso (Use Case Diagram);
• Diagramma degli stati (Statechart Diagram);
• Diagramma delle attività (Activity Diagram);
• Diagramma dei componenti (Component Diagram);
Di questi, nel presente capitolo, sono utilizzati e documentati solo i primi due, in
quanto gli altri servono a modellare altre fasi del processo di sviluppo che non sono
intervenute nel caso di ArcheoMap.
Diagramma delle classi
Il diagramma delle classi, nell’ambito della programmazione ad oggetti, modella i
tipi di oggetti che intervengono nel programma, descrivendone gli attributi, i metodi
principali e le relazioni che si instaurano tra di essi. L’elemento fondamentale di
tale diagramma è la “classe”, schematizzata da un rettangolo tripartito, come da
figura 5.3: nella fascia in alto viene annotato il nome della classe, che la identifica
univocamente nell’ambito del progetto; nella fascia intermedia c’è l’insieme degli
attributi, cioè le caratteristiche che le sono proprie; l’ultima fascia in basso è l’elenco
dei metodi, ossia le azioni che una classe può compiere. Molto spesso non è necessario
dettagliare una classe esplicitandone gli attributi e i metodi; in tali frangenti, per
semplicità si può semplificare il diagramma scrivendone solo il nome.
Il paradigma della programmazione ad oggetti prevede che gli attributi e i metodi
di una classe possano essere pubblici o privati. Se un attributo o un metodo è
dichiarato come privato, ad esso si può accedere solo dall’interno della classe che lo
contiene. Viceversa, un attributo o un metodo dichiarato pubblico è liberamente
100
5 – Il programma su Palm
nome classe
−attributo1
−attributo2
+metodo1()
+metodo2()
Figura 5.3.
Schema grafico di una classe in un diagramma UML
accessibile da tutte le altre classi del progetto. Come regola generale gli attributi
che indicano lo stato di un oggetto sono dichiarati privati, mentre i metodi che
modificano gli attributi sono dichiarati pubblici. In tal modo si implementa un
meccanismo di sicurezza implicito: l’unico modo per modificare lo stato di un oggetto
è chiedere all’oggetto stesso di modificarlo chiamando un suo metodo pubblico.
É invalsa la consuetudine che i metodi pubblici di una classe che modificano il
valore di un attributo seguano una nomenclatura formata dal nome dell’attributo
preceduto dal prefisso “set”. I metodi che leggono il valore di un attributo hanno la
nomenclatura formata dal nome dell’attributo preceduto dal prefisso “get”. Quindi
ad esempio
setAttributo1(nuovo_valore)
setAttributo2(nuovo_valore)
sono due metodi che impostano il valore di “attributo1” e “attributo2”;
getAttributo1()
getAttributo2()
sono due metodi che leggono il valore dei medesimi attributi. Quando si disegna il
diagramma delle classi, per semplicità, non si specificano i metodi getter e setter in
quanto la loro presenza è implicita.
Le relazioni che legano tra di loro le classi sono principalmente di tre tipi:
• Relazione di composizione: una classe A, detta componente, è in relazione
di composizione con una classe B, detta contenitore, se ogni oggetto istanza di
B contiene al suo interno una o più istanze di A; graficamente la composizione
è indicata da una freccia con punta romboidale piena;
• Relazione di aggregazione: è concettualmente identica alla relazione di
composizione, ma più debole, nel senso che alcune istanze della classe contenitore possono non contenere la classe componente; graficamente viene resa con
una freccia dalla punta romboidale vuota;
101
5 – Il programma su Palm
• Relazione di generalizzazione: una classe A è una generalizzazione di una
classe B se ogni oggetto istanza di B eredita gli attributi e i metodi di A,
aggiungendone di nuovi per specializzarsi; in altre parole la relazione di generalizzazione instaura un rapporto di ereditarietà, in cui A è la classe padre
(detta anche “superclasse”) e B è la classe figlia; graficamente tale relazione
viene resa con una freccia dalla punta triangolare vuota;
• Relazione di associazione: è la relazione più generica che lega due classi A
e B per indicare che queste si relazionano tra loro: A può chiamare metodi di
B e viceversa; sono associazioni tutte le relazioni che non possono considerarsi
composizioni, aggregazioni o generalizzazioni.
Nella figura 5.4 è riportato lo schema grafico delle relazioni che legano le classi in
un Class Diagram. Poichè in un programma mediamente complesso è facile arrivare
A
A
A
A
B
B
B
B
Composizione
Aggregazione
Generalizzaz.
Associazione
Figura 5.4.
Schema grafico delle relazioni in un Class Diagram
alla definizione di decine di classi, è comodo organizzarle in insiemi omogenei che
prendono il nome di package. Il criterio di omogeneità viene stabilito dai progettisti
contestualmente all’utilità nel progetto che si sta sviluppando.
Diagramma temporale
Se con il Class Diagram si modellano il numero e il tipo di oggetti che compongono
un software, il diagramma temporale permette di prototipare il processo seguito
dall’applicazione, ossia la sequenza di interazioni tra gli oggetti che consentono al
programma di elaborare le informazioni in input per produrre dei risultati in output.
102
5 – Il programma su Palm
I diagrammi temporali si sviluppano in due dimensioni: l’asse verticale rappresenta il tempo, con valori crescenti verso il basso; l’asse orizzontale riporta la
sequenza di operazioni. Uno dopo l’altro, nell’ordine in cui entrano in gioco, sono
illustrati gli oggetti del programma. Una freccia indica l’invio di un messaggio, ossia
la chiamata di un metodo da parte di un oggetto; dei rettangoli disposti verticalmente lungo l’asse temporale rappresentano il periodo di esecuzione del metodo, al
termine del quale si genera la risposta. Nella figura 5.5 è illustrato un esempio di
Figura 5.5.
Esempio di Sequence Diagram per l’interzione tra due oggetti
diagramma temporale in cui un oggetto di nome “Oggetto1” invia un messaggio a
“Oggetto2” per l’esecuzione di un metodo e ne riceve la risposta.
5.4.3
Diagramma delle classi di ArcheoMap
Per tracciare il Class Diagram di ArcheoMap si parte dall’analisi dei requisiti esposta
nella sezione 5.4.1 per estrarne i concetti fondamentali da modellare. Dal momento
che i programmi su palmare utilizzano un’interfaccia grafica, è conveniente suddividere il progetto in due parti: una relativa al design degli elementi grafici (dipendente
dalla piattaforma di sviluppo), ed una che si occupa della gestione dei dati (indipendentemente dal dispositivo impiegato), in modo da mantenere separata la logica
di presentazione dalla logica di accesso alle informazioni.
Progetto dell’interfaccia grafica
Come esplicitato nel primo punto, i programmi per palmare hanno un’interfaccia
grafica. Questo implica che è necessario prevedere il design di una serie di form,
termine con il quale si designa l’area dello schermo su cui gli utenti vedono elementi
grafici come bottoni, campi di testo e liste per leggere le informazioni e impartire
comandi. Sebbene ogni form abbia un suo design e una sua logica funzionale, è
possibile identificare un sottinsieme di caratteristiche comuni a tutti. In particolare
103
5 – Il programma su Palm
ogni form ha un codice identificativo che lo contraddistingue nell’ambiente di esecuzione; ha una lista di oggetti grafici che ne definiscono l’interfaccia e un menu. È
possibile anche trovare dei metodi comuni, per definire i quali tuttavia è necessario
prima fare una piccola digressione sulla programmazione ad eventi.
Start
no
evento?
si
processa
evento
no
coda
piena?
si
no
wait
Figura 5.6.
Diagramma di flusso di un evento
Quando si deve gestire un’interfaccia grafica va tenuto in conto che gli input
da parte dell’utente (ad esempio la pressione su un bottone o la scrittura di un
testo) giungono in modo asincrono, vale a dire casualmente. Questo mal si integra
con il processo di esecuzione di un programma che solitamente segue un percorso
logico stabilito, funziona cioè in modo sincrono. Per ovviare a questo problema
tutti i sistemi operativi moderni si basano sull’approccio ad eventi. Il sistema itera
continuamente in un ciclo simile a quello mostrato nella figura 5.6: quando viene
scatenato un evento, per esempio perchè l’utente ha premuto un bottone, il sistema
operativo testa il contenuto di una zona di memoria in cui vengono accodati gli
eventi non ancora processati. Se la coda è vuota l’evento viene immediatamente
servito, altrimenti rimane in attesa fino a quando non è il suo turno. Al termine
della procedura il sistema torna al punto di partenza. Le operazioni che devono
essere compiute per processare un evento sono indicate dal programmatore in sede
di progetto e implementazione dell’applicativo.
Per esempio, nell’API di PalmOS viene fornita la funzione “FrmHandleEvent()”
che si occupa di smistare gli eventi provenienti dall’interfaccia grafica verso altre
routine più specifiche sulla base del tipo di evento che deve gestire. Quando viene
aperto un form “FrmHandleEvent()” chiama la funzione “FrmOpenEvent()” in cui
104
5 – Il programma su Palm
vanno scritte le operazioni da compiere all’apertura del form; quando viene chiuso
chiama la funzione “FrmCloseEvent()”; quando giunge un evento da parte di un
bottone chiama “CtlSelectEvent()”; quando l’evento è scatenato da una lista
chiama “LstSelectEvent()”; quando un utente opera su un campo di testo chiama
“FldChangedEvent()” ed infine chiama “MenuEvent()” per gestire gli eventi del
menu. Altri sistemi operativi utilizzano nomi diversi per le procedure da chiamare
ma le funzioni messe a disposizione sono analoghe.
È chiaro che tutte le procedure di gestione degli eventi sono comuni ad ogni
form e quindi possono essere definite una volta sola all’interno di una classe generica
“GenericForm” e poi sovrascritte dagli altri form secondo necessità. Nella figura
5.7 è illustrato lo schema grafico di tale classe e nella tabella 5.1 ne è fornita la
documentazione.
GenericForm
−formId
−GUIobjects
−Menu
+FrmHandleEvent()
+FrmOpenEvent()
+FrmCloseEvent()
+CtlSelectEvent()
+LstSelectEvent()
+FldChangedEvent()
+MenuEvent()
+GetObjectPtr()
Figura 5.7.
Schema grafico della classe “GenericForm”
Gli elementi grafici interattivi previsti da PalmOS e inclusi nei form di ArcheoMap sono principalmente tre: bottoni, liste e campi di testo. Per ognuno di essi
si definisce una classe che ne descrive le caratteristiche, come riportato nella figura
5.8: ogni elemento grafico ha delle caratteristiche comuni, quali la dimensione e lo
stato corrente (attivo o disattivo), che possono essere raccolte in una classe generica
“GUIObject”. Le classi che descrivono il particolare elemento grafico ereditano da
questa gli attributi comuni e l’espandono con altri specifici. Cosı̀ la classe “Button”
aggiunge l’attributo “label” in cui viene scritta l’etichetta corrente del bottone; la
classe “List” ha l’attributo “items” che indica la collezione di voci della lista; ed
infine la classe “TextField” aggiunge l’attributo “text” per tener traccia del testo
correntemente visualizzato.
105
5 – Il programma su Palm
Attributi
formId
GUIObjects
Menu
Metodi
FrmHandleEvent()
identificatore del form
collezione di oggetti grafici
descrizione di un menu contestuale al form
gestisce gli eventi del form e ne smista le richieste di
servizio a metodi più specifici
FrmOpenEvent()
gestisce l’evento associato all’apertura del form
FrmCloseEvent()
gestisce l’evento associato alla chiusura del form
CtlSelectEvent()
gestisce gli eventi generati dalla pressione di pulsanti nel
form
LstSelectEvent()
gestisce gli eventi generati dalla selezione di un elemento
di una lista
FldChangedEvent() gestisce gli eventi generati dalla modifica di un campo
di testo
MenuEvent()
gestisce gli eventi scatenati dal menu
GetObjectPtr()
restituisce il riferimento ad un oggetto grafico del form
Tabella 5.1.
Documentazione per la classe GenericForm
GUIObject
−size
−status
Button
−label
Figura 5.8.
List
−items
TextField
−text
Diagramma delle classi degli oggetti dell’interfaccia grafica
A questo punto si è definita l’infrastruttura a partire dalla quale è possibie progettare l’interfaccia grafica dell’applicazione. Per definire quali e quanti form devono
essere gestiti è necessario analizzare il punto tre dei requisiti. Innanzitutto è richiesto
che il software mostri l’elenco di progetti di ArcheoMap e per ognuno ne visualizzi le relative informazioni. La soluzione pensata è di creare un form che presenti
106
5 – Il programma su Palm
un elenco di progetti e un campo di testo in sola lettura. Quando l’utente seleziona un progetto tra quelli presenti nella lista, il campo di testo viene compilato
con i dati che lo riguardano. Da un punto di vista progettuale questo si traduce
in una classe “ProjectsForm”, che estende “GenericForm” a cui aggiunge i metodi “LoadProjectData()” e “ShowProjectData()”, come rappresentato nella figura
5.9. Il primo, quando invocato, carica dalla memoria i dati relativi al progetto; il
secondo li visualizza all’utente.
GenericForm
Projects
List
ProjectsForm
Project
+LoadProjectData()
TextField
+ShowProjectData()
Figura 5.9.
Diagramma delle classi per “ProjectsForm”
Soluzioni del tutto analoghe si sono adottate per i restanti form che si devono occupare della gestione delle liste: “LocationsForm” (figura 5.10) per la lista
delle località; “ArticlesForm” (figura 5.11) per la lista degli articoli che compongono il diario di scavo; “ImagesForm” (figura 5.12) per la lista della immagini che
compongono la galleria fotografica.
Leggermente diverso il form con l’elenco dei reperti. Poichè infatti ogni reperto è
accompagnato da informazioni testuali e da una lista di riferimenti, le liste da gestire
sono due. Quando è selezionato un reperto dalla lista principale, viene compilato un
breve campo di testo con i dettagli del reperto e la lista dei riferimenti. La figura
5.13 mostra il diagramma delle classi per “FindsForm”.
Nei requisiti si richiede che l’utente, cliccando su uno dei riferimenti, possa visualizzare i dettagli di articoli, immagini e schede ministeriali. Questo comporta
la definizione di almeno altri tre form. Le informazioni rilevanti di un articolo di
diario si evincono dallo schema entità relazioni del database (vedi figura 2.7) e sono:
l’autore, la data di creazione, il titolo e il testo. Si progetta quindi un form chiamato
“ArticleEditForm” composto da quattro campi di testo, uno per ogni dettaglio che
si intende visualizzare. Nella figura 5.14 è riportato il diagramma delle classi che
modella questo form.
107
5 – Il programma su Palm
GenericForm
Locations
List
LocationsForm
Location
TextField
+LoadLocationData()
+ShowLocationData()
Figura 5.10.
Diagramma delle classi per “LocationsForm”
GenericForm
Articles
List
ArticlesForm
Article
TextField
+LoadArticleData()
+ShowArticleData()
Figura 5.11.
Diagramma delle classi per “ArticlesForm”
Per quel che riguarda le immagini, le informazioni rilevanti che appaiono nello
schema E-R (figura 2.8) sono data, autore e note. Viene quindi progettato un nuovo
form chiamato “ImageEditForm” composto da tre campi di testo, il cui modello è
riportato in figura 5.15.
Più complicata è la gestione della scheda ministeriale. Tale documento è infatti
composto da oltre cinquanta campi di testo (vedi figure 2.10 e 2.11), troppi per essere
compresi in un unico form, date le ridotte dimensioni dello schermo di un palmare.
La soluzione che si è dovuto giocoforza adottare è stata quella di dividere il contenuto della scheda ministeriale su più form, chiamati “MinistrySheetEditForm”,
quattordici per l’esattezza: ognuno di essi è composto da alcuni campi di testo, nei
quali sono riportati i dettagli della scheda.
108
5 – Il programma su Palm
GenericForm
Images
List
ImagesForm
Image
TextField
+LoadImageData()
+ShowImageData()
Figura 5.12.
Diagramma delle classi per “ImagesForm”
GenericForm
References
Find
List
List
FindsForm
+LoadFindData()
+LoadReferencesData()
Find
TextField
+ShowFindData()
+ShowFindReferences()
Figura 5.13.
Diagramma delle classi per “FindsForm”
I form “ArticleEditForm”, “ImageEditForm” e “MinistrySheetEditForm” possono essere utilizzati anche per aggiungere e modificare nuovi articoli di diario, nuove
immagini o nuove schede ministeriali. Per distinguere di volta in volta se vadano
usati in modalità lettura, modifica o inserimento, alle classi che li modellano si è
aggiunto un attributo “mode” che può assumere uno dei tre valori. Se il form viene
aperto in modalità sola lettura i campi sono precompilati e l’utente può solo leggerli
e non modificarli; in modalità modifica i campi sono precompilati e l’utente può
cambiarne il contenuto; in modalità inserimento i form sono vuoti e l’utente deve
provvedere da sè a compilarli.
109
5 – Il programma su Palm
Author
DateTime
Body
Title
TextField
TextField
TextField
TextField
ArticleEditForm
−mode
+LoadArticleData()
Figura 5.14.
Diagramma delle classi per “ArticleEditForm”
Author
DateTime
Notes
TextField
TextField
TextField
ImageEditForm
−mode
+LoadImageData()
Figura 5.15.
Diagramma delle classi per “ImageEditForm”
Progetto delle classi di dati
Come specificato nei requisiti, l’applicativo deve gestire i dati di progetti, località,
articoli di diario, immagini, reperti e schede ministeriali. Ognuno di questi elementi
può essere modellato con una classe, in cui ne vengono specificati gli attributi e i
metodi. Per definire queste classi si fa riferimento ancora una volta allo schema entità
relazioni del database in quanto il loro compito è quello di mantenere in memoria
durante l’esecuzione del programma le singole informazioni sui dati di ArcheoMap
che devono essere gestite dai form.
Sul modello della relazione “progetto” di figura 2.5 si definisce la classe “Project”
rappresentata in figura 5.16: gli attributi sono i medesimi, l’unica novità è costituita dal metodo “toString()” il cui compito è quello di restituire al chiamante
una stringa di testo in cui sono riportati gli attributi di un’istanza della classe. Tale metodo non è l’unico: sono definiti anche i metodi getter e setter per leggere e
110
5 – Il programma su Palm
impostare il valore dei singoli attributi, ma che per brevità non sono mostrati nei
Class Diagram.
Project
−projectID
−name
−description
−internetAddress
−email
−phone
−dateStart
−dateEnd
+toString()
Figura 5.16.
Schema grafico della classe “Project”
In modo analogo si definisce la classe “Location” (vedi figura 5.17) che corrisponde all’entità “località” definita nella figura 2.3; la classe “Article” (vedi
figura 5.18) che introduce nel progetto dell’applicazione l’entità “articolo” di figura 2.7; la classe “Image” (vedi figura 5.19) equivalente all’entità “immagine” di
figura 2.8; la classe “MinistrySheet”, parzialmente rappresentata in figura 5.21; e
le classi “Find” e “Reference” (vedi figura 5.20) per trattare reperti e riferimenti
per i quali si rimanda agli schemi di figura 2.9 e 2.19. La relazione che lega queste
due ultime classi è un’aggregazione, cioè una composizione facoltativa, perchè un
reperto può non avere riferimenti associati.
Le classi che compongono l’interfaccia grafica e quelle che modellano i tipi di dato
non sono indipendenti le une dalle altre, bensı̀ cooperano tra di loro per assecondare
i comandi impartiti dagli utenti. Per esemplificare come si realizza l’interoperabilità
tra i due insiemi di classi, si analizza nel dettaglio cosa avviene quando l’utente, dal
form con l’elenco dei progetti, sceglie una voce dalla lista per visualizzarne i dettagli
nel campo di testo.
Nella figura 5.22 è riportato il diagramma temporale per “ProjectsForm”:
1. L’utente apre il form. L’evento di apertura viene gestito dal metodo “FrmOpenEvent()”, il quale si occupa di inizializzare le variabili interne dell’interfaccia;
2. Durante l’esecuzione del metodo “FrmOpenEvent()” viene inizializzata la lista
dei progetti: viene letto dalla memoria l’elenco dei progetti di ArcheoMap e
111
5 – Il programma su Palm
Location
−LocationID
−public
−excavation
−dateStart
−dateEnd
−modernName
−ancientName
−city
−state
−address
−coordinates
−description
−internetAddress
−email
−phone
−notes
+toString()
Figura 5.17.
Schema grafico della classe “Location”
Article
−articleID
−locationID
−visible
−creationDate
−modificationDate
−author
−title
−body
+toString()
Figura 5.18. Schema grafico della classe “Article”
i nomi di questi sono inseriti nella lista, operazione che viene compiuta dal
metodo “SetItems()” della classe “ListObject”;
112
5 – Il programma su Palm
Image
−imageID
−locationID
−creationDate
−author
−fileName
−notes
+toString()
Figura 5.19.
Schema grafico della classe “Image”
Find
Reference
−findID
−referenceID
−locationID
−objectID
−creationDate
−objectType
−author
−author
−findName
−creationDate
−coordinates
+toString()
+toString()
Figura 5.20.
Schema grafico della classe “Find”
3. L’utente seleziona il nome di un progetto dalla lista: questo evento viene
gestito dal metodo “LstSelectEvent()”;
4. Per servire la richiesta dell’utente, viene dapprima chiamato il metodo “LoadProjectData()” che si occupa di istanziare in memoria un oggetto della classe
“Project” in cui sono caricati i dettagli del progetto selezionato;
5. Sull’oggetto istanziato al punto precedente viene chiamato il metodo “toString()” per ottenere la stringa che descrive il progetto e questa viene
impostata nel campo di testo “TextObject”.
Al termine di questo processo l’utente può leggere i dettagli del progetto da lui
selezionato. Sequenze del tutto analoghe si applicano agli altri form del programma
ArcheoMap.
113
5 – Il programma su Palm
MinistrySheet
−sheetID
−findID
−creationDate
−locationID
− etc
+toString()
Figura 5.21.
Figura 5.22.
Schema grafico della classe “MinistrySheet”
Diagramma temporale del form “ProjectsForm”
Gestione dei permessi
Come richiesto dai requisiti, il software deve gestire i permessi di accesso alle varie
sezioni di ArcheoMap, seppure in modo semplificato rispetto a quanto implementato
su Web. Lo scenario di utilizzo prevede che i team di archeologi abbiano a disposizione un insieme di palmari, da assegnare ognuno ad una persona specifica che è
responsabile dei suoi dati. Quando l’utente riceve il palmare per la prima volta,
viene inizializzato con i dati a cui l’utente ha accesso in lettura. In questo modo
l’unica autorizzazione da controllare all’interno del programma sono i permessi in
scrittura. A tale scopo si introduce un’ulteriore classe “Permission” il cui schema
è presentato in figura 5.23.
114
5 – Il programma su Palm
Permission
−locationId
−objectTyps
−writable
Figura 5.23.
Schema grafico della classe “Permission”
Ogni permesso ha come attributo l’identificatore della località, il tipo di elemento
a cui il permesso si riferisce (articolo di diario, immagine o reperto) e un valore
booleano che indica se l’utente può scrivere o modificare quell’elemento. All’interno
della logica del programma, quando l’utente vuole creare un nuovo diario o una
nuova immagine, viene consultato l’oggetto di classe “Permission” corrispondente e
se ne testa il campo “writable”: se asserito l’operazione viene consentita, altrimenti
viene mostrato un messaggio di errore e l’operazione bloccata.
5.4.4
Codifica
Al termine della progettazione si sono prodotti un’insieme di grafici che modellano
il funzionamento del software sia per quel che riguarda le strutture dati impiegate,
sia per quel che concerne le interazioni tra di loro e con l’utente. Si è cosı̀ potuto
descrivere in modo sufficientemente accurato l’intero funzionamento dell’applicativo
indipendentemente dall’architettura hardware destinata all’esecuzione. La fase di
codifica ha il compito di trasporre questi grafici in un liguaggio di programmazione
da cui ottenere l’eseguibile per una determinata piattaforma di riferimento, che nel
caso di ArcheoMap è un dispositivo Palm dotato di sistema operativo PalmOS. Il
passaggio da UML a codice non è complicato: se si utilizza un linguaggio di programmazione ad oggetti, infatti, è possibile tradurre quasi immediatamente le classi,
i loro attributi e i metodi in istruzioni; quel che richiede attenzione è l’implementazione dei metodi, ossia la scrittura della loro logica di funzionamento che durante la
fase di progetto è stata solo accennata ma non dettagliata.
Le problematiche che vanno affrontate nella fase di codifica sono principalmente
due:
• Scegliere che linguaggio di programmazione utilizzare;
• Scegliere di quali strumenti avvalersi durante la scrittura del codice.
115
5 – Il programma su Palm
Linguaggio di programmazione: C++
L’API fornita da PalmOS agli sviluppatori è scritta nativamente in linguaggio C, il
quale presenta il difetto di non supportare la programmazione ad oggetti. Ne esiste
però una versione più evoluta, che ne ricalca la sintassi e i costrutti fondamentali,
integrandoli con il paradigma della programmazione ad oggetti: tale linguaggio è il
C++, che è quello scelto per scrivere il codice dell’applicazione. Poichè il C è a tutti
gli effetti un sottinsieme del C++, è stato comunque possibile utilizzare le funzioni e
le procedure dell’API di PalmOS, mentre per la scrittura dei nuovi tipi di dato si sono
trascritte le classi con il loro attributi e metodi, cosı̀ come progettati nelle sezioni
precedenti. A supporto della stesura del codice si è inoltre utilizzata una libreria di
classi fornita dalla Towertech, le quali mettono a disposizione un’infrastruttura ad
oggetti che consente di accedere a numerose funzioni dell’API di PalmOS secondo
uno stile Object Oriented, migliorando l’organizzazione e la pulizia dei sorgenti. A
titolo d’esempio viene mostrato di seguito la sequenza di istruzioni in C++ per
definire la classe “Article”, il cui modello si è visto nella figura 5.18
class Article {
private:
Int32
UInt32
Boolean
DateTimeType
DateTimeType
Char
Char
Char
articleId;
locationId;
visible;
creationDate;
modificationDate;
*author;
*title;
*body;
public:
Article()
Article(db_articles *p)
~Article()
SECTION_PLUSPLUS;
SECTION_PLUSPLUS;
SECTION_PLUSPLUS;
void
SetArticleId(Int32 id)
Int32
GetArticleId()
void
SetLocationId(UInt32 id)
UInt32 GetLocationId()
void
SetVisible(Boolean flag)
Boolean GetVisible()
void
SetCreationDate()
DateTimeType GetCreationDate()
void
SetModificationDate()
116
SECTION_PLUSPLUS;
SECTION_PLUSPLUS;
SECTION_PLUSPLUS;
SECTION_PLUSPLUS;
SECTION_PLUSPLUS;
SECTION_PLUSPLUS;
SECTION_PLUSPLUS;
SECTION_PLUSPLUS;
SECTION_PLUSPLUS;
5 – Il programma su Palm
DateTimeType GetModificationDate()
void
SetAuthore(Char *name)
Char * GetAuthor()
void
SetTitle(Char *title)
Char * GetTitle()
void
SetBody(Char *body)
Char * GetBody()
Char * ToString()
SECTION_PLUSPLUS;
SECTION_PLUSPLUS;
SECTION_PLUSPLUS;
SECTION_PLUSPLUS;
SECTION_PLUSPLUS;
SECTION_PLUSPLUS;
SECTION_PLUSPLUS;
SECTION_PLUSPLUS;
}
Si può vedere come la definizione della classe all’interno del codice segua da vicino
quanto tracciato nel Class Diagram, a ulteriore conferma che un buon progetto
consente di velocizzare la fase di codifica.
Dal precedente frammento di istruzioni si ha lo spunto per introdurre una particolarità della programmazione sui dispositivi Palm: le sezioni di codice. L’architettura
hardware adottata da Palm non è in grado di gestire programmi più grossi di 32
KB; si tratta di un limite rilevante perchè nel caso di applicazioni complesse come
quella sviluppata per ArcheoMap è facile eccedere tale dimensione. Esiste tuttavia
una soluzione: quella di creare codice multi-segmento. Per realizzarlo, si definiscono
delle sezioni, a cui viene assegnato un nome, e ogni qual volta si dichiara un metodo o una funzione è necessario indicare in quale sezione va inserito. Nel caso di
ArcheoMap si sono create quattro sezioni:
• “SECTION FORMS” nel quale è raccolto tutto il codice macchina che si occupa
della gestione dei form;
• “SECTION AUTODB” nel quale è raccolto il codice che gestisce le strutture dato
per l’accesso alla memoria in lettura o in scrittura;
• “SECTION PLUSPLUS” nel quale sono raccolti i metodi delle classi;
• “SECTION UTILS” nel quale sono raccolte le funzioni di utilità;
Nella definizione della classe “Article” vista sopra, ad esempio, i metodi sono tutti
assegnati alla sezione “SECTION PLUSPLUS”. Tale aspetto del processo di sviluppo
è strettamente legato alla piattaforma Palm, motivo per cui viene affrontato non
nella fase di progetto ma nella fase di codifica. Questo dimostra come la fase di
codifica, pur se adeguatamente supportata da un buon progetto iniziale, non va
comunque intesa come un procedimento meccanico, perchè può presentare, come in
questo caso, delle problematiche sue proprie.
117
5 – Il programma su Palm
Strumenti di sviluppo
Il linguaggio C++ è un linguaggio compilato, il che significa che, differentemente
dai linguaggi di scripting come il PHP, per essere eseguito non ha bisogno di un
interprete, ma necessita di essere tradotto in linguaggio macchina, operazione che
prende il nome di “compilazione”. In ambiente Linux, e più in generale nel mondo
Open Source, il compilatore per eccellenza è il GCC (Gnu C/C++ Compiler ), il
quale è in grado di eseguire il cosiddetto cross compiling, di cui ora viene fornita
una semplice spiegazione.
Normalmente un compilatore prende come input i file con il codice sorgente
scritto in C o C++, ne traduce le istruzioni in un formato intermedio su cui può
effettuare delle ottimizzazioni, ed infine crea il codice macchina. Il problema è che
il codice macchina utilizzato da un normale PC è diverso da quello riconosciuto
da un’architettura hardware completamente differente come quella di Palm. Per
poter quindi sviluppare su PC ma produrre in output un eseguibile per PalmOS
è necessario affidarsi ad un cross compiler. Sotto tale nome si identificano quegli
strumenti di sviluppo che eseguono su normale PC, ma che generano codice macchina
per architetture differenti.
La variante del GCC che permette di effettuare il cross compiling prende il
nome di “m68k-palmos-gcc”, dove “m68k” sta per Motorola 68000, la famiglia di
processori di cui sono dotati i dispositivi prodotti dalla Palm. Tale compilatore
mette a disposizione una serie di opzioni che consentono di modificare, entro certi
limiti, il codice macchina generato. Tali opzioni vengono passate al compilatore da
linea di comando seguendo una sintassi che è standard nel mondo Unix/Linux, con
il nome dell’opzione preceduto dal segno meno “-”. In particolare le opzioni che si
sono usate in fase di compilazione sono:
-fno-exceptions : disabilita l’uso delle eccezioni nella gestione degli errori;
-fno-rtti : disabilita l’uso dei template in C++;
-O2 obbliga il compilatore ad effettuare delle ottimizzazioni, se possibile, sul codice
generato.
In questo modo si è ottenuto un eseguibile dalle dimensioni più compatte, quindi
che non necessita di ulteriori sezioni di codice, e più veloce a svolgere le operazioni
richieste.
Per testare il programma ci si è avvalsi dell’uso dell’emulatore POSE (Palm OS
Emulator ). Un emulatore è un software che permette l’esecuzione di applicazioni
scritte per ambienti diversi da quello sul quale l’emulatore viene eseguito. Nel caso
di ArcheoMap con POSE è stato possibile far girare il programma scritto per Palm
su PC, senza il bisogno di installarne ogni volta una nuova versione sul dispositivo
reale, che avrebbe reso molto più lungo e tedioso il lavoro di sviluppo. A titolo
118
5 – Il programma su Palm
di esempio, tutte le immagini presenti in questo capitolo non provengono da un
dispositivo Palm reale ma dall’emulatore POSE.
5.5
Panoramica sul software finito
Per concludere il capitolo, viene presentata una carrellata di immagini che illustra
le caratteristiche del prototipo di software rilasciato al termine del progetto e della
codifica.
Quando l’utente avvia il programma la schermata che gli si pone di fronte è
quella di figura 5.24 e mostra l’elenco dei progetti di ArcheoMap. Se si seleziona un
progetto dall’elenco ne vengono mostrati i dettagli nel campo di testo subito sotto.
Figura 5.24.
Schermata con l’elenco dei progetti
Per poter accedere alle sezioni successive del programma è necessario inserire il
proprio username e la propria password nel form delle preferenze visualizzato in
figura 5.25, a cui si accede dal menu del form dei progetti. La coppia username e
password viene resettata dopo una sincronizzazione e memorizzata sul dispositivo.
Se l’utente che sta usando il programma non corrisponde a quello impostato al
momento della sincronizzazione non è possibile proseguire oltre.
Se l’utente ha effettuato correttamente il login, cliccando sul bottone “Apri” del
form dei progetti può accedere all’elenco delle località che fanno parte del progetto
selezionato, come mostrato in figura 5.26. Il pulsate “<” consente di tornare alla
119
5 – Il programma su Palm
Figura 5.25.
Figura 5.26.
Schermata delle preferenze
Schermata con l’elenco delle località
120
5 – Il programma su Palm
schermata precedente, mentre con il pulsante “Apri” si accede alla schermata di
figura 5.27 in cui sono riportati in modo più esteso e chiaro i dettagli inerenti alla
località selezionata e sono visualizzati dei nuovi pulsanti che consentono di accedere
alle sue parti: il diario di scavo, la galleria fotografica e l’elenco dei reperti.
Figura 5.27.
Schermata con i dettagli di una località
Il form del diario di scavo si presenta come in figura 5.28: nella parte superiore
c’è l’elenco degli articoli del diario ordinati in modo decrescente per data. Selezionando un articolo viene compilato automaticamente il campo sottostante in cui sono
mostrati l’autore, la data di creazione e modifica e il testo. Dei tre pulsanti presenti
al fondo del form: “Cancella” cancella l’articolo selezionato, “Nuovo” ne fa creare
uno nuovo, “Modifica” fa modificare l’articolo corrente. Tutte e tre le operazioni
sono sottoposte ad un controllo sui permessi dell’utente e vengono bloccate nel caso
in cui non si disponga delle necessarie autorizzazioni.
Se i requisiti sono soddisfatti, la creazione di un nuovo articolo o la modifica di
uno già esistente si effettuano in un form che si presenta come in figura 5.29. Dopo
aver compilato i campi si può scegliere se salvare l’articolo oppure annullare tutto e
tornare alla schermata precedente.
L’elenco dei reperti viene visualizzato come in figura 5.30: nella parte superiore è
la lista con i nomi dei reperti ordinati in modo decrescente per data. Quando l’utente
ne sceglie uno, sono compilati automaticamente i campi “Autore” e “Coordinate” e
viene popolata la lista sottostante con l’elenco dei riferimenti associati al reperto.
121
5 – Il programma su Palm
Figura 5.28.
Figura 5.29.
Schermata con l’elenco degli articoli di diario
Schermata per la modifica / creazione di un articolo
122
5 – Il programma su Palm
I bottoni “Cancella”, “Nuovo” e “Modifica” rispettivamente cancellano il reperto
selezionato (attenzione, il reperto e non il riferimento), ne creano uno nuovo oppure
modificano uno già esistente, sempre previa verifica della autorizzazioni. Il pulsante
“Vedi” visualizza invece il contenuto del riferimento selezionato.
Il form di creazione e modifica reperti non viene qui descritto perchè di esso se
ne parlerà più diffusamente nel capitolo successivo a proposito del GPS.
Figura 5.30.
Schermata con l’elenco dei reperti e relativi riferimenti
Se si vuole visitare la galleria fotografica bisogna cliccare sul pulsante “Galleria”
nel form dei dettagli della località per trovarsi di fronte alla schermata di figura
5.31. La disposizione degli elementi è quella ormai nota: in alto c’è l’elenco delle
immagini che compongono la galleria e sotto un campo di testo in cui vengono scritti
i dettagli dell’immagine quando ne viene selezionata una dalla lista. I pulsanti sul
fondo permettono di cancellare, creare e modificare le immagini, mentre il pulsante
“Vedi” visualizza la foto. Come specificato nei requisiti della sezione 5.4.1 al punto
nove, nella memoria del palmare sono contenute le sole immagini scattate dal dispositivo dopo l’ultima sincronizzazione, per cui solo queste sono visualizzabili; le altre
vengono omesse per risparmiare spazio.
Quando si vuole creare una nuova immagine o modificarne una già esistente si
opera nel form di figura 5.32. Oltre ai campi di testo da compilare per specificare
i dettagli da associare all’immagine, c’è il pulsante “Foto” che apre l’interfaccia di
123
5 – Il programma su Palm
Figura 5.31.
Figura 5.32.
Schermata con l’elenco delle immagini della galleria
Schermata per la creazione o modifica di un’immagine
124
5 – Il programma su Palm
Figura 5.33.
Schermata di gestione della fotocamera integrata
gestione della macchina fotografica integrata per quei dispositivi che ne possiedono
una (vedi figura 5.33).
125
Capitolo 6
Il GPS
6.1
Introduzione al GPS
Il sistema GPS (Global Positioning System) è un sistema satellitare con copertura
globale che consente di rilevare la propria posizione geografica e la propria altitudine
rispetto al livello del mare.
Figura 6.1.
Uno dei satelliti della rete GPS
Il progetto alla base del GPS nacque per opera del Dipartimento della Difesa
degli Stati Uniti a partire dagli anni ’70 e fu completato nel 1993. Inizialmente fu
progettato a scopi militari: il suo compito era quello di fornire un metodo di rilevamento della posizione per seguire gli spostamenti dei mezzi militari al suolo e la
navigazione di sommergibili e navi da guerra; fin dai primi anni ’90 però fu evidente
l’utilità del sistema anche a scopi civili, per cui si decise di rendere disponibile il servizio a tutti, pur continuando ad essere finanziato e gestito dal Dipartimento della
Difesa USA. Per questioni di sicurezza nazionale il segnale trasmesso dai satelliti che
126
6 – Il GPS
compongono il sistema GPS rimase differenziato fino all’anno 2000 in due differenti
livelli di precisione, in quella che veniva chiamata Selective Availability: un segnale
ad uso civile, trasmesso in chiaro, degradato alla fonte per consentire una correttezza nel rilevamento non inferiore ai 300 m, e un secondo segnale ad uso militare,
trasmesso cifrato, che consentiva una precisione molto maggiore, con incertezza inferiore al metro. Nel 2000 il presidente Bill Clinton decise di terminare la Selective
Availability e di aprire anche ai civili l’uso del segnale ad alta precisione, dando il
via alla diffusione di massa, a cui si sta assistendo in questi anni, di ricevitori GPS
a basso costo in grado di determinare la posizione con elevata precisione.
Il sistema GPS è costituito da 24 satelliti orbitanti ad un’altezza di circa 20000
km, di cui 21 effettivamente utilizzati nella trasmissione del segnale di georeferenziazione, mentre i restanti tre sono di scorta, ossia è previsto che entrino in azione solo
in caso di guasto o inoperatività degli altri. Ogni satellite ha una vita media prevista
di circa 10 anni, dopo i quali vanno sostituiti. Il segnale che viene trasmesso alle frequenze di 1.2 e 1.5 MHz contiene le cosiddette effemeridi, vale a dire le informazioni
necessarie a localizzare la posizione del satellite e il tempo di trasmissione.
I ricevitori GPS sono delle antenne in grado di agganciare la frequenza di trasmissione del segnale e ricavare da essi le informazioni necessarie alla determinazione
delle coordinate spaziali. Per ottenere questo risultato i ricevitori si basano sullo
scostamento esistente tra l’orario in cui il segnale è stato trasmesso e l’orario in cui
viene ricevuto. Se T1 è l’istante in cui il segnale viene trasmesso, T2 è l’istante in
cui viene ricevuto è c è la velocità delle onde elettromagnetiche nel vuoto, si ricava
che la distanza D tra antenna e satellite è:
D = c(T2 − T1 )
Conoscere la distanza da un solo satellite non è sufficiente a determinare la posizione
poiché, non sapendo nulla della relativa posizione dell’antenna (ad esempio se è su
una spiaggia o su una montagna e con che angolo vede il cielo) le posizioni possibili
ricadono in una sfera di raggio D. Se si ha il segnale di due satelliti la posizione è
determinata dall’incrocio di due sfere di raggio noto che geometricamente parlando
determinano un cerchio. Con il segnale di tre satelliti, la posizione del ricevitore
è data dall’intersezione di tre sfere di raggio noto che danno luogo a due punti, di
cui normalmente uno può essere scartato perché situato ad altissima quota (vedi
figura 6.2). Se ne deduce quindi che con tre satelliti è già possibile determinare la
posizione del ricevitore. Con il segnale di un quarto satellite la misurazione è certa
e precisa perché l’intersezione di quattro sfere individua un unico punto. In realtà
la misurazione non è precisissima, come già detto, ma è soggetta ad uno scarto di
circa mezzo metro dovuto principalmente alla differenza di precisione tra gli orologi
atomici al Cesio di cui sono dotati i satelliti e gli orologi al quarzo di cui sono dotati
i ricevitori.
127
6 – Il GPS
Figura 6.2.
Rilevamento della posizione dall’incrocio di tre sfere
I calcoli sopra riportati sono svolti dall’elettronica interna dei ricevitori e prendono il nome tecnico di fix. Normalmente la prima rilevazione è più lenta perché
necessita di una fase preliminare di sincronizzazione tra ricevitore e satelliti, mentre
le rilevazioni successive, che avvengono circa una volta al secondo, sono molto più
veloci.
Il principale difetto del sistema GPS è quello di poter funzionare solo se il cielo è
ben visibile, quindi non è possibile applicare le tecniche di rilevazione della posizione all’interno di edifici o grotte. Questo comporta che la mappatura dei reperti in
ArcheoMap possa procedere correttamente solo per i ritrovamenti avvenuti all’aria
aperta, negli altri casi rimane necessario affidarsi ad un sistema di grigliatura. Ad
esempio, nel caso di oggetti ritrovati all’interno di una tomba la soluzione proposta
è quella di georeferenziare l’ingresso della tomba, e poi di catalogare i reperti all’interno affidandosi ad una griglia di riferimento, cosa che comunque rientra già tra le
tecniche di misurazione adottate dagli archeologi.
6.2
Standard NMEA
NMEA sta per National Marine Electronics Associations ed è un’ente statunitense,
di cui fanno parte produttori e rivenditori di apparecchiature elettroniche in campo
nautico, che si occupa della definizione di alcuni standard utilizzati da tali apparecchi. Uno di questi, l’NMEA 0183, definisce le caratteristiche di interfacciamento
tra un dispositivo GPS e un calcolatore. Lo standard NMEA si occupa quindi di
128
6 – Il GPS
stabilire il tipo e la composizione dei messaggi che un’antenna GPS invia ad un computer o a un palmare per comunicargli le informazioni di localizzazione determinate
dopo la fase di fix. Si ricorderà dalla sezione precedente che lo standard GPS è nato
come ausilio alla navigazione delle navi da guerra, non deve quindi stupire che sia
proprio un ente che si occupa di apparecchiature marinare a definirne l’interfaccia
di comunicazione.
Il modello trasmissivo trattato nello standard NMEA è quello seriale: un unico
canale su cui i bit di informazione viaggiano uno per volta. Nel caso dei PC e
dei Palmari sono mezzi di comunicazione seriale le porte RS232, USB, bluetooth
e infrarossi. La velocità di riferimento è 4800 bps, ma sono comunque considerate
velocità superiori fino a 38.4 kbps.
I dati che un ricevitore GPS comunica ad un calcolatore sono delle frasi (o
sentence come definito nello standard) costituite da sequenze di caratteri ASCII e il
loro formato prevede un prefisso all’inizio, poi una serie di campi separati da virgola
senza spazi, ed i caratteri di “a capo” (CR + LF) per indicarne la fine.
$PREFISSO,campo1,campo2,...,campoN,CRLF
Lo standard NMEA, dovendo contemplare un’ampia varietà di apparecchiature, definisce un certo numero di frasi (circa una sessantina), ma nel caso dei GPS commerciali ne vengono utilizzate pochissime. In particolare una frase standard che tutti i
ricevitori GPS comunicano è quella che inizia con il prefisso “$GPRMC”.
$GPRMC (Recomended Minimum Specific) è una delle frasi più complete, comprendente dati essenziali relativi a data e ora del fix, posizione rilevata, velocità e qualità
della ricezione. I campi significativi trasmessi sono 10 e sono spiegati in dettaglio
nella tabella 6.1. Un esempio di stringa inviata dal ricevitore GPS è la seguente:
Campo
1
2
3
4
5
6
7
8
9
Formato
hhmmss.ss
A
nnnn.nn
A
nnnn.nn
A
n.n
n.n
ddmmyy
Tabella 6.1.
Descrizione
Ora
Stato: A = attivo, V = nullo
Latitudine
Emisfero: N = nord, S = sud
Longitudine
Verso: W = ovest, E = est
Velocità espressa in nodi
Direzione del movimento espressa in gradi
Data
Descrizione dei campi della frase $GPRMC
$GPRMC,204619.999,V,4530.6671,N,00916.9484,E,,,160706
129
6 – Il GPS
Le informazioni contenute sostanzialmente dicono che il messaggio è stato inviato
alle ore 20:46:19 del giorno 16/07/2006 e che la posizione rilevata è 45◦ 30.6671’ Nord,
009◦ 16.9484’ Est. Il secondo campo contiene il simbolo V, il che significa che la frase
di esempio è nulla, quindi va scartata (un motivo per cui l’informazione è nulla è
ad esempio perché si è perso il segnale del satellite). Si nota inoltre che non tutti i
campi sono presenti: nel caso del messaggio mostrato qui sopra i campi sette e otto
sono vuoti, ad esempio perché il ricevitore non è stato in grado di rilevarne il valore
oppure perché la particolare implementazione dello standard fornita dal costruttore
prevede di inviare questi dati in altri messaggi. I dati relativi ad ora e posizione
sono però presenti in tutte le sentence di questo tipo inviate da tutti i ricevitori.
6.3
Implementazione
Nell’ambito del progetto ArcheoMap il ricevitore GPS serve a realizzare la mappatura dei reperti. Lo scenario di utilizzo preso da riferimento prevede che gli archeologi
siano dotati di un dispositivo palmare dotato di ricevitore GPS; quando viene ritrovato un reperto l’utente può inserirlo direttamente nel programma e rilevarne sul
momento la posizione. Per raggiungere questo obiettivo è necessario innanzitutto
trovare un modo per far dialogare il palmare con il ricevitore; e in secondo luogo
effettuare il parsing delle frasi NMEA, ossia leggerle e distinguere il contenuto dei
vari campi.
6.3.1
Interfacciamento Palmare / GPS
I dispositivi di palmari dispongono di alcune interfacce seriali per comunicare con
altri apparecchi elettronici; i modelli più recenti sono dotati di interfaccia USB, Bluetooth e infrarossi, mentre i modelli più vecchi dispongono solamente dell’interfaccia
infrarossi e seriale RS232. Ognuna di queste interfacce utilizza lo stesso protocollo
di trasmissione, ma le modalità in cui viene aperta la connessione e la gestione degli
eventi associati è diverso da caso a caso. Per poter gestire la comunicazione verso
un GPS è dunque necessario sapere su quale porta questo è collegato e utilizzare i
comandi corretti per essa.
Per cercare di mantenere la modularità del codice, si è cercato di progettare
le classi per la comunicazione con il GPS in modo tale da slegarsi il più possibile dal tipo di hardware utilizzato. Si è dunque definito l’insieme di classi di
figura 6.3: una super-classe chiamata GPSConnector definisce gli aspetti comuni
della comunicazione verso il GPS, mentre un certo numero di classi derivate ne
sovrascrivono i metodi per adattarli alla specifica porta di comunicazione a cui è
connesso il dispositivo. Nella tabella 6.2 sono descritti brevemente i metodi della
super-classe GPSConnector. Come si vede dallo schema i metodi che necessitano di
130
6 – Il GPS
GPSConnector
−connected
+DeviceConnect()
+DeviceDisconnect()
+isConnected()
+ReadGPS()
+GetPosition()
BtGPSConnector
SerialGPSConnector
IrGPSConnector
+DeviceConnect()
+DeviceConnect()
+DeviceConnect()
+DeviceDisconnect()
+DeviceDisconnect()
+DeviceDisconnect()
+ReadGPS()
+ReadGPS()
+ReadGPS()
Figura 6.3.
Schema grafico delle classi di interfacciamento al GPS
Metodo
DeviceConnect()
DeviceDisconnect()
isConnected()
ReadGPS
GetPosition
Tabella 6.2.
Descrizione
Effettua la connessione al ricevitore GPS
Disconnette il ricevitore GPS
Restituisce true se il ricevitore è già connesso
Legge il flusso di dati emesso dal ricevitore
Indica la posizione ricavandola dalla frase $GPRMC
Documentazione dei metodi di GPSConnector
sovrascrittura sono DeviceConnect(), DeviceDisconnect() e ReadGPS(), che per
svolgere le proprie funzioni necessitano di conoscere le specifiche dell’hardware. I
metodi isConnected() e GetPosition() viceversa non necessitano di essere sovrascritti perché il primo effettua semplicemente un controllo sull’attributo booleano
connected, mentre il secondo si occupa di fare il parsing dei dati ottenuti dal ricevitore, quindi in entrambi i casi operazioni che sono indipendenti dall’hardware
utilizzato.
Quando nel codice deve essere interrogato il ricevitore GPS per ottenere la posizione, viene istanziata la classe specifica, ad esempio BtGPSConnector se l’antenna è
Bluetooth, ma per interagire vengono chiamati i metodi della classe GPSConnector.
In questo modo, sfruttando l’ereditarietà e il polimorfismo1 , se si cambia il tipo di
1
Si dice “polimorfismo” la proprietà della programmazione ad oggetti per cui, data una classe
padre e una classe figlia, è possibile chiamare sulla classe figlia i metodi della classe padre.
131
6 – Il GPS
connessione è sufficiente cambiare il solo tipo di oggetto da istanziare, mentre tutto
il resto del codice rimane il medesimo.
Per la creazione del prototipo del programma per palmari di ArcheoMap si è
deciso di dare implementazione della sola classe BtGPSConnector per la connessione
ai dispositivi Bluetooth, in quanto la maggior parte dei ricevitori GPS per apparecchi
mobile che si trovano in commercio sfruttano questo sistema di comunicazione.
6.3.2
Parsing delle frasi NMEA
All’interno del metodo GetPosition() della classe GPSConnector viene effettuata
una scansione dei dati trasmessi al palmare dal GPS e quando viene incontrata la
sequenza di caratteri $GPRMC vuol dire che il ricevitore sta trasmettendo la sentence
che contiene le informazioni sul fix da cui ricavare la posizione. L’operazione che
il software esegue prende il nome di parsing, intendendo con tale termine il processo atto ad analizzare il flusso continuo di dati proveniente dal dispositivo per
determinarne la struttura e verificarne la coerenza con quanto atteso.
$GPRMC
Ok
Ora
Errore
Est/Ovest
Stato
Longitudine
Latitudine
Nord/Sud
Figura 6.4.
Diagramma a stati di un parser NMEA
Il processo di parsing può essere modellato con la macchina a stati mostrata nella
figura 6.4. Una macchina a stati è un sistema dinamico in cui viene modellato un
processo discreto elencandone tutti gli stati possibili e tutte le transizioni che portano
da uno stato ad un altro. Nel caso del parsing di una frase NMEA gli stati possono
132
6 – Il GPS
essere identificati con il riconoscimento dei campi, più due stati ausiliari “Errore” e
“Ok” per contrassegnare il successo o l’insuccesso dell’operazione. Il funzionamento
di una macchina a stati può essere rappresentato tramite un diagramma in cui i
singoli stati sono mostrati come dei rettangoli dagli angoli smussati, e delle frecce
che li collegano per rappresentare le transizioni. Il punto di ingresso e di uscita del
diagramma sono indicati da un puntino e da un cerchio rispettivamente.
Nel caso della frase cercata, la macchina a stati che modella il parsing funziona
in questo modo:
1. All’avvio del metodo GetPosition(), si controlla se la stringa di testo corrente
inizia con la sequenza di caratteri $GPRMC;
2. Se cosı̀ non è si rimane sullo stato corrente fino a quando la condizione precedente non viene soddisfatta, al che ci si sposta nello stato successivo;
3. Se la stringa non è terminata, allora vuol dire che si è trovato il primo campo
della frase NMEA, quello contenente l’ora e ci si sposta allo stato successivo.
Se invece tale condizione non è soddisfatta vuol dire che si è verificato un
errore di trasmissione e si passa allo stato di errore;
4. Se al punto precedente non si è verificato errore, si testa nuovamente la stringa: se questa non è terminata, allora si è trovato il secondo campo della
frase NMEA, quello contenente la Latitudine, e ci si può spostare allo stato
successivo; altrimenti ci si sposta sulla condizione di errore;
5. Il funzionamento prosegue in questo modo fino all’ultimo stato, quello in cui
viene determinato il verso della longitudine (Est/Ovest), e se questa è corretta
si esce dalla macchina a stati.
Il sistema modellato rispetta tre requisiti essenziali delle macchine a stati: è
invariante (a parità di condizioni iniziali il risultato non cambia), è dinamico (evolve
nel tempo passando da una condizione ad un’altra in funzione dei dati di input e
degli stati precedenti) ed è discreto (le variabili di ingresso ed uscita, cosı̀ come
tutti gli stati intermedi, possono solo assumere valori discreti). Al termine del
processo di parsing il metodo GetPosition() restituisce perciò la posizione rilevata
dal ricevitore GPS, nel caso in cui tutti gli stati si succedano correttamente, oppure
un segnale di errore nel caso in cui il formato della stringa non sia quello atteso.
6.4
Il form di modifica e inserimento reperti
A questo punto si hanno gli strumenti necessari per capire tutte le funzionalità del
form di modifica e inserimento dei reperti, la cui trattazione era stata rimandata
nel capitolo precedente.
133
6 – Il GPS
Figura 6.5.
Schermata del form di modifica reperti
Nella figura 6.5 si vede un’immagine del form. Nella parte alta ci sono tre
campi di testo, di cui i primi due, il nome dell’autore e la data di creazione, sono
precompilati e non si possono modificare, mentre il terzo, il nome del reperto, deve
essere compilato dall’utente. In mezzo si trova il campo per l’inserimento delle
coordinate. Se si preme il bottone viene attivata la procedura di connessione al
GPS via Bluetooth.
Normalmente i dispositivi mobile tengono spento il Bluetooth per risparmiare
batteria e per ragioni di sicurezza (essendo il Bluetooth un collegamento Wireless è
una possibile fonte di intrusioni indesiderate nel sistema). Tenendo conto di questo,
il processo si sviluppa in questa sequenza:
1. Se il Bluetooth non è acceso, una finestra di dialogo chiede all’utente se vuole
accenderlo automaticamente;
2. Se la risposta alla domanda precedente è affermativa, avviene l’operazione
cosiddetta di discovery: il sistema operativo scansiona la rete alla ricerca di
dispositivi che utilizzino questo sistema di comunicazione;
3. I dispositivi rilevati sono elencati in una lista, da cui l’utente può selezionare
il GPS;
4. Una volta selezionato il ricevitore, viene effettuata la connessione vera e propria;
134
6 – Il GPS
5. A connessione stabilita il programma resta in ascolto sulla porta Bluetooth
fino a quando non arriva la frase $GPRMC da cui leggere la posizione; il tempo
d’attesa può variare da pochi secondi fino anche ad un minuto o due a seconda
della bontà del segnale di ricezione dai satelliti;
6. Una volta effettuato il parsing della frase NMEA, il campo di testo delle
coordinate viene compilato automaticamente dal programma;
7. La connessione al dispositivo viene terminata.
Alla fine del processo il nuovo reperto è mappato, in quanto se ne conosce la posizione
di ritrovamento, con uno scarto approssimativo di un metro nel caso dei comuni
dispositivi commerciali, ormai venduti a prezzi contenuti.
Nella parte bassa del form è contenuta la lista dei riferimenti. I bottoni “+” e
“−” a destra permettono di aggiungere e togliere elementi dalla lista. Quando si
vuole aggiungere un nuovo riferimento viene prima richiesto che tipo di riferimento
si intende collegare (immagine o articolo di diario) e viene quindi presentato un form
come quello di figura 6.6 da cui è possibile scegliere l’articolo da associare.
Figura 6.6.
Schermata del form di scelta degli articoli
Selezionando il bottone Scheda si apre infine il primo dei quattordici form per la
creazione / modifica della scheda ministeriale, mostrato nella figura 6.7.
135
6 – Il GPS
Figura 6.7.
Schermata del form di creazione della scheda ministeriale
136
Capitolo 7
La sincronizzazione tra palmare e
Database
7.1
Introduzione alla sincronizzazione dei palmari
Con il termine “sincronizzazione” si intende il coordinamento tra due fonti di elaborazione che operano su una risorsa condivisa per far sı̀ che tale risorsa sia allineata
e non presenti errori dovuti all’accesso concorrente. Tale definizione è generica e
si adatta ad una molteplicità di casi, per ognuno dei quali occorre studiare una
soluzione adatta. L’aspetto di interesse ai fini della presente tesi è lo studio della
sincronizzazione tra palmari e database server.
Nel caso dei dispositivi palmari la sincronizzazione è una funzionalità estremamente importante, per la quale viene fornito supporto sia dall’hardware del palmare
stesso sia da parte del sistema operativo. La ragione di questo risiede nella natura di
tali apparecchi: essendo dotati di capacità di memorizzazione molto limitate, sono
concepiti come sistemi di supporto per l’elaborazione dei dati in quelle condizioni
in cui l’impiego di un personal computer risulterebbe poco pratico o addirittura
impossibile, senza tuttavia poterne sostituire del tutto le funzionalità. Scopo della
sincronizzazione è salvare i dati modificati su PDA su un sistema di memorizzazione
più stabile, quale ad esempio un PC (nel caso di informazioni strettamente personali) o in un database server (nel caso di informazioni aziendali o di comune interesse).
La principale difficoltà che va affrontata nel progettare un sistema di sincronizzazione è la presenza di eventuali conflitti. Il palmare e il sistema di archiviazione
(PC o server ) sono degli elaboratori indipendenti che accedono in modo parallelo
ad una risorsa condivisa (i dati): al momento della sincronizzazione è dunque necessario verificare se ci sono conflitti, ed in tal caso, se possibile, risolverli. Si possono
normalmente adottare tre tipi di politiche differenti:
1. Sincronizzazione verso il server: i dati sono sempre copiati dal palmare verso il
137
7 – La sincronizzazione tra palmare e Database
server, e in caso di conflitto si sceglie di considerare valida la versione presente
sul palmare. Con questa politica il server contiene a tutti gli effetti una copia
di backup di quanto memorizzato su PDA;
2. Sincronizzazione verso il palmare: i dati sono sempre copiati dal server verso
il palmare, e in caso di conflitto si sceglie di considerare valida la versione
presente sul server;
3. Sincronizzazione a due vie: è il tipo di politica formalmente più corretto, ma
più complicato da gestire; le due versioni dei dati sono allineate ove possibile,
aggiungendo su PDA ciò che manca sul server e viceversa, e in caso di conflitto si può scegliere se considerare valida la versione più recente, oppure se
richiedere esplicitamente l’intervento umano per risolverlo.
Nel presente capitolo verrà studiato il problema della sincronizzazione tra i dati
contenuti nel database di ArcheoMap e quelli elaborati dagli archeologi sul palmare
in loro dotazione, analizzando i vari aspetti del problema e descrivendo la soluzione
proposta.
7.2
Requisiti per la sincronizzazione
Si vuole realizzare un sistema software che consenta la sincronizzazione tra i dati
presenti nel database server e quelli elaborati sul palmare. Il software ha duplice
scopo:
• Inizializzare il contenuto del palmare la prima volta che questo viene assegnato
ad un utente, caricando nella memoria del dispositivo i dati necessari;
• Assicurare l’allineamento tra la versione dei dati presente sul palmare dell’utente e quella mantenuta sul server di ArcheoMap.
Nello svolgere il secondo tipo di operazioni, occorre tenere in conto che tra le
due versioni dei dati possono esserci conflitti. Per come è strutturata la gestione
dei permessi in ArcheoMap, i dati inseriti da un utente (articoli del diario di scavo, immagini della galleria, schede ministeriali e reperti) possono essere modificati
unicamente dall’utente stesso oppure da un suo superiore (capo progetto e direttore scavo) per cui è ragionevole ritenere che tali conflitti non si verifichino troppo
frequentemente.
Volendo rendere il più centralizzata possibile la gestione delle informazioni di
ArcheoMap, il software che si occupa della sincronizzazione deve risiedere sul server
che ospita il database ed essere raggiungibile tramite collegamento di rete.
138
7 – La sincronizzazione tra palmare e Database
7.3
Inizializzazione del palmare
Nell’ambito del progetto di ArcheoMap ogni archeologo può venire dotato di un
palmare da utilizzare durante la campagna di scavo per annotare sul luogo le informazioni ritenute rilevanti, per poi immetterle, non appena possibile sul database
centrale. Quando un utente riceve il palmare, questo è come una tabula rasa: contiene solamente il programma di ArcheoMap ma nessun dato su cui lavorare. Per
effettuare l’inizializzazione per prima cosa l’utente deve inserire nell’apposito form
delle preferenze il proprio username e password. Effettua quindi la sincronizzazione
con il server, a seguito della quale vengono caricati nel palmare i dati di competenza dell’utente per permettergli di lavorare. Per svolgere questo tipo di operazione
il programma di sincronizzazione deve essere in grado di lavorare sul particolare
formato file utilizzato dai dispositivi Palm.
7.3.1
PDB, il formato file di PalmOS
I tradizionali personal computer conservano i dati su un dispositivo di memorizzazione permanente, l’hard-disk, fisicamente distinto dalla memoria volatile, la RAM,
in cui i dati sono suddivisi in cartelle e sotto-cartelle. Tale organizzazione gerarchica prende il nome di file system e necessita di un adeguato supporto da parte del
sistema operativo per essere letto e mantenuto. Nella maggior parte dei dispositivi
palmari non esiste un disco interno, esiste solamente una certa (ridotta) quantità
di memoria volatile, costantemente alimentata elettricamente dalle batterie, anche
quando il palmare è apparentemente spento. La memoria volatile viene utilizzata
contemporaneamente per conservare i dati e per l’esecuzione dei programmi. Per
una tale architettura l’uso di un file system non è una soluzione ottimale, per questo
PalmOS (il sistema operativo di Palm) non organizza i propri dati in cartelle o sottocartelle e il concetto di file è molto differente rispetto a quello noto dai Personal
Computer1 .
Tutti i dati del palmare sono organizzati in una struttura chiamata PDB, Palm
DataBase, il cui schema descrittivo è mostrato in figura 7.1. Ogni PDB è costituito
da un header in cui sono riportate informazioni a carattere globale quali il nome del
file, il tipo, il creatore del PDB, il numero di record di cui è composto e l’ordinamento
da applicare sui dati. Questi ultimi sono contenuti in una serie di record, ossia blocchi
di memoria, di dimensione non superiore ai 64KB, strutturati in un insieme di campi,
il cui numero e tipo dipendono dal genere di informazione che devono contenere. I
record sono disposti in memoria in locazioni diverse non necessariamente contigue
1
I dispositivi con PalmOS sono in realtà in grado di utilizzare delle schede di espansione di
memoria (Secure Digital o Memory Card, per lo più) per le quali esiste un file system e il concetto
di file è analogo a quello noto dai PC. Tuttavia, per compatibilità con i dispositivi meno recenti,
il software di ArcheoMap lavora esclusivamente sulla memoria interna e quindi sui PDB.
139
7 – La sincronizzazione tra palmare e Database
Figura 7.1.
Schema descrittivo della PDB
e, per tenere traccia della loro posizione, nell’header del PDB viene mantenuta
una lista dei puntatori ai record che lo compongono. In questo modo se occorre
aggiungere un nuovo record ad un PDB, il sistema operativo non deve spostare gli
altri dati ma è sufficiente allocare memoria e impostare opportunamente l’header.
Questo tipo di struttura ricorda molto da vicino le tabelle di un database, in cui i
record rappresentano le righe e i campi le colonne, ma l’analogia si limita a questo: i
PDB non dispongono infatti di un linguaggio di interrogazione come è l’SQL nel caso
dei database veri e propri, e l’accesso ai singoli record avviene in modo sequenziale
anziché indicizzato.
7.3.2
Classi Perl per la creazione dei PDB
L’API fornita da PalmOS non mette a disposizione strumenti Open Source per creare
e manipolare i PDB, occorre quindi rivolgersi altrove. La scelta è ricaduta su un
modulo scritto in Perl che mette a disposizione le funzioni adatte allo scopo.
Le informazioni che devono essere memorizzate nel palmare sono le stesse già
trattate nel database: località, progetti, articoli di diario, immagini, reperti e schede
ministeriali. Per ognuno di questi tipi di dato si è creata, a partire dagli strumenti
messi a disposizione dal modulo Perl, una classe apposita, il cui modello generico è
quello di figura 7.2. Gli attributi che sono passati al modulo Perl per la creazione
di un PDB sono tre:
• pdbName è il nome del PDB. Nella scelta del nome si è adottata la seguente
convenzione:
– Il PDB contenente l’elenco dei progetti, che è unico, ha nome am-projects.pdb;
140
7 – La sincronizzazione tra palmare e Database
PDBGeneric
−pdbName
−pdbCreator
−pdbType
+newRecord()
+packRecord()
+unpackRecord()
Figura 7.2.
Classe generica per la creazione dei PDB
– I PDB con l’elenco delle località appartenenti ad ogni progetto hanno nome am-locs-n.pdb dove n è la chiave primaria del progetto nel
database;
– I PDB con l’elenco degli articoli che compongono il diario di scavo di
ogni località hanno nome am-blog-n.pdb dove n è la chiave primaria
della località nel database;
– I PDB con l’elenco delle immagini che compongono la galleria fotografica
di ogni località hanno nome am-gal-n.pdb dove n è la chiave primaria
della località nel database;
– I PDB con l’elenco dei reperti appartenenti ad una località hanno nome
am-finds-n.pdb dove n è la chiave primaria della località nel database;
– Infine i PDB con l’elenco delle schede ministeriali appartenenti ad una
determinata località hanno nome am-sheet-n dove n è la chiave primaria
della località nel database.
• pdbCreator è una breve stringa della lunghezza massima di quattro caratteri
in cui è contenuto un identificativo della persona o della società che ha creato i
file; nel caso di ArcheoMap tale stringa è uguale per tutti i PDB ed è “TTam”;
• pdbType è un’altra stringa di quattro caratteri che identifica il tipo di dato
contenuto nel PDB. Nel caso di ArcheoMap le sigle utilizzate sono le seguenti:
– prjs per il PDB dei progetti;
– pjlo per i PDB delle località;
– blog per il diario di scavo;
– galr per la galleria;
141
7 – La sincronizzazione tra palmare e Database
– fnds per i reperti;
– msht per le schede ministeriali;
La coppia pdbCreator / pdbType consente di identificare in modo univoco
una tipologia di dati nella memoria del palmare. Ad esempio, se si vogliono
ottenere tutti i PDB dei diari di scavo è sufficiente ricercare quelli che hanno
nell’header creatore “TTam” e tipo “blog”.
I campi di cui è composto ogni record dipendono dal tipo di dato e ricalcano gli
attributi delle entità progettate per il database. Ad esempio nel caso di un PDB
per gli articoli di diario i campi sono gli attributi dello schema di figura 2.7. Oltre
ai campi derivati dal database, ogni record ne presenta tre aggiuntivi: in uno viene
riportata la data dell’ultima sincronizzazione; nel secondo la data di ultima modifica
del record sul palmare (nel caso in cui ne sia stata fatta una, altrimenti coincide con
la data di sincronizzazione); il terzo infine è un campo booleano che indica se nel
corso dell’ultima sincronizzazione si sono verificati dei conflitti. L’utilità di questi
campi aggiuntivi verrà spiegata in seguito.
Per gestire i record si sono definiti nelle classi tre metodi:
• newRecord(): crea la struttura del record che si vuole aggiungere al PDB
raccogliendone i campi costitutivi;
• packRecord(): trasforma il record creato precedentemente in una stringa di
bit da inserire in memoria. Questo tipo di operazione è necessaria perchè
i campi estratti dal database sono numeri o stringe in caratteri ASCII che
vanno compattati e ridotti in formato puramente binario;
• unpackRecord(): effettua l’operazione inversa del metodo precedente: dato
un record in forma binaria ne restituisce i singoli campi.
7.3.3
Processo di inizializzazione
Le classi definite secondo il modello visto nella sezione precedente vengono utilizzate
nel processo di inizializzazione per creare i PDB da installare nella memoria del
palmare. Tale processo si sviluppa secondo i passi descritti qui di seguito:
1. L’utente che riceve il palmare privo di dati apre il programma per immettervi
il proprio username e password;
2. Viene avviata la procedura di sincronizzazione via rete tramite il programma
HotSync che è parte integrante del sistema operativo PalmOS e perciò si trova
su ogni palmare;
142
7 – La sincronizzazione tra palmare e Database
3. Il software di sincronizzazione rileva la mancanza di PDB appartenenti ad
ArcheoMap (perché mancano PDB aventi creatore “TTam”) e riconosce quindi
che non si tratta di una normale sincronizzazione ma di una inizializzazione;
4. Lato server, viene aperta una connessione al database e si effettuano una serie
di query per ottenere i dati di competenza dell’utente che sta effettuando
l’inizializzazione. L’utente viene riconosciuto da username e password inserite
nelle preferenze;
5. Per ogni tipo di dato viene creato il corrispondente PDB assegnandogli nome,
creatore e tipo secondo le convenzioni stabilite più sopra;
6. Per ogni oggetto che va inserito nei PDB viene prima creato il record chiamando il metodo newRecord() e poi ridotto in forma binaria tramite il metodo
packRecord();
7. I PDB creati sono copiati nella memoria del palmare;
Al termine del processo l’utente si trova il dispositivo inizializzato, pronto all’uso. Se
infatti apre il programma di ArcheoMap trova l’elenco dei progetti di suo interesse
con i relativi contenuti.
7.4
HotSync, Coldsync e Conduit
Ogni palmare equipaggiato con PalmOS è dotato, di fabbrica, di un pacchetto software con cui iniziare ad utilizzare il dispositivo. Di tale pacchetto software fa parte
HotSync, il programma deputato alla sincronizzazione, di cui nella figura 7.3 è riportata la schermata di accesso. Dal menu in alto è possibile scegliere se il palmare
è connesso al computer con cui effettuare la sincronizzazione in modo diretto (per
mezzo di un cavo USB o seriale) oppure via rete, ed in tal caso permette di specificare se via modem o via TCP/IP. HotSync è anche in grado di sfruttare la connessione
via GPRS, utilizzando un cellulare che supporti questo protocollo di comunicazione
come mezzo per collegarsi alla rete Internet. Una volta scelta la modalità di connessione, l’utente deve cliccare sul bottone al centro della finestra per far avviare
il processo di sincronizzazione. HotSync si aspetta di trovare sull’altro capo della
comunicazione un programma residente in ascolto con cui scambiarsi le informazioni.
Tale programma, nel caso in cui la sincronizzazione debba avvenire verso un
personal computer, viene fornito gratuitamente da PalmOS e ha il nome di PalmDesktop. Pur svolgendo egregiamente i suoi compiti, presenta il problema di essere
disponibile solo per ambiente Microsoft Windows e dell’impossibilità di configurarlo
per l’utilizzo in ambiente server per accettare la connessione via rete di un certo
numero di utenti. Un software Open Source che risponde a tali requisiti è ColdSync,
143
7 – La sincronizzazione tra palmare e Database
Figura 7.3.
Schermata di apertura di HotSync
di cui si è fatto uso nel contesto di questa tesi. Quando ColdSync riceve una richiesta di sincronizzazione da HotSync risponde facendo eseguire un programma esterno
a cui egli provvede a passare come parametri le informazioni necessarie a lavorare
sui PDB. L’architettura di funzionamento prevede quindi che ColdSync si occupi
della sincronizzazione da un punto di vista generico, consentendo di instaurare una
connessione con il palmare e di creare, leggere o modificare i PDB nella memoria del
dispositivo; le operazioni specifiche che occorre effettuare sui dati vengono invece
devolute a dei programmi esterni, che ColdSync chiama al momento opportuno.
Questi programmi prendono il nome di “Conduit”. Per sapere quale Conduit
fare eseguire per trattare un determinato tipo di PDB deve essere scritto un file
di configurazione per ColdSync in cui si associa il tipo di PDB con il nome della
Conduit.
ColdSync distingue tra quattro diversi tipi di Conduit:
• Fetch Conduit: sono attivate subito dopo l’inizio della connessione e il loro
scopo è quello di creare o modificare la copia locale dei PDB prima che questi
vengano confrontati con la versione residente sul palmare;
• Dump Conduit: sono attivate prima di terminare la connessione e il loro
scopo è quello di aggiornare la copia locale dei PDB dopo che questi sono stati
modificati sul palmare;
144
7 – La sincronizzazione tra palmare e Database
• Sync Conduit: occupano la parte principale del processo di sincronizzazione
e il loro scopo è quello di realizzare un confronto tra i dati residenti in locale
e il contenuto dei PDB sul palmare per allinearne i contenuti;
• Install Conduit: sono attivate subito prima che un nuovo PDB venga caricaro nella memoria del palmare e il loro scopo è quello di permettere un
ultimo controllo del file prima di installarlo definitivamente nel dispositivo, ad
esempio per assicurarsi che sia nel formato corretto.
Una volta descritti gli strumenti messi a disposizione dal mondo Open Source
per la sincronizzazione tra un server e un palmare occorre scegliere quale tipo di
Conduit si intende sviluppare e che politica adottare per la risoluzione di eventuali
conflitti tra i dati.
7.5
La Conduit di sincronizzazione dei dati di ArcheoMap
Come richiesto nei requisiti, si deve sviluppare un sistema di sincronizzazione a due
vie, che non può essere ricondotto ad una semplice copia di dati, ma esige una
loro elaborazione per integrare il database con le modifiche effettuate su palmare e
viceversa.
La sincronizzazione a due vie può essere ottenuta tramite l’esecuzione di una
Fetch Conduit seguita da una Dump Conduit: i dati vengono prima aggiornati in
locale, poi le due versioni integrate l’una con l’altra, ed infine i PDB del palmare copiati sul server. Tale meccanismo, apparentemente molto semplice, presenta
tuttavia un paio di complicazioni:
• La sincronizzazione a due vie implementata in questo modo non tratta eventuali conflitti: dà per scontato che la versione presente sul server sia quella
corretta;
• Per come è strutturato il processo di sincronizzazione di ColdSync, le Fetch
Conduit e le Dump Conduit sono processi del tutto separati, e durante la loro
esecuzione viene garantita la connettività al palmare: infatti l’elaborazione
avviene esclusivamente sui dati copiati in locale per i quali non è necessario
colloquiare col dispositivo. Questo però significa che non è possibile interrogare
il palmare per ottenere le informazioni di autenticazione;
• Bisogna trovare un modo per gestire la copia su disco di file con lo stesso nome
ma appartenenti a persone diverse. Se ad esempio due utenti che collaborano
al medesimo sito di scavo (i cui palmari hanno quindi in memoria PDB con lo
145
7 – La sincronizzazione tra palmare e Database
stesso nome) effettuano la sincronizzazione nello stesso momento, è necessario
studiare un meccanismo per tener traccia di quali file appartengono ad un
utente e quali ad un altro.
Per le ragioni sopra elencate si è ritenuto preferibile scrivere una Sync Conduit
che, richiedendo la connessione con il dispositivo per poter essere eseguita, consente
di autenticare il palmare (e quindi l’utente a cui appartiene) nel momento stesso i
cui dati sono elaborati, e di poter gestire i PDB uno per volta, senza necessità di
farne una copia completa su disco, riducendo i rischi di gestione contemporanea dei
dati di più utenti.
Durante la scrittura della Sync Conduit di ArcheoMap si è fatto uso di una
serie di funzioni raccolte sotto il comune nome di SPC (Serialized Procedure Call ),
disponibili solo per tale tipo di Conduit, che offrono un’interfaccia di comunicazione
seriale con il palmare senza necessità di conoscere il protocollo di trasmissione che ne
sta alla base. Tra le funzioni offerte da SPC ve ne sono che permettono di ottenere
i singoli record di un PDB, di conoscere le informazioni mantenute da PalmOS per
ogni file (data di creazione e ultima modifica) e di leggere e impostare l’orologio di
sistema.
La procedura di sincronizzazione che si è progettata si svolge dunque nella
seguente serie di passi:
1. L’utente connette il palmare al server via rete e avvia il programma di HotSync
per effettuare la sincronizzazione;
2. Il software di ColdSync residente sul server rileva la presenza di PDB di ArcheoMap nel palmare, e riconosce che si tratta di una sincronizzazione e non
di una inizializzazione;
3. Viene avviata la Sync Conduit di ArcheoMap che si occupa di recuperare dalla
memoria del dispositivo la username e password dell’utente a cui è assegnato
il palmare e apre una connessione con il database;
4. Tramite le funzioni di SPC, la Sync Conduit elabora un PDB alla volta confrontando i record al suo interno con quanto contenuto nel database e trattando
quei record che generano conflitto;
5. Terminata l’elaborazione delle informazioni viene chiusa la connessione al database e i dati risultano allineati, fatti salvi quelli che hanno causato conflitto.
7.6
Trattamento dei conflitti di sincronizzazione
I conflitti si possono verificare sui dati perché questi sono stati modificati sul palmare
e sul database dopo l’ultima sincronizzazione. Per poter rilevare un conflitto è quindi
146
7 – La sincronizzazione tra palmare e Database
necessario tener traccia, per ogni record, di tre momenti: la data di ultima modifica
sul DB; la data di modifica sul palmare; e la data di ultima sincronizzazione. La
prima informazione risiede sul database, dove ogni entità ha come attributi una
data di creazione e una data di modifica. La data di ultima sincronizzazione e la
data di modifica sul palmare sono invece memorizzate tra i campi dei singoli record
contenuti nei PDB.
Durante il processo di sincronizzazione, prima di elaborare un record, si esegue
un algoritmo di verifica dei conflitti il cui flusso logico è riportato in figura 7.4. Nel
DS = DMP
and
Y
DS = DMD?
copia
Exit
N
Y
DS = DMP
su
and
Palm
DS < DMD?
N
copia
su
Database
Y
DS < DMP
and
DS = DMD?
N
Conflitto
Figura 7.4.
Algoritmo per la rilevazione di conflitti sui record
grafico, per brevità, si è indicato con DS la data di ultima sincronizzazione; con
DM P la data di ultima modifica sul palmare; ed infine con DM D la data di ultima
modifica sul database. Si possono verificare quattro condizioni:
1. Se le tre date coincidono allora i dati non hanno subito modifiche né sul
database né sul palmare, e quindi non è necessario elaborarli;
2. Se la data di modifica sul palmare coincide con la data di ultima sincronizzazione, ma la data di ultima modifica su DB è successiva, significa che la
versione residente sul database è più recente e quindi occorre aggiornare la
versione su palmare;
147
7 – La sincronizzazione tra palmare e Database
3. Viceversa, se la data di modifica sul database coincide con la data di ultima
sincronizzazione, ma la data di ultima modifica su palmare è successiva, significa che la versione residente sul dispositivo è più recente e occorre aggiornare
il database;
4. Se nessuna delle tre precedenti condizioni è verificata, allora i dati sono stati
modificati sia su palmare sia su DB e si è nelle condizioni di conflitto tra
versioni.
Qualora si cada nel caso quattro bisogna scegliere come procedere. Per decidere
quale politica adottare si deve tener conto che gli utenti di ArcheoMap si distinguono in due categorie: utenti normali, che possono modificare esclusivamente i dati da
loro stessi creati; e gli utenti privilegiati (direttore scavo e capo progetto) che possono modificare, oltre ai propri, anche i dati degli utenti che ricadono sotto la loro
responsabilità. Questo significa che un conflitto si può verificare solamente nel caso
in cui i dati immessi da un utente vengano modificati dopo l’ultima sincronizzazione
da un suo superiore.
La risoluzione del conflitto è complicata dalla presenza di due vincoli: un vincolo temporale, che suggerisce di considerare corretta la versione più recente; ed un
vincolo gerarchico che invece spinge a considerare valida la versione modificata dall’utente di grado superiore. I due criteri di scelta sono in contrapposizione, perché
non è detto che la versione modificata dall’utente di grado superiore sia anche la
più recente. Di comune accordo con i committenti del progetto, si è scelto di non
risolvere in modo automatico il conflitto, ma di limitarsi ad una segnalazione di esso
agli utenti interessati, demandando a questi la stesura di una versione definitiva da
memorizzare nel database.
Dal punto di vista implementativo, quando il software di sincronizzazione si
accorge della presenza di un conflitto di dati, imposta un apposito campo nel record
del PDB interessato, e spedisce agli utenti che hanno creato le versioni non allineate
una mail di avviso. Il software di ArcheoMap su palmare, quando deve visualizzare
il record in cui è notificato un conflitto, lo segnala in colore rosso. L’utente in questo
modo è avvisato e, consultando la mail, scopre quale dei suoi superiori ha modificato
i dati in concorrenza e accordarsi con questi per le necessarie correzioni.
148
Capitolo 8
Conclusione
Nella stesura del volume si è cercato di descrivere il lavoro svolto per il progetto Archeomap sotto un duplice punto di vista: quello teorico, con cui si sono prospettate
le diverse impostazioni che il progetto avrebbe potuto prendere, e quello reale, volto
a descrivere la soluzione adottata e a motivare le scelte che via via sono state individuate e accolte. L’obiettivo di quest’opera è infatti fornire al lettore l’idea della
complessità del progetto affrontato e le linee guida che hanno portato alla creazione
del prototipo.
Allo stato attuale è stata realizzata una versione beta del progetto, completa
delle soluzioni trattare nel corso dei capitoli e funzionante in ogni sua parte; inoltre
sono stati effettuati test per individuare e correggere gli eventuali errori. Questo è,
tuttavia, solo il punto di partenza per ulteriori sviluppi: in futuro il lavoro dovrà
essere presentato ad un numero rappresentativo di utenti generici, ossia archeologi
che potenzialmente potrebbero utilizzare questi strumenti, e valutare grazie al loro
contributo le modifiche e migliorie da adottare; il database dovrà essere completato
con maggiori informazioni; lo sviluppo dei software open source utilizzati o il lancio sul mercato di nuovi palmari potranno portare a nuove release del progetto. In
questa seconda fase di Archeomap sarà determinante l’appoggio delle società (Risolviamo e Towertech) che hanno supervisionato l’attività svolta e della I.I.C.E. che,
commissionato il progetto, ora è chiamata a valutarne il risultato.
C’è un ultimo aspetto da chiarire: l’innovatività di Archeomap. E’ giusto sottolineare che non è mai stato creato un sistema di mappatura di siti archeologici in
grado di seguire il lavoro degli studiosi in tutte le sue fasi: direttamente sul campo
grazie alla praticità dei dispositivi palmari per la raccolta delle informazioni, e in ambito decisionale grazie alla catalogazione dei singoli reperti, alla loro localizzazione e
mappatura tramite GPS nella speranza che dalla condivisione delle opinioni e delle
esperienze dei gruppi di ricercatori si possano trarre suggerimenti per indirizzare le
future campagne di scavo.
L’archeologia affascina ed è ancora in gran parte terreno inesplorato per l’utilizzo
149
8 – Conclusione
delle nuove tecnologie come ausilio per gli esperti di settore o come strumento di
diffusione verso il grande pubblico che accoglie sempre con grande fervore le notizie
di nuove scoperte sul nostro passato. Questa situazione potrebbe portare alla messa
a punto di nuove funzionalità in Archeomap attualmente non previste, o a utilizzi
diversi da quelli a cui si era inizialmente pensato che richiederebbero sviluppi del
progetto nuovi e del tutto inimmaginabili.
150
Capitolo 9
Appendice
9.1
Codice per creazione del database
Viene qui di seguito riportato il codice SQL per la creazione del database in PostgreSQL.
CREATE TABLE a r t i c o l o (
i d A r t i c o l o i n t e g e r NOT NULL,
t e s t o t e x t NOT NULL,
t i t o l o t e x t NOT NULL,
d a t a i n s e r i m e n t o timestamp NOT NULL,
d a t a m o d i f i c a timestamp ,
v i s i b i l e boolean ,
i d A u t o r e i n t e g e r NOT NULL,
i d M o d i f i c a t o r e i n t e g e r NOT NULL,
i d L o c a l i t a i n t e g e r NOT NULL
);
CREATE TABLE a u t o r i z z a z i o n e (
idPermesso s e r i a l NOT NULL,
i d U t e n t e i n t e g e r NOT NULL,
i d P r o g e t t o i n t e g e r NOT NULL,
i d L o c a l i t a i n t e g e r NOT NULL
);
CREATE TABLE immagine (
idImmagine s e r i a l NOT NULL,
note t e x t ,
d a t a i n s e r i m e n t o timestamp NOT NULL
151
9 – Appendice
d a t a m o d i f i c a timestamp NOT NULL,
f i l e c h a r a c t e r v a r y i n g ( 1 0 0 ) NOT NULL,
i d A u t o r e i n t e g e r NOT NULL,
i d M o d i f i c a t o r e i n t e g e r NOT NULL,
i d L o c a l i t a i n t e g e r NOT NULL
);
CREATE TABLE l o c a l i t a (
i d L o c a l i t a s e r i a l NOT NULL,
c i t t a c h a r a c t e r v a r y i n g ( 2 0 ) NOT NULL,
comune c h a r a c t e r v a r y i n g ( 2 0 ) NOT NULL,
n a z i o n e c h a r a c t e r v a r y i n g ( 2 0 ) NOT NULL,
s c a v o b o o l e a n DEFAULT t r u e NOT NULL,
i n d i r i z z o character varying (50) ,
coordinate character varying (25) ,
d e s c r i z i o n e t e x t NOT NULL,
i n d i r i z z o i n t e r n e t text ,
note t e x t ,
t e l e f o n o text ,
email text ,
i n d i c a z i o n i text ,
d a t a i n i z i o timestamp with time zone
DEFAULT now ( ) NOT NULL,
d a t a f i n e timestamp with time zone ,
nome nuovo c h a r a c t e r v a r y i n g ( 5 0 ) NOT NULL,
nome antico c h ara ct e r varying ( 5 0 ) ,
f l a g p u b b l i c o b o o l e a n DEFAULT t r u e NOT NULL,
i d P r o g e t t o i n t e g e r NOT NULL,
e l i m i n a t o b o o l e a n DEFAULT f a l s e NOT NULL
);
CREATE TABLE p r o g e t t o (
i d P r o g e t t o i n t e g e r NOT NULL,
nome c h a r a c t e r v a r y i n g ( 5 0 ) NOT NULL,
d e s c r i z i o n e t e x t NOT NULL,
i n d i r i z z o i n t e r n e t text ,
email text ,
t e l e f o n o text ,
d a t a a p e r t u r a timestamp with time zone
DEFAULT now ( ) NOT NULL,
d a t a f i n e timestamp with time zone
152
9 – Appendice
);
CREATE TABLE permesso (
idPermesso s e r i a l NOT NULL,
t i p o p e r m e s s o c h a r a c t e r v a r y i n g ( 2 0 ) NOT NULL
);
CREATE TABLE r e p e r t o (
i d R e p e r t o s e r i a l NOT NULL,
nome t e x t NOT NULL,
d a t a i n s e r i m e n t o timestamp NOT NULL,
d a t a m o d i f i c a timestamp NOT NULL,
coordinate character varying (25) ,
i d A u t o r e i n t e g e r NOT NULL,
i d M o d i f i c a t o r e i n t e g e r NOT NULL,
i d L o c a l i t a i n t e g e r NOT NULL,
e l i m i n a t o b o o l e a n DEFAULT f a l s e NOT NULL
);
CREATE TABLE r i f e r i m e n t o (
i d R i f e r i m e n t o s e r i a l NOT NULL,
i d R e p e r t o i n t e g e r NOT NULL,
i d O g g e t t o i n t e g e r NOT NULL,
t i p o i n t e g e r NOT NULL,
d a t a i n s e r i m e n t o timestamp NOT NULL,
i d U t e n t e i n t e g e r NOT NULL
);
CREATE TABLE s c h e d a m i n i s t e r i a l e (
i d s e r i a l NOT NULL,
u n i t a s t r a t i g r a f i c a text ,
n c a t a l o g o g e n e r a l e text ,
n c a t a l o g o i n t e r n a z i o n a l e text ,
l o c a l i t a i n t e g e r NOT NULL,
anno t e x t ,
area text ,
saggio text ,
s e t t o r e text ,
ambiente t e x t ,
quadrato t e x t ,
quote t e x t ,
153
9 – Appendice
us nat text ,
u s a r t text ,
piante text ,
s e z i o n i text ,
p r o s p e t t i text ,
d e f i n i z i o n e p o s i z i o n e text ,
c r i t e r i d i s t i n z i o n e text ,
modo formazione t e x t ,
componenti organici text ,
componenti inorganici text ,
c o n s i s t e n z a text ,
c o l o r e text ,
misure t e x t ,
s t a t o c o n s e r v a z i o n e text ,
d e s c r i z i o n e text ,
s e q f i s i c a u g u a l e a text ,
s e q f i s i c a s i l e g a a text ,
s e q f i s i c a g l i s i a p p o g g i a text ,
s e q f i s i c a s i a p p o g g i a a text ,
s e q f i s i c a c o p e r t o d a text ,
s e q f i s i c a c o p r e text ,
s e q f i s i c a t a g l i a t o d a text ,
s e q f i s i c a t a g l i a text ,
s e q f i s i c a r i e m p i t o d a text ,
s e q f i s i c a r i e m p i e text ,
s e q s t r a t i g r a f i c a p o s t e r i o r e text ,
s e q s t r a t i g r a f i c a a n t e r i o r e text ,
o s s e r v a z i o n i text ,
i n t e r p r e t a z i o n e text ,
e l e m e n t i d a t a n t i text ,
datazione text ,
p e r i o d o o f a s e text ,
d a t i q u a l i t a t i v i r e p e r t i text ,
campionature t e x t ,
f l o t t a z i o n e text ,
s e t a c c i a t u r a text ,
a f f i d a b i l i t a s t r a t i g r a f i c a text ,
d i r e t t o r e s c i e n t i f i c o text ,
d a t a i n s e r i m e n t o timestamp NOT NULL,
d a t a m o d i f i c a timestamp NOT NULL,
i d A u t o r e i n t e g e r NOT NULL,
154
9 – Appendice
i d M o d i f i c a t o r e i n t e g e r NOT NULL
);
CREATE TABLE u t e n t e (
i d U t e n t e s e r i a l NOT NULL,
nome c h a r a c t e r v a r y i n g ( 8 0 ) NOT NULL,
cognome c h a r a c t e r v a r y i n g ( 8 0 ) NOT NULL,
username c h a r a c t e r v a r y i n g ( 2 0 ) NOT NULL,
password c h a r a c t e r v a r y i n g ( 2 0 ) NOT NULL,
e m a i l c h a r a c t e r v a r y i n g ( 8 0 ) NOT NULL,
l i n g u a c h a r a c t e r ( 2 ) NOT NULL
);
9.2
Codice del mapfile
Viene qui di seguito riportato il codice del mapfile utilizzato per la definizione del
funzionamento di MapServer.
MAP
UNITS DD
EXTENT 6 . 3 3 3 5 . 5 0 0 1 9 . 6 3 4 9 . 0 0
RESOLUTION 360
SHAPEPATH ” data /”
IMAGECOLOR 164 221 255
FONTSET ” f o n t s / f o n t s . l i s t ”
SYMBOLSET ” symbols / symbols35 . sym”
NAME ”ITALIA”
STATUS ON
OUTPUTFORMAT
NAME png
IMAGEMODE RGB
DRIVER ”GD/PNG”
MIMETYPE ” image /png”
EXTENSION ”png”
FORMATOPTION ”INTERLACE=OFF”
END
WEB
TEMPLATE
’ i n d e x . html ’
155
9 – Appendice
IMAGEPATH ’ / opt / archeomap /www/tmp / ’
IMAGEURL ’ / tmp / ’
END
PROJECTION
” p r o j=l a t l o n g ”
e l l p s=WGS84
END
REFERENCE
IMAGE ” g r a p h i c s / r e f e r e n c e . j p g ”
EXTENT 6 . 3 3 3 5 . 5 0 0 1 9 . 6 3 4 9 . 0 0
SIZE 200 205
STATUS ON
MINBOXSIZE 10
COLOR −1 −1 −1
OUTLINECOLOR 255 0 0
END
SCALEBAR
IMAGECOLOR 102 153 204
LABEL
COLOR 255 255 255
SIZE TINY
END
STYLE 1
SIZE 200 2
COLOR 255 255 255
UNITS KILOMETERS
INTERVALS 4
TRANSPARENT OFF
STATUS ON
END
LEGEND
KEYSIZE 12 12
IMAGECOLOR 255 255 255
LABEL
TYPE BITMAP
SIZE MEDIUM
COLOR 0 0 0
156
9 – Appendice
END
POSITION LR
STATUS ON
TEMPLATE ” l e g e n d . html ”
END
# layer dei confini geografici
LAYER
NAME boundary
DATA ” Country Boundaries 3”
STATUS ON
PROJECTION
” p r o j=l a t l o n g ”
” e l l p s=WGS84”
”datum=WGS84”
END
TYPE POLYGON
TRANSFORM ON
METADATA
NOME ” N a z i o n i ”
END
TEMPLATE ’ n a z i o n i . html ’
CLASSITEM ”COLOR MAP”
LABELITEM ”CNTRY NAME”
CLASS
COLOR 170 178 137
OUTLINECOLOR 238 238 187
END
END
LAYER
NAME boundary2
DATA ” Country Boundaries 3”
STATUS ON
PROJECTION
” p r o j=l a t l o n g ”
” e l l p s=WGS84”
”datum=WGS84”
END
TYPE POLYGON
TRANSFORM ON
157
9 – Appendice
METADATA
NOME ” N a z i o n i ”
END
TEMPLATE ’ n a z i o n i . html ’
CLASSITEM ”COLOR MAP”
LABELITEM ”CNTRY NAME”
CLASS
COLOR 170 178 137
OUTLINECOLOR 0 0 0
LABEL
COLOR 0 0 180
TYPE TRUETYPE
FONT a r i a l −bold
SIZE 8
ANTIALIAS TRUE
POSITION AUTO
PARTIALS FALSE
MINDISTANCE 0
BUFFER 0
END
END
END
LAYER
NAME bound
DATA ” Country Boundaries 3”
STATUS ON
PROJECTION
” p r o j=l a t l o n g ”
” e l l p s=WGS84”
”datum=WGS84”
END
TYPE POLYGON
TRANSFORM ON
METADATA
NOME ” Contorno ”
END
CLASSITEM ”COLOR MAP”
LABELITEM ”CNTRY NAME”
CLASS
OUTLINECOLOR 0 0 0
158
9 – Appendice
END
END
# l a y e r con l e immagini d e i
LAYER
NAME ” r a s t e r ”
DATA ” i t a l i a . t i f ”
TYPE r a s t e r
STATUS OFF
METADATA
NOME ” L i v e l l i ”
END
CLASSITEM ” [ p i x e l ] ”
CLASS
EXPRESSION ( [ p i x e l ]
COLOR 139 146 112
END
CLASS
EXPRESSION ( [ p i x e l ]
COLOR 158 160 113
END
CLASS
EXPRESSION ( [ p i x e l ]
COLOR 176 172 124
END
CLASS
EXPRESSION ( [ p i x e l ]
COLOR 196 185 131
END
CLASS
EXPRESSION ( [ p i x e l ]
COLOR 217 199 135
END
CLASS
EXPRESSION ( [ p i x e l ]
COLOR 208 190 128
END
CLASS
EXPRESSION ( [ p i x e l ]
COLOR 204 180 120
END
159
r i l i e v i montuosi
>= 10 AND [ p i x e l ] < 200)
>= 200 AND [ p i x e l ] < 400)
>= 400 AND [ p i x e l ] < 600)
>= 600 AND [ p i x e l ] < 800)
>= 800 AND [ p i x e l ] < 1000)
>= 1000 AND [ p i x e l ] < 1100)
>= 1100 AND [ p i x e l ] < 1200)
9 – Appendice
CLASS
EXPRESSION ( [ p i x e l
COLOR 195 170 116
END
CLASS
EXPRESSION ( [ p i x e l
COLOR 190 160 108
END
CLASS
EXPRESSION ( [ p i x e l
COLOR 182 150 101
END
CLASS
EXPRESSION ( [ p i x e l
COLOR 179 155 111
END
CLASS
EXPRESSION ( [ p i x e l
COLOR 173 158 127
END
CLASS
EXPRESSION ( [ p i x e l
COLOR 170 162 139
END
CLASS
EXPRESSION ( [ p i x e l
COLOR 165 168 151
END
] >= 1200 AND [ p i x e l ] < 1400)
] >= 1400 AND [ p i x e l ] < 1600)
] >= 1600 AND [ p i x e l ] < 1800)
] >= 1800 AND [ p i x e l ] < 2000)
] >= 2000 AND [ p i x e l ] < 2200)
] >= 2200 AND [ p i x e l ] < 2400)
] >= 2400)
END
# l a y e r con l a d i s l o c a z i o n e d e l l e p r i n c i p a l i c i t t à
LAYER
NAME c i t y
DATA ” B Major C i t i e s 1”
TOLERANCEUNITS KILOMETERS
TOLERANCE 20
STATUS ON
PROJECTION
” p r o j=l a t l o n g ”
” e l l p s=WGS84”
”datum=WGS84”
160
9 – Appendice
END
TYPE POINT
TEMPLATE ’ c i t t a . html ’
CLASSITEM ”STATUS”
LABELITEM ”CITY NAME”
METADATA
NOME ” C i t t à ”
END
CLASS
NAME ” C i tt a ’ ”
SYMBOL ’ c i r c l e ’
SIZE 5
COLOR 0 0 0
OUTLINECOLOR 0 0 0
LABEL
COLOR 0 0 0
SHADOWCOLOR 255 255 255
SHADOWSIZE 1 1
TYPE TRUETYPE
FONT a r i a l −bold
SIZE 8
ANTIALIAS TRUE
POSITION UC
PARTIALS TRUE
MINDISTANCE 0
BUFFER 0
END
END
END
# l a y e r con l ’ o r o g r a f i a d e l l ’ I t a l i a
LAYER
NAME r i v e r s
DATA ” R i v e r s 2”
STATUS OFF
PROJECTION
” p r o j=l a t l o n g ”
” e l l p s=WGS84”
”datum=WGS84”
END
TOLERANCEUNITS KILOMETERS
161
9 – Appendice
TOLERANCE 20
TEMPLATE ’ r i v e r . html ’
TYPE LINE
CLASSITEM ”TYPE”
LABELITEM ”NAME”
METADATA
NOME ” Fiumi ”
END
CLASS
NAME ” Fiumi ”
COLOR 0 18 122
LABEL
COLOR 0 18 122
SHADOWCOLOR 255 255 255
SHADOWSIZE 2 2
TYPE TRUETYPE
FONT a r i a l −bold
SIZE 8
ANTIALIAS TRUE
POSITION CC
PARTIALS TRUE
MINDISTANCE 0
BUFFER 0
END
END
END
LAYER
NAME water
DATA ”Water B o di e s 2”
STATUS ON
PROJECTION
” p r o j=l a t l o n g ”
” e l l p s=WGS84”
”datum=WGS84”
END
TOLERANCEUNITS KILOMETERS
TOLERANCE 10
TYPE POLYGON
METADATA
NOME ” Laghi ”
162
9 – Appendice
END
TEMPLATE ’ water . html ’
CLASSITEM ”TYPE”
LABELITEM ”NAME”
CLASS
NAME ” Laghi ”
COLOR 29 73 212
LABEL
COLOR 56 165 255
SHADOWCOLOR 0 0 0
SHADOWSIZE 2 2
TYPE TRUETYPE
FONT a r i a l −bold
SIZE 8
ANTIALIAS TRUE
POSITION CC
PARTIALS TRUE
MINDISTANCE 0
BUFFER 0
END
END
END
#l a y e r con l a r a p p r e s e n t a z i o n e d e l l e p r i n c i p a l i s t r a d e
LAYER
NAME s t r e e t
DATA ” S t r e e t s and R a i l r o a d s 1”
STATUS OFF
PROJECTION
” p r o j=l a t l o n g ”
” e l l p s=WGS84”
”datum=WGS84”
END
TOLERANCEUNITS KILOMETERS
TOLERANCE 20
TYPE LINE
METADATA
NOME ” S t r a d e ”
END
TEMPLATE ’ s t r e e t . html ’
CLASS
163
9 – Appendice
NAME ” S t r a d e ”
COLOR 255 204 56
END
END
#l a y e r che sovrappone una g r i g l i a a l l a mappa
LAYER
NAME ” g r i d ”
PROJECTION
” p r o j=l a t l o n g ”
” e l l p s=WGS84”
”datum=WGS84”
END
TYPE LINE
STATUS OFF
METADATA
NOME ” G r i g l i a ”
END
CLASS
COLOR 0 0 0
LABEL
TYPE BITMAP
SIZE MEDIUM
COLOR 255 128 89
END
END
GRID
MINSUBDIVIDE 64
MAXSUBDIVIDE 64
LABELFORMAT ”DDMMSS”
END
END
#l a y e r con l ’ e l e n c o d e l l e l o c a l i t à d i ArcheoMap
LAYER
NAME archeo−l o c
DATA ” archeo−l o c ”
TOLERANCEUNITS KILOMETERS
TOLERANCE 20
STATUS ON
PROJECTION
164
9 – Appendice
” p r o j=l a t l o n g ”
” e l l p s=WGS84”
”datum=WGS84”
END
TYPE POINT
TEMPLATE ’ s i t i . html ’
CLASSITEM ”NAME”
LABELITEM ”NAME”
LABELMAXSCALE 40000000
METADATA
NOME ” S i t i ”
END
CLASS
NAME ” S i t i ”
SYMBOL ’ c i r c l e ’
SIZE 8
COLOR 255 0 0
OUTLINECOLOR 255 0 0
LABEL
COLOR 255 0 0
SHADOWCOLOR 0 0 0
SHADOWSIZE 1 1
TYPE TRUETYPE
FONT a r i a l −bold
SIZE 10
ANTIALIAS TRUE
POSITION UC
PARTIALS TRUE
MINDISTANCE 0
BUFFER 0
FORCE TRUE
END
END
END
END
#l a y e r con l ’ e l e n c o d e l l e l o c a l i t à d i ArcheoMap
LAYER
NAME archeo−r e p e r t i
DATA ” archeo−r e p e r t i ”
TOLERANCEUNITS KILOMETERS
165
9 – Appendice
TOLERANCE 20
STATUS OFF
PROJECTION
” p r o j=l a t l o n g ”
” e l l p s=WGS84”
”datum=WGS84”
END
TYPE POINT
TEMPLATE ’ r e p e r t i . html ’
CLASSITEM ”NAME”
LABELITEM ”NAME”
LABELMAXSCALE 40000000
METADATA
NOME ” R e p e r t i ”
END
CLASS
NAME ” R e p e r t i ”
SYMBOL ’ c i r c l e ’
SIZE 8
COLOR 128 77 0
OUTLINECOLOR 255 0 0
LABEL
COLOR 255 0 0
SHADOWCOLOR 0 0 0
SHADOWSIZE 1 1
TYPE TRUETYPE
FONT a r i a l −bold
SIZE 10
ANTIALIAS TRUE
POSITION UC
PARTIALS TRUE
MINDISTANCE 0
BUFFER 0
FORCE TRUE
END
END
END
END
166
Bibliografia
[1] Atzeni, Ceri, Paraboschi, Torlone, Basi di Dati, Mc Graw Hill, 1999
[2] Massimo Ruocchio, Progettare un database relazionale, articolo tratto dalla
rivista DEV 108 del maggio 2003
[3] Luca Sanarico, Ottimizzare le query, articolo tratto dalla rivista DEV 108 del
maggio 2003
[4] Tobias Ratschiller, Till Gerken, Web Application Development with PHP 4.0,
New Riders, 2000
[5] Lerdorf Rasmus, PHP. Pocket Reference, O’Reilly, 2003
[6] Eric A. Meyer, Cascading Style Sheets 2.0, Mc Graw Hill / Osborne, 2003
[7] Bill Kropla, Beginning MapServer, Open Source GIS Development, APress,
2006
[8] Jeff Thurston, Thomas K. Poiker, J. Patrick Moore, Integrated geospatial
technology : a guide to GPS, GIS, and data logging, Wiley Publishing, 2003
[9] Neil Rhodes & Julie McKeehan, Palm Programming: The Developer’s Guide,
O’Reilly 1998
[10] Lonnon R. Foster & Glenn Bachmann, PalmOS Programming, Wiley
Publishing, 2005
[11] Martin C. Brown, Perl. The Complete Reference, Mc Graw Hill / Osborne,
2001
167
Webografia
[1 ] http://www.postgresql.org/docs/7.4/interactive/index.html
Guida di riferimento di PostgreSQL
[2 ] http://www.apache.org/
Il sito ufficiale del Web Server Apache
[3 ] http://www.php.net/
Il sito ufficiale di PHP
[4 ] http://pear.php.net/manual/en/package.database.db.php
Guida di riferimento a PEAR::DB
[5 ] http://phpsavant.com/yawiki/
Il sito ufficiale del Template Engin Savant2
[6 ] http://mapserver.gis.umn.edu/
Il sito ufficiale di MapServer
[6 ] http://www.google.com/apis/maps/documentation/
Guida di riferimento per l’API di Google Maps
[7 ] http://www.palmos.com/dev/support/docs/palmos/
Guida ufficiale di riferimento per l’API di PalmOS
[8 ] http://www.coldsync.org/
Il sito ufficiale di ColdSync
168