Select 如何使用SPARQL 1.1查询不同元组的数量?

Select 如何使用SPARQL 1.1查询不同元组的数量?,select,count,sparql,Select,Count,Sparql,似乎可以使用 (COUNT(DISTINCT ?x) as ?count) 以及查询中所有变量的不同元组数,使用 (COUNT(DISTINCT *) as ?count) 但是,我不知道如何计算特定的(不同的)元组。差不多 (COUNT(DISTINCT ?a ?b ?c) as ?count) 似乎不起作用。我是做错了还是SPARQL 1.1中真的不允许这样做?或者它应该工作,只是在我用来测试它的Sesame2.6.0中不受支持 欢迎来到StackOverflow 确保中间结果只包含

似乎可以使用

(COUNT(DISTINCT ?x) as ?count)
以及查询中所有变量的不同元组数,使用

(COUNT(DISTINCT *) as ?count)
但是,我不知道如何计算特定的(不同的)元组。差不多

(COUNT(DISTINCT ?a ?b ?c) as ?count) 

似乎不起作用。我是做错了还是SPARQL 1.1中真的不允许这样做?或者它应该工作,只是在我用来测试它的Sesame2.6.0中不受支持

欢迎来到StackOverflow

确保中间结果只包含您感兴趣的三个变量

一种方法是使用子查询。子查询仅投影三个所需的变量。大概是这样的:

SELECT (COUNT(*) AS ?count) {
   SELECT DISTINCT ?a ?b ?c {
      …
   }
}
(我不确定Sesame是否支持子查询。)


另一种方法是简单地确保查询只包含三个变量。如果查询中需要更多变量,可以用空白节点替换它们。SPARQL图形模式中的空白节点的工作方式类似于“匿名变量”。不过,这其中存在一些有趣的范围问题,因此子查询方法可能更好。

只是为了确认芝麻2.6确实支持子查询。不过,更新到2.6.5可能是一个好主意-自2.6.0以来,子查询评估中出现了几个错误修复。谢谢,这看起来是实现这一点的好方法。正如您所说,Sesame确实允许子查询,因此这是可行的。您的回答似乎还暗示,实际上,SPARQL语言定义不允许在count表达式中显式地表达这一点?在
count
中不能有多个变量。它是
COUNT(*)
COUNT(?var)
,带有可选的
DISTINCT