Schnelle Tabelle
XML als universales Metaformat für den Datenaustausch ist im Hintergrund schon lange gang und gäbe. Mit Excel 2003 hat es sich auf den Desktop des PC vorgewagt.
- Stefan Mintert
Mit der 2003er Version seiner Office-Suite hat Microsoft nicht nur den im vorigen Heft vorgestellten Formulargenerator Infopath seiner Suite hinzugefügt, sondern die beiden zentralen Anwendungen Excel und Word um XML-Fähigkeit ergänzt. In diesem zweiten Teil des Office-Tutorials steht Excel im Mittelpunkt.
Der Aufbau der Daten, mit denen die Tabellenkalkulation arbeitet, ist einfach: Es handelt sich um Tabellen, eine zweidimensionale Anordnung von Zellen, von denen jede ein Datum enthält. Diese Eigenschaft sorgt für einige Einschränkungen, wenn es um den Austausch von Daten in XML geht, andererseits ist die Vorgehensweise nicht schwierig, wie sich zeigen wird.
Eine wesentliche und offensichtliche Einschränkung besteht darin, dass Excel Elemente, die gemischten Inhalt (mixed content) enthalten, nicht auf eine Zelle abbilden kann. Darunter versteht man den Inhalt eines XML-Elements, der sowohl aus Zeichendaten als auch aus Kindelementen bestehen kann (siehe Abschnitt 3.2.2 der XML-Spezifikation). Offensichtlich besteht die Einschränkung deshalb, weil der Inhalt einer Excel-Zelle seinerseits nicht weiter strukturiert sein kann.
Excel als XML-Editor
Vor der Arbeit mit einem üblichen XML-Editor, so er validiert, muss dieser zunächst die DTD oder das XML-Schema kennen lernen. Das ist bei Excel ebenso (sinnvoll). Möchte man mit Excel Daten in XML erfassen, so muss der Anwender in der Tabellenkalkulation zunächst eine so genannte XML-Zuordnung definieren. Die kann auf einem XML-Schema aufsetzen - muss aber nicht - und sorgt dafür, dass die Datenstruktur XML-seitig wohldefiniert ist. Im ersten Schritt wählt der Anwender als „XML-Quelle“ die Schemadatei aus („XML-Verknüpfung“ unter: Daten -> XML). In diesem Fall dient als Beispiel das Schema für eine Buchbestellung (siehe Listing 1), die der deutschen Übersetzung von XML-Schema, Teil 0 entnommen ist.
Listing 1: Schema einer Buchbestellung
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:annotation>
<xsd:documentation xml:lang="DE">
Buchbestellung Schema fĂĽr Example.com.
Copyright 2001 Example.com. Alle Rechte vorbehalten.
</xsd:documentation>
</xsd:annotation>
<xsd:element name="Bestellung" type="BestellungTyp"/>
<xsd:element name="Kommentar" type="xsd:string"/>
<xsd:complexType name="BestellungTyp">
<xsd:sequence>
<xsd:element name="Lieferadresse" type="DeAdresse"/>
<xsd:element name="Rechnungsadresse" type="DeAdresse"/>
<xsd:element ref="Kommentar" minOccurs="0"/>
<xsd:element name="Waren" type="WarenTyp"/>
</xsd:sequence>
<xsd:attribute name="bestelldatum" type="xsd:date"/>
</xsd:complexType>
<xsd:complexType name="DeAdresse">
<xsd:sequence>
<xsd:element name="Name" type="xsd:string"/>
<xsd:element name="StraĂźe" type="xsd:string"/>
<xsd:element name="Ort" type="xsd:string"/>
<xsd:element name="PLZ" type="xsd:decimal"/>
</xsd:sequence>
<xsd:attribute name="land" type="xsd:NMTOKEN" fixed="DE"/>
</xsd:complexType>
<xsd:complexType name="WarenTyp">
<xsd:sequence>
<xsd:element name="Buch" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Titel" type="xsd:string"/>
<xsd:element name="Anzahl">
<xsd:simpleType>
<xsd:restriction base="xsd:positiveInteger">
<xsd:maxExclusive value="100"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="PreisEUR" type="xsd:decimal"/>
<xsd:element ref="Kommentar" minOccurs="0"/>
<xsd:element name="Lieferdatum" type="xsd:date" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="ISBN" type="ISBNTyp" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:simpleType name="ISBNTyp">
<xsd:restriction base="xsd:string">
<xsd:pattern value="\d{9}[0-9X]"/>
<!-- 9 Ziffern gefolgt von einer PrĂĽfziffer im Bereich zwischen 0 und 10
(10 wird als X dargestellt) -->
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
Das Buchbestell-Schema lässt zwei alternative Wurzelelemente zu (Bestellung und Kommentar). Aus diesem Grund muss der Anwender in Excel eins auswählen. Das Resultat dieses ersten Schrittes ist eine baumartige Repräsentation der Datenstruktur in Excel (siehe Abbildung 1).
Eine unabdingbare Aufgabe für die Vorbereitung der Arbeit besteht darin, die durch das Schema deklarierten Elemente auf Tabellenfelder abzubilden. Excel macht diesen Schritt dankenswerterweise leicht. Im Wesentlichen besteht die Arbeit aus Drag & Drop-Operationen. Dabei zieht der Anwender ein Element nach dem anderen aus der XML-Quelle auf das Spreadsheet. Sofern das Element Kindelemente enthält, wie die Lieferadresse und die Rechnungsadresse der Buchbestellung, legt Excel die Kindelemente in einer Tabellenzeile ab. Auf Wunsch erscheinen die Namen der Elementtypen in einer Kopfzeile im Excel-Arbeitsblatt. Der Zustand nach nur vier Drag & Drop-Operationen ist in Abbildung 2 zu sehen. Die blaue Umrandung zeigt an, welche Felder mit Elementtypen aus dem Schema verknüpft sind. Die gerade aktive Zeile 12 korrespondiert mit dem invertiert dargestellten Elementtyp Rechnungsadresse auf der rechten Seite.
Interessant ist das Verhalten der Tabellenkalkulation bei Elementen, die gemäß Schemadefinition wiederholt vorkommen dürfen. Solche Elementtypen repräsentiert Excel als so genannte XML-Liste. Ein Eintrag einer Liste stellt immer eine Zeile dar. Die Liste selbst kann der Anwender beim Ausfüllen beliebig nach unten um je eine neue Zeile erweitern. Abbildung 3 zeigt die Eingabe einer Buchbestellung. Es sind hier mehrere Buchtitel zu sehen, einer davon mit einer Stückzahl von 2.
Zu beachten gilt es hier, dass die Spalte „Summe“ zwar Teil der Excel-Liste ist, jedoch keine Entsprechung in der XML-Repräsentation besitzt. Da die Summe das Produkt aus Stückzahl und Einzelpreis ist, muss man deren Wert nicht speichern. Gleiches gilt für die Gesamtsumme unterhalb der Buchtitel. Summe und Gesamtsumme berechnet Excel über seine bekannten Funktionen.
Den vollständigen Text finden Sie in der aktuellen Printausgabe.
Tutorial-Inhalt
Teil I: Infopath – Entwurf von Formularen, Bindung an ein XML-Schema und DOM-Scripting
Teil II: Excel – Datenaustausch zwischen Excel und XML
(hb)