Einführung in die Markupkompatibilität
In diesem Thema werden die Markupkompatibilitätsfeatures vorgestellt, die im Open XML SDK für Office enthalten sind.
Einführung
Angenommen, Sie verfügen über ein Microsoft Word 365-Dokument, das ein in Microsoft Office 365 eingeführtes Feature verwendet. Was sollte passieren, wenn Sie dieses Dokument in einer früheren Version von Microsoft Word 2016 öffnen? Im Idealfall soll das Dokument mit Word 2016 interoperabel bleiben, auch wenn Word 2016 das neue Feature nicht verstehen.
Überlegen Sie ferner, was passieren soll, wenn Sie dieses Dokument in einer späteren Version von Office öffnen. Auch in diesem Fall möchten Sie, dass das Dokument wie erwartet funktioniert. Das heißt, Sie möchten, dass die spätere Version von Office ein Feature versteht und unterstützt, das in einem von Word 365 erstellten Dokument verwendet wird.
Open XML antizipiert diese Szenarien. In der in ECMA-376, Second Edition, Part 3 - Markup Compatibility and Extensibility enthaltenen Office Open XML-Dateiformatspezifikation werden Möglichkeiten zum Erzielen der oben beschriebenen gewünschten Ergebnisse definiert.
Das Open XML SDK unterstützt Markupkompatibilität auf eine Weise, die es Ihnen erleichtert, die oben genannten gewünschten Ergebnisse für und Office 365 zu erzielen, ohne unbedingt ein Experte für die Spezifikationsdetails werden zu müssen.
Was ist Markupkompatibilität?
Open XML definiert Formate für Textverarbeitungs-, Tabellenkalkulations- und Präsentationsdokumente in Form bestimmter Markupsprachen, nämlich WordprocessingML, SpreadsheetML und PresentationML. In Bezug auf die Open XML-Dateiformate ist Markupkompatibilität die Fähigkeit eines Dokuments, das in einer der oben genannten Markupsprachen ausgedrückt wird, um die Interoperabilität zwischen Anwendungen oder Versionen einer Anwendung mit unterschiedlichen Featuresätzen zu erleichtern. Dies wird durch die Verwendung eines definierten Satzes von XML-Elementen und -Attributen im Markupkompatibilitätsnamespace der Open XML-Spezifikation unterstützt. Beachten Sie, dass das Markup zwar im Dokumentformat unterstützt wird, Markupproduzenten und -consumer wie Microsoft Word es jedoch ebenfalls unterstützen müssen. Anders ausgedrückt: Interoperabilität ist eine Funktion der Unterstützung sowohl im Dateiformat als auch durch Anwendungen.
Markupkompatibilität in der Open XML-Dateiformatspezifikation
Markupkompatibilität wird in ECMA-376, Second Edition, Part 3 – Markup Compatibility and Extensibility (Markupkompatibilität und Erweiterbarkeit) erläutert. Dies wird empfohlen, um die Markupkompatibilität zu verstehen. Die Spezifikation definiert XML-Attribute zum Ausdrücken von Kompatibilitätsregeln und XML-Elemente zum Angeben alternativer Inhalte. Das Attribut gibt beispielsweise Namespaces an, Ignorable
die ignoriert werden können, wenn sie von der nutzenden Anwendung nicht verstanden werden. Alternate-Content Elemente geben Markupalternativen an, die von einer Anwendung zur Laufzeit ausgewählt werden können. Beispielsweise kann Word 2013 nur die Markupalternative auswählen, die er erkennt. Die vollständige Liste der Kompatibilitätsregelattribute und Alternativen Inhaltselemente sowie deren Details finden Sie in der Spezifikation.
Open XML SDK-Unterstützung für Markupkompatibilität
Die Arbeit, die das Open XML SDK für die Markupkompatibilität ausführt, ist detailliert und subtil. Doch das Ziel kann dahingehend zusammengefasst werden, dass Einstellungen, die beim Öffnen eines Dokuments zugewiesen werden, für eine Vorverarbeitung mit folgenden Zwecken sorgen:
- Filtern oder Entfernen von Elementen aus Namespaces, die nicht verstanden werden (z. B. Office 365 Dokument, das im Office 2016-Kontext geöffnet wurde)
- Verarbeiten von Markupkompatibilitätselementen und -attributen gemäß der Open XML-Spezifikation
Die Vorverarbeitung erfolgt gemäß ECMA-376, Second Edition: Part 3.13.
Die Unterstützung des Open XML SDK für Markupkompatibilität erfolgt hauptsächlich in Form von zwei Klassen und in der Art und Weise, in der Inhalte gemäß ECMA-376, Second Edition vorverarbeitet werden. Die beiden Klassen sind OpenSettings
und MarkupCompatibilityProcessSettings
. Die erste Klasse bietet Einstellungen, die sich auf das allgemeine Verhalten des SDK beziehen. Die zweite Klasse bietet einen Teil dieser Einstellungen, insbesondere diejenigen, die sich auf die Markupkompatibilität beziehen.
Festlegen der Phase beim Öffnen
Wenn Sie ein Dokument mit dem Open XML SDK öffnen, haben Sie die Möglichkeit, eine Überladung mit einer Signatur zu verwenden, die eine instance der OpenSettings -Klasse als Parameter akzeptiert. Sie nutzen die "OpenSettings"-Klasse zum Bereistellen bestimmter wichtiger Einstellungen, die das Verhalten des SDK steuern. Eine Gruppe von Einstellungen, die in der MarkupCompatibilityProcessSettings -Eigenschaft gespeichert sind, bestimmt, wie Markupkompatibilitätselemente und Attribute verarbeitet werden. Sie legen die -Eigenschaft vor dem Öffnen eines Dokuments auf einen instance der MarkupCompatibilityProcessSettings -Klasse fest.
Die Klasse hat die folgenden Eigenschaften:
ProcessMode – Bestimmt die Teile, die vorverarbeitet werden.
TargetFileFormatVersions – Gibt den Kontext an, der für die Vorverarbeitung gilt.
Dokumente werden standardmäßig nicht vorverarbeitet. Wenn Sie jedoch Öffnungseinstellungen und Verarbeitungseinstellungen für die Markupkompatibilität angeben, wird das Dokument gemäß diesen Einstellungen vorverarbeitet.
Der folgende Beispielcode veranschaulicht das Aufrufen der "Open"-Methode mit einer Instanz der "OpenSettings"-Klasse als Parameter. Beachten Sie, dass die ProcessMode
Eigenschaften und TargetFileFormatVersions
als Teil des MarkupCompatiblityProcessSettings
Konstruktors initialisiert werden.
// 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
}
Was geschieht während der Vorverarbeitung?
Während der Vorverarbeitung entfernt das Open XML SDK Elemente und Attribute im Markupkompatibilitätsnamespace, entfernt den Inhalt nicht ausgewählter alternativer Inhaltselemente und interpretiert kompatibilitätsregelbasierte Attribute nach Bedarf. Diese Aufgaben unterliegen den Eigenschaften "ProcessMode" und "TargetFileFormatVersions".
Die ProcessMode
-Eigenschaft bestimmt die Teile, die vorverarbeitet werden sollen. Der Inhalt in diesen Teilen wird so gefiltert, dass er nur Elemente enthält, die von der in der TargetFileFormatVersions
-Eigenschaft angegebenen Anwendungsversion verstanden werden.
Warnung
[!VORSICHT] Die Vorverarbeitung bestimmt, was gespeichert wird. Wenn Sie eine Datei speichern, wird nur das Markup gespeichert, das nach der Vorverarbeitung übrig bleibt.
Grundlegendes zum Prozessmodus
Der Verarbeitungsmodus bestimmt, welche Dokumentteile vorverarbeitet werden müssen. Sie legen diese Eigenschaft auf einen Member der MarkupCompatibilityProcessMode -Enumeration fest. Der Standardwert gibt an, NoProcess
dass keine Vorverarbeitung ausgeführt wird. Ihre Anwendung muss in der Lage sein, sämtliche Elemente und Attribute im Dokumentmarkup zu verstehen und zu verarbeiten, einschließlich aller Elemente und Attribute im "Markup Compatibility"-Namespace.
Möglicherweise möchten Sie an bestimmten Dokumentteilen arbeiten, während der Rest unverändert bleibt. Sie können z. B. eine minimale Änderung der Datei sicherstellen. Geben Sie in diesem Fall für den Prozessmodus an ProcessLoadedPartsOnly
. Mit dieser Einstellung wird die Vorverarbeitung und die zugehörige Filterung nur auf die geladenen Dokumentteile angewendet, nicht auf das gesamte Dokument.
Schließlich gibt ProcessAllParts
es , was der Name impliziert. Wenn Sie diesen Wert auswählen, wird das gesamte Dokument vorverarbeitet.
Festlegen der Zieldateiformatversion
Mit der Versionseigenschaft des Zieldateiformats können Sie auswählen, dass Markupkompatibilitätsinhalte im Kontext einer bestimmten Office-Version verarbeitet werden sollen, z. B. Office 365. Legen Sie die TargetFileFormatVersions
-Eigenschaft auf einen Member der FileFormatVersions -Enumeration fest.
Der Standardwert bedeutet, dass das SDK davon ausgeht, Office2007
dass in Office 2007 definierte Namespaces verstanden werden, aber keine Namespaces, die in Office 2010 oder höher definiert sind. Daher ignoriert das SDK während der Vorverarbeitung die in neueren Office-Versionen definierten Namespaces und wählt die mit Office 2007 kompatiblen alternativen Inhalte aus.
Wenn Sie die Eigenschaft der Zieldateiformatversionen auf Office2013
festlegen, geht das Open XML SDK davon aus, dass alle in Office 2010 und Office 2013 definierten Namespaces verstanden werden, ignoriert keine unter Office 2013 definierten Inhalte und wählt die mit Office 2013 kompatiblen alternativen Inhalte aus.