Home > Artikel > Ausgabe 3/2019 > XML: Eine Einführung

XML: Eine Einführung

  PDF ansehen

  Download PDF und Beispieldatenbank

XML ist neben JSON eine der Sprachen, mit der Daten strukturiert in Textdateien gespeichert werden können. XML ähnelt HTML, der Auszeichnungssprache für Internetseiten. Die Inhalte werden in beiden Fällen dort durch bestimmte, in spitzen Klammern eingefasste Bezeichnungen gekennzeichnet und so zum Beispiel im Fall von HTML mit entsprechenden Formatierungen versehen. Unter Access und anderen Anwendungen dient XML der Vereinfachung beim Austausch von Daten zwischen verschiedenen Anwendungen. Wenn beide Anwendungen das gleiche XML-Format kennen, können die Daten etwa aus den Tabellen einer Datenbank in das XML-Format übertragen und dann von der empfangenden Anwendung in diesem Format eingelesen werden.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1903_XML.accdb.

XML: Extensible Markup Language

Die Abkürzung XML steht für Extensible Markup Language. Genauso wie bei HTML (Hypertext Markup Language) steht das M für Markup. Markup steht dabei für Markierung. Die Markup-Elemente in einem XML-Dokument sorgen dabei für die Strukturierung der darin enthaltenen Daten.

XML-Dokumente können sowohl von Maschinen als auch von Menschen recht gut gelesen werden, wobei es für den Menschen natürlich bessere Formate gibt – aber die lassen sich ja durchaus mit der Nutzung der Markup-Elemente aus einem XML-Dokument ableiten.

Das folgende ist ein Beispiel für ein XML-Dokument. Hier finden Sie ein übergeordnetes Element namens Kunden, das mehrere Kunde-Elemente enthält. Für das Kunde-Element ist ein Attribut namens Kundennummer definiert, welches die Kundennummer aufnimmt.

Außerdem gibt es innerhalb des Kunde-Elements weitere Elemente wie zum Beispiel eines für den Vornamen und eines für den Nachnamen. Das Kunde-Element enthält noch eine Element namens Bestellungen, das weitere Unterelemente namens Bestellung liefert. Diese enthalten wiederum ein Attribut namens Bestellnummer und ein Element namens Bestelldatum. Eine Bestellung enthält meist noch weitere Informationen etwa über die Bestellpositionen et cetera, aber für ein einfaches Beispiel wollen wir uns auf die bisher gezeigten Elemente beschränken:

<Kunden>

<Kunde Kundennummer="123">

<Nachname>Minhorst</Nachname>

<Vorname>André</Vorname>

<Bestellungen>

<Bestellung Bestellnummer="234">

<Bestelldatum>29.07.2019</Bestelldatum>

...

</Bestellung>

</Bestellungen>

</Kunde>

<Kunde Kundennummer="124">

...

</Kunde>

</Kunden>

Sie sehen, dass XML nicht nur etwa Daten in Listenform aufnehmen kann, sondern auch Daten in hierarchischer Beziehung.

In einer Access-Datenbank würden Sie die Kundendaten in einer Kunden-Tabelle speichern und die Bestelldaten in einer Bestellungen- und einer Bestellpositionen-Tabelle – wobei diese in der Regel noch eine Artikel-Tabelle referenziert. Unter XML können Sie durch geeignete Strukturierung die Daten mehrerer hierarchisch verknüpfter Tabellen in einer einzigen Datei unterbringen. Die Daten der Kunden-Tabelle landen dabei in den Kunde-Elementen unmittelbar unter dem Kunden-Element. Zum Kunde-Element gibt es ein Bestellungen-Element, das kein, ein oder mehrere Elemente des Typs Bestellung enthält – und so weiter.

Öffnende und schließende Elemente

Für XML-Dokumente gibt es einige grundlegende Regeln und außerdem können Sie noch benutzerdefinierte Regel festlegen. Zu den grundlegenden Regeln gehört, dass jedes Tag-Element, als eines der in spitzen Klammern eingefasstes Elemente, durch ein entsprechendes schließendes Element ergänzt werden muss.

