私はJenaを使用しています。インスタンスのプロパティ値を変更または削除できるメソッドがあるかどうかを知りたいですか?プロパティ値を変更または削除するにはどうすればよいですか? - Jena API
ありがとうございました
私はJenaを使用しています。インスタンスのプロパティ値を変更または削除できるメソッドがあるかどうかを知りたいですか?プロパティ値を変更または削除するにはどうすればよいですか? - Jena API
ありがとうございました
使用しているJena APIによって異なります。たとえば、Jena 3.0とModel
APIを使用している場合は、Model.remove(Statement)
を使用して、ステートメントに適切な件名/述語/オブジェクトを選択してプロパティを削除できます。変更は、Statementの古いバージョンを削除し、新しいバージョンを追加することによって達成できます。
イエナのステートメントは、設計上、不変です。いくつかのサブジェクトs
のプロパティp
の値を変更するには、同じ件名と述語を持つ新しいステートメントを追加し、古いステートメントを削除する必要があります。 APIがあなたからこのAPIを隠すことがある場合でも、これはJenaでは常に真です。たとえば、OntResource
およびそのサブクラスにはさまざまな種類のsetProperty
がありますが、これらは、同じ追加の新しいトリプルで古い削除プロセスを実行しています。
のみインスタンスとプロパティ値の関係、つまり、あなたが使用することができ、文自体を削除するには: OntResource.removeProperty(Property, RDFNode)
あなたが完全にプロパティ値を削除したい場合は、それに価値とすべての関係、すなわちOntResource.remove()
私は同じような作業をしました:指定した値のプロパティを削除する必要があります。次のコードスニペットが誰かを助けることを願っています。
public void removeLabel(String language, String value) {
NodeIterator nodeIterator = resource.getModel().listObjectsOfProperty(RDFS.label);
RDFNode foundToDelete = null;
while (nodeIterator.hasNext()) {
RDFNode next = nodeIterator.next();
boolean langsAreIdentical = next.asLiteral().getLanguage().equals(language);
boolean valuesAreIdentical = next.asLiteral().getLexicalForm().equals(value);
if (langsAreIdentical && valuesAreIdentical) {
foundToDelete = next;
break;
}
}
resource.getModel().remove(resource, RDFS.label, foundToDelete);
}
私は 'java.util.ConcurrentModificationException'が、私はイエナ3.1 –
ポスト新しい質問を使用し、完全なスタックトレース、イエナのバージョン、およびアプリケーションから該当するコードを含むすべての関連する詳細情報が含まれました。 –