SPARQL处理DBPedia城市重定向

时间:2016-05-25 22:59:24

标签: sparql dbpedia

此SPARQL语句有效:

PREFIX s: <http://dbpedia.org/resource/Del_Mar,_California>
PREFIX dbp: <http://dbpedia.org/property/>
PREFIX dbo: <http://dbpedia.org/ontology/>

SELECT * WHERE {
  OPTIONAL { s: dbp:officialName ?officialName . }
  OPTIONAL { s: dbp:name ?foaf_name . }
  #-- ... [ about 20 more lines like the above ] ...
} LIMIT 2;

但有些城市有重定向。例如, Pacific_Beach,_California 重定向到 Pacific_Beach,_San_Diego 。我怎么处理这个?

我已将Joshua Taylor's answer读到Retrieving dbpedia-owl:type value of resource with dbpedia-owl:wikiPageRedirect value?,我想知道我的 s:前缀是否让我搞砸了?我似乎无法实现他的解决方案:

select ?type where {
  dbpedia:Cupertino dbpedia-owl:wikiPageRedirects*/dbpedia-owl:type ?type
}

其他一些资源建议使用 union

阅读Wikibooks一章,XQuery/DBpedia with SPARQL - Football teams让我更加困惑。

我正在努力学习这些东西,但我确实迫切需要&#34;只是让它工作&#34;。一个解决方案和一些阅读链接将不胜感激!

2 个答案:

答案 0 :(得分:4)

我建议再看看约书亚·泰勒的“this answer”。其中一个建议是使用SPARQL检查数据。所以试试这个查询:

SELECT * WHERE {
   <http://dbpedia.org/resource/Pacific_Beach,_California> ?p ?o
}

这将为您提供URI <http://dbpedia.org/resource/Pacific_Beach,_San_Diego>的所有可用数据。请注意,在这种情况下,它不包含dbpedia-owl:wikiPageRedirects属性。看来重定向是DBPedia浏览器的内部,不包含在DBPedia数据中。

使用上述查询将帮助您找到数据中的实际内容(在这种情况下没有什么非常有趣的。)

答案 1 :(得分:4)

Pacific Beach, San Diego不会重定向到任何内容,但它是许多资源的重定向目标

  

是dbo:wikiPageRedirects of

     
      
  • DBR:Pacific_Beach,_CA
  •   
  • DBR:Pacific_Beach,_California
  •   
  • DBR:Pacific_Beach,_San_Diego,_CA
  •   
  • DBR:Pacific_Beach,_San_Diego,_California
  •   
  • DBR:Pacific_Beach,_San_Diego_California
  •   

这意味着您的查询的修改版本应该可以正常工作:

PREFIX s: <http://dbpedia.org/resource/Pacific_Beach,_San_Diego>
PREFIX dbp: <http://dbpedia.org/property/>
PREFIX dbo: <http://dbpedia.org/ontology/>

SELECT * WHERE {
  OPTIONAL { s: dbp:officialName ?officialName . }
  OPTIONAL { s: dbp:name ?foaf_name . }
  #-- ... [ about 20 more lines like the above ] ...
} LIMIT 2

SPARQL results

请注意,使用前缀来缩写单个IRI有点不寻常。使用块来绑定特定变量会更常见,您可以在查询的其余部分中使用该变量。也就是说,我会将该查询写为:

PREFIX dbp: <http://dbpedia.org/property/>
PREFIX dbo: <http://dbpedia.org/ontology/>

SELECT * WHERE {
  values ?s { <http://dbpedia.org/resource/Pacific_Beach,_San_Diego> }
  OPTIONAL { ?s dbp:officialName ?officialName . }
  OPTIONAL { ?s dbp:name ?foaf_name . }
  #-- ... [ about 20 more lines like the above ] ...
} LIMIT 2;

这样做的好处是,如果您想搜索其他城市的值,您只需将它们添加到值列表中即可。现在,如果要添加重定向到其他内容的值,那不是问题。您只想添加一个非可选模式,以帮助您关注重定向目标:

SELECT * WHERE {
  values ?x { <http://dbpedia.org/resource/Pacific_Beach,_California> }
  ?x dbo:wikiPageRedirects* ?s .
  OPTIONAL { ?s dbp:officialName ?officialName . }
  OPTIONAL { ?s dbp:name ?foaf_name . }
  #-- ... [ about 20 more lines like the above ] ...
} LIMIT 2

SPARQL results

作为最后一点,请注意,如果您从浏览器复制并粘贴URI,请确保在查询中使用正确的URI。当您在浏览器中访问DBpedia资源(例如 http://dbpedia.org/ resource / foo )时,您将被重定向到人类可读的表单浏览器中的http://dbpedia.org/ 页面 / foo 。这只是DBpedia的一个怪癖。 (实际上,他们应该使用内容类型协商,并在Web浏览器发出请求时返回前者的HTML文档。)