5 XML Alternativen für 2018

XML Alternativen

Die Extensible Markup Language (XML) – eine erweiterbare Auszeichnungssprache für die Codierung von Dokumenten – debütierte bereits vor zwei Jahrzehnten. Und obwohl es XML während dieser Zeit zu beachtlichem Erfolg gebracht hat, können sie viele Programmierer (zu denen auch ich mich zähle) nicht ausstehen.

XML war als rückwärtskompatibel zu der Standard Generalized Markup Language (SGML) beabsichtigt. Der Austausch strukturierter Daten zwischen Programmen wird somit deutlich schwerer, als eigentlich nötig. Und obwohl XML mit der Permisse entworfen wurde, sowohl für Menschen wie auch für Maschinen lesbar zu sein, ist sie letztendlich für Software viel einfacher verständlich, als für Menschen. Dass Sie zudem in einer unverhältnismäßigen Art und Weise Daten anhäuft, macht da Ganze nur noch schlimmer. (Obendrein ist die Bearbeitung super knifflig.)

Trotz dieser Schwächen gehört XML zum Alltag vieler Unternehmen. Mein letzter Job war die Wartung einer Oil-Trade-Software, durch die Händler Geschäfte in einer Kunden-Applikation abschließen konnten. Die Handelsdaten wurden dem Server in XML übermittelt. Dort wurden sie dann in SQL umgewandelt und in einer Datenbank ausgeführt. Manche Geschäfte wiesen riesige Datenmengen auf. Diese als XML zu übermitteln verursachte immensen Traffic. Es hat zwar funktioniert, aber meines Erachtens hätte man das alles beschleunigen können, wenn man stattdessen ein kleineres Übertragungsformat gewählt hätte.

Aufgrund seiner weiten Verbreitung wird XML wahrscheinlich noch für einige Zeit im Umlauf bleiben. Es wird zum Beispiel häufig in .NET, in config und in anderen Files verwendet. Die Problematik im Umgang mit strukturierten Daten ist keine neue. Im Gegenteil: Dieses Rad wurde schon zigmal erfunden. Die naheliegendste und bekannteste Alternative zu XML ist wahrscheinlich JSON. Hier sind noch ein paar weitere, die Sie vielleicht noch nicht kennen:

YAML (Yet Another Markup Language)

YAML ist eine Daten-Serialisierung-Sprache, die den Schwerpunkt auf die menschliche Leserlichkeit legt. Sie ist besser als JSON, wobei die Syntaxanalyse nach wie vor ziemlich aufwendig ist. Jedenfalls ist YAML einfacher als XML. Hier ist ein Ausschnitt eines Fallbeispiels:

--- !<tag:clarkevans.com,2002:invoice>
invoice: 34843
date   : 2001-01-23
bill-to: &id001
    given  : Chris
    family : Dumars
    address:
        lines: |
            458 Walkman Dr.
            Suite #292
        city    : Royal Oak
        state   : MI
        postal  : 48046
ship-to: *id001

Es gibt YAML-Bibliotheken, die für C/C++, Ruby, Python, Java, Perl, C#, Golang, PHP, OCaml, JavaScript und andere geeignet sind.

Protocol Buffers

Die von Google hergestellten Protocol Buffers sind (laut Google): „XML aber kleiner, schneller und einfacher.“

Protocol Buffers verwenden einen anderen Ansatz zur Datenbearbeitung. Sie kreieren eine Spezifikation Ihrer Daten, die dann in einer .proto File serialisiert werden. Auf der Übersichtsseite gibt es ein einfaches Beispiel für XML:

    John Doe
    jdoe@example.com

Und dann das Äquivalent des Protocol Buffers:

person {
  name: "John Doe"
  email: "jdoe@example.com"
}

Wenn Sie dies mit dem Protocol-Buffer-Compiler von Google kompilieren, generiert es Code für Ihre Sprache. Derzeit unterstützt Protocol Buffers generierten Code in Java, Python, Objective-C, und C++. Mit der neuen proto3 Sprach-Version funktioniert das auch mit Go, JavaNano, Ruby und C#.

