在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:first
和 rdf:rest
属性建模,以及大量的空白节点),你需要比这更聪明的东西,因为在这种情况下,第二个语句的对象本身也可以再次成为空白节点。
在当前的 Sesame 版本中,您需要进行一些手动递归循环才能正确执行此操作。
但是一个utility function to more easily handle RDF Collections即将在芝麻4.1.0中发布。如果你等不及正式发布,你可以 peek at its source code只需复制它的作用即可为此获得您自己的自定义实用程序函数。
关于java - Sesame中BNode的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35114924/