如何统计SparQL中同一主语和宾语的不同谓词的出现次数?

问题描述 投票:0回答:0

在我的 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)。有没有办法在不编写(复杂的)嵌套查询的情况下实现这一目标?鉴于会有很多不同的反应类型......谢谢。

sparql rdf
© www.soinside.com 2019 - 2024. All rights reserved.