Ceci est une ancienne révision du document !
Ce projet est un projet alternatif au projet multimif, à destination des étudiants qui ne font no MIF17, ni MIF16, ni MIF13.
On souhaite interroger une base de données relationnelle comme un graphe RDF en utilisant le langage SPARQL. Le but de ce projet est d'écrire un wrapper autour de l'accès à la base relationnelle. On ne veut pas copier les données en les écrivant sous forme d'un graphe, mais permettre d'interroger la base de donnée comme une vue ayant la forme d'un graphe.
Pour cela, on s'appuiera sur l'API Jena qui permet de manipuler les graphes RDF en Java. En particulier ARQ permet d'exécuter des requêtes SPARQL. ARQ permet de requêter des modèles, mais il est plus simple d'implémenter l'interface Graph de plus bas niveau .
Le rendu consistera en un projet Java/Maven hébergé sur la forge Lyon 1. Ce projet comprendra un exécutable en ligne de commande qui lira la requête SPARQL sur l'entrée standard et qui pourra prendre en argument:
Cet exécutable écrira les réponses à la requête sur la sortie standard, au format SPARQL Query Results XML Format comme présenté en cours, p.7 .
Le schéma relationnel à exposer sous forme de graphe RDF est le schéma du TP ORM
Le vocabulaire RDF sera constitué sur les bases suivantes. Pour chaque tuple des relations Recette, Ingredient, Quantite, Instruction, on construit une IRI à partir de sa clé primaire selon le tableau suivant:
Table | Attributs utilisés pour construire l'IRI | IRI |
---|---|---|
Recette | nom | http://www.recettes.com/Recette/id/nom |
Ingredient | nom | http://www.recettes.com/Ingredient/id/nom |
Quantite | recette, ingredient | http://www.recettes.com/Quantite/id/recette/ingredient |
Instruction | recette,ordre | http://www.recettes.com/Instruction/id/recette/ordre |
Pour chaque table T, pour chaque attribut A qui est une clé étrangère, pour chaque tuple de T, on considère que le triplet K <http://www.recettes.com/T/A> F fait partie des triplets de la vue RDF; où K est l'IRI associée à la valeur de la clé primaire pour le tuple considéré et F est l'IRI associée à la valeur de la clé étrangère dans la table cible.
<note tip> Exemple: si le tuple ('gateau',3,'enfourner a 180 degres') est dans la table Instruction, le triplet suivant devra être dans la vue: <http://www.recettes.com/Instruction/id/gateau/3> <http://www.recettes.com/Instruction/recette> <http://www.recettes.com/Recette/id/gateau> </note> Pour chaque tuple de la table T, pour chaque attribut A qui n'est pas une clé étrangère, on considère que le triplet K <http://www.recettes.com/T/A> "V"^^S fait partie des triplets de la vue RDF; où K est l'IRI associée à la valeur de la clé primaire pour le tuple considéré, V la valeur de l'attribut et S le type XML Schema le plus proche du type SQL utilisé.
<note tip>Exemple: si le tuple ('gateau',3,'enfourner a 180 degres') est dans la table Instruction, le triplet suivant devra être dans la vue: <http://www.recettes.com/Instruction/id/gateau/3> <http://www.recettes.com/Instruction/ordre> "3"^^xsd:integer (avec xsd:
qui est un préfixe correspondant à l'URL associée à XML Schema, i.e. http://www.w3.org/2001/XMLSchema)</note>
Un projet de départ est fourni dans l'archive prj-mif18-2015.zip. Il s'agit d'un projet maven incluant les dépendances vers le driver H2 et la bibliothèque Jena. Il contient un test JUnit SPARQLTest
avec du code exemple pour une requête SPARQL sur une graphe.
Le projet fourni est préconfiguré pour générer une archive target/prj-mif18-1.0-SNAPSHOT-jar-with-dependencies.jar
exécutable directement avec:
java -jar chemin/vers/prj-mif18-1.0-SNAPSHOT-jar-with-dependencies.jar arg1 ... argn
C'est la classe App
fournie dans ce projet qui sert de point d'entrée.
Le projet est à réaliser par groupes de un à deux étudiants (pas trois). Il est demandé d'envoyer un fichier .zip
1) à emmanuel.coquery@liris.cnrs.fr contenant:
La date de rendu est fixée au