我确信我想做的事情很简单,但我似乎无法正确查询。我在数据集中有记录,其中包含城市名称等值'纽约'及其相应的国家代码,例如'US'。我还可以访问完整的国家/地区名称和国家ISO代码。
我想通过使用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查询正确,我确信我对查询很愚蠢。如果有任何大师可以给我提供帮助,我会很感激。谢谢!
答案 0 :(得分: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
数字。 “纽约市”就是这个城市。
答案 1 :(得分: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"))
}
编辑:曼谷有两个问题:
rdfs:label "Thailand"@en
代替。rdf:type
不是schema:City
,而是dbpedia-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' )
}