过滤维基数据中500米以上的摩天大楼摩天大楼、基数

由网友(不爱几个人渣怎知货比三家)分享简介:我尝试构造一个SPARQL查询,其中我得到一个高度超过500米的摩天大楼列表。我意识到,物业高度(P2048)是以不同的单位(米、英尺、厘米)来测量的。将不同的单位计算成米对我来说不是问题。但我的问题是,这个单位是用来计算物业高度的。所以我的问题是:如何获得物业高度的单位?我到目前为止的查询,其中?unit只是空的:S...

我尝试构造一个SPARQL查询,其中我得到一个高度超过500米的摩天大楼列表。

我意识到,物业高度(P2048)是以不同的单位(米、英尺、厘米)来测量的。将不同的单位计算成米对我来说不是问题。

中国摩天大楼和豆腐渣工程都在刷新纪录,人身财产安全如何保障

但我的问题是,这个单位是用来计算物业高度的。

所以我的问题是:如何获得物业高度的单位?

我到目前为止的查询,其中?unit只是空的:

SELECT ?skyscraper ?skyscraperLabel ?height ?unit WHERE {
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
  ?skyscraper wdt:P31 wd:Q11303.
  ?skyscraper wdt:P2048 ?height.
  FILTER(?height > 500)
  OPTIONAL { ?skyscraper wdt:P2876 ?unit. }
}
LIMIT 100

Try it here

推荐答案

若要获取设备本身,请使用:P2048/psv:P2048/wikibase:quantityUnit

SELECT ?skyscraper ?skyscraperLabel ?height ?unit ?unitLabel WHERE {
  ?skyscraper wdt:P31 wd:Q11303.
  ?skyscraper p:P2048/psv:P2048 ?vn.
  ?vn wikibase:quantityAmount ?height.
  ?vn wikibase:quantityUnit ?unit.  
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}
LIMIT 100

Try it here

然而,在AKSW和Stanislav Kralin的上述评论之后,最好使用psn:前缀:p:P2048/psn:P2048/wikibase:quantityAmount

SELECT ?skyscraper ?skyscraperLabel ?height WHERE {
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
  ?skyscraper wdt:P31 wd:Q11303.
  ?skyscraper p:P2048/psn:P2048/wikibase:quantityAmount ?height.
  FILTER(?height >= 500)
}
ORDER BY DESC(?height)
LIMIT 1000

Try this here

由于某些建筑物包含多个高度值(例如,One World Trade Center同时具有architectural height (Q24192182)和height to pinnacle (Q26970842)值),因此需要进行一些聚合才能在SPARQL:

中为每个建筑物检索一个值
SELECT ?skyscraper ?skyscraperLabel (MAX(?h) AS ?height) WHERE {
  ?skyscraper wdt:P31 wd:Q11303.
  ?skyscraper p:P2048/psn:P2048/wikibase:quantityAmount ?h.
  FILTER(?h >= 500)
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}
GROUP BY ?skyscraper ?skyscraperLabel
ORDER BY DESC(?height)
LIMIT 1000

Try it here

阅读全文

相关推荐

最新文章