在 Wikidata SPARQL 中,我如何 return 其他字段?

In Wikidata SPARQL, how can I return other fields?

在我的维基数据查询中,我实际上有 2 个问题。

  1. 未返回出生日期 + 性别 + 描述
  2. GROUP BY 不根据名称聚合(错误聚合错误)
SELECT ?person ?label ?dob ?gender ?description
WHERE
{
  ?person wdt:P31 wd:Q5;
          rdfs:label ?label.
  FILTER(STRSTARTS(?label, "Michael Bloom")).
}
GROUP BY ?person ?label
LIMIT 5

Try it here

  1. 您必须查询所有字段才能返回它们(SPARQL 无法猜测从哪里获得它们),使用 Wikibase 标签服务时标签和描述除外。
  2. SELECT 中的所有字段都必须在 GROUP BY 子句中,使用 GROUP_CONCAT 函数除外,它将所有值连接到一个字段中。
  3. 坏消息:除了维基数据查询服务中的确切标签外,很难通过其他方式搜索人员,因为您经常会遇到 60 秒的超时。如 AKSW 所示,一种解决方案是使用 Wikibase Mediawiki API 并进行实体搜索。

以下是重写的查询示例:

SELECT ?person ?personLabel ?personDescription (GROUP_CONCAT(DISTINCT ?dob ; SEPARATOR = ' / ') AS ?dob) (GROUP_CONCAT(DISTINCT ?gender ; SEPARATOR = ' / ') AS ?gender)
WHERE {
  SERVICE wikibase:mwapi {
    bd:serviceParam wikibase:api "EntitySearch" .
    bd:serviceParam wikibase:endpoint "www.wikidata.org" .
    bd:serviceParam mwapi:search "Michael Bloom" .
    bd:serviceParam mwapi:language "en" .
    ?person wikibase:apiOutputItem mwapi:item .
  }
  ?person wdt:P31 wd:Q5 .
  OPTIONAL { ?person wdt:P569 ?dob }
  OPTIONAL { ?person wdt:P21 ?gender }
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" . }
}
GROUP BY ?person ?personLabel ?personDescription