如何通过SPARQL从DBpedia获取海拔最高的前十座山脉?
获取DBpedia上海拔最高的前十座山脉的SPARQL方案
嘿,别着急!你在珠穆朗玛峰页面没找到elevation或altitude属性是因为DBpedia对山脉海拔的标注用的是其他属性——主要是dbo:height(来自DBpedia本体),部分条目也会用dbp:elevation(DBpedia属性)。页面展示的属性可能不全,直接用SPARQL查询就能精准获取数据。
这里给你一个可以直接运行的SPARQL查询,能帮你拿到海拔最高的前十座山脉:
SELECT ?mountain ?name ?elevation WHERE { ?mountain a dbo:Mountain . ?mountain rdfs:label ?name . ?mountain dbo:height ?elevation . FILTER(LANG(?name) = "en") FILTER(isNumeric(?elevation)) } ORDER BY DESC(?elevation) LIMIT 10
如果有些山脉条目用的是dbp:elevation而不是dbo:height,可以用COALESCE函数兼容两种属性,查询会更全面:
SELECT ?mountain ?name ?elevation WHERE { ?mountain a dbo:Mountain . ?mountain rdfs:label ?name . OPTIONAL { ?mountain dbo:height ?h } OPTIONAL { ?mountain dbp:elevation ?e } BIND(COALESCE(?h, ?e) AS ?elevation) FILTER(LANG(?name) = "en") FILTER(isNumeric(?elevation)) } ORDER BY DESC(?elevation) LIMIT 10
对查询的简单解释:
?mountain a dbo:Mountain:筛选出所有被归类为山脉的资源?mountain rdfs:label ?name:获取山脉的英文名称(通过FILTER(LANG(?name) = "en")限定)COALESCE(?h, ?e):优先取dbo:height的值,如果没有就用dbp:elevation,确保不会漏掉数据ORDER BY DESC(?elevation):按海拔从高到低排序LIMIT 10:只返回前10条结果
你可以把这段代码复制到DBpedia的SPARQL端点页面执行,就能得到想要的列表啦!
内容的提问来源于stack exchange,提问作者mcfly soft
相关产品推荐
相关产品推荐

