2 Kommentare

Eine kurze Einführung in XML

xml2 XML steht für eXtensible Markup Language und ist ursprünglich parallel mit HTML aus der Auszeichnungssprache SGML entstanden. Einen genaueren Überblick über den geschichtlichen Hintergrund liefert der Wikipedia-Eintrag zur XML-Geschichte.

Der Zweck vom XML dient in der einfachen und geordneten Auszeichnung von Daten - zum Beispiel in Form einer geschachtelten Baumstruktur. Die Einfachheit von XML liegt darin, dass jedes Element des Dokumentbaumes entweder ein Blatt (ohne weitere Kinder) oder ein Knoten (mit weiteren Kindern) sein kann. Außerdem kann ein Knoten mit sog. Attributen ausgezeichnet werden.

Ein Beispiel würde dann folgendermaßen aussehen:

<?xml version="1.0" encoding="UTF-8"?>
<vortraege>
	<vortrag id="1">
		<titel>Einführung in XML</title>
		<sprecher>Daniel Grothe</sprecher>
	</vortrag>
	<vortrag id="2">
		<titel>XSD und XMLSchema</titel>
		<datum>21.06.2008</datum>
	</vortrag>
</vortraege>

Das Beispiel zeigt den generellen Aufbau einer XML-Datei. In Zeile 1 sieht man hier auch noch eine Möglichkeit, in XML-Dokumenten zum Beispiel die Kodierung der enthaltenen Textdaten auszuzeichnen. Werden diese Kopfdaten weggelassen, so wird standardmäßig UTF-8 verwendet. Zwar hätte man also in dem hier gezeigten Fall die Auszeichnung weglassen können, aber es gehört normalerweise “zum guten Ton” es trotzdem zu tun. Es gibt auch noch weitere Einstellungen für das Dokument, die über Kopfzeilen festgelegt werden können (zum Beispiel wie das Dokument in bestimmten Programmen dargestellt werden soll o.ä.), dies ist aber für das grundsätzliche Verständnis nicht wichtig.

Weiterhin zeigt das Beispiel, wie die einzelnen Knoten des Dokuments ausgezeichnet werden: Zuerst das sog. Starttag in eckigen Klammern und zum Schluss das Endtag in eckigen Klammern und einem vorangestellten Schrägstrich. Will man ein Element mit einem Attribut versehen, tut man dies wie im Beispiel am id-Attribut gezeigt.

Zeichen mit besonderer Bedeutung in XML

Da zum Beispiel die eckigen Klammern eine besondere Bedeutung in XML haben, müssen diese im normalen Text durch ihre sog. Entitäten &lt; und &gt; ersetzt werden. Da diese Entitäten wiederum durch das “Kaufmanns-Und” & eingeleitet werden, ist auch dieses Zeichen durch seine Entität &amp; zu ersetzen. Ähnliches gilt für doppelte (”) und einfache (’) Anführungsstriche.

Dies sind die in XML standardmäßig erlaubten Entitäten:

Sonderzeichen Entität
< &lt;
> &gt;
& &amp;
&quot;
&apos;

Wofür ist XML nun gut?

Im Grunde stellt die vorgestellte Formatierung von Daten in XML nur ein Grundgerüst dar. Es gibt ein paar Regeln, die es zu beachten gilt und fertig. Auf den ersten Blick zu schätzen weiß man das wahrscheinlich nur, wenn man schon vor der Veröffentlichung der XML-Spezifikation mit großen Datenmengen hantiert hat. Zu dieser Zeit besaß fast jedes Programm seine eigene Art und Weise Daten auszuzeichnen, meistens durch Binärdaten anstatt eines rein textbasierten, menschenlesbaren Vokabulars.

XML-Dokumente haben zwar meistens eine höhere Dateigröße, dies lässt sich aber sehr effizient durch Packen (z.B. ZIP) ausgleichen. Gerade beim Komprimieren von Text ist es sehr förderlich, dass in XML ja die gleichen Elementnamen häufiger auftauchen.

