| Consigli PC  |

 

 

 ITALIA UMTS

Flying in the net!

black.gif (50 bytes)
 

www.calshop.biz

 
 

Italia UMTS nasce da una idea del team di calshop.biz e vuole essere nella rete un punto di riferimento nel settore dell'informazione e.
© 2002 - 2004 ItaliaUMTS Powered by calshop  -  All Rights Reserved.

 
black.gif (50 bytes)
 

Google
 
Web www.calshop.biz
 


Asp: la guida introduttiva

1 | 2 | 3 | 4 

ASP: la guida introduttiva

Capitolo 11 - Un motore di ricerca con ASP (Parte 1)

   11.0   Introduzione al tutorial
   
11.1   Concettualizzazione del problema
   
11.2   Costruzione del database
   11.3   Eseguire la ricerca
 

11.0 - Introduzione al tutorial

Con questo capitolo, e con il successivo, si intende guidare il lettore alla realizzazione di un motore di ricerca, mettendo a frutto le nozioni acquisite nel corso delle lezioni precedenti, ed in particolare dei capitoli 9 e 10 relativi all'utilizzo delle fonti di dati di Access tramite ADO e SQL.
Per seguire e realizzare quanto suggerito da questo tutorial è necessario disporre, oltre della solita postazione windows munita di un server come IIS o PWS, di una copia di Access, preferibilmente la versione 2000, anche se le versioni come la 97 o la 98 sono ugualmente valide.
Quello che si intende realizzare è un servizio di ricerca costruito sulla consultazione di una base di dati (ossia un database) all'interno della quale sono indicizzate una serie di pagine Web consultabili tramite un comune browser. Non si intende certo analizzare le tecniche di realizzazione dei più complessi motori di ricerca, come quelli sfruttati quotidianamente in rete dagli utenti di internet, che indicizzato milioni e milioni di pagine. Si intende invece riprodurre quel servizio che va comunemente sotto il nome di "motore di ricerca interno", utilizzato soprattutto da siti dagli ampi contenuti per aiutare il visitatore nel localizzare velocemente mediante l'utilizzo di alcune parole chiave la risorsa cercata. Si tratta perciò di un servizio efficiente finché le pagine memorizzate nel database non superino diverse migliaia, numero più che sufficiente anche per un sito di ampie dimensioni!

11.1 - Concettualizzazione del problema

Come al solito è necessario partire chiarendo le proprie idee sul da farsi, concettualizzando il problema proposto e predisponendo una schema per la successiva soluzione del medesimo. Come già annunciato l'intero servizio fa perno sul fatto di aver precedentemente indicizzato una serie di pagine Web. Ma come realizzare tale opera? L'utilizzo di un database risulta in casi come questo estremamente utile, sia per l'efficienza del servizio stesso, sia per rendere più facile il compito dello sviluppatore. Stabilito quindi che l'archiviazione dei dati avverrà tramite un database resta da decidere una volta per tutte in che maniera questo dovrà avvenire. Quello che interessa nel problema è la possibilità di ricercare nell'intero archivio una serie di pagine attinenti con i concetti espressi dall'utente mediante l'utilizzo di alcune parole chiave. Sarà quindi necessario dotare la tabella creata allo scopo all'interno del database almeno dei seguenti quattro campi:

  • Titolo della pagina Web
  • URL della pagina Web
  • Descrizione dei contenuti della pagina Web
  • Una serie di parole chiave associate alla pagina Web

Successivamente è necessario realizzare uno script, integrato ovviamente in una o più pagine ASP, in grado di accedere alla fonte di dati al fine di estrarne delle informazioni che soddisfino la richiesta dell'utente. Come visto nei due capitoli precedenti questo diventa molto semplice grazie all'utilizzo di ADO (ActiveX Data Object), oggetto ActiveX utilizzabile per accedere con semplicità a database di varia natura. Per coerenza con lo standard di ASP il database utilizzato per l'esempio sarà generato con Access 2000.

