如何使用 SPARQL 从 Wikidata 获取值的单位?

How do I get the unit of a value from Wikidata using SPARQL?

我是 SPARQL 的新手,我想从维基数据中获取化学物质的沸点。但是,当我以乙醇为例尝试 this query 时,我得到两个数字,一个是华氏度的沸点,另一个是摄氏度的沸点,但无法分辨哪个是哪个。

理想情况下,我只想过滤到 return 摄氏度值,但如果我能得到每个值的单位,然后我可以稍后将其整理出来,我也会很高兴(那是到目前为止我已经尝试过,作为第一步)。

我试过这个:

SELECT 
  ?temperature ?temperatureLabel ?unitLabel

WHERE {
  wd:Q153 p:P2102 ?statement.
  ?statement ps:P2102 [
    wikibase:quantityAmount ?temperature;
    wikibase:quantityUnit ?unit;
  ].
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

还有这个:

SELECT 
  ?temperature ?temperatureLabel ?unitLabel

WHERE {
  wd:Q153 p:P2102 ?statement.
  ?statement ps:P2102 ?temperature.
  ?temperature wikibase:quantityUnit ?unit.
  
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

...除其他事项外,但未收到匹配结果。几个小时以来,我一直在用头撞墙,非常感谢任何帮助。

ps: 将语句链接到简单值。对于数量,这意味着没有单位、下限和上限的值。

要获取单位,您首先需要使用 psv: 从语句访问值节点。从值节点中,您可以使用 wikibase:quantityUnitwikibase:quantityAmount.

获取单位和金额
SELECT ?temperature ?unitLabel WHERE {
  wd:Q153 p:P2102 ?statement . 
  ?statement psv:P2102 ?valuenode.
  ?valuenode wikibase:quantityAmount ?temperature.
  ?valuenode wikibase:quantityUnit ?unit.
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}