0

我是 SPARQL 的新手,我正在尝试从 Wikidata 获取化学物质的沸点。然而,当我以乙醇为例尝试这个查询时,我得到两个数字,一个是华氏沸点,另一个是摄氏度,但无法分辨哪个是哪个。

理想情况下,我希望过滤以仅返回摄氏度值,但如果我可以获取每个值的单位然后我可以稍后对其进行整理(这是我迄今为止尝试过的,因为第一步)。

我试过这个:

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". }
}

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

4

1 回答 1

1

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

要获取单位,您首先需要从带有 的语句中访问值节点psv:。然后,您可以从 value 节点获取单位和金额 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". }
}
于 2021-09-13T17:17:43.330 回答