2011-10-17 12 views
2

ラベルに特定の文字列が含まれているすべてのプロパティを受け取ろうとしています。PythonのSPARQLwrapperを使用したDBPediaエンドポイントへのSPARQLクエリによるHTTPエラー500の取得

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 

http://dbpedia.org/sparql @公共DBpediaのエンドポイントによるクエリをissueing、それが動作し、私が欲しいものを返します:私は、次のクエリを使用します。私は私のPythonスクリプトでSPARQLWrapperて同じことを行うときしかし、私は入れません:

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 

もう一度試してみてください。

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

グレート、それはそれだ:

は、次のPythonスクリプトを使用して、それを試してみました。今、うまく動作します、ありがとう! – graus

1

COUNT式は、括弧で囲まれた(count(?p) as ?count)である必要があります。

ここに問題があるかどうかはわかりませんが、私はそれを指摘しなければならないと考えました。

関連する問題