Verarbeiten von JSON und XML mit JavaScript in DocBridge Mill

[JSON = JavaScript Object Notation; E4X = ECMAScript for XML]

Mit der Einführung der Version 2010.09 von DocBridge Mill wurde die intern benutzte JavaScript Engine erneuert, um Optimierungstechniken wie beispielsweise "trace trees" und "just-in-time" Kompilierung nutzen zu können. Dabei handelt es sich um die gleiche JavaScript Engine, die auch in den aktuellen Versionen des Webbrowsers Firefox eingesetzt wird.

Diese Engine bringt – bei gewissen Anwendungsszenarien - dramatische Performance­verbesserungen. Ein weiterer Vorteil dieses Updates ist die Verfügbarkeit von neuen JavaScript Primitiven für DocBridge Mill Entwickler, die dem ECMAScript Standard in den letzten Jahren hinzugefügt wurden.

In diesem Artikel stellen wir zwei Javascript Native Objekte vor – JSON und XML.

Das JSON-Objekt

Werden neue JavaScript Objekte in wortgetreuer Notation erstellt, wie im folgenden Beispiel, wird dies effektiv in JSON durchgeführt:

var obj = {
  propertyOne : "A",
  propertyTwo : "B",
  some_Array : [ 'A', 'B', 'C', 'D' ],
  getProperties : function() {
    return [ this.propertyOne, this.propertyTwo]
  }
};

Da dies im Vergleich mit XML eine kompakte und leicht lesbare Notation ermöglicht, hat JSON als Datenaustauschformat eine weite Verbreitung gefunden.

Das neue JavaScript Objekt JSON ist Teil des ECMAScript 5 Standards (beschrieben in ECMA-262). Dieser ermöglicht 2 Methoden: JSON.stringify und JSON.parse. Das Objekt JSON ist übrigens ein Singleton und steht somit zur Verfügung, ohne dass man es mit "new" instanziieren muss.

JSON.stringify(obj) ermöglicht das dumpen einer Objekt-Struktur als String, was sich beim Debugging komplexer Applikationen oder wenn die Datenstruktur von Objekten bewahrt werden muss (beispielsweise bei einem zweiten Aufruf von DocBridge Mill) als sehr nützlich erweisen kann.

JSON.parse(string) macht das Gegenteil: Es konvertiert einen JSON String in ein internes JavaScript Objekt zurück. Damit ist es möglich, externe Konfigurationsdateien als JSON zu speichern, per FileInputText() als String einzulesen um dann mittels JSON.parse() ein internes JavaScript Objekt zu generieren.

Das XML Object (E4X)

Seit der Version 1.6 von JavaScript stellt E4X ein natives Objekt zur Verarbeitung von XML bereit. Damit haben DocBridge Mill Entwickler die Möglichkeit, XML direkt per JavaScript zu verarbeiten, wie das folgende Beispiel zeigt:

Nehmen wir an, wir haben eine externe Datei "compart.xml"

<compart>
  <name>Compart AG</name>
  <address>
    <street>Otto-Lilienthal-Str. 38</street>
    <city>71034 Böblingen</city>
    <country>Germany</country>
  </address>
  <products>
    <product id="1">DocBridge Mill</product>
    <product id="2">DocBridge Delta</product>
    <product id="3">DocBridge View</product>
    <product id="4">DocBridge Pilot</product>
  </products>
</compart>

Innerhalb der DocBridge Mill Komponente :cpmill kann deren Inhalt eingelesen werden:

var xmlfile = new FileInputText("&ROOTDIR;/compart.xml", "UTF-8");
// or whatever encoding used internally
var xmlstring = '';
while (!xmlfile.eof()) {
  xmlstring += xmlfile.readln()
};
xmlfile.close();

Dann kann ein XML Objekt generiert werden:

var compartxml = new XML(xmlstring);

und der Inhalt der XML Datei kann mittels der E4X API leicht mit JavaScript verarbeitet werden

var compart_address = compartxml.address.street + ", " + compartxml.address.city + "," + compartxml.address.country + ".";
var pilot = compartxml.products.product[3]; // "DocBridge Pilot"
var deltaid = compartxml.products.product[1].@id; // "2"
var deltaname = compartxml.products.product.(@id == "2"); // "DocBridge Delta"
log("compart_address: " + compart_address);
log("pilot: " + pilot);
log("deltaname, deltaid: " + deltaname + ", " + deltaid);

Die vollständige Definition von E4X ist in der ECMA-357 Spezifikation beschrieben.

Weiterführende Links

Mozilla's JavaScript engine

JSON

E4X

Zurück