使用 SPARQL 从一组项目中获取属性

Get properties from a group of items in with SPARQL

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

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

我在理解如何嵌套两个查询时遇到一些问题

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

SELECT ?item WHERE { ?项目 wdt:P31 wd:Q12136 。 }

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

SELECT 不同的 ?属性 ?属性 标签 在哪里 { ?属性 一个 wikibase:Property 。 服务 wikibase:label { bd:serviceParam wikibase:language "en" } } 按 ?属性 标签

排序

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

谢谢。

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

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

[try it]

注意 DISTINCT 关键字,用于 de-duplicate 属性。

但是要获得正确的 属性 标签(而不是像 http://www.wikidata.org/prop/P279 这样的 属性 URI),您需要使用 a slightly more complex query

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

[try it]

然后,要同时获取 属性 数据类型,您可以使用 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" }
}

[try it]