SPARQL 构造;并非所有结果都被检索

SPARQL CONSTRUCT; not all results are retrieved

我想在 Wikidata SPARQL query service 上构建一个包含电影及其标签的 RDF 图。 基本上,这是我认为足够的查询:

CONSTRUCT{
  ?film wdt:P31 wd:Q11424 .
  ?film rdfs:label ?filmLabel.
}
WHERE{
  ?film wdt:P31 wd:Q11424 .
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en, [AUTO_LANGUAGE]". }
}

好像不是所有的影片都出现在结果中(127636个结果),我注意到没有出现的影片基本上都是没有标签的。

但是,SELECT 查询相同信息 returns 更多结果 (215734):

SELECT ?film ?filmLabel
WHERE{
  ?film wdt:P31 wd:Q11424 .
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en, [AUTO_LANGUAGE]". 
  }
}

似乎并不是所有满足 WHERE 子句的变量绑定(WHERE 子句在两个查询之间共享)都在第一个查询的 CONSTRUCT 中使用,但所有其中 SELECT 中使用了它们。

这是为什么?我是不是漏了什么地方?

这是 CONSTRUCT 优化器某处的错误,与标签服务无关。

可能的解决方法是这些 Blazegraph hints:

  • hint:Query hint:queryEngineChunkHandler "Managed"
  • hint:Query hint:constructDistinctSPO false

Try it!

CONSTRUCT {
  ?film wdt:P31 wd:Q11424 .
  ?film rdfs:label ?filmLabel .
}
WHERE { 
  ?film wdt:P31 wd:Q11424 .
  hint:Query hint:queryEngineChunkHandler "Managed" .
  # hint:Query hint:constructDistinctSPO false .  
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" . }
}