ГОСТ Р HCO/HL7 27951—2016
Блок текста в фигурных скобках, следующий за заголовком, содержит объявление семантических свойств,
которыми обладает каждое значение типа данных. Объявление свойства завершается точкой с запятой, а другая
точка с запятой, стоящая посте закрывающей фигурной скобки, завершает объявление типа данных.
Объявление свойства включает в себя следующие компоненты (слева направо): (1) тип данных домена зна
чений свойства. (2) имя свойства и (3) необязательный список аргументов. Этот списококружен круглыми скобками,
внутри которых указана последовательность объявлений аргументов. Объявление аргумента содержит имя типа
данных и имя аргумента. Для семантических свойств, не имеющих аргументов, пустой список не указываетсяЧ
Конструкция specializes означает (а) наследование свойств от рода к виду, (б) возможность подстановки
значений видового типа в переменные родового типа. Эта конструкция может включать в себя определение допол
нительных свойств и спецификацию ограничений свойств, наследуемых специализированным типом.
Приведем следующий пример наследования: коль скоро тип данных CS является специализацией типа дан
ных CD. а тип данных CD имеет свойство code, то тип данных CS также имеет это свойство code, даже если свой
ство isNull не указано явно в объявлении свойства BL. Справедлива также следующая возможность подстановки:
если свойство имеет тип данных CD, а тип данных CS является специализацией типаданных CD, то значение этого
свойства может иметь тип данных CS. Другими словами, возможность подстановки означает, что все значения типа
данных CS являются также значениями типа данных CD2*.
Объявление type может иметь вкачестве квалификаторов ключевые слова abstract (абстрактный), protected
(защищенный) или private (приватный). Абстрактный тип представляет собой тип данных, у которого ни одно зна
чение не может иметь этот тип данных и при этом не принадлежать к его конкретной специализации. Защищенный
тип представляет собой тип данных, который используется внутри данной спецификации, но при этом не может
быть присвоен никакому свойству вне этой спецификации. Приватный тип представляет собой внутреннюю аб
стракцию «подсказки». Он определяется только для целей определения некоторого аспекта семантики типа дан
ных. но не используется как тип другого защищенного или публичного свойства3*. (Квалификатор private исполь
зуется здесь с единственной целью. Приватные типы определены только для формального определения других
типов данных и ни в каком виде не используются вне этой спецификации.)
В. 1.9.2 Инвариантное утверждение
Объявление семантических свойств, их имен, типов данных и аргументов представляет собой только ключ к
пониманию назначения типа данных. Истинное определение заключается в инвариантных утверждениях, являю
щихся логическими утверждениями, истинными в любое время.
В настоящей спецификации инвариантные утверждения представлены с использованием формального син
таксиса. а также на естественном языке. Преимуществами формального синтаксиса являются однозначность его
интерпретации и строгое типизирование. А утверждения на естественном языке более доступны для понимания,
особенно тем лицам, кто не натренирован в чтении утверждений на формальных языках.
Формальный синтаксис помогает придать убедительность настоящей спецификации. Однако в некоторых
случаях полная семантика типа не может быть полностью выражена с помощью таких инвариантных утверждений.
Сочетание естественного и формального языка помогает сделать настоящую спецификацию более точной.
Инвариантные утверждения образуются с помощью ключевого слова invariant, которое объявляет одну
или несколько переменных в том же формате, что у списка аргументов свойства. Инвариантное утверждение
может содержать конструкцию where, ограничивающую аргументы для всего тела утверждения. Тело инвари-
11Обратите внимание, что понятия входных и выходных аргументов, используемые в языке IDL. а также по
нятия возвращаемых значений и исключений, используемые в языках IDL. JAVA и C++, неуместны для настоящей
спецификации. Семантика типов данных не итлеет отношения к вызовам процедур, передаче параметров или нор
мального и аварийного возвращения управления из тела процедуры. Вместо этого каждое семантическое свойство
можно концептуально рассматривать как функцию, отображающую значение и необязательно аргумента на другое
значение. Это отображение не «вычисляется» и не «генерируется», оно существует на логическом уровне и для
актуализации отображения не требуется «вызывать» такую функцию.
2* Ограничивающий аспект специализации заслуживает разьяснений. Обычно утверждается, что наследо
вание на должно отказываться от каких-либо свойств, определенных для рода. Это действительно так для огра
ничения. поскольку при этом от свойства не отказываются, но ограничивают его значения меньшим множеством. Но
если свойство родительского класса может быть пустым (NULL), то ограничение может состоять в том. что оно всегда
пустое. В любом случае логически ограничение является специализацией с наследованием и возможно стью
подстановки.
3>Обратите внимание, что значение ключевого слова protected несколько отличается от квалификаторов до
ступности (public, package, protected, private), используемых в языках JAVA и C++. Оно используется здесь не как
признак скрытия информации об этом типе или исключения свойств защищенного типа издоступа вне настоящего
«пакета» спецификаций. Его надо рассматривать как настоятельную рекомендацию не объявлять атрибуты или
другие свойства таких защищенных типов. Защищенные типы должны использоваться как «встроенные» в другие
типы данных. Защищенный тип непосредственно доступен внутри «обертки», в которую он встроен. Понятие «де
легированных свойств» отсутствует.
291