2.6 KiB
2.6 KiB
题库统一 Schema(qb-1.1)
qb-1.1 是 qb-1.0 的向后兼容升级:保留全部旧字段,仅新增血缘字段。每行一条 JSON(JSONL),一条记录 = 一个完整任务(一个语篇 + 若干小题)。
升级点(相对 qb-1.0):
source对象新增source_id(必填)与source_item_id(可选),指向sources/登记的根 id。旧字段origin/file/url/retrieved保留用于迁移期兼容。
记录级字段
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
schema |
string | ✅ | 固定 "qb-1.1" |
id |
string | ✅ | 全局唯一 {考试缩写}-{来源缩写}-{序号4位} |
exam |
string | ✅ | A2 Key/A2 Key for Schools/B1 Preliminary/B1 Preliminary for Schools |
cefr |
string | ✅ | A2/B1 |
paper |
string | ✅ | reading_writing/reading/writing/listening/speaking/vocabulary |
part |
int|null | ✅ | 卷内 Part 号;未标注为 null |
type |
string | ✅ | 题型枚举(见下表) |
task_prompt |
string | ❌ | 完整作答指令 |
title |
string|null | ❌ | 语篇标题 |
passage |
string|null | ❌ | 语篇正文;空格用 blank_token 占位 |
blank_token |
string | ❌ | 默认 "_" |
items |
array | ✅ | 小题数组(见 §2) |
source |
object | ✅ | 溯源 + 血缘(见 §3) |
license |
string | ✅ | 许可枚举(见 ../LICENSES.md);对外许可 = 引用 source 的最严格者 |
tags |
array | ❌ | 自由标签 |
note |
string | ❌ | 备注 |
meta |
object | ❌ | 扩展位(音频/图片路径、评分量表引用等) |
type 题型枚举
mcq/matching/open_cloze/gap_fill/word_formation/writing_task/speaking_prompt/word_entry/other(含义与判题方式同 qb-1.0)。
source 对象(§3,含血缘)
{
"source_id": "cepoc", // [新增·必填] 指 sources/ 中的 source id
"source_item_id": "cepoc-ket-json", // [新增·可选] 精确到文件
"origin": "cepoc", // [保留] 旧字段,迁移期兼容
"file": "assets/questions/CEPOC_KET.json",
"url": "https://github.com/CambridgeALTA/cepoc",
"retrieved": "2026-08-21"
}
source_id 必须存在于 sources/;lint 据此校验血缘完整性并推导该记录的对外 license。
机器校验
../schemas/qb-1.1.schema.json 为该格式 JSON Schema。CI 用 tools/lint_structured.py 校验:每条记录 source.source_id 必须存在、license 必须是合法枚举且 = 引用 source 的最严格许可。