0

次のようなデータを想定します。

<event1> member <A>
<event1> member <B>
<event1> member <C>
<event2> member <D>
<event2> member <E>

同じ入会イベントでつながるペアを探しています。すなわちここに:

A B
A C
B C
D E

逆の順序が含まれる場合と含まれない場合があります(私のユースケースではどちらも問題ありません)。しかし、このようなクエリ

select distinct ?x ?y 
  where {?m member ?x. ?m member ?y}

A Aまたはのような自明なペアも含まれますB B

結果を ?x と ?y が異なるものに制限するにはどうすればよいですか? ?x != ?ywhere句とFILTERを介して別のトリプルとして追加しようとしましたが、どちらも機能しないようです

4

2 に答える 2

4

あなたに役立つ回答を投稿しましたが、問題があった構文はSPARQLの問題ではなく、使用したスト​​ア/ SPARQLエンジンにあると思われることを指摘します。Jena の ARQ を使用して、以下data.n3を読み込んで実行し、query.sparql説明した結果を得ることができます。

data.n3:

@prefix : <http://example.org/> .

:event1 :member :a .
:event1 :member :a .
:event1 :member :b .
:event2 :member :c .
:event2 :member :d .

query.sparql:

PREFIX : <http://example.org/>

SELECT ?x ?y WHERE {
  ?event :member ?x, ?y .
  FILTER( ?x != ?y )
}

以下は、Jena のコマンド ライン ツールを使用して実行した場合の結果です。

$ arq  --query query.sparql --data data.n3 
-----------
| x  | y  |
===========
| :d | :c |
| :c | :d |
| :b | :a |
| :a | :b |
-----------
于 2013-06-19T15:42:55.230 に答える
0

私はこのように解決しました:

select distinct ?x ?y 
   where {?m member ?x. ?m member ?y. filter(!(?x = ?y))}

これは私にとってはうまくいきましたfilter(?x != ?y)が、空の結果につながりました。これが本当に SPARQL 関連なのか、私が使用したトリプルストアである rdf3x に欠けている機能なのかはわかりません。

于 2013-06-19T15:26:17.300 に答える