WordprocessingML

(Auszug aus "XML in a Nutshell" von Elliotte Rusty Harold & W. Scott Means)

Mit Microsoft Office 2003 für Windows (aber nicht Office 2004 für den Mac) spendierte Microsoft Word und den anderen Office-Komponenten die Fähigkeit, alle Dokumente in XML zu speichern. Standardmäßig verwenden sie aber immer noch ein binäres Format. Die XML-Anwendung, die von Microsoft Word gespeichert wird, heißt WordprocessingML (kurz: WordML). Im Unterschied zu DocBook, TEI und OpenOffice, die jeweils von Grund auf neu entworfen wurden und keine Vorgängerformen berücksichtigen, wurde WordprocessingML eher als eine XML-Repräsentation eines vorhandenen binären Dateiformats gestaltet. Das macht es zu einem ausgesprochen ungewöhnlichen Beispiel für ein narratives Dokumentformat. Wir würden Ihnen nicht empfehlen, seine Gestalt in Ihren Anwendungen zu emulieren. Trotzdem kann es lehrreich sein, es mit den anderen drei Formaten zu vergleichen.

Das folgende Code-Beispiel Ein WordprocessingML-Dokument zeigt dasselbe Dokument wie die vorangegangenen drei Beispiele, diesmal kodiert in WordprocessingML. Die WordprocessingML-Version scheint das undurchschaubarste und kryptischste der Formate zu sein, die wir uns in diesem Kapitel angesehen haben. Dieses Beispiel macht ziemlich deutlich, dass XML kein magischer Elfenstaub ist, den Sie über ein vorhandenes Format stäuben können, um saubere, lesbare, wartbare Daten zu erzeugen.

Das Wurzelelement eines WordprocessingML-Dokuments ist w:wordDocument. Das Präfix w wird hier auf den Namensraum-URI "http://schemas.microsoft.com/office/word/2003/wordml" abgebildet. Es werden eine Reihe weiterer Namensräume für andere Inhalte deklariert, die in eine Word-Datei eingebettet werden können.

Dieses Wurzelelement kann eine Reihe unterschiedlicher Happen von Metadaten enthalten. Ich habe hier drei verwendet: o:DocumentProperties für die grundlegenden Metadaten wie Autor und Titel, ein w:fonts-Element, das die im Dokument verwendeten Schriftarten und ihre Metriken aufführt, sowie ein w:styles-Element, das die Stile aufführt, die im Dokument referenziert werden. Sie sind alle optional. Ein von Microsoft Word selbst gespeichertes Dokument würde allerdings alle von ihnen und noch einige andere einschließen.

Der eigentliche Inhalt des Dokuments wird in einem w:body-Element gespeichert. Der Rumpf wird in Abschnitte eingeteilt (wx:sect-Elemente), die wiederum in Unterabschnitte (wx:subsection-Elemente) eingeteilt werden können. Ungewöhnlicherweise sind diese vollständig optional. Es hätte keine Auswirkungen, würden sie entfernt. Sie sind vor allem vorhanden, um es Menschen bequemer zu machen. Die eigentliche Struktur des Dokuments wird nicht aus Abschnitten und Unterabschnitten abgeleitet, sondern aus Absätzen mit Gliederungsstufen.

In WordProcessingML gibt es drei grundlegende Textelemente, auf die Sie innerhalb des Rumpfs stoßen werden: w:t, w:r und w:p. w:t ist für Text vorgesehen, w:r für Textbereiche wie z.B. span in HTML und w:p für Absätze. Ein w:p-Element enthält w:r-Elemente die jeweils ein w:t-Element enthalten. Weder w:r- noch w:p-Elemente können unmittelbar Text enthalten. Innerhalb von w:t-Elementen ist Whitespace signifikant, in den meisten anderen Elementen aber nicht. Dabei werden Zeilenumbrüche allerdings als äquivalent mit Leerzeichen betrachtet. Das entspricht dem typischen Worttrennungsverhalten von Word und den meisten anderen Textverarbeitungsprogrammen.

