由于我的英语不好,我无法正式描述我的问题;让我用一个例子来告诉它。下表实际上是按“主语”、“谓语”分组的。
我们在行上定义一个集合,如果它们是相同的“主题”。现在我想组合任何两个集合,如果它们包含相同的“谓词”,将相同“谓词”的“计数”相加,并计算具有相同集合的不同主题的数量。
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 表示有两个对象(s1 和 s3)拥有该组;(p1,3) 是 (s1, p1, 1) 和 (s3, p1, 2) 的总和。
那么如何检索这些集合并将它们存储在 Java 中呢?
我怎样才能使用 SPARQL 做到这一点?
或者,首先将这些三元组存储在 Java 中,然后如何使用 Java 获取这些集合?
一种解决方案可能是 concat 谓词和计数,
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
然后可以将计数解耦,然后求和。它在小型数据集上运行良好,但非常耗时。
我想我会放弃这个奇怪的问题。非常感谢您的回答。