java - Sesame中BNode的解决方案

标签 java rdf sesame blank-nodes openrdf

在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即将在芝麻4.1.0中发布。如果你等不及正式发布,你可以 peek at its source code只需复制它的作用即可为此获得您自己的自定义实用程序函数。

关于java - Sesame中BNode的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35114924/

相关文章:

java - 如何创建枚举 isXXX() 方法?

java - 为什么 Java 会给我不寻常的 double 算术运算结果?

java - Struts2 验证行为怪异

python - 在 rdflib 中使用上下文

database - RDF存储与传统数据库性能对比

python - 数据追加到芝麻存储库

java - 使用显示 :table jSTL tag 的内存使用问题

rdf - 在 Smalltalk 中解析 RDF

ruby-on-rails - Ruby on Rails 中推荐的 rdf 用法

java - 创建芝麻存储库