blob: 33b4f9c05b33b76582c24b59bf544a338314019c [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<xmi:XMI xmi:version="2.1" xmlns:xmi="http://schema.omg.org/spec/XMI/2.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:Ecore="http://www.eclipse.org/uml2/schemas/Ecore/5" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:uml="http://www.eclipse.org/uml2/2.1.0/UML" xsi:schemaLocation="http://www.eclipse.org/uml2/schemas/Ecore/5 pathmap://UML_PROFILES/Ecore.profile.uml#_z1OFcHjqEdy8S4Cr8Rc_NA">
<uml:Model xmi:id="_z3j3UBZaEdqs4ZsykdgStg" name="InfrastructureLibrary">
<packagedElement xmi:type="uml:Package" xmi:id="_3ADC7B74022D3C9FFCAA00D1" name="Core">
<packagedElement xmi:type="uml:Package" xmi:id="_3ADC7B74022D3C9FFCB502E0" name="Abstractions">
<packageImport xmi:id="_3ADC7B74022D3DEE2BE80333" importedPackage="_3ADC7B74022D3C9FFCC70354"/>
<packagedElement xmi:type="uml:Package" xmi:id="_3ADC7B74022D3CA002E901AD" name="Ownerships">
<packageImport xmi:id="_3ADC7B74022D3DF78BD10282" importedPackage="_3ADC7B74022D3DF78B7503C0"/>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3CADCAEE0250" name="Element" isAbstract="true">
<ownedComment xmi:id="_rMSPwBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CADCAEE0250">
<body>An element is a constituent of a model. As such, it has the capability of owning other elements.</body>
</ownedComment>
<ownedRule xmi:id="_rMlxwxTaEdqZu-3Jy1-uYg" name="not_own_self" constrainedElement="_3ADC7B74022D3CADCAEE0250">
<ownedComment xmi:id="_rMcAwxTaEdqZu-3Jy1-uYg" annotatedElement="_rMlxwxTaEdqZu-3Jy1-uYg">
<body>An element may not directly or indirectly own itself.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rMlxxBTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>not self.allOwnedElements()->includes(self)</body>
</specification>
</ownedRule>
<ownedRule xmi:id="_rMu7sxTaEdqZu-3Jy1-uYg" name="has_owner" constrainedElement="_3ADC7B74022D3CADCAEE0250">
<ownedComment xmi:id="_rMlxyBTaEdqZu-3Jy1-uYg" annotatedElement="_rMu7sxTaEdqZu-3Jy1-uYg">
<body>Elements that must be owned must have an owner.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rMu7tBTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>self.mustBeOwned() implies owner->notEmpty()</body>
</specification>
</ownedRule>
<ownedAttribute xmi:id="_3ADC7B74022D3CADCD85009B" name="ownedElement" type="_3ADC7B74022D3CADCAEE0250" isReadOnly="true" isDerived="true" isDerivedUnion="true" aggregation="composite" association="_3ADC7B74022D3CADCD8300C0">
<ownedComment xmi:id="_rNLnqRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CADCD85009B">
<body>The Elements owned by this element.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rNeikxTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rNeikhTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3CADCD8500A5" name="owner" type="_3ADC7B74022D3CADCAEE0250" isReadOnly="true" isDerived="true" isDerivedUnion="true" association="_3ADC7B74022D3CADCD8300C0">
<ownedComment xmi:id="_rOE_gRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CADCD8500A5">
<body>The Element that owns this element.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rOOwgxTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rOOwghTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3CB1D63A01EB" name="ownedComment" type="_3ADC7B74022D3CAC070A03AB" aggregation="composite" subsettedProperty="_3ADC7B74022D3CADCD85009B" association="_3ADC7B74022D3CB1D639015E">
<ownedComment xmi:id="_rXxHCxTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CB1D63A01EB">
<body>The Comments owned by this element.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rXxHDxTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rXxHDhTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedOperation xmi:id="_3ADC7B74022D3E106A8400E6" name="allOwnedElements" isQuery="true" bodyCondition="_rMu7vBTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rMu7uBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E106A8400E6">
<body>The query allOwnedElements() gives all of the direct and indirect owned elements of an element.</body>
</ownedComment>
<ownedRule xmi:id="_rMu7vBTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E106A8400E6">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rM4ssBTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = ownedElement->union(ownedElement->collect(e | e.allOwnedElements()))</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rMu7uxTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CADCAEE0250" direction="return">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_GbH_oRTbEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_GbH_oBTbEdqZu-3Jy1-uYg"/>
</ownedParameter>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E106AD00153" name="mustBeOwned" isQuery="true" bodyCondition="_rNLnoxTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rM4stRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E106AD00153">
<body>The query mustBeOwned() indicates whether elements of this type must have an owner. Subclasses of Element that do not require an owner must override this operation.</body>
</ownedComment>
<ownedRule xmi:id="_rNLnoxTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E106AD00153">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rNLnpBTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = true</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rNLnohTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010AC0090" direction="return"/>
</ownedOperation>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3CADCD8300C0" name="A_ownedElement_owner" memberEnd="_3ADC7B74022D3CADCD85009B _3ADC7B74022D3CADCD8500A5"/>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3CB1D639015E" name="A_ownedComment_owningElement" memberEnd="_3ADC7B74022D3CB1D63A01EB _3ADC7B74022D3CB1D63A020A">
<ownedEnd xmi:id="_3ADC7B74022D3CB1D63A020A" name="owningElement" type="_3ADC7B74022D3CADCAEE0250" subsettedProperty="_3ADC7B74022D3CADCD8500A5" association="_3ADC7B74022D3CB1D639015E">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rXxHEhTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rXxHERTaEdqZu-3Jy1-uYg"/>
</ownedEnd>
</packagedElement>
</packagedElement>
<packagedElement xmi:type="uml:Package" xmi:id="_3ADC7B74022D3CA002FD0120" name="Namespaces">
<packageImport xmi:id="_3ADC7B74022D3DE6A4350048" importedPackage="_3ADC7B74022D3CA002E901AD"/>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3CA0071C02FD" name="NamedElement" isAbstract="true">
<ownedComment xmi:id="_rRNMBBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA0071C02FD">
<body>A named element is an element in a model that may have a name.</body>
</ownedComment>
<ownedRule xmi:id="_rRgG8xTaEdqZu-3Jy1-uYg" name="has_no_qualified_name" constrainedElement="_3ADC7B74022D3CA0071C02FD">
<ownedComment xmi:id="_rRW9ARTaEdqZu-3Jy1-uYg" annotatedElement="_rRgG8xTaEdqZu-3Jy1-uYg">
<body>If there is no name, or one of the containing namespaces has no name, there is no qualified name.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rRgG9BTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>(self.name->isEmpty() or self.allNamespaces()->select(ns | ns.name->isEmpty())->notEmpty())&#xD;&#xA; implies self.qualifiedName->isEmpty()</body>
</specification>
</ownedRule>
<ownedRule xmi:id="_rRgG_BTaEdqZu-3Jy1-uYg" name="has_qualified_name" constrainedElement="_3ADC7B74022D3CA0071C02FD">
<ownedComment xmi:id="_rRgG-BTaEdqZu-3Jy1-uYg" annotatedElement="_rRgG_BTaEdqZu-3Jy1-uYg">
<body>When there is a name, and all of the containing namespaces have a name, the qualified name is constructed from the names of the containing namespaces.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rRgG_RTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>(self.name->notEmpty() and self.allNamespaces()->select(ns | ns.name->isEmpty())->isEmpty()) implies&#xA; self.qualifiedName = self.allNamespaces()->iterate( ns : Namespace; result: String = self.name | ns.name->union(self.separator())->union(result))</body>
</specification>
</ownedRule>
<generalization xmi:id="_3ADC7B74022D3CADD38B00D4" general="_3ADC7B74022D3CADCAEE0250"/>
<ownedAttribute xmi:id="_3ADC7B74022D3CA0080E03C3" name="name" type="_3ADC7B74022D3CA010B103C3">
<ownedComment xmi:id="_rR8y5BTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA0080E03C3">
<body>The name of the NamedElement.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rSGj4xTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rSGj4hTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3CA008400375" name="qualifiedName" type="_3ADC7B74022D3CA010B103C3" isReadOnly="true" isDerived="true">
<ownedComment xmi:id="_rSGj5RTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA008400375">
<body>A name which allows the NamedElement to be identified within a hierarchy of nested Namespaces. It is constructed from the names of the containing namespaces starting at the root of the hierarchy and ending with the name of the NamedElement itself.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rSPt0xTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rSPt0hTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3CA008A2036C" name="namespace" type="_3ADC7B74022D3CA0072700FA" isReadOnly="true" isDerived="true" isDerivedUnion="true" subsettedProperty="_3ADC7B74022D3CADCD8500A5" association="_3ADC7B74022D3CA008A20037">
<ownedComment xmi:id="_rSsZxxTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA008A2036C">
<body>Specifies the namespace that owns the NamedElement.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rS2KwhTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rS2KwRTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedOperation xmi:id="_3ADC7B74022D3E10644F034E" name="allNamespaces" isQuery="true" bodyCondition="_rRp38xTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rRgHARTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E10644F034E">
<body>The query allNamespaces() gives the sequence of namespaces in which the NamedElement is nested, working outwards.</body>
</ownedComment>
<ownedRule xmi:id="_rRp38xTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E10644F034E">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rRp39BTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = if self.namespace->isEmpty()&#xA;then Sequence{}&#xA;else self.namespace.allNamespaces()->prepend(self.namespace)&#xA;endif</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rRp38hTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA0072700FA" isOrdered="true" direction="return">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_GbRwoRTbEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_GbRwoBTbEdqZu-3Jy1-uYg"/>
</ownedParameter>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E1064C70329" name="isDistinguishableFrom" isQuery="true" bodyCondition="_rRp3_hTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rRp3-BTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E1064C70329">
<body>The query isDistinguishableFrom() determines whether two NamedElements may logically co-exist within a Namespace. By default, two named elements are distinguishable if (a) they have unrelated types or (b) they have related types but different names.</body>
</ownedComment>
<ownedRule xmi:id="_rRp3_hTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E1064C70329">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rRp3_xTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = if self.oclIsKindOf(n.oclType) or n.oclIsKindOf(self.oclType)&#xA;then ns.getNamesOfMember(self)->intersection(ns.getNamesOfMember(n))->isEmpty()&#xA;else true&#xA;endif</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rRp3-xTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010AC0090" direction="return"/>
<ownedParameter xmi:id="_3ADC7B74022D42EE305C0090" name="n" type="_3ADC7B74022D3CA0071C02FD"/>
<ownedParameter xmi:id="_3ADC7B74022D3E1064F402E7" name="ns" type="_3ADC7B74022D3CA0072700FA"/>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E10653C0010" name="separator" isQuery="true" bodyCondition="_rRzB4xTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rRp4AxTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E10653C0010">
<body>The query separator() gives the string that is used to separate names when constructing a qualified name.</body>
</ownedComment>
<ownedRule xmi:id="_rRzB4xTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E10653C0010">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rRzB5BTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = '::'</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rRzB4hTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010B103C3" direction="return"/>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E1065EF023E" name="qualifiedName" isQuery="true" bodyCondition="_rRzB7BTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rRzB6BTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E1065EF023E">
<body>When there is a name, and all of the containing namespaces have a name, the qualified name is constructed from the names of the containing namespaces.</body>
</ownedComment>
<ownedRule xmi:id="_rRzB7BTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E1065EF023E _3ADC7B74022D3CA008400375">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rR8y4BTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = if self.name->notEmpty() and self.allNamespaces()->select(ns | ns.name->isEmpty())->isEmpty()&#xA;then &#xA; self.allNamespaces()->iterate( ns : Namespace; result: String = self.name | ns.name->union(self.separator())->union(result))&#xA;else&#xA; Set{}&#xA;endif</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rRzB6xTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010B103C3" direction="return"/>
</ownedOperation>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3CA0072700FA" name="Namespace" isAbstract="true">
<ownedComment xmi:id="_rSPt1xTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA0072700FA">
<body>A namespace is an element in a model that contains a set of named elements that can be identified by name.</body>
</ownedComment>
<ownedRule xmi:id="_rSZe2BTaEdqZu-3Jy1-uYg" name="members_distinguishable" constrainedElement="_3ADC7B74022D3CA0072700FA">
<ownedComment xmi:id="_rSZe1BTaEdqZu-3Jy1-uYg" annotatedElement="_rSZe2BTaEdqZu-3Jy1-uYg">
<body>All the members of a Namespace are distinguishable within it.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rSZe2RTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>membersAreDistinguishable()</body>
</specification>
</ownedRule>
<generalization xmi:id="_3ADC7B74022D3CA00777024A" general="_3ADC7B74022D3CA0071C02FD"/>
<ownedAttribute xmi:id="_3ADC7B74022D3CA008A20358" name="ownedMember" type="_3ADC7B74022D3CA0071C02FD" isReadOnly="true" isDerived="true" isDerivedUnion="true" aggregation="composite" subsettedProperty="_3ADC7B74022D3CADCD85009B _3ADC7B74022D3CA0098401B9" association="_3ADC7B74022D3CA008A20037">
<ownedComment xmi:id="_rSjP2hTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA008A20358">
<body>A collection of NamedElements owned by the Namespace.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rSsZwxTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rSsZwhTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3CA0098401B9" name="member" type="_3ADC7B74022D3CA0071C02FD" isReadOnly="true" isDerived="true" isDerivedUnion="true" association="_3ADC7B74022D3CA009830275">
<ownedComment xmi:id="_rS2KxxTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA0098401B9">
<body>A collection of NamedElements identifiable within the Namespace, either by being owned or by being introduced by importing or inheritance.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rS2KyxTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rS2KyhTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedOperation xmi:id="_3ADC7B74022D3E1068D4021B" name="getNamesOfMember" isQuery="true" bodyCondition="_rSZe4hTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rSZe3RTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E1068D4021B">
<body>The query getNamesOfMember() gives a set of all of the names that a member would have in a Namespace. In general a member can have multiple names in a Namespace if it is imported more than once with different aliases. Those semantics are specified by overriding the getNamesOfMember operation. The specification here simply returns a set containing a single name, or the empty set if no name.</body>
</ownedComment>
<ownedRule xmi:id="_rSZe4hTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E1068D4021B">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rSZe4xTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = if member->includes(element) then Set{}->including(element.name) else Set{} endif</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rSZe4BTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010B103C3" direction="return">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_GbRwoxTbEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_GbRwohTbEdqZu-3Jy1-uYg"/>
</ownedParameter>
<ownedParameter xmi:id="_3ADC7B74022D3E1068FF0064" name="element" type="_3ADC7B74022D3CA0071C02FD"/>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E106939005E" name="membersAreDistinguishable" isQuery="true" bodyCondition="_rSjP1BTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rSjP0BTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E106939005E">
<body>The Boolean query membersAreDistinguishable() determines whether all of the namespaces members are distinguishable within it.</body>
</ownedComment>
<ownedRule xmi:id="_rSjP1BTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E106939005E">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rSjP1RTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = self.member->forAll( memb |&#xA;self.member->excluding(memb)->forAll(other |&#xA;memb.isDistinguishableFrom(other, self)))</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rSjP0xTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010AC0090" direction="return"/>
</ownedOperation>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3CA008A20037" name="A_ownedMember_namespace" memberEnd="_3ADC7B74022D3CA008A20358 _3ADC7B74022D3CA008A2036C"/>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3CA009830275" name="A_member_namespace" memberEnd="_3ADC7B74022D3CA0098401B9 _3ADC7B74022D3CA0098401CD">
<ownedEnd xmi:id="_3ADC7B74022D3CA0098401CD" type="_3ADC7B74022D3CA0072700FA" association="_3ADC7B74022D3CA009830275">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_bqZIkVomEduDzLNvRu8ZxQ" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_bqZIkFomEduDzLNvRu8ZxQ"/>
</ownedEnd>
</packagedElement>
</packagedElement>
<packagedElement xmi:type="uml:Package" xmi:id="_3ADC7B74022D3CA003360013" name="Classifiers">
<packageImport xmi:id="_3ADC7B74022D3DE6A3270343" importedPackage="_3ADC7B74022D3CA002FD0120"/>
<packageImport xmi:id="_h9WTwD9HEdqjIv4r4xIGZw" importedPackage="_3ADC7B74022D3CA002E901AD"/>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3CA00A2A018F" name="Classifier" isAbstract="true">
<ownedComment xmi:id="_rS_7zBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA00A2A018F">
<body>A classifier is a classification of instances - it describes a set of instances that have features in common.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3CA00B0C03CF" general="_3ADC7B74022D3CA0072700FA"/>
<ownedAttribute xmi:id="_3ADC7B74022D3CA00B92018D" name="feature" type="_3ADC7B74022D3CA00A3900A0" isReadOnly="true" isDerived="true" isDerivedUnion="true" subsettedProperty="_3ADC7B74022D3CA0098401B9" association="_3ADC7B74022D3CA00B91036C">
<ownedComment xmi:id="_rTS2vRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA00B92018D">
<body>Specifies each feature defined in the classifier.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rTcAoxTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rTcAohTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedOperation xmi:id="_3ADC7B74022D3E118E370051" name="allFeatures" isQuery="true" bodyCondition="_rTJFuBTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rTJFtBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E118E370051">
<body>The query allFeatures() gives all of the features in the namespace of the classifier. In general, through mechanisms such as inheritance, this will be a larger set than feature.</body>
</ownedComment>
<ownedRule xmi:id="_rTJFuBTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E118E370051">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rTJFuRTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = member->select(oclIsKindOf(Feature))</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rTJFtxTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA00A3900A0" direction="return">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_GbbhoRTbEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_GbbhoBTbEdqZu-3Jy1-uYg"/>
</ownedParameter>
</ownedOperation>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3CA00A3900A0" name="Feature" isAbstract="true">
<ownedComment xmi:id="_rTJFvRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA00A3900A0">
<body>A feature declares a behavioral or structural characteristic of instances of classifiers.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3CADD687034A" general="_3ADC7B74022D3CA0071C02FD"/>
<ownedAttribute xmi:id="_3ADC7B74022D3CA00B920183" name="featuringClassifier" type="_3ADC7B74022D3CA00A2A018F" isReadOnly="true" isDerived="true" isDerivedUnion="true" association="_3ADC7B74022D3CA00B91036C">
<ownedComment xmi:id="_rTS2tRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA00B920183">
<body>The Classifiers that have this Feature as a feature.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_izGigRikEdqJdcmiZMM1MA" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_izGigBikEdqJdcmiZMM1MA"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3CA00B91036C" name="A_feature_featuringClassifier" memberEnd="_3ADC7B74022D3CA00B92018D _3ADC7B74022D3CA00B920183"/>
</packagedElement>
<packagedElement xmi:type="uml:Package" xmi:id="_3ADC7B74022D3CA00EE60015" name="Expressions">
<packageImport xmi:id="_3ADC7B74022D3DE6A3C401C2" importedPackage="_3ADC7B74022D3CA002E901AD"/>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3CA00EFB03B9" name="OpaqueExpression">
<ownedComment xmi:id="_rTvipRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA00EFB03B9">
<body>An opaque expression is an uninterpreted textual statement that denotes a (possibly empty) set of values when evaluated in a context.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3CADD243035D" general="_3ADC7B74022D3CA00F020323"/>
<ownedAttribute xmi:id="_3ADC7B74022D41AE11E501C8" name="body" type="_3ADC7B74022D3CA010B103C3" isOrdered="true" aggregation="composite">
<ownedComment xmi:id="_rULnkxTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D41AE11E501C8">
<body>The text of the expression, possibly in multiple languages.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rULnlxTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rULnlhTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D41AE120C0319" name="language" type="_3ADC7B74022D3CA010B103C3" isOrdered="true" aggregation="composite">
<ownedComment xmi:id="_rUVYgRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D41AE120C0319">
<body>Specifies the languages in which the expression is stated. The interpretation of the expression body depends on the languages. If the languages are unspecified, they might be implicit from the expression body or the context. Languages are matched to body strings by order.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rUVYhRTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rUVYhBTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3CA00F020323" name="ValueSpecification" isAbstract="true">
<ownedComment xmi:id="_rTviqhTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA00F020323">
<body>A value specification is the specification of a (possibly empty) set of instances, including both objects and data values.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3CADD247010A" general="_3ADC7B74022D3CADCAEE0250"/>
<ownedOperation xmi:id="_3ADC7B74022D3E1402B00031" name="isComputable" isQuery="true" bodyCondition="_rT4skxTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rTvirxTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E1402B00031">
<body>The query isComputable() determines whether a value specification can be computed in a model. This operation cannot be fully defined in OCL. A conforming implementation is expected to deliver true for this operation for all value specifications that it can compute, and to compute all of those for which the operation is true. A conforming implementation is expected to be able to compute the value of all literals.</body>
</ownedComment>
<ownedRule xmi:id="_rT4skxTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E1402B00031">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rT4slBTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = false</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rT4skhTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010AC0090" direction="return"/>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E1402DE0204" name="integerValue" isQuery="true" bodyCondition="_rT4snBTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rT4smBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E1402DE0204">
<body>The query integerValue() gives a single Integer value when one can be computed.</body>
</ownedComment>
<ownedRule xmi:id="_rT4snBTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E1402DE0204">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rT4snRTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = Set{}</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rT4smxTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010A4007B" direction="return"/>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E14030E0325" name="booleanValue" isQuery="true" bodyCondition="_rUCdkRTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rT4soRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E14030E0325">
<body>The query booleanValue() gives a single Boolean value when one can be computed.</body>
</ownedComment>
<ownedRule xmi:id="_rUCdkRTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E14030E0325">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rUCdkhTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = Set{}</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rUCdkBTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010AC0090" direction="return"/>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E1403380299" name="stringValue" isQuery="true" bodyCondition="_rUCdmhTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rUCdlhTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E1403380299">
<body>The query stringValue() gives a single String value when one can be computed.</body>
</ownedComment>
<ownedRule xmi:id="_rUCdmhTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E1403380299">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rUCdmxTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = Set{}</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rUCdmRTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010B103C3" direction="return"/>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E140370027C" name="unlimitedValue" isQuery="true" bodyCondition="_rUCdoxTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rUCdnxTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E140370027C">
<body>The query unlimitedValue() gives a single UnlimitedNatural value when one can be computed.</body>
</ownedComment>
<ownedRule xmi:id="_rUCdoxTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E140370027C">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rUCdpBTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = Set{}</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rUCdohTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3DE6A93C0003" direction="return"/>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E1403A502BE" name="isNull" isQuery="true" bodyCondition="_rUCdrBTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rUCdqBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E1403A502BE">
<body>The query isNull() returns true when it can be computed that the value is null.</body>
</ownedComment>
<ownedRule xmi:id="_rUCdrBTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E1403A502BE">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rUCdrRTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = false</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rUCdqxTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010AC0090" direction="return"/>
</ownedOperation>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3E555C610097" name="Expression">
<ownedComment xmi:id="_rUCdsRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E555C610097">
<body>An expression is a structured tree of symbols that denotes a (possibly empty) set of values when evaluated in a context.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3E555CF0029C" general="_3ADC7B74022D3CA00F020323"/>
<ownedAttribute xmi:id="_3ADC7B74022D3E555C7702E8" name="symbol" type="_3ADC7B74022D3CA010B103C3">
<ownedComment xmi:id="_rULnhBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E555C7702E8">
<body>The symbol associated with the node in the expression tree.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_4cgRYWgYEdqfYrlcy8iLFA" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_4cgRYGgYEdqfYrlcy8iLFA"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3E555CFE0288" name="operand" type="_3ADC7B74022D3CA00F020323" isOrdered="true" aggregation="composite" subsettedProperty="_3ADC7B74022D3CADCD85009B" association="_3ADC7B74022D3E555CFC002C">
<ownedComment xmi:id="_rULniRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E555CFE0288">
<body>Specifies a sequence of operands.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rULnjRTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rULnjBTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3E555CFC002C" name="A_operand_expression" memberEnd="_3ADC7B74022D3E555CFE0288 _3ADC7B74022D3E555CFE02CE">
<ownedEnd xmi:id="_3ADC7B74022D3E555CFE02CE" name="expression" type="_3ADC7B74022D3E555C610097" subsettedProperty="_3ADC7B74022D3CADCD8500A5" association="_3ADC7B74022D3E555CFC002C">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rULnkBTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rULnjxTaEdqZu-3Jy1-uYg"/>
</ownedEnd>
</packagedElement>
</packagedElement>
<packagedElement xmi:type="uml:Package" xmi:id="_3ADC7B74022D3CA023540016" name="MultiplicityExpressions">
<packageImport xmi:id="_3ADC7B74022D3DE6A41C01AB" importedPackage="_3ADC7B74022D3CA00EE60015"/>
<packageImport xmi:id="_3ADC7B74022D3DF6636E0383" importedPackage="_3ADC7B74022D3DF65C06026F"/>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3CA0237A0346" name="MultiplicityElement" isAbstract="true">
<ownedComment xmi:id="_rUoTdxTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA0237A0346">
<body>MultiplicityElement supports the use of value specifications to define each bound of the multiplicity.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3DF78EA20170" general="_3ADC7B74022D3CADCAEE0250"/>
<ownedAttribute xmi:id="_3ADC7B74022D3DF78F1C034C" name="lower" type="_3ADC7B74022D3CA010A4007B" isDerived="true">
<ownedComment xmi:id="_rU71gRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DF78F1C034C">
<body>Specifies the lower bound of the multiplicity interval.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rU71hRTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rU71hBTaEdqZu-3Jy1-uYg"/>
<defaultValue xmi:type="uml:LiteralInteger" xmi:id="_GQsusCkbEdqPP7hCKvQ4ww" value="1"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3DF78F2B0290" name="upper" type="_3ADC7B74022D3DE6A93C0003" isDerived="true">
<ownedComment xmi:id="_rU71iRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DF78F2B0290">
<body>Specifies the upper bound of the multiplicity interval.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rU71jRTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rU71jBTaEdqZu-3Jy1-uYg"/>
<defaultValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_J0Y34CkbEdqPP7hCKvQ4ww" value="1"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3D5391BE0239" name="upperValue" type="_3ADC7B74022D3CA00F020323" aggregation="composite" subsettedProperty="_3ADC7B74022D3CADCD85009B" association="_3ADC7B74022D3D5391BE00B3">
<ownedComment xmi:id="_rVE_ZBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3D5391BE0239">
<body>The specification of the upper bound for this multiplicity.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rVE_aBTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rVE_ZxTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3D5391E6031D" name="lowerValue" type="_3ADC7B74022D3CA00F020323" aggregation="composite" subsettedProperty="_3ADC7B74022D3CADCD85009B" association="_3ADC7B74022D3D5391E6015B">
<ownedComment xmi:id="_qAlgIBVzEdqDjccWl3Bw0Q" annotatedElement="_3ADC7B74022D3D5391E6031D">
<body>The specification of the lower bound for this multiplicity.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rVE_chTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rVE_cRTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedOperation xmi:id="_3ADC7B74022D3E140A3102FA" name="lower" isQuery="true" bodyCondition="_rUyEehTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rUyEdBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E140A3102FA">
<body>The derived lower attribute must equal the lowerBound.</body>
</ownedComment>
<ownedRule xmi:id="_rUyEehTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E140A3102FA _3ADC7B74022D3DF78F1C034C">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rUyEexTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = lowerBound()</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rUyEdxTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010A4007B" direction="return"/>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E140A6C013C" name="upper" isQuery="true" bodyCondition="_rUyEhRTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rUyEfxTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E140A6C013C">
<body>The derived upper attribute must equal the upperBound.</body>
</ownedComment>
<ownedRule xmi:id="_rUyEhRTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E140A6C013C _3ADC7B74022D3DF78F2B0290">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rUyEhhTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = upperBound()</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rUyEghTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3DE6A93C0003" direction="return"/>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E140B0801A5" name="lowerBound" isQuery="true" bodyCondition="_rU71cxTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rUyEihTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E140B0801A5">
<body>The query lowerBound() returns the lower bound of the multiplicity as an integer.</body>
</ownedComment>
<ownedRule xmi:id="_rU71cxTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E140B0801A5">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rU71dBTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = if lowerValue->isEmpty() then 1 else lowerValue.integerValue() endif</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rU71chTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010A4007B" direction="return"/>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E140B58039F" name="upperBound" isQuery="true" bodyCondition="_rU71fBTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rU71eBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E140B58039F">
<body>The query upperBound() returns the upper bound of the multiplicity as an unlimited natural.</body>
</ownedComment>
<ownedRule xmi:id="_rU71fBTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E140B58039F">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rU71fRTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = if upperValue->isEmpty() then 1 else upperValue.unlimitedValue() endif</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rU71exTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3DE6A93C0003" direction="return"/>
</ownedOperation>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3D5391BE00B3" name="A_upperValue_owningUpper" memberEnd="_3ADC7B74022D3D5391BE0239 _3ADC7B74022D3D5391BE024D">
<ownedEnd xmi:id="_3ADC7B74022D3D5391BE024D" name="owningUpper" type="_3ADC7B74022D3CA0237A0346" subsettedProperty="_3ADC7B74022D3CADCD8500A5" association="_3ADC7B74022D3D5391BE00B3">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rVE_axTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rVE_ahTaEdqZu-3Jy1-uYg"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3D5391E6015B" name="A_lowerValue_owningLower" memberEnd="_3ADC7B74022D3D5391E6031D _3ADC7B74022D3D5391E6033B">
<ownedEnd xmi:id="_3ADC7B74022D3D5391E6033B" name="owningLower" type="_3ADC7B74022D3CA0237A0346" subsettedProperty="_3ADC7B74022D3CADCD8500A5" association="_3ADC7B74022D3D5391E6015B">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rVE_dRTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rVE_dBTaEdqZu-3Jy1-uYg"/>
</ownedEnd>
</packagedElement>
</packagedElement>
<packagedElement xmi:type="uml:Package" xmi:id="_3ADC7B74022D3CA026E00397" name="BehavioralFeatures">
<packageImport xmi:id="_3ADC7B74022D3DE6A2F2033D" importedPackage="_3ADC7B74022D3CA003360013"/>
<packageImport xmi:id="_3ADC7B74022D3E56169B00A7" importedPackage="_3ADC7B74022D3E554B4A028B"/>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3CA026FB0381" name="BehavioralFeature" isAbstract="true">
<ownedComment xmi:id="_rVYhYBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA026FB0381">
<body>A behavioral feature is a feature of a classifier that specifies an aspect of the behavior of its instances.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3CA0277D00C1" general="_3ADC7B74022D3CA00A3900A0"/>
<generalization xmi:id="_3ADC7B74022D3CB1519A0173" general="_3ADC7B74022D3CA0072700FA"/>
<ownedAttribute xmi:id="_3ADC7B74022D3CA02BDB0015" name="parameter" type="_3ADC7B74022D3CA02702036E" isOrdered="true" isReadOnly="true" isDerived="true" isDerivedUnion="true" subsettedProperty="_3ADC7B74022D3CA0098401B9" association="_3ADC7B74022D3CA02BDA01C2">
<ownedComment xmi:id="_rVhrYRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA02BDB0015">
<body>Specifies the parameters of the BehavioralFeature.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rVhrZRTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rVhrZBTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedOperation xmi:id="_3ADC7B74022D3E105A8A018F" name="isDistinguishableFrom" isQuery="true" redefinedOperation="_3ADC7B74022D3E1064C70329" bodyCondition="_rVhrVRTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rVYhZhTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E105A8A018F">
<body>The query isDistinguishableFrom() determines whether two BehavioralFeatures may coexist in the same Namespace. It specifies that they have to have different signatures.</body>
</ownedComment>
<ownedRule xmi:id="_rVhrVRTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E105A8A018F">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rVhrVhTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = if n.oclIsKindOf(BehavioralFeature)&#xA;then&#xA; if ns.getNamesOfMember(self)->intersection(ns.getNamesOfMember(n))->notEmpty()&#xA; then Set{}->including(self)->including(n)->isUnique( bf | bf.parameter->collect(type))&#xA; else true&#xA; endif&#xA;else true&#xA;endif</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rVhrUhTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010AC0090" direction="return"/>
<ownedParameter xmi:id="_3ADC7B74022D3E105BC103DB" name="n" type="_3ADC7B74022D3CA0071C02FD"/>
<ownedParameter xmi:id="_3ADC7B74022D3E105C0900B4" name="ns" type="_3ADC7B74022D3CA0072700FA"/>
</ownedOperation>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3CA02702036E" name="Parameter" isAbstract="true">
<ownedComment xmi:id="_rVhrWhTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA02702036E">
<body>A parameter is a specification of an argument used to pass information into or out of an invocation of a behavioral feature.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3CA02ABF01C5" general="_3ADC7B74022D3CA0071C02FD"/>
<generalization xmi:id="_3ADC7B74022D3CA02F820073" general="_3ADC7B74022D3CA00A3100E5"/>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3CA02BDA01C2" name="A_parameter_behavioralFeature" memberEnd="_3ADC7B74022D3CA02BDB0015 _3ADC7B74022D3CA02BDB001F">
<ownedEnd xmi:id="_3ADC7B74022D3CA02BDB001F" type="_3ADC7B74022D3CA026FB0381" association="_3ADC7B74022D3CA02BDA01C2">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rVhrahTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rVhraRTaEdqZu-3Jy1-uYg"/>
</ownedEnd>
</packagedElement>
</packagedElement>
<packagedElement xmi:type="uml:Package" xmi:id="_3ADC7B74022D3CA0306302C6" name="Instances">
<packageImport xmi:id="_3ADC7B74022D3DE6A40303D6" importedPackage="_3ADC7B74022D3CA00EE60015"/>
<packageImport xmi:id="_3ADC7B74022D3DE6A40C0270" importedPackage="_3ADC7B74022D3CAB68D00279"/>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3CA0320C02DB" name="InstanceSpecification">
<ownedComment xmi:id="_rVrcXhTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA0320C02DB">
<body>An instance specification is a model element that represents an instance in a modeled system.</body>
</ownedComment>
<ownedRule xmi:id="_rV0mQxTaEdqZu-3Jy1-uYg" name="slots_are_defined" constrainedElement="_3ADC7B74022D3CA0320C02DB">
<ownedComment xmi:id="_rVrcYxTaEdqZu-3Jy1-uYg" annotatedElement="_rV0mQxTaEdqZu-3Jy1-uYg">
<body>The defining feature of each slot is a structural feature (directly or inherited) of a classifier of the instance specification.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rV0mRBTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>slot->forAll(s |&#xA;classifier->exists(c | c.allFeatures()->includes(s.definingFeature))&#xA;)&#xA;</body>
</specification>
</ownedRule>
<ownedRule xmi:id="_rV0mTBTaEdqZu-3Jy1-uYg" name="no_duplicate_slots" constrainedElement="_3ADC7B74022D3CA0320C02DB">
<ownedComment xmi:id="_rV0mSBTaEdqZu-3Jy1-uYg" annotatedElement="_rV0mTBTaEdqZu-3Jy1-uYg">
<body>One structural feature (including the same feature inherited from multiple classifiers) is the defining feature of at most one slot in an instance specification.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rV0mTRTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>classifier->forAll(c |&#xA;(c.allFeatures()->forAll(f | slot->select(s | s.definingFeature = f)->size() &lt;= 1)&#xA;)&#xA;</body>
</specification>
</ownedRule>
<generalization xmi:id="_3ADC7B74022D3CB5A10A02FF" general="_3ADC7B74022D3CA0071C02FD"/>
<ownedAttribute xmi:id="_3ADC7B74022D3CA0333B03B3" name="slot" type="_3ADC7B74022D3CA032120334" aggregation="composite" subsettedProperty="_3ADC7B74022D3CADCD85009B" association="_3ADC7B74022D3CA0333B0178">
<ownedComment xmi:id="_rV-XTRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA0333B03B3">
<body>A slot giving the value or values of a structural feature of the instance. An instance specification can have one slot per structural feature of its classifiers, including inherited features. It is not necessary to model a slot for each structural feature, in which case the instance specification is a partial description.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rV-XURTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rV-XUBTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3CA034DC0362" name="classifier" type="_3ADC7B74022D3CA00A2A018F" association="_3ADC7B74022D3CA034DC00E1">
<ownedComment xmi:id="_rWIIQBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA034DC0362">
<body>The classifier or classifiers of the represented instance. If multiple classifiers are specified, the instance is classified by all of them.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rWIIRBTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rWIIQxTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3D11161F0240" name="specification" type="_3ADC7B74022D3CA00F020323" aggregation="composite" subsettedProperty="_3ADC7B74022D3CADCD85009B" association="_3ADC7B74022D3D11161E02D5">
<ownedComment xmi:id="_rWIIUhTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3D11161F0240">
<body>A specification of how to compute, derive, or construct the instance.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rWIIVhTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rWIIVRTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3CA032120334" name="Slot">
<ownedComment xmi:id="_rV-XQhTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA032120334">
<body>A slot specifies that an entity modeled by an instance specification has a value or values for a specific structural feature.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3CADD59B02E6" general="_3ADC7B74022D3CADCAEE0250"/>
<ownedAttribute xmi:id="_3ADC7B74022D3CA0333B03BD" name="owningInstance" type="_3ADC7B74022D3CA0320C02DB" subsettedProperty="_3ADC7B74022D3CADCD8500A5" association="_3ADC7B74022D3CA0333B0178">
<ownedComment xmi:id="_rV-XUxTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA0333B03BD">
<body>The instance specification that owns this slot.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rV-XVxTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rV-XVhTaEdqZu-3Jy1-uYg" value="1"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3CDA7CBE0189" name="value" type="_3ADC7B74022D3CA00F020323" isOrdered="true" aggregation="composite" subsettedProperty="_3ADC7B74022D3CADCD85009B" association="_3ADC7B74022D3CDA7CBD025A">
<ownedComment xmi:id="_rWIISBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CDA7CBE0189">
<body>The value or values corresponding to the defining feature for the owning instance specification.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rWIITBTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rWIISxTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3CA0353B0369" name="definingFeature" type="_3ADC7B74022D3CA00A410002" association="_3ADC7B74022D3CA0353B00FC">
<ownedComment xmi:id="_rWRSNxTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA0353B0369">
<body>The structural feature that specifies the values that may be held by the slot.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rWRSOxTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rWRSOhTaEdqZu-3Jy1-uYg" value="1"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3D1115A7028B" name="InstanceValue">
<ownedComment xmi:id="_rV-XRxTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3D1115A7028B">
<body>An instance value is a value specification that identifies an instance.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3D1116820335" general="_3ADC7B74022D3CA00F020323"/>
<ownedAttribute xmi:id="_3ADC7B74022D3D1238B00178" name="instance" type="_3ADC7B74022D3CA0320C02DB" association="_3ADC7B74022D3D1238AE0111">
<ownedComment xmi:id="_rWIIXBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3D1238B00178">
<body>The instance that is the specified value.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rWRSMxTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rWRSMhTaEdqZu-3Jy1-uYg" value="1"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3CA0333B0178" name="A_slot_owningInstance" memberEnd="_3ADC7B74022D3CA0333B03B3 _3ADC7B74022D3CA0333B03BD"/>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3CA034DC00E1" name="A_classifier_instanceSpecification" memberEnd="_3ADC7B74022D3CA034DC0362 _3ADC7B74022D3CA034DC0380">
<ownedEnd xmi:id="_3ADC7B74022D3CA034DC0380" type="_3ADC7B74022D3CA0320C02DB" association="_3ADC7B74022D3CA034DC00E1">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_IjKZAVomEduDzLNvRu8ZxQ" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_IjKZAFomEduDzLNvRu8ZxQ"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3CDA7CBD025A" name="A_value_owningSlot" memberEnd="_3ADC7B74022D3CDA7CBE0189 _3ADC7B74022D3CDA7CBE0193">
<ownedEnd xmi:id="_3ADC7B74022D3CDA7CBE0193" name="owningSlot" type="_3ADC7B74022D3CA032120334" subsettedProperty="_3ADC7B74022D3CADCD8500A5" association="_3ADC7B74022D3CDA7CBD025A">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rWIITxTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rWIIThTaEdqZu-3Jy1-uYg"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3D11161E02D5" name="A_specification_owningInstanceSpec" memberEnd="_3ADC7B74022D3D11161F0240 _3ADC7B74022D3D11161F025E">
<ownedEnd xmi:id="_3ADC7B74022D3D11161F025E" name="owningInstanceSpec" type="_3ADC7B74022D3CA0320C02DB" subsettedProperty="_3ADC7B74022D3CADCD8500A5" association="_3ADC7B74022D3D11161E02D5">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rWIIWRTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rWIIWBTaEdqZu-3Jy1-uYg"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3D1238AE0111" name="A_instance_instanceValue" memberEnd="_3ADC7B74022D3D1238B00178 _3ADC7B74022D3D1238B001C8">
<ownedEnd xmi:id="_3ADC7B74022D3D1238B001C8" type="_3ADC7B74022D3D1115A7028B" association="_3ADC7B74022D3D1238AE0111">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_M_64MVomEduDzLNvRu8ZxQ" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_M_64MFomEduDzLNvRu8ZxQ"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3CA0353B00FC" name="A_definingFeature_slot" memberEnd="_3ADC7B74022D3CA0353B0369 _3ADC7B74022D3CA0353B037D">
<ownedEnd xmi:id="_3ADC7B74022D3CA0353B037D" type="_3ADC7B74022D3CA032120334" association="_3ADC7B74022D3CA0353B00FC">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_PJwSgVomEduDzLNvRu8ZxQ" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_PJwSgFomEduDzLNvRu8ZxQ"/>
</ownedEnd>
</packagedElement>
</packagedElement>
<packagedElement xmi:type="uml:Package" xmi:id="_3ADC7B74022D3CA017500243" name="Redefinitions">
<packageImport xmi:id="_3ADC7B74022D3DE6A44502D6" importedPackage="_3ADC7B74022D3DF65990033B"/>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3CA019640144" name="RedefinableElement" isAbstract="true">
<ownedComment xmi:id="_rWbDNRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA019640144">
<body>A redefinable element is an element that, when defined in the context of a classifier, can be redefined more specifically or differently in the context of another classifier that specializes (directly or indirectly) the context classifier.</body>
</ownedComment>
<ownedRule xmi:id="_rWbDPhTaEdqZu-3Jy1-uYg" name="redefinition_context_valid" constrainedElement="_3ADC7B74022D3CA019640144">
<ownedComment xmi:id="_rWbDOhTaEdqZu-3Jy1-uYg" annotatedElement="_rWbDPhTaEdqZu-3Jy1-uYg">
<body>At least one of the redefinition contexts of the redefining element must be a specialization of at least one of the redefinition contexts for each redefined element.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rWbDPxTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>self.redefinedElement->forAll(e | self.isRedefinitionContextValid(e))</body>
</specification>
</ownedRule>
<ownedRule xmi:id="_rWbDRxTaEdqZu-3Jy1-uYg" name="redefinition_consistent" constrainedElement="_3ADC7B74022D3CA019640144">
<ownedComment xmi:id="_rWbDQxTaEdqZu-3Jy1-uYg" annotatedElement="_rWbDRxTaEdqZu-3Jy1-uYg">
<body>A redefining element must be consistent with each redefined element.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rWbDSBTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>self.redefinedElement->forAll(re | re.isConsistentWith(self))</body>
</specification>
</ownedRule>
<generalization xmi:id="_3ADC7B74022D3CA01AB203CF" general="_3ADC7B74022D3CA0071C02FD"/>
<ownedAttribute xmi:id="_3ADC7B74022D3CA01B20019D" name="redefinedElement" type="_3ADC7B74022D3CA019640144" isReadOnly="true" isDerived="true" isDerivedUnion="true" association="_3ADC7B74022D3CA01B1E012C">
<ownedComment xmi:id="_rWkNORTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA01B20019D">
<body>The redefinable element that is being redefined by this element.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rWkNPRTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rWkNPBTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3CADABFE01E3" name="redefinitionContext" type="_3ADC7B74022D3DF659AC02FF" isReadOnly="true" isDerived="true" isDerivedUnion="true" association="_3ADC7B74022D3CADABFD03A5">
<ownedComment xmi:id="_rWt-JBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CADABFE01E3">
<body>References the contexts that this element may be redefined from.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rWt-KBTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rWt-JxTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedOperation xmi:id="_3ADC7B74022D3E106C2C03A3" name="isConsistentWith" isQuery="true" precondition="_rWkNJxTaEdqZu-3Jy1-uYg" bodyCondition="_rWkNKRTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rWkNIhTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E106C2C03A3">
<body>The query isConsistentWith() specifies, for any two RedefinableElements in a context in which redefinition is possible, whether redefinition would be logically consistent. By default, this is false; this operation must be overridden for subclasses of RedefinableElement to define the consistency conditions.</body>
</ownedComment>
<ownedRule xmi:id="_rWkNJxTaEdqZu-3Jy1-uYg" constrainedElement="_3ADC7B74022D3E106C2C03A3">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rWkNKBTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>redefinee.isRedefinitionContextValid(self)</body>
</specification>
</ownedRule>
<ownedRule xmi:id="_rWkNKRTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E106C2C03A3">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rWkNKhTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = false</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rWkNJRTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010AC0090" direction="return"/>
<ownedParameter xmi:id="_3ADC7B74022D42EE305C00D5" name="redefinee" type="_3ADC7B74022D3CA019640144"/>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E106C8A007D" name="isRedefinitionContextValid" isQuery="true" bodyCondition="_rWkNMxTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rWkNLhTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E106C8A007D">
<body>The query isRedefinitionContextValid() specifies whether the redefinition contexts of this RedefinableElement are properly related to the redefinition contexts of the specified RedefinableElement to allow this element to redefine the other. By default at least one of the redefinition contexts of this element must be a specialization of at least one of the redefinition contexts of the specified element.</body>
</ownedComment>
<ownedRule xmi:id="_rWkNMxTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E106C8A007D">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rWkNNBTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = redefinitionContext->exists(c | c.allParents()->includes (redefined.redefinitionContext)))</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rWkNMRTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010AC0090" direction="return"/>
<ownedParameter xmi:id="_3ADC7B74022D42EE305C00D8" name="redefined" type="_3ADC7B74022D3CA019640144"/>
</ownedOperation>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3CA01B1E012C" name="A_redefinedElement_redefinableElement" memberEnd="_3ADC7B74022D3CA01B20019D _3ADC7B74022D3CA01B20019F">
<ownedEnd xmi:id="_3ADC7B74022D3CA01B20019F" type="_3ADC7B74022D3CA019640144" association="_3ADC7B74022D3CA01B1E012C">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_ka1DcVomEduDzLNvRu8ZxQ" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_ka1DcFomEduDzLNvRu8ZxQ"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3CADABFD03A5" name="A_redefinitionContext_redefinableElement" memberEnd="_3ADC7B74022D3CADABFE01E3 _3ADC7B74022D3CADABFE0215">
<ownedEnd xmi:id="_3ADC7B74022D3CADABFE0215" type="_3ADC7B74022D3CA019640144" association="_3ADC7B74022D3CADABFD03A5">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_lSaLsVomEduDzLNvRu8ZxQ" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_lSaLsFomEduDzLNvRu8ZxQ"/>
</ownedEnd>
</packagedElement>
</packagedElement>
<packagedElement xmi:type="uml:Package" xmi:id="_3ADC7B74022D3CA0118D00B2" name="Generalizations">
<packageImport xmi:id="_3ADC7B74022D3DE6A3F103E4" importedPackage="_3ADC7B74022D3D5142640297"/>
<packageImport xmi:id="_3ADC7B74022D3DE6A3E90189" importedPackage="_3ADC7B74022D3DF65990033B"/>
<packageImport xmi:id="_3ADC7B74022D3E55640A0169" importedPackage="_3ADC7B74022D3E554B4A028B"/>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3CA011B1028A" name="Generalization">
<ownedComment xmi:id="_5kpB0eDwEdqI1ohUEQYFdg" annotatedElement="_3ADC7B74022D3CA011B1028A">
<body>A generalization is a taxonomic relationship between a more general classifier and a more specific classifier. Each instance of the specific classifier is also an instance of the general classifier. Thus, the specific classifier indirectly has features of the more general classifier.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3CA01274037B" general="_3ADC7B74022D3D51445B01FA"/>
<ownedAttribute xmi:id="_3ADC7B74022D3CA0127D01D9" name="specific" type="_3ADC7B74022D3CA011BE01AD" subsettedProperty="_3ADC7B74022D3DE6A15F02E3 _3ADC7B74022D3CADCD8500A5" association="_3ADC7B74022D3CA0127C032D">
<ownedComment xmi:id="_rXUbIBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA0127D01D9">
<body>References the specializing classifier in the Generalization relationship. </body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rXUbJBTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rXUbIxTaEdqZu-3Jy1-uYg" value="1"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3CA01299018A" name="general" type="_3ADC7B74022D3CA011BE01AD" subsettedProperty="_3ADC7B74022D3DE6A1830227" association="_3ADC7B74022D3CA012980355">
<ownedComment xmi:id="_rXdlAhTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA01299018A">
<body>References the general classifier in the Generalization relationship.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rXdlBhTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rXdlBRTaEdqZu-3Jy1-uYg" value="1"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3CA011BE01AD" name="Classifier" isAbstract="true">
<ownedComment xmi:id="_rW3vMBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA011BE01AD">
<body>A classifier is a type and can own generalizations, thereby making it possible to define generalization relationships to&#xD;
other classifiers.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3E554FB4033A" general="_3ADC7B74022D3E554AF2005E"/>
<ownedAttribute xmi:id="_3ADC7B74022D3CA0127D01CF" name="generalization" type="_3ADC7B74022D3CA011B1028A" aggregation="composite" subsettedProperty="_3ADC7B74022D3CADCD85009B" association="_3ADC7B74022D3CA0127C032D">
<ownedComment xmi:id="_rXUbGhTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA0127D01CF">
<body>Specifies the Generalization relationships for this Classifier. These Generalizations navigate to more general classifiers in the generalization hierarchy.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rXUbHhTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rXUbHRTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3DF65B8D0134" name="general" type="_3ADC7B74022D3CA011BE01AD" isDerived="true" association="_3ADC7B74022D3DF65B8A03C5">
<ownedComment xmi:id="_rXdlChTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DF65B8D0134">
<body>Specifies the general Classifiers for this Classifier.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rXdlDhTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rXdlDRTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedOperation xmi:id="_3ADC7B74022D3E105DC8003E" name="general" isQuery="true" bodyCondition="_rXKqExTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rXA5EhTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E105DC8003E">
<body>The general classifiers are the classifiers referenced by the generalization relationships.</body>
</ownedComment>
<ownedRule xmi:id="_rXKqExTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E105DC8003E _3ADC7B74022D3DF65B8D0134">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rXKqFBTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = self.parents()</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rXKqEBTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA011BE01AD" direction="return">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_GcBXgRTbEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_GcBXgBTbEdqZu-3Jy1-uYg"/>
</ownedParameter>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E105E6D030C" name="parents" isQuery="true" bodyCondition="_rXKqHBTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rXKqGBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E105E6D030C">
<body>The query parents() gives all of the immediate ancestors of a generalized Classifier.</body>
</ownedComment>
<ownedRule xmi:id="_rXKqHBTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E105E6D030C">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rXKqHRTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = generalization.general</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rXKqGxTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA011BE01AD" direction="return">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_GcBXgxTbEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_GcBXghTbEdqZu-3Jy1-uYg"/>
</ownedParameter>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E10747B0198" name="conformsTo" isQuery="true" redefinedOperation="_3ADC7B74022D3E554FFD0353" bodyCondition="_rXUbFBTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rXKqIRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E10747B0198">
<body>The query conformsTo() gives true for a classifier that defines a type that conforms to another. This is used, for example, in the specification of signature conformance for operations.</body>
</ownedComment>
<ownedRule xmi:id="_rXUbFBTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E10747B0198">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rXUbFRTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = (self=other) or (self.allParents()->includes(other))</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rXUbEhTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010AC0090" direction="return"/>
<ownedParameter xmi:id="_3ADC7B74022D3E107494009A" name="other" type="_3ADC7B74022D3CA011BE01AD"/>
</ownedOperation>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3CA0127C032D" name="A_generalization_specific" memberEnd="_3ADC7B74022D3CA0127D01CF _3ADC7B74022D3CA0127D01D9"/>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3CA012980355" name="A_general_generalization" memberEnd="_3ADC7B74022D3CA01299018A _3ADC7B74022D3CA012990194">
<ownedEnd xmi:id="_3ADC7B74022D3CA012990194" type="_3ADC7B74022D3CA011B1028A" association="_3ADC7B74022D3CA012980355">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_FM-LMVokEduDzLNvRu8ZxQ" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_FM-LMFokEduDzLNvRu8ZxQ"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3DF65B8A03C5" name="A_general_classifier" memberEnd="_3ADC7B74022D3DF65B8D0134 _3ADC7B74022D3DF65B8D0152">
<ownedEnd xmi:id="_3ADC7B74022D3DF65B8D0152" type="_3ADC7B74022D3CA011BE01AD" association="_3ADC7B74022D3DF65B8A03C5">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_CP4H8VokEduDzLNvRu8ZxQ" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_CP4H8FokEduDzLNvRu8ZxQ"/>
</ownedEnd>
</packagedElement>
</packagedElement>
<packagedElement xmi:type="uml:Package" xmi:id="_3ADC7B74022D3D513F63025F" name="Comments">
<packageImport xmi:id="_3ADC7B74022D3DE6A3030189" importedPackage="_3ADC7B74022D3CA002E901AD"/>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3CAC070A03AB" name="Comment">
<ownedComment xmi:id="_rXxHARTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CAC070A03AB">
<body>A comment is a textual annotation that can be attached to a set of elements.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D41B0D73B026C" general="_3ADC7B74022D3CADCAEE0250"/>
<ownedAttribute xmi:id="_3ADC7B74022D3CAC072502E2" name="body" type="_3ADC7B74022D3CA010B103C3">
<ownedComment xmi:id="_rXxHBhTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CAC072502E2">
<body>Specifies a string that is the comment</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_g7Pt4WgVEdqfYrlcy8iLFA" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_g7Pt4GgVEdqfYrlcy8iLFA"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3CB1D7400094" name="annotatedElement" type="_3ADC7B74022D3CADCAEE0250" association="_3ADC7B74022D3CB1D73F02EB">
<ownedComment xmi:id="_rXxHFRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CB1D7400094">
<body>References the Element(s) being commented.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rXxHGRTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rXxHGBTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3CB1D73F02EB" name="A_annotatedElement_comment" memberEnd="_3ADC7B74022D3CB1D7400094 _3ADC7B74022D3CB1D74000F8">
<ownedEnd xmi:id="_3ADC7B74022D3CB1D74000F8" type="_3ADC7B74022D3CAC070A03AB" association="_3ADC7B74022D3CB1D73F02EB">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_fJE9UVojEduDzLNvRu8ZxQ" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_fJE9UFojEduDzLNvRu8ZxQ"/>
</ownedEnd>
</packagedElement>
</packagedElement>
<packagedElement xmi:type="uml:Package" xmi:id="_3ADC7B74022D3D5142640297" name="Relationships">
<packageImport xmi:id="_3ADC7B74022D3DE6A4590393" importedPackage="_3ADC7B74022D3CA002E901AD"/>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3D51445B01FA" name="DirectedRelationship" isAbstract="true">
<ownedComment xmi:id="_rYEB8RTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3D51445B01FA">
<body>A directed relationship represents a relationship between a collection of source model elements and a collection of target model elements.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3D5144E80329" general="_3ADC7B74022D3CA004180181"/>
<ownedAttribute xmi:id="_3ADC7B74022D3DE6A15F02E3" name="source" type="_3ADC7B74022D3CADCAEE0250" isReadOnly="true" isDerived="true" isDerivedUnion="true" subsettedProperty="_3ADC7B74022D3D7A3113026A" association="_3ADC7B74022D3DE6A15E0179">
<ownedComment xmi:id="_rYECBhTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DE6A15F02E3">
<body>Specifies the sources of the DirectedRelationship.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rYNL4xTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rYNL4hTaEdqZu-3Jy1-uYg" value="1"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3DE6A1830227" name="target" type="_3ADC7B74022D3CADCAEE0250" isReadOnly="true" isDerived="true" isDerivedUnion="true" subsettedProperty="_3ADC7B74022D3D7A3113026A" association="_3ADC7B74022D3DE6A1820366">
<ownedComment xmi:id="_rYNL6RTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DE6A1830227">
<body>Specifies the targets of the DirectedRelationship.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rYNL7RTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rYNL7BTaEdqZu-3Jy1-uYg" value="1"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3CA004180181" name="Relationship" isAbstract="true">
<ownedComment xmi:id="_rYEB9hTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA004180181">
<body>Relationship is an abstract concept that specifies some kind of relationship between elements.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3CADCD40027C" general="_3ADC7B74022D3CADCAEE0250"/>
<ownedAttribute xmi:id="_3ADC7B74022D3D7A3113026A" name="relatedElement" type="_3ADC7B74022D3CADCAEE0250" isReadOnly="true" isDerived="true" isDerivedUnion="true" association="_3ADC7B74022D3D7A311203C7">
<ownedComment xmi:id="_rYEB_BTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3D7A3113026A">
<body>Specifies the elements related by the Relationship.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rYECABTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rYEB_xTaEdqZu-3Jy1-uYg" value="1"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3D7A311203C7" name="A_relatedElement_relationship" memberEnd="_3ADC7B74022D3D7A3113026A _3ADC7B74022D3D7A3113031E">
<ownedEnd xmi:id="_3ADC7B74022D3D7A3113031E" type="_3ADC7B74022D3CA004180181" association="_3ADC7B74022D3D7A311203C7">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_ukOVUVomEduDzLNvRu8ZxQ" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_ukOVUFomEduDzLNvRu8ZxQ"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3DE6A15E0179" name="A_source_directedRelationship" memberEnd="_3ADC7B74022D3DE6A15F02E3 _3ADC7B74022D3DE6A15F031F">
<ownedEnd xmi:id="_3ADC7B74022D3DE6A15F031F" type="_3ADC7B74022D3D51445B01FA" association="_3ADC7B74022D3DE6A15E0179">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_vUzdsVomEduDzLNvRu8ZxQ" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_vUzdsFomEduDzLNvRu8ZxQ"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3DE6A1820366" name="A_target_directedRelationship" memberEnd="_3ADC7B74022D3DE6A1830227 _3ADC7B74022D3DE6A1830277">
<ownedEnd xmi:id="_3ADC7B74022D3DE6A1830277" type="_3ADC7B74022D3D51445B01FA" association="_3ADC7B74022D3DE6A1820366">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_wM-b0VomEduDzLNvRu8ZxQ" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_wM-b0FomEduDzLNvRu8ZxQ"/>
</ownedEnd>
</packagedElement>
</packagedElement>
<packagedElement xmi:type="uml:Package" xmi:id="_3ADC7B74022D3D627A4F00CE" name="Changeabilities">
<packageImport xmi:id="_3ADC7B74022D3DE6A31202D5" importedPackage="_3ADC7B74022D3CAB68D00279"/>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3D627A6F0193" name="StructuralFeature" isAbstract="true">
<ownedComment xmi:id="_rYW85RTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3D627A6F0193">
<body>StructuralFeature has an attribute that determines whether a client may modify its value.</body>
</ownedComment>
<ownedAttribute xmi:id="_3ADC7B74022D3D627AFC009B" name="isReadOnly" type="_3ADC7B74022D3CA010AC0090">
<ownedComment xmi:id="_rYW86RTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3D627AFC009B">
<body>States whether the feature's value may be modified by a client.</body>
</ownedComment>
<defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_GcLIhBTbEdqZu-3Jy1-uYg"/>
</ownedAttribute>
</packagedElement>
</packagedElement>
<packagedElement xmi:type="uml:Package" xmi:id="_3ADC7B74022D3CAB68D00279" name="StructuralFeatures">
<packageImport xmi:id="_3ADC7B74022D3DE6A46C0124" importedPackage="_3ADC7B74022D3CA003360013"/>
<packageImport xmi:id="_3ADC7B74022D3E56169000F2" importedPackage="_3ADC7B74022D3E554B4A028B"/>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3CA00A410002" name="StructuralFeature" isAbstract="true">
<ownedComment xmi:id="_rYgt7RTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA00A410002">
<body>A structural feature is a typed feature of a classifier that specifies the structure of instances of the classifier.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3CA00C2E02A0" general="_3ADC7B74022D3CA00A3900A0"/>
<generalization xmi:id="_3ADC7B74022D3CA00C3A02A7" general="_3ADC7B74022D3CA00A3100E5"/>
</packagedElement>
</packagedElement>
<packagedElement xmi:type="uml:Package" xmi:id="_3ADC7B74022D3CA0307C0055" name="Constraints">
<packageImport xmi:id="_3ADC7B74022D3DE6A3AA003E" importedPackage="_3ADC7B74022D3CA00EE60015"/>
<packageImport xmi:id="_3ADC7B74022D3DE6C2A902E7" importedPackage="_3ADC7B74022D3CA002FD0120"/>
<packageImport xmi:id="_m_pwAD9HEdqjIv4r4xIGZw" importedPackage="_3ADC7B74022D3CA002E901AD"/>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3CA099F902D0" name="Constraint">
<ownedComment xmi:id="_rY8yxhTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA099F902D0">
<body>A constraint is a condition or restriction expressed in natural language text or in a machine readable language for the purpose of declaring some of the semantics of an element.</body>
</ownedComment>
<ownedRule xmi:id="_rY8yzxTaEdqZu-3Jy1-uYg" name="not_apply_to_self" constrainedElement="_3ADC7B74022D3CA099F902D0">
<ownedComment xmi:id="_rY8yyxTaEdqZu-3Jy1-uYg" annotatedElement="_rY8yzxTaEdqZu-3Jy1-uYg">
<body>A constraint cannot be applied to itself.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rY8y0BTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>not constrainedElement->includes(self)</body>
</specification>
</ownedRule>
<ownedRule xmi:id="_rZGjwxTaEdqZu-3Jy1-uYg" name="value_specification_boolean" constrainedElement="_3ADC7B74022D3CA099F902D0">
<ownedComment xmi:id="_rY8y1BTaEdqZu-3Jy1-uYg" annotatedElement="_rZGjwxTaEdqZu-3Jy1-uYg">
<body>The value specification for a constraint must evaluate to a Boolean value.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rZGjxBTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>self.specification().booleanValue().isOclKindOf(Boolean)</body>
</specification>
</ownedRule>
<generalization xmi:id="_3ADC7B74022D3DEE22390033" general="_3ADC7B74022D41B9EDB10307"/>
<ownedAttribute xmi:id="_3ADC7B74022D3CA0A17602EB" name="context" type="_3ADC7B74022D3CA0A069009F" subsettedProperty="_3ADC7B74022D41B9C1A000FD" association="_3ADC7B74022D3CA0A17600A6">
<ownedComment xmi:id="_rZZetRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA0A17602EB">
<body>The Namespace that owns this NamedElement.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rZjPsxTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rZjPshTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3CA0A4F60158" name="specification" type="_3ADC7B74022D3CA00F020323" aggregation="composite" subsettedProperty="_3ADC7B74022D3CADCD85009B" association="_3ADC7B74022D3CA0A4F5008F">
<ownedComment xmi:id="_rZjPthTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA0A4F60158">
<body>A condition that must be true when evaluated in order for the constraint to be satisfied.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rZjPuhTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rZjPuRTaEdqZu-3Jy1-uYg" value="1"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3CADD91701B2" name="constrainedElement" type="_3ADC7B74022D3CADCAEE0250" isOrdered="true" association="_3ADC7B74022D3CADD916037D">
<ownedComment xmi:id="_rZjPwBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CADD91701B2">
<body>The ordered set of Elements referenced by this Constraint.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rZjPxBTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rZjPwxTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3CA0A069009F" name="Namespace" isAbstract="true">
<ownedComment xmi:id="_rZGjyBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA0A069009F">
<body>A namespace can own constraints. A constraint associated with a namespace may either apply to the namespace itself, or it may apply to elements in the namespace.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D41B085CF035A" general="_3ADC7B74022D41B9EDB10307"/>
<ownedAttribute xmi:id="_3ADC7B74022D3CA0A17602E1" name="ownedRule" type="_3ADC7B74022D3CA099F902D0" aggregation="composite" subsettedProperty="_3ADC7B74022D41B9C1A000D5" association="_3ADC7B74022D3CA0A17600A6">
<ownedComment xmi:id="_rZQUwhTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA0A17602E1">
<body>Specifies a set of Constraints owned by this Namespace.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rZZesxTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rZZeshTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D41B9C1A000D5" name="ownedMember" type="_3ADC7B74022D41B9EDB10307" isReadOnly="true" isDerived="true" isDerivedUnion="true" aggregation="composite" subsettedProperty="_3ADC7B74022D3CADCD85009B _3ADC7B74022D41B9EF3300FA" association="_3ADC7B74022D41B9C19E0263">
<ownedComment xmi:id="_rZtAshTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D41B9C1A000D5">
<body>A collection of NamedElements owned by the Namespace.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rZtAthTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rZtAtRTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D41B9EF3300FA" name="member" type="_3ADC7B74022D41B9EDB10307" isReadOnly="true" isDerived="true" isDerivedUnion="true" association="_3ADC7B74022D41B9EF2F0270">
<ownedComment xmi:id="_rZ2KqBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D41B9EF3300FA">
<body>A collection of NamedElements identifiable within the Namespace, either by being owned or by being introduced by importing or inheritance.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rZ2KrBTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rZ2KqxTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D41B9EDB10307" name="NamedElement" isAbstract="true">
<ownedComment xmi:id="_rZGjzRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D41B9EDB10307">
<body>A named element is an element in a model that may have a name.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D41B9EE51018B" general="_3ADC7B74022D3CADCAEE0250"/>
<ownedAttribute xmi:id="_3ADC7B74022D41B9C1A000FD" name="namespace" type="_3ADC7B74022D3CA0A069009F" isReadOnly="true" isDerived="true" isDerivedUnion="true" subsettedProperty="_3ADC7B74022D3CADCD8500A5" association="_3ADC7B74022D41B9C19E0263">
<ownedComment xmi:id="_rZtAuhTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D41B9C1A000FD">
<body>Specifies the namespace that owns the NamedElement.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rZ2KoxTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rZ2KohTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3CA0A17600A6" name="A_ownedRule_context" memberEnd="_3ADC7B74022D3CA0A17602E1 _3ADC7B74022D3CA0A17602EB"/>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3CA0A4F5008F" name="A_specification_owningConstraint" memberEnd="_3ADC7B74022D3CA0A4F60158 _3ADC7B74022D3CA0A4F6019E">
<ownedEnd xmi:id="_3ADC7B74022D3CA0A4F6019E" name="owningConstraint" type="_3ADC7B74022D3CA099F902D0" subsettedProperty="_3ADC7B74022D3CADCD8500A5" association="_3ADC7B74022D3CA0A4F5008F">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rZjPvRTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rZjPvBTaEdqZu-3Jy1-uYg"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3CADD916037D" name="A_constrainedElement_constraint" memberEnd="_3ADC7B74022D3CADD91701B2 _3ADC7B74022D3CADD9170216">
<ownedEnd xmi:id="_3ADC7B74022D3CADD9170216" type="_3ADC7B74022D3CA099F902D0" association="_3ADC7B74022D3CADD916037D">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_sFuZ8VojEduDzLNvRu8ZxQ" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_sFuZ8FojEduDzLNvRu8ZxQ"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D41B9C19E0263" name="A_ownedMember_namespace" memberEnd="_3ADC7B74022D41B9C1A000D5 _3ADC7B74022D41B9C1A000FD"/>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D41B9EF2F0270" name="A_member_namespace" memberEnd="_3ADC7B74022D41B9EF3300FA _3ADC7B74022D41B9EF330104">
<ownedEnd xmi:id="_3ADC7B74022D41B9EF330104" type="_3ADC7B74022D3CA0A069009F" association="_3ADC7B74022D41B9EF2F0270">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_vlsgwVojEduDzLNvRu8ZxQ" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_vlsgwFojEduDzLNvRu8ZxQ"/>
</ownedEnd>
</packagedElement>
</packagedElement>
<packagedElement xmi:type="uml:Package" xmi:id="_3ADC7B74022D3CAD9E020290" name="Visibilities">
<packageImport xmi:id="_3ADC7B74022D3DE6A47D0128" importedPackage="_3ADC7B74022D3CA002FD0120"/>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3CADB30F028F" name="NamedElement" isAbstract="true">
<ownedComment xmi:id="_raS2mxTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CADB30F028F">
<body>NamedElement has a visibility attribute.</body>
</ownedComment>
<ownedRule xmi:id="_raS2oxTaEdqZu-3Jy1-uYg" name="visibility_needs_ownership" constrainedElement="_3ADC7B74022D3CADB30F028F">
<ownedComment xmi:id="_raS2nxTaEdqZu-3Jy1-uYg" annotatedElement="_raS2oxTaEdqZu-3Jy1-uYg">
<body>If a NamedElement is not owned by a Namespace, it does not have a visibility.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="_raS2pBTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>namespace->isEmpty() implies visibility->isEmpty()</body>
</specification>
</ownedRule>
<ownedAttribute xmi:id="_3ADC7B74022D3CADC5B702BE" name="visibility" type="_3ADC7B74022D3CAD9E0F01D0">
<ownedComment xmi:id="_raS2qBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CADC5B702BE">
<body>Determines where the NamedElement appears within different Namespaces within the overall model, and its accessibility.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_racnkxTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_racnkhTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Enumeration" xmi:id="_3ADC7B74022D3CAD9E0F01D0" name="VisibilityKind" visibility="private">
<ownedComment xmi:id="_raJsoRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CAD9E0F01D0">
<body>VisibilityKind is an enumeration type that defines literals to determine the visibility of elements in a model.</body>
</ownedComment>
<ownedOperation xmi:id="_3ADC7B74022D3E107BB80139" name="bestVisibility" isQuery="true" bodyCondition="_raJsqhTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_raJspRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E107BB80139">
<body>The query bestVisibility() examines a set of VisibilityKinds, and returns public as the preferred visibility.</body>
</ownedComment>
<ownedRule xmi:id="_raJsqhTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E107BB80139">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_raJsqxTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = if vis->includes(#public) then #public else #private endif</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_raJsqBTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CAD9E0F01D0" direction="return"/>
<ownedParameter xmi:id="_3ADC7B74022D42EE305C00E5" name="vis" type="_3ADC7B74022D3CAD9E0F01D0">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_GceDcRTbEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_GceDcBTbEdqZu-3Jy1-uYg"/>
</ownedParameter>
</ownedOperation>
<ownedLiteral xmi:id="_3ADC7B74022D3CAD9EB900BC" name="public">
<ownedComment xmi:id="_raJsrxTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CAD9EB900BC">
<body>A public element is visible to all elements that can access the contents of the namespace that owns it.</body>
</ownedComment>
</ownedLiteral>
<ownedLiteral xmi:id="_3ADC7B74022D3CAD9EBB02C8" name="private">
<ownedComment xmi:id="_raJssxTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CAD9EBB02C8">
<body>A private element is only visible inside the namespace that owns it.</body>
</ownedComment>
</ownedLiteral>
<ownedLiteral xmi:id="_3ADC7B74022D430C9A15005A" name="protected">
<ownedComment xmi:id="_raS2kxTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D430C9A15005A">
<body>A protected element is visible to elements that have a generalization relationship to the namespace that owns it.</body>
</ownedComment>
</ownedLiteral>
<ownedLiteral xmi:id="_3ADC7B74022D430C9A40019D" name="package">
<ownedComment xmi:id="_raS2lxTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D430C9A40019D">
<body>A package element is owned by a namespace that is not a package, and is visible to elements that are in the same package as its owning namespace. Only named elements that are not owned by packages can be marked as having package visibility. Any element marked as having package visibility is visible to all elements within the nearest enclosing package (given that other owning elements have proper visibility). Outside the nearest enclosing package, an element marked as having package visibility is not visible.</body>
</ownedComment>
</ownedLiteral>
</packagedElement>
</packagedElement>
<packagedElement xmi:type="uml:Package" xmi:id="_3ADC7B74022D3DF65990033B" name="Super">
<packageImport xmi:id="_3ADC7B74022D3DF6632E020F" importedPackage="_3ADC7B74022D3CA003360013"/>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3DF659AC02FF" name="Classifier" isAbstract="true">
<ownedComment xmi:id="_ralxhBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DF659AC02FF">
<body>A classifier can specify a generalization hierarchy by referencing its general classifiers.</body>
</ownedComment>
<ownedRule xmi:id="_ralxjRTaEdqZu-3Jy1-uYg" name="no_cycles_in_generalization" constrainedElement="_3ADC7B74022D3DF659AC02FF">
<ownedComment xmi:id="_ralxiRTaEdqZu-3Jy1-uYg" annotatedElement="_ralxjRTaEdqZu-3Jy1-uYg">
<body>Generalization hierarchies must be directed and acyclical. A classifier can not be both a transitively general and transitively specific classifier of the same classifier.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="_ralxjhTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>not self.allParents()->includes(self)</body>
</specification>
</ownedRule>
<ownedRule xmi:id="_ralxlhTaEdqZu-3Jy1-uYg" name="specialize_type" constrainedElement="_3ADC7B74022D3DF659AC02FF">
<ownedComment xmi:id="_ralxkhTaEdqZu-3Jy1-uYg" annotatedElement="_ralxlhTaEdqZu-3Jy1-uYg">
<body>A classifier may only specialize classifiers of a valid type.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="_ralxlxTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>self.parents()->forAll(c | self.maySpecializeType(c))</body>
</specification>
</ownedRule>
<generalization xmi:id="_3ADC7B74022D41B085FE002C" general="_3ADC7B74022D3CA0072700FA"/>
<ownedAttribute xmi:id="_3ADC7B74022D3DF65AB001F5" name="isAbstract" type="_3ADC7B74022D3CA010AC0090">
<ownedComment xmi:id="_ra5TqxTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DF65AB001F5">
<body>If true, the Classifier does not provide a complete declaration and can typically not be instantiated. An abstract classifier is intended to be used by other classifiers e.g. as the target of general metarelationships or generalization relationships.</body>
</ownedComment>
<defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_GceDchTbEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3DF65A9D02E0" name="inheritedMember" type="_3ADC7B74022D3CA0071C02FD" isReadOnly="true" isDerived="true" subsettedProperty="_3ADC7B74022D3CA0098401B9" association="_3ADC7B74022D3DF65A9D02DE">
<ownedComment xmi:id="_rbCddhTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DF65A9D02E0">
<body>Specifies all elements inherited by this classifier from the general classifiers.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rbCdehTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rbCdeRTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3DF65ACD0034" name="general" type="_3ADC7B74022D3DF659AC02FF" association="_3ADC7B74022D3DF65ACA038D">
<ownedComment xmi:id="_rbCdfxTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DF65ACD0034">
<body>Specifies the more general classifiers in the generalization hierarchy for this Classifier.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rbCdgxTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rbCdghTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedOperation xmi:id="_3ADC7B74022D3E10722C00E4" name="inheritedMember" isQuery="true" bodyCondition="_raviiRTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_ravigxTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E10722C00E4">
<body>The inheritedMember association is derived by inheriting the inheritable members of the parents.</body>
</ownedComment>
<ownedRule xmi:id="_raviiRTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E10722C00E4 _3ADC7B74022D3DF65A9D02E0">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_raviihTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = self.inherit(self.parents()->collect(p | p.inheritableMembers(self))</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_ravihhTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA0071C02FD" direction="return">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_Gcn0cRTbEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_Gcn0cBTbEdqZu-3Jy1-uYg"/>
</ownedParameter>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E1072FF02E6" name="parents" isQuery="true" bodyCondition="_ravikhTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_ravijhTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E1072FF02E6">
<body>The query parents() gives all of the immediate ancestors of a generalized Classifier.</body>
</ownedComment>
<ownedRule xmi:id="_ravikhTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E1072FF02E6">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_ravikxTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = general</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_ravikRTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3DF659AC02FF" direction="return">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_Gcn0cxTbEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_Gcn0chTbEdqZu-3Jy1-uYg"/>
</ownedParameter>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E10734200DA" name="allParents" isQuery="true" bodyCondition="_ravimxTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_ravilxTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E10734200DA">
<body>The query allParents() gives all of the direct and indirect ancestors of a generalized Classifier.</body>
</ownedComment>
<ownedRule xmi:id="_ravimxTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E10734200DA">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_ravinBTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = self.parents()->union(self.parents()->collect(p | p.allParents())</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_ravimhTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3DF659AC02FF" direction="return">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_Gcn0dRTbEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_Gcn0dBTbEdqZu-3Jy1-uYg"/>
</ownedParameter>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E10738400DF" name="inheritableMembers" isQuery="true" precondition="_ra5ThBTaEdqZu-3Jy1-uYg" bodyCondition="_ra5ThhTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_ravioBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E10738400DF">
<body>The query inheritableMembers() gives all of the members of a classifier that may be inherited in one of its descendants, subject to whatever visibility restrictions apply.</body>
</ownedComment>
<ownedRule xmi:id="_ra5ThBTaEdqZu-3Jy1-uYg" constrainedElement="_3ADC7B74022D3E10738400DF">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_ra5ThRTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>c.allParents()->includes(self)</body>
</specification>
</ownedRule>
<ownedRule xmi:id="_ra5ThhTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E10738400DF">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_ra5ThxTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = member->select(m | c.hasVisibilityOf(m))</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_ra5TghTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA0071C02FD" direction="return">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_Gcn0dxTbEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_Gcn0dhTbEdqZu-3Jy1-uYg"/>
</ownedParameter>
<ownedParameter xmi:id="_3ADC7B74022D3E1073B9026C" name="c" type="_3ADC7B74022D3DF659AC02FF"/>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E10740603B7" name="hasVisibilityOf" isQuery="true" precondition="_ra5TkBTaEdqZu-3Jy1-uYg" bodyCondition="_ra5TkhTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_ra5TixTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E10740603B7">
<body>The query hasVisibilityOf() determines whether a named element is visible in the classifier. By default all are visible. It is only called when the argument is something owned by a parent.</body>
</ownedComment>
<ownedRule xmi:id="_ra5TkBTaEdqZu-3Jy1-uYg" constrainedElement="_3ADC7B74022D3E10740603B7">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_ra5TkRTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>self.allParents()->collect(c | c.member)->includes(n)</body>
</specification>
</ownedRule>
<ownedRule xmi:id="_ra5TkhTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E10740603B7">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_ra5TkxTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = if (self.inheritedMember->includes (n)) then (n.visibility &lt;> #private) else true</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_ra5TjhTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010AC0090" direction="return"/>
<ownedParameter xmi:id="_3ADC7B74022D42EE305C00FF" name="n" type="_3ADC7B74022D3CA0071C02FD"/>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E1074EF0344" name="inherit" isQuery="true" bodyCondition="_ra5TnBTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_ra5TlxTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E1074EF0344">
<body>The query inherit() defines how to inherit a set of elements. Here the operation is defined to inherit them all. It is intended to be redefined in circumstances where inheritance is affected by redefinition.</body>
</ownedComment>
<ownedRule xmi:id="_ra5TnBTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E1074EF0344">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_ra5TnRTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = inhs</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_ra5TmhTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA0071C02FD" direction="return">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_Gcw-YRTbEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_Gcw-YBTbEdqZu-3Jy1-uYg"/>
</ownedParameter>
<ownedParameter xmi:id="_3ADC7B74022D42EE305C0102" name="inhs" type="_3ADC7B74022D3CA0071C02FD">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_Gcw-YxTbEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_Gcw-YhTbEdqZu-3Jy1-uYg"/>
</ownedParameter>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E10770902B1" name="maySpecializeType" isQuery="true" bodyCondition="_ra5TphTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_ra5ToRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E10770902B1">
<body>The query maySpecializeType() determines whether this classifier may have a generalization relationship to classifiers of the specified type. By default a classifier may specialize classifiers of the same or a more general type. It is intended to be redefined by classifiers that have different specialization constraints.</body>
</ownedComment>
<ownedRule xmi:id="_ra5TphTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E10770902B1">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_ra5TpxTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = self.oclIsKindOf(c.oclType)</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_ra5TpBTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010AC0090" direction="return"/>
<ownedParameter xmi:id="_3ADC7B74022D42EE305C010A" name="c" type="_3ADC7B74022D3DF659AC02FF"/>
</ownedOperation>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3DF65A9D02DE" name="A_classifier_inheritedMember" memberEnd="_3ADC7B74022D3DF65A9D02DF _3ADC7B74022D3DF65A9D02E0">
<ownedEnd xmi:id="_3ADC7B74022D3DF65A9D02DF" type="_3ADC7B74022D3DF659AC02FF" association="_3ADC7B74022D3DF65A9D02DE">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_7A1nAVomEduDzLNvRu8ZxQ" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_7A1nAFomEduDzLNvRu8ZxQ"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3DF65ACA038D" name="A_general_classifier" memberEnd="_3ADC7B74022D3DF65ACD0034 _3ADC7B74022D3DF65ACD003E">
<ownedEnd xmi:id="_3ADC7B74022D3DF65ACD003E" type="_3ADC7B74022D3DF659AC02FF" association="_3ADC7B74022D3DF65ACA038D">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_5Qx-oVomEduDzLNvRu8ZxQ" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_5Qx-oFomEduDzLNvRu8ZxQ"/>
</ownedEnd>
</packagedElement>
</packagedElement>
<packagedElement xmi:type="uml:Package" xmi:id="_3ADC7B74022D3DF659EE021E" name="Literals">
<packageImport xmi:id="_3ADC7B74022D3DF663400034" importedPackage="_3ADC7B74022D3CA00EE60015"/>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3CB5A2FE03E5" name="LiteralBoolean">
<ownedComment xmi:id="_rbfJaxTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CB5A2FE03E5">
<body>A literal Boolean is a specification of a Boolean value.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3CB5A32B0118" general="_3ADC7B74022D3CB5A2060370"/>
<ownedAttribute xmi:id="_3ADC7B74022D3CB5A3110161" name="value" type="_3ADC7B74022D3CA010AC0090">
<ownedComment xmi:id="_rbo6chTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CB5A3110161">
<body>The specified Boolean value.</body>
</ownedComment>
<defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_YDXU8GgaEdqfYrlcy8iLFA" type="_3ADC7B74022D3CA010AC0090"/>
</ownedAttribute>
<ownedOperation xmi:id="_3ADC7B74022D3E1406E501AC" name="isComputable" isQuery="true" redefinedOperation="_3ADC7B74022D3E1402B00031" bodyCondition="_rbo6ZBTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rbo6YBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E1406E501AC">
<body>The query isComputable() is redefined to be true.</body>
</ownedComment>
<ownedRule xmi:id="_rbo6ZBTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E1406E501AC">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rbo6ZRTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = true</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rbo6YxTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010AC0090" direction="return"/>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E1407110029" name="booleanValue" isQuery="true" redefinedOperation="_3ADC7B74022D3E14030E0325" bodyCondition="_rbo6bRTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rbo6aRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E1407110029">
<body>The query booleanValue() gives the value.</body>
</ownedComment>
<ownedRule xmi:id="_rbo6bRTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E1407110029">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rbo6bhTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = value</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rbo6bBTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010AC0090" direction="return"/>
</ownedOperation>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3CB5A2720176" name="LiteralString">
<ownedComment xmi:id="_rbo6dhTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CB5A2720176">
<body>A literal string is a specification of a string value.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3CB5A2D101E1" general="_3ADC7B74022D3CB5A2060370"/>
<ownedAttribute xmi:id="_3ADC7B74022D3CB5A28802FF" name="value" type="_3ADC7B74022D3CA010B103C3">
<ownedComment xmi:id="_rbyEWhTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CB5A28802FF">
<body>The specified String value.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_g5BHAWgaEdqfYrlcy8iLFA" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_g5BHAGgaEdqfYrlcy8iLFA"/>
</ownedAttribute>
<ownedOperation xmi:id="_3ADC7B74022D3E1407FF0374" name="isComputable" isQuery="true" redefinedOperation="_3ADC7B74022D3E1402B00031" bodyCondition="_rbo6fxTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rbo6exTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E1407FF0374">
<body>The query isComputable() is redefined to be true.</body>
</ownedComment>
<ownedRule xmi:id="_rbo6fxTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E1407FF0374">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rbo6gBTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = true</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rbo6fhTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010AC0090" direction="return"/>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E140821003E" name="stringValue" isQuery="true" redefinedOperation="_3ADC7B74022D3E1403380299" bodyCondition="_rbyEVRTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rbyEURTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E140821003E">
<body>The query stringValue() gives the value.</body>
</ownedComment>
<ownedRule xmi:id="_rbyEVRTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E140821003E">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rbyEVhTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = value</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rbyEVBTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010B103C3" direction="return"/>
</ownedOperation>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3CB5A2060370" name="LiteralSpecification" isAbstract="true">
<ownedComment xmi:id="_rbyEXhTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CB5A2060370">
<body>A literal specification identifies a literal constant being modeled.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3CB5A2250324" general="_3ADC7B74022D3CA00F020323"/>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3CB5A29200D2" name="LiteralNull">
<ownedComment xmi:id="_rbyEYxTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CB5A29200D2">
<body>A literal null specifies the lack of a value.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3CB5A2D5010B" general="_3ADC7B74022D3CB5A2060370"/>
<ownedOperation xmi:id="_3ADC7B74022D3E1407B4000F" name="isComputable" isQuery="true" redefinedOperation="_3ADC7B74022D3E1402B00031" bodyCondition="_rb71UxTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rbyEaBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E1407B4000F">
<body>The query isComputable() is redefined to be true.</body>
</ownedComment>
<ownedRule xmi:id="_rb71UxTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E1407B4000F">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rb71VBTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = true</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rb71UhTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010AC0090" direction="return"/>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E1407D8029C" name="isNull" isQuery="true" redefinedOperation="_3ADC7B74022D3E1403A502BE" bodyCondition="_rb71XBTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rb71WBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E1407D8029C">
<body>The query isNull() returns true.</body>
</ownedComment>
<ownedRule xmi:id="_rb71XBTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E1407D8029C">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rb71XRTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = true</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rb71WxTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010AC0090" direction="return"/>
</ownedOperation>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3CB5A23B01F0" name="LiteralInteger">
<ownedComment xmi:id="_rb71YRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CB5A23B01F0">
<body>A literal integer is a specification of an integer value.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3CB5A2CC0144" general="_3ADC7B74022D3CB5A2060370"/>
<ownedAttribute xmi:id="_3ADC7B74022D3CB5A2640253" name="value" type="_3ADC7B74022D3CA010A4007B">
<ownedComment xmi:id="_rb71eBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CB5A2640253">
<body>The specified Integer value.</body>
</ownedComment>
<defaultValue xmi:type="uml:LiteralInteger" xmi:id="_dugS0GgaEdqfYrlcy8iLFA" type="_3ADC7B74022D3CA010A4007B"/>
</ownedAttribute>
<ownedOperation xmi:id="_3ADC7B74022D3E14074A00F3" name="isComputable" isQuery="true" redefinedOperation="_3ADC7B74022D3E1402B00031" bodyCondition="_rb71ahTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rb71ZhTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E14074A00F3">
<body>The query isComputable() is redefined to be true.</body>
</ownedComment>
<ownedRule xmi:id="_rb71ahTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E14074A00F3">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rb71axTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = true</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rb71aRTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010AC0090" direction="return"/>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E14077700E4" name="integerValue" isQuery="true" redefinedOperation="_3ADC7B74022D3E1402DE0204" bodyCondition="_rb71cxTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rb71bxTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E14077700E4">
<body>The query integerValue() gives the value.</body>
</ownedComment>
<ownedRule xmi:id="_rb71cxTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E14077700E4">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rb71dBTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = value</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rb71chTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010A4007B" direction="return"/>
</ownedOperation>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3DF664BD01AE" name="LiteralUnlimitedNatural">
<ownedComment xmi:id="_rcFmUxTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DF664BD01AE">
<body>A literal unlimited natural is a specification of an unlimited natural number.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3DF664D30228" general="_3ADC7B74022D3CB5A2060370"/>
<ownedAttribute xmi:id="_3ADC7B74022D3DF664DB022A" name="value" type="_3ADC7B74022D3DE6A93C0003">
<ownedComment xmi:id="_rcFmahTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DF664DB022A">
<body>The specified UnlimitedNatural value.</body>
</ownedComment>
<defaultValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_ntBxcGgaEdqfYrlcy8iLFA" type="_3ADC7B74022D3DE6A93C0003"/>
</ownedAttribute>
<ownedOperation xmi:id="_3ADC7B74022D3E140869018C" name="isComputable" isQuery="true" redefinedOperation="_3ADC7B74022D3E1402B00031" bodyCondition="_rcFmXBTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rcFmWBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E140869018C">
<body>The query isComputable() is redefined to be true.</body>
</ownedComment>
<ownedRule xmi:id="_rcFmXBTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E140869018C">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rcFmXRTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = true</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rcFmWxTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010AC0090" direction="return"/>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E14088F01CD" name="unlimitedValue" isQuery="true" redefinedOperation="_3ADC7B74022D3E140370027C" bodyCondition="_rcFmZRTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rcFmYRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E14088F01CD">
<body>The query unlimitedValue() gives the value.</body>
</ownedComment>
<ownedRule xmi:id="_rcFmZRTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E14088F01CD">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rcFmZhTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = value</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rcFmZBTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3DE6A93C0003" direction="return"/>
</ownedOperation>
</packagedElement>
</packagedElement>
<packagedElement xmi:type="uml:Package" xmi:id="_3ADC7B74022D3DF65C06026F" name="Multiplicities">
<packageImport xmi:id="_3ADC7B74022D3DE6A42501FE" importedPackage="_3ADC7B74022D3DF78B7503C0"/>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3DF65EC002AE" name="MultiplicityElement" isAbstract="true">
<ownedComment xmi:id="_rcOwSBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DF65EC002AE">
<body>A multiplicity is a definition of an inclusive interval of non-negative integers beginning with a lower bound and ending with a (possibly infinite) upper bound. A multiplicity element embeds this information to specify the allowable cardinalities for an instantiation of this element.</body>
</ownedComment>
<ownedRule xmi:id="_rciSSBTaEdqZu-3Jy1-uYg" name="upper_gt_0" constrainedElement="_3ADC7B74022D3DF65EC002AE">
<ownedComment xmi:id="_rciSRBTaEdqZu-3Jy1-uYg" annotatedElement="_rciSSBTaEdqZu-3Jy1-uYg">
<body>A multiplicity must define at least one valid cardinality that is greater than zero.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rciSSRTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>upperBound()->notEmpty() implies upperBound() > 0</body>
</specification>
</ownedRule>
<ownedRule xmi:id="_rciSURTaEdqZu-3Jy1-uYg" name="lower_ge_0" constrainedElement="_3ADC7B74022D3DF65EC002AE">
<ownedComment xmi:id="_rciSTRTaEdqZu-3Jy1-uYg" annotatedElement="_rciSURTaEdqZu-3Jy1-uYg">
<body>The lower bound must be a non-negative integer literal.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rciSUhTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>lowerBound()->notEmpty() implies lowerBound() >= 0</body>
</specification>
</ownedRule>
<ownedRule xmi:id="_rcrcMxTaEdqZu-3Jy1-uYg" name="upper_ge_lower" constrainedElement="_3ADC7B74022D3DF65EC002AE">
<ownedComment xmi:id="_rciSVhTaEdqZu-3Jy1-uYg" annotatedElement="_rcrcMxTaEdqZu-3Jy1-uYg">
<body>The upper bound must be greater than or equal to the lower bound.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rcrcNBTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>(upperBound()->notEmpty() and lowerBound()->notEmpty()) implies upperBound() >= lowerBound()</body>
</specification>
</ownedRule>
<generalization xmi:id="_3ADC7B74022D3DF65ED2003D" general="_3ADC7B74022D3DF78BA701E1"/>
<ownedAttribute xmi:id="_3ADC7B74022D3DF65ED50222" name="isOrdered" type="_3ADC7B74022D3CA010AC0090">
<ownedComment xmi:id="_rcrcOBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DF65ED50222">
<body>For a multivalued multiplicity, this attribute specifies whether the values in an instantiation of this element are sequentially ordered.</body>
</ownedComment>
<defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_Gc6vYBTbEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3DF78C0F008C" name="isUnique" type="_3ADC7B74022D3CA010AC0090">
<ownedComment xmi:id="_rcrcPRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DF78C0F008C">
<body>For a multivalued multiplicity, this attributes specifies whether the values in an instantiation of this element are unique.</body>
</ownedComment>
<defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_Gc6vYRTbEdqZu-3Jy1-uYg" value="true"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3DF78C160227" name="lower" type="_3ADC7B74022D3CA010A4007B">
<ownedComment xmi:id="_rcrcQhTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DF78C160227">
<body>Specifies the lower bound of the multiplicity interval.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rcrcRhTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rcrcRRTaEdqZu-3Jy1-uYg"/>
<defaultValue xmi:type="uml:LiteralInteger" xmi:id="_Gc6vYhTbEdqZu-3Jy1-uYg" value="1"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3DF78C21006A" name="upper" type="_3ADC7B74022D3DE6A93C0003">
<ownedComment xmi:id="_rcrcSRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DF78C21006A">
<body>Specifies the upper bound of the multiplicity interval.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rcrcTRTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rcrcTBTaEdqZu-3Jy1-uYg"/>
<defaultValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_Gc6vYxTbEdqZu-3Jy1-uYg" value="1"/>
</ownedAttribute>
<ownedOperation xmi:id="_3ADC7B74022D3E105FFF0120" name="lowerBound" isQuery="true" bodyCondition="_rcYhQxTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rcOwTRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E105FFF0120">
<body>The query lowerBound() returns the lower bound of the multiplicity as an integer.</body>
</ownedComment>
<ownedRule xmi:id="_rcYhQxTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E105FFF0120">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rcYhRBTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = if lower->notEmpty() then lower else 1 endif</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rcYhQhTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010A4007B" direction="return"/>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E10604500E4" name="upperBound" isQuery="true" bodyCondition="_rcYhTBTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rcYhSBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E10604500E4">
<body>The query upperBound() returns the upper bound of the multiplicity for a bounded multiplicity as an unlimited natural.</body>
</ownedComment>
<ownedRule xmi:id="_rcYhTBTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E10604500E4">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rcYhTRTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = if upper->notEmpty() then upper else 1 endif</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rcYhSxTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3DE6A93C0003" direction="return"/>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E1060A900DE" name="isMultivalued" isQuery="true" precondition="_rcYhVRTaEdqZu-3Jy1-uYg" bodyCondition="_rcYhVxTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rcYhURTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E1060A900DE">
<body>The query isMultivalued() checks whether this multiplicity has an upper bound greater than one.</body>
</ownedComment>
<ownedRule xmi:id="_rcYhVRTaEdqZu-3Jy1-uYg" constrainedElement="_3ADC7B74022D3E1060A900DE">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rcYhVhTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>upperBound()->notEmpty()</body>
</specification>
</ownedRule>
<ownedRule xmi:id="_rcYhVxTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E1060A900DE">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rcYhWBTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = upperBound() > 1</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rcYhVBTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010AC0090" direction="return"/>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E1060D80399" name="includesCardinality" isQuery="true" precondition="_rcYhYRTaEdqZu-3Jy1-uYg" bodyCondition="_rcYhYxTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rcYhXBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E1060D80399">
<body>The query includesCardinality() checks whether the specified cardinality is valid for this multiplicity.</body>
</ownedComment>
<ownedRule xmi:id="_rcYhYRTaEdqZu-3Jy1-uYg" constrainedElement="_3ADC7B74022D3E1060D80399">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rcYhYhTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>upperBound()->notEmpty() and lowerBound()->notEmpty()&#xA;includesCardinality = (lowerBound() &lt;= C) and (upperBound() >= C)&#xA;</body>
</specification>
</ownedRule>
<ownedRule xmi:id="_rcYhYxTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E1060D80399">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rcYhZBTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = (lowerBound() &lt;= C) and (upperBound() >= C)</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rcYhXxTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010AC0090" direction="return"/>
<ownedParameter xmi:id="_3ADC7B74022D3E1060FD0360" name="C" type="_3ADC7B74022D3CA010A4007B"/>
</ownedOperation>
<ownedOperation xmi:id="_3ADC7B74022D3E10616C00C0" name="includesMultiplicity" isQuery="true" precondition="_rcYhbRTaEdqZu-3Jy1-uYg" bodyCondition="_rcYhbxTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rcYhaBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E10616C00C0">
<body>The query includesMultiplicity() checks whether this multiplicity includes all the cardinalities allowed by the specified multiplicity.</body>
</ownedComment>
<ownedRule xmi:id="_rcYhbRTaEdqZu-3Jy1-uYg" constrainedElement="_3ADC7B74022D3E10616C00C0">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rcYhbhTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>self.upperBound()->notEmpty() and self.lowerBound()->notEmpty() and M.upperBound()->notEmpty() and M.lowerBound()->notEmpty()</body>
</specification>
</ownedRule>
<ownedRule xmi:id="_rcYhbxTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E10616C00C0">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rciSQBTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = (self.lowerBound() &lt;= M.lowerBound()) and (self.upperBound() >= M.upperBound())</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rcYhaxTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010AC0090" direction="return"/>
<ownedParameter xmi:id="_3ADC7B74022D3E10618E0250" name="M" type="_3ADC7B74022D416D57E502DA"/>
</ownedOperation>
</packagedElement>
</packagedElement>
<packagedElement xmi:type="uml:Package" xmi:id="_3ADC7B74022D3DF78B7503C0" name="Elements">
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3DF78BA701E1" name="Element" isAbstract="true">
<ownedComment xmi:id="_rc-XJBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DF78BA701E1">
<body>An element is a constituent of a model.</body>
</ownedComment>
</packagedElement>
</packagedElement>
<packagedElement xmi:type="uml:Package" xmi:id="_3ADC7B74022D3E554B4A028B" name="TypedElements">
<packageImport xmi:id="_3ADC7B74022D3E554EDC0181" importedPackage="_3ADC7B74022D3CA002FD0120"/>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3E554AF2005E" name="Type" isAbstract="true">
<ownedComment xmi:id="_rdR5JBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E554AF2005E">
<body>A type constrains the values represented by a typed element.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3E554C9B01B3" general="_3ADC7B74022D3CA0071C02FD"/>
<ownedOperation xmi:id="_3ADC7B74022D3E554FFD0353" name="conformsTo" isQuery="true" bodyCondition="_rdR5LhTaEdqZu-3Jy1-uYg">
<ownedComment xmi:id="_rdR5KRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3E554FFD0353">
<body>The query conformsTo() gives true for a type that conforms to another. By default, two types do not conform to each other. This query is intended to be redefined for specific conformance situations.</body>
</ownedComment>
<ownedRule xmi:id="_rdR5LhTaEdqZu-3Jy1-uYg" name="spec" constrainedElement="_3ADC7B74022D3E554FFD0353">
<specification xmi:type="uml:OpaqueExpression" xmi:id="_rdR5LxTaEdqZu-3Jy1-uYg">
<language>OCL</language>
<body>result = false</body>
</specification>
</ownedRule>
<ownedParameter xmi:id="_rdR5LBTaEdqZu-3Jy1-uYg" type="_3ADC7B74022D3CA010AC0090" direction="return"/>
<ownedParameter xmi:id="_3ADC7B74022D42EE305C0113" name="other" type="_3ADC7B74022D3E554AF2005E"/>
</ownedOperation>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3CA00A3100E5" name="TypedElement" isAbstract="true">
<ownedComment xmi:id="_rdR5MxTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA00A3100E5">
<body>A typed element has a type.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3E554DC00381" general="_3ADC7B74022D3CA0071C02FD"/>
<ownedAttribute xmi:id="_3ADC7B74022D3CA00B360130" name="type" type="_3ADC7B74022D3E554AF2005E" association="_3ADC7B74022D3CA00B35031A">
<ownedComment xmi:id="_rdR5ORTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA00B360130">
<body>The type of the TypedElement.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rdbDExTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rdbDEhTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="_3ADC7B74022D3CA00B35031A" name="A_type_typedElement" memberEnd="_3ADC7B74022D3CA00B360130 _3ADC7B74022D3CA00B36013A">
<ownedEnd xmi:id="_3ADC7B74022D3CA00B36013A" type="_3ADC7B74022D3CA00A3100E5" association="_3ADC7B74022D3CA00B35031A">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_EnqXUVonEduDzLNvRu8ZxQ" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_EnqXUFonEduDzLNvRu8ZxQ"/>
</ownedEnd>
</packagedElement>
</packagedElement>
</packagedElement>
<packagedElement xmi:type="uml:Package" xmi:id="_3ADC7B74022D3C9FFCC70354" name="PrimitiveTypes">
<packagedElement xmi:type="uml:PrimitiveType" xmi:id="_3ADC7B74022D3CA010A4007B" name="Integer" visibility="private">
<ownedComment xmi:id="_rdk0FBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA010A4007B">
<body>An integer is a primitive type representing integer values.</body>
</ownedComment>
</packagedElement>
<packagedElement xmi:type="uml:PrimitiveType" xmi:id="_3ADC7B74022D3CA010AC0090" name="Boolean" visibility="private">
<ownedComment xmi:id="_rd3vARTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA010AC0090">
<body>A Boolean type is used for logical expression, consisting of the predefined values true and false.</body>
</ownedComment>
</packagedElement>
<packagedElement xmi:type="uml:PrimitiveType" xmi:id="_3ADC7B74022D3CA010B103C3" name="String" visibility="private">
<ownedComment xmi:id="_reBgAxTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3CA010B103C3">
<body>A string is a sequence of characters in some suitable character set used to display information about the model. Character sets may include non-Roman alphabets and characters.</body>
</ownedComment>
</packagedElement>
<packagedElement xmi:type="uml:PrimitiveType" xmi:id="_3ADC7B74022D3DE6A93C0003" name="UnlimitedNatural" visibility="private">
<ownedComment xmi:id="_reBgDRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DE6A93C0003">
<body>An unlimited natural is a primitive type representing unlimited natural values.</body>
</ownedComment>
</packagedElement>
</packagedElement>
<packagedElement xmi:type="uml:Package" xmi:id="_3ADC7B74022D3DE692A401F1" name="Basic">
<packageImport xmi:id="_3ADC7B74022D3DE78B4D02BB" importedPackage="_3ADC7B74022D3C9FFCC70354"/>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3DE6AB400163" name="Class">
<ownedComment xmi:id="_reeL8RTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DE6AB400163">
<body>A class is a type that has objects as its instances.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3DE6ABFA016B" general="_3ADC7B74022D3DE6A6CC00B0"/>
<ownedAttribute xmi:id="_3ADC7B74022D3DE6AC0203C5" name="isAbstract" type="_3ADC7B74022D3CA010AC0090">
<ownedComment xmi:id="_reeL9hTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DE6AC0203C5">
<body>True when a class is abstract.</body>
</ownedComment>
<defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_GdNqUBTbEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3DE6ACA0001F" name="ownedAttribute" type="_3ADC7B74022D3DE6AB4B0001" isOrdered="true" aggregation="composite" association="_3ADC7B74022D3DE6AC9F015E">
<ownedComment xmi:id="_rfgt1RTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DE6ACA0001F">
<body>The attributes owned by a class. These do not include the inherited attributes. Attributes are represented by instances of Property.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rfgt2RTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rfgt2BTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3DE6ADE30041" name="ownedOperation" type="_3ADC7B74022D3DE6AB440191" isOrdered="true" aggregation="composite" association="_3ADC7B74022D3DE6ADE20180">
<ownedComment xmi:id="_rfzothTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DE6ADE30041">
<body>The operations owned by a class. These do not include the inherited operations.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rfzouhTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rfzouRTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3DE6AE3D013B" name="superClass" type="_3ADC7B74022D3DE6AB400163" association="_3ADC7B74022D3DE6AE3B0279">
<ownedComment xmi:id="_rfzoxRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DE6AE3D013B">
<body>The immediate superclasses of a class, from which the class inherits.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rfzoyRTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rfzoyBTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3DE6AB440191" name="Operation">
<ownedComment xmi:id="_reeL-xTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DE6AB440191">
<body>An operation is owned by a class and may be invoked in the context of objects that are instances of that class. It is a typed element and a multiplicity element.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3E56126B029B" general="_3ADC7B74022D3DE6AA3D016B"/>
<generalization xmi:id="_3ADC7B74022D3E56126E03B7" general="_3ADC7B74022D416D57E502DA"/>
<ownedAttribute xmi:id="_3ADC7B74022D3DE6AD7B00F6" name="raisedException" type="_3ADC7B74022D3DE6A6CC00B0" association="_3ADC7B74022D3DE6AD7A004B">
<ownedComment xmi:id="_rfgtzRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DE6AD7B00F6">
<body>The exceptions that are declared as possible during an invocation of the operation.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rfgt0RTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rfgt0BTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3DE6AD8F022B" name="ownedParameter" type="_3ADC7B74022D3DE6AB5E035B" isOrdered="true" aggregation="composite" association="_3ADC7B74022D3DE6AD8E03A7">
<ownedComment xmi:id="_rfqe0BTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DE6AD8F022B">
<body>The parameters to the operation.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rfqe1BTaEdqZu-3Jy1-uYg" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rfqe0xTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3DE6ADE30056" name="class" type="_3ADC7B74022D3DE6AB400163" association="_3ADC7B74022D3DE6ADE20180">
<ownedComment xmi:id="_rfzovBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DE6ADE30056">
<body>The class that owns the operation.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rfzowBTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rfzovxTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3DE6AB5E035B" name="Parameter">
<ownedComment xmi:id="_renV4RTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DE6AB5E035B">
<body>A parameter is a typed element that represents a parameter of an operation.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3E56125A01BA" general="_3ADC7B74022D3DE6AA3D016B"/>
<generalization xmi:id="_3ADC7B74022D3E56125D02B9" general="_3ADC7B74022D416D57E502DA"/>
<ownedAttribute xmi:id="_3ADC7B74022D3DE6AD8F023F" name="operation" type="_3ADC7B74022D3DE6AB440191" association="_3ADC7B74022D3DE6AD8E03A7">
<ownedComment xmi:id="_rfqe1hTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DE6AD8F023F">
<body>The operation that owns the parameter.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rfzosxTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rfzoshTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3DE6AB4B0001" name="Property">
<ownedComment xmi:id="_renV5xTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DE6AB4B0001">
<body>A property is a typed element that represents an attribute of a class.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3DE6AC920169" general="_3ADC7B74022D3DE6AA3D016B"/>
<generalization xmi:id="_3ADC7B74022D3E56123A00E1" general="_3ADC7B74022D416D57E502DA"/>
<ownedAttribute xmi:id="_3ADC7B74022D3DE6AC2D00E2" name="isReadOnly" type="_3ADC7B74022D3CA010AC0090">
<ownedComment xmi:id="_renV7RTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DE6AC2D00E2">
<body>If isReadOnly is true, the attribute may not be written to after initialization.</body>
</ownedComment>
<defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_GdNqURTbEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3DE6AC4701DA" name="default" type="_3ADC7B74022D3CA010B103C3">
<ownedComment xmi:id="_renV8hTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DE6AC4701DA">
<body>A string that is evaluated to give a default value for the attribute when an object of the owning class is instantiated.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_renV9hTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_renV9RTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3DE6AC5A02DB" name="isComposite" type="_3ADC7B74022D3CA010AC0090">
<ownedComment xmi:id="_renV-BTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DE6AC5A02DB">
<body>If isComposite is true, the object containing the attribute is a container for the object or value contained in the attribute.</body>
</ownedComment>
<defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_GdXbUBTbEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3DE6AC630099" name="isDerived" type="_3ADC7B74022D3CA010AC0090">
<ownedComment xmi:id="_rexG4BTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DE6AC630099">
<body>If isDerived is true, the value of the attribute is derived from information elsewhere.</body>
</ownedComment>
<defaultValue xmi:type="uml:LiteralBoolean" xmi:id="_GdXbURTbEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3DE6ACA00029" name="class" type="_3ADC7B74022D3DE6AB400163" association="_3ADC7B74022D3DE6AC9F015E">
<ownedComment xmi:id="_rfgt2xTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DE6ACA00029">
<body>The class that owns the property, and of which the property is an attribute.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rfqewxTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rfqewhTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
<ownedAttribute xmi:id="_3ADC7B74022D3DE6AD01030E" name="opposite" type="_3ADC7B74022D3DE6AB4B0001" association="_3ADC7B74022D3DE6ACFF0224">
<ownedComment xmi:id="_rfqeyBTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DE6AD01030E">
<body>Two attributes attr1 and attr2 of two objects o1 and o2 (which may be the same object) may be paired with each other so that o1.attr1 refers to o2 if and only if o2.attr2 refers to o1. In such a case attr1 is the opposite of attr2 and attr2 is the opposite of attr1.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rfqezBTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rfqeyxTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3DE6A6CC00B0" name="Type" isAbstract="true">
<ownedComment xmi:id="_rexG5RTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DE6A6CC00B0">
<body>A type is a named element that is used as the type for a typed element. A type can be contained in a package.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3DE6AA6E01C5" general="_3ADC7B74022D3DE6A6B90257"/>
<ownedAttribute xmi:id="_3ADC7B74022D3DE6B0040398" name="package" type="_3ADC7B74022D3DE6AF3E02D5" association="_3ADC7B74022D3DE6B0040154">
<ownedComment xmi:id="_rgGjtRTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DE6B0040398">
<body>Specifies the owning package of this classifier, if any.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rgQUoxTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rgQUohTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3DE6A6B90257" name="NamedElement" isAbstract="true">
<ownedComment xmi:id="_rexG6hTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DE6A6B90257">
<body>A named element represents an element with a name.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3DF78D3B035F" general="_3ADC7B74022D416D58F70035"/>
<ownedAttribute xmi:id="_3ADC7B74022D3DE6A6EE0069" name="name" type="_3ADC7B74022D3CA010B103C3">
<ownedComment xmi:id="_rexG7xTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DE6A6EE0069">
<body>The name of the NamedElement.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rexG8xTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rexG8hTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3DE6AA3D016B" name="TypedElement" isAbstract="true">
<ownedComment xmi:id="_DR3QwBVsEdqDjccWl3Bw0Q" annotatedElement="_3ADC7B74022D3DE6AA3D016B">
<body>A typed element is a kind of named element that represents an element with a type.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3DE6AAB102B2" general="_3ADC7B74022D3DE6A6B90257"/>
<ownedAttribute xmi:id="_3ADC7B74022D3DE6AA7C03B0" name="type" type="_3ADC7B74022D3DE6A6CC00B0" association="_3ADC7B74022D3DE6AA7C00C1">
<ownedComment xmi:id="_rf9ZshTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DE6AA7C03B0">
<body>The type of the TypedElement.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_rf9ZthTaEdqZu-3Jy1-uYg" value="1"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="_rf9ZtRTaEdqZu-3Jy1-uYg"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="_3ADC7B74022D3DE6AE8B01AC" name="Enumeration">
<ownedComment xmi:id="_rexG9xTaEdqZu-3Jy1-uYg" annotatedElement="_3ADC7B74022D3DE6AE8B01AC">
<body>An enumeration defines a set of literals that can be used as its values.</body>
</ownedComment>
<generalization xmi:id="_3ADC7B74022D3DE6AEE30176" general="_3ADC7B74022D3DEE7F610363"/>
<ownedAttribute xmi:id="_3ADC7B74022D3DE6AF0702A4" name