Rdf 使用SPARQL仅对一个值进行区分
我想用SPARQL检索意大利人口超过10万的城市列表,我使用以下查询:Rdf 使用SPARQL仅对一个值进行区分,rdf,sparql,dbpedia,linked-data,Rdf,Sparql,Dbpedia,Linked Data,我想用SPARQL检索意大利人口超过10万的城市列表,我使用以下查询: PREFIX dbo: <http://dbpedia.org/ontology/> SELECT ?city ?name ?pop WHERE { ?city a dbo:Settlement . ?city foaf:name ?name . ?city dbo:populationTotal ?pop . ?city dbo:country ?country .
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT ?city ?name ?pop WHERE {
?city a dbo:Settlement .
?city foaf:name ?name .
?city dbo:populationTotal ?pop .
?city dbo:country ?country .
?city dbo:country dbpedia:Italy .
FILTER (?pop > 100000)
}
前缀dbo:
选择?城市?名称?弹出窗口,其中{
?城市a dbo:定居点。
城市foaf:名称?名称。
?城市dbo:人口总数?pop。
城市dbo:国家?国家。
城市数据库:国家数据库:意大利。
过滤器(?pop>100000)
}
在我得到的结果中,例如在两个不同的行中(代表相同的实体,但名称不同):
“博洛尼亚”@en 384038
“博洛尼亚之歌”@en 384038
如何使用
仅在列?city
中选择DISTINCT
,但仍有其他列作为输出?您可以使用分组依据
按特定列分组,然后使用示例()
聚合从其他列中选择一个值,例如
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT ?city (SAMPLE(?name) AS ?cityName) (SAMPLE(?pop) AS ?cityPop)
WHERE
{
?city a dbo:Settlement .
?city foaf:name ?name .
?city dbo:populationTotal ?pop .
?city dbo:country ?country .
?city dbo:country dbpedia:Italy .
FILTER (?pop > 100000)
}
GROUP BY ?city
前缀dbo:
选择城市(样本(?名称)作为城市名称(样本(?pop)作为城市顶部)
哪里
{
?城市a dbo:定居点。
城市foaf:名称?名称。
?城市dbo:人口总数?pop。
城市dbo:国家?国家。
城市数据库:国家数据库:意大利。
过滤器(?pop>100000)
}
按城市分组
因此,通过在?city
上分组,每个城市只能得到一行,因为您已按?city
分组,因此无法直接选择非分组变量的变量
您必须改为使用
SAMPLE()
aggregate为希望在最终结果中包含的每个非组变量选择一个值。这将选择?name
和?pop
的其中一个值,分别返回为?cityName
和?cityPop
,可能是相关问题-非常感谢,这正是我要找的!