3

http://dbpedia.org/sparqlでこのクエリを実行しようとしていますが、クエリが高すぎるというエラーが表示されます。http://dbpedia.org/snorql/でクエリを実行すると、次のようになります。

The estimated execution time 25012730 (sec) exceeds the limit of 1500 (sec) ...

SPARQLWrapper を使用して Python スクリプトでクエリを実行すると、単純に HTTP 500 が返されます。

SPARQL クエリを最適化するために何かをする必要があると思います。教育機関を反復処理してローカルデータベースにインポートするためのデータが必要です.SPARQLを間違って使用している可能性があり、根本的に異なる方法でこれを行う必要があります.

誰かが私を助けてくれることを願っています!

クエリ

PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
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 skos: <http://www.w3.org/2004/02/skos/core#>

            SELECT DISTINCT ?uri
                ?name
                ?homepage
                ?student_count
                ?native_name
                ?city
                ?country
                ?type
                ?lat ?long
                ?image

            WHERE {
                ?uri rdf:type dbpedia-owl:EducationalInstitution .
                ?uri foaf:name ?name .
                OPTIONAL { ?uri foaf:homepage ?homepage } .
                OPTIONAL { ?uri dbpedia-owl:numberOfStudents ?student_count } .
                OPTIONAL { ?uri dbpprop:nativeName ?native_name } .
                OPTIONAL { ?uri dbpprop:city ?city } .
                OPTIONAL { ?uri dbpprop:country ?country } .
                OPTIONAL { ?uri dbpprop:type ?type } .
                OPTIONAL { ?uri geo:lat ?lat . ?uri geo:long ?long } .
                OPTIONAL { ?uri foaf:depiction ?image } .
            }
            ORDER BY ?uri
            LIMIT 20 OFFSET 10
4

3 に答える 3

2

データセット全体を一度に取得しようとしないでください。句を追加し、LIMITそれらを使用してデータをページングします。OFFSET

追加するとLIMIT 50、クエリの結果がほぼ瞬時に返されます。制限をそれよりもはるかに高くすることができ、それでも応答が得られるので、試してみてください。適切なページ サイズが見つかったら、OFFSET結果が得られなくなるまでクエリを繰り返します。

SELECT * WHERE { ... } LIMIT 100
SELECT * WHERE { ... } LIMIT 100 OFFSET 100
...
于 2011-06-09T05:34:51.493 に答える
2

正確な URI がわかっている場合 (たとえば、以前のクエリから)、URI を where 句に直接配置する方が (少なくとも私の経験では) URI を FILTER に配置するよりも高速です。

例:

WHERE { <http:/...> ... }

以上

WHERE { ?uri .... FILTER (?uri...)

また、UNION は、複数のリソースに一致するように設計されたフィルターよりも実際に高速に実行されることがわかりました。

SPARQL を実行しているからといって、SQL チューニングの悪夢を忘れることはできません。SPARQL チューニングの素晴らしい世界へようこそ! :)

于 2011-06-20T00:56:25.750 に答える