2017-02-24 74 views
0

我使用SPARQLWrapper模块向virtuoso端点启动查询并获得结果。python SPARQLWrapper只返回10000个结果

查询总是返回最大的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?

如何获得所有结果?

+0

“直接启动”是什么意思?通常Virtuoso在'virtuoso.ini'文件中设置了默认限制 - 所以首先,你应该检查你的配置。 – AKSW

+0

当一个启动带有计数的查询进入virtuoso的指挥界面时,我得到正确的数字。我更改.ini文件中的参数,它工作,谢谢! –

回答

0

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

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

0

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