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

8

看起来可以使用

count()

函数计算单个实体的数量。

(COUNT(DISTINCT ?x) as ?count)

并且对于查询中所有变量的不同元组数量

(COUNT(DISTINCT *) as ?count)

然而,我无法想出如何计算特定(不同)的元组。类似于:
(COUNT(DISTINCT ?a ?b ?c) as ?count) 

这似乎不起作用。我是做错了还是SPARQL 1.1真的不允许这样做?或者这应该可以工作,只是我的测试环境中使用的Sesame 2.6.0不支持它?

1个回答

9

欢迎来到StackOverflow!

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

一种实现方式是使用子查询。子查询仅选择所需的三个变量。例如:

SELECT (COUNT(*) AS ?count) {
   SELECT DISTINCT ?a ?b ?c {
      …
   }
}

我不确定Sesame是否支持子查询。

另一种方法是确保您的查询仅包含三个变量。如果您需要在查询内部使用更多变量,您可能可以使用空白节点来替换它们。 SPARQL图案中的空白节点类似于“匿名变量”。但是这样会有一些有趣的作用域问题,因此子查询方法可能更好。


1
只是确认 Sesame 2.6 支持子查询。不过,升级到 2.6.5 可能是一个好主意 - 自 2.6.0 以来,在子查询评估方面进行了几个错误修复。 - Jeen Broekstra
谢谢,这看起来是一个很好的技巧来完成这个任务。正如你所说,Sesame确实允许子查询,因此这是可行的。你的答案似乎也暗示着,SPARQL语言定义确实不允许在计数表达式中明确地表达这个问题? - jpp1
COUNT 中不能有多个变量。它是 COUNT(*)COUNT(?var),可选的带有 DISTINCT - cygri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接