使用SPARQL从维基数据获取所有电影片名的问题

时间:2017-02-10 18:06:40

标签: sparql semantic-web wikidata wikidata-api

我正在尝试使用别名检索所有电影标题。我正在使用这样的查询(增加OFFSET),起初它似乎有效:

SELECT ?itemLabel ?itemAltLabel WHERE {
  ?item wdt:P31 wd:Q11424.
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
LIMIT 1000
OFFSET 0

虽然它检索了很多有效的电影片,但有些片段丢失了,尽管我可以在维基数据网站上找到它们。我无法对查询进行一些更改(我是SPARQL的新手):

  • 对于调试,我想按itemLabel过滤,类似. ?itemLabel = 'fight club'。我尝试了不同的选择但没有效果。你能帮我建一个这样的查询吗?
  • 我想要排除没有itemLabel的电影。这些当前将其ID作为itemLabel返回,例如“Q12345”。如何添加. ?itemLabel != ""之类的内容?或者应该以某种方式. ?itemLabel NOT LIKE 'Q[0-9]+'
  • 排序:我想知道丢失的标题是否可能是因为没有添加任何排序。我只是使用LIMIT 1000运行查询并将OFFSET增加到1000,直到没有结果。查询之间的排序是否会发生变化如果是,我应该添加ORDER BY ?refName吗?

我可能会犯一些愚蠢的语法错误,所以如果可以,请提供完整的工作查询。如果你认为还有其他任何东西可能阻止我获得所有可用的标题,请告诉我。

我在这里运行查询:https://query.wikidata.org/

1 个答案:

答案 0 :(得分:4)

我之前和特别是在处理电影时遇到过这个问题:)我认为发生的事情是某些实体是电影子类别的实例。您想使用以下内容:

?item wdt:P31/wdt:P279* wd:Q11424 .

导航''的实例连锁直到你碰到电影'因为如果像玩具总动员(Q171048)这样的动画电影 - 这是电影的子类 - 那么它就不会被原始查询返回。

希望有所帮助!