Dans cette section nous présentons la deuxième version du moteur de recherche LOFAR tout d'abord d'un point de vue fonctionnel puis d'un point de vue technique. Cette deuxième version du moteur est utilisable à l'adresse suivante : http://lofar2.insa-rouen.fr/moteur.
Utilisation du moteur de recherche
Pour rappel l'objectif de ce moteur de recherche est de proposer des ressources pédagogiques compatibles avec des cours proposés par un établissement de l'enseignement supérieur. Dans la première version la liste des cours proposés était celle du département ASI et les ressources étaient celles proposées par UNIT. Cette deuxième version de LOFAR propose toujours cette fonctionnalité, mais elle a aussi été étendue à l'INSA Rouen Normandie pour ce qui concerne la liste des cours (cf. la section INSA Rouen) et à Sup Numérique pour ce qui est ressource (cf. la section Sup Numérique).
Comme l'indique la figure ci dessous, la première page de ce moteur affiche deux informations :
- la source, c'est-à-dire l'organisme qui expose ces cours. Par défaut, comme pour la première version de LOFAR, c'est le département ASI qui est sélectionné.
- la liste des cours de l'organisme précédemment sélectionné, on retrouve donc ici la liste des cours proposé par le département ASI.

Lorsque l'utilisateur sélectionne un cours, par exemple "Qualité et notions juridiques" (exemple que nous avions vu dans la section Rappels), comme l'indique la figure suivante, une deuxième page du moteur de recherche apparaît, présentant un résumé du cours sélectionné (titre et description) et dix ressources issus d'une source des descriptions de ressources, ici SemUNIT.

Tout comme dans le version 1 du moteur de recherche, la plupart des ressources proposées ne correspondent pas au cours sélectionné. Nous avions émis l'hypothèse que cela était dû à la source des descriptions de ressources (SemUNIT) qui indexe uniquement des ressources du domaine des sciences de l'ingénieur, pas du domaine du droit ou de la démarche qualité. Mais à la différence de la version 1, on peut ici changer d'indexeur de ressources pédagogiques, et choisir par exemple SupNumérique. Or comme SupNumérique indexe aussi les ressources de l'UNT UNJF, les ressources proposées (cf. la figure suivante) correspondent pour la plupart au cours sélectionné.

On peut revenir à la première page du moteur de recherche grâce au lien "Retour à la liste des cours". On peut alors changer d'organisme de formation et choisir non plus le département ASI mais l'INSA Rouen Normandie dans son ensemble, ce sont alors près de 270 cours (triés alphabétiquement) qui vous sont proposés.
Architecture
Comme indiqué dans la section Sujet, l'objectif de cette deuxième version est d'avoir un moteur de recherche générique, cela signifie qu'il doit pouvoir tirer parti de tout dépot (accessible en SPARQL) de descriptions de cours d'une part et de ressources pédagogiques d'autre part. Plutôt que de partir sur des méthodes de mapping d'ontologies (qui est un domaine de recherche à part entière) permettant de créer automatiquement des requêtes SPARQL adaptées à chaque ontologie (comme par exemple le propose Makris & al. dans Ontology Mapping and SPARQL Rewriting for Querying Federated RDF Data Sources), nous avons décidé d'utiliser une méthode classique en développement logiciel : séparer les interfaces de leur implantation. Dans notre domaine, celui des requêtes SPARQL, cela signifie fixer le nom des variables des requêtes et avoir des corps de requêtes propres à chaque dépôt.
Par exemple pour récupérer la liste des cours (leur URI, leur titre et leur description en français) on fixe l'interface de la requête SPARQL comme étant :
SELECT ?uri ?name ?description { corps de la requête }
Le corps est ensuite fonction du dépot et donc du schéma ontologique utilisé. Pour le dépot décrivant les cours du département ASI, qui utilise le schéma ontologique SemCDMfr, on a le corps suivant :
?uri rdf:type aiiso:Course. ?uri aiiso:name ?name. ?uri aiiso:description ?description
Alors que pour le dépot décrivant les cours de l'INSA Rouen Normandie, qui utilise le schéma ontologique IFLOT, on a le corps suivant :
?uri a ei:EducationalItem. ?uri ei:name ?name. ?uri ei:program ?description. filter(langmatches(lang(?name),'FR')). filter(langmatches(lang(?description),'FR')).
Ainsi si un nouvel organisme expose la description de ces cours en Web des données liées, il suffit d'écrire le corps de la requête SPARQL correspondant à cette interface pour qu'il puisse être utilisé par notre moteur de recherche.
Cependant certaines requêtes nécessitent d'être paramétrées. Ces paramètres sont identifiés dans le corps de la requête SPARQL par leur nom, préfixé du symbole %. Par exemple si nous avons besoin de pouvoir obtenir des informations pour un cours donné, identifié par son URI, l'interface de la requête est :
SELECT ?name ?description { corps de la requête }
et le corps de la requête pour le dépôt décrivant les cours du département ASI est :
<%uri> aiiso:name ?name. <%uri> aiiso:description ?description
En plus du corps des requêtes, il faut aussi déclarer les préfixes utilisés dans les requêtes SPARQL, par exemple pour le SemCDMR :
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX aiiso: <http://purl.org/vocab/aiiso/schema#> PREFIX vcard:<http://www.w3.org/2006/vcard/ns#> PREFIX cdmfr:<http://www.cdmfr.fr#>
LOFAR utilise des requêtes SPARQL pour :
- récupérer la liste des cours, à l'aide des
variables
?uri
,?name
,?description
; - récupérer la description d'un cours (identifié par le
paramètre
%uri
), à l'aide des variables?name
,?description
; - récupérer la liste des ressources pédagogiques, à
l'aide des
variables
?uri
,?title
,?description
et?pédagogicalType
; - récupérer la description d'une ressources (identifiée
par le paramètre
%uri
), à l'aide des variables?title
,?description
et?pédagogicalType
; - récupérer les URL d'une ressource (identifiée par le
paramètre %uri), à l'aide de la
variable
?url
; - récupérer le type pédagogique d'une ressource
(identifiée par le paramètre
%uri
), à l'aide de la variable?pedagogicalType
.
Bien entendu, afin de rester cohérent avec notre démarche initiale, ces informations sont décrites en Web des données à l'aide d'un schéma OWL (que nous ne détaillerons pas ici) et d'une base de données RDF avec un point d'entrée SPARQL : http://linkeddata.insa-rouen.fr/dataset.html?tab=query&ds=/LOFARStores.