我使用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?
如何获得所有结果?
答案 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}
来获取可能花费数据所有者大量时间和金钱的所有数据。