sparql 选择 wikidata group_by 和 concat
Posted
技术标签:
【中文标题】sparql 选择 wikidata group_by 和 concat【英文标题】:sparql select wikidata group_by and concat 【发布时间】:2022-01-14 05:40:23 【问题描述】:我想提取一个球员列表和一个它参加过的俱乐部的列表,用逗号分隔。
SELECT DISTINCT ?playerLabel
(GROUP_CONCAT(?teamLabel ; separator=',') as ?teams)
WHERE
?player wdt:P106 wd:Q937857 .
?player wdt:P2574 ?team
SERVICE wikibase:label bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en".
GROUP BY ?playerLabel
我有两个问题:
-
我没有得到每个球员的球队列表,只有名字和变量 ?teams 为空。
如果我不使用 GROUP CONCAT 和 GROUP BY,我会获取团队 ID,但我更喜欢团队标签。
例如 2 个玩家...:
playerLabel teams
Cristiano Ronaldo Sporting Portugal, Manchester U, Real Madrid, Juventus, Manchester U
Leo Messi Barcelona, PSG
至少我需要 Concat 和 group by,即使有代码...... 谢谢
【问题讨论】:
【参考方案1】:您使用P2574,即“National-Football-Teams.com 球员 ID”。虽然 National-Football-Teams.com 列出了一名球员效力的所有球队,但无法通过 Wikidata 查询服务访问此数据。但是 Wikidata 本身为运动队成员提供了一个专用属性:P54。
所以写?player wdt:P54 ?team
而不是?player wdt:P2574 ?team
。
另外,您需要添加?team rdfs:label ?teamLabel . filter (lang(?teamLabel)='en')
才能在GROUP_CONCAT() 中使用?teamLabel
。
因此,完整的工作查询如下所示(仅限美国玩家以避免查询超时):
SELECT DISTINCT ?playerLabel (GROUP_CONCAT(?teamLabel ; separator=',') as ?teams)
WHERE
?player wdt:P106 wd:Q937857 .
?player wdt:P27 wd:Q30 .
?player wdt:P54 ?team .
?team rdfs:label ?teamLabel . filter (lang(?teamLabel)='en')
SERVICE wikibase:label bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en".
GROUP BY ?playerLabel
【讨论】:
以上是关于sparql 选择 wikidata group_by 和 concat的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Wikidata 上创建一个 SPARQL 查询,以获取所有具有 Project Gutenberg 电子书 ID 的书籍?