2016-04-16 5 views
1

に接続されたすべてのURIを見つけるために:SPARQLだが、私はこのデータを持っているとしましょうグラフ

<http://foo/toast> <veg:two> <http://foo/id_A> . 
<http://foo/apple> <veg:one> <http://foo/id_A> . 
<http://foo/banana> <veg:one> <http://foo/id_A> . 
<http://foo/banana> <veg:two> <http://foo/id_B> . 
<http://foo/mango> <veg:one> <http://foo/id_B> . 

私はURI http://foo/appleを使用したデータは、<http://foo/apple> <veg:one>であることを同じオブジェクトに接続されているすべてのリソースを取得することを問い合わせるだろうかにつながった。 <http://foo/apple> <veg:one> <http://foo/id_A>

に私は返すようにクエリを期待してるよう:

<http://foo/toast> , <http://foo/banana> , <http://foo/mango> 

私はこのようなクエリを試してみましたが、彼らは仕事をdidntの:

SELECT * WHERE{ 
<http://foo/apple> ?p ?id . 
?fr (<veg:one>)*/(<veg:two>)* ?otherId . 
} 

私は戻って接続するかどうかはわかりません?idへのプロパティパス。 逆のパスでクエリを結合する必要がありますか?それはやり過ぎのように思えるし、おそらく簡単な方法

私はトーストとバナナのURIを取り戻すために、クエリを作成することができます

はなく、マンゴーURI

おかげであることを!

+0

のようになります。プロパティパスの2番目の部分には、逆パス演算子 '^'が必要です。 – AKSW

+0

フォローしようとしているリンクを明確にすることはできますか?あなたは、トリプルに接続された対象を探していると言いますが、それはしばらくは意味がありません。リソースはトリプルではなく他のリソースに関連しています。あなたは、野菜を横断するリンゴのIDへの道を求めていますか?1つとveg:どちらの方向にも2つ? –

+0

私は、私が提供するいくつかのサブジェクトと述語のオブジェクトに関連するリソースを見つけることを試みています。そう、はい、私はリンゴのイドへのパスを求めています:1つとveg:どちらかの方向に2つ。トースト、バナナ、マンゴー。おかげで –

答えて

2

私があなたを理解している場合、veg:1またはveg:2で始まるパスがあり、appleのidで終わるveg:1またはveg:2の順方向および逆方向のリソースが必要なように思えます。それが正しい場合は、

#-- [[ fruit -> id ]/[ id -> fruit ]]* 
:apple ((veg:one|veg:two)/^(veg:one|veg:two))* ?other . 
+0

奇妙なことに、あなたのパスを使って他のものを選んだのですが、結果セットのを他のものに戻すだけです –

+0

ほとんどの場合、それが得られない唯一のものはhttp:// foo/mangoです –

関連する問題