现在的位置: 首页 > 综合 > 正文

Microsoft Office Word 2003 中的 XML

2012年07月18日 ⁄ 综合 ⁄ 共 6496字 ⁄ 字号 评论关闭

Microsoft Office Word 2003 中的 XML

发布日期: 11/26/2004 | 更新日期: 11/26/2004

Aaron Skonnard

几年以前,我开始一个新书项目的时候,就决定以 XML 形式编写整个项目。 我认为在 XML 中完成该书可以允许我在其他地方重复使用内容、将内容转换成不同的输出格式并且可以方便地利用众多的 XML 技术(包括 XPath、XSLT、各种 XML API、甚至是 XQuery)。

当我开始调查如何完成该项目的时候,我打开了 Microsoft® Office Word 2000,开始进行试验。 我不断寻找既可以使用 Word 的多信息编辑和格式功能来创作章节又可以定义 Word 文档和 XML 结构之间映射的方法。 这样会允许我在熟悉的 Word 环境中工作来生成 XML 内容。 当我试验“Save as HTML”功能时(当时使 Word 生成标记文档只有这种技术可以使用),很明显需要有“保存为 XML ”选项。 因此,我再次使用好用的旧版 Emacs 来手工编写 XML。 在完成了数以千计的角括号之后,我发誓再也不会这么做了。

尽管整个书以 XML 格式编写非常有价值,但道路是相当艰辛的。 幸好,现在 Microsoft Office Word 2003 可用了。

*

本页内容
Word 2003 中的 XML 支持 Word 2003 中的 XML 支持
WordML 简介 WordML 简介
使用 WordML 使用 WordML
自定义架构 自定义架构
架构验证 架构验证
保存文档 保存文档
应用转换 应用转换
小结 小结


Word 2003 中的 XML 支持

Word 2003 中新增的 XML 支持是其最令人兴奋和最强大的功能之一。 XML 不再是事后添加的,因为 Word 已经彻底地针对 XML 进行了完整地设计。 它支持被称为 Word 标记语言 (WordML) 的本机 XML 语汇。 有关 WordML 的详细信息,可以从 Microsoft Office Word 2003 Preview 找到。

Microsoft Office Word 2003 引入了生成 WordML 文档的“Save as XML”命令。 从这以后,当您双击一个由 Word 生成的 XML 文档时,Windows 加载程序会自动将该文件与 Word 进行关联。WordML 非常强大和灵活,足以包括带有全部功能的 Word 文档的所有多信息编辑和格式。 如果在 Word 中创建通常的文档,将其保存为 WordML,然后再从 Word 中打开,该文档保证与原始样式一样。

下面就是 WorldML 文档的基本结构:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?mso-application progid="Word.Document"?>
<w:wordDocument 
    xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" ...
>
   <!-- WordML structure goes here -->
</w:wordDocument>

请注意,这就是一个 XML 文档。 根元素的名称 wordDocument 来自 http://schemas.microsoft.com/office/word/2003/WordML 命名空间(我将使用前缀“w”来指代该列中的这个命名空间)。 当您从 Windows 资源管理器中双击该文件时,Windows® 会自动确定它是 WordML 文档(通过检查顶部的 mso-application 处理说明),然后启动 Word 对其进行处理。

WordML 的引入可能是 Microsoft Office Word 2003 中最为重要的更改,但绝不是唯一的更改。 开发人员还可以将自定义的 XML 架构定义和 XSLT 转换附加到 Word 文档。 开发人员可以利用附加的架构中的元素标记内容,这样就可以插入用于简化处理过程的有意义的业务特定标记。 在 Word 中保存文档时,它可以根据附加的架构验证文档并可以在处理过程中应用自定义的 XSLT 转换。 该列的其余部分将详细分析这些吸引人的新增功能。


WordML 简介

