Hannibal - Un Moteur de Recherche Avec Plug-In en Arabe
Hannibal - Un Moteur de Recherche Avec Plug-In en Arabe
Hannibal - Un Moteur de Recherche Avec Plug-In en Arabe
Université de Tunis II
Ecole Nationale des Sciences de l’Informatique
Rapport
de Projet de Fin d’Etudes
Encadré par
1
.
2
"$
1% , 3 % 7 * 1 * 3 ( 8 * : 9 ; = < ; ) , 8? > ) 3 % -4* . ) 2 3@*
! #&' % ( )+, * -/ . 0 ( 1 % 24 3 65
S B
8
A%B D ! C E % 1 %B E ' %B 3 3 F % ; %
E 6I F 3J% ; * 3 9 3K% ! L * 9 ; #M * 3@% Q L R
*
P
N O 8 -V U A% X W 3 ( *
Z[ ( \ * ] ;
T Y
B HG G
_^ ^ O E : < ; ) 8 ` C a b 3 ; Z % &c ; ; d ) < d 3 ( : 8 2 3J% f 0 gIih % j
0
0 0
-[* . U
e G
8 l T ; 1 %B ( ) L ( \ * ] ; % 1 %* 3 ; 1 %* , * m E # A% C ) n F % -4 . 1 % (o ) , * -/ . L ; L 3 % ; 1% F % , 3 % -4. 8 S T -4 .
Z4k h .
B * G
* e
*
L ^
; ! ` ` p * L F % ; %* 1% E % ) f -[* . ' % 9 3 % 3 -4* . < , " #
q R "sr < % ; % ; ' % F % 3 3 v %
E
* G G ut
x j
a w 0 (
Z % ' % {z ; | ( E y <
; )
< d B ; 3 " F ; %
* " XWK -4. L R
;
1 % , ~
} L %
e *
<
; ) i F n 3 % ( * 0 h k 1% 3 ; c ; ; ) ; %
d
8 ,
S
<# % f E ! R # 3 3J# 1% 3 ; 1 % i#
i# < d ; ' % ( # < ; " # < % ; % ; V V i
e e < G =
; ) i F n 3 % ( # < ; ) ' % 3 6
Abstract
The increasing growth of the Web is turning it into an enormous mass of informa-
tion, and though the Arab World is still not dangerousely concerned with these over-
loads, it should be wise to start considering some efficient techniques that might allow
the Arabian user to find the document he needs within the expanding Arab World
Wide Web. Besides the common problems of targetting the desired information, the
Arabic language is not yet well supported by Internet applications (among others) and
the existing products are mostly kinds of workarounds. This project aims to provide a
search facility with some extensions that would allow arabic documents viewing from
within a popular browser.
Keywords Internet, World-Wide Web, Search Engines, Arab World, Arabic Language,
Hannibal, Harvest, Web Robots, Web Browser.
Résumé
La croissance du Web est entrain d’en faire une énorme masse d’information uni-
verselle. Le Monde Arabe n’a pas encore suffisament contribué à cette explosion. Malgré
cela, il serait raisonnable de penser à des techniques efficaces qui permettraient à l’utili-
sateur Arabe de trouver les documents qu’il cherche dans le Web du Monde Arabe.
En plus des problèmes habituels de ciblage de l’information souhaitée, la langue
Arabe n’est pas encore bien supportée par les applications du type Internet (entre
autres) et les produits existants sont plutôt des solutions “dépannage”.
Ce projet a pour but de fournir un service de recherche avec quelques extensions
qui permettraient l’affichage de documents en Arabe dans un navigateur populaire.
Mots Clés Internet, Web, Moteurs de Recherche, Monde Arabe, Langue Arabe,
Hannibal, Harvest, Robots du Web, Navigateurs.
3
Table des matières
4
3.2.1 Usages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2.2 Dangers et Problèmes des Robots . . . . . . . . . . . . . . . . . . . 31
3.3 Le Moteur de Recherche Hannibal Crawler . . . . . . . . . . . . . . . . . 32
3.3.1 Pouquoi un Robot? . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.3.2 Fonctions de Hannibal . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.3.3 Langage de Requêtes . . . . . . . . . . . . . . . . . . . . . . . . . . 35
A Configurer Hannibal 39
A.1 Compiler et Installer le Plug-in . . . . . . . . . . . . . . . . . . . . . . . . 39
A.2 Compiler et Installer Harvest . . . . . . . . . . . . . . . . . . . . . . . . . 40
A.3 Configurer le Serveur Web . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
A.3.1 Serveurs du type NCSA . . . . . . . . . . . . . . . . . . . . . . . . 40
A.3.2 Serveur CERN httpd . . . . . . . . . . . . . . . . . . . . . . . . . . 40
A.3.3 Serveur Netscape . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
B Le Système Harvest 42
B.1 Description du Système . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
B.2 Le Gatherer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
B.2.1 Le Fichier de Configuration . . . . . . . . . . . . . . . . . . . . . . 43
B.2.2 Extraction de Données avec Essence . . . . . . . . . . . . . . . . . 44
B.3 Le Broker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
B.3.1 Le gestionnaire de stockage . . . . . . . . . . . . . . . . . . . . . . 46
B.3.2 Le Registre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
B.3.3 L’indexeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
B.3.4 Le collecteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
B.3.5 Le gestionnaire de requêtes . . . . . . . . . . . . . . . . . . . . . . 47
5
Liste des figures
6
Liste des tableaux
7
Introduction
MRS est une société de services en informatique basée à la Marsa dont l’activité ma-
jeure est la conception des sites Web et des CD-ROMs multimédia. J’ai été en stage de
mémoire de fin d’études dans cette entreprise et plus précisement dans son département
de développement. Il m’a été confié la charge de la réalisation d’une extension pour
le navigateur Netscape Navigator pour pouvoir afficher correctement des pages en
Arabe.
Les spécifications mentionnaient que l’extension doit être petite et facilement in-
stallable. Les premières études de faisabilité ont montré que l’implémentation d’une
telle extension est impossible sans la réécriture totale de l’analyseur syntaxique HTML
(HTML parser and renderer). La direction de l’entreprise m’a alors demandé de concen-
trer mes efforts sur un autre projet: La réalisation d’un moteur de recherche pour le
Monde Arabe, il s’agit de Hannibal. Ainsi, le travail présenté dans ce document con-
cerne deux aspects:
Dans le premier chapitre, je vais expliciter les problèmes que j’ai rencontré avec l’ajout
d’un support pour la langue Arabe, un aperçu des standards et technologies actuels
et la solution proposée. Le second chapitre décrit l’extension réalisée. Le troisième
chapitre introduit les techniques de recherche et d’indexation et le fonctionnement de
Hannibal. Finalement, je décrit les extensions éventuelles et les améliorations possibles
de mon travail.
8
Chapitre 1
1.1 Introduction
La manipulation de l’Arabe dans les applications informatiques actuelles pose énor-
mément de problèmes. Ces problèmes peuvent être casés dans trois grandes catégories
[TAS90]:
choix ou définition d’un jeu de caractères bilingue approprié qui satisfasse les
standards internationaux et les besoins spécifiés.
Tout comme pour la plupart des applications informatiques, les applications Internet
se sont restreintes à l’utilisation du jeu de caractères US-ASCII (ISO 646). Ces restric-
tions étaient telles que certains vieux nœuds de transit de messagerie SMTP ont pris
l’habitude de supprimer le huitième bit du corps des messages.
Le jeu de caractères US-ASCII est un standard ANSI qui représente les caractères
sur 7 bits; son identification officielle IANA est ANSI X3.4-1968. Une extension à
ce jeu de caractères est le ISO 8859-1 (Latin-1) qui est un encodage sur 8 bits compat-
ible avec US-ASCII. Le standard ISO 8859 est en fait une famille de jeu de caractères
incluant:
ISO 8859-1 englobe, en plus des caractères US-ASCII, la plupart des caractères spéciaux
Européens.
9
ISO 8859-6 est un jeu de caractères identique à ASMO-708 qui a été publié par la
Arabic Standards and Metrology Organization (ASMO). Ce jeu a été adopté par Apple
Computers dans leurs applications en Arabe sous Macintosh. Mais, Microsoft Corpo-
ration n’a pas adopté ce standard créant son propre encodage CP-1256 des caractères
Arabes pour ses versions Arabes de Windows. ISO 8859-6 est enregistré à l’IANA en
tant que ISO-8859-6: 1987.
De même, la Institute of Standards and Industrial Research of Iran (ISIRI) a conçu un
standard pour un jeu de caractères persiques: ISIRI-3342 qui ne définit que des glyphes
Arabes. Ce jeu de caractères n’est pas enregistré chez l’IANA.
10
Translitérations Texte Arabe
drs !DC
darrs ! C
dirAsT 1% } D ! C
tadrIs v ! L ; %
thakiraton
Tableau 1.2: Exemple de transcriptions.
Il y a près de 5000 racines et quelques 400 modèles. Chaque racine ne peut être
combinée qu’avec un petit sous-ensemble de modèles (17 en moyenne).
blent en quelque sorte aux accents utilisés par certaines langues Européennes. De tels
symboles sont utilisés pour marquer les voyelles courtes et pour accentuer ou réduire
le son d’une lettre. Ces symboles peuvent être combinés et dessinés en dessous ou au
dessus des lettres pour produire des effets phonétiques divers.
Les lettres de la langue Arabe, qui a été écrite à la main pendant plusieurs siècles,
dépendent de leur contexte. En effet, la forme d’une lettre dépend de sa position dans
le mot et des caractères adjacents.
Les ligatures qui sont déjà un problème dans les langues Latines, sont encore plus
difficiles à gérer en Arabe. Même dans les langues Latines, peu d’outils de traitement
de textes intégrent des tables de ligatures. En Latin, il “suffit” d’insérer un tiret entre
deux syllabes et revenir à la ligne. En Arabe, les lettres se combinent pour produire de
nouvelles formes (figure 1.1).
11
Son Lettre Arabe avec diactitiques
s
sa
su *
si
ss
ssa
ssu
*
ssi
! L
< !
*
L
| ;
Tableau 1.4: Différentes formes d’un caractère, cas du ( ).
\
0 2 y
0 h k
Figure 1.1: Exemple de ligatures.
12
Caractère en entrée Chaı̂ne à afficher
(initialement) " f v %* 1%* E f -4 .
1 " f v %* 1 %* E f -V .
" f v % * 1 % * E f
2 -.
, , " f v %* 1 %* E f -4 .
5 , " f v %* 1 %* E f -4 .
4 , " f v %* 1%* E f -4 .
m p , " f v %* 1 %* E f -4 .
Tableau 1.5: Problèmes de bidirectionnalité.
1.2.4 Bidirectionnalité
L’Arabe est écrit de droite à gauche, mais les nombres sont, dans beaucoup de pays,
écrits et lus de gauche à droite. Ceci peut causer des ennuis dans la saisie, comme le
montre le tableau 1.5 où “ ” désigne la position courante du curseur.
13
pour les développeurs d’applications. Ce standard Unicode a connu, depuis, un succès
fulgurant et a été adopté par ISO.
Le problème avec UCS est qu’il est incompatible avec les applications et les pro-
tocoles en cours d’utilisation, de ce fait il est apparue la nécessité de définir des en-
codages d’UCS pour permettre son stockage et sa transmission sans grandes difficultés
et incompatibilités. L’UCS Transformation Format (UTF) est un standard de représentation
des caractères Unicode. UTF-8 [FrY98] est la variante la plus élaborée d’UTF.
Remarquons enfin que, pour exprimer la bidirectionnalité, la norme ISO/IEC 10646-
1 réserve cinq caractères (202A à 202E) pour contrôler la direction du texte.
doit produire,
AB yx CD zw EF
SPAN étant une balise renfermant un texte (du type TITLE , par exemple).
text/plain; charset=ISO-8859-6
text/plain; charset=ISO-8859-6-e
text/plain; charset=ISO-8859-6-i
text/plain; charset=ISO-8859-8
5
http: //www.w3.org
6
http: //www.ietf.org
14
text/plain; charset=ISO-8859-8-e
text/plain; charset=ISO-8859-8-i
explicite (suffixe e): la directionnalité est spécifiée par des séquences de contrôle
à l’interieur du texte,
visuel (par défaut): c’est la directionnalité la plus simple, les agents utilisateur ne
font aucun traitement et affichent le texte sans considérations de directionnalité
(comme s’il était unidirectionnel). La résolution des problèmes de direction est
laissée à la charge des outils auteurs.
15
J’ai testé Sindbad 4 (archive de 1.4Mb) sur Windows 95 et j’ai constaté qu’il fonc-
tionne bien et produit une présentation adéquate des documents. A remarquer, seule-
ment, que Sindbad ne peut être aussi stable et solide que Navigator et qu’il lui faudrait
être porté sur d’autres plate-formes que Windows.
16
AraMosaic est développé par LangBox International 15 , une compagnie du Groupe
Spartacus16 . Tout comme PMosaic, AraMosaic est une modification de NCSA Mosaic
mais avec plus de possibilités que PMosaic. AraMosaic sait afficher les documents dans
les deux directions, gérer des textes Latins dans un document Arabe et interpréter
plusieurs jeux de caractères: ISIRI 3342, CP 1256 et ISO 8859-6.
PMosaic et AraMosaic sont disponibles sous la plupart des systèmes Unix gratu-
itement. J’ai eu l’occasion de les tester, ils offrent des présentations assez correctes des
documents Arabes, seulement ils sont peu stables.
15
http: //www.spartacus.com/langbox
16
http: //www.spartacus.com
17
Chapitre 2
W3C amaya est un produit expérimental et non déstiné au grand public, il fût
développé pour implémenter les spécifications du W3C pour HTML et HTTP,
Ce travail a été déjà fait pour NCSA Mosaic (voir plus haut): PMosaic et AraMo-
saic sont des modifications de Mosaic qui incluent un support pour la langue
Arabe,
Netscape Navigator est sûrement le meilleur client mais Netscape n’a mis son
source à la disposition du public2 que tout dernièrement (1 avril, 1998), et comme
l’archive compressée du source de Netscape fait une dizaine de Mb, il aurait été
aberrant de tenter ce travail en l’espace d’un mois.
Netscape à mis au point, depuis la version 2 de Mozilla 3 , une technologie pour l’extension
du navigateur par des modules logiciels développés par des tiers et appelés plug-ins.
Cette technologie s’avère dans, notre cas, la plus convenable (voir dicussions plus loin).
Ainsi, dans ce qui suit, je donne une introduction à la technologie des plug-ins ainsi
que l’implémentation de l’extension en question que j’ai appelé Hannibal Viewer.
18
L’architecture des plug-ins de Netscape Navigator est basée sur des modules de
code à chargement dynamique4 . Ces modules résident dans un répertoire ou sous-
dossier5 nommé PLUGINS que Navigator lit durant son démarrage. Chaque module
dispose d’une ressource qui détermine le type de média (type MIME) qu’il sait gérer,
lorsque Navigator rencontre ce type MIME intégré dans une page Web à travers HTML
ou en tant que fichier séparé, il charge le module approprié.
Ceci permet au navigateur de “comprendre” qu’il doit ouvrir une fenêtre de di-
mensions 300x134 pour y afficher une vidéo contenue dans le fichier dialog.mpg. Le
type MIME spécifié explicitement par l’attribut TYPE informe donc le navigateur qu’il
doit lancer le plug-in approprié.
le navigateur définit des méthodes dont les noms commencent par NPN c’est à
dire une méthode d’interfaçage des Plug-ins Netscape définie du côté Navigator,
4
Il s’agit de librairies DLL sous Windows et de librairies partagées shared object code (.so) sous Unix.
5
L’appellation diffère selon les plateformes
19
NPP_X
Netscape
Navigator
Module
Plug-in pour
Navigator
NPN_X
le plug-in doit, à son tour, définir des méthodes commençant par NPP .
Avec Navigator 3.0, Netscape a amélioré son API et a introduit LiveConnect qui
est une technologie pour intéger des plug-ins avec des appliquettes Java et des scripts
JavaScript. Avec ces extensions, le modèle des plug-ins devient plus riche et plus com-
plexe (figure 2.2).
Lors de son démarrage, Navigator consulte la liste des plug-ins installés et les inter-
roge pour savoir les types de média qu’ils gèrent. Un plug-in n’est chargé que si besoin
est.
La fenêtre du plug-in reçoit les événements générés par l’utilisateur (clicks, touches,
etc.) et par le gestionnaire de fenêtres (redimentionnement, exposition, etc.). Le plug-in
peut traiter les événements pour personnaliser son comportement et relayer à Nav-
igator ceux qui subiront le traitement par défaut [ZaO]. Le modèle de gestion des
événements est explicité dans la figure 2.3.
20
Navigator 3.x Code du Plug-in
Routines NPN_
de l’API
Méthodes
Appel de
Java
méthodes Java
natives
Applettes Java et
Java Runtime Int.
Classe Plugin
JavaScript
HTML
Activité de
l’utilisateur
Fenetre
du plug-in
Procédures
Evénements
de la fenetre
des fenetres
du plug-in
Procédures
de la fenetre
de Navigator Evénements
filtrés
21
Plug-in Helper Appliquette
Facilité de mise en œuvre Bonne Mauvaise Moyenne
Vitesse d’exécution Bonne Moyenne Mauvaise
Aspect visuel Bon Mauvais Mauvais
Portabilité Moyenne Mauvaise Bonne
En effet, cette technique ne suppose pas que le client dispose d’une application donnée
ou d’un plug-in, et de ce fait,
une appliquette est généralement assez lourde à charger, surtout s’il s’agit de
manipulations graphiques intenses,
2.1.5 Comparatif
Le tableau 2.1 présente un comparatif sommaire des trois approches: appliquette,
helper et plug-in.
nature des documents présentés: simple texte (plain text) ou du texte formaté
(HTML)?
police: faut-il utiliser une police par jeu de caractère ou les mapper tous dans le
jeu de caractères d’une police unique?
22
En principe, dans notre problème, il convient d’implémenter un plug-in qui gère
le type MIME “text/html; charset=iso-8859-6”. Le problème avec cette approche est
qu’il faudra écrire un analyseur syntaxique HTML (parser) qui sache faire l’affichage
de toutes les balises (rendering), il s’agit en fait d’un navigateur à part entière. Je n’ai
pas écrit un tel plug-in pour deux raisons:
cette solution existe déjà et je ne voulait pas proposer, dans le cadre de ce travail,
une solution existante,
la réalisation d’un tel plug-in aurait été très complexe et trop longue,
Ecrire un plug-in qui gère le type de média text/html est en quelque sorte réécrire
un navigateur. En effet, l’objectif de ce travail est d’ajouter au navigateur la capacité
d’afficher des documents Arabes, ce qui revient à ajouter un support pour l’écriture
de droite à gauche et pour la jointure des caractères. Mais, le modèle des plug-ins ne
permet que la prise en charge de tout un type de média, ainsi il n’est pas possible de
ne gérer que les textes Arabes dans une page HTML.
L’écriture d’un parser HTML n’est pas facile à cause des technologies propriétaires
des constructeurs. D’ailleurs aucun des deux navigateurs les plus populaires (Netscape
Navigator et Microsoft Internet Explorer) ne supporte toutes les balises de HTML 3.2.
Les difficultés majeures dans l’écriture d’un tel outil sont:
la gestion de tous les formats graphiques standards (GIF, JPEG, XPM, etc) et donc
l’implémentation des algorithmes de décompression et d’affichage,
l’exécution des appliquettes Java sous la machine virtuelle Java disponible sous
Navigator,
La quasi totalité de ce travail est déjà faite par Netscape! , et en utilisant un tel plug-in
l’utilisateur aura deux navigateurs qui tournent sur sa machine, et comme le binaire de
Navigator fait déjà près de 7Mb, la machine cliente aura des problèmes de surcharge.
En plus de ces problèmes, j’ai eu beaucoup de peine à trouver de la documentation
sur les plug-ins. En effet, le kit de développement des plug-ins de Netscape ne contient
qu’un descriptif des fonctions de l’API.
Pour réduire la taille du problème, j’ai décidé de ne traiter dans Hannibal Viewer
que le type de média text/plain. Ce type de média peut être paramétré par l’attribut
“charset”, qui vaut par défaut US-ASCII [BoF93].
23
2.2.2 Le Jeu de Caractères
Le jeu de caractères le plus standard est sans doute ISO-8859-6. Microsoft CP-1256 est
propriétaire et ASMO 449 et ISIRI 3342 ne définissent pas de glyphes Latins.
La technologie des plug-ins de Netscape permet à un plug-in de gérer plusieurs
types MIME. En effet, lors de la notification d’un nouveau flux, Navigator signale le
type MIME dans le paramètre type de NPP NewStream(). La police à utiliser pour
l’affichage a un encodage donné, et pour utiliser plusieurs encodages il faudra soit
utiliser plusieurs polices (une par encodage) soit utiliser une unique police et faire des
conversions vers un encodage particulier.
J’ai choisi de gérer les types de média suivant [IAN]:
text/plain; charset=ISO-8859-i.
text/plain; charset=ISIRI-3342,
text/plain; charset=CP-1256
2.3 Réalisation
2.3.1 Plate-forme
Dans un but de portabilité et d’ouverture de l’outil réalisé, j’ai opté pour une plate-
forme de développement X Window [AlJ] sur UNIX sachant que le navigateur utilisé
est Netscape Navigator. Le plug-in est écrit en C, sous Linux, et compilé avec le com-
pilateur C/C++ de GNU version 2.7.2.1.
2.3.2 Implémentation
Après une étude approfondie de l’API des plug-ins de Netscape (voir annexe D), j’ai
construit une squelette de plug-in que j’ai enrichie au fur et à mesure de mes lectures.
Au lancement, le plug-in s’enregistre chez Navigator pour gérer les types MIME
cités plus haut. À l’arrivée d’un nouveau flux, le plug-in retourne dans stype la valeur
NP FILEONLY pour déclarer qu’il ne gèrera pas le flux “au vol”. Navigator devra donc
enregistrer le document en entier dans son cache et passer un descripteur vers le plug-
in. La figure 2.4 montre les appels échangés entre Navigator et Hannibal Viewer pour
traiter le document.
À chaque demande de mise à jour de la fenêtre de Navigator (sur redimention-
nement de la fenêtre, traitement d’un nouveau flux, etc) le plug-in alloue un block
mémoire avec NPN MemAlloc() pour traiter le document ainsi qu’une ressource de
type police de caractères. La police utilisée dans le plug-in est une police Naskh ( f v ),
c’est la même police fournie avec AraMosaic et conçue par LangBox, Int.
Les fonctions principales de Hannibal Viewer sont:
24
Navigator Plug-in
Initialisation
NPP_Init()
Flux entrant
NP_FILEONLY
Téléchargement
Descripteur du
fichier dans le cache
HAN MakeString(): construit une chaine qui ne dépasse pas les bords de la
fenêtre,
HAN RevertString(): inverse une chaine de caractères, n’est appelée que lorsqu’il
s’agit de type text/plain; charset=ISO-8859-6-i,
HAN JoinChars(): applique les règles d’écriture de la langue Arabe pour join-
dre les caractères selon leur position relative,
Le source est très largement commenté et peut ainsi être étendu sans difficultés moyen-
nant la compréhension de la technologie des plug-ins. L’algorithme de traitement du
document est le suivant:
Allocation de ressources
Tant que non Terminé
ContructionChaı̂ne()
Si Document fini, quitter
Joindre les caractères de la chaı̂ne
Inverser la chaı̂ne
Afficher la chaı̂ne
Fin
Procédure ConstructionChaı̂ne()
Si chaı̂ne vide, quitter
Pour les caractères de 0 à long(chaı̂ne)
Si le car. courant se fusionne à LAM et car. préc. est LAM
car. préc. = ISO MADDA LAM
car. courant = FormeAvecHAMZA(car. courant)
Sinon
Si (car. cour. modifie son prédecesseur) et (car. préc. ne se fusionne pas à LAM)
25
Figure 2.5: Recopie d’ecran de Hannibal Viewer
Il est aussi possible de passer le paramètre jeu de caractères dans une balise META
ordinaire:
META NAME=”charset” CONTENT=”iso-8859-6”
26
La balise HREF de HTML peut spécifier l’encodage du document sur lequel pointe
le lien, l’ajout de l’attribut CHARSET force l’encodage du document référencé par le
lien à la valeur spécifiée.
a CHARSET=”iso-8859-6” href=”http: //www.hannibal.tn/docs/FAQ.ar.html” Han-
nibal FAQs /a
27
Chapitre 3
Répertoires: les répertoires, comme Yahoo! 3 , dépendent des humains. Les ad-
ministrateurs fournissent, à la main, des descriptions de leurs sites, les recherches
se font sur les descriptions fournies. La modification ou même la disparition du
site n’influe pas sur son référencement dans le répertoire.
28
humains ou par des outils logiciels comme ceux des moteurs de recherche. Par
opposition aux répertoires, il n’y a pas de garantie d’être listé.
le site est un lieu de référence: ce genre de sites accepte des millions de connex-
ions par jour, puisqu’il est un site prévilégié par des utilisateurs de tout profil,
Un site comme AltaVista est un exemple typique des moteurs de recherche. Il s’agit
d’un projet lancé par Digital, Inc. et devenu accessible au grand public en 1995. Ce mo-
teur de recherche tourne sur des serveurs Digital AlphaServer de haute performance
et est relié à Internet par 10 connexions OC-48 à 2.48 Gbps, le site est aussi relié aux
grands réseaux d’accès, tels UUNET et GTE Internetworking, par des connections à
100Mbps. Les AlphaServer sont assez puissants pour exécuter les requêtes en moins
de 0.5 seconde sachant que l’index contient plus de 50 millions d’URL.
29
3.2 Les Robots du Web
Un robot est un client HTTP qui traverse automatiquement la structure hypertexte
du Web en rapatriant un document et, recursivement, tous ceux qu’il référence. Les
agents utilisateurs (clients HTTP) ne sont pas des robots, car ils sont commandés par
des humains.
Plusieurs appellations synonymes sont utilisées dans la littérature comme spider,
worm, crawler et wonderer pour désigner les robots du Web. Dans le jargon de l’Intelligence
Artificielle, il arrive de parler d’Agents Mobiles sur Internet pour les désigner. Ces ap-
pellations sont parfois sources de confusion, car elles donnent l’impression qu’un code
exécutable se “déplace” sur le réseau.
Dans l’annexe B on trouve une déscription assez détaillée du système Harvest qui
fait office d’un système de gestion d’information complexe et qui peut servir comme
un robot. Dans la mise en place du moteur de recherche Hannibal Crawler, j’ai utilisé
Harvest. Ce choix est édicté par plusieurs facteurs (voir plus loin) dont la disponibilité
du code source.
3.2.1 Usages
Les robots peuvent être utilisés pour plusieurs raisons [MaK95]:
validation de code HTML: analyse syntaxique du code HTML d’un site pour
le certifier conforme aux recommentations W3C ou pas. Le problème de code
HTML invalide commence à s’accentuer à cause des technologies propriétaires
diverses, heureusement les navigateurs ignorent le code non reconnu. En principe,
cette tâche incombe aux systèmes auteurs HTML.
mirroring: les institutions qui maintiennent des grosses archives FTP de docu-
ments ou de programmes et qui sont fortement sollicitées ont recourt à dupliquer
ces archives dans plusieurs zones géorgaphiques pour réduire le trafic et dis-
tribuer la charge sur les serveurs. Pour garder une copie exacte du site d’origine
il faut faire des mises à jour périodiques et automatiques par des robots. Le mir-
roring de sites FTP est une pratique très en vogue, le mirroring de sites HTTP
est beaucoup plus complexe. En effet, il est plus difficile de connaı̂tre la date de
mise à jour d’un document, les références doivent être changées pour pointer sur
les copies au lieu des originaux, les références vers des documents non copiés ne
doivent pas changer,
30
découverte de ressources: c’est sans doute l’application la plus utile des robots.
Un site de recherche utilise un robot pour parcourir une large partie du Web (ou
le Web en entier s’il a les moyens! ) et créer un index accessible par les utilisa-
teurs pour des recherches par mots clés. Les liens invalides sont automatique-
ment purgés grâce aux mécanismes de maintenance d’index.
Demande élevée en bande passante: pour accélérer les transferts certains robots
ouvrent des connexions parallèles, et comme TCP équilibre la charge par connex-
ion et non pas par protocole, les autres utilisateurs souffriront d’un manque de
bande passante. Ceci est parmi les raisons de la remise en cause de la gratuité
d’Internet. Les serveurs peuvent être soumis à de fortes charges si le robot lance
des requêtes nombreuses en un intervalle de temps court (rapid fire), ceci peut
dans des cas extrêmes causer le crash du serveur HTTP,
Coût des mises à jour: la gestion des mises à jour implique un estampillage (time
stamping) des documents de l’index qui s’avère parfois difficile à gérer. Pour cette
raison, certains robots n’implémentent pas corretement ces mécanismes ce qui
entraı̂ne une croissance inévitable du trafic inutile,
Il faut donc prendre beaucoup de soins lors de la configuration d’un robot pour ne
pas trop contraindre les ressources du Web: communications et serveurs. En outre,
d’autres complexités font que les développeurs de robots sont confrontés à des problè-
mes divers:
31
Savoir quoi inclure/exclure: un robot est généralement incapable de décider de
l’utilité d’un document. L’intêret d’un document depend de l’audience qui n’a
pas, le plus souvent, un profil clairement définit ce qui amène le robot à inclure
pratiquement tout document rencontré. Pour spécifier (explicitement) aux robots
les parties d’un site à indexer, un standard Internet pour l’exclusion des robots,
qui est encore à l’étape de draft, a été définit. Ce standard permet aux adminis-
trateurs des sites Web (webmasters) de spécifier les zones de l’arborescence qui ne
se prêtent pas à une indexation (voir annexe C.2),
Indexation des documents: la création d’un résumé à partir d’un texte est encore
un sujet de recherche, les robots actuels utilisent des algorithmes très simples
pour extraire des mots clés d’un document. Par exemple, l’indexation d’un doc-
ument peut consister à en extraire le premier paragraphe et la première ligne de
chaque paragraphe qui suit.
Classification des documents: la recherche thématique est une facilité très recher-
chée par les utilisateurs des systèmes de recherche, et c’est l’un des atouts ma-
jeurs des répertoires sur les moteurs de recherche. Les balises META de HTML
permettent d’inclure des informations supplémentaires et peuvent être utilisées
pour communiquer la classe du document. Mais, les systèmes de classification
classiques utilisés dans les librairies ne sont pas unifiés, il sera donc très difficile
d’imposer un standard de classification sur le Web.
garantir que les serveurs puissent reconnaı̂tre le robot et que son administrateur
puisse être contacté,
32
Moteurs de recherche Répertoires
Qualité de l’index Moyenne/mauvaise Bonne
Sollicitation de l’utilis. Faible Forte
Absolescence Peu probable Élevéee
La déclaration de l’URL se fait d’une manière très simple et ne nécessite que l’URL sans
informations additionnelles, le script qui gère la liste des URLs s’assure que l’URL n’est
pas déjà déclaré. La mise à jour de l’index se fait périodiquement.
Le déploiement de Hannibal se fera par étapes et se concentrera sur les fournisseurs
d’accès Internet car ils offrent, exclusivement, les services d’hébergement. Tout d’abord,
il sera installé sur une machine chez Planet Tunisie qui est un partenaire de MRS.
La distribution du processus de collecte (gathering) économisera beaucoup de trafic
sur le réseau. Il serait donc très intéressant d’installer des gatherers chez ATI et 3S
Global Net en premier lieu, puis chercher à coopérer avec d’autres fournisseurs de
services dans le Monde Arabe.
33
Figure 3.1: Recopie d’écran de la page d’accueil de Hannibal Crawler.
34
3.3.3 Langage de Requêtes
L’indexeur utilisé dans Hannibal Crawler est Glimpse, il offre plusieurs possibilités
avancées:
Retourne tous les objets qui contiennent les mots consécutifs informa-
tique industrielle.
Retourne tous les objets dont l’attribut Title contient le mot protocoles.
Expressions régulières:
35
Remerciments
Je tient à exprimer ma gratitude et mes sentiments de respect profond envers D R .
M OHAMED S A ÏD O UERGHI. En effet, son experience et son savoir faire m’ont fait
économiser énormement d’efforts et en dehors des obligations professionnelles il est
une personne de qualités rarissimes.
36
Conclusion
Ce travail a traité deux problèmes, à savoir: le support de la langue Arabe dans les
navigateurs du Web et la mise en place d’un service de recherche sur des serveurs
bilingues (latin ou arabe). Nous avons donc développé un plug-in Hannibal Viewer
pour résoudre le premier problème et nous avons transformer le système Harvest pour
décrire le moteur de recherche Hannibal Crawler.
Bien que le plug-in développé n’apporte pas la solution adéquate au problème de
la langue Arabe sur le Web, il peut être considéré comme une contribution utile. La
solution ultime pour ce problème est sans doute Unicode, les nouveaux navigateurs
commencent à offrir un support complet pour Unicode et l’encodage UTF-8.
La version actuelle du plug-in pour X Window doit se compiler sans problèmes
sur la plupart des plate-formes UNIX modernes. Son portage sous Windows doit se
faire sans grande difficulté car le noyau de ce système est compatible POSIX et parce
qu’il existe par ailleurs des émulateurs X Window. En effet, les routines graphiques
utilisées sont de bas niveau (uniquement Xlib) et peuvent être facilement mappées
vers la plupart des APIs des interfaces graphiques modernes.
Les extensions du plug-in qui pourraient être apportées couvriront l’aspect présen-
tation et encodage. Concernant l’aspect présentation, il serait, par exemple, intéressant
d’ajouter un analyseur syntaxique réduit de HTML qui ne reconnaı̂t qu’un sous-ensemble
de balises qui améliorent l’aspect érgonomique des documents et permettent de gérer
les hyperliens. Pour l’ajout d’un autre encodage, il suffirait d’ajouter une police par
encodage ou de mapper les nouveaux encodages vers un seul.
Le moteur Hannibal Crawler permet d’effectuer de simples recherches par mots
clés mais également selon des expressions régulières ou booléennes (une certaine syn-
taxe est prévue dans ce cadre). Dans son mode Advanced Query, il est possible d’intégrer
une certaine recherche “sensitive” acceptant des erreurs dans les mots clés. Les résultats
de la recherche peuvent donner lieu à du texte en Arabe. Ceci est possible dans la
mesure où les mots clés pointent sur des documents dont le contenu est en Arabe. Que
faut-il de plus pour construire un vrai moteur de recherche intégrant complètement la
langue Arabe?
La réponse à cette question dépend énormément de deux choses: la première est
la capacité du système Harvest d’indexer des documents d’encodage quelconque, la
deuxième est le temps nécessaire pour modifier le noyau de ce système (dans sa ver-
sion actuelle l’archive est de quelque 1.5 Mb à décortiquer après décompression! ).
Remarquons pour conclure, que ce travail n’est sans doute pas inutile, car il nous
a permis de mettre en exercice les problèmes relatifs à l’internationalisation des appli-
cations (et notamment du Web). Cependant, il existe pour des solutions d’accès Web
en Arabe livrables tout de suite à savoir le navigateur Sindbad de Sakhr et le moteur
Ibhath de Ayna4 .
4
http: //www.ayna.com
37
Glossaire
MIME Multipurpose Internet Mail Extensions. Des spécifications pour étendre les
possibilités de la messagerie sur Internet aux transmissions de documents
multimedias.
IETF Internet Engineering Task Force. Un des organismes chargés d’éditer les doc-
uments de standardisation sur Internet.
Plug-in Un module logiciel qui s’ajoute à une application pour étendre ses possi-
bilités. Par opposition aux modules logiciels modernes (tels Java Beans), un
plug-in dépond de la plateforme et de l’application.
Appliquette Une application Java qui tourne dans la machine virtuelle Java implémentée
par le navigateur avec certaines restrictions. Les appliquettes sont un Byte
Code Java qui est transmit depuis le serveur HTTP vers le client.
Helper Une application externe qui rend des services à une application donnée en
augmentant ces possibilités.
Robot Dans le jargon des systèmes d’information, un client qui accède automa-
tiquement aux serveurs pour effectuer une tâche donnée.
38
Annexe A
Configurer Hannibal
Ceci crée un répertoire npav. Pour compiler il faut se placer dans npav/unix et lancer:
39
A.2 Compiler et Installer Harvest
Harvest est distribué au format source ou binaire pour quelques plateformes, à l’heure
de l’écriture de ces lignes l’IRTF-RD distribue la version 1.5. Pour installer Harvest, il
suffit de lancer ces commandes:
% configure
% make all
% make install
Par défaut, Harvest est installé dans /usr/local/harvest. Pour choisir un autre
lieu, il suffit de changer le paramètre prefix dans l’entête des fichiers Makefile.
Le script RunHarvest offre une interface interactive pour lancer le gatherer et le
broker et faire les paramètrisations souhaitées.
Ceci suppose que Harvest est installé sous /usr/local/harvest. La ligne ScriptAlias
sert à autoriser l’exécution de scripts sous le répertoire spécifié, elle peut être remplacée
par:
qui autorise l’exécution de scripts n’importe où dans le système de fichiers moyennant
qu’ils portent l’extension .cgi. Pour forcer le seveur à relire son fichier de configura-
tion, il faut lui envoyer le signal SIGHUP (1).
Pour forcer le seveur à relire son fichier de configuration, il faut lui envoyer le signal
SIGHUP (1).
40
A.3.3 Serveur Netscape
Depuis l’interface d’administration, choisir “URL mapping Map a URL to a local di-
rectory” et mapper /Harvest à /usr/local/harvest/.
Sous “CGI and Server Parsed HTML Activate CGI as a file type...”, choisir dans
“Browse Files” la racine d’installation de Harvest et sélectionner “I’d like to active CGI
as a file type”.
41
Annexe B
Le Système Harvest
Harvest est un système conçu par le groupe de Resource Discovery à l’Internet Research
Task Force (IRTF-RD) dont la plupart des membres sont de l’Université de Colorado.
C’est un ensemble d’outils pour rassembler, extraire, chercher, cacher et dupliquer de
l’information pertinante à travers Internet d’une manière distribuée [BOW95].
Le but de Harvest est d’offrir un outil pour créer des indexes en faisant un bon
usage des serveurs sur Internet, des liens de communication et de l’espace disque.
Des mesures effectuées par les auteurs de ce système ont montré des performances
surprenantes par rapport à d’autres outils du même genre.
B.2 Le Gatherer
Le gatherer collecte les ressources en utilisant plusieurs méthodes d’accès: HTTP, FTP,
Gopher, NNTP et fichiers locaux [HSW96]. Selon le type du document, le gatherer
extrait des informations d’indexation structurées et les met à la disposition des bro-
kers pour la constitution d’indexes. Par exemple, si le gatherer accède à un document
technique au format LATEX, il en extrait le titre, le nom de l’auteur et le résumé dans
une structure. Cette structure est une liste de paires attribut-valeur conforme au Sum-
mary Object Interchange Format (SOIF). Le daemon gatherd sert une base de donnée locale
des objets collectés, ce serveur peut être interrogé à la main (depuis la ligne de com-
mande) par un client gather ou par un broker. Dans la suite on utilisera le terme objet
pour référencer une entité structurée stockable et transférable et qui contient un extrait
d’une ressource sachant qu’une ressource est tout document textuel ou non textuel.
42
Broker
1. Requetes Broker
de recherche
Client Gatherer
Replicateur
2. Accès
aux objets
cachés Fournisseur
Cache
#
# exemple.cf - Fichier de configuration d’un gatherer type
#
Gatherer-Name: Gatherer de test typique
Top-Directory: /usr/local/harvest/gatherers/typique
http: //www.ensi.rnrt.tn
http: //www.enit.rnrt.tn
/RootNodes
LeafNodes
http: //www.netcom.com.tn/docs/ATM/switches.html
http: //www.tmi.com.tn/os/solaris/sparc/latest.html
/LeafNodes
Les URLs listés sont soit des nœuds feuilles (LeafNodes) soit des nœuds racines
(RootNodes). Les nœuds feuilles spécifient des documents qui seront transférés et
traités par le gatherer. Les nœuds racines sont des racines d’arborescences que le gath-
erer doit énumérer récursivement pour avoir aucun, un ou plusieurs nœuds feuilles.
Dans le contexte de FTP et Gopher, l’énumération se fait en parcourant récursivement
le contenu des répertoires. Pour HTTP, l’énumération se fait en suivant récursivement
les liens dans les documents. Dans les news, l’énumération retourne tous les messages
dans un groupe de discussions.
43
Méthodes de Méthodes de Méthodes
reconnaissance de type sélection d’extraction
personnalisées personnalisées personnalisées
Liste
Nom d’objet
Données Reconnaissance et type Sélection des condidats
Extraction
à l’extraction
de l’objet du type de condidats d’informations
Fichiers Comosants
intégrés dépaquetés
Dépaquetage
Essence
Informations
Méthodes extraites
de dépaquetage aux format SOIF
personnalisées
Même que Harvest n’est pas conçu pour être un robot, il peut être utilisé pour
remplir les mêmes fonctions. Pour éviter les problèmes discutés plus haut, un nœud
racine n’est pas étendu à plus que 250 nœuds feuilles et le gatherer ne suit les liens que
s’ils sont à l’interieur du site spécifié par le nœud racine. Bien sûr ces paramètres sont
ajustables dans le fichier de configuration.
extrait (unnest) les documents intégrés dans des archives ou compressés par uuen-
code, tar, zip et gzip,
choisit les données à indexer, par exemple il rejette les documents audio parce
qu’ils ne seront pas indexés,
Un summarizer est un script spécifique à un type de document qui sait en extraire les
informations utiles à l’indexation. Le tableau B.1 [HSC95] liste les summarizers livrés
dans la distribution de Harvest et donne une idée sur ce que c’est “information utile”.
44
Type Données extraites
Audio Nom du fichier
Bibliographique Auteur et titres
Binaire Champs de texte significatifs
C, Entête C (.h) Noms des fonctions et commentaires
DVI Traite le texte sans formatage
FAQ, ReadMe Tous les mots
FrameMaker Converti en SGML
Police Commentaires
HTML Liens hypertextes et quelques champs particuliers
LATEX Auteur, titre, résumé, etc.
Courrier Quelques champs d’entête
Makefile Commentaires et noms des cibles
ManPage Synopsis, auteur, titre, etc
News Quelques champs d’entête
Code objet Table des symbôls
Patch Noms des fichiers à patcher
Script Perl Noms des procédures et commentaires
PostScript Les texte du document sans formatage
RCS, SCCS Renseignements du contrôle de version
RTF Converti en SGML
SGML Champs nommés dans les tables d’extraction
Script Shell Commentaires
Distribution de source Fichier README et commentaires des Makefiles
Lien symbolique Nom du fichier, propriétaire et date de création
TEX Le texte du document sans formatage
Texte Les 100 premières lignes et la première phrase des para. suiv.
TROFF Auteur, titre, etc.
non reconnu Nom du fichier, propriétaire et date de création
45
Autres
Gestionnaire de brokers
stockage et indexeur
Registre
d’objets Gatherer(s)
B.3 Le Broker
La fonction principale du broker est le maintient de l’index. La figure B.3 montre les
détails des composantes du broker. Les objets dans la base du broker sont au format
SOIF, ils sont rassemblés depuis les gatherers et utilisés pour construire l’index.
B.3.2 Le Registre
Pour identifier les objets et éviter les duplications, le broker utilise un identificateur par
objet: l’OID. Cet identificateur est construit d’une manière unique à partir de l’URL de
l’objet lui même et le nom, le hôte et la version du gatherer. L’OID est unique sur Inter-
net mais occupe trop d’espace pour servir d’identificateur dans une base de données,
le broker utilise pour son fonctionnement interne un Broker Unique Identifier (BUID) qui
est plus réduit en taille mais ne sert qu’à l’interieur du broker.
Le registre (registry) est une composante du broker qui maintient la liste des OID
et BUID et gère les accès aux renseignements sur les objets avec un mécanisme de
caching. Les objets, dont la durée de validité a expiré, sont supprimés du registre et du
gestionnaire de stockage.
B.3.3 L’indexeur
Harvest spécifie une interface vers l’indexeur mais ne spécifie pas un indexeur parti-
culier. En effet, dans la conception d’un indexeur il y a un énorme compromis entre
espace disque et rapidité d’accès, l’approche de Harvest permet de personnaliser les
46
/usr/local/harvest/brokers/Hannibal/objects/
/0 /1 .... /99
OBJ2100 OBJ4001 OBJ0199
OBJ0400 OBJ0101 OBJ2099
OBJ0001
indexeurs selon les besoins. La distribution de Harvest est livrée avec les indexeurs
Glimpse et Nebula.
B.3.4 Le collecteur
Le collecteur (collector) rassemble les objets depuis des gatherers ou d’autres brokers
et se charge des mises à jour des objets dans le broker. Le collecteur peut demander
la compression des objets tranférés pour réduire la bande passante consommée, il est
aussi possible de demander le transfert des objets plus récents qu’une date donnée.
L’ordonnancement des collections et les sites de collection peuvent être configurés par
l’administrateur.
47
Annexe C
Pour que le projet Hannibal puisse rendre des services de bonne qualité, il a besoin
de la coopération des concepteurs des sites Web. Même que Harvest est conçu pour
fonctionner sans la coopération des utilisateurs, il est toujours possible d’améliorer
la qualité des résultats de recherche en diffusant des documents qui se prêtent à une
bonne indexation. Dans le monde des documentistes on dit qu’un document mal in-
dexé est un document perdu, l’éditeur d’un document a donc interêt à ce que son
document soit bien indexé. Les sections suivantes présentes quelques astuces pour
améliorer la qualité de l’indexation et donc celle des résultats de recherche.
48
C.2 Le Protocole d’Exclusion des Robots
Le travail sur ce protocole [MaK97] est en cours. Il a été initié par Martijn Koster de
Nexor Inc., une extension aux agents mobiles a été étudiée par F. G UIDICI et A. S APIA
dans [?]. Ce protocole espère éviter des effets indisérables causés par les robots comme
l’indexation d’un site non encore annoncé et donc qui n’est pas censé être accédé pas
les utilisateurs, le parcours de parties du site Web qui demandent trop de ressources au
serveur (des scripts très lourds, des documents fortement liés, etc), le parcours récursif
d’un espace énorme d’URLs, etc. Ce protocole peut servir aux administrateurs pour
interdire explicitement l’accès à des parties du site Web par robot.
Un robot conforme à ce standard doit procéder à la lecture du fichier /robots.txt,
ce fichier doit être accessible par HTTP et de type de média text/plain. Si ce fichier
n’est pas diponible sur le site Web, le robot doit considérer qu’aucune restriction n’est
applicable.
Le fichier robots.txt contient des blocs qui, pour un ensemble d’agents utilisateurs,
spécifient les parties autorisées et les parties interdites. Dans l’exemple qui suit, il est
interdit aux robots des moteurs de recherche les plus connus (scooter est celui d’AltaVista)
de parcourir les documents sous /tmp sauf /tmp/ready.html. Le champs User-agent
peut accepter un joker “*” pour désigner tous les robots.
User-agent: webcrawler
User-agent: infoseek
User-agent: scooter
Allow: /tmp/ready.html
Disallow: /tmp
Disallow: /user/foolene
Si des mécanismes de caching sont utilisés, la durée de validité par défaut est de 7
jours.
[MaK97] donne la grammaire complète du fichier robots.txt et renvoie aux définitions
de token et path dans RFC 1945 et RFC 1808 respectivement.
Il faut veiller à ne pas exposer trop de ressources dans robots.txt, en effet n’importe
qui peut lire ce fichier et peut avoir une idée sur les documents et les applications
dans le site. Des informations pareilles sont parfois très utiles aux pirates! .
49
indique qu’il ne faut pas indexer cette page mais qu’il faudra passer, récursivement,
aux pages qu’elle référence. Le contenu de cette META est: index, noindex,
follow, nofollow, all=index+follow ou any=noindex+nofollow.
La META balise CHARSET est aussi d’une grande utilité pour connaı̂tre le jeu de
caractères utilisé et parsuite permettre à l’agent utilisateur de la présenter correcte-
ment. Il faut donc essayer d’inclure cette META balise à toute page éditée.
Les informations d’indexation extraites par les gatherers de Harvest comprennent
le plus souvent l’auteur et le titre du document. Alors, il faut veiller à choisir des titres
qui reflètent le contenu du document.
50
Annexe D
Lors de l’initialisation du plug-in, Navigator fournit une structure de pointeurs sur les
méthodes implémentées de son côté [NCI].
NPNetscapeFuncs;
51
ou par une demande explicite du plug-in (NPN NewStream()). La cause
de la déstruction du flux est donnée dans le paramètre reason.
NPN GetURL Demande à Navigator d’ouvrir un nouveau flux depuis l’URL spécifié
et retourne immédiatement. Le flux peut être envoyé au plug-in ou bien à
Navigator pour être traité sans l’intervention du plug-in.
NPN GetURLNotify Tout comme NPN GetURL() mais avec notification. Après l’appel,
Navigator informe le plug-in sur le succès ou l’echec de la tentative d’ouverture
de l’URL.
NPN NewStream Crée un flux généré par le plug-in et consommé par le Navigator.
NPN PostURL Envoie des données contenues dans un fichier ou un buffer en mémoire
vers un serveur distant. Cette méthode fonctionne avec pratiquement tous
les protocoles: news, HTTP, SMTP et FTP.
NPN PostURLNotify Tout comme NPN PostURL() mais avec notification du résultat.
NPN Status Affiche un méssage dans la barre d’état de Navigator. Cette méthode
peut s’avérer utile pour reproduire le comportement de Navigator qui af-
fiche les URLs des liens dans cette zone.
NPN UserAgent Retourne la chaı̂ne que Navigator utilise pour s’identifier chez les
serveurs HTTP. Il s’agit exactement de la valeur du champ “User Agent”
de l’entête HTTP.
NPN Version Retourne la version de l’API des plug-ins supportée par Navigator. Les
valeurs plugin major et plugin minor spécifient la version et la sous-
version de l’API.
NPN Write Ecrit des données vers un flux déstiné à la consommation par Navigator.
52
D.2 API: Services du Plug-in
NPP Destroy Détruit une instance d’un plug-in, cette méthode est appelée lorsque
l’utilisateur quitte la page qui contient l’instance ou lorsqu’il ferme la fenêtre.
NPP Initialize Effectue des initialisations globales. Cette méthode est appelée une
seule fois lors du chargement du plug-in et avant la création de toute in-
stance. Les ressources allouées au niveau de cette méthodes sont, en principe,
libérées par NPP Shutdown().
NPP New Crée une nouvelle instance d’un plug-in et passe un paramètre mode qui in-
forme sur l’aspect su plug-in: NP EMBED pour un affichage dans une sous-
fenêtre de la page HTML ou NP FULL pour un affichage pleine fenêtre.
NPP NewStream Informe une instance de l’arrivée d’un nouveau flux et fournit son
type MIME. Un poiteur sur un entier stype est passé pour permettre au
plug-in de choisir la manière dont it aime traiter le flux. Un plug-in peut
traiter un flux en entrée par une série d’appels à NPP WriteReady() et
NPP Write() (NP NORMAL) ou laisser Navigator télécharger la totalité du
flux et le traiter comme fichier ordinaire (NP ASFILEONLY).
53
NPP URLNotify Notification du plug-in sur la terminaison d’une requête d’ouverture
de flux avec NPN GetURL(), cette méthode fournit l’URL en question et
la raison de la terminaison: normale (NPRES DONE), sur interruption par
l’utilisateur (NPRES USER BREAK) ou sur un problème de réseau
(NPRES NETWORK ERR).
NPP Write Dans le cas ou le plug-in choisit un mode NP NORMAL, Navigator com-
mence à lui délivrer le flux par bloc en appelant cette méthode.
NPP WriteReady Appelée par Navigator pour interroger le plug-in sur le facteur de
blocage des transferts, c’est à dire la taille des bloc de données qu’il est prêt
à gérer.
54
Bibliographie
55
[FrY97] F. Y ERGEAU , G. N ICOL , G. A DAMS , M. D UERST, ”Internationalization of the
Hypertext Markup Language”, RFC 2070 (Standards Track), Janvier 1997.
[KlL93] K LAUS L AGALLY, “ArabTEX - a System for Typesetting Arabic, User Manual
Version 3.00”, Universität Stuttgart, Fakultät Informatik, Novembre 1993.
[MaK95] M ARTIJN K OSTER, “Robots in the Web: threat or treat? ”, NEXOR, Avril 1995.
[WGC94] W ILLIAM G. C AMARGO, “The Harvest Broker”, The Pennsylvania State Uni-
versity, Décembre 1994.
56
Index
Caractère, 9, 10 UCS, 14
CGI, 27 Unicode, 14, 15
Unix, 24, 37
Diacritiques, 11 US-ASCII, 9
UTF, 14
EMBED, 19
Exclusion des robots, 32 W3C, 30
Web, 29–31
FTP, 30
Gatherer, 42
Hannibal, 32, 33
Harvest, 42
Helpler, 20
HTML, 14, 18, 22, 26, 30
HTTP, 27, 28, 30, 31, 42
IANA, 19
Index, 31, 32
ISIRI, 10, 24
ISO 8859, 9, 22, 24, 25
57