EDIFACT の解析は、実際にはそれほど複雑ではありません。構文文字で分割するだけです。最初に at で'
セグメントを取得し、+
at でそのセグメントのデータ要素を:
取得し、 at で個々のコンポーネントを取得します。もちろん、エスケープされた区切り文字に注意する必要があります。ここで使用される文字はデフォルトに過ぎず、オプションの UNA セグメントによってメッセージの先頭で変更できます。実際、 EDIFACT に関するウィキペディアの記事では、かなり良い (ただし簡潔な) 紹介が提供されています。そして、この形式は、国連の UNECE サイトで詳細に文書化されています(そうです、それは多くて読みにくいものです)。
トリッキーな部分は、そこから情報を取得してアプリケーションに取り込むことです (そして、それが有効であることを確認し、適切なエラー メッセージを作成することはそのままにしておきます)。どの言語でも、何もないところから完全なパーサーを作成することを本当に計画している場合は、次のようになります。いいえ、これを行う簡単な方法はありません。他の柔軟なデータ表現もありません。それは困難な作業であり、常にそうなるでしょう。
しかし、ここにアイデアがあります: XML (または他の「最新のテクノロジー」と呼びたい場合...) に興味がある場合。EDIFACT メッセージを統一された XML-EDIFACT-Format に変換するプログラムを作成するのは比較的簡単な作業です (これは非常に恐ろしいことであり、おそらく私をびっくりさせるでしょう)。おそらく次のように、すべての EDIFACT セグメントを 1 つの XML タグに変換できます。
ERC+A7V:1:AMD'
IFT+3+NO MORE FLIGHTS'
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>
次に、XML ツールとライブラリの能力を解き放ち、検証/評価することができます。
次のように、より具体的に行うこともできます。
<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>
これにより、XSD による検証が容易になります。もちろん、この会話で必要なだけ具体的にすることはできますが、遅かれ早かれ、現在解析されているメッセージの構造に関する情報をコンバーターに入れる必要があるポイントに到達します (これは簡単ではないため)。どのセグメントが、それらをグループ化する他のセグメントにネストされているかを知ることができます. などだけUNG
でUNH
なく、直接表示されないいくつかのセグメント グループもあります)。
それでも、ドキュメントとして取得する必要がある EDIFACT ハンドブックに従って、受信したメッセージに対して特定の評価プログラム/スキーマ/その他を作成する必要があります。