Bonjour,
Je débute avec TDB, et j'ai quelques problèmes pour trouver de la documentation et des exemples.
Mon ontologie est très simple, doit permettre de stocker n'importe quelle donnée. Pour l'instant, je n'utilise qu'une propriété, "http://tuplesProperties#hasName".
Dans un premier temps, j'écris les données de mon modèle :
Dans un second temps, je souhaite les lire :
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 public static void main(String[] args) { String directory = "TDB/" ; // create an empty Model Dataset dataset = TDBFactory.createDataset(directory); Model m = ModelFactory.createDefaultModel(); String uri = "http://tuplesProperties#"; Property hn = m.createProperty(uri, "hasName"); Resource res = m.createResource("http://myResource"); m.add(res, hn, "myResource"); String nomModele = "http://modele"; dataset.addNamedModel(nomModele, m); m.close(); dataset.close(); }
Et j'obtiens ces résultats-là :
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 public static void main(String[] args) { String directory = "TDB/" ; Dataset dataset = TDBFactory.createDataset(directory); String nom = "http://modele"; Model m = dataset.getNamedModel(nom); String uri = "http://tuplesProperties#"; Property hn = m.createProperty(uri, "hasName"); //On vérifie si la propriété est dans le modèle System.out.println("La propriété existe bien dans le modèle : " + m.contains(null, hn)); String nomRes = "http://myResource"; Resource res = m.getResource(nomRes); System.out.println("La ressource demandée est " + res.toString()); System.out.println("La ressource " + res.toString() + " a un object d'après la propriété " + hn.toString() + " : " + m.contains(res, hn)); //On liste les objects de la relation hasName StmtIterator iterElts = res.listProperties(hn); while (iterElts.hasNext()) { Statement stat = iterElts.nextStatement(); System.out.println(stat.getProperty(hn).getString()); } m.close(); }
Et la ligne 60 est cette ligne
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 La propriété existe bien dans le modèle : true La ressource demandée est http://myResource La ressource http://myResource a un object d'après la propriété http://tuplesProperties#hasName : true Exception in thread "main" java.lang.UnsupportedOperationException: Quad: object cannot be null at com.hp.hpl.jena.sparql.core.Quad.<init>(Quad.java:62) at com.hp.hpl.jena.tdb.lib.TupleLib.quad(TupleLib.java:164) at com.hp.hpl.jena.tdb.lib.TupleLib.quad(TupleLib.java:155) at com.hp.hpl.jena.tdb.lib.TupleLib.access$100(TupleLib.java:45) at com.hp.hpl.jena.tdb.lib.TupleLib$4.convert(TupleLib.java:89) at com.hp.hpl.jena.tdb.lib.TupleLib$4.convert(TupleLib.java:85) at org.openjena.atlas.iterator.Iter$4.next(Iter.java:293) at com.hp.hpl.jena.tdb.store.GraphTDBBase$ProjectQuadsToTriples.next(GraphTDBBase.java:195) at com.hp.hpl.jena.tdb.store.GraphTDBBase$ProjectQuadsToTriples.next(GraphTDBBase.java:183) at com.hp.hpl.jena.util.iterator.WrappedIterator.next(WrappedIterator.java:80) at com.hp.hpl.jena.util.iterator.Map1Iterator.next(Map1Iterator.java:47) at com.hp.hpl.jena.util.iterator.WrappedIterator.next(WrappedIterator.java:80) at com.hp.hpl.jena.rdf.model.impl.StmtIteratorImpl.next(StmtIteratorImpl.java:45) at com.hp.hpl.jena.rdf.model.impl.StmtIteratorImpl.nextStatement(StmtIteratorImpl.java:55) at jena.tests.TDBTestRead.main(TDBTestRead.java:60)
Je ne comprends pas pourquoi je ne peux pas récupérer mes données, sachant qu'il m'indique qu'il y a bien des éléments objets de la propriété "hasName".
Code : Sélectionner tout - Visualiser dans une fenêtre à part Statement stat = iterElts.nextStatement();
Que signifie l'erreur "Quad: object cannot be null" ? Qu'est-ce qu'un "quad" d'ailleurs ?
Merci pour votre aide
Lauriane
Partager