Pergunta

Tenho um arquivo descrevendo pessoas com a ajuda do FOAF.Em Jena, estou tentando analisar todas as idades dos perfis e percebi que meus listStatements e listObjectsOfProperty me dão resultados diferentes.Não consegui encontrar facilmente nenhuma ajuda nos javadocs ou em outra documentação.

Tenho o seguinte código para consultar com listStatments:

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

E este é o código para listObjectsOfProperty:

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

Nesse caso, o iterador listStatements itera 38 vezes, enquanto o listObjectsOfProperty apenas 20 vezes.Alguém pode me explicar qual é a diferença entre essas duas implementações?

Foi útil?

Solução

Suponhamos que seus dados contenham vários triplos com sua propriedade :p referenciando o mesmo objeto :o, igual a:

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

À primeira vista, parece-me que listObjectsOfProperty estamos fornecendo a você todos os indivíduos referenciados por sua propriedade sem duplicação.Podemos confirmar isso investigando a implementação que depende de GraphUtil#listaObjetos(...).O código usa um Set<Node> para agregar todos os objetos.Como resultado, você deve retornar apenas uma única iteração com o elemento :o.

O outro método, listStatements deve retornar para você uma declaração/triplo para cada vez que essa propriedade for usada.No modelo de exemplo acima, você obteria/deveria obter dois resultados, um para cada instrução contendo :p.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top