1. Общие требования по формализации правил

1. Общие требования по формализации правил

84. Числовые значения в правилах формализуются как числа, записанные в десятичной системе счисления. В качестве разделителя целой и дробной частей числа используется точка (".").

85. Строковые (текстовые, кодовые) значения в правилах формализуются как последовательности символов, заключенных в одинарные кавычки ("'").

86. Значения, представляющие дату, время, дату и время, год, месяц года, месяц, день месяца, день в правилах, формализуются с помощью соответствующих выражений следующего вида:

DateType::new('YYYY-MM-DDV')

TimeType::new('HH:mm:ssV')

DateTimeType::new('YYYY-MM-DDTHH:mm:ssV')

YearType::new('YYYY')

YearMonthType::new('YYYY-MM')

MonthType::new('--MM')

MonthDayType::new('--MM-DD')

DayType::new('--DD')

где "::" - обращение к операции, определенной для типа данных, который указан перед данной последовательностью символов, new - наименование операции, используемой для создания значений данного типа, YYYY - год, MM - месяц, DD - день, HH - часы, mm - минуты, ss - секунды, V - часовой пояс, T - разделитель даты и времени, "-" - разделитель компонентов даты, ":" - разделитель компонентов времени.

Часовой пояс принимает одно из следующих значений: Z - всемирное координированное время, +HH:mm - положительное смещение относительно всемирного координированного времени, -HH:mm - отрицательное смещение относительно всемирного координированного времени. Часовой пояс может не указываться.

Значения, представляющие продолжительность времени в правилах, формализуются с помощью выражений следующего вида:

DurationType::new('-P[0-9]+Y[0-9]+M[0-9]+DT[0-9]+H[0-9]+M[0-9]+S')

где "-" - это опциональный индикатор отрицательной продолжительности времени, P - индикатор продолжительности времени, T - разделитель компонентов продолжительности времени в годах, месяцах и днях с одной стороны и в часах, минутах и секундах с другой, "[0-9]+" - последовательность десятичных цифр, Y - индикатор компонента продолжительности времени в годах, M - индикатор компонента продолжительности времени в месяцах (если используется до разделителя T) или минутах (если используется после разделителя T), D - индикатор компонента продолжительности времени в днях, H - индикатор компонента продолжительности времени в часах, S - индикатор компонента продолжительности времени в секундах. Должен быть указан хотя бы один компонент продолжительности времени. Если не указан ни один из компонентов продолжительности времени в часах, минутах или секундах, то разделитель T не используется.

87. Множества, упорядоченные множества, мультимножества и последовательности значений (далее - коллекции значений) в правилах формализуются с помощью соответствующих выражений следующего вида:

Set{[значение], [значение], [значение]}

OrderedSet{[значение], [значение], [значение]}

Bag {[значение], [значение], [значение]}

Sequence {[значение], [значение], [значение]}

88. При формализации правил используются следующие логические операции: конъюнкция (and), дизъюнкция (or), исключающая дизъюнкция (xor), импликация (implies), отрицание (not).

89. При формализации правил используются следующие арифметические операции: сложение (+), вычитание (-), умножение (*), деление (/), унарный минус (-).

90. При формализации правил используются следующие операции сравнения значений: равно (=), не равно (<>), менее (<), не более (<=), не менее (>=), более (>).

91. При формализации правил используются следующие операции, определенные для строковых значений: длина строки (size), соответствие строки регулярному выражению (matches).

92. При формализации правил используются следующие операции, определенные для коллекций значений: длина коллекции (size), проверка наличия значения в коллекции (includes), проверка отсутствия значения в коллекции (excludes), проверка наличия всех значений некоторой коллекции в данной коллекции (includesAll), проверка отсутствия всех значений некоторой коллекции в данной коллекции (excludesAll), подсчет количества элементов коллекции равных заданному значению (count), проверка отсутствия в коллекции элементов (isEmpty), проверка наличия в коллекции элементов (notEmpty), получение максимального элемента коллекции (max), получение минимального элемента коллекции (min), подсчет суммы элементов коллекции (sum).

93. При формализации правил используются следующие выражения итерации по элементам коллекции: выбор элементов, соответствующих условию (select), исключение элементов, соответствующих условию (reject), сортировка элементов коллекции (sortedBy), формирование новой коллекции без вложенных коллекций путем применения функции к каждому ее элементу (collect), формирование новой коллекции, возможно с вложенными коллекциями, путем применения функции к каждому ее элементу (collectNested), рекурсивное формирование коллекции (closure), определение выполняется ли условие для каждого элемента коллекции (forAll), определение выполняется ли условие хотя бы для одного элемента коллекции (exists), определение выполняется ли условие в точности для одного элемента коллекции (one), проверка элементов коллекции на уникальность (isUnique), получение произвольного элемента коллекции, соответствующего определенному условию (any), обобщенная итерация по элементам коллекции (iterate).

94. Для бинарных операций, перечисленных в пунктах 88 - 90, используется инфиксная нотация:

[значение] [операция] [значение]

Для операций, перечисленных в пункте 91, используется следующая нотация:

[реквизит | атрибут].[операция]([аргумент], [аргумент], [аргумент])

Для операций и выражений итерации, определенных для коллекций значений, перечисленных в пунктах 92 - 93, используется следующая нотация:

[реквизит | атрибут]->[операция]([итератор] | [выражение])

где [итератор] - наименование переменной, которая на каждом шаге итерации принимает очередное значение элемента коллекции, [выражение] - некоторое выражение, которое вычисляется для каждого элемента коллекции.

95. При формализации правил допустимо использование иных операций, описанных в спецификации Object Constraint Language, рекомендованной консорциумом Object Management Group.

96. Рекомендуется формализовать правила с помощью выражений следующего вида:

[ссылка на родительский реквизит целевого реквизита (атрибута) правила]->forAll([формализованное описание правила])

Если родительский реквизит целевого реквизита (атрибута) правила является корневым элементом электронного вида документа, то выражение итерации "forAll" не используется.