11.2 - Costruzione del database

Una volta chiarito quanto detto sinora è possibile procedere alla realizzazione del servizio, partendo ovviamente dall'allestimento del database necessario. Si apra la propria copia di Access e dal menù iniziale si selezioni la voce "Database di Access vuoto". Nella finestra seguente verrà chiesto dove si intende posizionare il file e che nome dargli. Si scelga la propria cartella di lavoro interna al Web Server utilizzato, e si nomini il database come archivio.mdb. Fatto ciò il lettore disporrà di un database completamente vuoto, con la possibilità di interagire con esso tramite gli strumenti visuali messi a disposizione da Access. A questo va dato il merito dell'estrema semplicità d'uso. Bastano pochi tentativi per acquisire la pratica necessaria alla creazione di database anche piuttosto complessi. Per prima cosa bisogna procedere ora inserendo nel database una nuova tabella. Le tabelle sono elementi cardine nei database come quelli prodotti da Access, ed è al loro interno che tutte le informazioni vengono archiviate. Si selezioni allora l'opzione "Crea una tabella in visualizzazione struttura", uno dei tool più efficaci di questo. Da qui è ora possibile gestire i campi che faranno parte della tabella, specificandone il nome ed il tipo. Come primo campo si inserisca il campo id, di tipo contatore. Questo tipo di dato permette di associare in maniera automatica un numero intero positivo ad ogni record della tabella. Successivamente selezionare il campo id come chiave primaria. In Access è semplice selezionare un campo come chiave primaria: basta evidenziare in visualizzazione struttura il campo stesso e quindi utilizzare l'icona raffigurante una chiave presente nella barra degli strumenti del programma. A questo punto è possibile dotare la tabella dei quattro campi sopra discussi, seguendo questo schema:

  • campo titolo, di tipo testo. Tra i valori del riquadro sottostante regolare la voce "Dimensione campo" su 100. Questo farà sì che i titoli delle pagine Web che indicizzeremo in seguito possano avere lunghezza compresa tra 1 e 100 caratteri.
  • campo url, di tipo testo. Si regoli anche qui su 100 la dimensione del campo. In questa maniera si è previdenti nei confronti di URL molto lunghi ed articolati.
  • campo descrizione, di tipo memo. Il tipo memo consente l'archiviazione di dati dalla lunghezza non determinata a priori. In questo caso, perciò, le descrizioni che associeremo alle singole pagine Web potranno avere lunghezza variabile.
  • campo keywords, di tipo memo. Vale lo stesso discorso di sopra. Grazie al tipo memo sarà possibile inserire quante parole chiave si ritiene necesario.

Adesso è necessario salvare quanto fatto. Access chiederà di assegnare un nome alla tabella. Per questo esempio si scelga il nome pagineweb. Il lavoro di costruzione del database è completo. E' anche possibile chiudere la finestra di visualizzazione struttura. Si inseriscano ora, allo scopo di effettuare dei test in seguito, una serie di pagine Web dimostrative. Per farlo basta un doppio click sul nome della tabella nella finestra principale del database. Ad esempio:

  • titolo: Sauron - Risorse per il webmaster
  • url: http://www.sauronsoftware.it
  • descrizione: Una serie di raccolte utili a tutti i tipi di webmaster
  • keywords: risorse webmaster HTML ASP JavaScript icone fonts gif animate mailing list

Come è possibile osservare il campo keywords è rappresentato da una serie di parole separate tra di loro da uno spazio. Questa sono le famose parole chiave associate alla pagina Web. Ciò significa che se un utente digiterà in fase di ricerca la parola "HTML" vedrà certamente tra i risultati la pagina "Sauron - Risorse per il webmaster", mentre non vedrà altre eventuali pagine archiviate che non contengano nel campo keywords questa parola chiave. Seguendo il modello proposto si inseriscano perciò una serie di pagine Web per testare poi l'esempio. Dopo aver salvato nuovamente il lavoro è anche possibile chiudere Access. Si passa ora alla realizzazione della pagina di consultazione della fonte di dati realizzata.

