文件
edu-content/sources/SCHEMA.md

2.6 KiB

sources/ — L1 资源清单(全库唯一锚点)

sources/ 回答:数据从哪来、什么 license、原始文件在 OSS 哪里。任何原始文件(PDF/ZIP/MP3/原始 JSON)进 OSS 前,必须在此先登记。

文件组织

  • 一个 YAML 文件 = 一个域,内含多条 source。
  • 域分三类目录:china/(国内课内 + 开源数据集)、exams/(考试来源)、internal/(自制无来源课件)。
  • 文件名用 kebab-case,如 cepoc.yaml、cambridge-official.yaml、smartedu.yaml。

两级结构

source(引用单位,血缘根 id)
  └─ items[](具体文件 = OSS 对象)
  • L3 结构化记录引用 source_id(必填)+ 可选 source_item_id(精确到文件)。
  • internal 类 source:url: null,license: internal-only,oss_key 指向归档对象。

字段(详见 source.schema.json)

字段 必填 说明
id ✅ 全局唯一 kebab-case,血缘链根 id
title ✅ 人类可读
publisher ✅ 发布方
type ✅ dataset/website/book/internal/tool
url ⚠️ internal 可 null
license ✅ 见 ../LICENSES.md 枚举
license_note ❌ 许可说明(如"研究/教育用途")
fetch_method ❌ curl/git-clone/manual-download/manual-export/generated
status ✅ planned→fetching→fetched/failed;archived 保留合规记录
fetched_at ❌ 下载日期 YYYY-MM-DD
items[] ❌ 具体文件,每项含 id/title/oss_key/sha256/size/media_type/fetch_date

items[].oss_key 在 fetched 后必填;sha256/size 由 tools/oss_sync.py 上传时自动回填。

示例

sources:
  - id: cepoc
    title: CEPOC 剑桥机读完形题库
    publisher: Cambridge ALTA, University of Cambridge
    type: dataset
    url: https://github.com/CambridgeALTA/cepoc
    license: cc-nc-education
    license_note: "研究/教育用途,非商业(见仓库 licence.txt)"
    fetch_method: git-clone
    status: fetched
    fetched_at: "2026-08-21"
    items:
      - id: cepoc-ket-json
        title: KET.json(6套68空)
        oss_key: edu-raw/exams/ket/questions/cepoc/KET.json
        sha256: "a1b2c3..."   # oss_sync.py 自动回填
        size: 12345
        media_type: application/json
        fetch_date: "2026-08-21"
        status: fetched

状态生命周期

planned(调研发现,未下载)→ fetching → fetched/failed。调研报告迁移时大量条目初始为 planned。unknown 状态超过 30 天 lint 报 warning。