WordProcessingML文件的剖析
Package Structure(包的结构)
WordprocessingML 或 docx 文件是一个 zip 文件(一个包),其中包含许多“parts(部分)”,通常是UTF-8或UTF-16编码的 XML 文件,但有一部分是字节流。包还可能包含其他媒体文件,例如图像和视频。该结构根据 Open Packaging Conventions 进行组织。
我们可以通过简单地将任何 docx 文件重命名为 zip 文件并解压缩文件来查看文件结构和文件。
Content Types(内容类型)
每个包必须在其根目录下具有 [Content_Types].xml 文件。该文件包含包中 parts(部件) 的所有内容类型的列表。每个 parts(部件) 及其类型都必须在 [Content_Types].xml 中列出。以下是主要文档部分的内容类型:
<Override PartName="/word/document.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"/>
Relationships(关系)
每个包都包含一个 Relationships (关系)部分,该关系部分定义了其他部分之间以及与包外部资源之间的关系。这样可以将关系与内容分开,并且可以轻松更改关系,而无需更改引用目标的来源。
对于 OOXML 程序包,_rels 文件夹中始终存在一个关系部分(.rels),用于标识程序包的开始部分或程序包关系。例如,以下内容定义了内容的开始部分的标识:
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml"/>.
.rels 中通常还存在 app.xml 和 core.xml 的关系。
除了包的关系部分之外,作为一个或多个关系源的每个部分还将具有自己的关系部分。每个此类关系部分都位于该部分的 _rels 子文件夹中,并且通过在该部分的名称后附加“ .rels”来进行命名。
关系可以是显式的也可以是隐式的。对于显式关系,使用 <Relationship> 元素的 Id 属性引用资源。也就是说,源中的 ID 直接映射到关系项的 ID ,并明确引用目标。
例如,文档可能包含这样的超链接:
<w:hyperlink r:id="rId4">
r:id="rId4" 引用了文档(document.xml.rels)的关系部分中的以下关系。
<Relationship Id="rId4" Type="http://. . ./hyperlink" Target="http://www.google.com/" TargetMode="External"/>
对于隐式关系,没有这样的直接引用 <Relationship> Id。相反,该引用被理解。例如,文档可能包含对脚注的引用,如下所示。
<w:footnoteReference r:id="2">
在这种情况下,对带有 w:id="2" 的脚注的引用应理解为存在脚注时存在的 “脚注”部分(part)。在脚注部分,我们将看到以下内容。
<w:footnote w:id="2">
WordprocessingML文档特有的部分(part)
下面是 WordprocessingML 包中特定于 WordprocessingML 文档的可能存在部分(part)的列表。
Part | 中文 | 描述 |
---|---|---|
Comments | 注释 | 包含文档中的注释。可能有主文档的注释部分,如果有词汇表,则可能有词汇表的注释部分。 |
Document Settings | 文档设置 | 指定文档的设置,包括是否隐藏拼写和语法错误,跟踪修订,写保护等。可能有主文档的设置部分,如果有词汇表,则可能有词汇表的设置部分。 |
Endnotes | 尾注 | 包含文档的尾注。可能有主文档的尾注部分,如果有词汇表,则可能有词汇表的尾注部分。 |
Font Table | 字体表 | 指定文档中使用的字体的有关信息。当指定的字体在系统上不可用时,应用程序将使用部分(part)中的信息来确定使用哪些字体来显示文档。 |
Footer | 页脚 | 包含 footer (页脚)的信息。请注意,文档的每个 section(节)都可能包含首页,奇数页和偶数页的页脚。因此,可能有多个页脚部分(part),具体取决于文档中有多少节以及这些节的页脚类型。 |
Footnotes | 脚注 | 包含文档中的脚注。可能有主文档的脚注部分,如果有词汇表,则可能有词汇表的脚注部分。 |
Glossary | 词汇表 | 这是一个补充文档存储位置,其中可能包含文档附带的内容,但从主文档内容中看不到。 |
Header | 页眉 | 包含 header (页眉)的信息。请注意,文档的每个 section(节)都可能包含首页,奇数页和偶数页的页眉。因此,可能有多个页眉部分(part),具体取决于文档中有多少节以及这些节的页眉类型。 |
Main Document | 主要文档 | 包含文档的正文。 |
Numbering Definitions | 编号定义 | 包含文档中 structure of each numbering definition(每个编号定义的结构)定义。可能有主文档的编号定义部分,如果有词汇表,则可能有词汇表的编号定义部分。 |
Style Definitions | 样式定义 | 包含文档中的样式定义。可能有主文档的样式定义部分,如果有词汇表,则可能有词汇表的样式定义部分。 |
Web Settings | 网页设置 | 包含文档使用的 Web 特定设置的定义。这些设置指定两种类别:与可在WordprocessingML文档中使用的HTML文档相关的设置(即框架集定义),以及影响在另存为HTML时如何处理文档的设置。可能有主文档的网页设置部分,如果有词汇表,则可能有词汇表的网页设置部分。 |
其他OOXML文档共享的部分(part)
任何 OOXML 包中都可能出现许多部分类型。以下是一些与 WordprocessingML 文档相关的部分。
Part | 中文 | 描述 |
---|---|---|
Embedded package | 嵌入式包 | 包含内部或外部的完整引用包。例如,WordprocessingML 文档可能包含电子表格或演示文稿文档。 |
Extended File Properties (often found at docProps/app.xml) | 扩展文件属性(通常在 docProps/app.xml 中找到) | 包含特定于OOXML文档的属性,例如所使用的模板,页面和单词的数量以及应用程序名称和版本的属性。 |
File Properties, Core | 文件属性,核心 | 核心文件属性使用户可以发现并设置包中的常用属性,例如创建者名称,创建日期,标题之类的属性。尽可能使用都 Dublin Core 属性(一组用于描述资源的元数据术语)。 |
Font | 字体 | 包含直接嵌入到文档中的字体。字体可以以位图(bitmapped)字体存储,其中每个字形都以栅格图片的形式存储,或者以符合 ISO/IEC 14496-22:2007 的格式存储。 |
Image | 图片 | 文档通常包含图片。图像可以作为 zip 项目存储在包中。必须通过图像部分关系(part)和适当的内容类型来标识该项目。 |
Theme | 主题 | DrawingML 是跨 OOXML 文档类型的共享语言。包含主题部分,当文档使用主题时,该部分将包含在 WordprocessingML 文档中。 |