• Aucun résultat trouvé

5. Intégration au système de recherche de Sésamath

5.1 Présentation de la bibliothèque

5.1.3 Librairies JavaScript

Plusieurs librairies JavaScript sont utilisées dans l’application Bibli pour exécuter des opérations depuis le navigateur Web de l’utilisateur :

− head.js : permet de charger tous les autres fichiers de script d’un site sans bloquer le chargement de la page. De plus, il permet d'optimiser le temps de chargement des pages Web ; − jquery.js : librairie portant sur l'interaction entre JavaScript (comprenant AJAX) et HTML, et

ayant pour but de simplifier des commandes communes de JavaScript ;

− json2.js : permet d’analyser une chaîne en JSON ;

− jstree.js : librairie permettant la création et la manipulation d’arbres ;

− underscore.js : apporte un ensemble d'une soixantaine de fonctions pour JavaScript très utiles et efficaces permettant de simplifier les développements ;

− swfobject.js : librairie permettant d’afficher du Flash dans une page HTML ;

L’application Bibli utilise aussi plusieurs codes JavaScript développés directement par Sésamath.

5.2 Intégration à Bibli

L’intégration des clients de test du chapitre 4 dans le code source de la bibliothèque a été réalisée en parallèle des développements spécifiques à cette dernière. L’infrastructure a tout d’abord été installée sur la machine virtuelle hébergée par le LIG, où les composants d’Intergeo avaient été installés pour réaliser les démonstrations. Cette machine a été utilisée lors des premières démonstrations du système à la maîtrise d’ouvrage Sésamath.

Un serveur d’applications Tomcat a ensuite été rajouté dans l’infrastructure de développement de Sésamath pour déployer le service Web Solr et réaliser l’indexation de l’ontologie GeoSkills et de la base de données Bibli. La figure 87 présente cette nouvelle architecture hébergée par Sésamath.

Les JavaScript, images et CSS nécessaire au fonctionnement de Compmep ont été installés dans le répertoire Symfony « src/Sesamath/BibliBundle/Resources/public/Compmep/ ». La figure 88 montre l’arborescence complète du répertoire contenant l’ensemble du code source de Bibli.

bibli/src/Sesamath/BibliBundle |--- Tests/Controller |--- DependencyInjection |--- Resources |--- translations |--- doc |--- public |--- Compmep |--- css |--- html |--- images |--- js |--- xml |--- phplibs |--- views |--- Default |--- Niveau |--- SolrRessource |--- TypeTech |--- Form |--- Ressource |--- Tree |--- config |--- Entity |--- Form |--- Services |--- Controller |--- Command

Figure 88 - Arborescence du répertoire « src » de Bibli

La partie présentation HTML a été intégrée dans les vues TWIG de la bibliothèque.

5.2.1 Vue layout.html.twig

La vue « layout.html.twig », représentant la page d’accueil du site illustrée par la figure 89, a été modifiée pour prendre en compte la zone de saisie des notions et des capacités. Cette page HTML charge aussi les différents JavaScript développés pour les différents prototypes présentés dans le chapitre 4 de ce mémoire

Sous la zone de saisie, un formulaire HTML caché, du type <input type="hidden">, permet de collecter l’URI, le nom par défaut et le type de la notion ou capacité sélectionnée suite à la recherche dans l’index ontoindex. Ces valeurs sont écrites dans le formulaire sous la forme d’un tableau JSON transformé en chaîne de caractères. Cette transformation est réalisée grâce à la méthode JSON.stringify de l’API Jquery afin de pouvoir transférer l’objet JSON au serveur.

Le formulaire est ensuite dynamiquement soumis par le JavaScript à un contrôleur pour rechercher les ressources liées à la capacité ou notion choisie dans l’index sesaindex.

5.2.2 Contrôleur

Un contrôleur Symfony prend l'information provenant de la requête HTTP, effectue un traitement et retourne une réponse HTTP.

L’intégration du prototype Compmep a nécessité l’ajout d’une méthode spécifique au contrôleur Symfony pour la recherche de ressources par les notions et capacités sur sesaindex. Initialement, le prototype de recherche, évoqué dans le chapitre 4.5, avait été écrit uniquement en HTML et JavaScript. L’interrogation de l’index sesaindex s’effectuait directement depuis le JavaScript par des requêtes AJAX. L’affichage du tableau des résultats était aussi géré JavaScript. L’intégration dans Symfony nous a obligé à mettre en place un système respectant le modèle MVC. La communication entre le contrôleur Solr et le serveur Solr est assurée par le bundle Symfony « Nelmio » qui utilise le client Solr Solarium évoqué dans le chapitre 4.1.6 de ce mémoire [NELMIO 2012].

La fonction filtreResultsAction, consultable en annexe 5A, du contrôleur solrcontroller.php reçoit le formulaire envoyé, suite à la sélection d’une notion ou d’une capacité par l’utilisateur, et transforme à nouveau la chaîne de caractères JSON en objet JSON grâce à la fonction PHP json_decode.

