【发布时间】:2021-03-01 05:23:48
【问题描述】:
我正在尝试使用实体名称查询 Wikidata。我的目标是获取实体的 Wikidata ID。现在我有类似的东西:
SELECT ?item
WHERE {
?item rdfs:label "name_of_thing"@en
}
虽然这通常可以完成工作,但我还想检查标签是否包含在 Wikidata 上的替代名称中。
例如,如果我将"name_of_thing" 替换为"Philippines AirAsia",那么我不会得到任何结果,但原因是因为"AirAsia Philippines" 是条目的正确名称,而"Philippines AirAsia" 包含在“也称为 Wikidata 页面中的“列”。
我想查询页面,如果第一次获取失败,则检查名称是否包含在“也称为”列中。我该怎么做呢?谢谢。
【问题讨论】:
-
没有优先级,它只是
SELECT ?item WHERE { ?item rdfs:label|skos:altLabel "Philippines AirAsia"@en }- 有优先级,事情变得越来越复杂,可能类似于SELECT (COALESCE(?item1, ?item2) as ?item) WHERE { {?item1 rdfs:label "Philippines AirAsia"@en } UNION {?item2 skos:altLabel "Philippines AirAsia"@en} }- 我没有检查它是否真的适用于多个匹配项。 -
也许something like this 就足够了:
SELECT ?item ?prefLabel ?altLabel WHERE { values ?prefLabel {"AirAsia Philippines"@en} ?item rdfs:label ?prefLabel ; skos:altLabel ?altLabel . }