使用SPARQL从Wikidata获取所有电影标题时出现问题

使用SPARQL从Wikidata获取所有电影标题时出现问题,sparql,wikidata,Sparql,Wikidata,我正在尝试检索所有电影标题及其别名。我使用的是这样的查询(随着偏移量的增加),一开始它似乎可以工作: SELECT ?itemLabel ?itemAltLabel WHERE { ?item wdt:P31 wd:Q11424. SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } LIMIT 1000 OFFSET 0 虽然它检索了很多有效的电影标题,但其中一些却丢失了,尽管我可以在Wikidata

我正在尝试检索所有电影标题及其别名。我使用的是这样的查询(随着偏移量的增加),一开始它似乎可以工作:

SELECT ?itemLabel ?itemAltLabel WHERE {
  ?item wdt:P31 wd:Q11424.
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
LIMIT 1000
OFFSET 0
虽然它检索了很多有效的电影标题,但其中一些却丢失了,尽管我可以在Wikidata网站上找到它们。我无法对查询进行某些更改(我是SPARQL新手):

  • 对于调试,我想按itemLabel进行筛选,类似于
    ?itemLabel=‘搏击俱乐部’
    。我尝试了不同的选择,但没有一个奏效。你能帮我建立这样一个查询吗
  • 我想排除没有itemLabel的电影。它们当前将ID作为itemLabel返回,例如“Q12345”。如何添加类似
    的内容?itemLabel!=“
    ?还是应该是
    ?itemLabel与“Q[0-9]+”不一样
  • 排序:我想知道丢失的标题是否是因为没有添加任何排序。我只是运行限制为1000的查询,并用1000增加偏移量,直到没有结果为止。查询之间的排序是否可以更改?如果是这样的话,我是否应该添加
    orderby?refName
我可能会犯一些愚蠢的语法错误,所以如果可以,请提供完整的工作查询。如果你认为还有什么事情可能阻止我获得所有可用的标题,请告诉我


我在这里运行查询:

我以前遇到过这个问题,特别是在处理电影时:)我认为发生的是某些实体是电影子类别的实例。您要使用以下选项:

?项目wdt:P31/wdt:P279*wd:Q11424。

导航“instance of”链,直到找到“film”,因为如果某个东西是,比如说,像Toy Story()这样的动画电影,它是film的一个子类,那么原始查询将不会返回它


希望有帮助

如果知道实例,不要使用标签进行调试。使用
过滤器(?item=wd:q19050)
-它就可以工作了。正如您已经认识到的,如果没有
ORDER BY
,则无法保证通过使用
LIMIT n OFFSET n
@AKSW的分页来获得所有结果谢谢您的评论。如果我尝试按
排序,它通常会超时。有没有其他字段可以使用,这样就不会超时?在MySQL中,我会使用一个索引字段。不,通常三元组存储有主语(s)、谓语(p)和宾语(o)的索引,通常有几种排列。在您的情况下,将使用
pos
。然而,
订购价格昂贵,而且没有真正的解决办法。注意,这是一个共享资源,因此性能可能会受到限制。顺便问一下,您的用例是什么?也许你可以将数据加载到你自己的本地三联书店。电影的总数是191173部,这并不多。使用这种“神奇”标签服务也可能是一个性能问题。我不知道这是如何实现的,但它不是标准的SPARQL。我需要所有有效电影标题、乐队、书籍和其他一些类型的最新列表,以及别名。我将它们存储在关系数据库中,并将其用于清理用户配置文件数据,作为推荐引擎管道的一部分。我已经成功地使用了一年左右,但最近开始出现问题。维护人员告诉我,它已被弃用,取而代之的是Wikidata SPARQL API。