マークアップ互換性の概要

このトピックでは、Open XML SDK for Office に含まれるマークアップ互換性機能について説明します。

概要

Microsoft Word 2013 で導入された機能を使用している Microsoft Office 2013 のドキュメントがあるとします。 以前のバージョンの Microsoft Word 2010 でそのドキュメントを開くと、どうなるでしょうか。 Word 2010 では新機能が正しく認識されなくても、そのドキュメントで Word 2010 との相互運用性が維持されるのが、理想的な状態です。

仮に、より新しいバージョンの Office でそのドキュメントを開いた場合にどうなるかについても考えます。 この場合も、想定したとおりにそのドキュメントが機能することが望まれます。 つまり、より新しいバージョンの Office でも Word 2013 で作成されたドキュメントで使用されている機能が認識されサポートされることが望まれます。

Open XML では、これらのシナリオが想定されています。 Office Open XML ファイル形式の仕様に関して、ECMA-376, Second Edition, Part 3 - Markup Compatibility and Extensibility で、上記の望ましい結果を得るための機能が説明されています。

Open XML SDK では、仕様の詳細の専門家になる必要なく、上記の Office 2013 の目的の結果を簡単に達成できるようにマークアップ互換性がサポートされています。

マークアップの互換性とは

Open XML では、ワープロ ドキュメント、スプレッドシートおよびプレゼンテーションのドキュメントの形式が、特定のマークアップ言語の形式 (WordprocessingML、SpreadsheetML、および PresentationML) で定義されています。 Open XML ファイル形式に関して、マークアップ互換性とは、上記のマークアップ言語の 1 つを使用して作成されたドキュメントの、異なる機能セットを持ったアプリケーションの間、またはアプリケーションのバージョンの間の相互運用性を促進する機能です。 これは、Open XML の仕様のマークアップ互換性の名前空間内のXML 要素および属性の定義されたセットの使用によってサポートされます。 マークアップはドキュメント形式でサポートされていますが、Microsoft Word などのマークアップの作成側と利用側でも同様にサポートしている必要があることに注意してください。 つまり、相互運用性は、ファイル形式でのサポートとアプリケーションによるサポートの両方の機能です。

Open XML ファイル形式仕様でのマークアップの互換性

マークアップの互換性については 、ECMA-376、Second Edition、パート 3 - マークアップ互換性と機能拡張で説明されています。これは、マークアップの互換性を理解するための読み取りをお勧めします。 仕様では、互換性ルールを表す XML 属性と、代替コンテンツを指定する XML 要素を定義します。 たとえば、 Ignorable 属性は、使用しているアプリケーションで認識されない場合に無視できる名前空間を指定します。 Alternate-Content 要素は、実行時にアプリケーションによって選択できるマークアップの代替手段を指定します。 たとえば、Word 2013 では、認識するマークアップの代替のみを選択できます。 互換性ルール属性と代替コンテンツ要素とその詳細の完全な一覧については、仕様を参照してください。

マークアップ互換性のための Open XML SDK のサポート

Open XML SDK がマークアップの互換性のために行う作業は、詳細で微妙です。 ただし、目標は、ドキュメントを開くときに割り当てる設定を使用して、ドキュメントを前処理して次のように要約できます。

  1. 理解されない名前空間の要素のフィルター処理または削除を行う (たとえば、Office 2010 のコンテキストで開かれた Office 2013 ドキュメント)
  2. マークアップ互換性の要素および属性を Open XML の仕様で指定されているように処理する

実行される前処理は、ECMA-376 Second Edition: Part 3.13 に従います。

マークアップ互換性に対する Open XML SDK のサポートは、主に 2 つのクラスの形式で、コンテンツが ECMA-376 Second Edition に従って前処理される方法で提供されます。 2 つのクラスとは、 OpenSettingsMarkupCompatibilityProcessSettings です。 前者を使用して、SDK の動作全体に適用する設定を提供します。 後者を使用して、それらの設定の一部分、具体的にはマークアップ互換性に適用する設定を提供します。

開いたときにステージを設定する

