Vincent.Chan‘s Blog

常用链接

统计

积分与排名

网站

最新评论

Thinking XML: 开放的办公文件格式::一种用于前台办公文档的 XML 格式

级别: 初级

Uche Ogbuji, 首席顾问, Fourthought, Inc.

2003 年 1 月 01 日

OpenOffice.org 是一种成熟的、开放源码的前台办公应用程序套件,它的优点是一种基于开放 XML DTD 的已保存文件格式。这使得在处理 OpenOffice.org 产生的工作时,向用户和开发人员提供了极大的灵活性和能力。在本文中,Uche Ogbuji 介绍了 OpenOffice 文件格式并说明了其优点。

当标记支持者尝试向大众证明 象 XML 这样的技术突破的价值时,他们几乎总是提供专用的、二进制文件格式的示例 — 而最常用的示例是已保存的字处理器文件。对 XML 文件格式前身的讨论通常会包括用逗号分隔的文件格式,这些格式极频繁地用于电子表格和数据库的导入和导出。由 前台办公(或只是 办公)工具 — 字处理器、电子表格、表示软件、联系人管理器等 — 产生的已保存文件保存了大量表示用户知识的数据。您的笔记、备忘录、提议、分析、计划和组织化工具都是知识管理的主要内容。当您升级或迁移任何此类软件 时,一个主要问题就是新方案是否要导入旧文件。当执行备份时通常会从这些办公文件入手。

供应商知道这一点并理解其中的微妙之处:使他们的专用文件格式足够重要,这样您不得不“忠诚”地使用他们 的软件,但同时又使他们的工具足够灵活,可以接受由竞争对手的软件产生的文件格式。但是标记支持者(尤其是 XML 支持者)指出您根本不必屈从于这种“貌似仁慈的囚禁”。有人提出主张,“您为什么不 100% 地控制此类重要的数据?”又有人提出,“为什么不可以用任何文本查看器轻松地打开文件,以理解内容呢?”于是提出了 XML 作为解决方案。XML 不但是纯文本的,而且提供了一个工具箱,使不同 XML 格式之间能够相互转换。有了它,真是透明性和互操作性的福音。

正 如人们所预料的,越来越多的办公工具提供了 XML 输出。最近,Microsoft 在其办公套件的最新版本里,对 XML 集成和导出能力进行了较大改进。OpenOffice.org 项目从 StarOffice 派生出完整的、开放源码的办公套件,该项目将 XML 用作其核心文件格式,而不是作为单独的导出选项。OpenOffice 包括字处理器、电子表格、演示工具和图形/图表化工具。该工具已经问世很长时间(它大约出现在 1994 年),并具有您认为任何此类办公套件应具有的优点和特性。

OpenOffice.org 的铁杆支持者(OpenOffice.org 网站的志愿参与者和用户)都同意将 OpenOffice 文件格式做得尽可能开放和通用,他们都希望在众多的办公文件格式之间能够有更大的互操作性和灵活性。除了这个目标之外,他们还将文件格式贡献给结构化信息 标准促进组织(Organization for the Advancement of Structured Information Standards,OASIS)的一个新技术委员会(TC)。我是该委员会的创始成员,我认为 OpenOffice 格式可以成为有价值的社区资源,用来将我们在工作和联系中使用的人类可读文档与可增加这些文档总体价值的各种元数据管理连接起来。在本文中,我将介绍 OpenOffice 文件格式。

XML 和办公软件交汇了,这是一个有趣的时刻。有许多关于最新的 Microsoft XDocs 技术的讨论,以及关于它会不会跟 XForms(OpenOffice 格式)和其它此类项目形成竞争或相辅相成的讨论。我不会在本文中论及任何相关主题 — 部分原因是篇幅不够,还有部分原因是 XDocs 的详细信息才刚披露。此外,在本文后面的部分中,我将使用名称“OpenOffice”而不是使用完整的正式名称“OpenOffice.org”。

整体格式

我启动了 OpenOffice 1.0.1 for Linux(我很高兴发现它是随 Red Hat 8.0 一起提供的),然后创建了一个文档,如 图 1所示。


图 1. OpenOffice 字处理器会话
OpenOffice 字处理器会话

