2

ラベルに特定の文字列が含まれるすべてのプロパティを取得しようとしています。次のクエリを使用します。

    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

パブリック DBPedia エンドポイント @ http://dbpedia.org/sparqlを介してクエリを発行すると、機能し、必要なものが返されます。ただし、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 

何がこれを引き起こしているのでしょうか?または、より具体的なエラーを取得する方法はありますか? 前もって感謝します。

4

2 に答える 2

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
于 2011-10-18T10:58:14.733 に答える
1

COUNT 式は(count(?p) as ?count)、括弧付きの , である必要があります。

ここで問題があるかどうかはわかりませんが、指摘する必要があると思いました。

于 2011-10-18T09:17:56.080 に答える