首页 文章

使用 wikiPageRedirects 的 sparql

提问于
浏览
4

我正在使用 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 回答

  • 2

    尝试更改查询的第一部分以使用UNION e.g.

    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来设置一个常量我强烈建议只用<URL>代替?uri变量的所有用法,这应该会看到更好的性能

  • 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,我有任何答案

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

相关问题