Edison parst EDIFACT-Nachrichten in Python als echte Syntaxbäume
Parsing EDIFACT in Python with syntax trees

Die Python-Bibliothek Edison von AmadeusITGroup modelliert EDIFACT-Nachrichten nicht als flache Segmentliste, sondern als rekursiven Syntaxbaum mit bedingten, verpflichtenden und wiederholbaren Segmentgruppen. Nutzer definieren den Baum einmal und können Nachrichten dann parsen, validieren oder formatiert ausgeben. Intern wird der Baum in einen Zustandsgraphen möglicher Übergänge übersetzt, den man mit pydot visualisieren kann. Versionierte Schemata, Callbacks, Escaping und EBCDIC-Separatoren sind ebenfalls abgedeckt.
Statt eine Nachricht als flache Liste von Segmenten zu behandeln, modelliert Edison Nachrichten als Syntaxbaum: Segmente können Gruppen von Kindsegmenten definieren, rekursiv.
- vc5
Das versetzt mich 20+ Jahre zurück, als ich bei einem unabhängigen Plattenvertrieb gearbeitet habe und EDI-Nachrichten für verschiedene Einzelhändler erstellen und parsen musste.
Ich habe eine C-Bibliothek geschrieben, um die Nachrichten mit Callbacks im Stil von Expat zu parsen. Es gibt Bindings für Perl, um die Nutzung etwas einfacher zu machen. EDIFACT, X12 und Tradacoms werden unterstützt.
Wie auch immer, heutzutage wird das wohl kaum noch jemand brauchen, aber es gibt ein paar Perl-Skripte, die die EDIFACT-„Verzeichnisse“ (im Grunde Nachrichtenschemata) interpretieren können, sodass man seine eigenen Nachrichtensyntaxdefinitionen nicht selbst bauen muss. Es sollte möglich sein, die XML-Ausgabe, die dabei erzeugt wird, in das Python umzuwandeln, das man braucht, um Nachrichtensyntax, Elementdefinitionen usw. zu definieren.
Viel Glück damit – es gibt eine ganze Welt verrückter Branchenstandards zu erkunden.
Ach ja, und Consulting ist eine Möglichkeit, falls jemand Bedarf hat ;-)
--
- CharlesW
Falls andere HNler auch noch nichts davon gehört haben: https://en.wikipedia.org/wiki/EDIFACT
- alexprengere
Edison ist eine Python-Bibliothek zum Parsen von EDIFACT-Nachrichten. Statt eine Nachricht als flache Liste von Segmenten zu behandeln, modelliert sie Nachrichten als Syntaxbaum: Segmente können Gruppen von Kindsegmenten definieren, und zwar rekursiv.
Man definiert den Syntaxbaum einmal und parst, validiert oder formatiert Nachrichten dann gegen diese Struktur.
Es funktioniert, indem der Syntaxbaum in einen Zustandsautomaten möglicher Übergänge zwischen Segmenten umgewandelt wird.