Rational Software Architect 8 と OCL は初めてです。1 つはクラスに適用され、もう 1 つは関連付けに適用されます。詳細については、図を参照してください。
ここで、OCL を使用して制約を表現したいと思います。クラスに <> ステレオタイプがある場合、そのクラスに接続されているすべての関連付けにRPAssignmentステレオタイプを持たせます。Permissionでステレオタイプ化されたクラスには、属性や操作がないことに注意してください。
OCL 制約をテストするための小さな例を作成しました。これは、RSA によって作成された、対応する xmi ファイルの関連ビットと同様に、図です。
<packageImport xmi:id="_dNGWEwhgEeCzvt5Jj9Wjpg">
<importedPackage xmi:type="uml:Model" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#_0"/>
</packageImport>
<packagedElement xmi:type="uml:Class" xmi:id="_sUoV4AhgEeCzvt5Jj9Wjpg" name="ProfileClass"/>
<packagedElement xmi:type="uml:Class" xmi:id="_LkpUwAkoEeCs_vLJf1t9eg" name="Perm1">
<ownedAttribute xmi:id="_PjkJ8Qk_EeCD2J3jYOsnVw" name="clas" visibility="private" type="_OWO0IAk_EeCD2J3jYOsnVw" association="_PjbAAAk_EeCD2J3jYOsnVw">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_PjkJ8wk_EeCD2J3jYOsnVw" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_PjkJ8gk_EeCD2J3jYOsnVw" value="1"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="_OWO0IAk_EeCD2J3jYOsnVw" name="class1">
<ownedAttribute xmi:id="_PjbAAQk_EeCD2J3jYOsnVw" name="perm1" visibility="private" type="_LkpUwAkoEeCs_vLJf1t9eg" association="_PjbAAAk_EeCD2J3jYOsnVw">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_PjkJ8Ak_EeCD2J3jYOsnVw" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_PjbAAgk_EeCD2J3jYOsnVw" value="1"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="_PjbAAAk_EeCD2J3jYOsnVw" name="gets" memberEnd="_PjbAAQk_EeCD2J3jYOsnVw _PjkJ8Qk_EeCD2J3jYOsnVw"/>
ナビゲート可能としてフラグが立てられている場合、アソシエーションの終わりは、属性と同様にプロパティであるように私には思えます。Permissionステレオタイプ クラス (およびいくつかのバリエーション)で次の制約を試しましたが、正しく機能していないようです。私が作成した例では、関連付けに必要なステレオタイプがないため、検証が失敗するはずであることに気付いたかもしれません。しかし、それは成功します。
self.base_Class.getAllAttributes()->forAll(att:Property | att.association.getAppliedStereotype('testProfile::RPAssignment') <> null)
ここで些細なことを見逃していますか?