Open Packaging Conventions

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 - Information technology -- Document description and processing languages -- Office Open XML File Formats -- Part 2: Open Packaging Conventions, ISOEcma International TC45 (December 2006). 。

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

マイクロソフトが2006年に Internet Engineering Task Forceに提出したドラフトではOPC形式のパッケージへの参照として "pack" URI スキーム (pack://) を使用するよう記述していたが、このドラフトは 2009年に失効している。この記述方法は Internet Standard の URI スキーム(STD 66, )に適合しておらず、このスキームは現在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ファイルでは、間接参照、チャンク化、および、相対間接参照がサポートされている。Rick Jeliffe (2007-07-29). 

 OPCを利用するファイルフォーマット 
OPCは、多数の新しいファイルフォーマットの基盤技術となっている:Adventures in Packaging - Episode 1, May 18, 2009, by jack davis, Microsoft Packaging Team Blog: Open Packaging Conventions
 ファイル形式 拡張子 内容 規格 オートデスク AutoCAD Design Web Format (DWFX) ファイルフォーマットhttp://dwgtodgn.com/blog/2014/06/22/autocad-dwf.html .dwfx CADデザインデータ (2D/3Dコンピュータグラフィックス および 製図). 回路図http://www.circuit-diagram.org/help/cddx-file-format .cddx 回路図 containing layout, connections and embedded components Family.Show file formatFamily. .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. https://msdn.microsoft.com/en-us/library/office/jj228622%28v=office.15%29.aspx Microsoft Windows 8, Windows 8.1 および Windows Phone 8.1 アプリケーションパッケージ https://msdn.microsoft.com/en-us/library/windows/apps/hh464929(v=VS.85).aspx .appx マイクロソフトの Windows Store および Windows Phone Store で展示されるアプリのパッケージソフトウェア https://www.theverge.com/2014/2/11/5400660/windows-phone-8-1-features-leaked Microsoft Windows 8.1 および Windows Phone 8.1 アプリ バンドルhttps://msdn.microsoft.com/en-us/library/windows/apps/bg182885.aspx .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 ソリッドモデリングファイル http://www.mxcad.com/spaceclaim/working-with-spaceclaim-documents/8876-spaceclaim-file-format-421 .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内に名称規約に従ったファイルが正しく格納されている必要がある。

 パッケージ、パーツ、およびリレーションシップ 
右|サムネイル|Container structure of Part 2 of the Ecma Office Open XML standard, ECMA-376
OPCの専門用語において、パッケージはZIPアーカイブに対応し、パーツはZIPアーカイブに格納されているファイルに対応する。パッケージ内の各パーツには、MIMEメディアタイプ形式で表現された特定の要素タイプに加えて、一意のURI準拠のパーツ名が存在する。パーツの要素タイプはパーツに格納されているデータの型を明示的に定義しており、拡張子に起因する重複や曖昧さといった扱いの難しさを削減する。

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

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

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

 識別子 (ID)
 省略可能なソース（パッケージまたはパッケージ内のパーツ）
 リレーションシップタイプ（リレーションシップのタイプを定義するURI形式表現）
 ターゲット（パッケージ内の他のパーツまたは外部リソースを指すURI）

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

 /[Content_Types].xmlファイル
 このファイルはパッケージ内のすべてのパーツのMIMEメディアタイプを定義する。「/[Content_Types].xml」ファイルは、特定のパーツに対する要素タイプのファイル拡張子の既定値とは異なるオーバーライドに加えて、ファイル拡張子に基づく既定の割り当てを定義する。例えば、これらの定義済みのMIMEタイプの1つは次のようになる:
<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>
 /_rels
 ルートレベルの「/_rels」フォルダにはパッケージ全体のリレーションシップが格納される。「/_rels」フォルダには通常「.rels」という名前のファイルが含まれる。「/_rels/.rels」は開始時パッケージレベルリレーションシップが格納されるファイルである。通常、OPC形式のファイルを開くと、アプリケーションは初めに「/_rels/.rels」ファイルにアクセスし、開始時パッケージレベルリレーションシップを読み込む。
 [パーツ名].rels
 各パーツはそれ自体のリレーションシップを持つことができる。_relsフォルダは与えられたパッケージ内の任意のパーツに対するリレーションシップを見つける場所である。特定のパーツに対するリレーションシップを見つけるには、パーツの兄弟ノードである「_rels」フォルダ内を調べる。もしパーツがリレーションシップを持っている場合、「_rels」フォルダにはパーツ名に「.rels」を加えた名前のファイルが存在する。例えば、要素タイプパーツファイルにリレーションシップがあるならば、「[Content_Types].xml.rels」という名前のファイルが「/_rels」フォルダ内に存在する。

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

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

典型的なリレーションシップファイルは次のようなXMLコードを含む:
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
  <Relationship Id="R0" Type="http://schemas.microsoft.com/xps/2005/06/fixedrepresentation" Target="/FixedDocumentSequence.fdseq"/>
  <Relationship Id="R1" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/thumbnail" Target="/Documents/1/Metadata/Page1_Thumbnail.JPG"/>
</Relationships>

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

 チャンク化 
ファイル破損の影響を少なくできることから、ドキュメントを小さなチャンクに分割することは推奨されている。 Using OPC to Store Your Own Data (page 3) - OPC Recommendations

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

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

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

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

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

 脚注 

 関連項目 
 OPC UA

Category:ファイルフォーマット
Category:ISO
Category:IEC