首先,我打算表达类似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
答案 0 :(得分:3)
SPARQL提供了一个很好的选择!如果存在模式,则ASK分别返回true或false。
这是一个可行的示例:
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
ASK {
?sub wdt:P31/wdt:P279* ?s
}