Efficient XML Interchange

Dateiformat

Efficient XML Interchange (EXI) ist ein vom World Wide Web Consortium (W3C) vorgeschlagenes Format für die binäre Repräsentation von XML Information Sets. Im Vergleich zu textbasierten XML-Dokumenten können Dokumente im EXI-Format schneller verarbeitet werden und benötigen weniger Bandbreite beim Transfer über ein Netzwerk. Neben EXI gibt es weitere Ansätze eine binäre Repräsentation für XML zu etablieren (vgl. Binary XML).

Efficient XML Interchange (EXI)
Dateiendung: .exi
MIME-Type: application/exi[1]
Magische Zahl: 2445.5849 hex
$EXI

(ASCII-C-Notation)

Entwickelt von: World Wide Web Consortium
Aktuelle Version 1.0
(19. September 2008)
Art: Binary XML
Erweitert von: XML
Standard(s): Format 1.0 (Recommendation)
Efficient XML Interchange Working Group

Geschichte Bearbeiten

Auf Basis der Schlussfolgerungen der XML Binary Characterization Working Group wurde im November 2005 die Efficient XML Interchange (EXI) working Group gegründet, mit dem Ziel ein binäres Beschreibungsformat für XML zu definieren.[2] Nach Analyse und Vergleich mehrerer Ansätze (u. a. XML+gzip, Fast Infoset, Fujitsu Binary, Xebu und esXML) wurde im November 2006 Efficient XML als Basis für EXI gewählt.[3] Im Juli 2007 wurde der erste Entwurf für den Efficient XML Interchange standard veröffentlicht.

Die Planung der Arbeitsgruppe sah es vor, EXI im September 2009 als W3C-Empfehlung zu veröffentlichen.[4] Im Januar 2011 wurde dann ein Vorschlag für eine W3C-Empfehlung[5] und im März 2011 die darauf aufbauende W3C-Empfehlung[6] publiziert. Im Februar 2014 wurde eine 2te Edition[7] veröffentlicht.

Im November 2016 hat die Arbeitsgruppe ihren Namen von "Efficient XML Interchange (EXI)" zu "Efficient Extensible Interchange (EXI)" geändert um der breiten Anwendbarkeit des Formates Rechnung zu tragen.[8]

Konzept Bearbeiten

Der Algorithmus verwendet eine Grammatik, um anhand dieser zu bestimmen, was wahrscheinlich an einer bestimmten Stelle in einem XML-Dokument vorkommt. Die wahrscheinlichste Alternative wird dann mit weniger Bits kodiert als unwahrscheinlichere (vgl. Entropiekodierung). Dieser allgemein gehaltene Algorithmus kann auf jede Sprache, die von einer Grammatik beschrieben wird (z. B. SVG, Java, HTML usw.), angewendet werden. EXI ist für XML-Sprachen optimiert, das EXI4JSON-Beispiel zeigt wiederum die Anwendbarkeit des Verfahrens auf JSON-Dokumente.[9]

Die Grammatik erlaubt als Eingabe ein beliebiges XML-Dokument oder Fragmente davon. Um genauere Vorhersagen treffen zu können, was an einer bestimmten Stelle vorkommt, kann die Grammatik durch verschiedene Schemata (z. B. DTD oder XML Schema) erweitert werden.

Der Encoder erzeugt, unter Zuhilfenahme der Grammatik, aus der Eingabe einen Stream of Events (englisch für „Strom der Ereignisse“), der aus einer Reihe von einfachen Codes variabler Länge besteht. Diese Event Codes ähneln Huffman-Kodierungen, sind aber viel einfacher zu berechnen und zu pflegen. Zusätzlich können die Event Codes durch Lauflängenkodierung komprimiert werden.

Magische Zahl Bearbeiten

Um EXI-Streams von XML-Streams zu unterscheiden, wurden zwei Unterscheidungs-Bits eingeführt. Die ersten zwei Bits des ersten Oktetts müssen die Werte ‚1‘ und ‚0‘ in genau der Reihenfolge haben. Diese Reihenfolge ist in wohlgeformten XML-1.0-Dokumenten in den üblichen Zeichenkodierungen nicht möglich.[10] Um aber die Unterscheidung auch für mögliche zukünftige Kodierungen zu gewährleisten, wurde schon früh die Einführung eines magic cookie vorgeschlagen.[11]

In der Spezifikation zum Format 1.0 wird festgelegt, dass der EXI-Header mit dem so genannten EXI-Cookie, der ASCII-Zeichenfolge $EXI (0x24455849), beginnen kann. Unmittelbar darauf müssen die zwei Unterscheidungs-Bits folgen. Bis auf die ersten zwei und das vierte Bit des ersten Oktetts (nach dem EXI-Cookie) sind die anderen fünf variabel. Daraus ergeben sich theoretisch 32 verschiedene magische Zahlen.

