Ce que fait le client :
Ce que fait le serveur :
Un lien hypertexte est formé par une ancre et par l'adresse du document ciblé. Une ancre peut-être un mot, un groupe de mots ou une image mis en évidence dans le document (caractère gras, couleurs, etc.). Un document référencé par un lien hypertexte peut-être sur un autre serveur WEB, mais aussi sur un serveur FTP, GOPHER, etc. Son adresse doit donc indiquer, entre autres, la méthode d'accès à ce document.
Un document hypermédia est un document hypertexte avec la différence que les liens peuvent également référencer des fichiers son, image ou vidéo.
Méthode://nom_machine:port/nom_fichier[#ancre\ ?liste_paramètres]
Le champ méthode indique le protocole à utiliser : file, ftp, http, telnet, gopher, wais, news, etc. Celui qui nous intéresse dans ce rapport est principalement le protocole HTTP, utilisé par les serveurs WEB.
Le port est optionnel ; s'il est omis, le navigateur utilise le port standard du service correspondant au protocole. Par exemple, pour HTTP, le port par défaut est 80.
On peut aussi avoir des URLs relatif par rapport au document courant. Cela suppose que le document référencé dans l'URL est localisé sur le même serveur et accessible par le même protocole.
A chaque balise correspond une balise quasi identique. La première balise est dite ouvrante ; la seconde, avec une barre oblique (/) est dite fermante. Tout ce qui se trouve entre une balise ouvrante et la balise fermante correspondante est affectée par la balise ouvrante.
Un document minimal en format HTML comprend les lignes suivantes :
<HTML> <HEAD></HEAD> <BODY></BODY> </HTML>Voir mon projet d'IUT pour plus de détails sur les balises HTML.
Les programmes CGI sont employés pour une tâche requérant une réponse dynamique du serveur. Le premier objectif de CGI est de permettre d'écrire des programmes communiquant avec les navigateurs WEB.
En se servant de CGI, on peut écrire des programmes qui :
CELYA SA Direction commerciale 9, rue Alfred Kastler - BP 60762 44307 - NANTES Cedex 3
Ce produit est destiné à faciliter la mise en place d'applications WEB complexes par opposition aux applications hypertexte. Basé sur la norme CGI : il s'interface avec tout type de serveur HTTP utilisant cette norme.
Une des caractéristiques du WEB est que l'on travaille en mode non connecté. Rien ne permet en standard de reconnaître un utilisateur au cours d'une session de consultation d'un serveur.
Ceci ne pose pas de problème particulier tant qu'il s'agit de créer des services de navigation hypertexte simple. Dès qu'il est nécessaire de saisir de l'information pour pouvoir l'utiliser en un autre point du service les choses se compliquent. Il faut faire appel à des programmes externes ou " promener " des variables saisies dans des URL complexes.
Le système de gestion de contexte d'OPENWEB permet de s'affranchir des manipulations complexes que tout développeur doit mettre en uvre actuellement.
Pour chaque utilisateur, on mémorise un certain nombre de variables. Ces variables constituent le contexte utilisateur. Cela peut être des données saisies au sein de formulaires, des données concernant ses préférences, ses goûts, et que l'on est allé chercher dans une base de données en début de session.
Le contexte utilisateur, accessible en mémoire, est sauvegardé dans un fichier ASCII régulièrement mis à jour sur le disque du serveur. Ce fichier est composé d'une ligne par variable, de la forme :
NOM_VARIABLE :VALEUR_VARIABLE
Pour pouvoir gérer un contexte utilisateur il importe de pouvoir identifier et distinguer les utilisateurs d'un service. Il y a deux méthodes :
L'idée du préprocesseur HTML est de centraliser tout le code nécessaire à l'exécution des applications WEB au sein même des pages HTML.
Si une page HTML a besoin d'informations, calculées à partir de programmes spécifiques ou provenant d'une base de données, le lancement de ces programmes et des requêtes peut être réalisé directement dans la page HTML.
Pour cela, le préprocesseur traite un certain nombre de balises, spécifiques au produit, qui sont épurées avant envoi de la page HTML résultante au serveur HTTP.
Dès qu'une balise spécifique est identifiée par le préprocesseur, les instructions qui l'accompagnent sont lues et exécutées. Après quoi le préprocesseur poursuit l'analyse du reste de la page.
La syntaxe est simple puisqu'elle s'inspire directement des tags HTML.
L'exécution séquentielle des différents traitements permet de les enchaîner et d'utiliser dans un traitement le résultat d'un autre.
Les principales fonctionnalités du préprocesseur sont les suivantes :
Ceci fait appel à un deuxième module, OW-MIDLLE, dont le rôle est de router les requêtes à destination d'une base qui n'est pas forcément sur la même machine que le serveur HTTP.
Le module OW-MIDDLE est constitué d'un serveur centralisant les demandes d'exécution des requêtes, d'un client demandant au serveur l'exécution des requêtes. Il est complété par un ensemble de modules spécifiques aux différents SGBD auxquels on souhaite pouvoir accéder (Interface des ressources).
Bâti sur le protocole TCP/IP, il est entièrement réparti. Le côté client est indépendant du système distant, il se contente de poster une requête d'un type donné. Un fihier de configuration permet d'identifier les différents serveurs de ressources capables de traiter cette requête. Les modifications de ces configurations sont prises en compte de manière dynamique. La configuration intègre la notion de secours, ce qui permet d'atteindre un second, voir un troisième ou quatrième serveur de ressources dans le cas où les premiers ne répondraient pas.
Au final, le résultat des requêtes est directement intégré dans l'environnement du contexte utilisateur.
Le programme owparse interprète l'ensemble des lignes de code du script :
Pour pouvoir utiliser OW-MIDDLE il suffit de le lancer sur une machine reliée avec celle qui sert de serveur HTTP.
On configure OW-MIDDLE par l'intermédiaire du fichier owmiddle.conf, et on peut également le paramétrer par la ligne de commande. Ce qui permet d'avoir plusieurs configurations sur le même poste.
Dans le monde, plus de 800 sociétés ont déjà fait appel à SearchServer pour bâtir des applications stratégiques novatrices.
Les fonctions évoluées de recherche documentaire de SearchServer constituent certainement le chemin le plus direct vers la connaissance, tandis que le support des langues internationales autorise la recherche dans la plupart des langues européennes, ainsi qu'en japonais et en coréen.
Grâce à ses interfaces basées sur des standards ouverts, les développeurs peuvent facilement personnaliser les applications pour les environnements Web et client-serveur.
Toutes les requêtes et scripts doivent se conformer à la syntaxe et la grammaire du langage SearchSQL.
execsql [-h<servername>] [-0infilename>]
Les paramètres signifient :
-hservername>Permet de se connecter au serveur nommé. Si le serveur n'est pas spécifié execsql utilise le serveur spécifié dans la variable FTNPATH.
-0infilename>Permet d'executer le script infilename, mais si l'option -0 'est pas spécifié l'entrée standard est utilisé et on peut alors entrer des commandes SearchSQL au clavier, pour sortir taper (CTRL+D).
prompt> more tbls.fte select table_qualifier, table_name, table_type, ftt_location from tables; prompt> execsql -0tbls.fte select table_qualifier, table_name, table_type, ftt_location from tables; CursorName = SQL_CUR00001 RowCount = 2 NumResultCols = 4: TABLE_QUALIFIER, TABLE_NAME, TABLE_TYPE, FTT_LOCATION values: ('/projets/NACP/dev/base', 'ACTIVITE', 'TABLE', '/projets/NACP/dev/base') ('/projets/NACP/dev/base', 'NACPAUTO', 'TABLE', '/projets/NACP/dev/base') *** prompt>
Les fichiers d'exemple et leur résultat sont listés dans le chapitre Listing.
execsql -0crs001.fte
execsql -0ins001.fte
execsql -0val001.fte8.2.3.4.4 Le modèle de données de SearchServer
SearchServer contient deux modèles de données.Le premier est une abstraction de l'objet texte dont l'application a besoin. Ce modèle est appelé modèle de données logiques et ils s'occupent des schémas, tables, lignes, colonnes, zones et domaines.
Le second, appelé le modèle de données physiques permet de gérer les fichiers de table, et les documents externes qui sont références dans un administrateur de données.
8.2.3.5 Le modèle de données logiques
Les données sont organisés dans SearchServer pour optimiser la puissance et la souplesse des opérations de recherche textuel. Le modèle de données est proche de la programmation SQL, où les données sont organisés sous forme de lignes et colonnes. Nous allons maintenant voir les termes qui permettent de définir ce modèle.8.2.3.5.1 Data Source
Une source de données est un ensemble de tables qui sont liées à un driver d'accès aux données. Par exemple une session peut être lié a une connexion unique pour une source de données, mais des connexions multiples sont possible.Chaque source de données fait référence à un driver, des tables et des fichiers de support.
8.2.3.5.2 Table
Une table est composé de lignes et de colonnes, qui représentent la façon dont sont organisées les données pour la mise à jour et les fonctions de recherche. Une ligne représente un objet texte, ou un document, et ses attributs, alors qu'une colonne représente un attribut retrouvable individuellement (par exemple le titre d'un mémo).Le modèle table couvre 4 classes de structures de données :
Une table de base représente une collection d'objets texte. Elle est crée avec l'ordre CREATE TABLE ou CREATE SCHEMA. Elle est remplie quand des données sont insérées en utilisant l'ordre INSERT.
Une fois indexé, les données peuvent être retrouvées en utilisant l'ordre SELECT. A la création d'une table de base il est possible d'utiliser l'option Immediate ou Periodic.
SearchServer génère une table de travail à partir d'une ou plusieurs tables pour conserver les résultats d'un ordre SELECT.
Une vue est un assemblage d'une ou plusieurs tables, qui peut être pour faire des recherches.
Des tables groupées ensemble ne doivent pas contenir des schémas conflictuels et être sur le même noeud(serveur).
Le système d'information sur les tables est réalisé par SearchServer. Lorsque l'on demande une information à propos d'une source de données ou à propos d'un ensemble de tables associé à une source de données, SearchServer construit une table de travail à partir du système d'information sur les tables.
Ces tables ont la possibilité de contenir une très grosse quantité d'information, car elles représentent un rapport global sur les informations physiques et logiques qu'il est possible de retrouver pour chaque table d'une source de données.
La façon de diviser les objets texte sous forme d'intérêt dans les documents associés peut être différent selon les applications.
L'objet texte externe contient le texte externe qui représente le corps d'un document. Le texte externe n'est pas enregistré par SearchServer, mais il est stocké dans son format d'origine.
Des lecteurs de texte sont utilisé pour lire les textes externes durant l'indexation et la recherche de données. Les documents externe peuvent être dans différents formats, également des formats propriétaires, formats de traitements de texte, or au format ascii.
Toutes les informations résultant d'une recherche que l'on souhaite représenter à l'utilisateur doivent être stocké dans une table pour obtenir un fonctionnement efficace. Il est possible d'utiliser les colonnes internes (celles qui ne sont pas des colonnes externes) pour stocker des informations qui ne seront pas utilisé pour la recherche.
Dans le contexte de la recherche de document, les colonnes internes contiennent des informations sur les colonnes externes, aussi elles peuvent être utilisé pour autre chose.
Cela améliore la recherche de diviser le texte du document en différentes zones. Par exemple, un terme est plus significatif s'il se trouve dans un titre plutôt que dans le corps du texte.
Une colonne qui est divisé en zones est appelé segmented column. Dans la plupart des cas, seulement le texte de la colonne externe est segmenté.
L'étendue d'une zone est déterminé lors de l'indexation de la table. L'étendue de chaque zone est définie par des tags qui sont insérés dans le flux de texte par un lecteur de texte ou mis à l'intérieur du texte en utilisant une autre méthode.
On crée un domaine avec l'ordre CREATE DOMAIN.
Ce fichier contient la définition des sources de données en relation avec les noms de source de données pour un driver et différents chemins pour accéder aux données.
Les drivers ODBC sont définis dans ce fichier.
Ces fichiers sont :
A part le fichier de configuration et l'index de fichier de log, tous sont des fichiers texte déstructuré, la table de management des fichiers est un binaire uniquement lisible par SearchServer. Mais ces binaires sont inter-plateformes, c'est à dire qu'ils sont utilisables sur différentes plates-formes.
Le fichier de configuration est un simple fichier texte qui répertorie les autres tables de management de fichier et leur emplacement. Les autres tables de fichiers de management contiennent les fichiers de données, les fichiers index, et les index des fichiers de log.
Un fichier de configuration est créé lorsque l'on crée une table. Il est nommé d'après le nom de la table.
Un type spéciale de fichier de configuration, une vue, est utilisé pour décrire les composants d'une table de vue.
Les fichiers de données contiennent un enregistrement pour chaque ligne de la table. Les enregistrements sont divisés en champs. Chaque champ correspond directement à une colonne de la table. Les index permettent de retrouver les données directement.
Les seules données qui ne sont pas stockées dans les fichiers de données sont dans des documents externes, qui sont dans leur format d'origine (cela peut être une base de données). Ces documents externe peuvent être enregistré séparément de la table de fichiers de management à un autre endroit dans la structure du système de fichier.
Les fichiers d'index mémorisent chaque occurrence, de chaque élément d'une colonne. L'index permet rapidement d'effectuer une recherche, en incluant la résolution de phrase et les recherches de proximité sans aucune référence aux fichiers d'origines des données.
L'index de fichier de log est un simple fichier texte qui enregistre les messages fourni par SearchServer pendant l'indexation, en utilisant VALIDATE INDEX. La taille des données et les fichiers d'index sont également stockés dans ce fichier.
Le fichier de configuration du driver (fultext.ftc) fait partie intégrante des opérations de SearchServer. Parmi ses utilités citons qu'il contient sous forme compilé les messages utilisé par les programmes utilitaires et les fonctions API. Ce fichier contient également la table des librairies dynamiques, qui identifient tous les modules (comme les lecteurs de texte ou les connecteurs réseau) qui sont reconnus par SearchServer.
Le fichier de stop est une liste de mots que vous ne voulez pas que SearchServer index. Ce sont en fait tous les mots qui ne sont pas significatifs lors de recherches.
Le fichier de caractères variants permet d'inclure automatiquement dans une recherche typographique des termes d'interrogation pour les requêtes. Ce qui évite des erreurs de matching due à un langage ou différentes restrictions externes. Ce fichier est souvent utilisé pour les langages qui comportent des accents (le français ! ! !).
Le fichier Thesaurus permet de chercher sur des mots que le développeur a trouvé intéressant de rajouter suivant la requête de l'utilisateur.
Par exemple il est possible de dire que " Digital Equipement Corporation " équivaut à " DEC " mais aussi à " Digital ".
Ce qui fait le succès de Perl, c'est sa grande flexibilité. En effet, il couvre un vaste éventail de possibilités. Alors d'un côté il permet un développement rapide à haut niveau d'abstraction, de l'autre il offre aussi différents moyens pour se rapprocher vraiment du côté matériel de la machine. En gros, Perl est souple et présente des avantages pour presque tous les niveaux de programmation.
De plus, Perl est très portable. Il est aujourd'hui possible de le retrouver non seulement sur les stations Unix d'origine, mais aussi en environnement Windows (dont 95 et NT) ou même DOS. Cette grande portabilité est principalement due à sa façon de fonctionner.
Premièrement, la disposition du code a peu d'importance, si ce n'est que pour faciliter la lisibilité, un des aspects d'un bon programme. Aussi, les espaces (ou blancs) ne sont pas pris en charge, ce qui permet de faire des indentations et de sauter des lignes. Ainsi, en aérant bien un programme, on peut rendre ce dernier plus agréable à "débugger"!
Deuxièmement, chaque ligne de commande doit se terminer par un point virgule, tout comme en Pascal et en C.
Le dièse (#) est utilisé pour introduire des commentaires. Sur une même ligne, tout ce qui se trouve à la droite du dièse sera ignoré lors de l'interprétation. Toutefois, il existe une exception à cette règle pour ce qui est de la première ligne de code d'un programme. En effet, cette dernière permet de spécifier le chemin (path) menant au compilateur Perl. En indiquant correctement l'emplacement du compilateur, il suffit ensuite de rendre le script exécutable pour pouvoir lancer ce dernier.
L'exemple qui suit met en évidence les éléments présentés plus haut:
#!/usr/bin/perl # Début du programme à proprement parler $phrase = 'Mon premier programme en Perl'; # Ici, la variable phrase contient "Mon premier programme en Perl" print $phrase; # Affichage de la phrase # Fin du programme
Ce petit programme illustre bien la simplicité du langage Perl. Ici, une phrase est attribuée la variable phrase (le $ sert à identifier la variable, nous aborderons ce point à la prochaine section). Cette variable est ensuite affichée à la sortie standard par la commande print.
Comme tous les langages, Perl offre la possibilité d'utiliser un ensemble de commandes déjà définies pour vous. La syntaxe générale des commandes du langage Perl suit habituellement les règles suivantes:
Exemple: print
"Premier argument","Deuxième argument","\n";
Exemple:
print("Premier argument","Deuxième argument","\n");
$priorite = 9;
affecte 9 à la variable scalaire $priorite, mais on aura pu lui assigner
$priority = 'grand';
et encore :
$priorite = '9'; $priorite = '0009';
tout en ayant toujours accès aux fonctions arithmétiques.
En général, les noms des variables sont composés de chiffres, lettres et souligné (_), mais ils ne doivent pas commencer par un chiffre, et la variable $_ est réservée, comme nous le verrons plus tard. Par ailleurs, le Perl est sensible à la casse, donc $a et $A sont deux variables distinctes.
@fruits = ("pommes", "poires", "cerises"); @musique = ("pipo", "violon");
affectent une liste de trois éléments à la variable tableau @fruits, et une liste de deux éléments à la variable tableau @musique.
On accède aux éléments d'un tableau en utilisant des indices entre crochets. Les indices commencent à 0. L'expression suivante :
$fruits[2]
renvoie "cerises". On notera que l'@ est devenu un $, étant doné que "cerises" est un scalaire.
$phrase =~ /le/
Les ER sont sensible à la casse (lettre majuscule, minuscule). Par exemple si-
$phrase = "Le petit chat gris";
alors, l'ER sera fausse. L'opérateur !~ est utilisé pour un non-appariement. Avec la chaîne ci-dessus,
$phrase !~ /le/
est vraie, car le n'apparait pas dans $phrase (C'est Le qui apparait).
La variable spéciale $_:
On pourrait avoir la condition :
if ($phrase =~ /pas/) { print "Nous parlons de rugby.\n"; }
qui serait vraie pour les cas suivant :
$phrase = "Une marque de pas."; $phrase = "Il s'est surpassé.";
Mais souvent, il est plus facile d'affecter une chaîne à la variable spéciale $_ qui est bien sûr scalaire. Si nous faisons ça, nous pouvons éviter d'utiliser les opérateurs =~ et !~, et le programme ci-dessus peut être réécrit par :
if (/pas/) { print "Nous parlons de rugby.\n"; }
La variable $_ est la variable pas défaut de nombreuses fonctions Perl, et tend à être utilisé très souvent.
Voici quelques caractères spéciaux, et leur signification.
. # N'importe quel caractère, excepté les retours chariot. ^ # Un début de ligne ou de chaîne. $ # La fin d'une ligne ou d'une chaîne. * # Zéro ou plus du dernier caractère. + # Un ou plus du dernier caractère. ? # Zéro ou un dernier caractère.