11.3 - Eseguire la ricerca

Dopo aver predisposto il database che si intende utilizzare è necessario implementare uno script in grado di fare da tramite tra l'utente e i dati immagazzinati nell'archivio. Poiché tale script per funzionare correttamente necessita di una serie di dati in input da parte dell'utente bisognerà senz'altro predisporre un form HTML. Questo è piuttosto semplice da realizzare. Le interrogazioni al database, quindi, partiranno dal seguente documento Web, che per praticità può essere battezzato cerca.htm:

<html>
<head>
  <title>Motore di ricerca</title>
</head>
<body>
  <form action="risultati.asp" method="POST">
    Parole chiave:<br>
    <input type="text" name="keywords">
    <input type="submit" value="CERCA">
  </form>
</body>
</html>

Le parole inserite dall'utente vengono perciò inviate, con metodo POST, al documento risultati.asp. Come è facile intuire sarà questa pagina a dover inglobare tanto lo script in grado di eseguire la ricerca, quanto quello in grado di produrre il giusto output corrispondente. Ci si dedicherà perciò ora alla realizzazione di questo importante file.
Come prima cosa è necessario recuperare le parole inviate tramite il form di cerca.htm:

var testo = String(Request.Form("keywords"));
if (testo=="" || testo=="undefined") Response.Redirect("cerca.htm");

Nel caso l'utente avesse inviato il contenuto del form senza inserire alcuna parola chiave allora il processo di ricerca nemmeno sarà avviato, e l'utente sarà rimandato direttamente a cerca.htm, in maniera a lui invisibile.
Tutte le parole chiave inserite saranno naturalmente suddivise tra di loro mediante uno o più spazi. E' allora necessario separare tra di loro le singole parole inviate, facendo ricorso al metodo split dell'oggetto String di JScript:

var keywords = testo.split(" ");

keywords sarà dunque un'Array dove ogni elemento rappresenterà una parola distinta. Fatto ciò è possibile aprire la connessione verso la fonte di dati che si intende consultare:

var stringaDiConnessione = "driver={Microsoft Access Driver (*.mdb)};dbq=";
stringaDiConnessione += Server.MapPath("archivio.mdb");
var conn = new ActiveXObject("ADODB.Connection");
conn.Open(stringaDiConnessione);

Il passo successivo consiste nel formulare correttamente una query, ossia una richiesta, basata sulla sintassi di SQL, da sottoporre alla fonte di dati verso la quale la connessione è stata aperta. Si faccia particolare attenzione alla seguente porzione di codice:

var sql = "SELECT * FROM pagineweb WHERE";
for (i=0;i<keywords.length;i++) {
   if (i>0) sql += " AND";
   sql += "keywords LIKE '%" + keywords[i] + "%'";
}

Se ad esempio l'utente avesse digitato la coppia di parole "gif animate" la query risultante sarebbe:

SELECT * FROM pagineweb WHERE keywords LIKE '%gif%' AND keywords LIKE '%animate%'

Formulata correttamente la query sarà possibile chiedere tramite ADO la restituzione dei record competenti:

var ris = conn.Execute(sql);

La variabile ris, quindi, conterrà un riferimento ad un oggetto Recordset rappresentante tutti i record ospitati dalla tabella pagineweb in grado di soddisfare la richiesta fatta. Non resta che scorrere tale Recordset inserendo nell'output una rappresentazione HTML dei suoi contenuti:

if (ris.EOF) Response.Write("<b>NESSUN DOCUMENTO TROVATO</b>");
else while (!ris.EOF) {
  Response.Write("<p><a href='" + ris("url") + "'>");

  Response.Write(ris("titolo"));
  Response.Write("</a><br>");
  Response.Write(ris("descrizione"));
  Response.Write("</p>");
  ris.MoveNext();

}