WordML 架构设计用于镜像传统 .doc 文件中的信息。 WordML 的架构是 Microsoft Word XML 内容开发工具包 (CDK) Beta 2 的组成部分,您可以从 MSDN Microsoft Office 2003 Downloads 进行下载。 WordML 文档的根元素始终为 w:wordDocument。w:wordDocument 包含表示完整 Word 文档结构(包括属性、字体、列表、样式以及包含章节、段落的实际文档正文)的几个其他元素,如图 1 所示。

图 2 显示了带有通常格式的 Word 文档,包括指定样式(例如标题 1)、级联样式(粗体和斜体)和简单的正文。

fig02

图 2 WordML 格式的文档

显示在图 2 中的文档的 o:DocumentProperties 元素包含可用于所有 Office 文档的文档属性,例如标题、作者、上次保存者、创建日期、上次保存日期等等(请参见图 3)。 o:DocumentProperties 元素来自不同于 WordML 的命名空间,因为它会应用到所有 Office 文档,并且将与其他 Office XML 语汇(例如 ExcelML)进行共享。

w:fonts 和 w:styles 元素包含文档中使用的字体和样式信息。 文档中使用的每种字体或样式都将使用其中一个元素中的 XML 元素来表示。 图 4 展示了在图 2 中看到的文档的字体和样式信息。

w:docPr 元素包含给定文档的 Word 特定属性,例如查看和缩放设置,如下面的代码片段所示:

<w:docPr>
  <w:view w:val="print"/>
  <w:zoom w:percent="100"/>
  <w:doNotEmbedSystemFonts/>
  <w:proofState w:spelling="clean" w:grammar="clean"/>
  <w:attachedTemplate w:val=""/>
  <w:defaultTabStop w:val="720"/>
  <w:characterSpacingControl w:val="DontCompress"/>
  ...
</w:docPr>

最后,w:body 是文档内容所在的元素。 w:body 元素包含章节,而章节包含段落和表格。 段落和表格是分别使用 w:p 和 w:tbl 元素创建的。 段落和表格最终由文本运行元素 (w:r) 组成,该元素可以使用其他属性和样式进行批注。 图 5 展示了在图 2 中的文档的 w:body 元素。

正如您可以看到的那样,原始 Word 文档中所有格式都会以某种形式在 WordML 文档中表示出来。 这样就可以不在丢失任何信息的情况下在 .doc 和 .xml 文件之间移动数据。


使用 WordML

文档使用 WordML 格式的主要好处在于,您可以使用任意编程语言在任意平台上使用 XML API(DOM、SAX、XmlReader 等等)处理它们。 您还可以使用像 XPath 和 XSLT 这样的高级 XML 服务来处理 WordML 文档。 例如,如果使用以下 XPath 表达式,打开 WordML 文档并确定标记为标题 1 样式的所有 w:p 元素就是小事一桩:

//w:p[w:pPr/w:pStyle/@w:val = 'Heading 1']

您还可以编写 XSLT 转换以便在 WordML 和其他基于文本的格式之间移动。 例如,在 图 6 中显示的 XSLT展示了一种将 WordML 转换成简单 HTML 结构的方法。 针对在图 2 中显示的 WordML 文档运行这种转换会产生在图 7 中显示的 HTML 文档。 (另一个转换可以从 WordML to HTML XSL Transformation 获得。)

fig07

图 7 文档转换到 HTML

除了更易于处理 Word 文档外,WordML 还可以使得生成 Word 文档变得更加简单。 因为它们就是 XML,您可以使用任何用于生成 XML 的标准技术来生成 Word 文档。 例如,快速编写生成 WordML 文档的 ASP.NET 页面是小事一桩,在图 8 中展示了这种技术。

fig09

图 9 ASP.NET 页

该 ASP.NET 页会产生相同的文档,只是现在标题包含“Hello [name]”,其中 [name] 将替换为在查询字符串中提供的值。 使用查询字符串“?name=Aaron”浏览到该 ASP.NET 页会产生图 9 中显示的文档。


