3

有没有在芝麻中处理 BNODE 的解决方案?例如:

if(! (statement.getObject() instanceof BNode))
        tempModel.remove(statement);

如果我们有一个像 { s p1 _:a, _:a p2 "value") 这样的 RDF,那么即使在删除语句之后,第二个三元组也会留在模型中。没有提供任何解决方案来处理芝麻中的 BNode 吗?

4

1 回答 1

3

你可以这样做:

tempModel.remove(statement); // remove the first statement
if (statement.getObject() instanceof BNode) {
      // remove the second statement
      tempModel.remove((BNode)statement.getObject(), null, null);
}

这将在大多数简单的情况下处理它。

但是,如果 BNode 是 RDF 集合的开始(即,使用大量rdf:firstrdf:rest属性和大量空白节点建模),您将需要比这更聪明的东西,如在本例中的对象第二条语句本身也可以再次成为空白节点。

在当前的 Sesame 版本中,您将需要进行一些手动递归循环才能做到这一点。

然而,在 Sesame 4.1.0 中即将发布一个更容易处理 RDF 集合的实用函数。如果您不能等到正式发布,您可以查看它的源代码并复制它所做的事情以获得您自己的自定义实用程序函数。

于 2016-01-31T18:44:36.030 回答