SPARQL:计算结果行

时间:2018-03-27 08:25:04

标签: sparql rdf

我有一个希望很容易回答的问题:他们在下面查询返回特定概念的更广泛概念以及分配给它的置信度值。我现在要做的是计算有多少更广泛的概念(置信度高于最小阈值)。答案应该只计算结果线。但是,我目前还不了解在这种特殊情况下如何在SPARQL中使用COUNT关键字。

PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX isa: <http://webisa.webdatacommons.org/concept/>
PREFIX isaont: <http://webisa.webdatacommons.org/ontology#>
select distinct ?hypernym ?minConfidence where
{
GRAPH ?g {
<http://webisa.webdatacommons.org/concept/_car_>  skos:broader ?hypernym .
}
?g isaont:hasConfidence ?minConfidence .
FILTER(?minConfidence > 0.1)
}
ORDER BY DESC(?minConfidence)

我尝试了以下内容:

PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX isa: <http://webisa.webdatacommons.org/concept/>
PREFIX isaont: <http://webisa.webdatacommons.org/ontology#>
select (count(*) as ?count) where
{
GRAPH ?g {
<http://webisa.webdatacommons.org/concept/_car_>  skos:broader ?hypernym .
}
?g isaont:hasConfidence ?minConfidence .
FILTER(?minConfidence > 0.1)
}
ORDER BY DESC(?minConfidence)

不幸的是,这只返回每行1的行。 我真正想要的只是一个数字。

您可以在线尝试查询,公共端点是:http://webisa.webdatacommons.org/sparql

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

显然,如果存在ORDER BY,Virtuoso会进行一些分组,因此将其遗漏会产生预期结果:

PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX isa: <http://webisa.webdatacommons.org/concept/>
PREFIX isaont: <http://webisa.webdatacommons.org/ontology#>
SELECT (COUNT(*) as ?count) WHERE
{
  GRAPH ?g {
    <http://webisa.webdatacommons.org/concept/_car_>  skos:broader ?hypernym .
  }
  ?g isaont:hasConfidence ?minConfidence .
  FILTER(?minConfidence > 0.1)
}

您还可以使用SELECT (COUNT(DISTINCT ?hypernym) AS ?count)来确保只计算不同的上位词。