Graph 分析RDF图:某种关系的平均数

Graph 分析RDF图:某种关系的平均数,graph,rdf,sparql,Graph,Rdf,Sparql,我是SPARQL的新手 我试图找到一种方法来分析RDF图,比如说一个主题的某个关系的平均数。 如果我们有数据的话 [Alice likes Money] [Bob has Money] [Bob likes Diving] [Bob likes Skiing] 每个节点“喜欢”的平均数量是多少(这里是:1.5) 我的第一次尝试是简单地编写一个脚本来迭代所有不同的对象,并查询每个对象

我是SPARQL的新手

我试图找到一种方法来分析RDF图,比如说一个主题的某个关系的平均数。 如果我们有数据的话

[Alice         likes     Money]
[Bob           has       Money]
[Bob           likes     Diving] 
[Bob           likes     Skiing]
每个节点“喜欢”的平均数量是多少(这里是:1.5)

我的第一次尝试是简单地编写一个脚本来迭代所有不同的对象,并查询每个对象上的相似关系数


有没有一种方法可以直接在SPARQL中实现这一点?

是的,您可以使用
分组方式和聚合来实现这类功能。请参阅技术规范中的,以了解此方面的概述

如果希望获得每个节点的喜好,可以这样做:

PREFIX : <http://example.org/ns#>

SELECT ?node (COUNT(*) AS ?likes)
WHERE
{
  ?s :likes ?node
}
GROUP BY ?node
这里我们再次使用
COUNT(*)
来获得喜欢的总数,然后我们使用
COUNT(DISTINCT?node)
来计算
?节点
的不同值,然后我们可以简单地将
?likeCount
除以
?nodeCount
,得到每个节点的平均喜欢度

PREFIX : <http://example.org/ns#>

SELECT 
 (COUNT(*) AS ?likeCount) 
 (COUNT(DISTINCT ?node) AS ?nodeCount) 
 (?likeCount / ?nodeCount AS ?avgLikesPerNode)
WHERE
{
  ?s :likes ?node .
}