【发布时间】:2018-04-28 13:23:29
【问题描述】:
我知道针对Wikidata SPARQL Endpoint 查询的以下 SPARQL 毫无意义。从我的应用程序中自动生成一个类似的查询。请忽略概念上的合理性,让我们深入研究正在发生的这件奇怪的事情(至少对我而言)。
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
我错过了什么?
【问题讨论】:
-
这就是人们所说的 Blazegraph 后端中的 bug。
-
将本地提取部署到 graphdb 时也会出现同样的问题!
标签: sparql wikidata blazegraph