[TDB] Problème de lecture d'un graphe : "Quad: object cannot be null"
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 :
Code:
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();
} |
Dans un second temps, je souhaite les lire :
Code:
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 j'obtiens ces résultats-là :
Code:
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) |
Et la ligne 60 est cette ligne
Code:
Statement stat = iterElts.nextStatement();
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".
Que signifie l'erreur "Quad: object cannot be null" ? Qu'est-ce qu'un "quad" d'ailleurs ?
Merci pour votre aide
Lauriane