ADR-0033: Middle JSON 2.0 结构化行内 Span
历史决策记录:保留当时的背景、状态和设计。当前接口与实现归属以 开发入口 和现行规范为准;文中的历史模块路径不保证仍存在。
状态: Accepted 日期: 2026-08-28 相关文档: ../middle-json/current-medium.md, ../middle-json/rendering.md
背景
Span 化之前的 schema 在自然语言字符串中使用 <eq>、<text style> 和
<hyperlink>/<url> 表达行内语义。这要求 parser、后处理和 renderer 反复匹配
标签外观文本,导致 & 实体双重转义、标签字面量误识别和损坏标记恢复歧义。
决策
- 公开契约
schema_version收敛为"2.0"(初稿曾计划提升为 3.0,发布前已回退, 3.0 从未发布);自然语言 leaf 的content统一改为list[InlineSpan]。 - InlineSpan 是严格的 Text/EquationInline/CodeInline/Hyperlink 联合;Span 不携带 bbox、score、字体、图片或块级字段。
- parser 直接从 PDF 几何区间、Office 富文本、DOM 或 OFD TextLine 构造 Span; 后处理只做结构化合并和裁剪;renderer 按 discriminator 分派。
- 算法正文新增
algorithm_body并使用 Span;普通代码、行间公式、表格 HTML、 Chart HTML、图片专用内容和 Mermaid 继续使用专用字符串。 - 表格 HTML 的文字样式直接使用受限标准标签
strong/em/u/s/sup/sub;不在表格 字符串中恢复自然语言时代的私有<text style="...">协议。 - HTML v1 wire 使用明确 DOM metadata 精确恢复 Span,不从展示标签反推。
- 当前运行时严格使用 schema 2.0;仅对 MinerU 3.4.5 页面结构及对应的 1.0
pages 包装保留
legacy_schema_adapter,先转换为结构化 raw ModelJson 再进入统一后处理。 - 其它未知旧 payload 仍必须从源文件重新解析,不恢复字符串与 Span 的联合公开类型。
结果
A&B、1<2、实体外观与完整<script>/<eq>字面量可以无歧义保真;- URL 安全策略只作用于 HyperlinkSpan.url;自动链接只作用于 TextSpan;
- parser、后处理和 renderer 之间不再存在自然语言私有标记协议;
- 简单表格转 GFM 时,粗体、斜体、删除线及粗斜体使用 Markdown wrapper,其他 组合整体保留为标准 HTML 标签;复杂表格继续原样保留安全 HTML;
- 这是有意的不兼容升级,调用方必须携带并校验
schema_version="2.0"。