5

我有以下查询,我在wikidata 查询服务 Web 界面上运行:

SELECT ?objectLabel ?mass
WHERE {
  ?object wdt:P397 wd:Q525.  # the object should have the sun as parent astronomical body
  ?object wdt:P31 ?status.
  ?object wdt:P2067 ?mass.

  # Here are the accepted object status
  VALUES ?status {wd:Q128207 wd:Q121750 wd:Q1319599}.  # terrestrial planet, gas giant, ice giant

  # automatically use the english label for ?xLabel variables 
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
} 

我发现质量以特定单位给出,如果是地球,则为 yottagram。我怎样才能访问这些信息?

我试图添加类似的东西:

?mass   wdt:P2237 ?mass_unit.

但是,不出所料,这不起作用,因为?mass它是一个整数,而不是一个引用地球质量的对象。使用属性本身作为主题也不起作用:

?object wdt:P2067 ?mass.
wd:P2067 wdt:P2237 ?massUnit.

将返回具有所有可用单位的所有元组。(地球与 5972.37 公斤、5972.37 约塔克、5972.37 个太阳质量等有关)

此外,链接属性不会导致结果

?object wdt:P2067/wdt:P2237 ?massUnit.

我想我需要使用的不是属性本身,而是它的一个实例,它专门链接地球和描述其质量的整数。

如何获取单位信息?(如果是地球,Yottagram

4

2 回答 2

5

MediaWiki.org 页面Wikibase/Indexing/RDF Dump Format描述了 Wikidata 如何在 RDF(以及因此在 SPARQL)中表示。

相关部分是,在您的情况下,wdt:P2067直接为您提供值,但如果您改为使用p:P2067,您将获得整个语句。从那里,您可以使用psv:P2067获取值 node。从那里,您可以wikibase:quantityAmount用来获取质量(就像您可以使用 一样wdt:P2067),但您也可以wikibase:quantityUnit用来获取代表单位的实体。

因此,整个查询可能如下所示:

SELECT ?objectLabel ?mass ?massUnitLabel
WHERE {
  ?object wdt:P397 wd:Q525.  # the object should have the sun as parent astronomical body
  ?object wdt:P31 ?status.

  ?object p:P2067/psv:P2067 ?massValue.
  ?massValue wikibase:quantityAmount ?mass.
  ?massValue wikibase:quantityUnit ?massUnit.

  # Here are the accepted object status
  VALUES ?status {wd:Q128207 wd:Q121750 wd:Q1319599}.  # terrestrial planet, gas giant, ice giant

  # automatically use the english label for ?xLabel variables 
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}

如果需要,可以?massValue使用以下代码消除变量:

?object p:P2067/psv:P2067 [
  wikibase:quantityAmount ?mass;
  wikibase:quantityUnit ?massUnit ] 
于 2016-04-17T18:49:48.670 回答
0

RDF 文字由 XSD 数据类型进行类型化,并且 SPARQLdatatype()可用于查找类型。所以在你的SELECT语句中试试这个来找到类型?mass

SELECT ?objectLabel ?mass (datatype(?mass) AS ?masstype)
....
于 2016-04-13T03:42:35.310 回答