如您所见,编辑界面很象任何其它 WYSIWYG(所见即所得)字处理器屏幕(OpenOffice 用户界面不在本文讨论范围之内)。我将文件保存为 document.sxw。 由于所有文件都是以 OpenOffice 本机格式保存的,所以这实际上是一个包括一组 XML 和其它支持文件的 ZIP 文件 — 一种称为 OpenOffice 包格式的捆绑包。关于使归档文件约定标准化以打包多个相关的 XML 文档及其支持文件的想法,是一种流行的和惯用的思想:XML 专家 Rick Jelliffe 开发了一种基于 ZIP 的 XML 应用程序归档(XML Application Archive,XAR)格式;还有“直接因特网消息封装”(Direct Internet Message Encapsulation,DIME),它是一个因特网草案(Internet Draft),但要复杂得多,并且主要是针对消息传递和 Web 服务而不是通用的归档文件。OpenOffice 使用它自己的格式,接下来我将研究这种格式。请参阅 参考资料以获取关于这些格式的更多信息。

document.sxw的 ZIP 内容如下:

												
														
$ unzip -v document.sxw
Archive: document.sxw
Length Method Size Ratio Date Time CRC-32 Name
-------- ------ ------- ----- ---- ---- ------ ----
2946 Defl:N 965 67% 12-13-02 04:03 44fee85c content.xml
4638 Defl:N 1199 74% 12-13-02 04:03 791e906a styles.xml
1120 Stored 1120 0% 12-13-02 04:03 a921529c meta.xml
6183 Defl:N 1362 78% 12-13-02 04:03 c8586553 settings.xml
752 Defl:N 254 66% 12-13-02 04:03 11144701 META-INF/manifest.xml
-------- ------- --- -------
15639 4900 69% 5 files

“第一站”是 META-INF/manifest.xml,它在某种程度上担任包中所有其它文件的中央目录。 清单 1是来自我样本文档的清单文件。


清单 1:图 1 中所示的已保存样本文档的清单
												
														
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE manifest:manifest PUBLIC "-//OpenOffice.org//DTD Manifest 1.0//EN"
"Manifest.dtd">
<manifest:manifest xmlns:manifest="http://openoffice.org/2001/manifest">
<manifest:file-entry manifest:media-type="application/vnd.sun.xml.writer"
manifest:full-path="/"/>
<manifest:file-entry manifest:media-type="" manifest:full-path="Pictures/"/>
<manifest:file-entry manifest:media-type="text/xml" manifest:full-path="content.xml"/>
<manifest:file-entry manifest:media-type="text/xml" manifest:full-path="styles.xml"/>
<manifest:file-entry manifest:media-type="text/xml" manifest:full-path="meta.xml"/>
<manifest:file-entry manifest:media-type="text/xml" manifest:full-path="settings.xml"/>
</manifest:manifest>

所有 OpenOffice 格式都使用 DTD,我认为这样很好,因为拥有一个模式,有助于强制格式的互操作性,并且选择 DTD 还确保了对 XML 工具的最广泛支持。警告:要用通用的 XML 工具处理这些文件,您要么必须使用编目(catalog)以解析公用标识,将被指定为系统标识的 Manifest.dtd 文件复制到相同目录中,要么仅使用不读取外部 DTD 子集的工具。OpenOffice 为所需的 DTD 和实体维护一个内部编目。可以在 OpenOffice 安装的共享目录中找到 OpenOffice DTD。例如,在我的 Red Hat 8.0 安装中,它们位于 /usr/lib/openoffice/share/dtd/ 中,而清单 DTD 在 /usr/lib/openoffice/share/dtd/officedocument/1_0/ 中。您也可以在线从 OpenOffice 网站(请参阅 参考资料)下载或访问这些 DTD。清单文件使用公共的 OpenOffice 名称空间,并通常包括一个向每个文件提供因特网媒体类型(IMT)和相关 URL 的项元素列表。用于子文件夹的 media-type 属性是空的(例如我示例中的 Pictures 文件夹),但通常会在这些子文件夹中包含任何嵌入图形的图形源文件。

meta.xml包括一系列具有文档元数据的元素(如创建和最后编辑日期、已经花费在编辑该文档上的总时间、字数、页数、表数和图数等元素)。您可以将 styles.xml看 作 XML 格式中的级联样式表(CSS)和 XSL 格式化对象(XSL-Formatting Objects,XSL-FO)之间的交叉点。它定义了各种样式,这些样式可用于文档的字体、间距、修饰、间隔、制表符停止位等方面编辑会话。它命名了所 有样式,因此您可以在其它文件中引用它们。 settings.xml记录用户对 OpenOffice 用户界面的用户首选项。这些涉及到用来编辑文档的应用程序的细节,而不是文档本身的任何细节。这个领域还需要完成一些工作以确保互操作性。总之,如果在多 个应用程序(都使用 OpenOffice 格式)中编辑同一文档,不能期望每个应用程序都维护同样类型的设置 — 但即使如此,又如何防止它们发生冲突呢?





