0

我使用 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 ?

我如何获得所有结果?

4

2 回答 2

0

答案是调整Virtuoso 配置文件,如文档所述。特别是对于这种情况,您需要ResultSetMaxRows[SPARQL]节中增加。

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

于 2017-03-01T22:02:27.887 回答
0

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

于 2017-05-30T04:45:02.757 回答