IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Frameworks Discussion :

[TDB] Comment utiliser TDB pour créer une ontologie persistente ? [Jena]


Sujet :

Frameworks

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 15
    Points : 11
    Points
    11
    Par défaut [TDB] Comment utiliser TDB pour créer une ontologie persistente ?
    Bonjour,

    Voilà plusieurs jours que j'étudie les documentations de TDB ainsi que les exemples fournis avec la librairie, mais sans parvenir à quoi que ce soit.

    Pour les besoin de mon projet je dois créer un stockage sous forme organisée et exploitable par la suite de données.
    J'ai donc commencé par créer une petite ontologie sous Protégé définissant des classes et des propriétés que j'ai enregistrée au format owl. Je pensais faire un stockage sous cette forme de fichier pour ajouter les instances des classes (qui sont très nombreuses) mais mon tuteur m'a tout de suite dit que ce serait trop lourd et qu'il fallait un stockage dans une base de donnée ou en mémoire pour assurer la persistance et pouvoir faire des requêtes dessus. J'ai donc regardé le wiki de Jena et il m'a semblé que TDB correspondait le mieux à ce que je dois faire.

    D'après les exemples de TDB, pour créer mon modèle persistant, il faut :
    Soit indiquer un répertoire et créer une instance de Dataset avec
    TDBFactory.createDataset("le chemin du repertoire")
    (ce qui remplit le dossier d'un tas de fichiers dont je ne comprend pas à quoi ils servent) et me permet ensuite d'instancier un modèle vide via
    Model model = dataset.getDefautModel() ou dataset.getNamedModel("...")
    (j'obtiens la même chose avec les deux c'est à dire rien, un modèle vide)

    Soit utiliser un fichier d'assemblage (et pareil malgré la lecture des how to et autres documentations je ne comprend vraiment pas comment ça marche : faut-il réécrire à la main tout le modèle que j'ai déjà créé au format rdf???)
    puis créé le Dataset en utilisant
    TDBFactory.assembleDataset("fichier.ttl");
    Mais là, j'obtiens un dataset vide même en réutilisant les fichiers fournis avec les exemples, d'où il résulte un null pointer exception dès que je veux instancier un modèle à partir du dataset.

    Mon but serais de lire le modèle de base que j'ai créé pour avoir en mémoire mes classes et mes propriétés puis de m'en servir pour ajouter via des requêtes sparql (apparemment c'est le seul langage de requête utilisable avec TDB) toutes mes instances pour les stocker de façon persistante puis pouvoir faire des requêtes dessus pour les réutiliser à d'autres fins.

    Voilà, n'hésitez pas à me poser des questions si mon problème n'est pas assez clair, ou à me faire des suggestions si vous pensez que TDB n'est pas la solution la plus adaptée pour stocker une grosse masse d'informations (plusieurs giga) sous forme de méta-données réutilisables. Par contre je dois utiliser l'api Jena qui est vraiment très pratique.

    Merci beaucoup pour ceux qui auront des réponses, car il faut que j'avance assez rapidement car ça devient urgent depuis trois jours que je suis bloquée.

  2. #2
    Rédacteur/Modérateur
    Avatar de Metafire18
    Homme Profil pro
    Ingénieur de recherche Orange Labs
    Inscrit en
    Décembre 2007
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur de recherche Orange Labs

    Informations forums :
    Inscription : Décembre 2007
    Messages : 777
    Points : 1 894
    Points
    1 894
    Billets dans le blog
    1
    Par défaut
    Ceci est une maigre contribution ==> Tu devrais regarder du côté de la classe TDBLoader je pense (http://openjena.org/TDB/javadoc/com/...TDBLoader.html)
    Pas de grandeur pour qui veut grandir. Pas de modèle pour qui cherche ce qu'il n'a jamais vu.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Merci, mais j'ai déjà regardé cette classe et je ne comprend pas bien à quoi elle sert.

    En effet la méthode loadModel (Model, String) dit qu'elle va charger le contenu défini par l'url dans un modèle, hors en utilisant model.read(reader) j'arrive déjà à charger le contenu de mon fichier rdf dans mon modèle, mais ce contenu je n'arrive pas à le stocker dans le dataset ou sous la forme d'un magasin de triplet (comme je vous ai vu en parler sur un autre topic).

    Pourriez-vous m'expliquer en quoi consiste la représentation sous forme d'un magasin de triplets? Qu'elle classe utiliser pour faire cela? Peut-être que cela m'aiderais.

  4. #4
    Rédacteur/Modérateur
    Avatar de Metafire18
    Homme Profil pro
    Ingénieur de recherche Orange Labs
    Inscrit en
    Décembre 2007
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur de recherche Orange Labs

    Informations forums :
    Inscription : Décembre 2007
    Messages : 777
    Points : 1 894
    Points
    1 894
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par joploya Voir le message
    Pourriez-vous m'expliquer en quoi consiste la représentation sous forme d'un magasin de triplets?
    Un magasin de triplets est très similaire à une base de données. A l'instar de ces dernières, les magasins de triplets permettent d'assurer la persistance des données et fournissent des langages permettant l'interrogation (SPARQL) ou la modification (SPARUL) des données. La principale différence entre les magasins de triplets et les bases de données se situent dans le fait que les premiers sont spécialisés dans le stockage de triplets RDF .
    Pas de grandeur pour qui veut grandir. Pas de modèle pour qui cherche ce qu'il n'a jamais vu.

  5. #5
    Rédacteur/Modérateur
    Avatar de Metafire18
    Homme Profil pro
    Ingénieur de recherche Orange Labs
    Inscrit en
    Décembre 2007
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur de recherche Orange Labs

    Informations forums :
    Inscription : Décembre 2007
    Messages : 777
    Points : 1 894
    Points
    1 894
    Billets dans le blog
    1
    Par défaut
    J'ai très peu de temps devant moi. Je viens de pondre très rapidement un code qui a l'air de fonctionner (A vérifier ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //Ecriture dans le TripleStore
    String directory = "C:/TDB-0.8.10/Store/DB1" ;
    Model model=TDBFactory.createModel(directory);
    Resource a=model.createResource(prefixe+"domain");
    Resource b=model.createResource(prefixe+"range");
    Property c=model.createProperty(prefixe+"property");
    model.add(a, c, b);
    model.close();
     
    //Récupération du modèle
    Dataset dataset = TDBFactory.createDataset("C:/TDB-0.8.10/Store/DB1") ;
    Model m2=dataset.getDefaultModel();
    Pas de grandeur pour qui veut grandir. Pas de modèle pour qui cherche ce qu'il n'a jamais vu.

  6. #6
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Merci pour cette explication.

    Comment fait-on pour créer un magasin de triplets? Est ce que cela correspond à la classe Dataset de Jena?

    Et peut-on convertir un fichier rdf en un magasin de triplet?

  7. #7
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Super, merci beaucoup, car j'utilisais en gros le même code mais je créais le dataset avant le modèle et c'est doute pour cela que rien ne se mettait dedans.

    Je vous redirais si j'ai réussi à stocker mon modèle.

    Bonne journée.

  8. #8
    Rédacteur/Modérateur
    Avatar de Metafire18
    Homme Profil pro
    Ingénieur de recherche Orange Labs
    Inscrit en
    Décembre 2007
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur de recherche Orange Labs

    Informations forums :
    Inscription : Décembre 2007
    Messages : 777
    Points : 1 894
    Points
    1 894
    Billets dans le blog
    1
    Par défaut
    Ok, j'attends de tes nouvelles
    Pas de grandeur pour qui veut grandir. Pas de modèle pour qui cherche ce qu'il n'a jamais vu.

  9. #9
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Ca y est ça fonctionne, j'arrive à stocker mon modèle puis à le récupérer et il s'affiche correctement.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
            //On crée un modèle Jena de données TDB dans un répertoire nommé
            String directory = "MyDatabases/DB1" ;
            Model model = TDBFactory.createModel(directory);
     
            Model modelTemp = null;
            //On lit le modele rdf existant (lors de la premiere utilisation)
            String fileName = "doc/dbnary.owl";
    		File file = null;
        	try{
        		file = new File(fileName);
        		FileReader reader = new FileReader(file);
        		modelTemp = TDBFactory.createModel();
        		modelTemp.read(reader,null);
        	}catch(Exception e){
        		e.printStackTrace();
        	}
     
        	System.out.println("Liste de l'ontologie de base :");
        	Iterator stmtIter = modelTemp.listStatements();
        	while(stmtIter.hasNext()){
        		Statement stmt = (Statement) stmtIter.next();
        		//System.out.println(stmt);
        		model.add(stmt);
        	}
     
            model.close();
     
          	//Récupération du modèle
            Dataset dataset = TDBFactory.createDataset("MyDatabases/DB1") ;
            Model m2=dataset.getDefaultModel();
     
            System.out.println("Liste de l'ontologie :");
        	Iterator classIter = m2.listObjects();
        	while(classIter.hasNext()){
        		Object rdfn = (Object) classIter.next();
        		System.out.println(rdfn);
        	}
    Par contre il faut faire attention avant de relancer le programme d'effacer tous les fichiers de MyDatabase/DB1 sinon ça ne fonctionne plus.

    Voilà, merci beaucoup à toi, Metafire18 !

  10. #10
    Rédacteur/Modérateur
    Avatar de Metafire18
    Homme Profil pro
    Ingénieur de recherche Orange Labs
    Inscrit en
    Décembre 2007
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur de recherche Orange Labs

    Informations forums :
    Inscription : Décembre 2007
    Messages : 777
    Points : 1 894
    Points
    1 894
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par joploya Voir le message
    Par contre il faut faire attention avant de relancer le programme d'effacer tous les fichiers de MyDatabase/DB1 sinon ça ne fonctionne plus.
    Tu veux dire que tu es obligé d'effacer les données entre deux exécutions du programme?

    Si c'est le cas, le but principal du magasin de triplets qu'est la persistance n'est pas atteint.
    Pas de grandeur pour qui veut grandir. Pas de modèle pour qui cherche ce qu'il n'a jamais vu.

  11. #11
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Non non, ça marche très bien en fait même sans effacer. lol.

    J'avais un null pointer exception qui apparaissait lorsque je relançais mon programme au début, et je croyais que ça venait du fait que je rechargeais plusieurs fois le même modèle.
    Mais ça venait du fait qu'il me manquait une ligne de code qui instanciait modelTemp.

    Mais elle y est dans le code que j'ai posté donc tout fonctionne très bien!

  12. #12
    Rédacteur/Modérateur
    Avatar de Metafire18
    Homme Profil pro
    Ingénieur de recherche Orange Labs
    Inscrit en
    Décembre 2007
    Messages
    777
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur de recherche Orange Labs

    Informations forums :
    Inscription : Décembre 2007
    Messages : 777
    Points : 1 894
    Points
    1 894
    Billets dans le blog
    1
    Par défaut
    C'est parfait alors! N'oublie pas de marquer le sujet comme résolu
    Pas de grandeur pour qui veut grandir. Pas de modèle pour qui cherche ce qu'il n'a jamais vu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/04/2011, 09h33
  2. Réponses: 6
    Dernier message: 04/11/2010, 15h16
  3. Comment utiliser jsGraphics pour dessier une forme avec du texte dessus
    Par derzy971 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 17/04/2010, 02h35
  4. [TinyMCE] Comment utiliser file_browser_callback pour ouvrir une page popup depuis advlink ?
    Par Alexandrebox dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 10/07/2009, 14h31
  5. utilisation ADO pour créer une Base de Donnée vide
    Par laribi71 dans le forum VB 6 et antérieur
    Réponses: 17
    Dernier message: 20/02/2008, 19h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo