dbpedia SPARQL - 如何从纬度和经度获取国家/地区

时间:2013-10-09 08:32:27

标签: sql sparql dbpedia

我正在使用此dbpedia querydbpedia获取博物馆:

SELECT DISTINCT ?Museum
  (SAMPLE(?name) as ?name)
  (SAMPLE(?abstract) as ?abstract)
  (SAMPLE(?thumbnail) as ?thumbnail)
  (MAX(?latitude) as ?latitude)
  (MAX(?longitude) as ?longitude)
  (SAMPLE(?photoCollection) as ?photoCollection)
  (SAMPLE(?website) as ?website)
  (SAMPLE(?homepage) as ?homepage)
  (SAMPLE(?wikilink) as ?wikilink)
WHERE { 
  ?Museum a dbpedia-owl:Museum ; 
          dbpprop:name ?name ; 
          dbpedia-owl:abstract ?abstract ; 
          dbpedia-owl:thumbnail ?thumbnail ; 
          geo:lat ?latitude ;  
          geo:long ?longitude ; 
          dbpprop:hasPhotoCollection ?photoCollection ;
          dbpprop:website ?website ; 
          foaf:homepage ?homepage ; 
          foaf:isPrimaryTopicOf ?wikilink .
  FILTER(langMatches(lang(?abstract),"EN")) 
  FILTER (langMatches(lang(?name),"EN"))
}
GROUP BY ?Museum
LIMIT 20

我的目标是包含每个返回记录的Continent。我可以选择Country,但这不是必需的。

每个返回的Museum对象都有dbpedia-owl:location条目,但它们不一定具有国家/地区。此外,它有多个值,因此它们没用。

有没有办法从纬度(geo:lat)和经度(geo:long)获取大陆值?

或者我是否需要另一个查询(或子查询)来获取此数据?

更新

我最近看到了几个选项。 首先 - 如果满足国家要求,大陆很容易实现 - 我可以将映射嵌入到我的客户端代码中。

第二 - 有许多(非dbpedia,非sparql)方法可以实现我想要的,例如thisthisthis。我提到的最后两个是从本地数据库查找中获取国家/地区值的方法。

但查询网络服务或拥有3 MB以上的数据库 - 从coords获取大陆/国家价值都有点过分,而且考虑到dbpedia对象的巨大性质,我发现很容易相信它存在于某个地方。这就是我要寻找的解决方案。

1 个答案:

答案 0 :(得分:1)

由于以下原因,单凭DBpedia无法做到这一点:

  • 它没有一致的指定位置的方式。例如,我找到了5341 dbo:Museum但只有4931有dbo:location

select count(*) { ?x a dbo:Museum. filter exists {?x dbo:location []} }

  • 它没有一致的场所层次结构。例如,没有声明保加利亚和法国在欧洲(有一个类别European_Union和YAGO类型的效果相同,但那是不同的)
  • 没有区域信息,我不确定DBpedia端点是否具有GeoSPARQL索引

此外,DBpedia信息非常不完整,因为:

  • 它依赖于使用信息框博物馆的人。
  • 它只有英文维基百科的数据

相比之下,维基达塔知道大约23528个博物馆:点击https://tools.wmflabs.org/sqid/#/view?id=Q33506 并等待几秒钟直到获取统计数据。 23528是此类(博物馆)及其126个直接和间接子类(例如军事博物馆)的唯一实例总数