Jena e la differenza tra ListStatements e ListObjectsOfProperty
-
21-12-2019 - |
Domanda
Ho un file che descrive le persone con l'aiuto del foof.In Jena sto cercando di analizzare tutte le età dai profili e ho notato che i miei elenchi e ListObjecTsofProperty mi dà diversi risultati.Non riuscivo a trovare facilmente qualsiasi aiuto da Javadocs o altra documentazione.
Ho il seguente codice per la query con elenchi elenchi:
StmtIterator iter = this.foafmodel.listStatements(
(Resource) null,
this.foafmodel.createProperty("http://xmlns.com/foaf/0.1/age"),
(RDFNode) null);
.
E questo è il codice per ListObjectSofProperty:
Property foafAge = this.foafmodel.createProperty("http://xmlns.com/foaf/0.1/age");
NodeIterator iter = this.foafmodel.listObjectsOfProperty(foafAge);
.
In questo caso Iteratore Iterama Iterama 38 volte mentre la ListObjecTsoFProperty solo 20 volte.Qualcuno può spiegarmi qual è la differenza tra queste due implementazioni?
Soluzione
Assumiamo che i tuoi dati contengano più triple con la tua proprietà :p
che fanno riferimento allo stesso oggetto :o
, come:
:s1 :p :o .
:s2 :p :o .
.
A prima vista, mi sembrerebbe che listObjectsOfProperty
ti danno tutti gli individui che sono referenziati dalla tua proprietà senza duplicazione.Possiamo confermare questo scavando nell'attuazione che dipende da GraphUtil#listObjects(...)
.Il codice utilizza un Set<Node>
per aggregare tutti gli oggetti.Di conseguenza, dovresti rimettere solo una singola iterazione con l'elemento :o
.
L'altro metodo, listStatements
dovrebbe tornare a te una dichiarazione / triplo per ogni volta che viene utilizzata la proprietà.Nel modello di esempio sopra, dovresti / dovresti ottenere due risultati, uno per ogni dichiarazione contenente :p
.