Sesame中BNode的解决方案

Solutions for BNode in Sesame

在Sesame中处理BNODE有什么解决方案吗? 例如:

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

如果我们有像 { s p1 _:a, _:a p2 "value") 这样的 RDF,因此即使删除语句​​后,第二个三元组仍将保留在模型中。在 Sesame 中没有提供任何处理 BNode 的解决方案吗?

你可以这样做:

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 版本中,您需要进行一些手动递归循环才能正确执行此操作。

然而 utility function to more easily handle RDF Collections is about to be released in Sesame 4.1.0. If you can't wait until official release you can peek at its source code 只需复制它的作用即可获得您自己的自定义实用程序函数。