2017-02-24 110 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}來獲取所有可能花費數據所有者大量時間和金錢的數據。