La connessione al database può quindi essere chiusa, la pagina ASP è completa.

conn.Close();

Il codice che ne risulta è il seguente:

<%@ LANGUAGE = JScript %>
<%
var testo = String(Request.Form("keywords"));
if (testo=="" || testo=="undefined") Response.Redirect("cerca.htm");

var keywords = testo.split(" ");

var stringaDiConnessione = "driver={Microsoft Access Driver (*.mdb)};dbq=";
stringaDiConnessione += Server.MapPath("archivio.mdb");
var conn = new ActiveXObject("ADODB.Connection");
conn.Open(stringaDiConnessione);

var sql = "SELECT * FROM pagineweb WHERE";
for (i=0;i<keywords.length;i++) {
  if (i>0) sql += " AND";
  sql += " keywords LIKE '%" + keywords[i] + "%'";
}

var ris = conn.Execute(sql);

if (ris.EOF) Response.Write("<b>NESSUN DOCUMENTO TROVATO</b>");
else while (!ris.EOF) {
  Response.Write("<p><a href='" + ris("url") + "'>");
  Response.Write(ris("titolo"));
  Response.Write("</a><br>");
  Response.Write(ris("descrizione"));
  Response.Write("</p>");
  ris.MoveNext();
}

conn.Close();
%>

Questo breve e conciso script è in grado di eseguire la basilare ricerca sul database che si voleva soddisfare. Al solito si tratta di un puro esempio, che lascia spazio ad ampi margini di miglioramento. Si propongono quindi al lettore delle possibili migliorie, da eseguire come esercizio:

  • possibilità da parte dell'utente di stabilire diverse modalità di ricerca, come "tutte le parole", "almeno una parola" e "frase esatta". L'esempio appena visto soddisferebbe il caso "tutte le parole". Basta modificare la parte di codice che assembla la query, in base alla scelta fatta dall'utente. Nel caso "almeno una parola" basterebbe infatti sostituire nella query l'operatore OR all'operatore AND. Nel caso "frase esatta", invece, non occorre far ricorso ad alcun operatore, basta specificare nella quary keywords LIKE '%parola1 parola2 parola3%'. Neanche lo split sarebbe più necessario.
  • aumentare la robustezza dello script. Qualora l'utente inserisse infatti un carattere di apostrofo nel campo di ricerca lo script restituirebbe un errore. Questo perchè il carattere apostrofo ha particolare significato nella sintassi SQL. Bisogna quindi accertarsi di sostituire ogni carattere di apostrofo ' con un doppio apostrofo ''. E' questo lo stratagemma usato da SQL per inserire nei campi stringa delle query il carattere riservato.
  • fondere le pagine cerca.htm e ricerca.asp in un unico documento, per maggiore praticità.
  • il metodo split, per quanto di facile utilizzo, non ha la potenza, ad esempio, di uno StringTokenizer di Java, o degli equivalenti metodi di Perl. Se l'utente dovesse inserire consecutivamente due spazi, infatti, il metodo split inserirebbe un elemento totalmente vuoto nell'Array risultante e la ricerca sarebbe in questo caso falsata. E' però possibile lavorare intorno a split per ottenere un Array più accurato e privo di questo inconveniente.

Il prossimo capitolo concluderà il tutorial, proponendo la realizzazione di un pannello di controllo per l'inserimento via interfaccia Web di nuove pagine all'interno dell'archivio.

Home Page

1 | 2 | 3 | 4 

 
Trucchi PC e Guide
Tips su sistemi operativi, registro di configurazione, sicurezza, internet, navigazione, word ed excel. ................ ....
 

Guide e sulla configurazione, installazione ed utilizzo di, periferiche, sistemi operativi ecc... .............................................................


 

 
 
Halloween  
Halloween Online

Utenti on line

Ultimo aggiornamento giugno 2005