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

Ven*_*ici 4 rdf jena blank-nodes

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

_:A68d23cacX3aX13f793fa898X3aXX2dX7ffd <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> "class" .
Run Code Online (Sandbox Code Playgroud)

我想删除它:

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);
Run Code Online (Sandbox Code Playgroud)

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

use*_*512 5

简单回答:

inMemModel.removeAll(null, RDF.value, ResourceFactory.createPlainLiteral("class"));
Run Code Online (Sandbox Code Playgroud)

这将删除谓词所在的所有三元组rdf:value和对象"class".

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

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