Общие сведения о совместимости разметки

В этом разделе представлены функции совместимости разметки, включенные в пакет SDK Open XML для 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, 2-я версия, часть 3 — совместимость и расширяемость разметки.

Пакет SDK Open XML поддерживает совместимость разметки таким образом, чтобы упростить достижение указанных выше желаемых результатов для Office 2013 и без необходимости стать экспертом в деталях спецификации.

Что такое совместимость разметки?

Open XML определяет форматы документов текстового процессора, электронных таблиц и презентаций в форме определенных языков разметки, а именно: WordprocessingML, SpreadsheetML и PresentationML. В соответствии с форматами файлов Open XML совместимость разметки — это возможность документа, составленного с использованием одного из указанных языков, обеспечивать взаимодействие приложений или разных версий приложений с различными наборами возможностей. Это достигается за счет использования определенного набора элементов и атрибутов XML в пространстве имен совместимости разметки спецификации Open XML. Учтите, что разметка поддерживается в формате документа, но создатели и потребители разметки, такие как Microsoft Word, также должны поддерживать ее. Другими словами, взаимодействие — это функция поддержки формата файла и приложений.

Совместимость разметки в спецификации форматов файлов Open XML

Совместимость разметки обсуждается в документе ECMA-376, Second Edition, Part 3 - Markup Compatibility and Extensibility, который рекомендуется прочитать для ознакомления с вопросами совместимости разметки. В спецификации определяются атрибуты XML, выражающие правила совместимости, и элементы XML, определяющие разное содержимое. Например, атрибут Ignorable определяет пространства имен, которые можно игнорировать, если потребляющее приложение их не понимает. Элементы альтернативного содержания определяют альтернативную разметку, которую приложение может выбрать во время выполнения. Например, Word 2013 может выбрать только ту альтернативу разметки, которая распознается. Полный список атрибутов правил совместимости и элементов альтернативного содержимого и их описание можно найти в спецификации.

Поддержка совместимости с разметкой в пакете SDK Open XML

Работа, которую выполняет пакет SDK Open XML для обеспечения совместимости разметки, является подробной и тонкой. Однако цель этой работы можно описать так: использование параметров, задаваемых при открытии документа, предварительная обработка документа в следующих целях:

  1. Фильтрация или удаление любых элементов из пространств имен, которые не будут поняты (например, документ Office 2013 открыт в контексте Office 2010).
  2. Обработка любых элементов и атрибутов совместимости разметки, которые определены в спецификации Open XML.

Предварительная обработка выполняется в соответствии с ECMA-376, 2-я версия, часть 3.13.

Поддержка совместимости разметки пакета SDK Open XML осуществляется в основном в форме двух классов и в том, как содержимое предварительно обрабатывается в соответствии с ECMA-376, Second Edition. Эти два класса — OpenSettings и MarkupCompatibilityProcessSettings. Используйте первый из них для установки параметров, которые применяются к общему поведению SDK. Второй класс используйте для указания одной части этих параметров, в частности тех, которые применяются к совместимости разметки.

Настройка этапа при открытии

При открытии документа с помощью пакета SDK Open XML можно использовать перегрузку с сигнатурой, которая принимает экземпляр класса OpenSettings в качестве параметра. С помощью класса параметров открытия вы можете указать важные параметры, управляющие поведением пакета SDK. В частности, один набор параметров, хранящийся в свойстве MarkupCompatibilityProcessSettings, определяет, как обрабатываются элементы и атрибуты совместимости разметки. Перед открытием документа этому свойству присваивается экземпляр класса MarkupCompatibilityProcessSettings.

Этот класс содержит следующие свойства:

  • ProcessMode — определяет предварительно обработанные части.

  • TargetFileFormatVersions — указывает контекст, который применяется к предварительной обработке.

По умолчанию предварительная обработка документов не выполняется. Однако если указать параметры открытия и установить параметры совместимости разметки, выполняется предварительная обработка документа в соответствии с этими параметрами.

В следующем примере кода показано, как вызвать метод 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
    }

Что происходит во время предварительной обработки

Во время предварительной обработки пакет SDK Open XML удаляет элементы и атрибуты в пространстве имен совместимости разметки, удаляет содержимое неподбираемых элементов альтернативного содержимого и интерпретирует атрибуты правила совместимости соответствующим образом. Этой работой управляет режим обработки и свойства версий форматов файлов.

Свойство ProcessMode определяет части, которые обрабатываются предварительно. Содержимое этих частей фильтруется так, чтобы оно содержало только те элементы, которые поддерживает версия приложения, указанная в свойстве TargetFileFormatVersions.

Предупреждение

[!Внимание!] Предварительная обработка влияет на то, что сохраняется. При сохранении файла сохраняется только та разметка, которая остается после предварительной обработки.

Общие сведения о режиме процесса

Режим обработки определяет, какие части документа следует обрабатывать предварительно. Этому свойству присваивается элемент перечисления MarkupCompatibilityProcessMode. Значение по умолчанию (NoProcess) указывает, что предварительная обработка не выполняется. Приложение должно понимать и обрабатывать любые элементы и атрибуты в разметке документа, включая все элементы и атрибуты в пространстве имен совместимости разметки.

Возможно, потребуется поработать с определенными частями документа, не трогая при этом другие части. Например, требуется внести минимальные изменения в файл. В этом случае нужно задать значение ProcessLoadedPartsOnly для режима обработки. При этом предварительная обработка и фильтрация применяется только к загруженным частям документа, а не ко всему документу.

И наконец, есть значение ProcessAllParts, которое указывает, что обрабатываются все части. Если выбрать это значение, выполняется предварительная обработка всего документа.

Настройка версии целевого формата файла

Свойство TargetFileFormatVersions позволяет выбрать контекст для обработки содержимого совместимости разметки — Office 2010 или Office 2013. Присвойте свойству TargetFileFormatVersions элемент перечисления FileFormatVersions.

Значение по умолчанию, Office2010, означает, что пакет SDK предполагает, что пространства имен, заданные в Office 2010, понимаются, в отличие от пространств имен в Office 2013. Таким образом, во время предварительной обработки SDK будет игнорировать пространства имен, заданные в Office 2013, и выберет вариант содержимого, совместимый с Office 2010.

Если для свойства версий целевого формата файлов задано значение Office2013, пакет SDK Open XML предполагает, что все пространства имен, определенные в Office 2010 и Office 2013, понятны, не игнорирует содержимое, определенное в Office 2013, и выберет альтернативное содержимое, совместимое с Office 2013.