1

我打算在Wikidata SPARQL 查询服务上构建一个包含电影及其标签的 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对相同信息的查询会返回更多结果 (215734):

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

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

这是为什么?我在某处遗漏了什么吗?

4

1 回答 1

3

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

可能的解决方法是这些 Blazegraph提示

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

尝试一下!

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" . }
}
于 2018-04-02T10:45:28.867 回答