在我的 RDF 图中,主题(在本例中为人)可以对某事(一个对象,例如一篇文章,任何“有创意的东西”)做出“反应”。对于同一个人和物体,可以有多个不同的反应,也就是说,一个人可以例如发现一篇文章“有趣”、“有思想”、“完美”,所以会有 3 个三元组,每个反应一个。
对于每种反应类型,我想计算给定人和物体的反应次数。我尝试了以下查询,它没有按预期工作,因为它似乎没有按谓词计算(例如,如果只有一个“reactInteresting”出现而没有“reactHappy”,两个计数器都将等于 1 ).
SELECT (COUNT(schema:reactInteresting) as ?countInteresting)
(COUNT(schema:reactHappy) as ?countHappy)
WHERE {
?agentUri ?reaction ?object .
FILTER(?reaction IN (schema:reactInteresting, schema:reactHappy))
}
GROUP BY ?agentUri
我也试过用UNION,同样的问题出现了
SELECT (COUNT(schema:reactInteresting) as ?countInteresting)
(COUNT(schema:reactHappy) as ?countHappy)
WHERE {
{
?agentUri schema:reactInteresting ?rsc .
} UNION {
?agentUri schema:reactHappy ?rsc .
} .
}
注意:使用 DISTINCT 和 COUNT,或 GROUP BY 对结果没有影响
sparql 引擎是rdflib (python)。有没有办法在不编写(复杂的)嵌套查询的情况下实现这一目标?鉴于会有很多不同的反应类型......谢谢。