Zwar ist die Verwendung des EXI-Cookies optional, sie wird aber in der Spezifikation dringend empfohlen.

Beispiel Bearbeiten

Ein EXI-Stream der Version 1 mit EXI-Cookie und ohne EXI-Optionen würde mit folgenden Bytes beginnen:

24 45 58 49 80

Ein EXI-Stream ab der Version 16 mit EXI-Cookie und EXI-Optionen würde wie folgt beginnen:

24 45 58 49 AF

Implementierungen Bearbeiten

Auf der Webseite der Interchange Working Group findet man eine ausführliche Beschreibung der Implementierungen.[12]

  • EXIficient: Ein von Siemens unterstütztes Open-Source-Projekt zur Implementation der EXI-Spezifikation in Java, C/C++, JavaScript.
  • Efficient XML: Eine durch die Firma AgileDelta kommerziell vertriebene Implementierung der EXI-Spezifikation in Java, .NET und C++
  • OpenEXI: Ein von Fujitsu, Naval Postgraduate School (NPS) und OptimaLogic vorangetriebenes Open-Source-Projekt zur Implementation der EXI-Spezifikation in Java.
  • Exi-Connexion - Open Source Implementation des EXI Working Draft vom 26. März 2008.
  • EXIP: Open-Source-Projekt von der Universität Luleå in C.
  • OSS EXI Tools von OSS Nokalva in C/C++ und .NET

Siehe auch Bearbeiten

Weblinks Bearbeiten

Quellen Bearbeiten

  1. proposed
  2. Oliver Goldman, Dmitry Lenkov: XML Binary Characterization. W3C, 31. März 2005, abgerufen am 7. September 2009 (englisch).
  3. Lightning-Fast Delivery of XML to More Devices in More Locations. AgileDelta, 8. Juli 2007, abgerufen am 7. September 2009 (englisch).
  4. Charter of the Efficient XML Interchange Working Group. W3C, abgerufen am 7. September 2009 (englisch).
  5. John Schneider, Takuki Kamiya: Efficient XML Interchange (EXI) Format 1.0. W3C Proposed Recommendation 20 January 2011. W3C, 20. Januar 2011, abgerufen am 17. März 2011 (englisch).
  6. John Schneider, Takuki Kamiya: Efficient XML Interchange (EXI) Format 1.0. W3C Recommendation 10 March 2011. W3C, 10. März 2011, abgerufen am 17. März 2011 (englisch).
  7. John Schneider, Takuki Kamiya, Daniel Peintner, Rumen Kyusakov: Efficient XML Interchange (EXI) Format 1.0 (Second Edition). W3C Recommendation 11 February 2014. W3C, 11. Februar 2014, abgerufen am 9. März 2017 (englisch).
  8. Daniel Peintner: Efficient representation for Web formats. In: W3C Blog. 22. November 2016, abgerufen am 28. Februar 2017 (englisch).
  9. Daniel Peintner and Don Brutzman editors: EXI for JSON (EXI4JSON). In: Public Working Draft. World Wide Web Consortium, 23. August 2016, abgerufen am 23. September 2016.
  10. John Schneider, Takuki Kamiya: Efficient XML Interchange (EXI) Format 1.0. W3C Working Draft 19 September 2008. W3C, 19. Dezember 2008, abgerufen am 7. September 2009 (englisch): „Unlike the optional EXI cookie that MAY occur to precede this field, the presence of Distinguishing Bits is REQUIRED in the EXI header. It is used to distinguish EXI streams from text XML documents in the absence of an EXI cookie. This two bit sequence is the minimum that suffices to distinguish EXI streams from XML documents since it is the minimum length bit pattern that cannot occur as the first two bits of a well-formed XML document represented in any one of the conventional character encodings, such as UTF-8, UTF-16, UCS-2, UCS-4, EBCDIC, ISO 8859, Shift-JIS and EUC, according to XML 1.0“
  11. Daniel Peintner, Santiago Pericas-Geertsen: Efficient XML Interchange (EXI) Primer. W3C, 19. Dezember 2007, abgerufen am 7. September 2009 (englisch, Editorial note): „The integration of a magic cookie is under consideration by the EXI WG. A magic cookie would allow distinguishing an EXI document from formats other than XML or from future character encodings“
  12. Efficient XML Interchange Working Group. EXI Implementations. W3C, 12. März 2011, abgerufen am 17. März 2011 (englisch).