Das schließende Element besteht dabei aus einer öffnenden spitzen Klammer, einem Schrägstrich, dem Elementnamen und einer schließenden spitzen Klammer. In unserem Beispiel ist das etwa beim Kunden-Element der Fall:

<Kunden>

...

</Kunden>

Dazwischen kann das Element beliebige weitere Elemente enthalten. Wichtig ist dabei, dass auch diese immer durch ein schließendes Element ergänzt werden, auch End-Tag genannt:

<Kunden>

<Kunde ...>

...

</Kunde>

<Kunde ...>

...

</Kunde>

</Kunden>

Bei Elementen, die keine weiteren Elemente einschließen, sondern beispielsweise komplett leer sind oder auch nur Attribute enthalten, können Sie das öffnende und das schließende Element zusammenfassen. Dazu fügen sie vor der schließenden spitzen Klammer einen Schrägstrich ein:

<Kunde/>

Ein solches Element kann auch Attribute enthalten:

<Kunde Kundennummer="123"/>

Interpretieren des XML-Dokuments

Ein Mensch könnte ein XML-Dokument, bei dem mal ein schließendes Element fehlt oder bei dem ein Tag falsch geschrieben ist, womöglich noch korrekt interpretieren. Wenn Sie das XML-Dokument hingegen maschinell einlesen wollen, dürfen Sie sich keine Fehler erlauben – sonst kann das Dokument nicht interpretiert werden.

Für XML gibt es für alle bekannten Programmiersprachen Bibliotheken, mit denen Sie den Inhalt eines XML-Dokuments lesen können. Dabei ist es nicht nötig, wie etwa bei HTML das ganze Dokument einzulesen und zu verarbeiten, um das gewünschte Ergebnis zu erhalten – nämlich eine optisch ansprechend formatierte Ausgabe im Internetbrowser.

Sie können etwa nur die Kunde-Elemente durchlaufen und die Kundendaten ausgeben oder verarbeiten, ohne die Bestelldaten zu berücksichtigen.

Sie können XML-Dokumente auch auf verschiedene Arten erstellen: Die auf den ersten Blick einfachste wäre, einfach einige Zeilen Text zusammenzustellen, welche die öffnenden und schließenden Elemente sowie die gewünschten Informationen enthalten.

Viel effizienter ist es jedoch, die Elemente über das sogenannte Document Object Model (DOM) zu erstellen und durch untergeordnete Elemente zu ersetzen.

Genau dieses Document Object Model können Sie auch nutzen, um auf die Elemente eines bestehenden XML-Dokuments zuzugreifen.

XML in Webservices

Einer der Einsatzzwecke von XML-Dokumenten ist der Austausch von Daten mittels Webservice. Ein Webservice ist ein Service, der Anfragen über das HTTP- oder HTTPS-Protokoll entgegennimmt und die Antwort über das gleiche Protokoll zurücksendet.

Wenn die zu sendenden Informationen strukturiert sein sollen, können Sie diese in ein nach den Anforderungen des Webservices gestaltetes XML-Dokument einbetten. Die Antwort kann dann auch in Form eines XML-Dokuments gesendet werden, welches Sie dann per Code interpretieren.

Wohlgeformte XML-Dokumente

Damit Programme XML-Dokumente parsen können, müssen diese wohlgeformt sein. Sie haben bereits erfahren, dass XML-Dokumente aus Elementen bestehen, die ein Starttag () und ein Endtag enthalten (), die aber auch durch ein einziges Element ersetzt werden können, wenn dieses keine weiteren Elemente oder Inhalte aufweist. Das heißt dann auch Leer-Tag ().

Damit ein XML-Dokument wohlgeformt ist, gelten einige weitere Regeln. So darf ein XML-Dokument nur ein Wurzelelement enthalten, also ein Element, das alle anderen Elemente einschließt.

