Является ли использование ASCII 10 внутри сегмента HL7 допустимым способом представления новой строки?

Размещение символа ASCII 10 (0A) где-нибудь внутри сегмента сообщения HL7 для представления символа новой строки. Это действительно?

Из того, что я вижу, рекомендуется использовать \X0D\ или \X0D0A\ для представления нового символа строки для простого текстового формата HL7. Является ли использование только символа 0A ASCII явно недопустимым для HL7?


person Ay Rue    schedule 23.02.2016    source источник
comment
Если вы не знакомы с управляющими последовательностями HL7, загляните на эту страницу или выполните поиск. Существуют определенные символы, на которые следует обращать особое внимание и избегать их, если они представляют собой просто текст в поле (&, ~, ^, |, ...). corepointhealth.com/resource-center/hl7-resources/   -  person Dale M    schedule 24.02.2016


Ответы (3)


Переводы строки (0x0A) не допускаются в сообщениях HL7. Если вы редактируете сообщения с помощью блокнота, wordpad и многих других текстовых редакторов, они будут преобразовывать возврат каретки (0x0D) в CR/LF (0x0D 0x0A), и если вы сохраните, у вас будет поврежденное сообщение HL7. Избегайте LF (0x0A).

person Dale H.    schedule 23.02.2016
comment
Хотя я согласен с тем, что перевод строки (0x0A) желательно не отправлять в сообщениях HL7, я не могу найти четкого указания на то, что это запрещено. Глава 2 (версия 2.5 для США) упоминает в разделе 2.5.4 Разделители сообщений, что существует 6 специальных символов (окончание сегмента, разделитель полей, разделитель компонентов, разделитель подкомпонентов, разделитель повторений и escape-символ), причем разделитель сегмента всегда равен 0D и остальные символы определяются в сегменте MSH. Но ничего о том, что 0A не разрешено... Что, как правило, означает, что это просто еще один персонаж. - person Emilien; 31.07.2017

Чтобы ответить на вопрос «Является ли использование только символа 0A ASCII явно недействительным HL7?»:

Символ 0A нигде не упоминается в спецификациях HL7 как особый.

Выдержка из спецификаций HL7 2.5 для США:

2.5.4 Разделители сообщений

При построении сообщения используются определенные специальные символы. Это признак конца сегмента, разделитель полей, разделитель компонентов, разделитель подкомпонентов, разделитель повторений и escape-символ. Ограничителем сегмента всегда является возврат каретки (в ASCII шестнадцатеричный 0D). Другие разделители определяются в сегменте MSH, при этом разделитель поля находится в позиции 4-го символа, а другие разделители встречаются так же, как и в поле с названием «Символы кодирования», которое является первым полем после идентификатора сегмента. Значения разделителя, используемые в сегменте MSH, являются значениями разделителя, используемыми во всем сообщении. При отсутствии других соображений HL7 рекомендует предлагаемые значения, приведенные на рис. 2-1 в качестве разделителей.

Строго говоря, это означало бы, что вы можете использовать символ 0A точно так же, как любой из символов, кроме 6, упомянутых ранее.

‹конец "официального" ответа›

При этом я согласен с Дейлом Х. в том, что вам лучше воздержаться от использования этого символа в содержании сообщения HL7. Поскольку большинство редакторов (кроме устаревшего Блокнота в Windows) отображают этот символ как новую строку, вы можете невольно подумать, что сегмент был усечен или искажен. И у меня был по крайней мере один случай, когда механизм интерфейса действительно обрабатывал этот символ как завершение сегмента (что само по себе недопустимо, и сборка механизма интерфейса была изменена, чтобы больше этого не делать).

Так что лучше избегайте этого. Но в ситуациях, когда вы не контролируете вывод, это не кажется формально запрещенным персонажем...

person Emilien    schedule 31.07.2017

Если вы отправляете только 0A, то невозможно определить, что вы хотите ASCII 10/перевод строки, и предполагается, что вы хотите ноль и A.

Стандартный HL7 с escape-символом \, тогда да, рекомендуемым способом будет \X0A\. \X представляет начало шестнадцатеричных данных, за которыми следуют двухсимвольные шестнадцатеричные значения, заканчивающиеся \.

При этом, если вы отправляете эти данные в систему, они должны быть в состоянии сказать вам, что они принимают для перевода строк. Я видел системы, которые используют \.br\ или символ повторения ~ для определения новой строки. А иногда им нужны повторяющиеся сегменты. Например, ниже каждый сегмент OBX представляет собой новую строку отчета в системе.

OBX|1|TX|||This is line one
OBX|2|TX|||This is line two
person Dale M    schedule 23.02.2016