03.06.2009, 19:43 Uhr

Einführung in das Open XML-Format - WordML im Überblick

Die Office-Anwendungen Excel, PowerPoint und Word verwenden jeweils ihr eigenes XML-Vokabular für die Darstellung eines Dokuments, das ExcelML, PowerPointML und WordML heisst, wobei "ML" jedes Mal für "Markup Language" steht. Word-PowerUser werden sich in Zukunft zu mindestens in Grundzügen mit WordML auskennen müssen, denn ist die Grundlage dafür, Word-Dokumente ausserhalb des Office-Pakets zu erstellen.
Die Struktur eines Dokuments spiegelt sich im Aufbau des jeweiligen Vokabulars wieder. Eine Word-Datei enthält immer nur eine Dokumentenebene, das Dokument selbst. Bei Excel gibt es Arbeitsmappen (Workbooks), die wiederum einen Container für Tabellenblätter (Sheets) oder Diagramme (Charts) darstellen, selber aber keine anderen wesentlichen Informationen enthalten. Der Dokumentaufbau ist daher bei Word einfacher und mit weniger Beziehungen behaftet.WordML - Word 2007-Dokumente 100% in XML dargestelltDas oberste Element eines Word-Dokuments ist (natürlich) . Darauf folgt das Element , an den sich der Inhalt des Dokuments anschließt. Was auch manche erfahrenen Anwender nicht unbedingt wissen, ein Word-Dokument besteht aus einer Aneinanderreihung von Absätzen, die durch Paragraph-Elemente ( ) repräsentiert werden. In einem Absatz gibt es mindestens eine Zeichenfolge mit identischer Formatierung, der sog. Run (). Der Text, um den es in der Regel geht, ist Teil des Text-Elementes (). Listing 1 zeigt den Aufbau des wohl denkbar einfachsten Word-Dokuments im WordML-Format.Einfachstes denkbares DokumentListing 1: Das vermutlich einfachste WordML-Dokument der WeltDer Umstand, dass der Texte eines Absatz in einem Run-Abschnitt untergebracht ist, hat einen einfachen Grund: Es wird dadurch einfacher, Formatierungen zuzuweisen. Jeder halbwegs erfahrene Word-Anwender weiß, dass bei Word zwischen direkter Formatierung und der indirekten Formatierung durch das Einbeziehen von Formatvorlagen (Styles) unterschieden wird. Direkte Formatierungen, wie z.B. die Fettschrift eines Wortes, werden an Ort und Stelle im -Element definiert (Listing 2).ein erweiterbarer StandardListing 2: Ein Absatz mit direkter FormatierungDer Text in Listing 2 wird in roter, kursiver Fettschrift ausgegeben und für die Rechschreibprüfung wird die Information hinterlegt, dass es sich um die Sprache Deutsch in der Kultur Schweiz handelt. Diese Formatierungen werden auf den folgenden Text angewandt. Der etwas ungewöhnlich wirkende Farbwert ist ein RGB-Wert in Hexadezimalschreibweise (FF0000 = Rot-Anteil 255, Grün-Anteil 0, Blau-Anteil 0), der in der Open XML-Dokumentation [1] beschrieben wird und über den Open XML Class Explorer aus dem Open XML SDK abgerufen werden kann [2]. Formatvorlagen als AlternativeFormatvorlagen für einen Absatz oder ein Zeichen besitzen den Vorteil, dass die Formatierung an einer Stelle im Dokument hinterlegt wird und jedem Absatz oder Zeichen über die Elemente oder nur zugeordnet werden muss. Listing 3 zeigt einen Absatz, der über eine Formatvorlage formatiert wird.Das Microsoft Open XML Format (Teil 2) Listing 3: Absatzformatierung über eine FormatvorlageFormatvorlagen werden in der ebenfalls im Open XML-Container enthaltenen Datei styles.xml definiert, welche über die StyleId verknüpft wird (Listing 4).Listing 4: Formatvorlagen werden in stylex.xml definiertDa Vorlagen aufeinander aufbauen können, muss es einen Weg geben, dies im WordML ausdrücken zu können. Dafür ist das basedOn-Element mit der korrekten Basis zuständig. Die neue Vorlage überschreibt entweder Eigenschaften des Basisformats oder definiert sie neu. Bilder in DokumentenKommen Bilder ins Spiel, wird das WordML ein wenig komplizierter. Eingebettete Bilder werden durch ein -Element repräsentiert, das als äußerstes Element ein -Element (aus dem Drawing-Namespace von WordML) enthält. Dies stellt einen "Bilderrahmen" dar, in dem das Bild "hängt". Das Bild bzw. der Verweis auf die Bitmap ist Teil des Picture-Element (). Das Picture-Element kann durch Ändern der Eigenschaften gedreht oder auch perspektivisch verzerrt werden. Die Bilddatei selbst wird über eine RelationshipID referenziert und liegt im Media-Ordner des Containers:Blip bedeutet in diesem Zusammenhang "Binary Large Image or Picture". Definiert werden alle Beziehungen in der Datei document.xml.rels im Ordner word\rels im Dokumentcontainer.Id="rId4" Type="http://schemas....ships/image" Target="media/image1.jpeg"/>Wer per Programm auf ein WordML-Dokument zugreifen möchte, muss sich um diese Details nicht allzu viele Gedanken machen, denn das Open XML SDK 2.0 hält eine Fülle von Klassen bereit, die auch die Beziehungen abstrahieren, so dass Entwickler im Allgemeinen mit ihnen nicht direkt in Berührung kommen. Es ist allerdings von Vorteil, wenn man sich über den Aufbau eines Open XML-Dokuments, zu dem auch die Beziehungen gehören, im Klaren ist.Listing 5 zeigt einen Auschnitt aus einem kleinen C#-Programm, das mit Hilfe der Klassen des Open XML SDK (Stand: April 2009) die Namen aller in einem Word-Dokument per Verknüpfung eingefügten Bilder ausgibt. Dabei fällt positiv auf, dass die WordML-Elemente nicht direkt über die ansonsten erforderlichen Xml-Klassen und damit auf der Ebene des XML-Inhalts, sondern ausschließlich über die Klassen aus dem OpenXML SDK und damit auf der Ebene des Dokuments angesprochen werden. Wird das Dokument auf dieser Ebene angesprochen, bietet sich auch LINQ als natürliche Abfragesprache an. Die umfangreiche Hilfedatei des Open XML SDKs listet nicht nur alle Klassen auf, sondern stellt sie auch den WordML-Elementen gegenüber (Abbildung 1). Abbildung 1: Die Hilfedatei zum Open XML SDK stellt alle Klassen den WordML-Elementen gegenüber using A = DocumentFormat.OpenXml.Drawing;var AllePics = mainPart.Document.Body.Descendants(); liStatus.Items.Add(String.Format("Anzahl Bilder: {0}", AllePics.Count()));// Jetzt alle Bilder durchgehenforeach (A.Pictures.Picture pic in AllePics) {A.Pictures.NonVisualPictureProperties Nvpr = pic.Elements().ElementAt(0); liStatus.Items.Add(String.Format("Bildpfad: {0}", Nvpr.NonVisualDrawingProperties.GetAttribute("name", "").Value));}Listing 5: Auflisten der Namen der in einem Word-Dokument verknüpften Bilder Einfacher statt komplexerOpen XML erlaubt komplexe Zusammenhänge darzustellen, so dass ein OpenXML-Dokument auf der XML-Elemente schnell recht "kompliziert" werden kann. Allerdings sind die Minimalanforderungen relativ leicht beherrschbar und die Komplexität kann mit der eigenen Anwendung mitwachsen. Was optional ist und was nicht bzw. was die Office Client-Anwendungen ergänzen und was nicht, ist nicht immer gekennzeichnet und muss gegebenenfalls durch "Experimentieren" herausgefunden werden. Das kann aber in der späteren Entwicklung viel Zeit sparen.Sämtliche Inhalte sollten immer über ihre Beziehungen im Zugriff stehen. Das ist Inhalt der Open Packaging Conventions (OPC). Damit können Open XML-Dateien auch für andere Zwecke gebraucht werden, als für Office-Anwendungen. Was hält Sie davon ab, im Rahmen des OPC Open XML so zu modifizieren (eigene Content Types, eigene Strukturen usw.), dass die entstandene Datei z.B. Reportdaten ihrer eigenen Report-Engine aufnimmt? Damit ist sie zwar nicht mehr für Word oder Excel lesbar und sollte deshalb auch einen anderen Suffix tragen, aber der Zugriff auf die Inhalte erfolgt nach wie vor über die bekannten APIs.Links&Literatur[1] http://www.ecma-international.org/publications/standards/Ecma-376.htm[2] http://www.microsoft.com/downloads/details.aspx?familyid=C6E744E5-36E9-45F5-8D8C-331DF206E0D0 AutoreninfoJens Häupel ist als Plattform Strategy Manager bei der Microsoft Deutschland GmbH tätig. Er betreut dort u.a. den Bereich der Office-Entwicklung und beschäftigte sich in dieser Funktion von Anfang an mit Open XML. Sie erreichen ihn über seinen Blog unter http://blogs.msdn.com/jensha.Peter Monadiemi


Das könnte Sie auch interessieren