图片 6

『Office Word 2007新增功能』超越文档

XML 是一种用于组织和存储数据的开放式行业标准语言。数据采用 XML
语言意味着该信息可传输,并可轻松共享和重用。Office Word 2007
以多种方式支持 XML。Word 的新默认文件格式是 Open XML
格式,这种文件格式基于 XML,既紧凑又可靠。Office Word、Excel 和
PowerPoint 2007 的 Open XML
格式显着减小了文档大小,提高了已损坏文档的数据恢复能力,并提供了与外部系统和实时数据源之间的集成。

将文档与业务信息连接

解析Word 2007文件

这个章节将带您浏览一个Word
2007新文件格式的文件中主要的文档部件。它还列出了这些部件之间的关系,并使用默认的目录结构来展示。

理解根级别的关系

所有使用Word
XML格式的文件的第一个部件都一个virtual文档部件,或者是包本身,这称为起始部件。在这个起始部件中,包含了许多到顶级部件的关系,它描述了文档的内容:

『Office Word 2007新增功能』超越文档。表 2. 根级别的部件,关系和内容类型

部件名称

关系类型

内容类型

可选?

核心文档属性(在开放打包约定中定义的)

application/vnd.openxmlformats-package.core-properties+xml

特定应用程序的文档属性

application/vnd.openxmlformats-officedocument.extended-properties +xm

自定义的OLE文档属性

application/vnd.openxmlformats-officedocument.custom-properties +xml

主要的文档部件

application/vnd.openxmlformats-officedocument.wordprocessingml.main+xml

这四个默认的部件包含了主要的文档属性,也是到文档根部件的引用,这是主要的文档内容。

理解文档级别的关系

在主文档部件中,有一系列由主文档引用的文档部件的关系,如表3所示。

注意,下面大多数关系都拥有下面的前缀:

http://schemas.openxmlformats.org/officeDocument/2006/relationships/

表 3. 文档级别的部件,关系和内容类型

部件名称

关系类型

内容类型

可选?

样式定义

/styles

application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml

列表定义

/lists

application/vnd.openxmlformats-officedocument.wordprocessingml.listDefs+xml

文档设置

/settings

application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml

页眉

/header

application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml

页脚

/footer

application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml

脚注

/footnotes

application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml

尾注

/endnotes

application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml

图片

/image

image/[image extension], such as image/png or image/jpeg

注释

/comments

application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml

字体表

/fontTable

application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml

自定义XML项

/customXML

application/xml

Web设置

/webSettings

application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml

这个部件列表不是非常完整。例如,它不包括共享的部件,例如OLE对象,Microsoft
ActiveX控件,和数字签名。但是,它为我们展示了一个典型Word 2007中Word
XML格式的结构。

确定包URI 和内容类型名称

像上面所描述的那样,您可以使用一个URI引用所有的关系,和几乎所有的文档部件。一共有两种类型的URI:一个是文档部件,另一个是关系。

在新的Word XML 格式中,URI关系通常由下列标记开始:

http://schemas.openxmlformats.org/officeDocument/2006/relationships/

例如,应用程序级别属性使用的关系类型如下:

/extended-properties

这个URI包换了officeDocument,因为Office XML文件格式暗示了这些关系。


是例外。注意,它使用package而不是officeDocument,表示它遵循XPS Open
Packaging Convention。这样的关系类型使用如下的URI前缀:

metadata/core-properties

URI描述了特定于文件的属性。关系URI是预先定义的。您不能修改它们。

文档部件的URI指向包中的文档部件。例如,包含文档主要信息的文档部件的默认URI是/word/document.xml。也就是说,主要的文
档信息包含在一个叫做document.xml的文件中,它位于包中根目录下的word目录中。佻可以重命名包中的文档部件,从而更改文档部件的URI。
非常重要的是,要在重命名或重新放置包中的文档部件时更新它们的关系。

Open XML应用安全(1)宏安全

宏是通过一次单击就可以应用的命令集。它们几乎可以自动完成你在程序中执行的任何操作,甚至还可以执行你认为不可能的任务。

宏是编程,但即使你不是开发人员也可以使用它们,甚至不需要知道任何编程知识。在Office程序中可以创建的多数宏都是用Microsoft
VBA (Visual Basic for Applications)语言编写的。

事实上,尽管多数宏是无害而且有益的,但宏是一个重要的安全问题。如果有人抱着恶意目的创建宏,这些宏可能包含损害你的文档或系统的破坏性代码。

