Open Packaging Conventions (OPC) はマイクロソフトによるファイル格納に関する技術で、XMLと非 XML ファイルをパッケージするための規格である。Open XML Paper Specification (OpenXPS) ドキュメントやOffice Open XML (OOXML) で採用されている。

OPC形式でファイルをパッケージ化する利点は、独立したファイルをそのままの形でドキュメントに添付でき、XMLをそのまま使用するより小さいファイルを生成できることである。

## 仕様

OPC 仕様はOffice Open XML標準(ISO/IEC 29500:2008 およびECMA-376)のPart 2に定義されている。

ISO/IEC 29500-2:2008規格とECMA-376の第2版以降では PKWARE社.のZIP ファイルフォーマット仕様 バージョン 6.2.0 (2004)を引用規格としており、追補として規範例が付属する。注意: ECMA-376 の第1版では上記より新しいPKWareのZIPファイルフォーマット仕様 バージョン6.2.1 (2005)を参照している。この版のZIPファイル形式は国際標準に定義されていないが、コミュニティと開発者間には広く普及している。

マイクロソフトが2006年に Internet Engineering Task Forceに提出したドラフトではOPC形式のパッケージへの参照として "pack" URI スキーム (`pack://`) を使用するよう記述していたが、このドラフトは 2009年に失効している。この記述方法は Internet Standard の URI スキーム(STD 66, RFC 3986)に適合しておらず、このスキームは現在historicalと分類されている。

## 使い方

XML Paper Specification (XPS)とOffice Open XML (OOXML) はともにZIPを利用したOpen Packaging Conventions (OPC) を使用している。XMLマークアップファイルのほかに、ZIPパッケージに含められるファイルには PNG、BMP、AVI、PDF、RTF のようなテキスト、バイナリファイルのほかに、すでにパッケージ化されたODFファイルを含むこともできる。OPC ではファイルの命名規則も定義しており、バイナリとXMLファイルがZIP書庫ファイル内の格納場所に依存しないよう間接参照方法も定義している。

OPCファイルは一般的なZIPユーティリティで開くことができる。また、OPCファイルでは、間接参照、チャンク化、および、相対間接参照がサポートされている。

### OPCを利用するファイルフォーマット

OPCは、多数の新しいファイルフォーマットの基盤技術となっている:

| ファイル形式 | 拡張子 | 内容 | 規格 |
| --- | --- | --- | --- |
| オートデスク AutoCAD Design Web Format (DWFX) ファイルフォーマット | .dwfx | CADデザインデータ (2D/3Dコンピュータグラフィックス および 製図). |
| 回路図 | .cddx | 回路図 containing layout, connections and embedded components |
| Family.Show file format | .familyx | 系譜学 : 家族データ、ストーリー、写真など |
| Microsoft Application Virtualization file format | .appv | ポータブルアプリケーション |
| Microsoft Semblio ファイルフォーマット | .semblio | インタラクティブ学習素材, such as e-books containing images, audio, and video |
| Microsoft Visual Studio 2010 機能拡張 ファイルフォーマット | .vsix | 統合開発環境 向け機能拡張 |
| Microsoft Visio 2013 drawing file format | .vsdx | replaces .vsd (Visio binary file) and .vdx (Visio XML Drawing) formats used in earlier versions. |
| Microsoft Windows 8, Windows 8.1 および Windows Phone 8.1 アプリケーションパッケージ | .appx | マイクロソフトの Windows Store および Windows Phone Store で展示されるアプリのパッケージソフトウェア |
| Microsoft Windows 8.1 および Windows Phone 8.1 アプリ バンドル | .appxbundle | パッケージソフトウェア that bundles hardware platforms, languages, and resources for an application listed on Microsoft's Windows Store and Windows Phone Store. |
| Microsoft Windows Azure C# パッケージ | .cspkg | クラウドコンピューティング 向けデータ |
| Microsoft XML Paper Specification | .xps | fixed document for document exchange |
| NuGet パッケージ | .nupkg | パッケージ管理システム 向け パッケージソフトウェア |
| Office Open XML Document | .docx | ワードプロセッサ document | ECMA-376, ISO/IEC 29500:2008 |
| Office Open XML プレゼンテーション | .pptx | プレゼンテーション | ECMA-376, ISO/IEC 29500:2008 |
| Office Open XML ワークブック | .xlsx | 表計算ソフト ワークブック | ECMA-376, ISO/IEC 29500:2008 |
| Open XML Paper Specification | .oxps | fixed document for document exchange | ECMA-388 |
| Siemens PLM Software file format | .jtx |
| MathWorks Simulink model file | .slx | Dynamic system specification for Model-based design |
| SMPTEメディアパッケージ | .smpk | Storage format for distribution and playback of multimedia video and audio files. | SMPTE ST 2053-2011 |
| SpaceClaim 3D ソリッドモデリングファイル | .scdoc | Embedded 3D CAD data files include Standard ACIS Binary (SAB) solid model files |

