alu*_*iak 5 sparql triplestore triples wikidata
我有以下查询,我在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" }
}
Run Code Online (Sandbox Code Playgroud)
我发现质量值以特定单位给出,在地球的情况下为 yottagram。我怎样才能访问这些信息?
我尝试添加如下内容:
?mass wdt:P2237 ?mass_unit.
Run Code Online (Sandbox Code Playgroud)
但是,按预期,这不起作用,因为它?mass
是一个整数,而不是引用地球质量的对象。使用属性本身作为主题也不起作用:
?object wdt:P2067 ?mass.
wd:P2067 wdt:P2237 ?massUnit.
Run Code Online (Sandbox Code Playgroud)
这将返回具有所有可用单位的所有元组。(地球与 5972.37 千克、5972.37 约克、5972.37 太阳质量等有关)
?object wdt:P2067/wdt:P2237 ?massUnit.
Run Code Online (Sandbox Code Playgroud)
我想我需要使用的不是属性本身,而是它的一个实例,它专门连接地球和描述其质量的整数。
如何获取单位信息?(在地球的情况下,Yottagram)
在 MediaWiki.org 页面Wikibase/Indexing/RDF Dump Format 中描述了维基数据如何在 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" }
}
Run Code Online (Sandbox Code Playgroud)
如果需要,可以?massValue
使用以下代码消除变量:
?object p:P2067/psv:P2067 [
wikibase:quantityAmount ?mass;
wikibase:quantityUnit ?massUnit ]
Run Code Online (Sandbox Code Playgroud)