第2章:Open XML —— Word格式的现代化之路
学习目标
- 了解Word格式的演化历史
- 理解为什么会从二进制演变为XML
- 了解Open XML的标准化过程
- 理解向后兼容性的挑战
2.1 Word格式的演化简史
1. 二进制时代(1983-2006)
Word 1.0于1983年发布,从那时起一直到Word 2003,Word一直使用自定义的二进制文件格式。
这个阶段的特点:
- 格式不公开,只有Microsoft掌握完整细节
- 基于二进制流,解析非常困难
- 随着Word功能增加,格式越来越复杂
- 不同Word版本之间存在兼容性问题
即使在今天,一些老旧的文档仍以.doc格式存在。
2. Open XML诞生(2007)
2007年,Microsoft发布Office 2007,带来了全新的Open XML格式,默认扩展名从.doc变为.docx。
这次变革的主要原因:
- 开放性:二进制格式是私有的,XML格式开放标准
- 可互操作性:其他软件更容易正确处理docx文件
- 压缩存储:基于ZIP压缩,文件更小
- 容错性:一个部分损坏不会导致整个文件报废
- 易于处理:XML是标准格式,有大量工具库支持
3. 标准化(2008至今)
- 2008年:Ecma International将Open XML批准为标准(ECMA-376)
- 2012年:ISO/IEC将Open XML批准为国际标准(ISO/IEC 29500)
- 至今:Open XML持续更新,支持新功能
现在,.docx已经成为事实上的办公文档标准,不仅Microsoft Word,LibreOffice、WPS等都支持。
2.2 为什么选择XML
为什么Microsoft选择XML作为新的格式基础?XML有什么优势?
XML的优势
- 结构化:XML使用标签清晰地表达结构,便于计算机解析
- 自描述:标签本身说明了内容是什么,可读性好
- 标准技术:有大量成熟的工具库处理XML
- 易于调试:XML是文本,可以直接用文本编辑器打开查看
- 扩展性好:新增功能不需要破坏原有格式
对比二进制格式
| 方面 | 二进制 | XML |
|---|---|---|
| 可读性 | 不可读 | 人类可读 |
| 解析难度 | 高 | 低 |
| 文件大小 | 未压缩时较大 | ZIP压缩后更小 |
| 扩展性 | 差 | 好 |
| 容错性 | 差(一点坏全坏) | 好(部分坏部分坏) |
| 工具支持 | 少 | 多 |
关于文件大小
你可能会问:XML是文本,比二进制冗余,文件岂不是更大?
实际上:
- .docx本质是ZIP压缩包,XML文本压缩率很高
- 实际测试中,相同内容的.docx通常比.doc小30%-50%
- 现代存储容量很大,文件大小已经不是主要问题
2.3 Open XML标准是什么
Open XML全称是Office Open XML,简称OOXML,是描述Office文档的开放标准。
标准涵盖什么
Open XML不仅仅涵盖Word文档,它涵盖了整个Office:
- WordprocessingML:处理文字处理文档(就是.docx)
- SpreadsheetML:处理电子表格(.xlsx)
- PresentationML:处理演示文稿(.pptx)
本书只关注WordprocessingML,也就是Word文档部分。
两个标准组织
Open XML有两个版本的标准:
- ECMA-376:由Ecma International维护,更新更频繁
- ISO/IEC 29500:国际标准化组织的国际标准
两者基本一致,细节略有差异。对于大多数开发者,不需要关心这些细节差异。
在哪里获取标准
官方标准可以从以下位置获取:
- Ecma官网:https://www.ecma-international.org/publications-and-standards/standards/ecma-376/
- ISO官网:https://www.iso.org/standard/51407.html
标准文档非常详尽(几千页),但也非常枯燥。本书会提取开发者真正需要知道的内容,不需要你去阅读几千页的原始标准。
2.4 向后兼容性的挑战
格式变革带来了很多好处,但也带来了兼容性问题。
兼容性问题
- 使用Word 2003及更早版本无法直接打开
.docx文件 - Microsoft为此发布了兼容包,可以让旧版本Word打开docx
- 现在绝大多数用户已经升级到支持docx的版本
- 但一些非常老旧的系统仍可能遇到问题
兼容性处理建议
开发中处理Word格式时:
- 优先使用.docx:这是现在的主流,几乎所有软件都支持
- 只在需要时支持.doc:如果用户确实有旧文档需求再支持
- 转换为docx处理:收到doc文件可以先转换为docx再处理
- 不要生成新的doc:新生成的文档都应该用docx格式
2.5 当前格式生态
现在的.docx格式生态是怎样的?
支持.docx的软件
- Microsoft Word 2007及以后版本
- LibreOffice / OpenOffice
- WPS Office
- Google Docs(可导入导出)
- 大多数现代文字处理软件
编程库支持
因为是开放标准,现在有很多编程语言库可以处理docx:
- Python:python-docx, python-pptx, docx2txt
- Java:Apache POI (XWPF)
- .NET:Open XML SDK, DocX
- JavaScript:docx, mammoth
- PHP:phpword
本书后续会介绍一些常用库的使用,但重点还是理解格式本身。掌握了原理,你可以在任何语言上使用这些库。
本章小结
- Word格式经历了从二进制到Open XML的演化
- XML带来了开放性、可互操作性、更好的容错性
- Open XML是开放的国际标准,涵盖Word、Excel、PowerPoint
- 本书只关注WordprocessingML(.docx)部分
- .docx是现在的主流格式,优先使用docx
现在我们已经有了基础认识,下一章我们动手实践,打开一个docx文件,看看它的庐山真面目。