我一直试图从使用 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"));

这将删除谓词为 oj​​it_code 且对象为 rdf:value 的所有三元组。

在内部——在你尝试的 SPI 级别——你可以使用 "class" ,它查找和删除(使用 inMemModel.remove(Node.ANY, nodePredicate, nodeObject) )匹配的三元组。 delete 需要一个地面三元组,因此不会进行查找。
delete 不能工作,因为它是一个不同的主题,所以没有什么可以删除的。

关于rdf - Jena 删除一个带有匿名节点的三元组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17288502/

10-13 02:28