Pregunta

Tengo un archivo que describe personas con la ayuda de FOAF.En Jena, estoy tratando de analizar todas las edades de los perfiles y noté que listStatements y listObjectsOfProperty me dan resultados diferentes.No pude encontrar fácilmente ninguna ayuda en los javadocs u otra documentación.

Tengo el siguiente código para consultar con listStatments:

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

Y este es el código para listObjectsOfProperty:

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

En este caso, el iterador listStatements itera 38 veces, mientras que listObjectsOfProperty solo 20 veces.¿Alguien puede explicarme cuál es la diferencia entre estas dos implementaciones?

¿Fue útil?

Solución

Supongamos que sus datos contienen múltiples tripletas con su propiedad. :p haciendo referencia al mismo objeto :o, al igual que:

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

A primera vista me parecería que listObjectsOfProperty le brindamos todas las personas a las que hace referencia su propiedad sin duplicación.Podemos confirmar esto profundizando en la implementación que depende de GraphUtil#lista de objetos(...).El código utiliza un Set<Node> para agregar todos los objetos.Como resultado, sólo deberías obtener una única iteración con el elemento :o.

El otro método, listStatements debería devolverle un extracto/triple por cada vez que se utilice esa propiedad.En el modelo de ejemplo anterior, debería/obtendría dos resultados, uno para cada declaración que contenga :p.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top