0

我需要使用来自 Wikidata 的 SPARQL 查询服务。

我需要检索的是(P31)疾病(Q12136)实例的所有属性的列表

我在理解如何嵌套两个查询时遇到了一些麻烦

有了这个查询,我们就有了所有属于疾病实例的项目:

选择?项目在哪里{?项目 wdt:P31 wd:Q12136。}

然后这是属性列表,但不是在整个站点中搜索,我必须在上一句中获得的子组中搜索

SELECT DISTINCT ?property ?propertyLabel WHERE { ?property a wikibase:Property 。服务 wikibase:label { bd:serviceParam wikibase:language "en" } } ORDER BY ?propertyLabel

嵌套两个查询的正确方法是什么?另外,您也可以检索属性的类型吗?

谢谢。

4

1 回答 1

2

这两个查询的合并可能类似于:

SELECT DISTINCT ?property ?propertyLabel WHERE {
  ?item wdt:P31 wd:Q12136 .
  ?item ?property ?value .
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}

[试试看]

请注意DISTINCT用于删除重复属性的关键字。

但是要获得正确的属性标签(而不是像 一样的属性 URI http://www.wikidata.org/prop/P279),您需要使用稍微复杂一点的查询

SELECT DISTINCT ?property ?propLabel WHERE {
  ?item wdt:P31 wd:Q12136 .
  ?item ?property ?value .
  hint:Query hint:optimizer "None" .
  ?prop wikibase:directClaim ?property .
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}

[试试看]

然后,要获取属性数据类型,您可以使用wikibase:propertyType

SELECT DISTINCT ?property ?propLabel ?type WHERE {
  ?item wdt:P31 wd:Q12136 .
  ?item ?property ?value .
  # get the property label
  # see https://www.wikidata.org/wiki/Wikidata:SPARQL_query_service/queries#Adding_labels_for_properties
  hint:Query hint:optimizer "None" .
  ?prop wikibase:directClaim ?property .
  ?prop wikibase:propertyType ?type .
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}

[试试看]

于 2017-02-06T22:42:44.973 回答