自定义架构

除了 WordML,Microsoft Office Word 2003 还包括对自定义 XML 架构定义 (XSD) 的支持,这样可以将一个或多个自定义架构附加到给定 Word 文档中。 然后,可以利用附加的架构中的元素对文档进行批注。 这样,您可以将业务相关的标记插入到文档中,这样可以围绕相关业务标识符(而不是更通用的 WordML 标记)来处理的文档。

例如,考虑一个包含有关新员工信息的 XML 文档。 您可以使用图 10 显示的员工架构中的元素来批注该文档。 要完成该操作,必须首先将架构附加到 Word 中的 XML 文档。

通过从菜单中选择“Tools | Template and Add-Ins”,可以将 XML 架构定义附加到 Word 文档。 将会出现一个包含 XML 架构选项卡的对话框,您可以在其中管理架构库并选择要附加到该特定文档的架构(请参见图 11)。 还可以指出 Word 是否应该验证文档,以及甚至是否应该允许用户保存无效文档。

fig11

图 11 管理架构

在添加架构后,就可以开始利用该架构中的元素批注文档。 Word 中的 XML 架构窗格(显示在右侧)允许您将附加的架构中的自定义元素插入到文档中。 XML 结构窗格还为您提供了一个针对在当前整个文档中存在的自定义元素的界面,方法是在该窗格内显示这些元素的逻辑树结构。

图 12 显示了 XML 结构窗格以及如何选择自定义元素插入到文档中。 在此例中,我从 urn:employees 命名空间中选择 Employee 元素插入到文档中。 当我双击某个自定义元素时,Word 会将当前突出显示的文本包括在该元素中。 在第一次插入自定义元素时,Word 会询问是否将整个文档包围在该元素中,这通常是您想要执行的操作。

fig12

图 12 将自定义元素插入到文档

在完成该操作后,Word 将会在文档中显示 XML 标记,这样您就可以看到它们出现的位置。 图 12 展示了在插入 Employee 元素包围整个文档后文档的样子。 如果不想看到可见的 XML 标记,可以通过取消选中“Show XML tags in the document”复选框来隐藏它们。

fig13

图 13 嵌入式元素的树结构

在将其他元素插入到文档时,Word 会在 XML 结构窗格的顶部显示自定义元素的逻辑树结构。 该视图只显示嵌入式的自定义元素,这样在其中选择文本会非常方便(如图图 13 中的 Last 元素所示)。


架构验证

在插入自定义元素后,Word 将开始验证文档内容(假设在附加架构时已经选择了该选项)。 在文档的左下方出现的紫色线(如图 12 所示)表示 Employee 元素的内容当前是无效的(在此例中,因为它缺少一些必需的子元素)。 XML 架构窗格中的 Employee 元素旁边的黄色图标表示相同的情况。 右键单击两项中的任意一项就将会显示该问题。

当您将光标放在 Employee 元素内时,Word 会根据该架构自动确定 Employee 下允许的子元素,并且在 XML 结构窗格的底部显示它们。 在此例中,Word 显示 ID、Name 和 Phone 元素,这样可以非常简单地选择某些文本并且快速应用它们(请参见图 12)。

Word 还会针对架构中的简单类型定义验证文本内容。 例如,图 10 中的架构包含两个简单类型: 一个称为 SSN,另一个称为 Phone。 这两个简单类型都使用一个模式方面(正则表达式)来限制字符串。 图 14 展示了操作中的简单类型验证。 请注意,如果它没有位于简单类型的值空间中,则紫色线会出现在文本下方。 在这种情况下,右键单击它,Word 会指出该文本没有遵循必需的模式 (\d{3}-\d{2}-\d{4})。 在键入时,会迅速发生所有这些情况。

fig14

图 14 类型验证

