我有以下查询,即我在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" }
} 我发现质量值在中给出了一个特定的 单元,在地球的情况下。我怎样才能访问这些信息?
我试着添加这样的东西:
?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.我想象我需要使用,不是属性本身,而是它的一个实例,具体连接地球和描述其质量的整数。
如何访问单位信息?(就地球而言,约塔格拉姆)
发布于 2016-04-17 18:49:48
MediaWiki.org页面https://www.mediawiki.org/wiki/Wikibase/Indexing/RDF_Dump_Format描述了维基数据是如何用RDF (因此用SPARQL)表示的。
相关的部分是,在您的示例中,wdt:P2067直接给出了值,但是如果您使用p:P2067,则会得到整个语句。从这里,您可以使用psv:P2067获取一个值节点。从这里,您可以使用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-13 03:42:35
RDF文本由XSD数据类型键入,SPARQL的datatype()可用于查找类型。因此,在您的SELECT语句中尝试使用以下方法来查找?mass的类型
SELECT ?objectLabel ?mass (datatype(?mass) AS ?masstype)
....https://stackoverflow.com/questions/36585152
复制相似问题