2011-10-17 34 views
2

我試圖接收其標籤包含特定字符串的所有屬性。我用下面的查詢:使用Python的SPARQLwrapper將SPARQL查詢的HTTP錯誤500獲取到DBPedia端點

SELECT ?p ?l count(?p) as ?count WHERE { 
    ?someobj ?p ?s . 
    ?p a <http://www.w3.org/1999/02/22-rdf-syntax-ns#Property> .   
    ?p <http://www.w3.org/2000/01/rdf-schema#label> ?l . 
    ?l bif:contains "string" . 
    FILTER (lang(?l) = 'en'). 
    FILTER (!isLiteral(?someobj)). 
    } ORDER BY DESC(?count) LIMIT 5 

當issueing通過公共DBpedia的端點@http://dbpedia.org/sparql查詢,它的工作原理,並返回我想要的。然而,當我通過SPARQLWrapper一樣在我的Python腳本,我不斷收到:

File "E:\thesis\sem_web21.py", line 254, in findWord 
    results = sparql.query().convert() 
File "build/bdist.linux-i686/egg/SPARQLWrapper/Wrapper.py", line 355, in query 
    return QueryResult(self._query()) 
File "build/bdist.linux-i686/egg/SPARQLWrapper/Wrapper.py", line 334, in _query 
    raise e 
HTTPError: HTTP Error 500: SPARQL Request Failed 

我曾嘗試變化的查詢,有和沒有計數和分類,有和沒有限制。我不斷收到HTTP 500。我不認爲這是端點不穩定,因爲我對同一腳本中的其他查詢沒有問題,它只會停止在此查詢中。

類似的查詢檢索對象正常工作(無論是在公共端點通過我的腳本):

SELECT ?s ?l count(?s) as ?count WHERE { 
    ?someobj ?p ?s . 
    ?s <http://www.w3.org/2000/01/rdf-schema#label> ?l . 
    ?l bif:contains "computer" . 
    FILTER (!regex(str(?s), '^http://dbpedia.org/resource/Category:')). 
    FILTER (!regex(str(?s), '^http://dbpedia.org/resource/List')). 
    FILTER (!regex(str(?s), '^http://sw.opencyc.org/')). 
    FILTER (lang(?l) = 'en'). 
    FILTER (!isLiteral(?someobj)). 
    } ORDER BY DESC(?count) LIMIT 20 

任何想法可能是什麼造成的?或者任何想法如何我可以檢索一個更具體的錯誤?提前致謝。

回答

2

我認爲這是dbpedia的超時錯誤,因爲它在不同的圖表中查找它。當您通過dbpedia Web界面嘗試時,它始終包含您正在查詢的圖形的URI。因此,嘗試補充說,您的查詢:

SELECT ?p ?l count(?p) as ?count FROM <http://dbpedia.org> WHERE { 
?someobj ?p ?s . 
?p a <http://www.w3.org/1999/02/22-rdf-syntax-ns#Property> .   
?p <http://www.w3.org/2000/01/rdf-schema#label> ?l . 
?l bif:contains "string" . 
FILTER (lang(?l) = 'en'). 
FILTER (!isLiteral(?someobj)). 
} ORDER BY DESC(?count) LIMIT 5 

,並再次嘗試。

試了一下使用下面的python腳本:

import sys 
import urllib,urllib2 

def query_e(query,epr,soft_limit=True): 
    try: 
     params = urllib.urlencode({'query': query}) 
     opener = urllib2.build_opener(urllib2.HTTPHandler) 
     request = urllib2.Request(epr+'?'+params) 
     request.add_header('Accept', 'application/json') 
     request.get_method = lambda: 'GET' 
     url = opener.open(request) 
     data = url.read() 
     return data 
    except Exception, e: 
     traceback.print_exc(file=sys.stdout) 
     raise e 
+0

大,僅此而已。現在工作正常,謝謝! – graus

1

COUNT表達式應該是(count(?p) as ?count),並帶括號。

不知道這是這裏的問題,但認爲我應該指出。