La fonction utilise la fonction initSolRService pour s’allouer une instance de recherche sur l’index sesaindex. Une requête de recherche Solr est ensuite constituée à partir de l’URI de la capacité ou notion issue du formulaire. La recherche est effectuée sur les champs « capnotion », pour les notions et capacités directement liées à la ressource, et ancestor. Cette requête effectue un « OU » entre ces 2 champs. Le service Web Solr retourne une liste des ressources, classées par pertinence. Les champs capnotion sont privilégiés par Solr car ils sont moins nombreux que les champs ancestor.

Le classement est réalisé selon les règles Solr suivantes :

− une ressource trouvée par le champ capnotion ne contenant que l’URI sera classée en premier ;

− une ressource trouvée par le champ capnotion contenant l’URI et d’autres sera classée en second. Plus il y a de champs capnotion liée à la ressource, plus le score et donc le classement de la ressource décroîtra ;

− une ressource trouvée dans le champ ancestor sera dans la fin du classement. Plus il y a de champs ancestor moins la ressource est pertinente.

Le résultat de la réponse Solr est ensuite formaté dans un tableau pour être envoyé à la vue filtresolr.html.twig qui affichera les ressources avec toute les caractéristiques souhaitées.

5.2.3 Vue filtresolr.html.twig

Les résultats sont affichés dans la vue filtresolr.html.twig spécialement créée à cet effet. La figure 90 illustre l’affichage d’une partie des ressources trouvées à partir de la notion angle.

5.2.4 Autres fonctions

Lors de l’intégration de Compmep, deux fonctions du contrôleur RessourceController.php ont été modifiées pour prendre en compte la problématique de cohérence entre la base de données et l’index sesaindex.

Les fonctions updateAction et deleteAction permettant respectivement de modifier et supprimer une ressource au niveau de la base de données Bibli ont été enrichies afin d’appliquer ses actions en

parallèle dans l’index. Les actions de mise à jour et de suppression d’une ressource dans sesaindex font appel à des fonctions d’un service Symfony développé spécialement pour réaliser ces opérations.

5.2.5 Service Solr

Un service Symfony permet de standardiser et centraliser des fonctionnalités pouvant être appelées par différentes fonctions de l’application.

Les fonctions de mise à jour et de suppression dans solrservice.php utilisent aussi le bundle Nelmio et la librairie Solarium pour réaliser les actions. Le principe est similaire à la fonction filtreResultsAction évoquée dans le chapitre 5.2.3.

5.2.5.1 Mise à jour d’une ressource

La fonction updateAction du contrôleur des ressources envoie l’objet « entity » et un tableau JSON des capacités et notions de la ressource à mettre à jour à la fonction updateSesaIndex du service. Cette fonction utilise plusieurs fonctions de la librairie Solarium pour constituer la requête de mise à jour :

− createUpdate : initialisation de la requête ;

− createDocument : initialisation du document de la ressource à mettre à jour ;

− addField : ajout des capacités et notions au document. La fonction addField permet de prendre en compte les champs à valeur multiple ;

− addCommit : information indiquant à Solr de valider l’opération après traitement ;

− addOptimize : information indiquant à Solr d’optimiser (suppression du document vide) l’index après traitement [SOLARIUM 2012].

L’identifiant, le titre, la description et le type de la ressource sont extraits de l’objet entity et ajoutés au document de la requête de mise à jour. Les capacités et notions sont extraites du tableau JSON et ajoutées au document. L’exécution de la requête s’effectue par l’appel de la fonction « update » fournie par la librairie Solarium. Si la modification échoue, la requête est sauvegardée dans un fichier pour relancer l’opération par un programme journalier qui reste à développer.

5.2.5.2 Suppression d’une ressource

La fonction deleteAction du contrôleur des ressources envoi l’identifiant de la ressource à supprimer à la fonction deleteSesaIndex du service. La fonction deleteSesaIndex utilise plusieurs fonctions de la librairie Solarium pour constituer la requête de suppression :

− createUpdate : initialisation de la requête ;

− addDeleteById : identifiant de la ressource à supprimer ;

− addCommit : information indiquant à Solr de valider l’opération après traitement ;

− addOptimize : information indiquant à Solr d’optimiser (suppression du document vide) l’index après traitement.

L’exécution de la requête s’effectue par l’appel de la fonction update fournie par la librairie Solarium. Si la suppression échoue, la requête est sauvegardée dans un fichier pour relancer l’opération par un programme journalier qui reste à développer.

5.2.5.3 Autres fonctions

Le service solrservice.php est composé de plusieurs autres fonctions utilisées dans le cadre du peuplement de l’index sesaindex :

− initSesaIndex : réalise l’import des ressources depuis la base de données ;

− searchSolR : effectue des recherches dans les index en fonction du nom de l’index passé en paramètre ;

− populateSesaIndex : lie des capacités et notions à une ressource ;

− popUpdate : mise à jour de certaines ressources avec des capacités et notions après l’exécution de populateSesaIndex ;

− commitSesaIndex : valide et optimise l’index sesaindex lors de l’exécution de populateSesaIndex.

Ces fonctions sont appelées par le programme PopulateSolRCommand.php qui réalise le peuplement de l’index sesaindex.