ГОСТ Р HCO/HL7 27951—2016
В.1.9 Введение в формальный язык определения типов данных DTDL (Formal Data Type Definition
Language)
П р и м е ч а н и е — Это не спецификация прикладного программного интерфейса (API). В то время как
данный формальный язык гложет напоминать некоторые языки программирования или определения интерфейсов,
он не предназначен для определения деталей программ и других средств реализации. Формальные определения
являются нормативной частью настоящей спецификации, но данный конкретный язык не требует реализации или
использования в системах, соответствующих стандарту. От них не требуется также реализации или использования всех
семантических свойств. Внутренняя деятельность систем, способ реализации типовданных, их функциональ ность и
предоставляемые сервисы полностью выходят за область применения настоящего стандарта. Формальное
определение только указывает смысл значений данных с помощью утверждений, как с точки зрения теории эти
значения связаны с собой и какими свойствами обладают.
Этот формальный язык определения типов данных1’ задает:
- полное и краткое имя данных:
- именованные значения для полностью перечисляемого расширения;
- семантические свойства, унарные, бинарные свойства, а также свойства более высокого порядка;
- инварианты, то есть ограничения свойств.
- допустимые преобразования типа;
- синтаксис строкового представления значения (если таковое имеется).
Определение типа данных осуществляется в два этапа. Сначала делается объявление типа данных. В объ
явлении указываются имя нового типа данных и список имен, типов и сигнатур его семантических свойств. Это
лишь объявление, а не определение типа. Определение содержит логические утверждения о том, что всегда ис
тинно для значений этого типа и их свойств (инвариантные утверждения).
В. 1.9.1 Объявление
Объявление каждого типа данных начинается с ключевого слова type. Например, ниже показан заголовок
объявления типа данных Boolean, имеющего краткое имя BL и являющегося специализацией типа данныхANY2’:
type Boolean alias BL specializes ANY
values(true, talse)
I
BL not;
BL and(BL x!;
i ;
Объявление типа данных Boolean содержит конструкцию values, специфицирующую полный набор значений
типа Boolean (его расширение) в виде именованных сущностей. Эти именованные значения являются также до
пустимыми строковыми литералами. Поскольку никакой другой тип данных из числа определенных в настоящей
спецификации не имеет конечное множество значений, то конструкция values уникальна для типа данных Boolean.
В размеченном формальном языке имена значений выделяются курсивом.
1’ Используемый здесь язык определения данных возник в результате экспериментов и опыта примене
ния различных альтернатив, включая таблицы определения типов данных и язык определения интерфейса IDL
(Interface Definition Language), предложенный организацией OMG (Object Management Group). Недостаток таблиц
определения типов данных в том, что они дают неверное представление, что настоящий документ
является спецификаций абстрактного синтаксиса, а не семантики. Аналогично недостатком IDL является то.
что его при менение дает неверное впечатление, что данный документ является определением прикладного
программного интерфейса API (application programming interface).
Получившийся язык определения типов данных многое позаимствовал от свойств и стиля языка IDL, языка
объектных ограничений OCL (ObjectConstraint Language), языков программирования JAVA. C++, а также от средств
генерации разборщиков синтаксиса LEX и YACC. Заимствованные свойства были объединены и дополнены в це лях
получения ровно того, что требовалось для данной спецификации типов данных и создания минимального и
самодостаточного языка. Кроме того, копь скоро основным назначением данного языка является определение типа
данных, была сделана попытка обойтись без встроенных типов данных.
2| Нетрудно видеть, что ключевое слово type указано вместо ключевого слова keyword, используемого при
описании интерфейсов на языках IDL и Java и классов на языках C++ и Java. Конструкция alias уникальна для
настоящей спецификации и введена для того, чтобы можно было добавить весьма краткую мнемонику к более
описательным именам. Конструкция specializes предпочтительнее двоеточия, используемого в языках C++ и IDL.
поскольку ее значение более очевидно.
290