Außer bei diesen und ein paar anderen Elementen liefert ein WordprocessingML-Markup keinerlei Inhaltsinformationen. Stattdessen werden viele Zeichen vergeudet, um haargenau das Aussehen der Seite wiederzugeben – einschließlich Schriftarten, Schriftmetriken, Schriftstilen, Zeilenumbrüchen und so weiter. In einem Dokument, das (im Unterschied zu diesem, das von Hand geschrieben wurde) von Word gespeichert wird, können diese Darstellungsinformationen locker mehrere Dutzend Mal so viel Platz einnehmen wie der Inhalt selbst. Überschriften werden nicht durch ein eigenständiges überschriftartiges Element gekennzeichnet, sonderen indem anhand eines vorangehenden Geschwisterelements w:pPr mit einem Kindelement w:outlineLvl ein Gliederungsstufen-Property gesetzt wird. Anstelle von Attributen oder Elternelementen Geschwisterelemente zum Setzen von Properties zu verwenden, ist ein sehr ungewöhnliches Muster – eines, das von den meisten Werkzeugen zur Verarbeitung von XML nicht sonderlich gut unterstützt wird.

<?xml version="1.0" encoding="UTF-8"?>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:o="urn:schemas-microsoft-com:office:office" xml:space="preserve">
  <o:DocumentProperties>
    <o:Title>XML in a Nutshell</o:Title>
    <o:Author>W. Scott Means</o:Author>
    <o:LastAuthor>Elliotte Rusty Harold</o:LastAuthor>
    <o:Revision>2</o:Revision>
    <o:TotalTime>0</o:TotalTime>
    <o:LastPrinted>1601-01-01T04:00:00Z</o:LastPrinted>
    <o:Created>2004-05-25T00:40:00Z</o:Created>
    <o:LastSaved>2004-05-25T00:40:00Z</o:LastSaved>
    <o:Pages>1</o:Pages>
    <o:Words>162</o:Words>
    <o:Characters>925</o:Characters>
    <o:Company>Cafe au Lait</o:Company>
    <o:Lines>7</o:Lines>
    <o:Paragraphs>2</o:Paragraphs>
    <o:CharactersWithSpaces>1085</o:CharactersWithSpaces>
    <o:Version>11.4920</o:Version>
  </o:DocumentProperties>
  <w:fonts>
    <w:defaultFonts w:ascii="Times New Roman" w:fareast="Times New Roman" w:h-ansi="Times New Roman" w:cs="Times New Roman"/>
    <w:font w:name="Helvetica"><w:panose-1 w:val="020B0604020202030204"/>
      <w:charset w:val="00"/>
      <w:family w:val="Swiss"/>
      <w:pitch w:val="variable"/>
      <w:sig w:usb-0="20003A87" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="000001FF" w:csb-1="00000000"/>
    </w:font>
  </w:fonts>
  <w:styles>
    <w:style w:type="character"  w:styleId="emphasis"  w:default="off"/>
  </w:styles>
  <w:body>
  <wx:sect>
     <w:p>
       <w:pPr>
          <w:outlineLvl w:val="0" />
       </w:pPr>
       <w:r>
         <w:t>Einführung in XML</w:t>
       </w:r>
     </w:p>
    <w:p></w:p>
  </wx:sect>

  <wx:sect>
     <w:p>
       <w:pPr>
          <w:outlineLvl w:val="0" />
       </w:pPr>
       <w:r>
         <w:t>XML als Dokumentformat</w:t>
       </w:r>
     </w:p>

   <w:p>
     <w:r>
       <w:t>XML ist vor allen Dingen ein Dokumentformat.Es war immer für Webseiten, Bücher, wissenschaftliche Artikel, Gedichte, Kurzgeschichten, Referenzhandbücher, Anleitungen, Lehrbücher, Plädoyers, Verträge, Gebrauchsanweisungen und andere Dokumente gedacht, die von Menschen gelesen werden. Sein Einsatz als Syntax für Computerdaten in Anwendungen wie Bestellabwicklung, Objektserialisierung, Datenbanken sowie elektronischen Datenaustauschsystemen ist eigentlich nur ein glücklicher Zufall.</w:t>
     </w:r>
   </w:p>

   <wx:subsection>
     <w:p>
       <w:pPr>
          <w:outlineLvl w:val="1" />
       </w:pPr>
       <w:r>
         <w:t>Das Vermächtnis von SGML</w:t>
       </w:r>
     </w:p>
     <w:p></w:p>
   </wx:subsection>
   <wx:subsection>
     <w:p>
       <w:pPr>
          <w:outlineLvl w:val="1" />
       </w:pPr>
       <w:r>
         <w:t>TEI</w:t>
       </w:r>
     </w:p>
     <w:p></w:p>
   </wx:subsection>

   <wx:subsection>
     <w:p>
       <w:pPr>
          <w:outlineLvl w:val="1" />
       </w:pPr>
       <w:r>
         <w:t>DocBook</w:t>
       </w:r>
     </w:p>
     <w:p>
       <w:hlink w:bookmark="http://www.docbook.org/">
         <w:r>
            <w:rPr>
               <w:rStyle w:val="Hyperlink" />
            </w:rPr>
            <w:t>DocBook</w:t>
         </w:r>
       </w:hlink>
       <w:r>
         <w:t>ist eine SGML-Anwendung, die für neue Dokumente, jedoch nicht für alte entworfen wurde. Es ist besonders bei Computer-Dokumentationen gebräuchlich. Verschiedene O'Reilly-Bücher wurden in DocBook geschrieben, einschließlich </w:t>
       </w:r>
       <w:r>
         <w:rPr>
            <w:rStyle w:val="emphasis"/>
         </w:rPr>
         <w:t>Norm Walsh und Leonard Muellners DocBook: The Definitive Guide</w:t>
      </w:r>
     <w:r>
       <w:t>. Ein Großteil des Texts des </w:t>
       </w:r>
       <w:hlink w:bookmark="http://www.linuxdoc.org/">
         <w:r>
            <w:rPr>
               <w:rStyle w:val="Hyperlink" />
            </w:rPr>
            <w:t>Linux Documentation Project (LDP)</w:t>
         </w:r>
         </w:hlink>
         <w:r>
       <w:t> wurde in DocBook geschrieben.</w:t>
       </w:r>
     </w:p>
   </wx:subsection>

  </wx:sect>

  <wx:sect>
     <w:p>
       <w:pPr>
          <w:outlineLvl w:val="0" />
       </w:pPr>
       <w:r>
         <w:t>XML im Web</w:t>
       </w:r>
     </w:p>
    <w:p></w:p>
  </wx:sect>
  </w:body>