Sie könnten in einem XML-Dokument also beispielsweise nicht einfach mehrere Kunde-Element anlegen:

<Kunde ...>...</Kunde>

...

<Kunde ...>...</Kunde>

Das wären dann zwei Wurzelelemente. Deshalb muss beispielsweise ein übergeordnetes Element namens Kunden vorhanden sein:

<Kunden>

<Kunde ...>...</Kunde>

...

<Kunde ...>...</Kunde>

</Kunden>

Eher würde man jedoch noch ein Element wie <Kundenverwaltung> nutzen:

<Kundenverwaltung>

<Kunden>

...

</Kunden>

</Kundenverwaltung>

Öffnende und schließende Elemente müssen sich genau wie etwa bei If...Then-Bedingungen oder Schleifen auf der gleichen Ebene befinden. Sie können also nicht ein Kunde-Element öffnen, darin ein Bestellung-Element öffnen und dann das Kunde-Element schließen, bevor nicht das Bestellung-Element geschlossen ist.

Es kann zwar mehrere Elemente gleichen Namens sowohl auf der gleichen Ebene geben als auch auf verschiedenen Ebenen, aber Attribute dürfen nur einmal je Element verwendet werden. Wenn Sie also Informationen unterbringen möchten, die mehrmals je Element vorkommen, müssen Sie dazu Unterelemente nutzen. Wenn Sie also etwa etwa einfach nur angeben wollen, welche Bestellnummern zu einem Kunden gehören, dann geht das nicht:

<Kunde Kundennummer="123" Bestellnummer="1" Bestellnummer="2" ...>

Hier benötigen Sie Unterelemente:

<Kunde Kundennummer="123">

<Bestellung Bestellnummer="1"/>

<Bestellung Bestellnummer="2"/>

...

</Kunde>

Werte von Attributen müssen immer entweder in Anführungszeichen oder Hochkommata eingefasst werden:

<Kunde Kundennummer="123">

oder

<Kunde Kundennummer='123'>

Die Groß- und Kleinschreibung bei Element- und Attributnamen wird beim Interpretieren von XML-Dokumenten berücksichtigt. Das heißt, dass insbesondere die öffnenden und schließenden Elemente mit dem gleichen Tag versehen werden müssen.

Folgendes liefert einen Fehler:

<Kunde>...</kunde>

Informationen über das XML-Dokument

Wenn Sie schon einige XML-Dokumente gesehen haben, vermissen Sie möglicherweise eine Startzeile wie die folgende:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

Hierbei handelt es sich um die Verarbeitungsanweisungen für das XML-Dokument, englisch Processing Instructions. Diese Zeile ist immer eine Einheit, die mit <?xml beginnt und mit ?> abgeschlossen wird. Sie enthält keine Unterelemente.

Die einfachste Variante enthält nur die Angabe der Versionsnummer und ist obligatorisch. Die aktuell von den meisten XML-Parsern verarbeitete Version ist die Version 1.0:

<?xml version="1.0"?>

Die zweite oben enthaltene Eigenschaft heißt encoding und gibt an, welche Zeichenkodierung die enthaltenen Texte aufweisen. Die folgende Auflistung enthält gängige Einträge:

  • UTF-8: internationale Codierung mit acht Bit Zeichenbreite
  • UTF-16: internationale Codierung mit 16 Bit Zeichenbreite
  • ISO-8859-1: ISO-Codierung für westeuropäische Sprachen

Wenn Sie dieses Attribut nicht angeben, wird als Voreinstellung UTF-8 angenommen. Damit können Sie bis auf wenige Ausnahmen (siehe weiter unten unter Sonderzeichen in XML-Dokumenten) alle Unicode-Zeichen verwenden.

Wichtig ist, wenn Sie ein per VBA erstelltes XML-Dokument speichern, dass Sie für encoding die Kodierung angeben, die auch beim Speichern des Dokuments verwendet wird.

