我需要使用维基数据中的SPARQL查询服务。
我需要检索的是所有属性的列表,这些属性是(P31)疾病(Q12136)的实例
我在理解如何嵌套两个查询方面遇到了一些麻烦
使用此查询,我们拥有所有疾病实例:
SELECT?item WHERE { ?item wdt:P31 wd:Q12136。 }
然后这是属性列表,但不是在整个站点中搜索,而是我必须在上一句中获得的子组中搜索
SELECT DISTINCT?property?propertyLabel 哪里 { ?属性wikibase:属性。 SERVICE wikibase:label {bd:serviceParam wikibase:language" en" } } ORDER BY?propertyLabel
嵌套两个查询的正确方法是什么?此外,您也可以检索属性的类型吗?
感谢。
答案 0 :(得分:2)
这两个查询的合并可能类似于:
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]