我在 FOAF 的帮助下有一个描述人物的文件。在耶拿,我试图从配置文件中解析所有年龄,并注意到我的 listStatements 和 listObjectsOfProperty 给了我不同的结果。我无法轻松地从 javadocs 或其他文档中找到任何帮助。

我有以下用于使用 listStatments 进行查询的代码:

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

这是 listObjectsOfProperty 的代码:

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

在本例中,listStatements 迭代器迭代了 38 次,而 listObjectsOfProperty 仅迭代了 20 次。有人可以向我解释这两种实现之间有什么区别吗?

有帮助吗?

解决方案

让我们假设您的数据包含您的属性的多个三元组 :p 引用同一个对象 :o, ,像这样:

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

乍一看,我觉得 listObjectsOfProperty 为您提供您的财产引用的所有个人,且不重复。我们可以通过深入研究依赖于的实现来确认这一点 GraphUtil#列表对象(...). 。该代码使用了一个 Set<Node> 聚合所有对象。因此,您应该只返回该元素的一次迭代 :o.

另一种方法, listStatements 每次使用该属性时都应该返回一个语句/三元组。在上面的示例模型中,您将/应该得到两个结果,每个结果包含一个 :p.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top