Parsing EDIFACT ist eigentlich nicht so kompliziert. Split an den Sytax-Zeichen: zuerst bei '
, um die Segmente zu erhalten, als bei +
, um Datenelemente dieser Segmente zu erhalten und bei :
, um die einzelnen Komponenten zu erhalten. Sie müssen natürlich auf entkommene Trennzeichen achten. Die hier verwendeten Zeichen sind nur die Voreinstellung, sie können am Anfang der Nachricht durch das optionale UNA-Segment geändert werden. Tatsächlich gibt die wikipedia article auf EDIFACT eine ziemlich gute (aber kurze) Einführung dazu. Und das Format ist mit Details auf der UN's UNECE site dokumentiert (ja, das ist viel und schwer zu lesen).
Der knifflige Teil ist, die Informationen aus diesem und in Ihre Anwendung zu bekommen (und zu überprüfen, dass es gültig ist, lassen Sie in Ruhe gute Fehlermeldungen erstellen). Wenn du wirklich vorhast, einen kompletten Parser aus allem für jede Sprache zu schreiben, dann: Nein, es gibt keinen einfachen Weg, dies zu tun. Es gibt auch keine andere flexible Datenrepräsentation. Das ist eine schwierige Aufgabe und wird immer sein.
Aber hier ist eine Idee: Wenn Sie in XML so viel (oder jede andere "moderne Technologie" wie Sie es nennen möchten ...). Es wäre eine relativ einfache Aufgabe, ein Programm zu schreiben, das EDIFACT-Nachrichten in ein einheitliches XML-EDIFACT-Format konvertiert (was ziemlich schrecklich ist und mich höchstwahrscheinlich ausflippen würde). Sie können jedes EDIFACT-Segment in ein XML-Tag, vielleicht wie folgt konvertieren:
ERC+A7V:1:AMD'
IFT+3+NO MORE FLIGHTS'
In XML:
<segment qualifier="ERC">
<element>
<component>A7V</component>
<component>1</component>
<component>AMD<component>
</element>
</segment>
<segment qualifier="IFT">
<element>
<component>3</component>
</element>
<element>
<component>NO MORE FLIGHTS</component>
</element>
</segment>
Dann können Sie die Kraft Ihrer XML-Tools und Bibliotheken auf sie entfesseln zu validieren/auswerten es.
Sie könnten auch tun es spezifischere, wie folgt aus:
<segment_ERC>
<element>
<component>A7V</component>
<component>1</component>
<component>AMD<component>
</element>
</segment_ERC>
<segment_IFT>
<element>
<component>3</component>
</element>
<element>
<component>NO MORE FLIGHTS</component>
</element>
</segment_IFT>
Dies könnte einfacher Validierung über XSD. Natürlich können Sie mit dieser Konversation so genau gehen, wie Sie wollen, aber Sie würden früher oder später zu einem Punkt kommen, an dem Sie Informationen über die Struktur Ihrer gerade geparsten Nachricht in den Converter schreiben müssten (da es nicht trivial ist) weiß, welche Segmente in andere Segmente geschachtelt sind, die sie gruppieren.Es gibt nicht nur UNG
, und so, sondern auch einige Segmentgruppen, die Sie nicht direkt sehen.
Trotzdem müssen Sie nach den EDIFACT-Handbüchern, die Sie als Dokumentation bekommen sollten, spezielle Auswertungsprogramme/Schemata/whatevers für die Nachrichten erstellen, die Sie erhalten.