gpt4 book ai didi

SPARQL:查询多种语言的维基数据标签

转载 作者:行者123 更新时间:2023-12-02 04:01:46 24 4
gpt4 key购买 nike

我正在尝试从 Wikidata 的 SPARQL 端点获取多种语言的标签。给出以下示例 here :

SELECT ?country ?country_EN ?country_DE ?country_FR
WHERE {
?country wdt:P31 wd:Q185441. # member state of the European Union
SERVICE wikibase:label { bd:serviceParam wikibase:language "en".
?country rdfs:label ?country_EN.
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "de".
?country rdfs:label ?country_DE.
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "fr".
?country rdfs:label ?country_FR.
}
}

Try it here

但是,这会返回以下错误:

Unknown error: there can be only one "run last" join in any group

是否有解决方案可以获取多种语言的标签?

最佳答案

标签服务优化器adds 提示:先前提示:runLast true hint到标签服务,除非有另一个明确的提示:

LabelServiceUtils.getLabelServiceNodes(op).forEach(service -> {
if (service.getProperty(QueryHints.RUN_LAST) != null ||
service.getProperty(QueryHints.RUN_FIRST) != null) {
return;
}
service.setProperty(QueryHints.RUN_LAST, TRUE);
});

应该将 hint:Priorhint:runLast false 添加到第一个之后的所有标签服务调用中。

您的查询应该是:

SELECT ?country ?country_EN ?country_DE ?country_FR
WHERE {
?country wdt:P463 wd:Q458. # member state of the European Union
SERVICE wikibase:label { bd:serviceParam wikibase:language "en".
?country rdfs:label ?country_EN.
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "de".
?country rdfs:label ?country_DE.
} hint:Prior hint:runLast false.
SERVICE wikibase:label { bd:serviceParam wikibase:language "fr".
?country rdfs:label ?country_FR.
} hint:Prior hint:runLast false.
}

Try it!

显然,可以使用常规 SPARQL 获取多种语言的标签,而且这样更简洁。然而,标签服务提供了语言后备,包括 Q-id 的最后一个。

来源:

关于SPARQL:查询多种语言的维基数据标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49118702/

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