ГОСТ Р HCO/HL7 27951—2016
Целью использования литералов является представление значений в краткой человекочитаемой форме. На
пример. литеральные представления целых чисел (тип данных INT) и вещественных чисел (тип данных REAL) яв
ляются строками, состоящими из знака числа, цифр, необязательной десятичной точки и т. д. Более важные типы
интервалов (IVL<REAL>, IVL<PQ>. IVL<TS>) имеют литеральные представления наподобие «<5», означающего
«меньше 5». что гораздо удобнее для чтения, нежели полностью структурированная форма интервала. Для неко
торых более сложных типов данных, например интервалов, общей спецификации периодичности и параметриче
ского распределения вероятности литеральная форма представления значений может оставаться единственной до
тех пор. пока пользователь не привыкнет к используемой концептуализации.
Каждое литеральное преобразование имеет свой собственный синтаксис (грамматику), который может быть
не очень простым для компьютерной обработки1).
П ри м е ча н и е — Спецификация реализуемой технологии, использующая строковое представление зна
чений этих абстрактных типов данных, может использовать, а может и не использовать литеральные представле
ния, приведенные в настоящем стандарте. Ожидается, что спецификация реализуемой технологии на языке XML
будет использовать не все. но некоторую часть определенных здесь представлений.
В. 1.9.4.1 Обьявление
На языке определения типов данных литерал объявляется как свойство типа данных, используя ключевое
слово literal, за которым следует имя типа данных ST. поскольку литерал представляет собой преобразование в тип
данных ST и обратно:
type Integer:Number alias INT {
lateral ST;
i ;
B.1.9.4.2 Определение
Фактическое определение литеральной формы осуществляется вне тела объявления типа данных, исполь
зуя атрибутивную грамматику. Такая грамматика определяет как семантику, так и синтаксис структур языка. Опре
деленный в ней синтаксис по существу является формой Бэкуса — Наура BNF (Backus-Naur-Form)2*.
К примеру, рассмотрим следующее простое определение типа данных порядковых чисел (положительных
целых чисел). Определение этого типа данных зависит только от типа данных Boolean (BL) и содержит обьявление
литерала строкового типа:
type CarainalNumber alias CARD (
BLisZero;
BLequal(ANY x>;
CARDsuccessor;
CARDplus(CARD X>;
CARDtimesTen;
literal ST;
i ;
Ниже полностью представлены синтаксис и семантика литерала, а затем его детальное описание.
CARD.literal ST <
CARD ; CARD digit | $.equal($1.timesTen
.p lu s
(S2); I
I digit| S.equal(SI>; i;
11 Наличие различных грамматик литералов не означает, что они будут объединены в одну общую грамма
тику для представления значений в стандартах HL7. Хотя и можно предпринять попытки разрешения неоднознач
ности для литералов разных типов, они могут оказаться опасными, поскольку некоторые из неоднозначностей
останутся. Например, значение «1.2» является допустимым литералом как для объектного идентификатора (тип
данных OID). так и для вещественного числа.
2) Используемый здесь вариант формы BNF близок к тем. что используются в языках синтаксического раз
борщика YACC и генератора лексического анализатора LEX. но он упрощен и сделан совместимым с синтаксисом и
стилем объявлений, принятыми в данном языке определения типов данных. Отличия состоят в том. что все
символы имеют ровно один атрибут, их значение строго типизировано с использованием одного из определенных
типов данных. Тип каждого символа объявлен перед определением символа (например, INT digit : «0» | «1» | ... |
«9»:). Начальный символ представляет собой не имя. а тип (например. INT : digit | INT digit;). Имя типа данных мо жет
служить именем символа, означающего литерал этого типа данных.
295