对于Open XML支持的文档而言,凡是包含宏或代码的文档都会以特殊的名称保存,如Word文档的后缀名是docm,Excel工作簿的后缀名是xlsm,PPT演示文稿的后缀名是pptm,其中的字母“m”就代表了macro(宏),这样你可以很清楚地识别到当前的文档中是否有宏的存在。

另外,在默认情况下,新的Open
XML文件格式不执行文档中的宏和嵌入代码,还可以快速识别和删除文档中带有的身份信息和敏感信息,如用户名、备注和文件路径等。因此,以Open XML格式保存的文档将更加安全,可以放心地与他人进行文档的共享。

以Word 2007为例,打开Word选项→信任中心→宏设置,可以看到关于宏设置的选项。如图14-22所示。

图片 1

图14-22 
宏安全设置

从图14-22中可以看到,默认情况下会禁用所有宏,可以更改这一设置根据实际情况。

宏在Open XML包中作为一个二进制的OLE2文件存在指定的目录中,一般情况下,遵守如下规则:

q  Word:
word/vbaProject.bin

q  Excel:
xl/vbaProject.bin

q  PowerpPoint: ppt/vbaProject.bin

遗憾的是,宏并没有在Open XML的规范文档中被提及,并且OLE2文件的格式也不是公开的。下篇博客来了解什么是OLE,以及它和Office文档的关系。

—————-注:本文部分内容改编自《.NET
安全揭秘》

只有在安装加载项之后,才可以通过 2007 Microsoft Office system 程序另存为
PDF 或 XPS 文件。

如果将文档模板存储在 Microsoft Windows SharePoint Services 3.0
服务器上的库中,该库可能会包括存储有关模板的信息的自定义属性。例如,您的组织可能会要求您填写“Category”属性,以对库中的文档进行分类。使用文档信息面板,就可以直接在
Word 环境中编辑此类属性。

确定Word 2007文档中的非XML部件

Word 2007文档中所有嵌入的部件都是默认的Word
XML格式。因此,如果您向文档中添加了一幅图片,那么您可以将文档重命名为.zip的扩展名,然后使用ZIP文件打开它。在包中,您可以定位图片,然后
打开它。如果图片是.png格式的,那么您可以直接从包中查看并打开.png文件。

类似的,如果您将一个Microsoft Office Visio文档嵌入到一个Word
2007文档中,那么您可以在包中定位到一个.bin文件。

这为开发人员创造了很多机会,来开放关于文档的解决方案。考虑一个场景,一个公司拥有成百上千份文档,它们都拥有相同的公司logo图片。如果需要更换公司的logo,那么您可以通过一个简单的脚本,来为每个文档使用新的logo替换原有的logo。

包中默认的图片位置是/word/media目录,而包中嵌入对象的默认位置是/word/embeddings。

图2显示了一个包含图片与嵌入对象的文档的目录结构。

图片 2

图 2. 一个包含图片和嵌入对象的Word 2007文档的层次化文件结构

通过 Office Word 2007,您还可以创建和部署结构化文档模板,将自定义 XML
信息与其他文档内容集成。您可以通过创建内容绑定将 Word
文档中的数据链接到外部数据源。

缩小文件大小并增强损坏恢复能力

Word 2007 文档包

Word
2007中的文件格式由一个压缩的ZIP包组成,称为包。这个包中包含了文档中的所有内容。通过这种包格式,可以减少Office文档文件的容量,因为它
是使用ZIP压缩的。新的格式也更加的稳定,而避免了传输或处理中可能出现的错误。它允许您使用工业标准的ZIP工具,来处理文档的内容。最为简单的查看
这咱新文件格式的方法是,将一个Word
2007文档保存为这种新的默认格式,然后将这个文件重命名为.zip扩展名。双击文件,打开并查看它的内容。

注意 为了理解基于Microsoft Office Open XML格式(Office
XML格式)的组成,您可以将它的所有部件提取出来。要打开这个文件,您需要在您的计算机中安装一个ZIP工具,例如WinZip。您可以通过以下步骤在
Word 2007中打开一个Word XML格式:

1.

创建一个临时目录来存储文件和它的部件。

2.

创建一个Word
2007文档,包括文本,图片,以及其它元素,保存为一个.docx文件。

3.

在文件名的末端添加一个.zip扩展名。

4.

