SPARQL:与女市长一起获得最大城市

SPARQL:与女市长一起获得最大城市,sparql,dbpedia,Sparql,Dbpedia,我试图让所有城市都有一位女性市长,但我的问题是,大多数市长如果在数据中被标记,他们大多与一个人没有联系,他们只作为字符串给出。那我怎么才能知道性别呢 我命令所有市长: SELECT * WHERE { ?city a dbo:City . ?city dbo:populationTotal ?pop . ?city (dbp:mayor | dbo:mayor | dbp:leader |dbo:leader) ?mayor } ORDER BY DESC(?pop) 我不确定我是否得

我试图让所有城市都有一位女性市长,但我的问题是,大多数市长如果在数据中被标记,他们大多与一个人没有联系,他们只作为字符串给出。那我怎么才能知道性别呢

我命令所有市长:

SELECT * WHERE {
 ?city a dbo:City .
 ?city dbo:populationTotal ?pop .
 ?city (dbp:mayor | dbo:mayor | dbp:leader |dbo:leader) ?mayor

}
ORDER BY DESC(?pop)
我不确定我是否得到了所有市长,因为只有500名市长,而给定人口的19584个城市听起来更少

由于我没有通过这种方式获取性别信息,所以我再次请求在DBpedia中获取所有女性,并尝试比较这两个结果,但大部分结果都以超时或“无结果”结束

在超时情况下运行的命令示例为:

SELECT ?name ?sayor WHERE {
 ?person a dbo:Person .
 ?person foaf:gender ?gender .
 FILTER regex(?gender, "^female$", "i") .
 ?person rdfs:label ?name .
 {
  SELECT str(?mayor) AS ?sayor WHERE {
   ?city a dbo:City .
   ?city (dbp:mayor | dbp:leader) ?mayor .
   FILTER (str(?mayor) = str(?name))
  }
 }
}

有没有人有办法让所有城市都有女市长?我也很高兴能得到一些刺激。

问题的一部分是,对于相当多的城市来说,DBPedia没有记录足够的信息来完成这项工作。如果我们查看原始查询的结果,结果如下所示:

city    pop     mayor
http://dbpedia.org/resource/Berlin  3610156 "Michael Müller"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#langString>
http://dbpedia.org/resource/Hamburg     1774242 http://dbpedia.org/resource/Olaf_Scholz
http://dbpedia.org/resource/Pekanbaru   1093416 "Prof. Dr. Andre Syahputra, M.Sc"^^<http://www.w3.org/1999/02/22-rdf-syntax-ns#langString>
不幸的是,这似乎只给出了2到3个结果——DBPedia上的性别信息非常稀少。您可以通过执行以下查询来验证情况是否属实:

SELECT * WHERE {
  ?city a dbo:City .
  ?city dbo:populationTotal ?pop .
  ?city (dbp:mayor | dbo:mayor | dbp:leader |dbo:leader) ?mayor .
  ?mayor foaf:gender ?gender
 }
 Order by DESC(?pop)

这会让你知道所有市长的性别。如你所见,结果只有8个左右(2个女性,6个男性)。

这是一个特殊的问题,由多种因素引起。这里主要有两个:

dbo的尴尬财产结构:结算: Wikipedia模板Infobox结算的Infobox没有直接的leader/mayor属性。由于创建这些模板时没有考虑清楚的对象结构,因此该模板中的引线特性将展平为:

| leader_title = [[Mayor of Chicago|Mayor]]
| leader_name = [[Rahm Emanuel]]
| leader_party = [[Democratic Party (United States)|D]]
| leader_title1 = [[City council|Council]]
| leader_name1 = [[Chicago City Council]]
这使得编辑没有实际选择权,只能“误用”leader_name属性,而不是写下名称文字,而是指向相关资源(人员)。不同的信息框模板具有mayor/leader属性,但这是英语维基百科中最常用于描述城市的模板

其次,DBpedia映射的行为非常严格,在处理Infobox属性(可能是文本或资源链接)时存在问题。至少地图编辑很难解决这个问题。DBpedia现在正通过引入

当然,这也可以以类似的方式出现在其他dbo类中。虽然DBpedia正在研究这些问题,但从Wikipedia模板到DBpedia本体的最新映射是解决这一问题的一种方法,这是任何人都可以做到的

考虑到这一点,我们可以解决您的原产地问题:

SELECT * WHERE {
   ?plebs rdfs:subClassOf dbo:Settlement.
   ?city a ?plebs .
   ?city (dbp:mayor | dbo:mayor | dbp:leader |dbo:leader | dbo:leaderName) ?mayor .
   ?mayor foaf:gender ?gender.
   ?city dbo:populationTotal ?pop .
   FILTER(str(?gender) = "female")
  }
ORDER BY DESC(?pop)
这导致了前三名:

http://dbpedia.org/resource/Tokyo   http://dbpedia.org/resource/Yuriko_Koike    
"female"@en    13617445
http://dbpedia.org/resource/Mumbai  http://dbpedia.org/resource/Snehal_Ambekar  
"female"@en    12442373
http://dbpedia.org/resource/Yuncheng    http://dbpedia.org/resource/Wang_Yuyan  
"female"@en    5134779

这对我来说似乎是正确的。

为什么不是一个选项?答案不错,但我不会称之为稀疏-DBpedia中约80%的人确实拥有性别数据,请参见@Jeen请参见下面的答案
http://dbpedia.org/resource/Tokyo   http://dbpedia.org/resource/Yuriko_Koike    
"female"@en    13617445
http://dbpedia.org/resource/Mumbai  http://dbpedia.org/resource/Snehal_Ambekar  
"female"@en    12442373
http://dbpedia.org/resource/Yuncheng    http://dbpedia.org/resource/Wang_Yuyan  
"female"@en    5134779