Das dritte Attribut standalone gibt an, ob es eine externe DTD-Datei gibt. Eine DTD-Datei erlaubt die Validierung eines XML-Dokuments aufgrund der in der DTD-Datei angegebenen Regeln.

Wenn standalone den Wert yes aufweist, sucht der Parser innerhalb der XML-Datei nach der DTD-Datei – ist diese dort nicht vorhanden, wird halt keine DTD-Datei verwendet. Wenn standalone den Wert no enthält, ist das ein Hinweis darauf, dass es eine externe DTD-Datei gibt.

Kommentare in XML-Dokumente

Wie auch bei Programmiersprachen üblich, können Sie auch in XML-Dokumenten Kommentare unterbringen. Diese sehen etwa wie folgt aus:

<!--Dies ist ein Kommentar.-->

Essenziell sind das öffnende Element (<!--) und das schließende Element (-->). Damit verwendet XML die gleiche Markierung für Kommentare wie etwa HTML. Auch Kommentare können keine untergeordneten Elemente enthalten beziehungsweise werden diese beim Parsen des XML-Dokuments nicht berücksichtigt. Sie können also etwa auch einige Zeilen des XML-Dokuments durch ein führendes <!-- und ein abschließendes --> auskommentieren. Ein Kommentar kann sich auch über mehrere Zeilen erstrecken.

Zeilenumbrüche und Leerzeichen zwischen Elementen in XML-Dokumenten

Damit ein Computer XML-Dokumente versteht, sind keine Zeilenumbrüche im XML-Dokument nötig. Auch die zum Zwecke von Einrückungen verwendeten Leerzeichen braucht der Computer nicht zum Interpretieren der Inhalte des XML-Dokuments. Folgendes XML-Dokument ist also genauso gültig wie das eingangs vorgestellte Beispiel:

<Kunde Kundennummer="123"><Nachname>Minhorst</Nachname><Vorname>André</Vorname><Bestellungen><Bestellung Bestellnummer="234"><Bestelldatum>29.07.2019</Bestelldatum>...</Bestellung></Bestellungen></Kunde>7

Sonderzeichen in XML-Dokumenten

Wenn Sie innerhalb von XML-Dokumenten Sonderzeichen im Inhalt verwenden wollen, also etwa das Kleiner- oder Größer-Zeichen, können Sie diese durch sogenannte Entitäten ersetzen. Die Verwendung folgender Zeichen kann dabei zu Verwechslungen führen:

  • <: Wird durch < ersetzt.
  • >: Wird durch > ersetzt.
  • &: Wird durch & ersetzt.
  • ": Wird durch " ersetzt.
  • ': Wird durch ' ersetzt.

Wenn Sie also etwa innerhalb eines Elements ein Tag-Element als Text unterbringen wollen, verwenden Sie folgende Schreibweise:

Text des Elements <Element>

Innerhalb des Elements befindet sich also der folgende Text:

Text des Elements

Wenn Sie etwa im Text eines Attributs das Anführungszeichen verwenden wollen, gelingt das wie folgt:

Der Text des Attributs lautet also:

Text mit "-Zeichen

CDATA-Abschnitte

Es gibt noch eine weitere Möglichkeit, Texte innerhalb von Elementen auszugeben und dabei die wenigen nicht zulässigen Sonderzeichen zu verwenden. Dabei verwenden Sie einen sogenannten CDATA-Abschnitt.

Dieser beginnt mit <![CDATA[ und endet mit ]]>. Dazwischen können Sie etwa wie folgt beliebig mit Kleiner- und Größer-Zeichen arbeiten:

<![CDATA[

Text des Elements <Element>

]]>

XML-Parser

Es gibt verschiedene XML-Parser beziehungsweise -Prozessoren. Diese lassen sich über Programmiersprachen wie beispielsweise VBA ansprechen. Die bekannteste Bibliothek hierzu dürfte das bereits erwähnte Document Object Model sein (DOM).

