Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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]
Ligne 29: Ligne 29:
  
 ^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 =====
Ligne 47: Ligne 50:
   * [[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 =====
Ligne 77: Ligne 71:
   * 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 +