Не мога да опиша проблема си официално поради лошия ми английски; нека го кажа с пример. Таблицата по-долу всъщност е групирана по „субект“, „предикат“.
Ние дефинираме набор от редове, ако те са един и същ „предмет“. Сега искам да комбинирам произволни два набора, ако те съдържат едни и същи „предикати“, да сумирам „броя“ на същия „предикат“ и да преброя броя на отделните субекти, които имат един и същи набор.
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
След това преброяването може да се отдели, след което да се сумира. Работи добре с малък набор от данни, но отнема много време.
Мисля, че ще се откажа от този странен проблем. Благодаря много за отговора.