从 dbpedia 或 LinkedGeoData 中提取城市数据

Posted

技术标签:

【中文标题】从 dbpedia 或 LinkedGeoData 中提取城市数据【英文标题】:extract city data from dbpedia or LinkedGeoData 【发布时间】:2012-10-10 14:17:12 【问题描述】:

我现在正在尝试几个小时来弄清楚如何从 dbpedia 或 LinkedGeoData 中获取各种信息。 我使用了这个界面(http://dbpedia.org/snorql)并尝试了不同的方法,但我从来没有得到我需要的结果。

如果我使用这样的东西:

SELECT * WHERE 
?subject rdf:type <http://dbpedia.org/ontology/City>.
    OPTIONAL 
        ?subject <http://dbpedia.org/ontology/populationTotal> ?populationTotal.
    
    OPTIONAL 
        ?subject <http://dbpedia.org/ontology/populationUrban> ?populationUrban.
    
    OPTIONAL 
        ?subject <http://dbpedia.org/ontology/areaTotal> ?areaTotal.
    
    OPTIONAL 
        ?subject <http://dbpedia.org/ontology/populationUrbanDensity> ?populationUrbanDensity.
    
    OPTIONAL 
        ?subject <http://dbpedia.org/ontology/isPartOf> ?isPartOf.
    
    OPTIONAL 
        ?subject <http://dbpedia.org/ontology/country> ?country.
    
    OPTIONAL 
        ?subject <http://dbpedia.org/ontology/utcOffset> ?utcOffset.
    
    OPTIONAL 
        ?subject <http://dbpedia.org/property/janHighC> ?utcOffset.
    
    OPTIONAL 
        ?subject <http://dbpedia.org/property/janLowC> ?utcOffset.
    

LIMIT 20

我已经用完了。

我也试过这个:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT *  WHERE 
  ?subject rdf:type <http://dbpedia.org/ontology/City>.
  ?subject rdfs:label ?label.
FILTER ( lang(?label) = 'en'

LIMIT 100

但这给了我一个错误,我不明白。如果我删除过滤器,它可以工作,但给我所有语言的标签......

我正在寻找的是这样的http://dbpedia.org/page/Vancouver 但不是所有数据,而是其中一些数据,如人口、面积、国家、海拔、纬度、经度、时区、label@en、abstract@en 等。

有人可以帮我找到有效的语法吗?

感谢大家的帮助。


更新:

到目前为止,我可以使用它:

SELECT DISTINCT *
WHERE 
   ?city rdf:type dbpedia-owl:Settlement ;
         rdfs:label ?label;
         dbpedia-owl:abstract ?abstract ;
         dbpedia-owl:populationTotal ?pop ;
         dbpedia-owl:country ?country ;
         dbpprop:website ?website .
   FILTER ( lang(?abstract) = 'en' && lang(?label) = 'en')

LIMIT 20

但如果我想获得所有定居点,仍然会超出限制。顺便提一句。有没有办法将所有城市和定居点放在一张桌子上?

【问题讨论】:

【参考方案1】:

“超出限制”是指错误“Bandwidth Limit Exceeded URI = '/!sparql/'”吗?我猜这是 dbpedia 设置的限制,以确保它不会被需要“永远”运行的查询淹没,如果是这样,那么您可能无能为力。您可以使用 OFFSET、LIMIT 和 ORDER BY 以块的形式请求数据,请参阅http://www.w3.org/TR/rdf-sparql-query/#modOffset。

更新:是的,这似乎是要走的路:http://www.mail-archive.com/dbpedia-discussion@lists.sourceforge.net/msg03368.html

在第二个查询中,错误是缺少括号。这个

FILTER ( lang(?label) = 'en'

应该是

FILTER ( lang(?label) = 'en')

对于您的最后一个问题,在一个查询/表中收集多个事物/(类似查询)的一种自然方法是使用 UNION,例如,

SELECT ?x
WHERE 
   ?x rdf:type dbpedia-owl:City 
UNION
   ?x rdf:type dbpedia-owl:Settlement 

【讨论】:

以上是关于从 dbpedia 或 LinkedGeoData 中提取城市数据的主要内容,如果未能解决你的问题,请参考以下文章

从哪里获取有关所有欧洲城市、村庄的数据?

DBpedia Introduction

我正在尝试获取所有拥有超过 3 篇作品的作者的列表 - DBpedia Sparql

DBpedia SPARQL 查询 ID3 标签的歌曲信息

如何在DBPedia中获取一个城市的POI及其所在国家的经纬度?

DBpedia过时的数据