如何从 SPARQL 中的 URI 或 QID 查找项目标签或明文名称?

How do I find item label or plaintext name from URI or QID in SPARQL?

我有一个 SPARQL 脚本来查找一个人的生日和死亡日期,我还想获得这个人的职业。

这是我用来获取出生日期和死亡日期的查询:

SELECT distinct ?item ?itemLabel (SAMPLE(?DOB) as ?DOB) (SAMPLE(?RIP) as ?RIP) WHERE {
  ?item wdt:P31 wd:Q5.
  ?item ?label "David Bowie"@en.  
  ?article schema:about ?item .
  ?article schema:inLanguage "en" .
  ?article schema:isPartOf <https://en.wikipedia.org/>.  
  OPTIONAL{?item wdt:P569 ?DOB .}            # P569 : Date of birth
  OPTIONAL{?item wdt:P570 ?RIP .}            # P570 : Date of death
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }    
}
GROUP BY ?item ?itemLabel

为了得到这个职业我做了这个修改:

SELECT distinct ?item ?itemLabel (SAMPLE(?DOB) as ?DOB) (SAMPLE(?RIP) as ?RIP) (SAMPLE(?profession) as ?profession)
WHERE {
  ?item wdt:P31 wd:Q5.
  ?item ?label "David Bowie"@en.  
  ?article schema:about ?item.
  ?article schema:inLanguage "en" .
  ?article schema:isPartOf <https://en.wikipedia.org/>.  
  OPTIONAL{?item wdt:P569 ?DOB .}            # P569 : Date of birth
  OPTIONAL{?item wdt:P570 ?RIP .}            # P570 : Date of death
  OPTIONAL{?item wdt:P106 ?profession .}     # P106 : profession
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }    
}
GROUP BY ?item ?itemLabel

此查询将 return 生日和死亡日期(如果有效),但对于职业,我在在线查询服务和我正在执行的 python 脚本中得到 wd:Q33999我得到的查询 'profession': {'type': 'uri', 'value': 'http://www.wikidata.org/entity/Q33999'}.

此 wd:Q33999 链接到演员,但我只想要文本 - 'actor'。我可以 select 与 wd:33999 关联的标签吗?或者执行某种子查询以纯文本形式查找职业?

你可以扩展这部分:

OPTIONAL{?item wdt:P106 ?profession .}

获取更多相关数据,例如标签:

OPTIONAL{
  ?item wdt:P106 ?professionId .
  ?professionId rdfs:label ?profession
}

请记住将 rdfs:label 替换为数据中存在的标签谓词(如果不同)。

在你的情况下,我认为你还需要添加一些过滤以仅包含英文标签:

OPTIONAL {
  ...
  FILTER (lang(?profession) = 'en')
}