Prochaine révision
|
Révision précédente
|
enseignement:bdav:projet:2015 [2015/11/03 09:54] ecoquery créée |
enseignement:bdav:projet:2015 [2015/11/09 08:52] (Version actuelle) ecoquery [Projet de départ] |
| |
^Table^Attributs utilisés\\ pour construire l'IRI^IRI^ | ^Table^Attributs utilisés\\ pour construire l'IRI^IRI^ |
|Recette|nom|<nowiki>http://www.recettes.com/Recette/</nowiki>//__nom__//| | |Recette|nom|<nowiki>http://www.recettes.com/Recette/id/</nowiki>//__nom__//| |
|Ingredient|nom|<nowiki>http://www.recettes.com/Ingredient/</nowiki>//__nom__//| | |Ingredient|nom|<nowiki>http://www.recettes.com/Ingredient/id/</nowiki>//__nom__//| |
|Quantite|recette, ingredient|<nowiki>http://www.recettes.com/Quantite/</nowiki>//__recette__//<nowiki>/</nowiki>//__ingredient__//| | |Quantite|recette, ingredient|<nowiki>http://www.recettes.com/Quantite/id/</nowiki>//__recette__//<nowiki>/</nowiki>//__ingredient__//| |
|Instruction|recette,ordre|<nowiki>http://www.recettes.com/Instruction/</nowiki>//__recette__//<nowiki>/</nowiki>//__ordre__//| | |Instruction|recette,ordre|<nowiki>http://www.recettes.com/Instruction/id/</nowiki>//__recette__//<nowiki>/</nowiki>//__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// <nowiki><http://www.recettes.com/</nowiki>//T//<nowiki>/</nowiki>//A//<nowiki>></nowiki> //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: <nowiki><http://www.recettes.com/Instruction/id/gateau/3> <http://www.recettes.com/Instruction/recette> <http://www.recettes.com/Recette/id/gateau></nowiki> |
| </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// <nowiki><http://www.recettes.com/</nowiki>//T//<nowiki>/</nowiki>//A//<nowiki>> "</nowiki>//V//<nowiki>"^^</nowiki>//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é. |
| |
quantités et instructions, on se réfère | <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: <nowiki><http://www.recettes.com/Instruction/id/gateau/3> <http://www.recettes.com/Instruction/ordre> "3"^^xsd:integer</nowiki> (avec ''xsd:'' qui est un préfixe correspondant à l'URL associée à XML Schema, i.e. http://www.w3.org/2001/XMLSchema)</note> |
* Chaque recette sera identifiée par <nowiki>http://www.recettes.org/Recette/</nowiki>//nom// où //nom// est le nom de la recette. | |
* Chaque recette sera identifiée par <nowiki>http://www.recettes.org/Recette/</nowiki>//nom// où //nom// est le nom de la recette. | |
| |
===== Liens utiles ===== | ===== Liens utiles ===== |
* [[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 | * [[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 |
| |
On considère le schéma relationnel du [[enseignement:tp:bd:tp-orm:2015|TP ORM]]. | |
| |
L'objectif du projet est de créer une application permettant l'import/export de ces données au format XML et RDF/Turtle. | |
| |
On supposera que les volume des données nécessite un traitement de celles-ci en flux, c'est à dire qu'on ne veut pas avoir toute la base de données chargée en mémoire. | ===== Projet de départ ===== |
| |
===== Import/Export XML ===== | 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. |
| |
Les fichiers XML lu à l'import et générés par l'export doivent être valide vis-à-vis du schéma suivant: {{:enseignement:bdav:projet:films.xsd|}}. | <note tip>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''):<code xml> |
| <dependency> |
| <groupId>com.h2database</groupId> |
| <artifactId>h2</artifactId> |
| <version>1.4.181</version> |
| </dependency></code></note> |
| |
On utilisera l'API SAX pour lire ces fichiers. Voir les packages org.xml.sax et org.xml.sax.helpers. Ajout de faits en base de donnée se fera au choix via JDBC ou via l'ORM. | 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: <code shell>java -jar chemin/vers/prj-mif18-2015-1.0-SNAPSHOT-jar-with-dependencies.jar arg1 ... argn</code>C'est la classe ''App'' fournie dans ce projet qui sert de point d'entrée. |
| |
Pour l'écriture des fichiers, on passera par la génération de XML via les fonctions SQL. Pour récupérer les données côté Java, on pourra s'inspirer du TP [[http://liris.cnrs.fr/emmanuel.coquery/dokuwiki.old/doku.php?id=enseignement:bdav:tp-apis-xml-jdbc|XML-JDBC]] de 2011. | |
| |
===== Import/Export RDF ===== | |
| |
L'import/export au format RDF s'appuiera sur la bibliothèque [[http://jena.apache.org/documentation/query/index.html|ARQ]], en particulier sur [[http://jena.apache.org/documentation/io/riot.html|l'API RIOT]]. | |
| |
===== Projet de départ ===== | |
| |
Un projet de départ est fourni dans l'archive {{:enseignement:bdav:projet:prj-mif18-2012.zip|}}. Il s'agit d'un projet maven incluant les dépendances vers le driver PostgreSQL et la bibliothèque ARQ. Il contient un test JUnit ''ARQTest'' avec du code exemple pour les entrées/sorties RDF utilisant ARQ/RIOT. | |
| |
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: <code shell>java -jar chemin/vers/prj-mif18-1.0-SNAPSHOT-jar-with-dependencies.jar arg1 ... argn</code>C'est la classe ''App'' fournie dans ce projet qui sert de point d'entrée. | |
| |
===== Modalités de rendu ===== | ===== Modalités de rendu ===== |
* Un fichier README.txt contenant: | * Un fichier README.txt contenant: |
* le noms et numéros d'étudiants du/des membre(s) du groupe. | * le noms et numéros d'étudiants du/des membre(s) du groupe. |
* La liste des prédicats RDF utilisés, ainsi que les conventions de nommage permettant de fabriquer les URI des objets du graphe RDF. | |
* Tout commentaire qui vous semble utile à porter à la connaissance du correcteur. | * Tout commentaire qui vous semble utile à porter à la connaissance du correcteur. |
| |
La date de rendu est fixée au **10 décembre 2012 à 23h59**. Une soutenance aura éventuellement lieu le 10/12/2012, //à confirmer//. | La date de rendu est fixée au **Dimanche 6 décembre 2015** |
| |
==== Application Java à réaliser ==== | |
| |
Il s'agit d'une application en ligne de commande ayant le comportement suivant: | |
* Si le //switch// ''--import <fichier>'' est utilisé, importer les données du fichier dans la base de donnée | |
* Si le //switch// ''--export <fichier>'' est utilisé, exporter les données de la base de données vers le fichier dans le format dépendant de l'extension du fichier: ''.xml'' -> XML, ''.n3'' -> NTriples. | |
* Si le //switch// ''--dburl <url>'' est utilisé, remplacer la connexion à la base de donnée par défaut par celle fournie via l'url | |