双击文件。这时将会在ZIP应用程序当中打开该文件。您可以查看组成文件的每个部件。

5.

将这些部件提取到刚才创建的临时目录当中。

6.

集成的ZIP压缩可以将文件的尺寸减少百分之75。文件最终被分成一些模块化的文件结构,它使得数据的恢复更为可行,并且增强了安全性。新的格式将文件分成了不同的组件,从而可以独立的管理和修复。以新格式创建的文件也根据不同的文件类型,拥有一些特殊的扩展名。

表 1. Word 2007 文件类型的扩展名

Word 2007 文件类型

扩展名

Word 2007 XML 文档

.docx

Word 2007 XML 启用宏的文档

.docm

Word 2007 XML 模板

.dotx

Word 2007 XML 启用宏的模板

.dotm

如今,当计算机和文件互相连接时,更有必要将文档存储于容量小、稳定可靠且支持各种平台的文件中。为满足这一需求,2007
Office 版本在 XML 支持的发展方面实现了新的突破。基于 XML 的新文件格式使
Office Word 2007
文件变得更小、更可靠,并能与信息系统和外部数据源深入地集成。

Microsoft Office Word 2007提供了一种新的默认文件格式,叫做Microsoft
Office Word XML格式(Word XML格式)。这种格式基于开放打包约定(Open
Packaging
Conventions),XML
Paper
Specification (XPS)也是基于这个约定。Microsoft
Office 97到Microsoft Office
2003中使用的二进制文件格式仍然可以作为一种保存格式来使用,但是它不是保存新文档时的默认文档。

例如,您可能拥有一台跟踪文档编辑状态的服务器。当处理完文档时,可以打开文档信息面板,将文档的编辑状态从草稿变为终稿。当您将文档保存回服务器时,服务器上将更新编辑状态中的更改。

Word
2007中新的文件格式将文件分成一些文档部件,其中每个部件定义了文件的部分内容,这样就解决这些问题。当您希望更改文件当中的一些内容的时候,您可以
简单的查找您希望更改的文档部件,例如页眉,然后无需影响其它基于XML的文档部件,就可以编辑它。类似的,所有的自定义XML数据都有它自己的部件。现
在,处理自定义的XML就更加简单的。这允许您使用很少的代码来生成文档。新的文件格式更加的强大,并且可以更为简单地处理自定义XML,而且它比二进制
文件格式要更小。新的文件格式使用开放打包约定,利用ZIP技术。本篇文章将浏览Word
2007文档中这种新文件格式的结构。

在业务中,您需要创建文档来沟通重要的业务数据。您可通过自动完成该沟通过程来节省时间并降低出错风险。使用新的文档控件和数据绑定连接到后端系统,即可创建能自我更新的动态智能文档。

简介

新的 Word XML
格式是经过压缩、分段的文件格式,可大大缩小文件大小,并有助于确保损坏的文件能够轻松恢复。

在1999年发布的,Microsoft通过Microsoft Office Excel
2002中的SpreadsheetML,将XML引入了Microsoft Office
XP当中。SpreadsheetML是一个良好的开始,但是它没有提供完全真实的功能。在下一个版本的Microsoft
Office产品中,Microsoft Office Word
2003引入了WordprocessingML。WordprocessingML是非常重要的一步,因为它是Microsoft
Office提供的第一个完全真实的XML文件格式。通过Microsoft Office
2003,您可以解析WordprocessingML文件,向其中添加、更新或处理数据。但是,仍然存在着一些限制。例如,您必须将二进制文件(例如图
片)编码为XML文件中的文本,如果文件中包含大量图片的话,这必然会增加文件的尺寸。另外,Word
2003直接将所有自定义XML数据嵌入到描述文档的WordprocessingML当中。这样使得自定义XML难于访问和处理所有的外部过程。

在文档信息面板中管理文档属性

从文档中分离内容

匹配到内容类型的文档部件由下列URI指定:

application/vnd.openxmlformats-officedocument.wordprocessingml.main+xml

它定义了大部分文档结构。在启用宏的文件中,这个部件匹配到application/vnd.ms-
word.template.macroEnabledTemplate.main+xml,它定义了大部分文档结构。在前面[Content-
Types].xml文件的代码示例中,内容类型匹配到/word/document.xml目录中的document.xml部件。

这个部件包含的XML与Word
2003中使用的WordprocessingML子集是相似的。还有一些图表、属性和字体的元素,它们描述了文档的基本结构。单独的部件描述了文档的所
有组件,例如页眉,页脚,列表和尾注。默认地,大多数这些部件都是下面内容类型文件的后继:

