内容タイプ
[Content_Types].xmlは、パッケージを解凍するとルートに存在するファイルです。
パッケージ内のパーツの内容タイプを定義しています。内容タイプとは、パッケージ内のパーツの属性です。どのパーツがどのような機能を持っているのかを示しています。
WordprocessingMLのパッケージでは、 [Content_Types].xmlファイルの中は次のようになっています。
Types要素をルートとして、Default要素とOverride要素があります。Default要素はパッケージ内のファイルの拡張子と内容タイプの定義、Override要素はパッケージの各パーツのファイル名とその内容タイプを定義します。
Default要素ではパッケージ内のすべてのパーツの拡張子を定義します。
サンプルで示したWordprocessingML文書は非常に単純なものです。パッケージ内に存在するファイルは関連付けするためのリレーションシップファイル(拡張子は.rels)と文書パーツ(拡張子は.xml)だけとなります。
Default要素ではExtension属性とContentType属性が必須です。Extention属性にはパッケージに含まれるファイルの拡張子が定義されます。上のサンプルでは、パッケージ内の"rels"、"xml"の2種類が定義されています。ContentType属性はRFC2616で定義されるURIの形式で、Extention属性で示された拡張子を持つファイルの内容タイプを指定します。いずれも空でない属性値を指定する必要があります。
例えばWord文書にJPEG画像を埋め込んだ場合、次のようにDefault要素が追加されます。
また、WordprocessingML文書にグラフ(SpreadsheetMLのデータ)がある場合、SpreadsheetMLデータはパッケージそのものが埋め込まれ、次のように“xlsx”の拡張子を定義するDefault要素が追加されます。
Override要素にはContentType属性とPartName属性があります。ContentType属性によって内容タイプの種別を表します。PartName属性はパッケージ内のパーツのファイル名です。
たとえば、Wordのメイン文書パーツは以下のように定義されます。
「Default要素は拡張子ごとに内容タイプを設定し、Override要素ではファイル単位で扱いを上書きする」と考えるとよいでしょう。上の例ではword/document.xmlは汎用の拡張子.xmlを使用していますが、WordprocessingMLのメイン文書パーツとして扱われる必要があります。そこで「汎用のXML」から「WordprocessingMLのメイン文書パーツ」へと内容タイプの上書きを行っているのです。Override要素では、メイン文書パーツに限らず指定したファイルの内容タイプ定義を上書きできます。
最終的にDefaultとOverrideを組み合わせた結果を評価するため、パッケージ内のファイルすべてをOverride要素で記述した場合、Default要素の記述がなくとも有効です。
ContntType属性の値は、各アプリケーションとパーツの種類によって決まった値を記述します。
WordprocessingML(Word)、SpreadsheetML(Excel)、PresentationML(Powerpoint)のメインパーツのファイル名(カッコ内)と内容タイプ定義は次の通りです。
WordprocessingML
- メインパーツ:
- メイン文書パーツ(word/document.xml)
- 内容タイプ定義:
-
application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml
SpreadsheetML
- メインパーツ:
- ワークブックパーツ(xl/workbook.xml)
- 内容タイプ定義:
-
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml
PresentationML
- メインパーツ:
- プレゼンテーションパーツ(ppt/presentation.xml)
- 内容タイプ定義:
-
application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml
ファイル名やフォルダ名はOOXML仕様としては固定されていません。本書では簡単のためMS
Officeで利用されているフォルダ名、ファイル名を使用します。
パーツのファイル名、フォルダ名
メインパーツのファイル名やフォルダ名については、[Content_Types].xmlによる内容タイプと後述のリレーションシップでの記述によって確定します。この記述については、利用可能な文字や表記方法に制限が存在します。制限についてはISO
29500-2をご覧ください。ファイル名が完全に固定されているのは[Content_Types].xmlのみとなります。ISO 29500-1:2016内の例示では「word/document.xml」のように、Word、Excel、PowerPointの挙動と同様のファイル名、フォルダ名が多用されています。
たとえばWordprocessingMLのメインパーツdocument.xmlのファイル名をdocumentMod.xmlに変更してみましょう。[Content_Types].xmlのPartName属性の値、_rels/.relsで、該当Relationship要素のTarget属性をword/documentMod.xmlに変更することでWord
2019でもWordprocessingML文書として認識されました。また、この変更が不正確なとき破損したファイルとして認識されました。