2011-08-14 10 views

答えて

2

使用しているJena APIによって異なります。たとえば、Jena 3.0とModel APIを使用している場合は、Model.remove(Statement)を使用して、ステートメントに適切な件名/述語/オブジェクトを選択してプロパティを削除できます。変更は、Statementの古いバージョンを削除し、新しいバージョンを追加することによって達成できます。

+0

私は 'java.util.ConcurrentModificationException'が、私はイエナ3.1 –

+0

ポスト新しい質問を使用し、完全なスタックトレース、イエナのバージョン、およびアプリケーションから該当するコードを含むすべての関連する詳細情報が含まれました。 –

4

イエナのステートメントは、設計上、不変です。いくつかのサブジェクトsのプロパティpの値を変更するには、同じ件名と述語を持つ新しいステートメントを追加し、古いステートメントを削除する必要があります。 APIがあなたからこのAPIを隠すことがある場合でも、これはJenaでは常に真です。たとえば、OntResourceおよびそのサブクラスにはさまざまな種類のsetPropertyがありますが、これらは、同じ追加の新しいトリプルで古い削除プロセスを実行しています。

0

のみインスタンスとプロパティ値の関係、つまり、あなたが使用することができ、文自体を削除するには: OntResource.removeProperty(Property, RDFNode)

あなたが完全にプロパティ値を削除したい場合は、それに価値とすべての関係、すなわちOntResource.remove()

0

私は同じような作業をしました:指定した値のプロパティを削除する必要があります。次のコードスニペットが誰かを助けることを願っています。

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); 
    } 
関連する問題