application/vnd.openxmlformats-officedocument.wordprocessingml.main+xml

如果您仔细的查看上面的[Content-Types].xml代码示例,您会发现里面列出了许多这样的部件。

将内容与格式的分离,使得我们可以比以前的版本更为简单地程序化处理一个文档的元素。使用WinFX
System.IO.Packaging类型,您可以通过几行代码来修改文件,并且执行下面的任务:

1.

使用一个新的logo替换成百上千的文档中使用的旧logo。简单的定位图片,删除它,然后使用新图片替换它。

2.

更新服务器上所有文档中的页脚,从而更新公司名称。

3.

更改服务器上所有文档中的文本样式,从而使用一种新的公司字体。

当然,还可以建立更多的解决方案。通过这种内容的分离,定位部件进行编辑就要比Word
2003中的WordprocessingML更加简单。在WordprocessingML文件中,整个文档被描述在一个巨大的XML文件当中。解析这
个文件并且修改它是非常困难的。而且还是非常冒险的,因为如果出现了一个错误,那么将会损坏整个文档。相反,如果一个Word
2007文档中的一部分发生了损坏,那么文档剩余的部件还可以无误的打开。

利用文档信息面板,可以在使用Word文档时方便地查看和编辑文档属性。在 Word
中,文档信息面板显示在文档的顶部。您可以使用文档信息面板来查看和编辑标准的
Microsoft Office
文档属性,以及已保存到文档管理服务器中的文件的属性。如果使用文档信息面板来编辑服务器文档的文档属性,则更新的属性将直接保存到服务器中。

理解数据存储

与许多Word
XML格式中其它的数据类型相似,自定义XML数据也是单独的存储在文档当中的。每个项都存储为包中的一个单独的部件,这个数据出现以一个叫做
customXML的目录中,它位于包的根目录下。如果您使用程序通过将一个新的部件添加到文档的customXMLParts集合,将一个XML文件附
加到一个文档当中,然后默认地XML数据被存储在一个叫做/customXml/item1.xml的文件当中。如果您又从另外一个文件添加了一个自定义
XML数据,那么默认情况下,它会被存储到叫做/customXml/item2.xml的文件当中。

通过使用XMLMapping和XPath表达式,您可以将XML部件的特定元素映射到一个内容控制。也就是说如果使用程序来修改自定义XML,您
无需像Word
2003那样去解析整个WordprocessingML文件。而只需要查找保存自定义XML的部件,然后只修改这些文件的内容。

要向您的文档中添加自定义数据,您需要创建一个自定义XML文件,然后将它添加到ZIP包中。您还需要创建相应的关系,从主文档部件指向您的自定义XML部件。

在Word 2007的Word
XML格式当中,每个自定义部件都表示文档容器中它自己的XML部件。这个自定义部件包含了文件名和它的关系信息。XML是存储在文档根目录下的一个叫作customXml的目录当中的。

图 3 显示了一个包含自定义XML数据文档的目录结构。

图片 3

图 3. 包含自定义XML数据的Word 2007文档的层次化文件结构

文档包中独立的自定义XML数据,允许您无需处理其它的文档部件,便可以读取和更新自定义数据。

_rels目录中存储的关系文件,描述了Word
XML格式的文档中,从一个XML部件到其它XML部件之间的关系。有两种自定义XML部件的关系类型。

XML的关系类型是:

http://schemas.openxmlformats.org/officedocument/2006/relationships/customXmlData

XML属性的关系类型是:

http://schemas.openxmlformats.org/officedocument/2006/relationships/customXmlProps

每个关系都有一个ID,您可以使得它来定位不同的数据存储。

实现的自定义XML部件是存储在_rels目录并列的文件当中。每个自定义XML部件都拥有一个叫作item##.xml的文件名,并且拥有它自己
的属性,叫做itemProps##.xml。在两个文件名中,##是数据存储中自定义XML部件的编号(1,2,3…)。Item##.xml自定义
XML部件的文件格式如下所示:

<o:dataStoreItem>

<o:dataStoreItem o:itemID="MSXID for the custom XML part"/>

<o:xmlSchemaRef o:relID="relationship ID to a schema"/>

</o: dataStoreItem>

Walkthrough:创建一个Word XML格式文件

Document.xml是Word
XML格式中唯一需要的部件。有关更多如何创建一个最小化文档的信息,请查看创建文档小节。

