使用wikiPageRedirects的sparql

时间:2012-09-25 07:47:49

标签: sparql dbpedia

我正在使用sparql来查找实体的位置。我有来自dbpedia-spootlight的网址,并希望为他们找到位置。所以我使用的查询是:

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" ) } 

在我得到这个网址之前一切正常:http://dbpedia.org/resource/Valencia,_Spain。 它有wikiPageRedirects到http://dbpedia.org/resource/Valencia,没有其他数据。 我迷路了如何构建查询来检查重定向的情况。

有人能帮助我吗?

2 个答案:

答案 0 :(得分: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来设置常量,我强烈建议用{{1}替换?uri变量的所有用法而不应该看到更好的性能

答案 1 :(得分:0)

嗯,我找到了一个解决方案,但我不认为它是完美的。 我添加了其他列:

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

但现在我还有两列要检查以作回应。

我尝试的另一种方式是:

...
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&amp;地理:LAT

那么,有谁知道更好的解决方案?