XML - Extensible Markup Language
Bereits in den 1990er Jahren wurden die ersten Überlegungen für eine einheitliche Datensprache getätigt. Das Ziel sollte eine sowohl von Menschen als auch Maschinen lesbare Auszeichnungssprache für strukturierte Daten sein. 1998 wurde dann auch eine erste Spezifikation von XML (eXtensible Markup Language = erweiterbare Auszeichnungssprache) mit der Version 1.0 formuliert. Seither wird XML auch für den Austausch von plattformunabhängigen Daten zwischen unterschiedlichen Computer- und Datenbanksystemen verwendet. Einer der besonderen Vorteile dieser Auszeichnungssprache liegt in der Tatsache, eine Metasprache zu sein. Auf Basis von XML können durch strukturelle und inhaltliche Formulierungen anwendungsspezifische Sprachen erstellt werden.
Das prominenteste Beispiel einer solchen Metasprache dürfte wohl die weltweit bekannte und täglich eingesetzte Auszeichnungssprache HTML (HyperText Markup Language – Hypertext Auszeichnungssprache) abbilden. Über diese Metasprache lassen sich Internetseiten semantisch strukturiert darstellen. Ein weiterer großer Vorteil von XML liegt in seinem einfachen textbasierten Aufbau. Als Zeichenkodierung wird bei XML grundsätzlich mindestens UTF-8 vorausgesetzt. Aufgrund dieser Tatsache kann ein XML-Dokument auch komplett mit einem einfachen Texteditor erzeugt werden. XML bietet jedoch weit mehr Vorteile, die wir im Folgenden kurz vorstellen möchten.
Strukturen und Datentypen in XML
XML selbst besitzt zunächst eine einfache und klar definierte Struktur. Ein entsprechend gültiges Dokument besteht aus Elementen, Attributen, entsprechenden Wertzuweisungen und den Elementinhalten. In einer XML-Struktur dürfen Elemente mit und ohne Attribute existieren. Daneben existieren auch Elemente, die nur bestimmte Inhalte besitzen und auch Elemente, die wiederum viele Unterelemente haben dürfen. Eine Besonderheit stellen leere Elemente dar, die gar keinen Inhalt besitzen. Eine grundlegende XML-Struktur am Beispiel einer Liste von Wechselkursen lässt sich daher auch als einfache Baumstruktur wie folgt abbilden:
<wechselkurse>
<titel>Wechselkurse</titel>
<eintrag>
<fromcurrencycode>BTC</fromcurrencycode>
<tocurrencycode>CNY</ tocurrencycode >
<excangerate>43774.50023880</excangerate >
<lastrefreshed>2018-11-19 10:35:07</lastrefreshed>
<timezone>UTC</timezone>
</eintrag>
</wechselkurse>
In XML kann aber neben der einfachen und wohlgeformten Baumstruktur mit reinen Elementen und Werteangaben wie beispielsweise <timezone>UTC</timezone>
eine weitere Strukturform verwendet werden. Jedes XML-Element kann auch eigene Attribute besitzen. Somit könnte das im oben gezeigten Beispiel definierte Element <lastrefreshed>
ohne weiteres auch wie folgt definiert werden:
<lastrefreshed date=“2018-11-19“ time=“10:35:07“/>
An diesem Beispiel erkennen wir auch gleich eine gültige Kurzschreibweise, die auf Elementeinträge angewendet werden kann. Normalerweise muss ein Element aus einem öffnenden Bezeichner wie beispielsweise <lastrefreshed>
, gefolgt von einem Elementewert und einem schließenden Bezeichner wie </lastrefreshed>
bestehen. Verwendet man jedoch die Element-/Attribut-Kombination, so kann das Element wie oben gezeigt auch direkt mit dem Endetag />
geschlossen werden.
Wie bereits erwähnt kann ein XML-Dokument und deren Inhalte aus sämtlichen Textzeichen innerhalb der UTF-8 Kodierung bestehen. Eine Ausnahme bilden jedoch Binärdaten. Um diese in einem XML-Dokument korrekt einbinden zu können, müssen sie zuerst umkodiert werden. Hierfür kann beispielweise die bewährte Base64-Kodierung verwendet werden.
Deep-Dive – XML im Detail
XML bietet neben diesen Standardaufgaben jedoch noch viele weitere Möglichkeiten im Rahmen einer Auszeichnungssprache. Immer dann, wenn man mittels XML komplexere Datentypen beschreiben und verwenden möchte, sollte bzw. muss man auf eine sogenannte Schemasprache setzen. Mit XSD (XML Schema Definition = XML Schemabeschreibung) steht eine komplexe Schemasprache hierfür zur Verfügung. Hierüber können nun erweiterte Datentypen, separate Schema-Instanzen von Dokumenten und ganze Gruppen solcher Instanzen definiert werden. Eine solche Schemadatei erkennt man an der separaten Dateiendung .xsd.
In XSD sind einfache sowie auch komplexe Datentypen definiert. Zu den einfachen und klassischen Datentypen zählen beispielsweise String, Decimal, Integer, Float, Boolean, Date und Time. Ein einfacher Datentyp wird in XSD beispielsweise über den Bezeichner xs:string definiert. Durch diese einfachen Datentypen wird eine breite Kompatibilität mit Programmiersprachen wie C, Java und SQL sichergestellt. Daneben gesellen sich dann auch atomare Datentypen wie URI, IDREF und Language. Alle einfachen Datentypen dürfen jedoch keine Attribute und Kindelemente in der XML-Struktur enthalten.
Neben den einfachen Datentypen kann XML aber auch eigene und komplexe Datentypen abbilden. Über eine XML-Datentypdefinition besteht die Möglichkeit, komplexe Elementstrukturen zusammenhängend zu definieren. Am Beispiel der Wechselkurse möchten wir Ihnen die Generierung eines neuen Datentyps „CurrencyExchange“ in XSD aufzeigen:
<xs:complexType name=“CurrencyExchange“>
<xs:sequence>
<xs:element name=“fromcurrencycode“ type=“xs:string“/>
<xs:element name=“tocurrencycode“ type=“xs:string“/>
<xs:element name=“exchangerat“ type=“xs:float“/>
<xs:element name=“lastrefresheddate“ type=“xs:date“/>
<xs:element name=“lastrefreshedtime“ type=“xs:time“/>
<xs:element name=“lastrefreshedtimezone“ type=“xs:string“/>
</xs:sequence>
</xs:complexType>
Über die Kindelemente definiert der komplexe Datensatz seine Struktur und dessen Datentypen. Diese können auf unterschiedliche Arten über xs:sequence, xs:choice oder xs:all kombiniert werden. Der Typ xs:sequence definiert eine einfache Liste von Kindelementen, welche keinmal, einmal oder mehrfach vorhanden sein können. Der Typ xs:choice hingegen definiert eine Auswahlliste an Kindelementen, aus deren insgesamt jedoch nur ein einzelnes gewählt werden kann. Über xs:all definiert man Kindelemente, die jeweils nur einmal vorkommen dürfen.
Die XML-Schemadefinition enthält noch viele weitere Möglichkeiten und weiterführende Konzepte. So bestehen grundsätzliche Ähnlichkeiten und Gleichnisse in einer für JavaScript ausgelegten Deklaration mit der Bezeichnung JSON (JavaScript Object Notation), die wir in einem separaten Beitrag vorgestellt haben. Dies würde jedoch den Deep-Dive bei weitem sprengen. Deshalb sei an dieser Stelle auf die unten angefügte Linkliste zu den zahlreichen Ressourcen im Web verwiesen, die alle Aspekte ausgiebig beschreiben und beispielhaft vorstellen.
Fazit
XML stellt als Grundgerüst einer erweiterbaren Auszeichnungssprache die Basis für viele bereits etablierte Sprachdefinitionen bereit. Heute nutzen wir die XML-Basis in zahlreichen Programmiersprachen wie Java, JavaScript oder auch C. Daneben steckt XML auch in der Muttersprache der Webseitenauszeichnung - HTML sowie dem weniger prominenten DOM (Document Objekt Model). Bereits lange Zeit existiert somit auch eine Sprachdefinition mit der Bezeichnung XHTML. Begleitet werden diese von strukturell gleich aufgebauten und äußerst prominenten Formatierungssprachen wie CSS oder XSL. Auch hierin befindet sich die ureigene XML-Struktur als Basis für teils komplexe Formatierungsanweisungen, die auch kaskadiert auf die Objekt- und Kindelemente in beispielsweise HTML wirken können.
Weiterführende Links zum Thema XML/XSD:
-
XML-Deklaration vom W3C - https://www.w3.org/XML/
-
XML-Schema Tutorial vom W3C - https://www.w3schools.com/xml/schema_intro.asp
-
XML-Schema Deklaration W3C - https://www.w3.org/standards/xml/schema
-
XML-Schema Validator Online - http://www.utilities-online.info/xsdvalidation/