Для небольшого контекста: Class
может иметь другие Class
как Requirement
, которые должен быть взят студентом. Class
берется Student
через ClassGroup
, который можно упорядочить по времени с его атрибутом sessionYear
.
Я хочу поставить неизменное ограничение OCL, которое проверит, были ли для sessionYear
a ClassGroup
его Class
Requierement
уже приняты до этого sessionYear
.
другими словами: sessionYear
для Requirement
<<code>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
за это.