为了解释文档部件、内容类型项和关系项如何协同工作,这个章节将在Word
2007中构建一个更为复杂的Word XML格式文档。这个教程帮助您理解如何使用Word
XML格式访问和修改文档内容。

要创建一个包含内容类型和关系项的Word
2007文档,您需要创建一个根目录,它包含一个特定的目录和文件结构,如图4所示。

图片 4

图4. Word 2007文档的目录和文件结构

在您创建完所有的目录和文件后,下个小节将带您向每个文档部件添加所需的XML代码。

创建文档属性

首先,您需要为文档属性创建两个XML文件:

1.

创建一个叫作root的目录。

2.

在root目录中创建一个叫作docProps的目录。

3.

打开记事本或其它的XML编辑器。

4.

将下面的代码复制粘贴到一个新的文件,并将它保存为app.xml,并保存在docProps目录中:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

        <Properties xmlns= "http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" 

        xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes">

        <Template>Normal.dotm</Template>

        <TotalTime>1</TotalTime>

        <Pages>1</Pages>

        <Words>3</Words>

        <Characters>23</Characters>

        <Application>Microsoft Office Word</Application>

        <DocSecurity>0</DocSecurity>

        <Lines>1</Lines>

        <Paragraphs>1</Paragraphs>

        <ScaleCrop>false</ScaleCrop>

        <Company>MS</Company>

        <LinksUpToDate>false</LinksUpToDate>

        <CharactersWithSpaces>25</CharactersWithSpaces>

        <SharedDoc>false</SharedDoc>

        <HyperlinksChanged>false</HyperlinksChanged>

        <AppVersion>12.0000</AppVersion>

        </Properties>

        

5.

打开记事本或其它XML编辑器。

6.

将下面的代码复制粘贴到一个新的文件,并将它保存为core.xml,并保存在docProps目录中:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

        <cp:coreProperties xmlns:cp= "http://schemas.openxmlformats.org/package/2006/metadata/core-properties" 

        xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" 

        xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance">

        <dc:title></dc:title>

        <dc:subject></dc:subject>

        <dc:creator>Your name</dc:creator>

        <cp:keywords></cp:keywords>

        <dc:description></dc:description>

        <cp:lastModifiedBy>Your name</cp:lastModifiedBy>

        <cp:revision>2</cp:revision>

        <dcterms:created xsi:type="dcterms:W3CDTF">2006-05-03T01:13:00Z</dcterms:created>

        <dcterms:modified xsi:type="dcterms:W3CDTF">2006-05-03T01:14:00Z</dcterms:modified>

        </cp:coreProperties> 

        

创建文档

接下来,您需要为文档部件创建一个XML文件。这个部件是新Word
XML格式中唯一需要的部件。

1.

创建一个叫作root的目录。

2.

在root目录中创建一个叫作word的目录。

3.

打开记事本或其它的XML编辑器。

4.

将下面的代码复制粘贴到一个新的文件,并将它保存为document.xml,并保存在word目录中:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

        <w:document xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006" 

        xmlns:o="urn:schemas-microsoft-com:office:office" 

        xmlns:o12="http://schemas.microsoft.com/office/2004/7/core" 

        xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" 

        xmlns:m="http://schemas.microsoft.com/office/omml/2004/12/core" 

        xmlns:v="urn:schemas-microsoft-com:vml" 

        xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/3/wordprocessingDrawing" 

        xmlns:w10="urn:schemas-microsoft-com:office:word" 

        xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/3/main">

        <w:body>

        <w:p>

        <w:r w:rsidR="002847EC">

        <w:t>Word 2007 rocks my world!</w:t> 

        </w:r>

        </w:p>

        </w:body>

        </w:document>

        

创建一个关系

接下来,您需要为这个部件创建一个关系。这个关系被记录在_rels目录当中,也就是说这个关系是在包的根目录之外。要创建关系:

1.

在root目录中创建一个叫作_rels的目录。

2.

打开记事本或其它的XML编辑器。

3.

将下面的代码复制粘贴到一个新的文件,并将它保存为.rels,并保存在_rels目录中:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

        <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">

        <Relationship Id="rId3" Type= "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/>

        <Relationship Id="rId2" Type= "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>

        <Relationship Id="rId1" Type= "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml"/>

        </Relationships>

        

4.

注意,这个XML创建一个ID为rID1的officeDocument类型到一个叫做word的目录中的document.xml文件的关系。