</w:wordDocument>

Code-Beispiel: Ein WordprocessingML-Dokument

An diesem Format fallen mir zwei Dinge auf. Das erste ist die kryptische Natur der kurzen Tag-Namen wie t, r, p oder des unglaublich geschwätzigen rPr. Das zweite ist die große Anzahl von Tags, die erforderlich sind, um dieses eher einfache Dokument auszuzeichnen. Das Problem scheint zu sein, dass Word alle Stildefinitionen mit dem Dokument bündelt und die Stile dann für jeden Absatz wiederholt, selbst wenn sie im ganzen Dokument immer wieder verwendet werden. XML muss nicht ausufernd sein, aber dieses Beispiel ist es sicher, obwohl es noch immer weniger ausufernd ist als das, was ich Word 2003 tatsächlich schon speichern sah. DocBook und TEI können von Menschen gelesen werden, selbst im Klartextformat. OpenOffice und WordprocessingML eigentlich nicht, insbesondere nicht in ihrem natürlichen Zustand.

  

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema XML bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

  


Copyright © 2005 O'Reilly Verlag GmbH & Co. KG
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XML in a Nutshell" denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

O’Reilly Verlag GmbH & Co. KG, Balthasarstraße 81, 50670 Köln, kommentar(at)oreilly.de