如何从 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')
}
我有一个 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')
}