如何使用Wikidata SPARQL查询服务访问子属性?

时间:2019-09-01 07:18:53

标签: sparql wikidata

我想访问wikidata实体的子属性。一个示例可能是属性P1033,它是P4952之类的实体的Q49546的子级。如何在SPARQL查询中动态地做到这一点?

使用在线Wikidata Query Service提供的查询构建器,我可以构造一个简单的query,该web-result适用于常规属性(在链接的示例中为mass),但不适用于所需的子属性(在链接的示例中:健康危害的NPFA代码),即使它们在Regex demo中已明确设置,也最终为空。旁注:这是与第一段不同的示例。

所需的目标是动态查询,如下所示:

SELECT ?p ?item ?itemDescription ?prop ?value ?valueLabel ?itemLabel ?itemAltLabel ?propLabel WHERE {
  BIND(wd:Q138809 AS ?item)
  ?prop wikibase:directClaim ?p.
  #?item ?p ?value.
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en".
    ?value rdfs:label ?valueLabel.
    ?prop rdfs:label ?propLabel.
    ?item rdfs:label ?itemLabel;
      skos:altLabel ?itemAltLabel;
      schema:description ?itemDescription.
  }
}
ORDER BY DESC(?prop)
LIMIT 10

以第4行作为注释,我可以根据需要获取propLabel,但没有价值;反过来,这行不作为注释,我确实只获得了在第一级设置的属性,而没有获得子属性。

1 个答案:

答案 0 :(得分:1)

感谢@AKSW,我在此发布解决我的问题的最终查询:

SELECT ?item ?itemLabel ?itemDescription ?itemAltLabel ?prop ?propertyLabel ?propertyValue ?propertyValueLabel ?qualifier ?qualifierLabel ?qualifierValue 
        { 
            VALUES (?item) {(wd:Q138809)}
            ?item ?prop ?statement . 
            ?statement ?ps ?propertyValue . 
            ?property wikibase:claim ?prop . 
            ?property wikibase:statementProperty ?ps . 
            OPTIONAL { ?statement ?pq ?qualifierValue . ?qualifier wikibase:qualifier ?pq . } 
            SERVICE wikibase:label { bd:serviceParam wikibase:language "en" } 
}

对我来说,关键的一步是了解子属性实际上称为qualifiers