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 haben ein Microsoft Word 2013-Dokument, das eine in Microsoft Office 2013 eingeführte Funktion nutzt. Was soll passieren, wenn Sie dieses Dokument in Microsoft Word 2010, einer früheren Version, öffnen? Idealerweise sollte das Dokument in Word 2010 zu öffnen sein und bearbeitbar bleiben, selbst wenn Word 2010 die neue Funktion nicht versteht.

Ü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. Dies bedeutet, dass Sie möchten, dass die spätere Version von Office eine Funktion versteht und unterstützt, die in einem mit Word 2013 erstellten Dokument genutzt 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 2013 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 Ignorable-Attribut gibt beispielsweise Namespaces an, die ignoriert werden können, wenn sie von der verwendenden 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:

  1. Herausfiltern oder Entfernen von Elementen aus Namespaces, die nicht verstanden werden (z. B. bei einem im Office 2010-Kontext geöffneten Office 2013-Dokument)
  2. 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 heißen 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 Bereitstellen bestimmter wichtiger Einstellungen, die das Verhalten des SDK steuern. Eine Gruppe von Einstellungen, die in der MarkupCompatibilityProcessSettings-Eigenschaft gespeichert ist, bestimmt insbesondere, wie Markupkompatibilitätselemente und -attribute verarbeitet werden. Vor dem Öffnen eines Dokuments legen Sie die Eigenschaft auf eine Instanz der MarkupCompatibilityProcessSettings-Klasse fest.

Die Klasse hat die folgenden Eigenschaften:

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 Eigenschaften ProcessMode 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 vorzuverarbeitenden Teile. Der Inhalt in diesen Teilen wird gefiltert, sodass nur Elemente enthalten sind, die von der durch die 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, NoProcess, gibt an, dass keine Vorverarbeitung erfolgt. 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 ProcessLoadedPartsOnly für den Prozessmodus an. 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 es ProcessAllParts, das angibt, was der Name impliziert. Wenn Sie diesen Wert auswählen, wird das gesamte Dokument vorverarbeitet.

Festlegen der Zieldateiformatversion

Mit der Versionseigenschaft für das Zieldateiformat können Sie auswählen, ob der Markupkompatibilitätsinhalt im Office 2010- oder Office 2013-Kontext verarbeitet werden soll. Legen Sie die TargetFileFormatVersions-Eigenschaft auf einen Member der FileFormatVersions-Enumeration fest.

Der Standardwert, Office2010, bedeutet, dass das SDK davon ausgeht, dass in Office 2010 definierte Namespaces verstanden werden, in Office 2013 definierte Namespaces hingegen nicht. Bei der Vorverarbeitung ignoriert das SDK demnach in Office 2013 definierte Namespaces und wählt den Office 2010-kompatiblen „Alternate-Content"-Inhalt 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.