You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SPARQL从Wikidata筛选仅为欧洲议会议员的任职记录?

正确获取欧洲议会议员及任职元数据的SPARQL查询

我来帮你修正这个SPARQL查询问题,先说说你之前写法的问题,再给你正确的解决方案:

为什么你的修改后查询无结果?

你第二个查询里的?positionheld wdt:P31 wd:Q27169是错误的——Wikidata里wd:Q27169本身就是「欧洲议会议员」这个职位,它的类型(P31)是立法职位(wd:Q2285706),不是它自己。所以这个条件永远匹配不到任何结果,自然返回空。而且你之前的写法确实冗余,既然已经用?human wdt:P39 wd:Q27169限定了人员担任该职位,没必要再额外关联?positionheld。

正确的查询写法(含任职元数据)

如果你想获取议员的任职起始日期、所属政党等元数据,需要用到Wikidata的「声明(statement)」机制,因为这些信息是职位属性的限定词,不是直接的人员属性。下面是完整的查询:

SELECT ?human ?humanLabel ?startDate ?party ?partyLabel ?endDate
WHERE {
  # 匹配所有拥有「欧洲议会议员」职位声明的人员
  ?human p:P39 ?mepStatement .
  # 明确该声明对应的职位是欧洲议会议员(wd:Q27169)
  ?mepStatement ps:P39 wd:Q27169 .
  
  # 可选获取:任职起始日期(有些现任议员可能没有结束日期)
  OPTIONAL { ?mepStatement pq:P580 ?startDate } .
  # 可选获取:所属政党
  OPTIONAL { ?mepStatement pq:P102 ?party } .
  # 可选获取:任职结束日期
  OPTIONAL { ?mepStatement pq:P582 ?endDate } .
  
  # 自动获取多语言标签(优先当前语言,其次英文)
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" . }
}
ORDER BY ?humanLabel

关键部分解释:

  • p:P39:表示获取人员的「职位」属性的声明对象,而不是直接的属性值,这样才能访问该职位的所有限定信息。
  • ps:P39:声明对象中的职位值,这里指定为wd:Q27169(欧洲议会议员)。
  • pq:P580/pq:P102/pq:P582:分别是职位声明的「起始日期」「所属政党」「结束日期」限定词。
  • OPTIONAL:确保即使某些议员没有某类元数据(比如现任议员没有结束日期),也能返回结果,不会被过滤掉。

简化版(仅获取议员列表)

如果你只需要所有曾担任欧洲议会议员的人员列表,不需要元数据,写法更简单:

SELECT ?human ?humanLabel
WHERE {
  ?human wdt:P39 wd:Q27169 .
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" . }
}
ORDER BY ?humanLabel

这个查询直接匹配所有拥有「欧洲议会议员」职位的人员,不会返回其他职位信息。

内容的提问来源于stack exchange,提问作者Ottotos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 09:22:29