大量使用 "Shorthand for Collect" 的 OCL 表达式的正确解释是什么?

What is the correct interpretation for a number of OCL expressions that use "Shorthand for Collect"?

给定以下 UML 模型:

我正在努力正确解释某些 OCL 表达式(所有这些都在 class "City" 的上下文中)。我正在使用的 OCL 版本是 OCL 2.3.1(尽管如果 OCL 2.4 更适合回答我的问题,例如因为 OCL 的某些方面在 OCL 2.4 中更清晰,我当然感兴趣)。

self.building.room.window => 是的,是的,是的

您在第一个例子中成功展开了collect。在第二个中做同样的事情,假设房间只有一个区域。

自己->收集(建筑)->收集(room.area)> 0

输入错误:Bag(Integer) > Integer

self->collect(building)->collect(room.area)->size() > 0

输入正确但测试是否有多个区域

self->collect(building)->collect(room.area)->sum() > 0

输入正确并检测是否有任何(假设非负)区域非零

self->collect(building)->collect(room)->forAll(area > 0)

非单人房测试

(如果您使用 Eclipse OCL Xtext 控制台,您将看到类型错误和中间类型。)