如何从wikidata检索别名

时间:2016-11-14 16:29:17

标签: sparql wikidata

我试图从维基数据中检索一些信息,我发现有趣的是收集声音的别名。例如,Francesco Totti也被称为il Capitano或er Pupone: wikidata of Francesco Totti

我试图通过此sparql查询检索所有系列足球运动员:

SELECT ?subject ?nomeLabel ?cognomeLabel ?subjectLabel WHERE {
  ?subject wdt:P31 wd:Q5.

  ?subject p:P54 ?team .
  ?team ps:P54 wd:""" + team_code +""" .
  FILTER NOT EXISTS { ?team pq:P582 ?end
    }
OPTIONAL{
  ?subject wdt:P735 ?nome .
  ?subject wdt:P734 ?cognome .
  }
  SERVICE wikibase:label { bd:serviceParam wikibase:language "it". }
}
ORDER BY (?cognomeLabel)

如何修改我的查询以获取别名? 感谢

3 个答案:

答案 0 :(得分:8)

我尝试过使用各种标签的查询。这里仅适合罗马人:

SELECT distinct ?subject ?subjectLabel ?nomeLabel ?cognomeLabel ?nickname ?alternative ?subjectAltLabel WHERE {
  ?subject wdt:P31 wd:Q5.
  ?subject p:P54 ?team .
  ?team ps:P54 wd:Q2739 .
  FILTER NOT EXISTS { ?team pq:P582 ?end . }
  OPTIONAL { ?subject wdt:P735 ?nome . }
  OPTIONAL { ?subject wdt:P734 ?cognome . }
  OPTIONAL { ?subject wdt:P1449 ?nickname . }
  OPTIONAL { ?subject skos:altLabel ?alternative . }
  SERVICE wikibase:label { bd:serviceParam wikibase:language "it,en,fr". }
}
ORDER BY (?cognomeLabel) 

我认为P1449属性应该是存储别名/昵称的最合适的属性,但对于足球运动员来说似乎没有那么多。我刚刚给Francesco Totti添加了“il Capitano”。除此之外,罗马球员似乎没有其他绰号。

“也称为”标签(在右栏中)不一定是昵称,但可能是拼写版本。

答案 1 :(得分:3)

如果有人对只返回英语also known as的所有属性感兴趣,那就更通用了:

SELECT ?property ?propertyLabel ?propertyDescription (GROUP_CONCAT(DISTINCT(?altLabel); separator = ", ") AS ?altLabel_list) WHERE {
    ?property a wikibase:Property .
    OPTIONAL { ?property skos:altLabel ?altLabel . FILTER (lang(?altLabel) = "en") }
    SERVICE wikibase:label { bd:serviceParam wikibase:language "en" .}
 }
GROUP BY ?property ?propertyLabel ?propertyDescription
LIMIT 5000

答案 2 :(得分:1)

另一个具有 itemAltLabel 的男性演员的简单示例:

#Male Actors
SELECT ?item ?itemLabel ?itemAltLabel
WHERE 
{
    ?item wdt:P21 wd:Q6581097.
  ?item wdt:P106 wd:Q33999.
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}