2012-03-28 106 views
3

我确定我想要做的事很容易,但我似乎无法得到正确的查询。我在数据集中记录具有诸如城市名称的值的记录,例如'纽约'和相应的国家代码,例如'美国'。我也可以访问完整的国家名称和国家ISO代码。dbpedia SPARQL查询获得给定城市的特定值

我想获得人口和抽象价值的这些城市离DBpedia中,通过使用where子句,如:

Get population where name = "New York" and isoCountryCode = "US" 

我搜索了这个求助无果。

到目前为止,我已经好心的@rohk与此查询,它不完全为所有地点的工作帮助:纽约

SELECT DISTINCT ?city ?abstract ?pop 
WHERE { 
    ?city rdf:type schema:City ; 
    rdfs:label ?label ; 
    dbpedia-owl:abstract ?abstract ; 
    dbpedia-owl:country ?country ; 
    dbpedia-owl:populationTotal ?pop . 
    ?country dbpprop:countryCode "USA"@en . 
    FILTER (lang(?abstract) = 'en' and regex(?label, "New York City")) 
} 

上述工作,但是当我将其更改为:

SELECT DISTINCT ?city ?abstract ?pop 
WHERE { 
    ?city rdf:type schema:City ; 
     rdfs:label ?label ; 
     dbpedia-owl:abstract ?abstract ; 
     dbpedia-owl:country ?country ; 
     dbpedia-owl:populationTotal ?pop . 
    ?country dbpprop:countryCode "THA"@en . 
    FILTER (lang(?abstract) = 'en' and regex(?label, "Bangkok")) 
} 

它不返回泰国曼谷的结果。

我只是不能得到正确的SPARQL查询,我敢肯定我是愚蠢的与我的查询。如果任何一位大师能够提供帮助,我会很感激。谢谢!

回答

2

此查询工作

SELECT DISTINCT * 
WHERE { 
    ?city rdf:type schema:City ; 
     rdfs:label ?label ; 
     dbpedia-owl:abstract ?abstract ; 
     dbpedia-owl:country ?country ; 
     dbpprop:website ?website ; 
     dbpedia-owl:populationTotal ?pop . 
    ?country dbpprop:countryCode "USA"@en . 
    FILTER (lang(?abstract) = 'en' and regex(?label, "New York City")) 
} 

编辑:曼谷,有2个问题:泰国

  • 没有一个国家代码:你可以使用rdfs:label "Thailand"@en代替。
  • 曼谷的rdf:type不是schema:Citydbpedia-owl:Settlement

这里是曼谷

SELECT DISTINCT * 
WHERE { 
    ?city rdf:type dbpedia-owl:Settlement ; 
     rdfs:label "Bangkok"@en ; 
     dbpedia-owl:abstract ?abstract ; 
     dbpedia-owl:populationTotal ?pop ; 
     dbpedia-owl:country ?country ; 
     dbpprop:website ?website . 
    ?country rdfs:label "Thailand"@en . 
    FILTER (lang(?abstract) = 'en') 
} 
+0

嗨,谢谢!如下所述,这似乎返回的是国家的细节而不是城市的细节,是否有任何方法可以指定地点类型必须是城市或城镇,而不是州或国家?再次感谢。 – Paul 2012-03-28 10:33:10

+0

对,我编辑了我的答案 – 2012-03-28 10:38:10

+0

删除了我的意见并更新了实际问题和进度报告,谢谢! – Paul 2012-03-28 13:11:45

4

工作查询我想你想是这样的:

SELECT * WHERE { 
    ?x rdfs:label "New York City"@en. 
    ?x dbpedia-owl:populationTotal ?pop. 
    ?x dbpedia-owl:abstract ?abstract. 
} 

,仅保留英文摘要,加一个FILTER

SELECT * WHERE { 
    ?x rdfs:label "New York City"@en. 
    ?x dbpedia-owl:populationTotal ?pop. 
    ?x dbpedia-owl:abstract ?abstract. 
    FILTER (LANG(?abstract) = 'en') 
} 

“纽约州”是州,它没有附上populationTotal附图。 “纽约市”就是这座城市。

+0

非常感谢,我希望有一种方法可以将地点类型指定为城市或城镇? – Paul 2012-03-28 10:33:50

+0

有多种方式,它们都不能完美工作,它取决于你想要过滤的东西的种类。检查'rdf:type','dcterms:subject'和'dbpprop:wikiPageUsesTemplate'属性的值,以便可靠地选择所需的实体。在你的查询中加入这样的一行可以工作:'?x rdf:type dbpedia-owl:City.' – cygri 2012-03-28 15:08:56

+0

谢谢。你正在帮助我学会不让你们发疯。 – Paul 2012-03-28 15:24:45