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

Properties SPARQL问题:如何从Wikidata返回属性标签和关联的日期限定符,properties,sparql,wikidata,qualifiers,Properties,Sparql,Wikidata,Qualifiers,我试图返回一组曾担任政治职务的人(爱丁堡大学校友)的结果。我想返回所担任职务的名称标签,以及每个职务的开始和结束日期,许多人担任多个职务。如果这个人只担任一个职位,我似乎能够做到这一点或那一点,或者说我能够做到这一点,但在担任多个职位的情况下,我却无法将这两个职位结合起来 下面是我当前的查询版本。这将为我提供开始和结束日期,但如果政治办公室(如英国[x]议会议员)officeLabel返回的值如下:statement/Q46688868-E3734C7D-40F0-4D4A-8208-E3D6B

我试图返回一组曾担任政治职务的人(爱丁堡大学校友)的结果。我想返回所担任职务的名称标签,以及每个职务的开始和结束日期,许多人担任多个职务。如果这个人只担任一个职位,我似乎能够做到这一点或那一点,或者说我能够做到这一点,但在担任多个职位的情况下,我却无法将这两个职位结合起来

下面是我当前的查询版本。这将为我提供开始和结束日期,但如果政治办公室(如英国[x]议会议员)officeLabel返回的值如下:
statement/Q46688868-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

是的,我还是会被绊倒,而且我也会

图解 作者:Michael F.Schönitzer-自己的工作,基于文件:Rdf mapping.svg,CC 到4.0

从“项目”进入“
p:
route”后,需要“
ps:
route”返回“简单值”

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

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

为了避免与变量名混淆,语句本身应该是
?office
是的,没问题。我的意思是,之前的查询已经是正确的,而且变量的名称在定义上没有任何意义。也可以是
?var1、?var2、…
这更能帮助理解查询响应。有时使用会说话的名字是有目的的。谢谢更新查询。谢谢大家,这正是我想要的。到目前为止,除了在Wikidata中编写相当简单的查询之外,我还没有写过任何东西,所以我了解了属性是如何工作的。限定符和语句前缀的工作确实非常有用。