2017-06-14 4 views
1

this questionのように見えますが、その後削除されましたか?1つのエンドポイントから別のエンドポイントへのPure-SPARQLマイグレーション?

1つのSQLテーブルのデータの場合は、replicate the structure、次にmigrate the data to another table (or database?)を簡単に使用できます。

CREATE TABLE new_table 
    AS (SELECT * FROM old_table); 

SELECT * 
INTO new_table [IN externaldb] 
FROM old_table 
WHERE condition; 

RDF/SPARQLに類似したものはありますか? 1つのSPARQLステートメントに選択と挿入を組み合わせたもの?

具体的には、埋め込みOpenRDF/Sesameエンドポイントにデータを公開するKarmaを使用します。エンドポイント用のGUIにはテキストボックスがありますので、RDF4JはSesameのフォークであるため、フリースタンディングのRDF4Jに変更することができます。

残念ながら、エンドポイントのテキストボックスにVirtuoso、Stardog、またはBlazegraphエンドポイントのアドレスを入力すると、カルマからinvalid SPARQL endpointというエラーが表示されます。私はそれが(もっと現実的に)変更し、再コンパイルカルマを、またはする可能かもしれないが、私は他のエンドポイントにRAMまたはスクラッチディスクスペースにselectにイエナやRDF4Jライブラリと小さなツールを書いて、その後、insert可能性が疑われます。

しかし、純粋なSPARQLソリューションがあれば、それを聞きたいと思うでしょう。

+0

あなたはアプローチのような種類を試してみた場合、私は好奇心旺盛だし、それは何あなた」再探している? https://stackoverflow.com/questions/10078966/multiple-sparql-insert-where-queries-in-a-single-requestもしそうでなければ、おそらく少なくとも正しい方向に向かうかもしれません –

+0

技術的には、 'INSERT { ?s?p?o。 } WHERE {?s?p?o。 }; 'このようなクエリは、データベース内の可能なトリプル(WHERE'句)をすべて選択し、挿入する必要があります。これはあなたの質問「選択と挿入を1つのSPARQLステートメントに組み合わせたもの」に対する答えですが、それ以上の複雑なことをしたいと思います。 –

+0

素晴らしいですが、ソースとデスティネーションのエンドポイントをどのように指定することができますか? –

答えて

1

SPARQLでは、ソースエンドポイントのみを指定できます。そのため、部分的に純粋なSPARQLソリューションは、あなたのターゲットに triplestore以下の更新を実行するために、次のようになります。

INSERT { ?s ?p ?o } 
WHERE { SERVICE <http://source/sparql> 
     { 
      ?s ?p ?o 
     } 
} 

これは、あなたのターゲットストアに(遠隔)ソースのデフォルトのグラフからすべてのトリプルの上にコピーされますが、それ名前付きグラフをコピーしません。同様に任意の名前付きグラフの上にコピーするには、ほかにこれを実行することができます:あなたはしかし、純粋なSPARQLにハングアップしていない場合は

INSERT { GRAPH ?g { ?s ?p ?o } } 
WHERE { SERVICE <http://source/sparql> 
     { 
      GRAPH ?g { 
      ?s ?p ?o 
      } 
     } 
} 

、異なるツールキットとフレームワークは、あなたのオプションのすべての種類を提供します。たとえば、RDF4JのRepository APIを使用すると、SPARQLRepositoryプロキシでソースとターゲットの両方をラップするだけで、どちらかが実際のRDF4JストアであればHTTPRepositoryを使用して、コピーAPI操作を実行するだけです。それを行うには、多くの異なる方法、一つの可能​​なアプローチがあります(免責事項:私は、このコードの断片をテストしていない)、このです:

SPARQLRepository source = new SPARQLRepository("http://source/sparql"); 
    source.initialize(); 
    SPARQLRepository target = new SPARQLRepository("http://target/sparql"); 
    target.initialize(); 

    try (RepositoryConnection sourceConn = source.getConnection(); 
     RepositoryConnection targetConn = target.getConnection()) { 
    sourceConn.export(new RDFInserter(targetConn)); 
    } 
+1

素晴らしいです。 Fusekiのデフォルトグラフインサートは私のために機能します。私は他の店で、名前付きグラフ・インサートとRDF4Jスニペットを今日後で試してみます。 –

関連する問題