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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top