Jena删除了一个带有匿名节点的三元组



我一直试图使用Jena从模型中删除一个三元组,但没有成功。当主题、谓词和对象是URI或文字时,一切都很好,但对于匿名节点来说,这似乎不起作用。例如,在一个模型中考虑这个三元组:

_:A68d23cacX3aX13f793fa898X3aXX2dX7ffd <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "class" .

我想删除它使用:

Node nodeSubject = Node.createAnon(); //or Node.ANY
Node nodePredicate = Node.createURI("http://www.w3.org/1999/02/22-rdf-syntax-ns#value");
Node nodeObject = Node.createLiteral("class");
Triple triple = Triple.create(nodeSubject, nodePredicate,  nodeObject);
inMemModel.getGraph().delete(triple);

无论使用createAnon还是Node.ANY,我都无法删除三元组。我不想使用AnonId,因为如果我在另一台机器上运行代码,我怀疑是否会生成相同的匿名id。

简单答案:

inMemModel.removeAll(null, RDF.value, ResourceFactory.createPlainLiteral("class"));

这将删除谓词为rdf:value、对象为"class"的所有三元组。

在内部——在您尝试的SPI级别——您可以使用inMemModel.remove(Node.ANY, nodePredicate, nodeObject),它可以查找和删除(使用delete)匹配的三元组。delete取地三元组,因此不进行查找。

createAnon()之所以不起作用,仅仅是因为它是一个不同的主题,所以没有什么可删除的。

最新更新