回页首


处理内容

文档的核心(实际内容)在 content.xml中。遗憾的是,在文本编辑器中,乍看上去这个文件中的元素有点过于混乱,但是您可以用多种常见的 XML 工具(包括 XSLT)抽取出字符数据,允许使用空样式表(请参阅 清单 2)。


清单 2:空 XSLT 样式表
												
														
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"
>
<xsl:output method="text"/>
</xsl:stylesheet>

这个空样式表使用了所有缺省模板规则,其作用是将所有标记从 XML 文件中剥离。我指定文本输出方法,以避免在输出中获得 XML 文本声明。这个脚本可以和任何 XSLT 处理器一起使用:

												
														
$ 4xslt content.xml null.xslt

产生下列输出:

This new column, Thinking XML, will cover the intersection of XML andknowledge architecture (KA). Knowledge architecture sounds likesomething tossed out by a jargon bot, but it's really just an umbrella termfor some very useful technologies that are emerging now that XML is enteringits adolescence. Metadata management, semantic transparency, and autonomousagents are hardly concepts unique to XML, but the promise of XML to unifythe syntax of structured and semistructured data helps turn the next-to-impossibleinto the feasible.

请注意丢失的空格。看起来 OpenOffice 在依照用户编辑模式标记文档中的样式这方面是相当严格的。下面的行有许多内容:

												
														
<text:s/><text:span text:style-name="T2">Knowledge architecture</text:span> sounds
like</text:p><text:p text:style-name="Standard">something tossed out by a jargon bot,
but it's really just an umbrella term</text:p>

(在先前的代码样本中,为了便于阅读,代码从单词之间分隔开来,并在多个行上显示。实际上,该代码是很长的一行。)

该 文本被划分成多个元素,并且 OpenOffice 按需填充空格。XSLT 处理器不执行相同的补救措施,因此出现了您在上面的输出中所看到的效果。您也可以对几个简单的 XSLT 模板做相同的操作,在元素范围之间添加空格。但是此处的关键是可以用通用工具非常有效地处理这种文件格式。





回页首


结束语

在本专栏文章中,我对 OpenOffice 文本文件格式进行了概述,但该项目并不是生成一个文本格式然后就不管它了。OpenOffice 提供了内容丰富的工具箱,用来集成 XML 工具,并且第三方工具的队伍也在日益壮大。这些工具包括 SAX 过滤器、XSLT 插件,甚至包括低级别 Java API。该社区的开发人员已经使用这些工具来增加 OpenOffice 的能力,这些能力包括装入和保存 Docbook、HTML、TeX、纯文本以及 PalmOS 和 PocketPC 所用的文档格式。

XMerge 项目用于在诸如 PDA 和移动电话之类的小型设备上处理 OpenOffice 内容。XMerge 开发工作进展相当迅速,供应商(如 Nokia)已经决定参与该项目。由此可见 OpenOffice 所秉承的开放原则的另一个巨大优势。它鼓励了来自各种广泛来源的贡献,甚至是来源于商业利益,谁都知道开放带来公平竞争,而使用专用格式则相反。 XMerge 使用 XSLT 插件进行文档转换,这也确保了跨平台支持。

在 Open Office XML format TC(开放办公 XML 格式技术委员会)(请注意拼写上的差异)中,我们将继续改进这些文件格式,并时刻关注着互操作性的更进一步增强。这是一个带有开放邮件列表的开放过程,任 何 OASIS 成员都可以正式加入。我鼓励所有对管理前台办公文档感兴趣的人都来参与,包括那些倾向于轻松愉快地使用任何他们所熟悉的工具来处理 OpenOffice 文件的人。毕竟,它只是 XML。





回页首


参考资料





回页首


关于作者

Uche Ogbuji 的照片

Uche Ogbuji 是 Fourthought Inc.的顾问和共同创始人,该公司是一家专为企业知识管理提供 XML 解决方案的软件供应商和咨询公司。Fourthought 开发了 4Suite,这是用于 XML、RDF 和知识管理应用程序的开放源码平台。Ogbuji 先生是出生于尼日利亚的计算机工程师和作家,他目前在美国科罗拉多州博耳德生活和工作。您可以通过 uche.ogbuji@fourthought.com与 Ogbuji 先生联系。

posted on 2006-03-21 23:50 Vincent.Chen 阅读(536) 评论(0)  编辑  收藏 所属分类: XML


只有注册用户登录后才能发表评论。


网站导航: