9

Sesame と Virtuoso Triplestores を試しています。現時点では、Sesame Java API を使用して RDF データを両方の Triplestore に追加しています。

私の RDF データは、Videodata、Userdata などのさまざまなものを表します。現時点では、ビデオの RDF (タイトル、説明、場所など) を Triplestore に追加できます。

しかし、どうすればストア内の RDF を更新できますか?

たとえば、ゴマの REST インターフェイスを使用して、更新された RDF で PUT 要求を作成すると、ストア内のすべてが最初に削除されます。

更新されたデータ (たとえば、ビデオのタイトルが変更された) で POST を使用すると、両方のタイトル (古いものと新しいもの) が保存されます。

トリプルストアとはどのように連携していますか? 多分私はここで本質的な何かを見逃しています。


編集:

私は現在、すべての RDF エントリに対して Sesame の Context と Virtuoso の Graphs を使用しています。このように更新すると、最初にコンテキストをクリアしてから再度追加できます。両方の Triplestore に Sesame API を使用しているため (どちらを使用するかはまだわかりません)、コードはまったく同じに見えます。

ValueFactory f = rep.getValueFactory();
URI uri = f.createURI(urn);
con.clear(uri);
con.add(reader,this.baseURI, RDFFormat.RDFXML,uri);

助けてくれてありがとう

4

2 に答える 2

5

SPARQL を使用していると思います。そうでない場合は、おそらくそうすべきです:-)

多くのトリプル ストアは、SPARQL ストア内の RDF トリプルを変更するための言語であるSPARQL Updateをサポートしています。SQL のINSERTUPDATEDELETEなどのようなものです。Sesame がそれをサポートしているかどうかはわかりません。SPARQL Update はまだ非常に新しい仕様であり、まだ完全には確定していません。

特にRESTfulな方法で作業したい場合に知っておくべきもう1つの便利なことは、Named Graphsです。これにより、異なるグラフでトリプルを管理できるため、データを別々に保つことができます。たとえば、各ビデオに関するトリプルを個別の名前付きグラフに保持し、PUT 要求でその名前付きグラフのみを更新できます。SPARQL を使用して、すべての名前付きグラフにわたってストア全体をクエリできます。繰り返しになりますが、Sesame の REST API が名前付きグラフへのアクセスを提供しているかどうかは完全にはわかりません。(私はJava APIがそうしていると確信しています;私は彼らがそれを何か違うものと呼んでいると思います.コンテキスト?)

于 2011-06-20T12:10:57.743 に答える
2

したがって、元のRDFが次のようにあると仮定して、タイトルの具体的な例を取り上げます。

:something :title "Original Title" .

そして、次のように変更します。

:something :title "Updated Title" .

Sesame の POST を使用すると、名前付きグラフ (セサミ用語のコンテキスト) に新しい情報が追加されるだけです。重要なことに、既存の情報は削除されません。

RDF 用語では、これら 2 つのトリプルは異なる事実を表しています。Sesame (またはその他のトリプルストア) は、2 番目のトリプルが 1 番目のトリプルを置き換える必要があることを知りません。これは、プロパティを更新する場合に慣れている可能性のある従来の SQL/リレーショナル モデルとはまったく異なります。トリプル自体を変更することはできないため、RDF にはこれに関する適切な概念がありません。新しいトリプルを追加するか、既存のトリプルを削除できます。

希望する更新動作を取得するには、古いトリプルを削除し (Sesame の REST API は HTTP DELETE をサポートしています)、それを置き換える新しいトリプルを追加する必要があります (現在行っているように、Sesame の POST 操作を使用します)。

同じことが、使用するほぼすべてのトリプル ストアにも当てはまります。Cyrgi のように、SPARQL Update をサポートするストアを使用することを提案している場合は、更新エンドポイントに次を発行できます (名前付きグラフを使用すると仮定)。

DELETE DATA 
{ 
  GRAPH <http://example.org/graph> { :something :title "Original Title" . }
};
INSERT DATA 
{
   GRAPH <http://example.org/graph> { :something :title "Updated Title" . }
}
于 2011-06-20T13:47:30.033 に答える