2017-07-18 14 views
1

このクエリはhttp://dbpedia.org/snorql/で機能します。wikidata.dbpedia.org/sparqlでクエリが実行されないのはなぜですか?

しかし、http://wikidata.dbpedia.org/sparqlでは機能しません。

http://wikidata.dbpedia.org/sparqlで動作するように修正するにはどうすればよいですか?

FILTER (?pop>1). 

、それが働いた:

PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX dbpedia: <http://dbpedia.org/resource> 
PREFIX dbpprop: <http://dbpedia.org/property> 
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> 

SELECT DISTINCT * 
WHERE{ 
    ?city rdf:type dbo:PopulatedPlace. 
    OPTIONAL {?city rdfs:label ?labelEN. FILTER (lang(?labelEN) = 'en').} 
    OPTIONAL {?city rdfs:label ?labelES. FILTER (lang(?labelES) = 'es').} 
    OPTIONAL {?city dbo:populationTotal ?pop.} 
    OPTIONAL {?city dbo:country ?country. 
       OPTIONAL {?country rdfs:label ?countryEN . FILTER (lang(?countryEN) = 'en').} 
       OPTIONAL {?country rdfs:label ?countryES . FILTER (lang(?countryES) = 'es').} 
      } 
    OPTIONAL {?city geo:long ?long.} 
    OPTIONAL {?city geo:lat ?lat.} 

    FILTER (?pop>1000000). 
} 
LIMIT 100 
+0

'?city dbo:populationTotal?pop。}'を '?city dbo:populationTotal?pop.'に置き換えてください。 –

+0

@StanislavKralinこれは必ずしも必要ではありませんが、本当に便利です。 – AKSW

+1

@HumanFromEarthあなたのクエリは機能しますが、(左結合の束である)OPTIONALの束のために、クエリは非常に高価でタイムアウトにつながります。その場合、Virtuosoにはいつでも機能があり、与えられた時間。 WebUIのデフォルトは30秒ですが、それを増やすことができます。 – AKSW

答えて

1

人口フィルタは、私はそれを変更し、あなたの特定のクエリではhttp://wikidata.dbpedia.org/sparql
に何らかの理由で、あなたのクエリに失敗しているようです。

PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX dbpedia: <http://dbpedia.org/resource> 
PREFIX dbpprop: <http://dbpedia.org/property> 
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> 

    SELECT ?city ?labelEN ?labelES MAX(?pop) ?countryEN ?countryES 
    WHERE{ 
     ?city rdf:type dbo:PopulatedPlace. 
     ?city dbo:city ?country. 
     {?city rdfs:label ?labelEN. FILTER (lang(?labelEN) = 'en').} 
     {?city rdfs:label ?labelES. FILTER (lang(?labelES) = 'es').} 
     {?city dbo:populationTotal ?pop.} 
     OPTIONAL {?country rdfs:label ?countryEN . FILTER (lang(?countryEN) = 'en').} 
     OPTIONAL {?country rdfs:label ?countryES . FILTER (lang(?countryES) = 'es').} 
     FILTER(?pop > 1000000) 
    } 
    GROUP by ?city ?labelEN ?labelES ?countryEN ?countryES 
+0

フィルタは** **失敗しません!これは、Virtuosoのタイムアウト(デフォルトは30秒)であり、指定された時間内に見つかったすべてのものを返します。タイムアウトを長くすると結果が得られます。 – AKSW

+0

実際には(http://wikidata.dbpedia.org/sparql)でタイムアウトしませんでした。元のクエリの構造上、結果が返されませんでした。それを行ってください... –

+0

私はあなたにフォローすることはできません。元のSPARQLクエリはWebインタフェースで結果を返しません。これは、Virtuosoが指定された時間内に見つかったものを返すためです。 a)a)タイムアウト値を増やすか、またはb)populationプロパティを持つOPTIONAL句以外のすべてのOPTIONAL句を削除する場合、FILTERが機能することがわかります。 – AKSW

1

AKSWが指摘したように、ヴィルトゥオーゾはいつかただ与えられたで見つかったすべてのものをフラッシュ:
また、私は(いくつかの都市がdbo:populationTotalに対して複数の値が、私はMAX値を選んだ)に動作し、クエリのこのバリアントを作りました時間。クエリが高すぎて、指定された時間内に完全に実行することはできません。

あなたがすべき

  • 増加タイムアウト(でも300秒は十分ではありませんが)、または
  • は、クエリを最適化します。

AKSWは指摘したように、OPTIONALは高価です。しかし、フィルタリングOPTIONALの値も(そしておそらくさらに)高価です。

PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> 

SELECT DISTINCT * 
WHERE { 
    ?city rdf:type dbo:PopulatedPlace. 
    OPTIONAL {?city rdfs:label ?labelEN. FILTER (lang(?labelEN) = 'en').} 
    OPTIONAL {?city rdfs:label ?labelES. FILTER (lang(?labelES) = 'es').} 
    ?city dbo:populationTotal ?pop. #-- Not optional, will be filtered! 
    OPTIONAL {?city dbo:country ?country. 
       OPTIONAL {?country rdfs:label ?countryEN . FILTER (lang(?countryEN) = 'en').} 
       OPTIONAL {?country rdfs:label ?countryES . FILTER (lang(?countryES) = 'es').} 
      } 
    OPTIONAL {?city geo:long ?long.} 
    OPTIONAL {?city geo:lat ?lat.} 
    FILTER (?pop>1000000). 
} 

Run it!

FILTERが今必要とされていないことに注意してください:ちょうど?pop変数とOPTIONALを削除します。

  1. simple counting
  2. counting with optional conditions:あなたがしたい場合


    、あなたはこれらのクエリによって返された "大" 人口場所の数を比較することができます。

結果は両方とも227である必要があります。


私はあなたが本当にあなたの質問でwikidata.dbpedia.orgを意味願っていますし、どちらもwikidata.org、またフェデレーテッド照会を意味するものではありません。

+1

ありがとうございますが、あなたのバージョンでは、 OPTIONALブロックは空を返し、ブロック全体が空になります。そのため、OPTIONALはすべてのオプション変数の前にあります。 – HumanFromEarth

+0

@HumanFromEarth、OK、これを修正しました。しかし、この特定の場合、結果は 'OPTIONAL'が区切られているかどうかにかかわらず、227でなければなりません。 –

関連する問題