W3C

数学标记语言 (MathML) 第 3.0 版 第二版

W3C 推荐 2014年4月10日

此版本
https://w3org.cn/TR/2014/REC-MathML3-20140410/
最新 MathML 3 版本
https://w3org.cn/TR/MathML3/
最新的 MathML 推荐标准
https://w3org.cn/TR/MathML/
先前版本
https://w3org.cn/TR/2014/PER-MathML3-20140211/
https://w3org.cn/TR/2010/REC-MathML3-20101021/
编辑版本
https://w3org.cn/Math/draft-spec/
编辑
David Carlisle, NAG
Patrick Ion, Mathematical Reviews, 美国数学学会
Robert Miner(已故),Design Science, Inc.
主要作者
Ron Ausbrooks, Stephen Buswell, David Carlisle, Giorgi Chavchanidze, Stéphane Dalmas, Stan Devitt, Angel Diaz, Sam Dooley, Roger Hunter, Patrick Ion, Michael Kohlhase, Azzeddine Lazrek, Paul Libbrecht, Bruce Miller, Robert Miner (已故), Chris Rowley, Murray Sargent, Bruce Smith, Neil Soiffer, Robert Sutor, Stephen Watt

请参阅本文档的 勘误表,其中可能包含一些规范性修正。

除了HTML版本之外,本文档还提供以下非规范格式:差异标记的HTML版本XHTML+MathML 版本单页 HTML5+MathML 版本,以及 PDF 版本

另请参阅 翻译版本


摘要

本规范定义了MathML。MathML 是一种用于描述数学符号并捕获其结构与内容的标记语言。MathML 的目标是使数学能够在万维网中被提供、接收和处理,正如HTML 已实现文本的此类功能一样。

本 MathML 置标语言规范主要面向以下读者:正在开发或实现使用它的渲染器或编辑器的开发人员,或使用 MathML 作为输入或输出协议进行通信的软件。它不是用户指南,而是一份参考文档。

MathML 可用于对数学符号和数学内容进行编码。大约有 38 个 MathML 标签描述抽象的符号结构,另有约 170 个标签提供了一种明确指定表达式预期含义的方法。后续章节讨论了 MathML 内容元素和表现元素如何交互,以及 MathML 渲染器如何实现并应如何与浏览器交互。最后,本文档阐述了用于数学的特殊字符问题、它们在 MathML 中的处理、它们在 Unicode 中的存在以及它们与字体的关系。

虽然 MathML 是人类可读的,但作者通常会使用公式编辑器、转换程序和其他专门的软件工具来生成 MathML。目前已存在多种版本的此类 MathML 工具,包括免费软件和商业产品,且更多的工具正在开发中。

MathML 最初被指定为 XML 应用,且本规范中的大多数例子均基于该语法。还有其他语法可用,最显著的是[HTML5] 为 HTML 中的 MathML 指定了语法。除非另有说明,本规范中的例子同样符合 HTML 语法。

本文件的状态

本节描述本文档在发布时的状态。其他文档可能会取代本文档。当前的 W3C 出版物列表和本技术报告的最新修订版可在 https://w3org.cn/TR/ 的 W3C 技术报告索引中找到。

本文件由W3C Math Working Group编写,为Recommendation,是 W3C Math Activity的一部分。W3C Math Working Group 的目标在W3C Math WG Charter(2006年7月修订)中有阐述。本文档的作者为 W3C Math Working Group 成员。可查阅 W3C Math Working Group 参与者名单

本文件已由 W3C 会员、软件开发人员以及其他 W3C 小组和利害关系方审阅,并由总干事认可为 W3C 推荐标准。这是一个稳定的文档,可以用作参考材料或从另一个文档中引用。W3C 发布推荐标准的角色是引起对规范的关注并促进其广泛部署。这增强了 Web 的功能和互操作性。

对第一版报告的所有勘误均已在本增订中处理,并且完整的变更日志列于附录 F 更改。前言中链接的差异标记版本突出显示了第一版与第二版之间的所有更改。除了合并勘误之外,此增订的主要变化是承认 MathML 解析也在[HTML5] 中规定,并在必要时指出 HTML 与 XML 用法的差异。

工作组维护着一套全面的 测试套件。这是公开的,鼓励开发人员提交他们的结果以供展示。测试结果 是公开的。它们显示了每个基本测试至少有两个互操作的实现。更多详细信息可在 实现报告 中找到。

MathML 2.0(第二版)规范自 2001 年以来一直是 W3C 推荐标准。在其被推荐后,W3C 数学兴趣小组收集了有关 MathML 部署经验的报告,并确定了可能需要改进的问题。重新组建数学工作组并不意味着 MathML 的整体设计有任何改变。MathML 3 的主要新增功能包括对双向布局、更好的换行和显式定位的支持、初等数学符号以及具有明确语义的新型严格内容 MathML 词汇表。MathML 3 规范也进行了重构。

本文档由在一个遵循 2004 年 2 月 5 日 W3C 专利政策 的小组下工作产生的。W3C 维护着一份 与该小组交付成果相关的专利披露公开列表;该页面还包含披露专利的说明。任何相信自己所知的专利包含 必要权利要求 的个人,必须根据 W3C 专利政策第 6 节 披露该信息。

关于 MathML 以及通过 W3C 支持 Web 数学问题的公开讨论,请在 数学工作组的公开邮件列表 (列表存档) 上进行。订阅请发送电子邮件至 www-math-request@w3.org,并在主题行中使用单词 subscribe

本文件的基本章节结构基于早期的 MathML 2.0 推荐稿[MathML2]。MathML 2.0 本身是对更早的 W3C 推荐稿 MathML 1.01[MathML1]的修订;MathML 3.0 是对 W3C 推荐稿 MathML 2.0 的再次修订。它与前者的差别在于所有以前的章节均已更新,新增了一些元素和属性,并废除了一些内容。大量内容已转移至包含说明材料、字符与实体以及 MathML DOM 的独立文档。对字符实体的讨论促成了文档《XML Character Entity Definitions[Entities],该文档现已成为 W3C 推荐稿。关于在 MathML 中使用 CSS 的关注导致了文档《A MathML for CSS Profile[MathMLforCSS],它是随 MathML 3.0 附带的 W3C 推荐稿。

与 MathML 2.0(第二版)最大的区别在于第 4 章和第 5 章,尽管整个规范中都有较小的改进。以下是对上一版推荐标准所作更改的更详细描述。

目录

1 介绍
    1.1 数学及其符号表示
    1.2 起源与目标
1.2.1 MathML 的设计目标
1.3 概述
1.4 第一个示例
2 MathML 基础
2.1 MathML 语法与文法
2.1.1 一般考虑
2.1.2 MathML 与命名空间
2.1.3 子元素与参数
2.1.4 MathML 与渲染
2.1.5 MathML 属性值
2.1.6 所有 MathML 元素共享的属性
2.1.7 输入中的空白折叠
2.2 顶层 <math> 元素
2.2.1 属性
2.2.2 已废弃的属性
2.3 合规性
2.3.1 MathML 合规性
2.3.2 错误处理
2.3.3 未指定数据的属性
3 表现标记 (Presentation Markup)
    3.1 简介
        3.1.1 表现元素所代表的含义
        3.1.2 本章使用的术语
        3.1.3 必需的参数
        3.1.4 具有特殊行为的元素
3.1.5 方向性
3.1.6 展示样式与脚本级别
3.1.7 表达式的换行
3.1.8 关于精细调节呈现的警告
3.1.9 呈现元素概述
3.1.10 适用于呈现元素的数学样式属性
    3.2 记号元素
3.2.1 标记元素内容字符,<mglyph/>
        3.2.2 记号元素共有的数学样式属性
3.2.3 标识符 <mi>
3.2.4 数字 <mn>
3.2.5 运算符、界限、分隔符或重音 <mo>
3.2.6 文本 <mtext>
3.2.7 空格 <mspace/>
3.2.8 字符串字面量 <ms>
    3.3 通用布局模式
3.3.1 横向分组子表达式 <mrow>
3.3.2 分数 <mfrac>
3.3.3 根式 <msqrt><mroot>
3.3.4 样式变更 <mstyle>
3.3.5 错误信息 <merror>
3.3.6 调整内容周围的空格 <mpadded>
3.3.7 使子表达式不可见 <mphantom>
3.3.8 包含在一对界限内的表达式 <mfenced>
3.3.9 用符号包裹表达式 <menclose>
    3.4 脚本与极限模式
3.4.1 下标 <msub>
3.4.2 上标 <msup>
3.4.3 下标-上标对 <msubsup>
3.4.4 下脚注 <munder>
3.4.5 上脚注 <mover>
3.4.6 下脚注-上脚注对 <munderover>
3.4.7 前置脚本与张量指标 <mmultiscripts><mprescripts/><none/>
3.5 表格数学
3.5.1 表格或矩阵 <mtable>
3.5.2 表格或矩阵中的行 <mtr>
3.5.3 带标签的行 <mlabeledtr>
3.5.4 表格或矩阵中的条目 <mtd>
3.5.5 对齐标记 <maligngroup/><malignmark/>
3.6 初等数学
3.6.1 字符堆叠 <mstack>
3.6.2 长除法 <mlongdiv>
3.6.3 按相似位置分组行 <msgroup>
3.6.4 初等数学中的行 <msrow>
3.6.5 进位、借位与划除 <mscarries>
3.6.6 单个进位 <mscarry>
3.6.7 横线 <msline/>
3.6.8 初等数学示例
3.7 赋活表达式
3.7.1 将操作绑定到子表达式 <maction>
3.8 语义与呈现
4 内容标记
    4.1 引言
        4.1.1 内容标记的目的
4.1.2 内容 MathML 表达式的结构与范围
4.1.3 严格内容 MathML
4.1.4 内容字典
4.1.5 内容 MathML 概念
4.2 编码表达式结构的内容 MathML 元素
4.2.1 数字 <cn>
4.2.2 内容标识符 <ci>
4.2.3 内容符号 <csymbol>
4.2.4 字符串字面量 <cs>
4.2.5 函数应用 <apply>
4.2.6 绑定与约束变量 <bind><bvar>
4.2.7 结构共享 <share>
4.2.8 通过 semantics 进行属性标注
4.2.9 错误标记 <cerror>
4.2.10 编码字节 <cbytes>
4.3 特定结构的内容 MathML
4.3.1 容器标记
4.3.2 使用 <apply> 的绑定
4.3.3 限定符
4.3.4 运算符类别
4.3.5 非严格属性
4.4 特定运算符与常量的内容 MathML
4.4.1 函数与逆函数
4.4.2 算术、代数与逻辑
4.4.3 关系
4.4.4 微积分与向量微积分
4.4.5 集合论
4.4.6 序列与级数
4.4.7 初等经典函数
4.4.8 统计
4.4.9 线性代数
4.4.10 常量与符号元素
4.5 已废弃的内容元素
4.5.1 声明 <declare>
4.5.2 关系 <reln>
4.5.3 关系 <fn>
4.6 严格内容 MathML 转换
5 在数学表达式中混合标记语言
5.1 注释框架
5.1.1 注释元素
5.1.2 注释键
5.1.3 替代表示
5.1.4 内容等价
5.1.5 注释引用
5.2 语义注释元素
5.2.1 <semantics> 元素
5.2.2 <annotation> 元素
5.2.3 <annotation-xml> 元素
5.3 组合呈现与内容标记
5.3.1 内容标记中的呈现标记
5.3.2 呈现标记中的内容标记
5.4 并行标记
5.4.1 顶层并行标记
5.4.2 通过交叉引用实现并行标记
6 与宿主环境的交互
6.1 引言
6.2 调用 MathML 处理器
6.2.1 在 XML 中识别 MathML
6.2.2 在 HTML 中识别 MathML
6.2.3 MathML 文档的资源类型
6.2.4 MathML 编码的名称
6.3 转移 MathML
6.3.1 基本转移方式名称及内容
6.3.2 转移时的推荐行为
6.3.3 讨论
6.3.4 示例
6.4 组合 MathML 与其他格式
6.4.1 混合 MathML 与 XHTML
6.4.2 混合 MathML 与非 XML 环境
6.4.3 混合 MathML 与 HTML
6.4.4 链接
6.4.5 MathML 与图形标记
6.5 在 MathML 中使用 CSS
6.5.1 属性处理顺序与样式表的关系
7 字符、实体与字体
7.1 引言
7.2 Unicode 字符数据
7.3 实体声明
7.4 Unicode 中未包含的特殊字符
7.5 数学字母数字符号
7.6 非标记字符
7.7 异常数学字符
7.7.1 键盘字符
7.7.2 伪脚本
7.7.3 组合字符

附录

A 解析 MathML
    A.1 将 MathML 用作良构 XML
A.2 使用 MathML3 的 RelaxNG 模式
A.2.1 完整 MathML
A.2.2 呈现与内容 MathML 共有的元素
A.2.3 呈现 MathML 的文法
A.2.4 严格内容 MathML3 的文法
A.2.5 内容 MathML 的文法
A.2.6 MathML 作为 RelaxNG 模式的模块
A.3 使用 MathML DTD
A.3.1 文档验证问题
A.3.2 MathML DTD 中的属性值
A.3.3 MathML 的 DOCTYPE 声明
A.4 使用 MathML XML 架构
A.4.1 将 MathML 架构与 MathML 片段关联
A.5 在 XHTML 中解析 MathML
A.6 在 HTML 中解析 MathML
B 媒体类型注册
B.1 为 MathML 实例选择媒体类型
B.2 通用 MathML 的媒体类型
B.3 呈现 MathML 的媒体类型
B.4 内容 MathML 的媒体类型
C 运算符字典(非规范)
C.1 运算符字典的索引
C.2 运算符字典条目的格式
C.3 关于 lspace 与 rspace 属性的说明
C.4 运算符字典条目
D 术语表(非规范)
E 工作组成员与致谢(非规范)
E.1 Math 工作组成员
E.2 致谢
F 更改(非规范)
F.1 MathML 3.0 第一版与第二版之间的更改
F.2 MathML 2.0 第二版与 MathML 3.0 之间的更改
G 规范性参考文献
H 参考文献(非规范)
I 索引(非规范)
I.1 MathML 元素
I.2 MathML 属性