Frage

Ich habe eine Datei, in der Personen mit Hilfe von FOAF beschrieben werden.In Jena versuche ich, alle Altersgruppen aus den Profilen zu analysieren und habe festgestellt, dass meine listStatements und listObjectsOfProperty unterschiedliche Ergebnisse liefern.Ich konnte in den Javadocs oder anderen Dokumentationen keine Hilfe finden.

Ich habe den folgenden Code für die Abfrage mit listStatments:

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

Und das ist der Code für listObjectsOfProperty:

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

In diesem Fall iteriert der listStatements-Iterator 38 Mal, während der listObjectsOfProperty nur 20 Mal iteriert.Kann mir jemand erklären, was der Unterschied zwischen diesen beiden Implementierungen ist?

War es hilfreich?

Lösung

Gehen wir davon aus, dass Ihre Daten mehrere Tripel mit Ihrer Immobilie enthalten :p auf dasselbe Objekt verweisen :o, etwa so:

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

Auf den ersten Blick scheint es mir so zu sein listObjectsOfProperty geben Ihnen alle Personen, auf die Ihre Immobilie verweist, ohne Duplikate.Wir können dies bestätigen, indem wir uns mit der Implementierung befassen, die davon abhängt GraphUtil#listObjects(...).Der Code verwendet a Set<Node> um alle Objekte zusammenzufassen.Daher sollten Sie mit dem Element nur eine einzige Iteration zurückerhalten :o.

Die andere Methode, listStatements sollte Ihnen für jedes Mal, wenn diese Immobilie genutzt wird, eine Abrechnung bzw. ein Triple zurücksenden.Im obigen Beispielmodell würden/sollten Sie zwei Ergebnisse erhalten, eines für jede Anweisung, die Folgendes enthält :p.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top