2

すべてのデータを既存の Sesame リポジトリから新しいリポジトリにコピーしたいと考えています。トリプルストアで OWL 推論を使用するには移行が必要ですが、インメモリ リポジトリ (既存のリポジトリのタイプ) で OWLIM を使用することはできません。

すべてのトリプルをリポジトリから新しいリポジトリにコピーする最も効率的な方法は何ですか?

更新 1:

SPARQL INSERT を使用することが有効なアプローチではない理由を理解したいと思っています。新しいリポジトリの SPARQL Update セクションでこのコードを試しました。

PREFIX : <http://dbpedia.org/resource/>
INSERT{?s ?p ?o} 
WHERE 
{ 
SERVICE <http://my.ip.ad.here:8080/openrdf-workbench/repositories/rep_name>
{ 
?s ?p ?o 
} 
}

次のエラーが表示されます。

org.openrdf.query.UpdateExecutionException: org.openrdf.sail.SailException: org.openrdf.query.QueryEvaluationException:

クエリにエラーがありますか、それともこの方法でデータを挿入できませんか? 同様の構造のクエリを使用して DBpedia からデータを挿入しました。

4

1 に答える 1

2

手動 (ワークベンチ)

  1. コピー元のリポジトリを開きます
  2. 「エクスポート」を選択します。
  3. 適切なエクスポート形式を選択し ('TriG' または 'BinaryRDF' はどちらもコンテキスト情報を保持するため、適切な選択です)、[ダウンロード] ボタンをクリックして、データ エクスポートをローカル ディスクに保存します。
  4. コピー先のリポジトリを開きます
  5. 「追加」を選択します。
  6. 「アップロードしたいRDFデータを含むファイルを選択」を選択
  7. [参照] をクリックして、ローカル ディスク上のデータ エクスポート ファイルを見つけます。
  8. 「コンテキスト識別子としてベース URI を使用する」が選択されていないことを確認します。
  9. 「アップロード」を押して、座ってください。

プログラムによる

まず、RepositoryConnnection両方のリポジトリに s を開きます。

RepositoryConnection source = sourceRepo.getConnection();
RepositoryConnection target = targetRepo.getConnection();

次に、 からすべてのステートメントを読み取りsource、すぐに に挿入しtargetます。

target.add(source.getStatements(null, null, null, true)); 

どちらの基本的な方法も、サイズが約数百万のトリプルまでのリポジトリで問題なく機能するはずです。もちろん、より大きなバルクサイズのためのより高度な方法がたくさんあります.

于 2015-07-08T22:43:12.467 に答える