Разбор ЭДИФАКТ на самом деле не такой уж сложный. Просто разделите на символы sytax: сначала на '
, чтобы получить сегменты, чем на +
, чтобы получить элементы данных этих сегментов и на :
, чтобы получить отдельные компоненты. Разумеется, вам нужно позаботиться об эвакуированных символах-разделителях. Используемые здесь символы только по умолчанию, они могут быть изменены в начале сообщения дополнительным сегментом UNA. На самом деле wikipedia article на EDIFACT дает довольно хорошее (но краткое) введение к этому. И формат документируется с подробной информацией о UN's UNECE site (да, это много и трудно читать).
Трудная часть состоит в том, чтобы получить информацию из этого и в ваше приложение (и, чтобы убедиться, что оно действительно, оставьте в покое, создавая хорошие сообщения об ошибках). Если вы действительно планируете написать компилятор парсер из ничего для всего, что на любом языке, то: Нет, нет простого способа сделать это. Также нет других гибких представлений данных. То, что является сложной задачей и всегда будет.
Но вот идея: если вы в значительной степени используете XML (или любую другую «современную технологию», как вы ее называете ...). Было бы относительно простой задачей написать некоторую программу, которая преобразует сообщения EDIFACT в какой-то единый формат XML-EDIFACT-Format (что довольно ужасно и, скорее всего, выйдет из себя). Вы можете конвертировать каждый сегмент EDIFACT в один 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
и такие, но и некоторые группы сегментов, которые вы не видите напрямую).
Тем не менее, вам нужно будет создать специальные оценочные программы/схемы/whatevers для сообщений, которые вы получаете, в соответствии с справочниками EDIFACT, которые вы должны получить в качестве документации.