第4章:Open XML标准与ECMA-376
学习目标
- 了解Open XML标准的组织
- 理解WordprocessingML的概念
- 了解XML命名空间在Open XML中的作用
- 掌握主要的XML命名空间
4.1 什么是Open XML
Open XML全称是Office Open XML,是一个描述Office文档的开放文档标准。
Open XML不是一个单一格式,它是一个标准框架,定义了三种文档类型:
| 文档类型 | 文件扩展名 | 标记语言名称 | 用途 |
|---|---|---|---|
| 文字处理 | .docx | WordprocessingML | Word文档 |
| 电子表格 | .xlsx | SpreadsheetML | Excel工作簿 |
| 演示文稿 | .pptx | PresentationML | PowerPoint演示文稿 |
本书只关注WordprocessingML,也就是文字处理文档(.docx)部分。
标准的结构
ECMA-376标准分为几个部分:
- 第1部分:基础知识和标记语言概述
- 第2部分:开发生信包约定(就是我们讲的ZIP包结构)
- 第3部分:Markup Compatibility和扩展
- 第4部分:过渡兼容特性(主要是旧二进制格式相关)
- 第5部分:WML (WordprocessingML)细节
- … 其他部分针对Excel和PowerPoint
WordprocessingML的全部细节在第5部分,大约一千多页。本书会提取开发者常用的内容,不需要你去读那一千多页。
4.2 XML命名空间
Open XML使用XML,自然就会用到XML命名空间。如果你对XML命名空间不太熟悉,没关系,这里简单回顾一下。
为什么需要命名空间
当多个XML词汇混合在一起时,可能会有同名的元素。命名空间用来区分它们。
比如,我们说“表格“,在Word里是表格,在HTML里也是表格。如果放在一起,怎么区分?用命名空间。
Open XML中的命名空间
Open XML中的每个词汇都有自己的XML命名空间URI。在根元素上声明,前缀通常简写:
<w:document
xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
这里:
w:前缀绑定到WordprocessingML主命名空间r:前缀绑定到关系命名空间a:前缀绑定到DrawingML(绘图)命名空间
前缀只是简写,真正区分命名空间的是URI。
主要的命名空间
下表列出了你会经常遇到的命名空间:
| 前缀 | 命名空间URI | 用途 |
|---|---|---|
w | http://schemas.openxmlformats.org/wordprocessingml/2006/main | WordprocessingML主命名空间,绝大多数元素都在这里 |
r | http://schemas.openxmlformats.org/officeDocument/2006/relationships | 关系引用 |
a | http://schemas.openxmlformats.org/drawingml/2006/main | DrawingML,绘图(图片、图形) |
wp | http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing | Word绘图 |
pic | http://schemas.openxmlformats.org/drawingml/2006/picture | 图片 |
mc | http://schemas.openxmlformats.org/markup-compatibility/2006 | 标记兼容性 |
ct | http://schemas.openxmlformats.org/package/2006/content-types | 内容类型 |
rel | http://schemas.openxmlformats.org/package/2006/relationships | 包级关系 |
本书后面的示例代码中,我们会一直使用这个常用前缀约定。
完整参考
所有命名空间的完整参考放在附录A,需要时可以查阅。
4.3 Open XML设计原则
Open XML在设计上遵循几个重要原则:
1. 显式优于隐式
Open XML尽可能显式地写出格式设置,而不是依赖大量默认值推断。这样更容易处理。
当然,为了文件大小,仍然有很多可选的默认设置,但总体原则是显式。
2. 去中心化结构
不同类型的内容放在不同的XML文件中:
- 主内容在document.xml
- 样式在styles.xml
- 页眉单独文件
- 图片单独文件
好处:
- 只需要修改需要改的部分
- 一部分损坏不影响其他部分
- 工具可以只处理它关心的部分
3. 向后兼容
通过标记兼容性(Markup Compatibility)机制,新版本可以添加新元素,旧处理器可以安全忽略它们。
4. 开放透明
格式完全开放公开,任何人都可以实现,不需要专利许可。
4.4 标准与实现
标准归标准,实现归实现。实际情况是:
Microsoft Word的实际实现
- 虽然有标准,但Microsoft Word在实际保存docx时会有自己的一些习惯
- 偶尔会有一些扩展
- 绝大多数情况都符合标准
- 主要功能都兼容
其他软件的实现
- LibreOffice、WPS等都能读写docx
- 基本兼容
- 复杂格式偶尔会有差异
给开发者的建议
- 遵循标准写法,绝大多数软件都能正确打开
- 测试的时候最好在Word、LibreOffice都验证一下
- 复杂格式需要注意兼容性
本章小结
- Open XML定义了三种文档类型,我们关注WordprocessingML(.docx)
- XML命名空间用来区分不同XML词汇
- 记住主要的命名空间前缀约定,本书一直使用这个约定
- Open XML设计原则:显式、去中心化、向后兼容、开放
下一章我们入门文档结构,看看一个最简单的document.xml长什么样。