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。コードを別のマシンで実行すると、同じ匿名 ID が生成されるとは思えないため、AnonId を使用したくありません。

4

1 に答える 1

5

簡単な答え:

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

rdf:valueこれにより、述語がで目的語がであるすべてのトリプルが削除されます"class"

内部的に — 試していた SPI レベルでは — を使用できました。これは、( を使用して) 一致するトリプルinMemModel.remove(Node.ANY, nodePredicate, nodeObject)を見つけて削除します。はグラウンド トリプルを使用するため、検索は実行されません。deletedelete

createAnon()別の件名なので、削除する必要はありません。

于 2013-06-25T09:57:13.923 に答える