【问题标题】:Get properties from a group of items in with SPARQL使用 SPARQL 从一组项目中获取属性
【发布时间】:2017-02-06 19:57:09
【问题描述】:

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

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

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

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

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

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

SELECT DISTINCT ?property ?propertyLabel 在哪里 { ?property 一个wikibase:Property。 服务 wikibase:label { bd:serviceParam wikibase:language "en" } } ORDER BY ?propertyLabel

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

谢谢。

【问题讨论】:

  • 为什么不简单地将属性绑定到表示所有疾病的?item 变量? ?item wdt:P31 wd:Q12136 . ?item ?p ?o .

标签: properties nested sparql wikidata-query-service


【解决方案1】:

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

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

[try it]

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

但是要获得正确的属性标签(而不是像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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    相关资源
    最近更新 更多