Open XML SDK を使用してドキュメントを開くと、 OpenSettings クラスのインスタンスをパラメーターとして受け入れる署名を持つオーバーロードを使用できます。 open settings クラスを使用して、SDK の動作を制御する特定の重要な設定を提供します。 特に、MarkupCompatibilityProcessSettings プロパティに保存されている一連の設定によって、マークアップ互換性の要素および属性がどのように処理されるかが決定されます。 ドキュメントを開く前に、このプロパティを MarkupCompatibilityProcessSettings クラスのインスタンスに設定します。

このクラスには、以下のプロパティがあります。

既定では、ドキュメントは前処理されません。 しかし、OpenSettings を指定して、マークアップ互換性の処理の設定を提供すると、ドキュメントはそれらの設定に従って前処理されます。

以下のコード例では、OpenSettings クラスのインスタンスをパラメーターとして使用して Open メソッドを呼び出す方法を示しています。 ProcessMode プロパティおよび TargetFileFormatVersions プロパティは MarkupCompatiblityProcessSettings コンストラクターの一部として初期化されることに注意してください。

    // Create instance of OpenSettings
    OpenSettings openSettings = new OpenSettings();

    // Add the MarkupCompatibilityProcessSettings
    openSettings.MarkupCompatibilityProcessSettings =
        new MarkupCompatibilityProcessSettings(
            MarkupCompatibilityProcessMode.ProcessAllParts, 
            FileFormatVersions.Office2007);

    // Open the document with OpenSettings
    using (WordprocessingDocument wordDocument = 
        WordprocessingDocument.Open(filename, 
            true,
            openSettings))
    {
        // ... more code here
    }

前処理中の動作

前処理中、Open XML SDK はマークアップ互換性名前空間の要素と属性を削除し、選択されていない代替コンテンツ要素の内容を削除し、互換性ルール属性を適宜解釈します。 この動作は、処理モードと対象のファイル形式のバージョンのプロパティによってガイドされます。

ProcessMode プロパティにより、前処理するパーツが決定します。 これらのパーツのコンテンツは、TargetFileFormatVersions プロパティで示されるアプリケーションのバージョンで認識される要素のみを含むように、フィルター処理されます。

警告

[!注意] 前処理によって、保存されるものに影響があります。 ファイルを保存するときに保存されるマークアップは前処理後に保持されるもののみです。

プロセス モードについて

処理モードは、前処理するドキュメント パーツを指定します。 このプロパティを MarkupCompatibilityProcessMode 列挙のメンバーに設定します。 既定値の NoProcess は、実行される前処理がないことを示します。 使用するアプリケーションで、マークアップ互換性の名前空間内のすべての要素および属性を含む、ドキュメントのマークアップ内に存在するすべての要素および属性を認識でき、処理できる必要があります。

特定のドキュメント パーツで作業を行い、他は操作しない場合について考えます。 たとえば、ファイルの変更を最小限にする場合を考えます。 その場合、処理モードに ProcessLoadedPartsOnly を指定します。 この設定により、前処理および関連付けられたフィルター処理は、ドキュメント全体ではなく、読み込まれたドキュメント パーツにのみ適用されます。

最後に、 ProcessAllParts があります。 その名のとおり、この値を選択すると、ドキュメント全体が前処理されます。

ターゲット ファイル形式のバージョンを設定する

対象のファイル形式のバージョンのプロパティによって、Office 2010 または Office 2013 のどちらのコンテキストでマークアップ互換性のコンテンツを処理するかを選択できます。 TargetFileFormatVersions プロパティを FileFormatVersions 列挙のメンバーに設定します。

既定値の Office2010 は、SDK では、Office 2010 で定義されている名前空間が認識され、Office 2013 で定義されている名前空間は認識されない前提となっていることを示します。 したがって、前処理中に、SDK では、Office 2013 で定義された名前空間は無視され、Office 2010 と互換性のある代替コンテンツが選択されます。

ターゲット ファイル形式のバージョンプロパティを Office2013 に設定すると、Open XML SDK では、Office 2010 および Office 2013 で定義されているすべての名前空間が認識され、Office 2013 で定義されているコンテンツは無視されず、Office 2013 互換代替コンテンツが選択されます。