代码之家  ›  专栏  ›  技术社区  ›  jd466

芝麻中的BNode解决方案

  •  3
  • jd466  · 技术社区  · 10 年前

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

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

    如果我们有一个RDF(如{s p1_:a,_:a p2“value”),那么即使在删除语句之后,第二个三元组也将保留在模型中。难道没有提供任何解决方案来处理Sesame中的BNodes吗?

    1 回复  |  直到 8 年前
        1
  •  3
  •   Jeen Broekstra    10 年前

    你可以这样做:

    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 即将在Sesame 4.1.0中发布。如果你不能等到正式发布,你可以 peek at its source code 只需复制它所做的事情,就可以获得您自己的自定义实用程序函数。

    推荐文章