SPARQL问题:如何从Wikidata返回属性标签和关联的日期限定符

时间:2019-03-03 22:40:40

标签: properties sparql wikidata qualifiers

我正试图为一组曾担任政治职务的人(爱丁堡大学的校友)返回结果。我想返回所担任办公室的标题标签,以及每个办公室的开始日期和结束日期,其中许多人担任多个职位。如果一个人只担任一个职位,但我似乎可以任其任职,也可以使其工作。

我当前的查询版本如下。这将给我开始日期和结束日期,但是如果办公室是政治办公室(例如英国[x]国会议员),? officeLabel返回的值例如:statement/Q4668868-E3734C7D-40F0-4D4A-8208-E3D6B8C944CB

SELECT DISTINCT ?alumni ?fullName ?roleLabel ?officeLabel ?start ?end WHERE {
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
  ?alumni wdt:P69 wd:Q160302.
  ?alumni rdfs:label ?fullName.
  ?alumni wdt:P106 ?role.
  #Use Values to separate out politicians - Q82955
  VALUES (?role) {
    (wd:Q82955)
  }
  #Select only where position of office is stated but make dates optional
  ?alumni p:P39 ?office.
  OPTIONAL { ?office pq:P580 ?start. }
  OPTIONAL { ?office pq:P582 ?end. }
  FILTER(LANGMATCHES(LANG(?fullName), "en"))
  FILTER(NOT EXISTS { FILTER(LANGMATCHES(LANG(?fullName), "en-ca")) })
  FILTER(NOT EXISTS { FILTER(LANGMATCHES(LANG(?fullName), "en-gb")) })
}
ORDER BY ?fullName
LIMIT 10

1 个答案:

答案 0 :(得分:3)

是的,我还是被qualifiersWikidata Data Model绊倒了。

enter image description here

  

图由   作者:Michael F.Schönitzer-自己的作品,基于File:Rdf mapping.svg,CC   到4.0,https://commons.wikimedia.org/w/index.php?curid=63880194

从“项目”转到“ p:路线”后,您需要“ ps:路线”以返回“简单值”。

因此,使用它稍微修改您的查询会得到我认为想要的结果。

SELECT DISTINCT ?alumni ?fullName ?roleLabel ?officeLabel ?start ?end WHERE {
  ?alumni wdt:P69 wd:Q160302.
  ?alumni rdfs:label ?fullName.
  ?alumni wdt:P106 ?role.
  VALUES (?role) {
    (wd:Q82955)
  }
  ?alumni p:P39 ?officeStmnt.
  ?officeStmnt ps:P39 ?office.
  OPTIONAL { ?officeStmnt pq:P580 ?start. }
  OPTIONAL { ?officeStmnt pq:P582 ?end. }
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
  FILTER(LANGMATCHES(LANG(?fullName), "en"))
  FILTER(NOT EXISTS { FILTER(LANGMATCHES(LANG(?fullName), "en-ca")) })
  FILTER(NOT EXISTS { FILTER(LANGMATCHES(LANG(?fullName), "en-gb")) })
}
ORDER BY ?fullName
LIMIT 10

Link to query on Wikidata