Die Protokollversion wäre schätzungsweise 28 Bytes lang und würde circa 100-200 Nanosekunden für die Analyse benötigen. Also kein Vergleich zu den 69 Bytes der XML-Version (minus Leerräume) und den 5.000-10.000 benötigten Nanosekunden für die Analyse.

AXON

AXON ist eng verwandt mit JSON und vereinigt das Beste aus JSON, XMI und YAML. Der Code ist für Python – Quelle und Beispiele zur Benutzung dazu finden sich Github. Ähnlich wie YMAL verwendet es Einrückungen, um Hierarchie-Ebenen zu unterscheiden:

statement form	formatted expression form
    axon
      name: "AXON is eXtended Object Notation"
      short_name: "AXON"
      python_library: "pyaxon"
      atomic_values
        int: [0 -1 17]
        float: [3.1428 1.5e-17]
        decimal: [10D 1000.35D -1.25E+6D]
        bool: [true false]
        string: "abc ??? ???"
        multiline_string: "one

 

ConfigObj

Obwohl das Python ConfigObj seit 2014 kein Update mehr erlebt hat, ist es super praktisch, um Konfigurationsdateien zu kreieren und zu lesen. Auf Readthedocs findet sich eine ausführliche Dokumentation.

Es handelt sich um ein Key-Value-System das mit Einrückungen für Hierarchie-Ebenen kombiniert ist. Daten werden wie folgt erstellt:

# initial comment
keyword1 = value1
keyword2 = value2

[section 1]
keyword1 = value1
keyword2 = value2

    [[sub-section]]
    # this is in section 1
    keyword1 = value1
    keyword2 = value2

 

OGDL

Die Abkürzung steht für „Ordered Graph Data Language“. OGDL ist ein weiteres Format, das Verzeichnisbäume oder Text-Grafiken schreibt und Einrückung verwendet. OGDL ist einfach und übersichtlich. Hier ist ein Beispiel:

eth0
  ip
    192.168.1.1
  gateway
    192.168.1.10
  mask
    255.255.255.0
  timeout
    20

Es gibt Implementierungen für C, Go, Java und Perl. In Go würden Sie es mit solchem Code lesen:

g := ogdl.FromFile("config.g")
ip := g.Get("eth0.ip").String()
to := g.Get("eth0.timeout").Int64(60)

 

Weitere Alternativen

Während der Recherche für diesen Beitrag habe ich eine mittlerweile erloschene Webpage gefunden (noch in der Wayback Machine aufrufbar), die wiederum zu einer Seite mit 26 XML Alternativen verweist. Einige davon habe ich hier vorgestellt. Ein paar Links werden bestimmt ins Leere führen, aber ein Blick auf die Seite könnte sich dennoch lohnen.

 

Weitere Artikel

C im Browser ausführen

Entdecken Sie die Vorteile von MicroPython

Fünf Programmiersprachen, die endlich aussterben sollten

About David Bolton

David Bolton begann schon mit dem Programmieren, als er noch zur Schule ging und bevor es überhaupt PCs gab. Es gefiel ihm so sehr, dass er seinen Abschluss in Informatik machte. Er beschäftigt sich seit fast 35 Jahren mit dem Thema Programmieren – sowohl arbeitsbedingt als auch in seiner Freizeit. In dieser Zeit arbeitete er für Price Waterhouse, British Aerospace, MicroProse (wo Sid Maier Civilization kreiert hat), in einer gescheiterten Dotcom (HomeDirectory.com) und bei Morgan Stanley. Mehr als acht Jahre lange programmierte er Spiele, mehr als 12 Jahre Finanz-Software in London. Sein Leben beschreibt er als eine permanente Lernkurve. Er verfügt über umfangreiche Programmiererfahrung in 6502,Z80 und 68000 Assembler, Basic, Pascal, C, C++, C#, Java, PHP, SQL, Fortran, JavaScript und lernt zurzeit R. Außerdem entwickelt er heute mobile Apps in Xamarin (C#) und schreibt für Dice. Er lebt in New York (in Lincolnshire, England, nicht in den USA).
No comments yet.

Leave a Reply