You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在调用WDQS的Shell脚本中验证Wikimedia语言代码有效性?

当然可以实现这个验证!既然你的脚本已经在和WDQS打交道,咱们可以直接利用Wikidata本身的数据来验证语言代码的有效性,或者也可以预存一份语言代码列表做离线验证,下面给你两种实用方案:

方案1:实时通过WDQS验证语言代码

这种方法不需要维护本地列表,直接用SPARQL查询Wikidata获取所有维基媒体认可的语言代码,然后检查输入是否在结果中,能保证数据的实时准确性。

#!/bin/bash

# 检查用户是否传入语言代码参数
if [ $# -ne 1 ]; then
    echo "用法: $0 <语言代码>"
    exit 1
fi

# 统一转小写,避免大小写不匹配的问题
INPUT_LANG=$(echo "$1" | tr '[:upper:]' '[:lower:]')

# 构造SPARQL查询:获取所有维基媒体语言代码实例的ISO 639-1代码
SPARQL_QUERY='SELECT ?langCode WHERE {
  ?item wdt:P31 wd:Q188551 . # 筛选"维基媒体语言代码"类型的条目
  ?item wdt:P218 ?langCode . # 提取语言代码属性值(对应目标页面第一列)
}'

# 调用WDQS接口,获取TSV格式的结果并跳过表头
VALID_LANGS=$(curl -s -G "https://query.wikidata.org/sparql" \
    --data-urlencode "query=$SPARQL_QUERY" \
    --data-urlencode "format=tsv" | tail -n +2)

# 检查输入的语言代码是否在有效列表中
if echo "$VALID_LANGS" | grep -q "^$INPUT_LANG$"; then
    echo "语言代码 '$INPUT_LANG' 是有效的维基媒体语言代码"
    # 这里继续执行你的WDQS查询逻辑
else
    echo "错误: 语言代码 '$INPUT_LANG' 无效"
    exit 1
fi

关键细节说明:

  • 转小写处理:维基媒体的语言代码都是小写格式,避免用户输入大写/混合大小写导致验证失败
  • SPARQL查询逻辑:直接关联Wikidata中标记为「维基媒体语言代码」(Q188551)的条目,提取其ISO 639-1代码(P218),和目标页面的第一列数据完全对应
  • 精确匹配:用^$包裹匹配规则,避免出现类似en匹配en-US的误判情况
方案2:离线验证(预存语言代码列表)

如果你的脚本需要频繁调用,不想每次都请求WDQS,可以先把有效语言代码下载到本地文件,用本地列表做验证,提升脚本执行效率。

步骤1:提前下载语言代码列表

curl -s -G "https://query.wikidata.org/sparql" \
    --data-urlencode "query=SELECT ?langCode WHERE { ?item wdt:P31 wd:Q188551 . ?item wdt:P218 ?langCode . }" \
    --data-urlencode "format=tsv" | tail -n +2 > valid_wikimedia_langs.txt

步骤2:脚本中用本地列表验证

#!/bin/bash

if [ $# -ne 1 ]; then
    echo "用法: $0 <语言代码>"
    exit 1
fi

INPUT_LANG=$(echo "$1" | tr '[:upper:]' '[:lower:]')
VALID_LANG_FILE="valid_wikimedia_langs.txt"

# 检查本地列表文件是否存在
if [ ! -f "$VALID_LANG_FILE" ]; then
    echo "错误: 有效语言代码文件 $VALID_LANG_FILE 不存在,请先执行下载命令"
    exit 1
fi

# 验证输入的语言代码
if grep -q "^$INPUT_LANG$" "$VALID_LANG_FILE"; then
    echo "语言代码 '$INPUT_LANG' 是有效的维基媒体语言代码"
    # 执行你的WDQS查询逻辑
else
    echo "错误: 语言代码 '$INPUT_LANG' 无效"
    exit 1
fi

额外提示:

  • 如果需要支持ISO 639-2/3等其他类型的语言代码,可以修改SPARQL查询,加入对应的属性(比如P219、P220)
  • 可以给curl添加--max-time 10参数,避免网络超时导致脚本卡住

内容的提问来源于stack exchange,提问作者Sasidhar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:08:25