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

Joh*_*hsm 8 select count sparql

似乎可以使用单个实体来计算

(COUNT(DISTINCT ?x) as ?count)
Run Code Online (Sandbox Code Playgroud)

以及查询中所有变量使用的不同元组的数量

(COUNT(DISTINCT *) as ?count)
Run Code Online (Sandbox Code Playgroud)

但是,我无法弄清楚如何计算特定(不同)元组.就像是

(COUNT(DISTINCT ?a ?b ?c) as ?count) 
Run Code Online (Sandbox Code Playgroud)

似乎不起作用.我做错了还是在SPARQL 1.1中真的不允许这样做?或者它应该工作,并且在Sesame 2.6.0中不支持我用于测试它?

cyg*_*gri 9

欢迎来到StackOverflow!

确保您的中间结果仅包含?a ?b ?c您感兴趣的三个变量.

一种方法是使用子查询.子查询只投影三个所需的变量.像这样的东西:

SELECT (COUNT(*) AS ?count) {
   SELECT DISTINCT ?a ?b ?c {
      …
   }
}
Run Code Online (Sandbox Code Playgroud)

(我不确定Sesame是否支持子查询.)

另一种方法是简单地确保您的查询仅包含三个变量.如果查询中需要更多变量,则可以使用空白节点替换它们.SPARQL图形模式中的空白节点的工作方式类似于"匿名变量".虽然有一些有趣的范围问题,所以子查询方法可能更好.