如何检查三重存在与否?

时间:2019-03-27 09:48:09

标签: sparql wikidata

首先,我打算表达类似COUNT(?sub) AS ?sub_exists的查询,并用计数来检查?sub_exists是否为0。但是,此查询花费了太多时间,因此有时所花费的时间超过了超时时间。因此,我第二次尝试更改如下功能。但是,这还需要花费所有时间计算?sub,更糟糕的是,没有为?sub_exists分配任何值。

是否存在另一种方式来表达查询以仅检查,是否存在三元组?sub wdt:P31/wdt:P279* ?s并相应地获取其标志,而不会花费很多时间?

SELECT ?s ?sub_exists
WHERE {
  VALUES ?s {wd:Q5}
  ?sub wdt:P31/wdt:P279* ?s
  BIND(IF(COUNT(?sub) > 0,1,0) AS ?sub_exists)
}
GROUP BY ?s ?sub_exists 

1 个答案:

答案 0 :(得分:3)

SPARQL提供了一个很好的选择!如果存在模式,则ASK分别返回true或false。

这是一个可行的示例:

PREFIX wdt: <http://www.wikidata.org/prop/direct/>

ASK  {
  ?sub wdt:P31/wdt:P279* ?s
}