4

我一直在尝试使用 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。

4

1 回答 1

5

简单的回答:

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

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

在内部——在你尝试的 SPI 级别——你可以使用inMemModel.remove(Node.ANY, nodePredicate, nodeObject),它查找和删除(使用delete)匹配的三元组。delete需要一个地面三倍,因此没有找到。

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

于 2013-06-25T09:57:13.923 回答