次の方法で共有


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

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

概要

Microsoft Office 365で導入された機能を採用した Microsoft Word 365 ドキュメントがあるとします。 以前のバージョンの Microsoft Word 2016でそのドキュメントを開くと、何が起こるでしょうか。 Word 2016が新機能を理解していない場合でも、ドキュメントをWord 2016と相互運用できるようにするのが理想的です。

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

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

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

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

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 2016 コンテキストで開Office 365ドキュメントなど)
  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 クラスのインスタンスをパラメーターとして受け入れる署名を持つオーバーロードを使用できます。 OpenSettings クラスを使用して、SDK の動作を制御する特定の重要な設定を提供します。 特に、 MarkupCompatibilityProcessSettings プロパティに格納されている 1 つの設定セットによって、マークアップ互換性要素と属性の処理方法が決まります。 ドキュメントを開く前に、 プロパティを 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 バージョンのコンテキストでマークアップ互換性コンテンツを処理することを選択できます (例: Office 365)。 TargetFileFormatVersions プロパティを FileFormatVersions 列挙型のメンバーに設定します。

Office2007の既定値は、OFFICE 2007 で定義されている名前空間は理解されますが、Office 2010 以降で定義されている名前空間は認識されないことを SDK が想定していることを意味します。 したがって、前処理中に、SDK は新しいバージョンの Office で定義されている名前空間を無視し、Office 2007 互換代替コンテンツを選択します。

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