Packaging Conventions

OpenXML document is a package that consists of a flat collection of "parts". Each "part" has a case-insensitive part name that consists of a slash (/) delimited sequence of segment names such as "/pres/slides/slide1.xml".

For the most part, the ZIP compression is used to package the parts, in which case the term "package" refers to the ZIP archive, and the parts refer to the individual files archived within. The part name in this case is the file path within the archive.

Each part also has a content type, and /[Content_Types].xml provides the content type of each part within the archive.

Relationships

Packages and parts can contains explicit relationships to other parts as well as to external resources. Every explicit relationship has an ID and a type, and relationship types are named using URIs.

The set of explicit relationships for each package or part is stored in a relationship part whose name (or path) follows a specific convention e.g. the relationship part for a part called "/a/b/c.xml" is called "/a/b/_rels/c.xml.rels". As a special case, the relationship part for the package as a whole is called "/_rels/.rels".

One important note: we use the term fragment in the name of our source files to correspond with what the standard calls part. For instance, the source file that contains class definition that handles the workbook part in SpreadsheetML is called workbookfragment.cxx. This convention is prevalent across all application types within oox module.