python SPARQLWrapper return 只有 10000 个结果
python SPARQLWrapper return only 10000 results
我使用 SPARQLWrapper 模块向 virtuoso 端点发起查询并获取结果。
查询总是return最多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?
如何获得所有结果?
答案是调整Virtuoso configuration file, as documented。针对这种情况,需要在[SPARQL]
节中增加ResultSetMaxRows
。
限制不在 SPARQLWrapper 中。如果您通过 SPARQL 端点、Conductor 或任何其他接口执行完整的 SELECT
(而不是 COUNT
,后者仅提供 1 行),您会看到相同的限制。
10000条结果由数据所有者通过virtuoso.ini
中的ResultSetMaxRows
项设置,以保护数据。
如果没有,任何人都可以使用简单的 sparql 查询 select * where {?s ?p ?o}
来获取所有数据,这可能会花费数据所有者大量的时间和金钱。
我使用 SPARQLWrapper 模块向 virtuoso 端点发起查询并获取结果。
查询总是return最多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?
如何获得所有结果?
答案是调整Virtuoso configuration file, as documented。针对这种情况,需要在[SPARQL]
节中增加ResultSetMaxRows
。
限制不在 SPARQLWrapper 中。如果您通过 SPARQL 端点、Conductor 或任何其他接口执行完整的 SELECT
(而不是 COUNT
,后者仅提供 1 行),您会看到相同的限制。
10000条结果由数据所有者通过virtuoso.ini
中的ResultSetMaxRows
项设置,以保护数据。
如果没有,任何人都可以使用简单的 sparql 查询 select * where {?s ?p ?o}
来获取所有数据,这可能会花费数据所有者大量的时间和金钱。