私は英語が正しくないため正式に問題を記述できません。私は例を使ってそれを教えてください。 以下の表は、実際には「件名」、「述語」によってグループ化されています。SPARQLで複数の行セットを結合する
同じ「件名」の場合は、行にセットを定義します。今度は、同じ「述語」を含み、同じ「述語」の「数」を合計し、同じ集合を持つ別個の主題の数を数えれば、2つの集合を結合したいと思う。
subject predicate count
-----------------------------
s1 p1 1
s1 p2 2
s2 p1 3
s3 p1 2
s3 p2 2
したがって、何この表から望んだが二組ある:
{2, (p1, 3), (p2, 4)},
{1, (p1,3)}
最初のセットでは、2本のセットを有する2人の被験者(S1とS3)があることを示し; (p1,3)は(s1、p1,1)と(s3、p1,2)の合計です。
これらのセットを取得してJavaに保存するにはどうすればよいですか?
私はSPARQLを使ってどのようにすることができますか?
または、これらのトリプルをJavaで保存してから、Javaを使用してこれらのセットを取得するにはどうすればよいですか?
一つの解決策は、その後数は合計その後、分離することができ述語とカウント、
SELECT (COUNT(?s) AS ?distinct)
?propset
(group_concat(?count; separator = \"\\t\") AS ?counts)
{
SELECT ?s
(group_concat(?p; separator = \" \") AS ?propset)
(group_concat(?c; separator = \" \") AS ?count
{
?s ?p ?c
} GROUP BY ?s ORDER BY ?s
} GROUP BY ?propset ORDER BY ?propset
をCONCATされる可能性があります。 小さなデータセットではうまく動作しますが、時間がかかります。
私はこの奇妙な問題をあきらめるだろうと思います。 ありがとうございます。
はい私はs1とs3が同じセットを持っていることを意味します。申し訳ありませんが、私はそれを修正しました(さらに、s2の述語値を変更してより明確にしました)。しかし、私が望む結果は「セットのセット」です。 {p1、p2}と{p1}の2つのセットは、異なるために組み合わせることはできません。したがって、すべての同じ述語の値を合計するだけではありません。お返事ありがとうございます:) – bobharris
ああ、それを得ました。それは難しいかもしれませんが、私は2回目のパスを追加しました。 – user205512
それは私が欲しいものに近いです:)しかし、それは走っていて、何の結果も与えないようです。また、このクエリが成功した場合、結果のテーブルからこれらのセットを取得するにはどうすればよいですか?私は結果の表に2つの列が含まれていることがわかりますが、セットに関する情報はありません。結果として、それらはJavaに格納されるので、実際にはこれらの結果が必要です。ありがとうございました。 – bobharris