我正在使用 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 回答
尝试更改查询的第一部分以使用
UNION
e.g.UNION
允许您在应用其余查询之前查找具有 URI 的内容以及通过重定向具有 URI 的内容。注意我还将FILTER
更改为使用SAMETERM()
,这将使查询更快。一般情况下,如果你有这种查询,你正在做那种
FILTER
来设置一个常量我强烈建议只用<URL>
代替?uri
变量的所有用法,这应该会看到更好的性能嗯,我找到了解决方案,但我不认为它是完美的。我添加了其他列:
但是现在我有 2 列更多来检查响应。
我尝试的另一种方式是:
但如果实体没有 geo:long&geo:lat,我有任何答案
那么,有谁知道更好的解决方案?