Sparql 10000行DBpedia查询结果集大小限制

Sparql 10000行DBpedia查询结果集大小限制,sparql,dbpedia,sparqlwrapper,Sparql,Dbpedia,Sparqlwrapper,这是我第一次使用SPARQL。我在下面创建了一个查询,但只得到了前10000个结果。如何从DBpedia获取所有结果 from SPARQLWrapper import SPARQLWrapper, JSON sparql = SPARQLWrapper("http://dbpedia.org/sparql") sparql.setQuery(""" PREFIX dbpedia0: <http://dbpedia.org/ontology/> PREFIX

这是我第一次使用SPARQL。我在下面创建了一个查询,但只得到了前10000个结果。如何从DBpedia获取所有结果

    from SPARQLWrapper import SPARQLWrapper, JSON
sparql = SPARQLWrapper("http://dbpedia.org/sparql")
sparql.setQuery("""
    PREFIX dbpedia0: <http://dbpedia.org/ontology/>
    PREFIX dbpedia2: <http://dbpedia.org/property/>
    SELECT str(?song) as ?song str(?artist) as ?artist str(?genre) as ?genre WHERE {
    ?song a dbpedia0:Single.
    ?song dbpedia0:genre ?genre.
    ?song dbpedia0:musicalArtist ?artist
    }

    ORDER BY ?genre 
    """)
print '\n\n*** JSON Example'
sparql.setReturnFormat(JSON)
results = sparql.query().convert()
for result in results["results"]["bindings"]:
    print result["genre"]["value"].replace("http://dbpedia.org/resource/", "") +"\t\t"+result["artist"]["value"].replace("http://dbpedia.org/resource/", "")+"\t\t"+result["song"]["value"].replace("http://dbpedia.org/resource/", "")
从SPARQLWrapper导入SPARQLWrapper,JSON
sparql=SPARQLWrapper(“http://dbpedia.org/sparql")
sparql.setQuery(“”)
前缀db0:
前缀db2:
选择str(?song)作为?song str(?艺术家)作为?艺术家str(?流派)作为?流派在哪里{
?歌曲a:0:单曲。
?歌曲DB0:流派?流派。
?歌曲DB0:音乐艺术家?艺术家
}
按类型排序
""")
打印“\n\n***JSON示例”
setReturnFormat(JSON)
结果=sparql.query().convert()
对于结果[“结果”][“绑定”]:
打印结果[“类型”][“值”]。替换(“http://dbpedia.org/resource/“,”)+“\t\t”+结果[“艺术家”][“值”]。替换(“http://dbpedia.org/resource/“,”)+“\t\t”+结果[“歌曲”][“值”]。替换(“http://dbpedia.org/resource/", "")

我发现了一些关于:
OFFSET
LIMIT
,但我不确定如何使用它来获得所有结果。

您无法删除公共DBpedia服务设置的默认限制。您可以通过执行某种分页来解决这个问题,例如,执行查询
OFFSET 10000
OFFSET 20000
,等等,直到结果集为空为止。为确保正确性,此解决方案还需要按排序,但成本相当高。顺便说一句,与其使用字符串替换,不如使用
.replace(“http://dbpedia.org/resource/“,”)
“更好”方法是获取资源的英文
rdfs:label
,因为这些标签应该提供一种人类可读的形式。首先,感谢您的两个评论,因为它们非常有用。Re:偏移因此需要一个循环,直到所有结果集都为空?简短回答:是的,客户端代码中的一个循环将
OFFSET
值增加到SPARQL端点的默认限制-在您的情况下
10000
谢谢!我用这个方法成功了!:)