你是一个知识工程专家。你的任务是从以下文档中提取知识库结构：领域（Domain）、本体（Ontology）和实例（Instance）。

## 基本概念

- **领域（Domain）**：知识所属的学科或主题范围，是整个知识库的入口。
- **本体（Ontology）**：可复用的概念模式，描述某一类知识的通用结构。本体应脱离具体源文件，换一批同主题文档仍可复用。
- **实例（Instance）**：属于某个本体的具体知识条目。每个实例必须通过 `ontology` 字段指向其所属的本体。
- **关系（Relation）**：实例间的有向连接。关系本身也是一种实例，属于"关系类本体"（如"对应"、"依赖"）。关系实例的 description 以"从A到B"格式标明连接方向。

## 本体 vs 实例的判断标准

| 维度 | 本体（Ontology） | 实例（Instance） |
|------|----------------|----------------|
| 抽象层次 | 概念模式，定义"有什么结构" | 具体条目，是结构的填充 |
| 可复用性 | 去掉文档中的具体值后 pattern 仍有信息量 | 去掉具体值后只剩空壳 |
| 自检方法 | 换一套完全不同的文档，这个本体是否仍然适用？ | 换文档后具体条目是否需要替换？ |
| 示例 | "重构手法"（手法=动机+步骤+效果+条件） | "提炼函数"、"重命名变量"（手法+长函数的具体值） |
| 示例 | "代码坏味道"（表明存在深层问题的症状） | "过长函数"、"重复代码"（具体症状描述） |
| 示例 | "对应"（定义实例间的连接关系） | "从过长函数到提炼函数"、"从重复代码到提取函数"（关系实例，描述标明方向） |

## 输出字段

每个条目（domain / ontology / instance）四个通用字段：
- id: 唯一标识（英文短名，如 `long-function`、`extract-function`）
- name: 名称（英文，与 id 相同或用短名形式）
- label: 显示标签（中文）
- description: 描述/内容（可包含任意结构化信息，如"手法：xxx；动机：xxx；步骤：xxx；条件：xxx"）

实例额外字段：
- ontology: 所属本体的 id（必须与 ontologies 数组中某个条目的 id 一致）

## 描述字段编写指南

description 是主要的承载字段。建议写法：

- 本体：使用"定义=要素"结构，如"具体的代码变换操作，每种手法有明确的动机、步骤、效果和适用条件。手法=动机+步骤+效果+条件，四个要素缺一不可。"
- 实例：使用"类别：值"键值对结构，如"手法：将一段代码从原函数中提取为独立函数；动机：函数过长或包含需要注释才能理解的代码段；步骤：创建新函数→复制代码→处理变量作用域→替换原处为调用；条件：提取后的函数名能清晰表达代码意图。"
- 关系实例：描述以"从X到Y"标明连接方向，如"从过长函数到提炼函数"。关系实例是普通实例的一种，受所属本体约束。

## 重要规则

- 如果本文档是某部作品的一部分（如小说章节、系列文章等），domain.id 应该用作品的整体标识，不要用本章特有的名字
- 同一作品的不同章节应使用相同的 domain.id，这样抽取结果才能合并到同一个知识库中
- 如果本文档是独立的，再为它创建独立的 domain.id
- 本体应追求可复用性：想象把本文档换成同一主题的其他文档，当前定义的本体是否仍然成立？
- 提取关系：识别实例之间有方向的联系（如"对应"、"依赖"、"属于"），为这类联系创建关系类本体，并将具体关联提取为关系实例。

## 输出格式

```json
{
  "domain": { "id": "", "name": "", "label": "", "description": "" },
  "ontologies": [
    { "id": "", "name": "", "label": "", "description": "" }
  ],
  "instances": [
    { "id": "", "name": "", "label": "", "description": "", "ontology": "" }
  ]
}
```

ontologies、instances 可以是空数组。

源目录名称：{directory_name}
本文档是该目录中的一份文件。如果该目录包含多个文件，它们属于同一个项目/作品，请使用一致的 domain.id。

文档内容：
"""
{document}
"""
