====== 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 [[https://jena.apache.org/|Jena]] qui permet de manipuler les graphes RDF en Java. En particulier [[https://jena.apache.org/documentation/query/index.html|ARQ]] permet d'exécuter des requêtes SPARQL. ARQ permet de requêter des [[https://jena.apache.org/documentation/javadoc/jena/index.html?org/apache/jena/rdf/model/Model.html|modèles]], mais il est plus simple d'implémenter l'interface [[https://jena.apache.org/documentation/javadoc/jena/index.html?org/apache/jena/graph/Graph.html|Graph]] de plus bas niveau . ===== Projet à rendre ===== Le rendu consistera en un projet Java/Maven hébergé sur la [[http://forge.univ-lyon1.fr|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 [[http://www.w3.org/TR/rdf-sparql-XMLres/|SPARQL Query Results XML Format]] comme présenté en {{:enseignement:bdav:sparql.pdf|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 [[enseignement:tp:bd:tp-orm:2015|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: ^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// //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. **Exemple:** si le tuple ('gateau',3,'enfourner a 180 degres') est dans la table Instruction, le triplet suivant devra être dans la vue: 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// //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é. **Exemple:** si le tuple ('gateau',3,'enfourner a 180 degres') est dans la table Instruction, le triplet suivant devra être dans la vue: "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) ===== Liens utiles ===== * [[https://jena.apache.org/documentation/rdf/index.html|Documentation sur RDF dans Jena]] * [[https://jena.apache.org/documentation/query/app_api.html|Documentation de départ sur l'API ARQ]] * [[https://jena.apache.org/documentation/javadoc/jena/index.html?org/apache/jena/graph/Graph.html|La JavaDoc de l'interface Graph]] * [[https://jena.apache.org/documentation/javadoc/jena/index.html?org/apache/jena/rdf/model/ModelFactory.html|ModelFactory.createModelForGraph(Graph)]] pour créer un Model à partir d'un Graph ===== Projet de départ ===== Un projet de départ est fourni dans l'archive {{:enseignement:bdav:projet:prj-mif18-2015.zip|}}. Il s'agit d'un projet maven incluant les dépendances vers la bibliothèque Jena. Il contient un test JUnit ''SPARQLTest'' avec du code exemple pour une requête SPARQL sur une graphe. Il est possible d'ajouter des dépendances vers la bibliothèque h2 via le code suivant (à mettre au bon endroit dans le ''pom.xml''): com.h2database h2 1.4.181 Le projet fourni est préconfiguré pour générer une archive ''target/prj-mif18-2015-1.0-SNAPSHOT-jar-with-dependencies.jar'' exécutable directement avec: java -jar chemin/vers/prj-mif18-2015-1.0-SNAPSHOT-jar-with-dependencies.jar arg1 ... argnC'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 ''**.zip**''((pas de rar ou autre format d'archive)) à [[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 **Dimanche 6 décembre 2015**