Edifact выпустит символ `?` Самостоятельно - PullRequest
0 голосов
/ 29 апреля 2020

С учетом фрагмента сообщения EDIFACT с использованием стандартных разделителей, с таким содержимым:

AAA?BBB

Как оно должно отображаться?

AAABBB

или

AAA?BBB

Для меня спецификация ООН неясна в этом вопросе:

  УФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФХФФФФФФФФФФФФФФФХФФФФФФФФФФФФД
  Г       Release character         Г               Г            Г
  Г (To release any of the charac-  Г       ?       Г            Г
  Г ters + ; ' ?  appearing in user Г(question mark)Г  NOT USED  Г
  Г data in Level A syntax.         Г               Г            Г
  Г It MUST immediately precede     Г               Г            Г
  Г the character in question       Г               Г            Г
  Г and signifies that the NEXT     Г               Г            Г
  Г single character is not to      Г               Г            Г
  Г be interpreted as a syntax      Г               Г            Г
  Г separator, terminator, or       Г               Г            Г
  Г release character.)             Г               Г            Г
  РФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФФСФФФФФФФФФФФФФФФСФФФФФФФФФФФФй

В нем говорится, что он используется для освобождения определенного символа, но что делать, когда следующий символ не является специальным?

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Используя набор символов UNOA (синтаксис уровня A), AAA?BBB недопустим EDIFACT.

Если бы я писал парсер с нуля, я бы пометил его как синтаксическую ошибку и допустил бы одно или более из следующего:

  • разрешить продолжить обработку сообщения с предупреждением и обработать его как полученное (ie. AAA?BBB) - при условии, что отправитель намеревался отправить AAA??BBB
  • отклонить сообщение и отправить отправителю отрицательное сообщение CONTRL и / или APERAK, указав местоположение и тип возникшей ошибки.

Но я не пишу парсер с нуля - и я не уверен, как наиболее часто используемые парсеры (например, Smooks для Java, боты для Python, все, что находится внутри Biztalk и Azure Logi c Apps) будут обрабатывать этот ввод. Я предполагаю, что некоторые не будут выдавать ошибку и будут выводить как "AAABB", "AAABBB", "AAA?BBB" или даже "".

1 голос
/ 30 апреля 2020

Обычно он отображается как AAA? BBB. Знак вопроса разрешен в установленном синтаксисе UNOB, но не в UNOA. Если он не экранирует разделитель, он считается частью содержимого.

В необычном случае, когда B является разделителем, скажем, разделителем компонента, он будет отображаться как AAAB, при условии, что при визуализации означают содержимое после применения разделителей

...