1

我正在使用这个dbpedia 查询从以下位置获取博物馆dbpedia

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。我提到的最后两个是从本地数据库查找中获取国家/地区价值的方法。

但是查询 web 服务或拥有 3+ MB 的数据库 - 从坐标中获取大陆/国家/地区值都有点矫枉过正,并且考虑到 dbpedia 对象的巨大性质,我发现很容易相信它存在于某个地方。这就是我正在寻找的解决方案。

4

1 回答 1

2

由于以下原因,仅在 DBpedia 中无法做到这一点:

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

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

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

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

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

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

于 2017-01-25T07:58:18.907 回答