我有一个使用 Wikidata 查询服务 (WDQS) 来获取所需数据的 shell 脚本。运行 WDQS 的 SPARQL 查询采用输入参数语言代码。
如果输入语言代码是有效的维基媒体语言代码作为以下链接中的第一列数据,有没有办法可以检查 shell 脚本 https://www.wikidata.org/wiki/Help:Wikimedia_language_codes/lists/all
我有一个使用 Wikidata 查询服务 (WDQS) 来获取所需数据的 shell 脚本。运行 WDQS 的 SPARQL 查询采用输入参数语言代码。
如果输入语言代码是有效的维基媒体语言代码作为以下链接中的第一列数据,有没有办法可以检查 shell 脚本 https://www.wikidata.org/wiki/Help:Wikimedia_language_codes/lists/all
— 与 ISO 639-1 有很大不同吗?
— 其中许多与 ISO 相同,但并没有以一致的方式完成。一些语言代码有两个字母,有的三个字母,甚至更多。还有一些情况完全不同(也有:ISO:tosk Albanian,Wikimedia:Alemannic)。
您可以使用以下简单的 SPARQL 查询检索所有这些代码:
SELECT DISTINCT ?code { [] wdt:P424 ?code } ORDER BY ?code
实际上,您链接到的列表是由机器人定期生成的。完整的查询是:
SELECT ?item ?c
(CONCAT("{","{#language:",?c,"}","}") as ?display)
(CONCAT("{","{#language:",?c,"|","en}","}") as ?displayEN)
(CONCAT("{","{#language:",?c,"|","fr}","}") as ?displayFR)
{
?item wdt:P424 ?c .
MINUS{?item wdt:P31/wdt:P279* wd:Q14827288} #--exclude Wikimedia projects
MINUS{?item wdt:P31/wdt:P279* wd:Q17442446} #--exclude Wikimedia internal stuff
}
你可以:
ASK
SPARQL 查询。我更喜欢第三种选择:
#!/bin/sh
echo "Enter language code:"
read code
request="curl -g -s https://query.wikidata.org/sparql?query=ASK{?lang%20wdt:P424%20\"$code\"}"
if $request | grep -q "true"; then
echo "Valid code";
else
echo "Invalid code";
fi