2012-11-26 45 views
0

我在python中使用SPARQLWrapper來查詢具有循環中許多不同查詢的web入口點。SPARQL初始化

所以我試圖使它像這樣的工作(讓queries容納所有不同的查詢和result結果):

sparql = SPARQLWrapper("url") 
prefix = "prefix..." 
for i in arange(1:len(queries)): 
    sparql.setQuery(prefix+queries[i]) 
    result[i] = sparql.query().convert() 

但是,這是行不通的。我從列表中選擇的第一個查詢將返回應有的結果,但其他任何查詢都不會。 取而代之的是,我現在用這個:

for i in arange(1:len(queries)): 
    [sparql,prefix] = initializeSPARQL() 
    sparql.setQuery(prefix+queries[i]) 
    result[i] = sparql.query().convert() 

def initializeSPARQL(): 
    sparql = SPARQLWrapper("url") 
    prefix = "prefix..." 
    return sparql,prefix 

工作並且也不性能的一個問題,因爲查詢本身是瓶頸。但有沒有更好的解決方案?這似乎是錯誤的...

回答

-1

我是圖書館的開發人員之一。

你的第一次嘗試出現了一個錯誤。我將檢查內部數據結構與之前的使用情況保持什麼關係以允許這種方式來使用庫。

你的第二個解決方案,即使是有效的,應該不是正確的做法。

正如我所說,我會看看如何解決這個問題。

未來,請提交一份適當的錯誤報告給項目或郵件列表。

0

這很奇怪..因爲我一直在檢查代碼,並且query()方法是完全無狀態的,所以不知道爲什麼它失敗。

當i> 1時,結果[i]包含什麼?

我可以建議你嘗試以下方法嗎?

sparql = SPARQLWrapper("url") 
prefix = "prefix..." 
results = [] 
for i in range(0, len(queries)): 
    sparql.resetQuery() 
    sparql.setQuery(prefix+queries[i]) 
    results[i] = sparql.query().convert() 
+1

哦,我不知道resetQuery()方法。我會嘗試這個,並會提供更新,謝謝! –

+0

現在工作嗎? – wikier

+0

嗨,我試過了,但我的SPARQL版本沒有提供重置方法:'AttributeError:SPARQLWrapper實例沒有屬性'resetQuery''在哪個版本引入? –