gpt4 book ai didi

SPARQL:如果第一个选项不可用,如何获取可用语言的标签

转载 作者:行者123 更新时间:2023-12-04 19:40:37 24 4
gpt4 key购买 nike

如果我的查询返回的维基数据资源在我过滤的语言中没有可用的标签,我将获得一个空单元格。

SELECT *
WHERE
{
?country wdt:P31 wd:Q6256.
?country rdfs:label ?country_name
FILTER(LANG(?country_name) = 'jbo').
}

link

如果第一种语言失败,如何请求以任何一种可用语言返回标签?

最佳答案

首先,更喜欢 langMatches 用于检查语言标签。这在您的情况下尤其重要,因为例如您可能需要英文标签和 langMatches(lang(?label), "en") 将找到带有“en”、“en-GB”或“en-US”等标签的标签。这些是语言的区域变体,以及 语言匹配 可以帮助您找到它们。

根据评论更新解决方案

@svick 在评论中注意到,原始解决方案以英文名称与非英文名称的笛卡尔积中的每个元素对应一行结束。您可以通过使用 来避免这种情况。选择不同 .但确实有更好的方法:只需在两个 中使用相同的变量即可。可选 s;第一个检查英文标签,第二个检查非英文标签。如果第一个成功,那么第二个永远不会被调用。也就是说,只需执行以下操作:

select ?country ?label {
?country wdt:P31 wd:Q6256
optional {
?country rdfs:label ?label
filter langMatches(lang(?label), "en")
}
optional {
?country rdfs:label ?label
}
}

其他选项
  • 如果您需要做任何聚合,您可以在 SPARQL filter language if possible in multiple value context 中找到一些帮助。 .
  • 如果在第一种语言之后,您仍然对其余语言有偏好,您可能会发现 Sparql multi lang data compression to one row 中使用的技术。有帮助。



  • 使用 COALESCE 的原始解决方案

    不过在那之后, coalesce 会做你想做的。它接受多个参数,并返回第一个有值的参数。因此,您可以在 中匹配首选语言。可选 块,以及另一种语言中的任何语言,并合并这些值:

    select distinct ?country (coalesce(?enLabel, ?anyLabel) as ?label) {
    ?country wdt:P31 wd:Q6256
    optional {
    ?country rdfs:label ?enLabel
    filter langMatches(lang(?enLabel), "en")
    }
    optional {
    ?country rdfs:label ?anyLabel
    }
    }

    关于SPARQL:如果第一个选项不可用,如何获取可用语言的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38349975/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com