Damit können Sie über die Baumstruktur des XML-Dokuments auf die einzelnen Elemente, die Attribute und die enthaltenen Werte zugreifen. Das kann nicht nur lesend, sondern auch schreibend erfolgen, sodass Sie auch neue XML-Dokumente mit DOM erstellen und diese mit den gewünschten Daten füllen können.

Die zweite Möglichkeit ist die SAX-Api. SAX bedeutet Simple API for XML. Auch diese Bibliothek können Sie von VBA aus nutzen. Die Vorgehensweise beim Einlesen von XML-Dokumenten ist völlig anders als bei DOM.

Die Daten werden hier als sequenzieller Datenstrom eingelesen. Außerdem kann man hier spezielle Rückruffunktionen, sogenannte Callbacks, definieren. Diese werden beim Durchlaufen des Dokuments ausgelöst etwa durch ein öffnendes Element oder ein schließendes Element ausgelöst.

DTD-Dateien

Die Abkürzung DTD von DTD-Dateien steht für Document Type Definition. Wenn Sie nicht nur die Wohlgeformtheit des XML-Dokuments sicherstellen wollen, was die Mindestvoraussetzung für den Zugriff der verschiedenen APIs auf ein XML-Dokument darstellt, können Sie in einer DTD-Datei noch weitere Regeln festlegen.

Die DTD legt die Struktur des XML-Dokuments genau fest, wobei zum Definieren dieser Struktur eine andere Form als XML verwendet wird.

XSD-Dateien

XSD-Dateien (XSD steht für XML Schema Definition) dienen ebenfalls dazu, die Struktur eines XML-Dokuments zu definieren. Im Gegensatz zu einer DTD-Datei werden XSD-Dateien allerdings ebenfalls im XML-Format zusammengestellt und ist meines Erachtens etwas besser zu lesen und zu erstellen.

Wenn Sie sich eine ziemlich komplexe und umfangreiche XSD-Datei ansehen wollen, können Sie sich die XSD-Datei für die Ribbon-Definitionen ansehen, die in Access in der Tabelle USysRibbons gespeichert werden. Sie finden diese Datei beispielsweise hier:

https://www.microsoft.com/en-us/download/details.aspx?id=1574

Wir haben diese Datei auch zum Download zu diesem Artikel hinzugefügt. Sie hat über 2.500 Zeilen. Viel Spaß beim untersuchen!

XSL-Dateien oder XSLT

XSL Transformation ist eine Programmiersprache, mit der Sie den Inhalt von XML-Dokumenten in beliebiger Art und Weise transformieren können. Die Elemente eines XSL-Dokuments sind wieder im XML-Format definiert.

Wir werden uns in einem weiteren Artikel namens XML transformieren mit XSL ansehen, wie Sie die Daten eines XML-Dokuments mithilfe einer XSL-Datei transformieren können. Und unter dem Titel Kategorie-XML-Export mit Transformation finden Sie ein komplettes Beispiel für die Transformation eines XML-Dokuments.

XPath

XPath ist eine Sprache, mit der Sie beispielsweise in XML-Dokumenten navigieren und nach bestimmten Elementen suchen können. Im Artikel XML-Dokumente mit XPath durchsuchen stellen wir diese Sprache im Detail vor.

Funktionen in XPath und XSL

In XSL-Dateien und in XPath verwenden wir einige Funktionen wie etwa Zeichenkettenfunktionen. Diese stellen wir ausführlich im Artikel Funktionen in XSL und XPath vor.

Zusammenfassung und Ausblick

XML ist ein interessantes Format, dass immer noch in vielen Bereichen für den Datenaustausch verwendet wird. Nachdem wir in dieser Ausgabe und in zwei weiteren Artikeln der kommenden Ausgabe von Access [basics] die Grundlagen geklärt haben, schauen wir uns unter anderem an, wie Sie einen Webservice von Access aus aufrufen und die als Ergebnis erhaltene XML-Datei auswerten können.