Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第4章:Open XML标准与ECMA-376

学习目标

  • 了解Open XML标准的组织
  • 理解WordprocessingML的概念
  • 了解XML命名空间在Open XML中的作用
  • 掌握主要的XML命名空间

4.1 什么是Open XML

Open XML全称是Office Open XML,是一个描述Office文档的开放文档标准。

Open XML不是一个单一格式,它是一个标准框架,定义了三种文档类型:

文档类型文件扩展名标记语言名称用途
文字处理.docxWordprocessingMLWord文档
电子表格.xlsxSpreadsheetMLExcel工作簿
演示文稿.pptxPresentationMLPowerPoint演示文稿

本书只关注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用途
whttp://schemas.openxmlformats.org/wordprocessingml/2006/mainWordprocessingML主命名空间,绝大多数元素都在这里
rhttp://schemas.openxmlformats.org/officeDocument/2006/relationships关系引用
ahttp://schemas.openxmlformats.org/drawingml/2006/mainDrawingML,绘图(图片、图形)
wphttp://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawingWord绘图
pichttp://schemas.openxmlformats.org/drawingml/2006/picture图片
mchttp://schemas.openxmlformats.org/markup-compatibility/2006标记兼容性
cthttp://schemas.openxmlformats.org/package/2006/content-types内容类型
relhttp://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长什么样。