定义内容类型

下一步,您需要定义这个文件的内容类型。

1.

注意,内容类型定义文件的结构如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

        <Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">

        <Default Extension="rels" ContentType= "application/vnd.openxmlformats-package.relationships+xml"/>

        <Default Extension="xml" ContentType="application/xml"/>

        <Override PartName="/word/document.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"/>

        <Override PartName="/word/styles.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml"/>

        <Override PartName="/docProps/app.xml" ContentType= "application/vnd.openxmlformats-officedocument.extended-properties+xml"/>

        <Override PartName="/word/settings.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml"/>

        <Override PartName="/word/theme/theme1.xml" ContentType= "application/vnd.openxmlformats-officedocument.theme+xml"/>

        <Override PartName="/word/fontTable.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml"/>

        <Override PartName="/word/webSettings.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml"/>

        <Override PartName="/docProps/core.xml" ContentType= "application/vnd.openxmlformats-package.core-properties+xml"/>

        </Types>

        

2.

打开记事本或其它XML编辑器。

3.

将上面的代码复制粘贴到一个新的文件,并将它保存为[Content_Types].xml,并保存在root目录中:

注意 保留的文件名是由开放打包约定来使用的,它定义了包中所有文件的内容类型。

创建包

最后,您可以将这些文件放到一个ZIP包中,从而创建一个有效的Word 2007文档:

1.

使用任何ZIP工具,将simpledocument目录中所有的内容保存到一个ZIP文档,包括下面的子目录:docProps目录,word目录,和_rels目录。也包括[Content_Types].xml。

重点注意 不要简单的将simpledocument目录添加到一个ZIP文件,否则在Word 2007中打开文件时可能会收到一个内部错误。您特别需要将simpledocument目录所有的子目录添加到ZIP包中。

2.

将这个包保存为simpledocument.docx。

现在,您可以在Word 2007中打开这个文件,然后查看包的内容:

图片 5

图 5. Simpledocument.docx 在Word 2007中的显示

Word XML格式的开放打包约定

开放打包约定指定了Word
2007文档中新文件格式的结构。有关开放打包约定的更多信息,请查看开放打包约定,XML
Paper
Specification 也使用这个约定。

为了理解一个Word
2007文档的结构,您必须理解这种新文件格式中的三个主要组件:

1.

部件项。每个部件项都对应于包解压后的一个文件。例如,如果您右击一个Microsoft Office Excel工作簿,然后选择提取它,您将会看到一个workbook.xml文件,一些 sheetn.xml文件,和其它的一些文件。这些文件都是包中的文档部件。

2.

内容类型项。内容类型项描述了一个文档部件存储了什么类型的文件。例如,image/jpeg表示了一个JPEG图片。这种信息允许Microsoft Office,和第三方工具,来决定包中任意部件的内容,并处理它的内容。

3.

关系项。关系项指定文档部件的集合如何组合为一个文档。这种方法指定了一个源部件和一个目标部件之间的连接。关系在文档包中存储为XML部件,例如/_rels/.rels。

下面的章节解释了这些组件如何组成一个Office XML格式的文件。

Word 2007 文档部件

为了便于使用第三方的过程和工具来组建和装配Word
2007文档,Word将包的内容分成许多逻辑部件,每个部件存储了一个特定的文档部分,例如:

1.

注释

2.

格式定义

3.

列表定义

4.

页眉

5.

图表

6.

关系图

7.

文档内容

8.

图片

在包中,Word使用单独的文件来表示文档中的每个部分。这些部件可以由XML文件组成,例如包含标记的Word
XML格式的文档部件,以及附加的内容,例如二进制的图片或嵌入的OLE文件。所有的这些都包含在包中。但是,更为重要的是,通过开放打包约定定义的一些
例外,实际的文件目录结构是任意的。

包中文件的关系,而不是文件结构,决定了文件的有效性。您可以重新排布和命名ZIP容器当中的部件,只要保证正确的更新关系,并且保证文档部件之间
正确的关联就可以。如果关系是正确的,那么就可以无误的打开文档。Word
2007文档的初始文件结构只是Word创建的默认结构,它使得您可以轻松的定位文件的组成。只要您正确的保持了关系,那么您可以更改这种文件结构。

例如,在Word
2007中,容器文件代表了一个文档。在容器文件中,按序排布的部件组成了文档。例如,一个Word
2007文件可能会(但不仅限于)包含一步下列目录和文件:

