我正在使用此dbpedia query从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)方法可以实现我想要的,例如this,this和this。我提到的最后两个是从本地数据库查找中获取国家/地区值的方法。
但查询网络服务或拥有3 MB以上的数据库 - 从coords获取大陆/国家价值都有点过分,而且考虑到dbpedia对象的巨大性质,我发现很容易相信它存在于某个地方。这就是我要寻找的解决方案。
答案 0 :(得分:1)
由于以下原因,单凭DBpedia无法做到这一点:
dbo:Museum
但只有4931有dbo:location
select count(*) {
?x a dbo:Museum.
filter exists {?x dbo:location []}
}
此外,DBpedia信息非常不完整,因为:
相比之下,维基达塔知道大约23528个博物馆:点击https://tools.wmflabs.org/sqid/#/view?id=Q33506 并等待几秒钟直到获取统计数据。 23528是此类(博物馆)及其126个直接和间接子类(例如军事博物馆)的唯一实例总数