# 高考知识图谱（高中八科）

基于 [Marble Skill Taxonomy](https://github.com/withmarbleapp/os-taxonomy) 框架构建的**高考高中八科知识图谱**——将高中数学、化学、物理、英语、语文、生物、地理、历史的知识体系拆解为细粒度的"微主题"，以先修依赖关系连接成有向无环图（DAG），并对齐国家课程标准。

> **版本：** `v1` · **微主题：** 484 · **先修依赖：** 520 · **课标条目：** 376 · **域摘要：** 116 · **学科：** 8

## 在线体验

探索交互式 DAG 可视化：[**打开知识图谱 →**](viz.html)

每个节点是一个微主题，按学科着色，按年龄分层；每条边是先修依赖关系。点击任意概念可追溯其全部前置知识。

## 这是什么

这不是一份平铺的知识清单，而是一张**连通的学习图谱**：

- **484 个微主题**——一个可教学的最小知识单元（如"导数定义与几何意义""光合作用""文言特殊句式判定"），每个主题包含：通俗易懂的描述、掌握证据标准、类型（概念性/程序性/表征性/语言性/元认知）、所属学科与域、年龄范围。
- **520 条先修依赖**——有向无环图："主题 X 依赖于先修 Y"，每条边标注 `hard`/`soft` 强度并附一句话理由。
- **课程标椎对齐**——每个微主题链接到其对应的国家课程标准条目（《普通高中课程标准（2017年版2020年修订）》各学科）。
- **域摘要**——116 段面向学生/家长的"学习状态"描述，按（学科, 域, 年龄段）组织。

### 学科

| 学科 | 微主题数 |
|---|---:|
| 数学 | 169 |
| 化学 | 64 |
| 物理 | 39 |
| 英语 | 27 |
| 语文 | 26 |
| 生物 | 23 |
| 地理 | 23 |
| 历史 | 113 |

## 文件结构

所有数据存放在 [`data/`](data/) 目录下，为 UTF-8 JSON 格式。参见 [`schema/`](schema/) 中的 JSON Schema 和 [`data/manifest.json`](data/manifest.json) 中的计数与 SHA-256 校验和。

| 文件 | 内容 |
|---|---|
| [`data/topics.json`](data/topics.json) | 微主题（图的**节点**） |
| [`data/dependencies.json`](data/dependencies.json) | 先修**边**（`topicId` 依赖于 `prerequisiteId`） |
| [`data/curriculum-standards.json`](data/curriculum-standards.json) | 源课程标准，按课程体系分组 |
| [`data/clusters.json`](data/clusters.json) | 面向学生/家长的域摘要 |
| [`data/manifest.json`](data/manifest.json) | 计数、按学科拆分、每文件校验和 |

### 微主题示例

```json
{
  "id": "mt_gk_0001",
  "type": "CONCEPTUAL",
  "subject": "数学",
  "domain": "集合与逻辑",
  "name": "集合的概念与表示",
  "description": "理解集合的含义（一组确定的、互异的无序对象）…",
  "ageRangeStart": 15,
  "ageRangeEnd": 16,
  "centrality": 0.95,
  "evidence": ["用列举法/描述法表示给定集合", "判定元素与集合的关系…"],
  "assessmentPrompt": "{{name}}能否用两种方式表示「大于2且小于10的偶数」组成的集合？",
  "standards": ["gxk-math-newcurriculum:M1.1"]
}
```

- `id` — 稳定标识符（`mt_gk_…`），被依赖和邻居引用。
- `standards` — 指向 `curriculum-standards.json` 的键（`"<课程slug>:<代码>"`）。
- `assessmentPrompt` — 自然语言检测题，含 `{{name}}` 占位符（学生姓名），展示前替换或移除。

### 依赖示例

```json
{ "topicId": "mt_gk_0001", "prerequisiteId": "mt_gk_0002", "strength": "hard",
  "reason": "必须先理解集合概念才能讨论集合运算" }
```

`topicId` **依赖于** `prerequisiteId`。反转边即得到"解锁"关系。

## 使用

纯数据——无运行时，无依赖。加载 JSON 即可使用。

```js
import topics from './data/topics.json' with { type: 'json' };
import deps from './data/dependencies.json' with { type: 'json' };

const byId = new Map(topics.topics.map(t => [t.id, t]));
const prereqs = deps.dependencies
  .filter(d => d.topicId === 'mt_gk_0001')
  .map(d => byId.get(d.prerequisiteId).name);
```

验证结构与引用完整性：

```bash
node scripts/validate.mjs
```

重新生成数据集：

```bash
node scripts/generate-gaokao-all.mjs    # 生成八科 JSON + manifest
node scripts/build-viz.mjs              # 构建 viz.html（嵌入全部数据）
```

## 可视化

[viz.html](viz.html) 是一个零依赖的交互式 DAG 可视化页面，支持：

- **学科筛选**——下拉选择数学/化学/物理/英语/语文/生物/地理/历史，仅显示该科节点与边。
- **搜索**——按名称/描述/域/id/课标搜索（`/` 键聚焦）。
- **域/类型过滤**——按知识域和主题类型进一步筛选。
- **节点详情**——点击节点查看完整描述、证据、评估题、先修链。
- **图例**——点击域可快速切换筛选。

## 许可证

本项目基于 [Marble Skill Taxonomy](https://github.com/withmarbleapp/os-taxonomy) 框架，遵循其多许可证模型：

| 层级 | 许可证 |
|---|---|
| **数据库**——微主题集合、结构、ID、主题↔主题与主题↔课标关系 | [**ODbL 1.0**](LICENSE)——免费用于研究和商业用途，**需署名**，**相同方式共享**（衍生数据库必须以 ODbL 保持开放）。 |
| **文本内容**——主题 `description`/`name`/`evidence`/`assessmentPrompt`、依赖 `reason`、域摘要 `summary` | [**CC BY-SA 4.0**](LICENSE-CONTENT)——署名 + 相同方式共享。 |
| **`curriculum-standards.json`**——提取自第三方框架 | **非本项目可再授权**。每个来源遵循**其自身上游许可证**——见 [**PROVENANCE.md**](PROVENANCE.md)。 |

### 署名

任何使用必须注明出处：

> 高考知识图谱（高中八科）v1 · 基于 [Marble Skill Taxonomy](https://github.com/withmarbleapp/os-taxonomy) · © Generative Spark, Inc. (Marble) · https://withmarble.com · 以 ODbL 1.0（数据库）和 CC BY-SA 4.0（内容）许可。

加上你使用的任何课程标准的上游声明，见 [PROVENANCE.md](PROVENANCE.md)。正式引用见 [CITATION.cff](CITATION.cff)。

## 致谢

本项目 fork 自 [Marble Skill Taxonomy](https://github.com/withmarbleapp/os-taxonomy)（© Generative Spark, Inc.）。感谢 Marble 团队开源了课程知识图谱的框架、JSON Schema 与验证工具。本项目在其基础上，将数据内容替换为面向高考的高中八科知识体系（参考新高考考查要求与新课标卷组织）。

## 未包含的内容

有意排除的内容：语义嵌入（派生、可重算的）、任何个人/学生数据（从不公开）。
