gpt4 book ai didi

包含 Wikidata 上的子查询的 SPARQL 查询给出了意外结果

转载 作者:行者123 更新时间:2023-12-02 06:53:55 25 4
gpt4 key购买 nike

我知道以下 SPARQL 针对 Wikidata SPARQL Endpoint查询毫无意义。我的应用程序中会自动生成类似的查询。请忽略概念的合理性,让我们深入研究这个奇怪的(至少对我来说)发生的事情。

SELECT ?year1 ?year_labelTemp
WHERE
{
?year1 <http://www.w3.org/2000/01/rdf-schema#label> ?year_labelTemp .
{ SELECT distinct ?year1
WHERE
{ ?film <http://www.wikidata.org/prop/direct/P577> ?date ;
<http://www.wikidata.org/prop/direct/P31> <http://www.wikidata.org/entity/Q11424>
BIND(year(?date) AS ?year1)
}
}
}
limit 10

根据SPARQL中的查询评估,首先评估子查询,然后将其结果投影到包含查询。因此,将首先评估该子查询。

SELECT distinct ?year1
WHERE
{ ?film <http://www.wikidata.org/prop/direct/P577> ?date ;
<http://www.wikidata.org/prop/direct/P31> <http://www.wikidata.org/entity/Q11424>
BIND(year(?date) AS ?year1)
}

子查询准确地给出了预期的结果(130 个不同的年份)。然后,该子查询的结果(?year1 变量)将被投影出来并与外部选择中的三元组模式连接。

?year1  <http://www.w3.org/2000/01/rdf-schema#label>  ?year_labelTemp .

但是,由于外部选择不应包含任何数据(?year1 没有标签),因此联接不会给出任何结果。

令人惊讶的是(至少对我来说),执行首先声明的整个查询 () 给出了结果,而且结果很奇怪。

 wd:Q43576  Mië
wd:Q221 Masèdonia
wd:Q221 Республикэу Македоние
wd:Q221 Republiek van Masedonië
wd:Q212 Украина
wd:Q212 Ukraina
wd:Q212 Украинэ
wd:Q212 Oekraïne
wd:Q207 George W. Bush
wd:Q207 George W. Bush

我错过了什么?

最佳答案

问题是有时 BIND 无法正确投影变量。

您可以使用以下查询来检查:

SELECT ?year1 ?year_labelTemp ?projected
WHERE
{
?year1 rdfs:label ?year_labelTemp .
hint:Prior hint:runLast true .
{ SELECT DISTINCT ?year1
WHERE
{ ?film wdt:P577 ?date ;
wdt:P31 wd:Q11424
BIND(year(?date) AS ?year1)
hint:SubQuery hint:runOnce true
}
}
BIND(bound(?year1) AS ?projected)
}
LIMIT 10

Try it!

幸运的是,以下技巧有所帮助:

SELECT ?year1 ?year_labelTemp
WHERE
{
?year1 rdfs:label ?year_labelTemp .
hint:Prior hint:runLast true .
{ SELECT DISTINCT ?year1
WHERE
{ ?film wdt:P577 ?date ;
wdt:P31 wd:Q11424
BIND(year(?date) AS ?year1)
FILTER (?year1 > 0)
}
}
}
LIMIT 10

Try it!

<小时/>

可以在没有嵌套子查询和提示:查询提示:优化器“无”的情况下重现该错误,因此它应该不是查询优化器错误。但有趣的是 bug disappearswd:Q11424 替换为 wd:Q24862 后。

BLZG-963似乎是最相关的问题(如您所见,也涉及内置函数)。

关于包含 Wikidata 上的子查询的 SPARQL 查询给出了意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50077007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com