1.

[Content_Types].xml。 描述出现在文件中的每个内容类型。

2.

rels folder。 存储所有指定部件的关系部件。

3.

rels file。 描述了文档结构中的起始关系。它称为关系部件。

4.

datastore folder。 包含了文档中的自定义XML数据部件。自定义XML数据部件是一个XML文件,您可以将节点绑定到文档的内容控件中。

5.

item1.xml file。 包含了一些文档中出现的数据。例如自定义XML数据部件。

6.

docProps folder。 包含了应用程序的属性部件。

7.

App.xml file。 包含了应用程序特定的属性。

8.

Core.xml file。 包含了所有基于开放打包约定文档格式的通用文件属性。

图 1 显示了一个示例Word 2007文档的文件结构。

图片 6

图 1. 一个典型Word 2007 文档的层次化文件结构

您可以替换整个文档部件,从而更改Word 2007文档的内容、属性、或格式。

Word 2007 内容类型

上面提到过,每个文档部件都有一个特定的内容类型。一个部件的内容类型描述了这种文件类型的内容。例如,XML部件包含了Word
XML格式定义的标记,而内容类型可以帮助您分析它的组成。

典型的内容类型是以word
application开头,然后是厂商的名称。在内容类型中,word vender
被简写为vnd。所有内容类型都被指定为以application/vnd.ms-word开头。如果内容类型是一个XML文件,那么它的URI将以+
xml结尾。其它的非XML内容的类型,例如图片,则没有这种结尾。下面是一些典型的内容类型:

1.

application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml

它是一个描述Word文档中的尾注文档部件的内容类型。其中,+xml表示它是一个XML文件。

2.

application/vnd.openxmlformats-package.core-properties+xml

它是一个描述核心文档属性部件的内容类型。其中,+xml表示它是一个XML文件。

3.

image/png

图片的内容类型。其中没有+xml部分 - 表示内容类型不是XML文件。

您可以使用所有的这些内容类型,来处理一个Word 2007文件的内容。Microsoft
Windows Software Development Kit (SDK) for Beta 2 of Windows Vista and
WinFX Runtime
Components包
含了System.IO.Packaging命名空间,它允许您添加文档部件、获取和更新内容,或者创建关系。例如,使用Microsoft
WinFX
System.IO.Packaging类,您可以使用PackagePart.CreatePart方法创建一个文档部件。CreatePart方法需
要两个字符串参数;一个是新部件的URI,另一个是部件的内容类型,如下所示:

PackagePart packageNewPart = package.CreatePart(uriResourceTarget, "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml");

这个代码示例使用存储在uriResourceTarget变量中的URI和表示格式的内容类型,创建了一个文档部件。有关PackageParts的更多信息,请查看Microsoft
Windows SDK中的 PackagePart
Class引用文档。

定位内容类型

下面的章节包含了一个内容类型中出现最为频繁的列表。Word
2007在包中通过一个文件或部件描述每个内容类型。在包根目录下的[Content_Types].xml文件,列出了文档中的每个部件,以及它的
ContentType对象。例如,您可能会看到如下的内容:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">

<Override PartName="/word/footnotes.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml"/>

<Default Extension="png" ContentType="image/png"/>

<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>

<Default Extension="xml" ContentType="application/xml"/>

<Override PartName="/word/document.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"/>

<Override PartName="/word/numbering.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml"/>

<Override PartName="/word/styles.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml"/>

<Override PartName="/word/endnotes.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml"/>

<Override PartName="/docProps/app.xml" ContentType= "application/vnd.openxmlformats-officedocument.extended-properties+xml"/>

<Override PartName="/word/settings.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml"/>

<Override PartName="/word/footer2.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml"/>

<Override PartName="/docProps/custom.xml" ContentType= "application/vnd.openxmlformats-officedocument.custom-properties+xml"/>

<Override PartName="/word/footer1.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml"/>

<Override PartName="/word/theme/theme1.xml" ContentType= "application/vnd.openxmlformats-officedocument.theme+xml"/>

<Override PartName= "/word/fontTable.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml"/>

<Override PartName= "/word/webSettings.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml"/>

<Override PartName="/word/header1.xml" ContentType= "application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml"/>

<Override PartName="/docProps/core.xml" ContentType= "application/vnd.openxmlformats-package.core-properties+xml"/>

</Types>

