【问题标题】:sparql select wikidata group_by and concatsparql 选择 wikidata group_by 和 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

我有两个问题:

  1. 我没有得到每个球员的球队列表,只有名字和变量 ?teams 为空。
  2. 如果我不使用 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,即使有代码...... 谢谢

【问题讨论】:

    标签: group-by sparql group-concat wikidata


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多