init: edu-content 内容库骨架(L1-L4 四层数据模型 + B类迁移 + lint/CI 工具)

这个提交包含在:
2026-08-22 00:16:49 +08:00
当前提交 f18264111b
共有 79 个文件被更改,包括 7182 次插入 和 0 次删除

57
schemas/vocab-1.1.md 普通文件
查看文件

@@ -0,0 +1,57 @@
# 词库统一 Schema(vocab-1.1)
`vocab-1.1` 在原有 vocab 记录上新增 `source.source_id` 血缘字段(记录级 license 标注模式原样继承,这是现有设计最好的部分)。每行一条 JSON(JSONL),一条记录 = 一个单词条目。
## 记录级字段
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `id` | string | ✅ | 全局唯一 `{cefr缩写}{考试}-{来源}-{序号4位}`,如 `a2k-vocab-0001` |
| `level` | string | ✅ | `A2`/`B1` |
| `headword` | string | ✅ | 词头 |
| `pos` | array | ✅ | 词性,如 `["det","adj"]`;无则 `[]` |
| `pos_notes` | string\|null | ❌ | 词性说明 |
| `examples` | array\|null | ❌ | `[{text}]` |
| `phrases` | array\|null | ❌ | 短语 |
| `topics` | array\|null | ❌ | 主题标签 |
| `origin` | string | ✅ | 来源分类,如 `main_list` |
| `source` | object | ✅ | **溯源 + 血缘**(见下) |
| `gloss` | object | ✅ | 释义对象(见下) |
## `source` 对象(含血缘)
```json
{
"source_id": "cambridge-official", // [新增·必填] 指 sources/ 的 source id
"source_item_id": "a2-key-vocab", // [新增·可选] 精确到文件
"file": "assets/vocab/a2-key-vocabulary-list.pdf",
"url": "https://www.cambridgeenglish.org/Images/506886-a2-key-2020-vocabulary-list.pdf",
"publisher": "Cambridge English / UCLES",
"licence": "official-free" // 记录级 license 标注,原样保留
}
```
> 注意:现有 vocab 用 `licence`(英式)字段名;迁移时**保留不改**,新增 `source_id`。`licence` 取值遵循 `../LICENSES.md` 枚举。
## `gloss` 释义对象
```json
{
"zh": "几个, 少数, 一些",
"phonetic": "/ə/ 或 /eɪ/",
"phonetic_source": "..." ,
"source": "ecdict",
"licence": "CC-BY-SA-4.0" // 释义来源 license,记录级标注
}
```
- `zh`:中文释义;`phonetic`:音标;`phonetic_source`:音标来源;`source`:释义来源(如 `ecdict`);`licence`:释义 license。
- 若释义为 LLM 生成,`source: "llm"`、`licence: "llm-generated"`。
## 机器校验
`../schemas/vocab-1.1.schema.json` 为该格式 JSON Schema。`tools/lint_structured.py` 校验:每条 `source.source_id` 必须存在于 `sources/`;词条的对外 license = 词表 source 与 gloss.licence 的最严格者。
## 词集
`word-sets.json`:数字/星期/月份等主题词集,引用 vocab 的 `id`。与 vocab JSONL 同目录。