Rdf 使用SPARQL仅对一个值进行区分

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 .

我想用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 .
    ?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
,可能是相关问题-非常感谢,这正是我要找的!