### プログラミング

OPCは.NET Framework 3.0でネイティブにサポートされており、System.IO.Packaging ネームスペースで利用できる。他言語のためにオープンソースのライブラリが存在する。

Windows 7より、OPCはWindows APIとしてもサポートされるようになり、COMインタフェースを通じて利用できる。Packaging API という名称で参照できる。

別の方法として、ZIPライブラリを使ってOPCファイルを作成、開くことができる。この場合ZIP内に名称規約に従ったファイルが正しく格納されている必要がある。

## パッケージ、パーツ、およびリレーションシップ

OPCの専門用語において、パッケージはZIPアーカイブに対応し、パーツはZIPアーカイブに格納されているファイルに対応する。パッケージ内の各パーツには、MIMEメディアタイプ形式で表現された特定の要素タイプに加えて、一意のURI準拠のパーツ名が存在する。パーツの要素タイプはパーツに格納されているデータの型を明示的に定義しており、拡張子に起因する重複や曖昧さといった扱いの難しさを削減する。

OPCパッケージにはパッケージ、パーツ、および、外部リソースの間の関連付けを定義するリレーションシップを含めることができる。

ディレクトリおよびパーツの階層構造に加えて、OPCパッケージでは、関連付け関係の有向グラフを通したコンテンツへのアクセスにリレーションシップを一般に使用する。

リレーションシップは4つの要素から構成される:

OPCパッケージは(テキスト、画像、XML、バイナリなど)任意の形式のデータを含むパーツを格納できる。
ただし、拡張子「.rels」は「/\_rels」サブフォルダ内にリレーションシップメタデータを格納するために予約されている。
サブフォルダ名「\_rels」、そのようなディレクトリ内のファイル拡張子「.rels」、そして、任意のフォルダ内のファイル名「[Content\_Types].xml」の3つのみがOPCパッケージに格納されるファイルで予約済みとなっている名前である。

(ルートパッケージに関連付けられたリレーションシップを含む)すべてのリレーションシップはXMLファイルとして表される。

「.rels」ファイルをテキストエディタで開くと、そのパーツからターゲットされるすべてのリレーションシップを定義する実際のXMLマークアップを見ることができる。

典型的なリレーションシップファイルは次のようなXMLコードを含む:

これはルートパッケージに対する2つの関係を定義しており、最初のものはルートパッケージとして考えることができ(ここで示したものは初期のMicrosoft XPSドキュメントであり、openxmlformatsコレクションでOpen XML Paper Specificationとして標準化される前である)、もう1つは代替形式への参照(ここではドキュメントの最初のページのサムネイル画像)に使用されている。

### チャンク化

ファイル破損の影響を少なくできることから、ドキュメントを小さなチャンクに分割することは推奨されている。

また、これはデータアクセスの向上にもつながる。

たとえば、1つのXMLパーツ内にすべてのスタイル情報を格納し、それぞれのワークシートやテーブルをそれ自体からなるパーツに格納する。

これによって利用側アプリケーションは高速なアクセスとオブジェクト作成の削減が可能になり、複数のプロセスが同じドキュメントで作業することが簡単になる。

### 相対間接参照

Open Packaging Conventionsでは、参照を持つ各ファイルは間接参照リストである\_relsファイルを持つ。

これによって、いくつかの場面で一部の情報を関連するすべてのリソースとともに切り貼りすることが容易となるほか、ファイル間での名前衝突のおそれのない名前スコープの提供が可能になるなどの利点がある。