SOMMARIO INDIETRO


Dal Medioevo ad oggi con Open SOurce

Di A. Cartelli

Sommario


Dalla tipologia degli articoli riportati in questa rivista appare evidente che stanno avendo ampia diffusione alcuni strumenti software (sia accessibili gratuitamente che di tipo commerciale) che consentono di estendere in vario modo le funzioni e le caratteristiche del Web (anche se sarebbe più corretto dire dell'HTML).
Nell'articolo di M. Andreiana, ad esempio, si gettano le basi per la realizzazione di un sistema in grado di consentire l'accesso e la gestione via Web di Basi dati relazionali.
Proprio su questo versante l'esperienza dell'autore [ 1 ], che già da alcuni anni ha avuto modo di utilizzare questi strumenti in alcuni progetti didattici, fa sì che si possa fare un ulteriore passo in avanti per analizzare, anche se in maniera sommaria, una loro applicazione ad un problema concreto.

L'idea è nata e si è sviluppata dall'analisi di un'esigenza emersa nell'ambito di uno studio congiunto che ha coinvolto la Facoltà di Lettere e Filosofia dell'Università di Cassino e la Scuola speciale per Archivisti e Bibliotecari dell'Università degli Studi di Roma "La Sapienza".
In estrema sintesi il problema si può così riassumere:

È apparso chiaro, fin dal primo momento, che la soluzione in grado di soddisfare tutte le esigenze poste poteva passare unicamente per l'adozione del canale di comunicazione Web, prevedendone un utilizzo non banale, che non si limitasse cioè a proporre pagine con elenchi di informazioni, ma che prevedesse un'elevata interazione client-server e la connessione ad una fonte stabile di informazioni organizzata sotto forma di base dati.
Di fatto, soluzioni più semplici che poggiassero sull'utilizzo convenzionale della posta elettronica (invio di messaggi da parte degli estensori delle schede informative), di file di testo e di tabelle provenienti da fogli elettronici, già sperimentate con successo in precedenti esperienze [ 2 ], sono state immediatamente scartate per le difficoltà intrinseche connesse alla sincronizzazione delle informazioni provenienti dai vari redattori e per la mole di lavoro cui sarebbe stato assoggettato chi si fosse assunto l'onere di fungere da coordinatore del gruppo di lavoro.

Nella bozza iniziale di progetto si sono pertanto individuate le seguenti esigenze:

  1. realizzazione di un sito Web distinto in due parti, una con accesso protetto per gli amministratori della base dati, l'altra libera per tutti coloro che fossero interessati alle informazioni contenute nella base dati
  2. interfacciamento del Web con un DBMS (sistema per la gestione di base dati) al quale demandare il compito di gestire le informazioni
  3. individuazione di una chiave primaria in grado di consentire un'agevole manipolazione delle informazioni da parte degli amministratori della base dati;
  4. individuazione di opportuni algoritmi in grado di consentirne un'interrogazione quanto più naturale possibile
Al di là di eventuali difficoltà connesse con l'individuazione degli algoritmi occorrenti a superare i problemi affacciati, un ulteriore vincolo al progetto è stato posto dall'esiguità dei fondi utilizzabili per il raggiungimento degli obiettivi prefissati, cosa che ha portato ad escludere il ricorso a strumenti disponibili sul mercato ma dai costi non confrontabili con le esigenze di quadratura dei conti poste dal bilancio.

La scelta del software di riferimento sia in termini di sistema operativo che di programmi di base ha risentito delle precedenti esperienze dell'autore e si è basata sull'adozione dei pacchetti seguenti:

Linux quale sistema operativo di riferimento, ampiamente noto per le sue caratteristiche di stabilità e affidabilità.

Apache come server Web, oltre che perché ampiamente utilizzato in Internet, soprattutto per la sua modularità e la sua capacità di interfacciarsi con software di vario tipo.

Postgres SQL per la gestione della base dati, in quanto integralmente disponibile come software Open Source, relazionale ed in grado di supportare il linguaggio di interrogazione SQL.

Php 3, linguaggio di script in grado di consentire, oltre alla gestione dinamica delle pagine Web, l'interfacciamento con svariati gestori di basi dati (tra i quali, ovviamente, Postgres SQL).

Tenuto conto del fatto che nell'articolo di Andreiana questo stesso software viene ampiamente descritto e ne viene analizzata in dettaglio l'installazione, in questa sede si trascurano gli aspetti appena elencati e si dà più spazio all'analisi delle problematiche emerse in sede di attuazione del progetto iniziale.

Una volta installato il sistema, effettuata la configurazione, avviato il postmaster (demone del gestore DMBS) e verificato il corretto funzionamento del software, mediante la sua interfaccia a caratteri si è proceduto alla creazione della base dati (costituita al momento da un'unica tabella) ed è iniziato il lavoro di redazione delle pagine HTML e php.
Per la pagina di riferimento si è scelto di utilizzare un FRAME nel quale riportare oltre ai dati identificativi delle strutture coinvolte due pulsanti che consentissero di entrare in una delle due aree: quella di amministrazione della base dati e quella della sua interrogazione rispettivamente.
Di seguito si riporta l'immagine che, a meno di qualche piccolo ritocco che potrà essere apportato al sito nel momento del passaggio alla versione definitiva, mostra la Home page:

Sito delle donne copiste
Home page del sito delle donne copiste

Cliccando su Amministra si accede ad una pagina con un FORM che chiede di fornire i dati di utente (nome e password) per essere abilitati all'accesso alle pagine dedicate all'amministrazione della base dati. Superato questo sbarramento si accede ad un menu mediante il quale scegliere se inserire nuove schede, modificare quelle esistenti o cancellarle.
Qualora si clicchi sul pulsante Interroga, invece, si accede ad un'ulteriore pagina nella quale vengono proposte due forme possibili di interrogazione della base dati: la prima propone l'elenco di tutti i nominativi presenti nella base dati con al seguito un set ridotto di informazioni relative a ciascuno di essi, la seconda presenta un FORM mediante il quale procedere ad un'interrogazione selettiva della base dati medesima.
Di seguito viene riportata l'immagine con il menu appena descritto.

Menu di interrogazione
Menu di interrogazione per l'accesso alla base dati delle Donne copiste

Nel caso in cui l'utente opti per l'interrogazione selettiva della base dati appare un FORM (riportato nell'immagine che segue) nel quale si può scegliere, in maniera del tutto arbitraria, di immettere o selezionare uno o più valori tra quelli riportati e con essi procedere all'interrogazione.
È opportuno rilevare che per i primi campi (nome, qualifica, intervallo temporale, luogo e nazione) si richiede di fornire la descrizione completa e precisa del valore da cercare affinché si possa ottenere una risposta; nel caso dei campi segnatura e testo, invece, anche una descrizione parziale e frammentaria (basata ad esempio su una parola o su una frazione di essa) può dar luogo ad una risposta positiva da parte del sistema.

Form di interrogazione
Form di interrogazione della base dati

La scrittura delle pagine php in grado di gestire la base dati non ha rappresentato un grosso problema. Maggiori risorse si sono dovute dedicare all'individuazione di strategie in grado di semplificare la gestione dell'amministrazione dei dati, tra queste si segnalano l'adozione di un codice identificativo da effettuarsi in fase di imissione dei dati della donna copista o l'individuazione di un algoritmo in grado di consentire la trasformazione delle scelte operate da un utente nel form in un numero, da utilizzare in una struttura a scelta multipla (SWITCH) per selezionare la corrispondente interrogazione SQL.

Nella tabella che segue viene riportato il listato HTML del Form corrispondente alla pagina web visualizzata nell'immagine precedente (si tenga presente che ci si trova in un FRAME). Come si può notare dal testo i dati immessi nei vari campi vengono trasmessi al file php query.php3 responsabile della vera e propria interrogazione.

<HTML>
<HEAD>
<TITLE>Interrogazione Base Dati delle Donne copiste<TITLE>
<HEAD>

<BODY BGCOLOR="#FFFFFF" TEXT="#000000" BACKGROUND="../images/sfondo.gif">
<CENTER><H2>Interrogazione archivio copiste<H2><CENTER>
<FORM METHOD=POST ACTION="./query.php3">
<UL><UL>
<P><B>Nome :  <B>
<INPUT TYPE="text" NAME="nome" MAXLENGTH=25 SIZE=20><P>
<P><B>Qualifica :  <B>
<INPUT TYPE="radio" NAME="qualifica" VALUE="L"> Laica
  <INPUT TYPE="radio" NAME="qualifica" VALUE="R"> Religiosa
  <INPUT TYPE="radio" NAME="qualifica" VALUE=" "> Altro<P>
<P><B>Intervallo temporale di riferimento :  <B>
<INPUT TYPE="text" NAME="data1" MAXLENGTH=4 SIZE=4>
      <INPUT TYPE="text" NAME="data2" MAXLENGTH=4 SIZE=4><P>
<P><B>Luogo :  <B>
<INPUT TYPE="text" NAME="luogo" MAXLENGTH=35 SIZE=30>
      <B>Nazione :  <B>
<INPUT TYPE="text" NAME="nazione" MAXLENGTH=6 SIZE=6><P>
<P><B>Segnatura :  <B>
<INPUT TYPE="text" NAME="segnatura" MAXLENGTH=70 SIZE=40><P>
<P><B>Testo :  <B>
<INPUT TYPE="text" NAME="testo" MAXLENGTH=50 SIZE=40><P>
<P> <P>
<TABLE><TR><TD><INPUT TYPE="reset" VALUE="Azzera"><TD><TD WIDTH=30><TD>
<TD><INPUT TYPE="submit" VALUE="Conferma interrogazione"><TD><TR><TABLE>
<FORM>
<UL><UL>
<P> <P>

...
</BODY>
</HTML>

Nella tabella che segue viene riportato il listato (parziale) della pagina php necessaria ad effettuare l'interrogazione della base dati (ovviamente sono stati modificati i dati relativi alla base dati stessa - che viene individuata con xxxx).
Nella struttura alternativa SWITCH sono poi riportate solo alcune delle opzioni che determinano l'interrogazione mediante costrutti SQL (le rimanenti sono ricavabili per completamento di quelle riportate).
Il risultato della query è costituito, come si intuisce dal listato, da una serie di schede, con i dati delle donne copiste individuate, che vengono scritte una di seguito all'altra nella pagina web che viene creata dal software php.

<HTML>
<HEAD>
<TITLE>Interrogazione della Base Dati delle Donne scriba<TITLE>

<HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" BACKGROUND="../images/sfondo.gif">
<CENTER>
<P><H2>Risultato dell'interrogazione<H2><P><CENTER>

<?
$alt=0;
if ($nome != "") $alt=1;
if ($qualifica != "") $alt += 10;
if (($data1 != "") || ($data2 != "")) $alt += 100;
if ($luogo != "") $alt += 1000;
if ($nazione != "") $alt += 10000;
if ($segnatura != "") $alt += 100000;
if ($testo != "") $alt += 1000000;
if ($biblio != "") $alt += 10000000;
$conn=pg_connect("","","","","xxxx");
switch ($alt) {
      ...
case 1001101:
$query=pg_exec($conn,"SELECT * FROM elenco WHERE nome='$nome' AND luogo='$luogo' AND testo LIKE '%$testo%' AND (data1='$data1' OR data2='$data2'
OR (data1<='$data2' AND '$data2'<=data2) OR (data1<='$data1' AND '$data1'<=data2)
OR ('$data1'<'data1 AND data2<'$data2')) ORDER BY data1, data2 ASC;");
$righe=pg_numrows($query);
break;
case 1001110:
$query=pg_exec($conn,"SELECT * FROM elenco WHERE qualifica='$qualifica' AND luogo='$luogo' AND testo LIKE '%$testo%' AND (data1='$data1' OR data2='$data2'
OR (data1<='$data2' AND '$data2'<=data2) OR (data1<='$data1' AND '$data1'<=data2)
OR ('$data1'<data1 AND data2<'$data2')) ORDER BY nome, data1, data2 ASC;");
$righe=pg_numrows($query);
break;
case 1001111:
$query=pg_exec($conn,"SELECT * FROM elenco WHERE nome='$nome' AND qualifica='$qualifica' AND luogo='$luogo' AND testo LIKE '%$testo%' AND (data1='$data1' OR data2='$data2'
OR (data1<='$data2' AND '$data2'<=data2) OR (data1<='$data1' AND '$data1'<=data2)
OR ('$data1'<data1 AND data2<'$data2')) ORDER BY data1, data2 ASC;");
$righe=pg_numrows($query);
break;
case 1010000:
$query=pg_exec($conn,"SELECT * FROM elenco WHERE nazione='$nazione' AND testo LIKE '%$testo%' ORDER BY nome, data1, data2 ASC;");
$righe=pg_numrows($query);
break;
case 1010001:
$query=pg_exec($conn,"SELECT * FROM elenco WHERE nome='$nome' AND nazione='$nazione' AND testo LIKE '%$testo%' ORDER BY data1, data2 ASC;");
$righe=pg_numrows($query);
break;
      ...
default:
print "<CENTER><B>Interrogazione impossibile - dati inconsistenti<B><CENTER>";
}
if ($righe > 0)
{
print "<UL>";
$cont=0;
while ($cont < $righe)
{ $v1 = pg_result($query,$cont,"nome");
    $v2 = pg_result($query,$cont,"qualifica");
    $v3 = pg_result($query,$cont,"data1");
    $v4 = pg_result($query,$cont,"data2");
    $v5 = pg_result($query,$cont,"luogo");
    $v6 = pg_result($query,$cont,"nazione");
    $v7 = pg_result($query,$cont,"segnatura");
    $v8 = pg_result($query,$cont,"testo");
    $v9 = pg_result($query,$cont,"biblio");
    print "<P>Nome :  ";
    print $v1;
    print "<BR>Qualifica :  ";
    print $v2;
    print "   -   Intervallo temporale :  ";
    print $v3;
    print "  -  ";
    print $v4;
    print "<BR>Luogo :  ";
    print $v5;
    print "     -   Nazione :  ";
    print $v6;
    print "<BR>Segnatura :  ";
    print $v7;
    print "<BR>Testo :  ";
    print $v8;
    print "<BR>Bibliografia :  ";
    print $v9;
    print "<P>";
    $cont++;
}
print "</UL>";
}
else
print "<P><CENTER><B>Nella base dati non è presente alcuna informazione<BR>
con le caratteristiche specificate<B><CENTER><P>";
pg_close($conn);
print "<P> </P>";
print "<CENTER><HR WIDTH=30%><P>
[ <A HREF=\"./quest.htm\"><B>Modalità di interrogazione</B></A> |
<A HREF=\"../home.htm\"><B>Home page</B></A> ]</P></CENTER>";
?>
</BODY>
</HTML>

La considerazione che viene immediata al termine di questa breve descrizione è la maturità raggiunta da molti dei progetti nati spontaneamente in rete, che consentono di ottenere risultati pregevoli in campi non necessariamente amatoriali o personali.
Al di là di ogni considerazione è innegabile, però, che la possibilità di condurre ricerche, in molti settori disciplinari, si concretizza grazie all'apporto del software Open Source ed allo sviluppo di competenze specifiche nell'utilizzo di questo tipo di software.
È auspicabile che il circolo virtuoso che vede impegnati numerosi studiosi nella ricerca di nuovi strumenti software e nel miglioramento delle loro caratteristiche cresca sempre di più e contribuisca al progressivo arricchimento del patrimonio culturale dell'umanità.

  1. A. Cartelli, Linux e didattica, ovvero utilizzo di Linux in un progetto didattico-educativo, Convegno LIME '98 - Linux Meeting 1998, 7-9 Ottobre 1998, Roma
    reperibile in: http://www.let.unicas.it/ricerca/cartan1.htm
  2. A. Cartelli, M. Palma, BMB: la bibliografia dei manoscritti beneventani in rete, XLV Congresso Nazionale dell'Associazione Italiana Biblioteche, Roma 16-19 maggio 1999, a cura di E. Frustaci e M. Guerrini
    reperibile in: http://www.let.unicas.it/ricerca/cartan2.htm


Copyright © 2000 A. Cartelli in LGEI n. 2 Anno IV
SOMMARIO INDIETRO