您可以在目录结构中重命名或重新排布所有这些部件。列出的这些部件都在它们默认的位置,并且拥有默认的名称,从而可以轻松的判断出它们是什么文件。

在包根目录下的Word目录中,包含了描述文档的最为主要的信息。在这个目录中,您可能会发现一些表示可用内容类型的部件。

将文档部件匹配到内容类型

文件格式中每个XML文件都是一个文档部件。如果您详细的查看这种新格式的文件,您会发现一些目录结构,或文档部件,例如
/word/fontTable.xml和word/styles.xml。这些文件的名称清楚的表示了它们的目的(例如,字体表和格式部件)。但是,您
也可以更改它们的名称。因为在[ContentTypes].xml文件中的<Types>元素匹配了每种内容部件,它们表示不同的内容类
型。[ContentTypes].xml可能由下列代码组成:

<Override PartName=”/word/styles.xml” ContentType=
“application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml”/><Override
PartName= “/docProps/core.xml”
ContentType=”application/vnd.openxmlformats-package.core-properties+xml”/>

其中,/word/styles.xml文档部件拥有/vnd.openxmlformats-package.core-properties+
xml内容类型。/docProps/core.xml部件拥有application/vnd.openxmlformats-
package.core-properties+xml内容类型。

文档部件间的关系

关系是包中更为重要的部件之一,因为它们记录了文档部件之间的连接。您可以在包的目录结构中重命名或移动部件,但是必须通过关系正确的保持文件的有效性。

关系表示了文件包中两个部件的逻辑连接。例如,根文档部件拥有一个http:
//schemas.openxmlformats.org/package/2006/relationships/header类型到
application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml
内容类型部件的关系。这表示部件之间的关系是,目标部件是源部件的页眉。另外,该内容部件表示这是内容是一个Word
2007页眉。这个页眉部件可能也会拥有它自己的关系。例如,如果页眉中包含一个JPEG图片,那么页眉可能会一个从http:
//schemas.openxmlformats.org/officeDocument/2006/relationships/image到
image/jpeg内容类型的关系。

在包中,关系通过可以在一个叫做_rels的目录中进行定位。为了查找从任意部件生成的关系,请查找_rels目录。如果这个部件拥有一些关系,那
么_rels目录中将会包含一个文件,它是您的源部件的名称加.rels扩展名。例如,假设您希望查找officeDocument部件是否拥有关系,其
中可能会拥有一个http:
//schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument
内容类型。默认地,这个部件会拥有一个/word/document.xml的URI,因为您可以打开包中的/word/_rels目录,所有查找一个叫
做document.xml.rels的文件。

每个关系都拥有一个源和一个目标。源是关系命名的部件。例如,document.xml.rels中所有的关系都将document.xml作为它
们的源。每个.rels文件都包含一个<relationships>元素,其中您可以为每个目标关系找到一个对应的<
relationship>元素,其中包含目标关系的id,这就是目标部件,并且会包含目标部件的内容类型。下面是
document.xml.rels文件中一个典型的<relationships>元素:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">

<Relationship Id="rId3" Type= "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target= "docProps/app.xml"/>

<Relationship Id="rId2" Type= "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target= "docProps/core.xml"/>

<Relationship Id="rId1" Type= "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target= "word/document.xml"/>

<Relationship Id="rId4" Type= "http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties" Target= "docProps/custom.xml"/>

</Relationships> 

注意,每个relationship元素首先指定了关系的id,然后是目标的内容类型,最后是目标文档部件。

结论

与以前的Word版本中保存的二进制文件格式相比,Word 2007中新的Word
XML格式拥有许多优势。ZIP包所带来的文件尺寸要更加小。文件也更加稳定 -
如果文件中的一部分损坏,那么您仍旧可以打开其它的文档元素,即使一部分已经损坏。

另外,也非常便于使用程序或手动地修改、添加或者删除数据。这种文件可以使用Microsoft
WinFX
System.IO.Packaging类来访问。您只需编写几行代码,便可以修改服务器上的文件。您可以从它自己单独的部件中访问和处理自定义XML数
据。您也可以使用事件来触发XML数据的更改。例如,佻可以将一个内容控件匹配到一个包含股票配额的XML元素,然后在打开文档时自动的获取最新的配额信
息,从而确保用户可以看到当前的价格。

这种可行性和易用性,使得您可以编程新的Word
XML格式,并且充分利用Microsoft Office的巨大优势。

相关文章