1

次の簡単なクエリに対して、dbpedia sparql エンドポイントで "SR171: Transaction timed out" が表示されます: なぜこのエラーが発生するのですか? タイムアウトは設定していません - 0 です。

PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX : <http://dbpedia.org/resource/>
PREFIX dbpedia2: <http://dbpedia.org/property/>
PREFIX dbpedia: <http://dbpedia.org/>

PREFIX ont: <http://dbpedia.org/ontology/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name ?date (bif:substring(STR(?date), 1, 4) AS ?year) WHERE {
   ?person ont:birthDate ?date .
   ?person foaf:name ?name   

   . FILTER ( (fn:string-length(STR(?date)) = 10) && (bif:substring(STR(?date), 9, 2) = '05') && (bif:substring(STR(?date), 6, 2) = '02') && (?date > "1868-01-01"^^xsd:date) && (?date < "2005-01-01"^^xsd:date) )
4

1 に答える 1

8

これは、サービスの他のユーザーに悪影響を与えることなく、DBPedia エンドポイントが応答するクエリが難しすぎるためです。

DBPedia はよく知られているパブリック SPARQL エンドポイントであるため、非常に頻繁に使用されるため、ホストする人々はクエリの実行時間に厳密な制限を課すように設定して、不正なユーザーが他のユーザーにサービスを使用不能にさせないようにしています。

あなたの場合、多くの初期結果 (正確には 592299) を持つものを要求し、そのFILTER上に a を適用するため、クエリに時間がかかります。 FILTER特に文字列操作と日付比較を行う場合、SPARQL では非常にコストがかかります。私の知る限り、DBPedia のタイムアウトは数秒のようにかなり低く、FILTER.

- クエリの最初の部分が返す結果の数を確認するために使用したクエリは次のとおりです。

PREFIX ont: <http://dbpedia.org/ontology/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT COUNT(*) 
WHERE 
{
   ?person ont:birthDate ?date .
   ?person foaf:name ?name   
}
于 2012-02-07T17:35:24.240 に答える