我试图让所有城市都有一位女市长,但是我的问题是,大多数市长如果在数据中被标记为他们大多与人没有联系,他们只会以字符串形式给出。那么我该如何获得性别。
我要求所有市长的命令是:
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))
}
}
}
有谁想让所有城市都有女市长?我也很高兴受到一些刺激。
最佳答案
这是一个由于多个因素而引起的特殊问题。这里主要两个:
dbo:Settlement的尴尬属性结构:
Wikipedia模板信息框解决方案的信息框没有直接的领导者/市长属性。由于创建这些模板时并未考虑清楚的对象结构,因此领导者属性在此模板中被展平为:
| 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属性,而不是放下名称文字,而是指向相关资源(人)。不同的Infobox模板具有市长/领导者属性,但这是英语Wikipedia中最常用于描述城市的模板。
其次,DBpedia映射的行为非常僵化,在处理Infobox属性(可能是文字链接或资源链接)时遇到了问题。至少地图编辑者很难解决这个问题。 DBpedia现在通过引入RML mappings处理这个(以及其他问题)。
当然,这在其他dbo类中也可能以类似的方式出现。当DBpedia正在研究此类问题时,从Wikipedia模板到DBpedia本体的最新映射是解决此问题的一种方法,任何人都可以contribute这样做。
考虑到这一点,我们可以解决您的起源问题:
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
这似乎对我来说是正确的。