我有以下基本查询,它可以检索艺术家完成了多少幅画作
PREFIX dc: <http://purl.org/dc/terms/>
SELECT (COUNT(?numberOfPaintings) AS ?howMany)
WHERE { ?numberOfPaintings dc:creator "Artists_Name" . }
变量?howMany
返回,比方说20(绘画) - 到目前为止,非常好。我想创建另一个查询,使用ASK WHERE
检查艺术家是否绘制了超过10幅绘画,预期结果为true
或false
。
我尝试在查询的?numberOfPaintings > 10
部分使用ASK
,我知道我仍然需要执行COUNT
,但到目前为止我只看到>
FILTER
函数的上下文中的}运算符,所以我不确定如何在其他情况下使用它。
答案 0 :(得分:4)
另一种选择,具有相同的效果:HAVING
是在聚合操作后应用过滤器的方法:
PREFIX dc: <http://purl.org/dc/terms/>
SELECT (COUNT(?numberOfPaintings) AS ?howMany)
WHERE { ?numberOfPaintings dc:creator "Artists_Name" . }
HAVING ( ?howMany > 7 )
然后您可以嵌入ASK
查询。
答案 1 :(得分:3)
注意:AndyS's answer更适合此特定情况。虽然我在此处使用的嵌套
select
查询和过滤器表达式对于更复杂的查询限制可能是必需的,但使用having
可以更轻松地解决此特定情况。
让我们说你有这样的数据:
@prefix : <https://stackoverflow.com/questions/19826515/> .
:a1 :p :b1, :b2, :b3 .
:a2 :p :b1, :b2, :b3, :b4 .
:a3 :p :b1, :b2, :b3, :b4, :b5 .
然后查询如下:
select ?a (count(?b) as ?num) where {
?a :p ?b
}
group by ?a
返回每个?a
及其?b
的数量:
-------------
| a | num |
=============
| :a3 | 5 |
| :a1 | 3 |
| :a2 | 4 |
-------------
现在您只需将该查询包装在另一个查询中并过滤?num > ...
。例如,。 3
:
prefix : <https://stackoverflow.com/questions/19826515/>
ask where {
{
select ?a (count(?b) as ?num) where {
?a :p ?b
}
group by ?a
}
filter( ?num > 3 )
}
Yes
对于7
,我们会得到否:
prefix : <https://stackoverflow.com/questions/19826515/>
ask where {
{
select ?a (count(?b) as ?num) where {
?a :p ?b
}
group by ?a
}
filter( ?num > 7 )
}
No