验证维基媒体语言的语言代码

时间:2018-01-12 23:36:05

标签: sh sparql wikidata wikimedia

我有一个使用维基数据查询服务(WDQS)获取所需数据的shell脚本。运行WDQS的SPARQL查询采用输入参数语言代码。

如果输入语言代码是有效的维基媒体语言代码作为下面链接中的第一列数据,我是否有办法检查shell脚本 https://www.wikidata.org/wiki/Help:Wikimedia_language_codes/lists/all

1 个答案:

答案 0 :(得分:2)

这些代码是wdt:P424的可能值。来自property proposal

  

- ISO 639-1有很大的不同吗?    - 其中许多与ISO相同,但并非以一致的方式完成。有些语言代码有两个字母,有三个,还有一些甚至更多。还有一些情况完全不同(als:ISO:tosk Albanian,Wikimedia:Alemannic)。

您可以使用以下简单的SPARQL查询检索所有这些代码:

SELECT DISTINCT ?code { [] wdt:P424 ?code } ORDER BY ?code

Try it!

实际上,您链接到的列表是由bot定期生成的。完整查询is

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