2013-08-21 2 views
5

空のストアにこの1つのだけのクワッドを追加します。シングルクワッド+最も基本的なSPARQLクエリ= 1つの結果がイエナで、2つの結果がゴマ - 誰が正しいですか?

<http://x.com/s> <http://x.com/p> 2 <http://x.com/g> . 

そして、このSPARQLクエリを実行(ボブDuCharmeの著書「学習SPARQL」あたりから取られたので、これは全体のすべてクワッドを取得するための標準的なSPARQLでなければなりませんデータセット、実装に関係なく、正しいのですか?):

SELECT ?g ?s ?p ?o 
WHERE { 
{ ?s ?p ?o } 
UNION 
{ GRAPH ?g { ?s ?p ?o } } } 

しかし、イエナとゴマは異なる回答で返信します!!ここでは、私が見たものです:Tomcatを6.0.37に

イエナ布石コンソール(バージョン2.10.0 - すぐに、ノー構成変更!) - (正解私は物事を理解して):

-------------------------------------------------------------- 
| g    | s    | p    | o | 
============================================================== 
| <http://x.com/g> | <http://x.com/s> | <http://x.com/p> | 2 | 
-------------------------------------------------------------- 

Tomcat 6.0.37上のSesame Workbench(バージョン2.7.3 - 設定変更なし):ワークベンチの 'Add'機能を使用して手動で上記のクワッドを手動で追加しました'データ形式'ドロップダウンボックスで「クワッド」を選択)、「アップロードするRDFデータを入力」ボックスに上記のクエリを実行して、上記のクエリを実行します:

-------------------------------------------------------------- 
| g    | s    | p    | o | 
============================================================== 
|     | <http://x.com/s> | <http://x.com/p> | 2 | 
| <http://x.com/g> | <http://x.com/s> | <http://x.com/p> | 2 | 
-------------------------------------------------------------- 

これはRDFを見ている人にとってちょっと怖いです - 私はここで何が欠けていますか?私はセサミが「間違っていない」と仮定しています。つまり、私が思う私の解釈でなければなりません(あるいは、ボブのクエリーは「標準SPARQL」ではないので、異なる実装で自由に結果を返すことができます)ようこそ :) !

+3

'UNION'の左側がデフォルトグラフに対して照会します。私は、これらの2つのシステムのデフォルトグラフに含まれているものとの違いが生じると考えています。例えば、Jenaでは、トリプルが追加されない限り、デフォルトのグラフは空です.Sesameではデフォルトのグラフは名前付きグラフの和集合ですか? –

答えて

7

@Joshua Taylorがコメントで指摘したように、SesameとJenaはデフォルトグラフとは異なる解釈を使用しています。

セサームでは、リポジトリ全体がデフォルトグラフとみなされます。すべての名前付きグラフ内のすべてのステートメントと、名前付きグラフのないすべてのステートメント。したがって、デフォルトのグラフを照会するあなたの共用体の最初の引数は、?s,?pおよび?o(但し、?gではありません)を成功させてバインドします。元のクワッドはもちろん名前付きグラフになっているので、あなたの組合の第2引数は明らかに成功します。したがって、2つの答えが得られます。

Jenaはデフォルトで「排他」デフォルトグラフを使用します。特定の名前付きグラフに明示的に追加されていないステートメントのみがデフォルトグラフにあります。したがって、Jenaでは、あなたの組合の最初の部分が失敗します(Jenaのデフォルトグラフに一致するステートメントはありません)、2番目の部分が成功し、1つの結果しか得られません。

奇妙な音がするかもしれませんが、両方とも正しいです。違いは、クエリが実行されるデータセットがどのように設定されているかです。

もちろん、これに対処する方法があります。 JenaとSesameの両方で、FROM (NAMED)節を追加して、照会されたデータセットが明示的になるようにすることができます(名前付きグラフが関連付けられていないステートメントを明示的に照会するためにSesameはsesame:nilグラフ名を提供します)。また、クエリが実行されるデータセット定義をプログラムによって変更することもできます。 JenaとSesameの正確な仕組みは少し異なりますが、どちらも選択肢があります(セサミでは実行前にDatasetオブジェクトを作成してクエリに渡すことができます)。実際の店舗やモデルを再構成できると思いますクエリーを実行して異なる動作をします)。

+4

以前のコメントを投稿した後、私はJenaのデフォルトおよびユニオングラフを取得する方法を検討しました。 [ドキュメンテーション](http://jena.apache.org/documentation/tdb/datasets.html)には、urn:x-arq:UnionGraphとurn:x-arq:DefaultGraphという2つの特別なグラフがあります。 –

+4

コンテキスト内で設定した場合、クエリに含める必要はありません。TDB.getContext()。set(TDB.symUnionDefaultGraph、true);クエリのデフォルトグラフは、名前付きグラフの和集合です。 http://jena.apache.org/documentation/tdb/datasets.htmlを参照してください。 – AndyS

関連する問題