python SPARQLWrapper只返回10000个结果

时间:2017-02-24 10:30:27

标签: python python-3.x sparql virtuoso sparqlwrapper

我使用SPARQLWrapper模块启动对virtuoso端点的查询并获得结果。

查询始终返回最多10000个结果

这是python脚本:

from SPARQLWrapper import SPARQLWrapper, JSON 

queryString = """ 
SELECT DISTINCT ?s
WHERE {
    ?s ?p ?o .
}
"""


sparql = SPARQLWrapper("http://localhost:8890/sparql")
sparql.setQuery(queryString)
sparql.setReturnFormat(JSON)

res = sparql.query().convert()

# Parse result
parsed = []
for entry in res['results']['bindings']:
    for sparql_variable in entry.keys():
        parsed.append({sparql_variable: entry[sparql_variable]['value']})

print('Query return ' + str(len(parsed)) + ' results')

当我用

查询查询时
SELECT count(*) AS ?count

我得到了正确数量的三元组:917051。

为什么SPARQLWrapper模块将结果数限制为10000?

如何获得所有结果?

2 个答案:

答案 0 :(得分:0)

答案是调整Virtuoso configuration file, as documented。特别针对这种情况,您需要增加ResultSetMaxRows节中的[SPARQL]

限制不在SPARQLWrapper中。如果通过SPARQL端点,Conductor或任何其他接口完成SELECT(而不是COUNT,只提供1行),您会看到相同的限制。

答案 1 :(得分:0)

数据所有者通过ResultSetMaxRows中的virtuoso.ini项设置10000结果,以保护数据。
如果没有,任何人都可以使用简单的sparql查询select * where {?s ?p ?o}来获取可能花费数据所有者大量时间和金钱的所有数据。