在您添加所有必需的元素并使该文本符合正在使用的简单类型定义后,文档应该如图 13 所示。 在所有紫色线都消失后,您就知道文档是有效的了。 在默认情况下,Word 不会让您将存在验证问题的文档保存为 XML。 但是,选择“Allow saving as XML even if not valid”选项(请参见图 11)可以在文档尚未完全有效的情况下保存文档。 当您保存带有自定义元素的文档时,您必须决定是否要在输出中包括 WordML 标记。


保存文档

在保存带有自定义元素的 Word 文档时,您有两个选项。 默认选项是将文档保存为带有嵌入到树中的自定义元素的 WordML。 其他选项是“Save data only”,这会删除 WordML 标记并只保留自定义元素树结构。

例如,图 15 展示了 Employee 和 ID 元素在图 13 中文档的 WordML 中的位置。 需要注意的一件事情是,根据该架构,Employee 元素不会正式允许包含除 ID、Name 和 Phone 之外的子元素,这样 w:p 子元素会使文档无效。 您可能会问 Word 如何认为文档有效呢?因为在保存前没有任何紫色指示符了。 这表明在忽略 WordML 标记存在的情况下(因为您可以选择排除它),Word 具有足够的智能来确定有效性。

fig16

图 16 仅保存为数据

当选择“Save data only”(请参见图 16)时,Word 会删除 WordML 标记,并且仅保存文档中的自定义元素。 但是,这样做会导致您丢失可能应用到文档中的所有特殊格式。 图 17 显示了在以这种方式保存时员工文档的样子。 请注意,完全符合附加架构的 XML 文档更简单清晰了。

fig17

图 17 没有格式的文档


应用转换

在保存文档时,您可能希望同时生成完全不同的格式(可能甚至不是 XML)。 为了满足这个要求,Word 会在保存过程中应用 XSLT 转换。 通过在“Save As”对话框中选择“Apply transform”选项,可以指定一个转换(请参见图 16)。 简单地从磁盘中选择一个 XSLT,Word 将会运行该转换并会在每次保存文档时输出该结果。

可以通过架构库将多个转换与给定的架构关联在一起,从而就创建了所谓的 Word 解决方案。 这样,对于所有实现给定架构的文档,这些转换都可用。 如果给定文档具有多个可用的 XSLT 转换,Word 会使它们在 XML 文档窗格(位于右侧)中可用,这样您可以在 Word 中的同一文档的多个视图中很容易地切换。

Word 还支持在打开文档时使用转换。 Word 在“Open”对话框中提供了“Open as XML”选项,您可以选择想要使用的特定转换。 当选择该选项时,Word 会打开应用转换的结果,而不是打开您选择打开的原始文档。


小结

对于 XML 提供的支持而言,Microsoft Office Word 2003 将其前辈远远地抛在身后了。 对 WordML 的本机支持可以在无需抛开 XML API 的优点的同时构建强大灵活的内容解决方案。 另外,内置的 XML 架构支持、实时验证以及不同的 XSLT 技术让使用自定义 XML 架构和输出格式信手拈来。

除了此处介绍的核心 XML 功能外,Microsoft Office Word 2003 还可以完全通过 Visual Basic? for Application 和 the Microsoft Word XML CDK Beta 2 进行编程。Microsoft Office Word 2003 将会对使用文档驱动其业务的组织产生巨大影响。 要获得完整的示例,请检查包括在 CDK (Microsoft Office 2003 Downloads) 中的 DocLibrary (Contoso, LLC) 示例。

要向 Aaron 提出问题和意见,请发送电子邮件至 xmlfiles@microsoft.com.

Aaron Skonnard 是 Northface University (http://www.northface.edu) 的助教并且是 .NET 项目的主管,他正在努力将该大学建成全球最好的软件开发人员的大学。 Aaron 与他人合著了 Essential XML Quick Reference (Addison-Wesley, 2001) 和 Essential XML (Addison-Wesley, 2000)。 您可以通过以下网址与 Aaron 联系:http://www.skonnard.com

转到原英文页面

抱歉!评论已关闭.