请参阅本文档的 勘误表,其中可能包含一些规范性修正。
除了HTML版本之外,本文档还提供以下非规范格式:差异标记的HTML版本、XHTML+MathML 版本、单页 HTML5+MathML 版本,以及 PDF 版本。
另请参阅 翻译版本。
版权 © 1998-2014 W3C®(MIT、ERCIM、Keio、Beihang),保留所有权利。适用 W3C 责任、商标和文档使用规则。
本规范定义了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 章和第 2 章中发现的许多非规范性说明以及之前 MathML 规范中其他地方的许多示例已从 MathML3 规范中删除,并计划合并到准备作为独立文档的《MathML 入门》中。预计这将有助于将此正式的 MathML3 规范用作实现中的参考文档,并为新用户理解 MathML 的部署提供更好的帮助。第 1 章和第 2 章的其余内容经过编辑,以反映文档其他地方的变化以及快速发展的 Web 环境。其中一些文本可以追溯到 Web 和 XML 的早期,其解释现在已很常见。
第 3 章关于面向呈现的标记,增加了关于换行和许多国家使用的初等数学符号标记(mstack、mlongdiv 和其他相关元素)的新材料。其他更改包括对 mglyph、mpadded 和 maction 元素的修订,以及属性值的重大统一和清理。早期的工作(如 W3C 注释 阿拉伯数学符号 中记录的那样)使得能够澄清与双向文本的关系,并添加了带有 RTL(从右到左)文本的示例。
第 4 章关于面向内容的标记,包含重大更改和新增内容。实际内容的含义在原则上与以前保持一致,但在更好地表达它方面做了大量工作。添加了一些新元素。
第 5 章进行了精炼,因为其目的得到了进一步明确,以处理标记语言的混合。本章特别处理了 MathML 规范各部分之间的相互关系,尤其是呈现标记和内容标记之间的关系。
第 6 章是一个新增加的章节,处理了 MathML 与宿主环境交互的问题。本章处理了 MathML 规范与 XML 和 HTML 之间的相互关系,但在 Web 部署的背景下。特别讨论了 CSS 与 MathML 的交互。
第 7 章取代了之前的第 6 章,并已重新编写和组织,以反映 Unicode 的新情况以及 W3C 对命名字符实体的上下文变更。新的 W3C 规范《XML Character Entity Definitions》已纳入用于数学的实体,并成为 W3C 推荐稿,[Entities]。
附录(共显示八个)已重新修订。附录 A 现在包含新的 MathML3 RelaxNG 模式以及关于 MathML3 DTD 问题的讨论。附录 B 涉及与 MathML 相关的媒体类型,并隐含地构成了对三种新媒体类型的注册请求(这是 W3C 工作的标准)。附录 C 包含一个新的简化且经过重新考虑的运算符字典。附录 D、E、F、G 和 H 包含与之前规范中类似的非规范性材料,现已进行了适当更新。
关于本文件演变的更完整讨论可见于附录 F 更改。
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 属性