Scala & XML – wenn’s mal größer wird…

… dann stößt man mit dem in meinem letzten Eintrag vorgestellten Verfahren XML zu verarbeiten schnell an die Grenzen des Speichers. Scala bietet aber auch eine StAX-ähnliche XML Pull API, die im Folgenden näher vorgestellt wird.

Vorneweg etwas zu “Push” und “Pull”

Im Gegensatz zum XMLLoader (der DOM-ähnlichen Variante, die ich in meinem letzten Artikel zu Scala und XML vorgestellt habe), wird bei “Pull”- bzw. “Push”-Variante nicht das komplette XML in den Speicher geladen. Es wird einzeln über jedes Element im XML iteriert und für jedes Element ein Event generiert, auf das der verarbeitende Code reagieren kann. “Push” und “Pull” unterscheiden sich darin, ob die Kontrolle während des Parsens eines Dokuments beim Parser oder beim verarbeitenden Programm liegt. Ein “Push”-Parser übernimmt die Kontrolle während des Parsens, indem er das Dokument durchläuft und für jedes enthaltene Element eine Handler-Methode beim verarbeitenden Programm aufruft (SAX in Java). Ein “Pull”-Parser hingegen bietet einen Iterator an, mit dem das verarbeitende Programm entscheiden kann, wann es das nächste Element auslesen möchte (StAX in Java). Somit ist es dem Programm auch möglich das Parsen vorzeitig zu beenden, ohne das komplette XML eingelesen zu haben.

Weiterlesen..

Scala & XML

XML wird auch in Zeiten von JSON noch immer in vielen Projekten eingesetzt und wird es auch in Zukunft noch werden. Somit kommt es häufig vor, dass man XML Dateien erstellen, analysieren und verarbeiten muss. Scala ist eine der modernen Programmiersprachen auf Basis der JVM, die aktuell viel Zuspruch finden. Eine Besonderheit von Scala ist die Integration von XML als nativer Sprachbestandteil. Ein Grund sich die Möglichkeiten näher anzusehen, die Scala bei der XML Verarbeitung bietet, ohne in die kontroverse Diskussion einzusteigen, ob die Behandlung eines speziellen Dateiformats wie XML in eine Programmiersprache integriert sein sollte.

Weiterlesen..

Vielgestaltige Polymorphie

Polymorphie auszunutzen gilt als eine der Grundtugenden objektorientierter Programmierung. Leider gibt es Situationen, in denen sich klassische OO-Polymorphie nur schwer anwenden lässt. Dafür wird hier zunächst ein Beispiel gezeigt. Anschließend wird exemplarisch anhand von Scala und Clojure vorgestellt, wie das Problem in anderen Sprachen angegangen werden kann.

Weiterlesen..