Alternativen zu XML

  • Ein einfaches textbasiertes Format ist zum Beispiel CSV (Character Separated Values), welches allerdings nur tabellenartige Datenmengen erlaubt. Dies eignet sich aber durchaus für den schnellen Export einer Excel-Tabelle in eine weiterverarbeitbare Textdatei. Enthalten die Daten dann Sonderzeichen, Umlaute oder chinesische Schriftzeichen gibt es allerdings keine Möglichkeit innerhalb der CSV-Datei festzulegen, welche Textkodierung beim Import zu verwenden ist. Auch bekommt das verwendete Trennzeichen natürlich eine besondere Bedeutung, wodurch das entsprechende Zeichen nicht mehr normal im Text verwendet werden darf.

    Beispiel einer CSV-Datei (mit Semikolon als Trennzeichen):

    id;titel;sprecher;datum;
    1;Einführung in XML;Daniel Grothe;;
    2;XSD und XMLSchema;;21.06.2008;
  • Will man sich in Javascript das Erstellen und Parsen von XML-Bäumen sparen, so bietet sich JSON (JavaScript Object Notation) an. Dabei werden Datensätze durch die natürliche Javascript-Syntax in Textform dargestellt und beim Einlesen einfach mittels des eval()-Befehls in Laufzeitobjekte interpretiert. Anschließend kann der Javascript-Code normal auf die in der Laufzeitumgebung erzeugten Objekte und Arrays zugreifen.

    Beispiel für JSON:

    {
    	vortraege: [{
    		id: 1,
    		titel: 'Einführung in XML',
    		sprecher: 'Daniel Grothe'
    	},{
    		id: 2,
    		titel: 'XSD und XMLSchema',
    		datum: '21.06.2008'
    	}]
    }
  • Eine an XML angelehnte, aber schlankere Datenauszeichnungssyntax ist YAML (YAML Ain’t Markup Language). Dabei signalisieren im einfachsten Fall Zeilenumbrüche das Ende eines Datums und Einrückungen die Gruppierung von Datensätzen. Listen werden mit vorangestelltem Minuszeichen und Assoziationen über Schlüssel mit folgendem Doppelpunkt und dem anschließenden Wert (Skalar) gekennzeichnet. YAML orientiert sich dabei an den aus verschiedenen Programmiersprachen bekannten Arrays und assoziativen Listen.

    Beispiel in YAML:

    vortraege:
      -
        id:1
        titel:"Einführung in XML"
        sprecher:"Daniel Grothe"
      -
        id:2
        titel:"XSD und XMLSchema"
        datum:"21.06.2008"

Vorteile von XML gegenüber den Alternativen

Alle 3 genannten Alternativen haben für ihren jeweiligen Einsatzzweck durchaus ihre Berechtigung. Hat man aber mit den Daten mehr vor, möchte man also zum Beispiel sicherstellen, dass die Daten einem festgelegten Format und einer festgelegten Struktur entsprechen, fehlt Ihnen die Erweiterbarkeit. Die Validität von Daten (besonders eklatant bei Zeit- und Datumsangaben) lässt sich in einem einfachen XML-Dokument zwar auch nicht von Haus aus direkt auszeichnen, kann aber zum Beispiel mit standardisierten XML-Erweiterungen wie DTDs (Document Type Definition) oder XMLSchemas spezifiziert und sichergestellt werden.

Der primäre Vorteil von XML liegt somit in der beliebigen Erweiterbarkeit von Dokumenten um bestimmte Workflows abzubilden und eigene Standards sicherzustellen. Ein recht bekanntes Beispiel hierfür ist das XHTML Format, welches über eine DTD festlegt, welche Elemente überhaupt und auch an welcher Stelle und in welcher Reihenfolge erlaubt sind.

Beispiel für den XHTML Prolog:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

...

Etablierte XML-Erweiterungen

Auf der Basis von XML existiert mittlerweile ein riesiges Sammelsurium an Standards für die verschiedensten Anwendungsfälle beim Verarbeiten von Daten. Zum einen sind dies die Formatierungssprache XSL, die Suchsyntax XPath, die Datenabfragesprache XQuery und ähnliche vom W3C standardisierte Formate. Zum anderen sind dies Protokolle wie SOAP aber auch Dateiformate wie das OpenOffice Dateiformat ODF.

All diese Standards bauen auf XML als Basis auf und ermöglichen es, dass verschiedene Programme oder auch Webservices sehr leicht ihre Daten untereinander austauschen können, ohne alle Funktionen des anderen kennen oder implementieren zu müssen.

Fazit

Mit XML ist es gelungen einen Standard für die Datenauszeichnung zu etablieren, der durch Erweiterungen alle vorstellbaren Anwendungsfälle abzubilden vermag. Dabei ist es im einzelnen Fall sicher nicht unbedingt die performanteste Lösung, stellt aber sicher, dass Zukunftssicherheit und eine leichte (standardisierte) Implementierung automatisch mit einfließen. Dadurch wird Entwicklungszeit verkürzt und es werden somit Kosten gesenkt und Nerven geschont.

Weiterführende Links

Offizielle W3C Spezifikation: http://www.w3.org/XML/

Wikibook zu XML: http://de.wikibooks.org/wiki/XML

W3Schools “XML Tutorial”: http://www.w3schools.com/xml/default.asp

Stand: 05.08.2008, 13:47 Uhr

2 Kommentare

  1. #1 Pat sagt:
    01.07.2009 16:26

    Hallo Daniel,
    auf der Suche nach einer übersichtlichen Einführung bin ich auf deine gestoßen und sehr zufrieden damit. Nur eine Kleinigkeit ist mir aufgefallen. Als eckige Klammern werden meines Wissens nach diese [ ] bezeichnet wohingegen diese als spitze Klammern bezeichnet werden (siehe auch http://de.wikipedia.org/wiki/Klammer_(Zeichen)). Falls Du es ändern solltest, kannst Du meinen Kommentar gerne wieder entfernen.

  2. tşkr ederim.

Kommentieren