Question

J'ai un fichier décrivant des personnes avec l'aide de FOAF.À Jena, j'essaie d'analyser tous les âges à partir des profils et j'ai remarqué que mes listStatements et listObjectsOfProperty me donnent des résultats différents.Je n'ai pas pu trouver facilement d'aide dans les javadocs ou autres documentations.

J'ai le code suivant pour interroger avec listStatments :

StmtIterator iter = this.foafmodel.listStatements(
     (Resource) null, 
     this.foafmodel.createProperty("http://xmlns.com/foaf/0.1/age"), 
     (RDFNode) null);

Et voici le code de listObjectsOfProperty :

Property foafAge = this.foafmodel.createProperty("http://xmlns.com/foaf/0.1/age");
NodeIterator iter = this.foafmodel.listObjectsOfProperty(foafAge);

Dans ce cas, l'itérateur listStatements itère 38 fois tandis que listObjectsOfProperty seulement 20 fois.Quelqu'un peut-il m'expliquer quelle est la différence entre ces deux implémentations ?

Était-ce utile?

La solution

Supposons que vos données contiennent plusieurs triples avec votre propriété :p faisant référence au même objet :o, ainsi:

:s1 :p :o .
:s2 :p :o .

A première vue, il me semble que listObjectsOfProperty vous donnent toutes les personnes référencées par votre propriété sans duplication.Nous pouvons le confirmer en examinant l'implémentation qui dépend de GraphUtil#listeObjets(...).Le code utilise un Set<Node> pour regrouper tous les objets.Par conséquent, vous ne devriez récupérer qu’une seule itération avec l’élément :o.

L'autre méthode, listStatements devrait vous renvoyer une déclaration/triple pour chaque fois que cette propriété est utilisée.Dans l'exemple de modèle ci-dessus, vous obtiendriez/devriez obtenir deux résultats, un pour chaque instruction contenant :p.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top