4

エンティティの場所を見つけるために sparql を使用しています。dbpedia-spootlight からの URL があり、それらの場所を見つけたいと考えています。だから私が使用しているクエリは次のとおりです。

PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> 
PREFIX dbo: <http://dbpedia.org/ontology/> 
SELECT DISTINCT * 
WHERE { ?uri rdfs:label ?label . 
OPTIONAL { ?uri geo:lat ?lat . ?uri geo:long ?long } . 
OPTIONAL { ?uri dbpedia-owl:country ?dbpediaContry . ?dbpediaContry dbpprop:cctld ?ccTLD } . 
FILTER (?uri = <URL>  && lang(?label) = "en" ) } 

この URL を取得するまでは問題ありませんでした: http://dbpedia.org/resource/Valencia,_Spainhttp://dbpedia.org/resource/ValenciaへのwikiPageRedirects があり、その他のデータはありません。リダイレクトでケースをチェックするクエリを作成する方法がわかりません。

誰でも私を助けることができますか?

4

2 に答える 2

2

UNIONたとえば、クエリの最初の部分を変更してみてください

PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> 
PREFIX dbo: <http://dbpedia.org/ontology/> 
PREFIX dbp: <http://dbpedia.org/property/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT DISTINCT * 
WHERE
{ 
  { 
    ?uri rdfs:label ?label . 
  } 
  UNION 
  { 
    [] dbo:wikiPageRedirects ?uri .
    ?uri rdfs:label ?label .
  }
  OPTIONAL 
  { 
    ?uri geo:lat ?lat ;
         geo:long ?long 
  }
  OPTIONAL 
  {
    ?uri dbo:country ?dbpediaContry . 
    ?dbpediaContry dbp:cctld ?ccTLD 
  }
  FILTER (SAMETERM(?uri, <URL>)  && lang(?label) = "en" ) 
} 

これUNIONにより、URI を持つものとリダイレクトを介して URI を持つものを見つけてから、残りのクエリを適用できます。また、クエリを高速化するためFILTERに使用するように変更したことに注意してください。SAMETERM()

一般に、定数を設定するためにそのようなことを行っているこの種のクエリがある場合は、変数FILTERのすべての使用を代わりに置き換えることを強くお勧めします。これにより、パフォーマンスが大幅に向上します。?uri<URL>

于 2012-09-25T23:17:22.573 に答える
0

うーん、解決策を見つけましたが、完璧ではないと思います。追加の列を追加しました:

...
OPTIONAL { ?uri  dbpedia-owl:wikiPageRedirects ?red } .
OPTIONAL { ?red geo:lat ?rlat . ?red geo:long ?rlong } 
...

しかし、今では応答でチェックする列がさらに2つあります。

私が試していた別の方法は次のとおりです。

...
OPTIONAL { ?uri  dbpedia-owl:wikiPageRedirects ?red } .
{?uri geo:lat ?lat . ?uri geo:long ?long}  UNION  { ?red geo:lat ?lat . ?red geo:long ?long }
...

しかし、エンティティにgeo:longとgeo:latがない場合は答えがあります

それで、誰もがより良い解決策を知っていますか?

于 2012-09-25T08:53:23.540 に答える