" { " DefinedObjectSet " } " " { " AtNotation "," + " } "
AtNotation : : =
"@" ComponentldLits |
"@." ComponentldList
ComponentldList : : = identifier "." +
10.8 Каждый "identifier" в списке "ComponentldList" идентифицирует компонент, порождающим которого является тип "множество", "последовательность" или выборочный тип, и он должен быть последним идентификатором "identifier", если компонент, им определяемый, не является типом "множество", "последовательность" или выборочным типом.
10.9 В случае, когда порождающий тип является типом "множество" или "последовательность", "identifier" должен быть одним из идентификаторов "identifier" типа "NamedType" в списке типов компонентов "ComponentTypeList" этого порождающего. В случае, когда порождающий тип является выборочный типом, "identifier" должен быть одним из идентификаторов "identifier" альтернативы "NamedType" в списке типов альтернатив "AlternativeTypeList" этого выборочного типа.
10.10 Продукция "AtNotation" предоставляет указатель на другие компоненты структуры АСН. 1, в которой она появляется. Порождающая структура для первого идентификатора "identifier" в списке "ComponentldList" определяется следующим образом:
а) если выбрана первая альтернатива "AtNotation" (нет точки после "@"), то порождающая структура является самой внешней, текстуально содержащей тип "множество", "последовательность" или выборочный тип;
б) если выбрана вторая альтернатива "AtNotation" (есть точка после "@"), то порождающая структура является самой внутренней, текстуально содержащей тип "множество" или "последовательность".
Примечание - Альтернатива "AtNotation" допустима только тогда, когда она текстуально находится внутри типа "множество" или "последовательность" и указывает на некоторое другое поле, которое текстуально находится в том же самом типе "множество" или "последовательность", хотя, возможно, на другом уровне вложенности.
Пример
В примере раздела 10 первая продукция "AtNotation" в компоненте errorlnfo ("@errorCategory") иллюстрирует случай а), тогда как вторая ("@.errorCategory") - случай б).
10.11 Компонент, в котором используется эта нотация, является указывающим компонентом, а компоненты, идентифицированные "AtNotation", являются указываемыми компонентами.
10.12 Множество объектов "ObjectSet" (см. 10.3) или "DefmedObjectSet" (см. 10.7) является ограничивающим множеством, а ассоциированная таблица, полученная из него (как определено в ГОСТ Р ИСО/МЭК 8824-2, раздел 13), является ограничивающей таблицей.
10.13 Ограничение связи компонента может быть применено только к типу АСН. 1, которое текстуально содержится в типе "Туре" (ограниченный тип), содержащем текстуально все указываемые компоненты. Ограниченный тип, по определению, должен быть самым внутренним "Туре", который удовлетворяет приведенному выше условию.
Пример
В примере раздела 10 ограниченный тип есть ErrorReturn.
Примечание - В некоторых отношениях можно рассматривать применение этого ограничения как использование значений указываемых компонентов для идентификации строки в ограничивающей таблице, а затем - использование значения соответствующего столбца для ограничения указывающего компонента. С этой точки зрения сами указываемые компоненты не могут рассматриваться как ограниченные,
Однако описанный ниже подход несколько иной. В нем ограничение рассматривается как действие над всеми возможными значениями ограниченного типа (которые, как объяснено выше, не являются значениями указывающего компонента) и выбор некоторых из этих значений в качестве удовлетворяющих ограничению, Этот подход позволяет рассматривать значения ограниченного типа, которые не содержат значения ни указывающего компонента, ни одного или нескольких указываемых компонентов (так как они являются факультативными или находятся внутри выборочных), и значения ограниченного типа, в которых один из указываемых компонентов имеет значение, не соответствующее ни одной строке в ограничивающей таблице.
10.14 Указывающий и все указываемые компоненты должны быть типов "ObjectClass-FieldType", относящимися к одному и тому же классу. Множество ограничений должно быть множеством информационных объектов этого класса. Указываемые компоненты должны быть полями значения или полями множества значений, ограниченные тем же самым множеством объектов, что и указывающий компонент.
Пример
В примере раздела 10 тип "ObjectClassFieldType" - это весь класс ERROR-CLASS, так как он является ограничивающим множеством, которое есть множество ErrorSet.
10.15 В следующих разделах определяется множество значений ограниченного типа, которое удовлетворяет этому ограничению.
10.16 Если указывающий компонент отсутствует в значении ограниченного типа, то значение всегда удовлетворяет ограничению.
Пример
В примере раздела 10, если отсутствует компонент "errors", то ограничения на ошибки удовлетворяются.
10.17 Если любой указываемый компонент отсутствует в значении ограниченного типа, то значение удовлетворяет ограничению только в том случае, если указывающий компонент также отсутствует, и в этом случае ограничение всегда удовлетворяется.
10.18 Если указывающий и все указываемые компоненты присутствуют, то ограничение удовлетворяется только в том случае, если в ограничивающей таблице существует одна или несколько выборочных строк, таких, что для каждой выборочной строки:
а) каждый указываемый компонент, который является полем значения, имеет значение, являющееся таковым для соответствующего столбца выборочной строки;
б) каждый указываемый компонент, который является полем множества значений, имеет значение, которое является одним из таковых в множестве значений соответствующего столбца выборочной строки.
10.19 Ограничение удовлетворяется тогда и только тогда, когда указывающий компонент удовлетворяет простому табличному ограничению (как определено выше), полученному применением таблицы, содержащей только выборочные строки для указывающего компонента.
Пример
В примере раздела 10 компоненты errorCategory, errorCode и errorlnfo должны соответствовать одной из строк ассоциированной таблицы ErrorSet.
10.20 Если тип "ObjectClassFieldType" ограничивается посредством одного или нескольких ограничений "TableConstraint", а имя "FieldName" обозначает поле типа, поле значения переменного-типа или поле множества значений переменного-типа, то в каждом отдельном случае передачи номер выборочной строки должен быть в точности одним, если один из указываемых компонентов является полем идентификатора, в противном случае должен быть выбран по крайней мере один номер.
Пример
В примере раздела 10, если бы имелся дополнительный объект {"В" 2 PrintableString}, могла быть более чем одна выборочная строка.
Приложение А
(обязательное)
(обязательное)
Ограничивающие типы "экземпляр-из"
А.1 В этом приложении специфицировано применение ограничений к типу "InstanceOfType", определенному в приложении С к ГОСТ Р ИСО/МЭК 8824-2.
А.2 Единственное ограничение, которое может быть применено к такому типу, является простым табличным ограничением, определенным в разделе 10, Эквивалентный тип "последовательность" типа экземпляр-из "InstanceOfType" ограничен тогда следующим образом:
SEQUENCE
{
type-id ,&id(),
value [0] ,&Type ({@.type-id})
}
где "" заменяется конкретным классом "DefinedObjectClass", используемым в нотации "InstanceOfType", a "" - конкретным множеством "ObjectSet", используемым в простом табличном ограничении.
А.3 Там, где к типу "экземпляр-из" применяется несколько ограничений, каждое порождает ограничение приведенного выше вида, так что несколько ограничений применяется к каждому элементу эквивалентного типа "последовательность".
А.4 Пример
На основе примера из ГОСТ Р ИСО/МЭК 8824-2, пункт С.9 можно построить следующий пример.