Ceci est une ancienne révision du document !


Projet MIF18

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 .

Projet à rendre

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:

  • l'URL JDBC de la base de donnée
  • le nom d'utilisateur
  • le mot de passe

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 .

Schéma et vocabulaire RDF

Schéma relationnel

Le schéma relationnel à exposer sous forme de graphe RDF est le schéma du TP ORM

Vocabulaire RDF

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:

TableAttributs utilisés
pour construire l'IRI
IRI
Recettenomhttp://www.recettes.com/Recette/id/nom
Ingredientnomhttp://www.recettes.com/Ingredient/id/nom
Quantiterecette, ingredienthttp://www.recettes.com/Quantite/id/recette/ingredient
Instructionrecette,ordrehttp://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#gateau/3> <http://www.recettes.com/Instruction/recette> <http://www.recettes.com/Recette#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#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>

Liens utiles

Projet de départ

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.

Modalités de rendu

Le projet est à réaliser par groupes de un à deux étudiants (pas trois). Il est demandé d'envoyer un fichier .zip1) à emmanuel.coquery@liris.cnrs.fr contenant:

  • Le projet Java pour l'application à réaliser (cf ci-dessous)
  • Un fichier README.txt contenant:
    • le noms et numéros d'étudiants du/des membre(s) du groupe.
    • Tout commentaire qui vous semble utile à porter à la connaissance du correcteur.

La date de rendu est fixée au FIXME

1)
pas de rar ou autre format d'archive