Общие сведения о совместимости разметки
В этом разделе представлены функции совместимости разметки, включенные в пакет SDK Open XML для Office.
Введение
Предположим, что у вас есть документ Microsoft Word 365, в котором используется функция, представленная в Microsoft Office 365. Что должно произойти при открытии этого документа в Microsoft Word 2016 более ранней версии? В идеале требуется, чтобы документ оставался совместимым с Word 2016, даже если Word 2016 не будут понимать новую функцию.
Рассмотрим также, что должно произойти, если открыть этот документ в гипотетической будущей версии Office. В этом случае документ также должен работать как ожидается. То есть вы хотите, чтобы более поздняя версия Office понимала и поддерживала функцию, используемую в документе, созданном Word 365.
Open XML предвидит такие случаи. В спецификации форматов файлов Office Open XML описываются средства для достижения нужных результатов в разделе ECMA-376, 2-я версия, часть 3 совместимость и расширяемость разметки.
Пакет SDK Open XML поддерживает совместимость разметки таким образом, что позволяет легко достичь указанных выше желаемых результатов для и Office 365 без необходимости стать экспертом в деталях спецификации.
Что такое совместимость разметки?
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 для обеспечения совместимости разметки, является подробной и тонкой. Однако цель этой работы можно описать так: использование параметров, задаваемых при открытии документа, предварительная обработка документа в следующих целях:
- Фильтрация или удаление элементов из пространств имен, которые не будут поняты (например, Office 365 документ, открытый в контексте Office 2016)
- Обработка любых элементов и атрибутов совместимости разметки, которые определены в спецификации 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
, который указывает, что подразумевает имя. Если выбрать это значение, выполняется предварительная обработка всего документа.
Настройка версии целевого формата файла
Свойство версий целевого формата файлов позволяет обрабатывать содержимое совместимости разметки в контексте определенной версии Office, например Office 365. Задайте для TargetFileFormatVersions
свойства элемент перечисления FileFormatVersions .
Значение по умолчанию означает, что пакет SDK предполагает, что пространства имен, Office2007
определенные в Office 2007, понятны, но не пространства имен, определенные в Office 2010 или более поздних версиях. Таким образом, во время предварительной обработки пакет SDK игнорирует пространства имен, определенные в новых версиях Office, и выбирает альтернативное содержимое, совместимое с Office 2007.
Если для свойства Office2013
версий целевого формата файлов задано значение , пакет SDK Open XML предполагает, что все пространства имен, определенные в Office 2010 и Office 2013, понятны, не игнорирует содержимое, определенное в Office 2013, и выберет альтернативное содержимое, совместимое с Office 2013.