来自 sparql 查询的重复结果

问题描述

当我尝试从 wikidata 获取所有篮球运动员的列表时,我遇到的问题找不到任何帮助。首先我得到玩家的数量(大约 130k)。然后我创建具有特定偏移量和限制 2000 的查询。问题是,无论偏移量是多少,我每次都会得到相同的 2000 名玩家。

(但是,如果我在 https://query.wikidata.org/ 上,结果总是不同的)

这是我在 python 中的代码的一部分,其中创建了查询

while(numberOfPlayers > 0):
    numberOfPlayers-=2000
    offset = 0
    queryPlayersBlock = """SELECT ?item ?itemLabel 
            WHERE 
            {
                ?item wdt:P106 wd:Q3665646.
                SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
            }
            offset """+str(offset)+"""
            limit 2000
            """
    players = get_results(endpoint_url,queryPlayersBlock)["results"]["bindings"]
    for i in range (0,len(players)):
        dataFile.write(str(players[i]["itemLabel"]["value"]+" : "+players[i]["item"]["value"].removeprefix("http://www.wikidata.org/entity/")+"\n"))
    offset+=2000

我在 sparql 文档中发现:“除非使用 ORDER BY 使订单可预测,否则使用 LIMIT 和 OFFSET 选择查询解决方案的不同子集将没有用。” 但是当我使用 order by 时出现错误“达到查询超时限制”。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...