Для небольшого контекста: Class
может иметь других Class
как Requirement
, которые должен взять студент. Class
принимается Student
через ClassGroup
, который может быть упорядочен во времени с его атрибутом sessionYear
.
Я хочу поместить неизменное ограничение OCL, которое будет проверять, были ли для sessionYear
a ClassGroup
его Class
Requierement
уже приняты до этого sessionYear
.
другими словами: sessionYear
вместо Requirement
‹ sessionYear
вместо Class
Я пробовал довольно много ограничений, и моей ближайшей попыткой был этот:
context Etudiant inv C6: if ClassTaken->notEmpty then
classTaken->forAll(ct|ct.class.Requirement.OfferedGroup->collect(sessionYear)->forAll(sy| sy < cs.sessionYear))
else true endif
Но проблема в том, что в forAll(sy| sy->sy < cs.sessionYear)
, sy
будет не Student
требуемый ClassTaken
для ClassGroup
, а скорее Bag со всеми экземплярами OfferedGroup
, которые Requirement
для него.