使用wikiPageRedirects SPARQL(sparql using wikiPageRe

2019-09-22 23:28发布

我使用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并没有其他数据。 我已经迷路了,我怎么能建立查询,以检查例重定向。

有谁能够帮助我?

Answer 1:

试着改变你的查询的第一部分使用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>而不是它应该看到更好的性能



Answer 2:

嗯,我已经找到了解决办法,但我不认为这是完美的。 我添加附加列:

...
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 }
...

但后来我有任何的答案,如果实体doesn't使用地理位置:长及地缘:LAT

因此,任何人知道更好的解决办法?



文章来源: sparql using wikiPageRedirects