Relationships

Parts often contain references to other parts in the package and to resources outside of the package. In general, these references are represented inside the referring part in ways that are specific to the content type of the part, that is, in arbitrary markup or an application-specific encoding. This effectively hides the internal and external links between parts from consumers that do not understand the content types of the parts containing such references.

The package introduces a higher-level mechanism to describe references from parts to other internal or external resources: relationships. Relationships represent the type of connection between a source part and a target resource. They make the connection directly discoverable without looking at the part contents, so they are independent of content-specific schemas and quick to resolve.

Relationships provide a second important function: relating parts without modifying their content. Sometimes relationships act as a label where the content type of the labeled part does not define a way to attach the given information. Some scenarios require information to be attached to an existing part without modifying that part, either because the part is encrypted and cannot be decrypted, or because it is digitally signed and changing it would invalidate the signature.