blob: 88ab0ed87a13c5e3a122a881981369f76d3a21df [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<xmi:XMI xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.omg.org/spec/UML/20131001" xmlns:mofext="http://www.omg.org/spec/MOF/20131001">
<uml:Package xmi:type="uml:Package" xmi:id="_0" name="UML" URI="http://www.omg.org/spec/UML/20131001">
<packageImport xmi:type="uml:PackageImport" xmi:id="_packageImport.0">
<importedPackage href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#_0"/>
</packageImport>
<packageImport xmi:type="uml:PackageImport" xmi:id="_packageImport.1" importedPackage="Actions"/>
<packageImport xmi:type="uml:PackageImport" xmi:id="_packageImport.2" importedPackage="Activities"/>
<packageImport xmi:type="uml:PackageImport" xmi:id="_packageImport.3" importedPackage="Classification"/>
<packageImport xmi:type="uml:PackageImport" xmi:id="_packageImport.4" importedPackage="CommonBehavior"/>
<packageImport xmi:type="uml:PackageImport" xmi:id="_packageImport.5" importedPackage="CommonStructure"/>
<packageImport xmi:type="uml:PackageImport" xmi:id="_packageImport.6" importedPackage="Deployments"/>
<packageImport xmi:type="uml:PackageImport" xmi:id="_packageImport.7" importedPackage="InformationFlows"/>
<packageImport xmi:type="uml:PackageImport" xmi:id="_packageImport.8" importedPackage="Interactions"/>
<packageImport xmi:type="uml:PackageImport" xmi:id="_packageImport.9" importedPackage="Packages"/>
<packageImport xmi:type="uml:PackageImport" xmi:id="_packageImport.10" importedPackage="SimpleClassifiers"/>
<packageImport xmi:type="uml:PackageImport" xmi:id="_packageImport.11" importedPackage="StateMachines"/>
<packageImport xmi:type="uml:PackageImport" xmi:id="_packageImport.12" importedPackage="StructuredClassifiers"/>
<packageImport xmi:type="uml:PackageImport" xmi:id="_packageImport.13" importedPackage="UseCases"/>
<packageImport xmi:type="uml:PackageImport" xmi:id="_packageImport.14" importedPackage="Values"/>
<packagedElement xmi:type="uml:Package" xmi:id="Activities" name="Activities">
<packageImport xmi:type="uml:PackageImport" xmi:id="_packageImport.0" importedPackage="Actions"/>
<packageImport xmi:type="uml:PackageImport" xmi:id="_packageImport.1" importedPackage="Classification"/>
<packagedElement xmi:type="uml:Class" xmi:id="Activity" name="Activity">
<ownedComment xmi:type="uml:Comment" xmi:id="Activity-_ownedComment.0" annotatedElement="Activity">
<body>An Activity is the specification of parameterized Behavior as the coordinated sequencing of subordinate units.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="Activity-maximum_one_parameter_node" name="maximum_one_parameter_node" constrainedElement="Activity">
<ownedComment xmi:type="uml:Comment" xmi:id="Activity-maximum_one_parameter_node-_ownedComment.0" annotatedElement="Activity-maximum_one_parameter_node">
<body>A Parameter with direction other than inout must have exactly one ActivityParameterNode in an Activity.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="Activity-maximum_one_parameter_node-_specification">
<language>OCL</language>
<body>ownedParameter-&gt;forAll(p | &#xD;
p.direction &lt;&gt; ParameterDirectionKind::inout implies node-&gt;select(&#xD;
oclIsKindOf(ActivityParameterNode) and oclAsType(ActivityParameterNode).parameter = p)-&gt;size()= 1)</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="Activity-maximum_two_parameter_nodes" name="maximum_two_parameter_nodes" constrainedElement="Activity">
<ownedComment xmi:type="uml:Comment" xmi:id="Activity-maximum_two_parameter_nodes-_ownedComment.0" annotatedElement="Activity-maximum_two_parameter_nodes">
<body>A Parameter with direction inout must have exactly two ActivityParameterNodes in an Activity, at most one with incoming ActivityEdges and at most one with outgoing ActivityEdges.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="Activity-maximum_two_parameter_nodes-_specification">
<language>OCL</language>
<body>ownedParameter-&gt;forAll(p | &#xD;
p.direction = ParameterDirectionKind::inout implies&#xD;
let associatedNodes : Set(ActivityNode) = node-&gt;select(&#xD;
oclIsKindOf(ActivityParameterNode) and oclAsType(ActivityParameterNode).parameter = p) in &#xD;
associatedNodes-&gt;size()=2 and&#xD;
associatedNodes-&gt;select(incoming-&gt;notEmpty())-&gt;size()&lt;=1 and&#xD;
associatedNodes-&gt;select(outgoing-&gt;notEmpty())-&gt;size()&lt;=1&#xD;
)&#xD;
</body>
</specification>
</ownedRule>
<generalization xmi:type="uml:Generalization" xmi:id="Activity-_generalization.0" general="Behavior"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="Activity-edge" name="edge" type="ActivityEdge" aggregation="composite" subsettedProperty="Element-ownedElement" association="A_edge_activity">
<ownedComment xmi:type="uml:Comment" xmi:id="Activity-edge-_ownedComment.0" annotatedElement="Activity-edge">
<body>ActivityEdges expressing flow between the nodes of the Activity.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="Activity-edge-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="Activity-edge-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="Activity-group" name="group" type="ActivityGroup" aggregation="composite" subsettedProperty="Element-ownedElement" association="A_group_inActivity">
<ownedComment xmi:type="uml:Comment" xmi:id="Activity-group-_ownedComment.0" annotatedElement="Activity-group">
<body>Top-level ActivityGroups in the Activity.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="Activity-group-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="Activity-group-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="Activity-isReadOnly" name="isReadOnly">
<ownedComment xmi:type="uml:Comment" xmi:id="Activity-isReadOnly-_ownedComment.0" annotatedElement="Activity-isReadOnly">
<body>If true, this Activity must not make any changes to objects. The default is false (an Activity may make nonlocal changes). (This is an assertion, not an executable property. It may be used by an execution engine to optimize model execution. If the assertion is violated by the Activity, then the model is ill-formed.) </body>
</ownedComment>
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Boolean"/>
<defaultValue xmi:type="uml:LiteralBoolean" xmi:id="Activity-isReadOnly-_defaultValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="Activity-isSingleExecution" name="isSingleExecution">
<ownedComment xmi:type="uml:Comment" xmi:id="Activity-isSingleExecution-_ownedComment.0" annotatedElement="Activity-isSingleExecution">
<body>If true, all invocations of the Activity are handled by the same execution.</body>
</ownedComment>
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Boolean"/>
<defaultValue xmi:type="uml:LiteralBoolean" xmi:id="Activity-isSingleExecution-_defaultValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="Activity-node" name="node" type="ActivityNode" aggregation="composite" subsettedProperty="Element-ownedElement" association="A_node_activity">
<ownedComment xmi:type="uml:Comment" xmi:id="Activity-node-_ownedComment.0" annotatedElement="Activity-node">
<body>ActivityNodes coordinated by the Activity.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="Activity-node-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="Activity-node-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="Activity-partition" name="partition" type="ActivityPartition" subsettedProperty="Activity-group" association="A_partition_activity">
<ownedComment xmi:type="uml:Comment" xmi:id="Activity-partition-_ownedComment.0" annotatedElement="Activity-partition">
<body>Top-level ActivityPartitions in the Activity.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="Activity-partition-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="Activity-partition-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="Activity-structuredNode" name="structuredNode" type="StructuredActivityNode" aggregation="composite" subsettedProperty="Activity-group Activity-node" association="A_structuredNode_activity">
<ownedComment xmi:type="uml:Comment" xmi:id="Activity-structuredNode-_ownedComment.0" annotatedElement="Activity-structuredNode">
<body>Top-level StructuredActivityNodes in the Activity.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="Activity-structuredNode-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="Activity-structuredNode-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="Activity-variable" name="variable" type="Variable" aggregation="composite" subsettedProperty="Namespace-ownedMember" association="A_variable_activityScope">
<ownedComment xmi:type="uml:Comment" xmi:id="Activity-variable-_ownedComment.0" annotatedElement="Activity-variable">
<body>Top-level Variables defined by the Activity.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="Activity-variable-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="Activity-variable-_lowerValue"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="ActivityEdge" name="ActivityEdge" isAbstract="true">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityEdge-_ownedComment.0" annotatedElement="ActivityEdge">
<body>An ActivityEdge is an abstract class for directed connections between two ActivityNodes.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="ActivityEdge-source_and_target" name="source_and_target" constrainedElement="ActivityEdge">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityEdge-source_and_target-_ownedComment.0" annotatedElement="ActivityEdge-source_and_target">
<body>If an ActivityEdge is directly owned by an Activity, then its source and target must be directly or indirectly contained in the same Activity.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ActivityEdge-source_and_target-_specification">
<language>OCL</language>
<body>activity&lt;&gt;null implies source.containingActivity() = activity and target.containingActivity() = activity</body>
</specification>
</ownedRule>
<generalization xmi:type="uml:Generalization" xmi:id="ActivityEdge-_generalization.0" general="RedefinableElement"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityEdge-activity" name="activity" type="Activity" subsettedProperty="Element-owner" association="A_edge_activity">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityEdge-activity-_ownedComment.0" annotatedElement="ActivityEdge-activity">
<body>The Activity containing the ActivityEdge, if it is directly owned by an Activity.</body>
</ownedComment>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ActivityEdge-activity-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityEdge-guard" name="guard" type="ValueSpecification" aggregation="composite" subsettedProperty="Element-ownedElement" association="A_guard_activityEdge">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityEdge-guard-_ownedComment.0" annotatedElement="ActivityEdge-guard">
<body>A ValueSpecification that is evaluated to determine if a token can traverse the ActivityEdge. If an ActivityEdge has no guard, then there is no restriction on tokens traversing the edge.</body>
</ownedComment>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ActivityEdge-guard-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityEdge-inGroup" name="inGroup" type="ActivityGroup" isReadOnly="true" isDerived="true" isDerivedUnion="true" association="A_containedEdge_inGroup">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityEdge-inGroup-_ownedComment.0" annotatedElement="ActivityEdge-inGroup">
<body>ActivityGroups containing the ActivityEdge.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="ActivityEdge-inGroup-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ActivityEdge-inGroup-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityEdge-inPartition" name="inPartition" type="ActivityPartition" subsettedProperty="ActivityEdge-inGroup" association="A_edge_inPartition">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityEdge-inPartition-_ownedComment.0" annotatedElement="ActivityEdge-inPartition">
<body>ActivityPartitions containing the ActivityEdge.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="ActivityEdge-inPartition-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ActivityEdge-inPartition-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityEdge-inStructuredNode" name="inStructuredNode" type="StructuredActivityNode" subsettedProperty="ActivityEdge-inGroup Element-owner" association="A_edge_inStructuredNode">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityEdge-inStructuredNode-_ownedComment.0" annotatedElement="ActivityEdge-inStructuredNode">
<body>The StructuredActivityNode containing the ActivityEdge, if it is owned by a StructuredActivityNode.</body>
</ownedComment>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ActivityEdge-inStructuredNode-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityEdge-interrupts" name="interrupts" type="InterruptibleActivityRegion" association="A_interruptingEdge_interrupts">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityEdge-interrupts-_ownedComment.0" annotatedElement="ActivityEdge-interrupts">
<body>The InterruptibleActivityRegion for which this ActivityEdge is an interruptingEdge.</body>
</ownedComment>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ActivityEdge-interrupts-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityEdge-redefinedEdge" name="redefinedEdge" type="ActivityEdge" subsettedProperty="RedefinableElement-redefinedElement" association="A_redefinedEdge_activityEdge">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityEdge-redefinedEdge-_ownedComment.0" annotatedElement="ActivityEdge-redefinedEdge">
<body>ActivityEdges from a generalization of the Activity containing this ActivityEdge that are redefined by this ActivityEdge.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="ActivityEdge-redefinedEdge-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ActivityEdge-redefinedEdge-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityEdge-source" name="source" type="ActivityNode" association="A_outgoing_source_node">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityEdge-source-_ownedComment.0" annotatedElement="ActivityEdge-source">
<body>The ActivityNode from which tokens are taken when they traverse the ActivityEdge.</body>
</ownedComment>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityEdge-target" name="target" type="ActivityNode" association="A_incoming_target_node">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityEdge-target-_ownedComment.0" annotatedElement="ActivityEdge-target">
<body>The ActivityNode to which tokens are put when they traverse the ActivityEdge.</body>
</ownedComment>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityEdge-weight" name="weight" type="ValueSpecification" aggregation="composite" subsettedProperty="Element-ownedElement" association="A_weight_activityEdge">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityEdge-weight-_ownedComment.0" annotatedElement="ActivityEdge-weight">
<body>The minimum number of tokens that must traverse the ActivityEdge at the same time. If no weight is specified, this is equivalent to specifying a constant value of 1.</body>
</ownedComment>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ActivityEdge-weight-_lowerValue"/>
</ownedAttribute>
<ownedOperation xmi:type="uml:Operation" xmi:id="ActivityEdge-isConsistentWith" name="isConsistentWith" isQuery="true" redefinedOperation="RedefinableElement-isConsistentWith" bodyCondition="ActivityEdge-isConsistentWith-spec">
<ownedRule xmi:type="uml:Constraint" xmi:id="ActivityEdge-isConsistentWith-spec" name="spec" constrainedElement="ActivityEdge-isConsistentWith">
<specification xmi:type="uml:OpaqueExpression" xmi:id="ActivityEdge-isConsistentWith-spec-_specification">
<language>OCL</language>
<body>result = (redefiningElement.oclIsKindOf(ActivityEdge))</body>
</specification>
</ownedRule>
<ownedParameter xmi:type="uml:Parameter" xmi:id="ActivityEdge-isConsistentWith-result" name="result" direction="return">
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Boolean"/>
</ownedParameter>
<ownedParameter xmi:type="uml:Parameter" xmi:id="ActivityEdge-isConsistentWith-redefiningElement" name="redefiningElement" type="RedefinableElement"/>
</ownedOperation>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="ActivityFinalNode" name="ActivityFinalNode">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityFinalNode-_ownedComment.0" annotatedElement="ActivityFinalNode">
<body>An ActivityFinalNode is a FinalNode that terminates the execution of its owning Activity or StructuredActivityNode.</body>
</ownedComment>
<generalization xmi:type="uml:Generalization" xmi:id="ActivityFinalNode-_generalization.0" general="FinalNode"/>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="ActivityGroup" name="ActivityGroup" isAbstract="true">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityGroup-_ownedComment.0" annotatedElement="ActivityGroup">
<body>ActivityGroup is an abstract class for defining sets of ActivityNodes and ActivityEdges in an Activity.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="ActivityGroup-nodes_and_edges" name="nodes_and_edges" constrainedElement="ActivityGroup">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityGroup-nodes_and_edges-_ownedComment.0" annotatedElement="ActivityGroup-nodes_and_edges">
<body>All containedNodes and containeEdges of an ActivityGroup must be in the same Activity as the group.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ActivityGroup-nodes_and_edges-_specification">
<language>OCL</language>
<body>containedNode-&gt;forAll(activity = self.containingActivity()) and &#xD;
containedEdge-&gt;forAll(activity = self.containingActivity())</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="ActivityGroup-not_contained" name="not_contained" constrainedElement="ActivityGroup">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityGroup-not_contained-_ownedComment.0" annotatedElement="ActivityGroup-not_contained">
<body>No containedNode or containedEdge of an ActivityGroup may be contained by its subgroups or its superGroups, transitively.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ActivityGroup-not_contained-_specification">
<language>OCL</language>
<body>subgroup-&gt;closure(subgroup).containedNode-&gt;excludesAll(containedNode) and&#xD;
superGroup-&gt;closure(superGroup).containedNode-&gt;excludesAll(containedNode) and &#xD;
subgroup-&gt;closure(subgroup).containedEdge-&gt;excludesAll(containedEdge) and &#xD;
superGroup-&gt;closure(superGroup).containedEdge-&gt;excludesAll(containedEdge)</body>
</specification>
</ownedRule>
<generalization xmi:type="uml:Generalization" xmi:id="ActivityGroup-_generalization.0" general="NamedElement"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityGroup-containedEdge" name="containedEdge" type="ActivityEdge" isReadOnly="true" isDerived="true" isDerivedUnion="true" association="A_containedEdge_inGroup">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityGroup-containedEdge-_ownedComment.0" annotatedElement="ActivityGroup-containedEdge">
<body>ActivityEdges immediately contained in the ActivityGroup.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="ActivityGroup-containedEdge-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ActivityGroup-containedEdge-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityGroup-containedNode" name="containedNode" type="ActivityNode" isReadOnly="true" isDerived="true" isDerivedUnion="true" association="A_containedNode_inGroup">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityGroup-containedNode-_ownedComment.0" annotatedElement="ActivityGroup-containedNode">
<body>ActivityNodes immediately contained in the ActivityGroup.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="ActivityGroup-containedNode-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ActivityGroup-containedNode-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityGroup-inActivity" name="inActivity" type="Activity" subsettedProperty="Element-owner" association="A_group_inActivity">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityGroup-inActivity-_ownedComment.0" annotatedElement="ActivityGroup-inActivity">
<body>The Activity containing the ActivityGroup, if it is directly owned by an Activity.</body>
</ownedComment>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ActivityGroup-inActivity-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityGroup-subgroup" name="subgroup" type="ActivityGroup" isReadOnly="true" isDerived="true" isDerivedUnion="true" aggregation="composite" subsettedProperty="Element-ownedElement" association="A_subgroup_superGroup">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityGroup-subgroup-_ownedComment.0" annotatedElement="ActivityGroup-subgroup">
<body>Other ActivityGroups immediately contained in this ActivityGroup.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="ActivityGroup-subgroup-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ActivityGroup-subgroup-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityGroup-superGroup" name="superGroup" type="ActivityGroup" isReadOnly="true" isDerived="true" isDerivedUnion="true" subsettedProperty="Element-owner" association="A_subgroup_superGroup">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityGroup-superGroup-_ownedComment.0" annotatedElement="ActivityGroup-superGroup">
<body>The ActivityGroup immediately containing this ActivityGroup, if it is directly owned by another ActivityGroup.</body>
</ownedComment>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ActivityGroup-superGroup-_lowerValue"/>
</ownedAttribute>
<ownedOperation xmi:type="uml:Operation" xmi:id="ActivityGroup-containingActivity" name="containingActivity" isQuery="true" bodyCondition="ActivityGroup-containingActivity-spec">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityGroup-containingActivity-_ownedComment.0" annotatedElement="ActivityGroup-containingActivity">
<body>The Activity that directly or indirectly contains this ActivityGroup.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="ActivityGroup-containingActivity-spec" name="spec" constrainedElement="ActivityGroup-containingActivity">
<specification xmi:type="uml:OpaqueExpression" xmi:id="ActivityGroup-containingActivity-spec-_specification">
<language>OCL</language>
<body>result = (if superGroup&lt;&gt;null then superGroup.containingActivity()&#xD;
else inActivity&#xD;
endif)</body>
</specification>
</ownedRule>
<ownedParameter xmi:type="uml:Parameter" xmi:id="ActivityGroup-containingActivity-result" name="result" type="Activity" direction="return">
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ActivityGroup-containingActivity-result-_lowerValue"/>
</ownedParameter>
</ownedOperation>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="ActivityNode" name="ActivityNode" isAbstract="true">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityNode-_ownedComment.0" annotatedElement="ActivityNode">
<body>ActivityNode is an abstract class for points in the flow of an Activity connected by ActivityEdges.</body>
</ownedComment>
<generalization xmi:type="uml:Generalization" xmi:id="ActivityNode-_generalization.0" general="RedefinableElement"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityNode-activity" name="activity" type="Activity" subsettedProperty="Element-owner" association="A_node_activity">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityNode-activity-_ownedComment.0" annotatedElement="ActivityNode-activity">
<body>The Activity containing the ActivityNode, if it is directly owned by an Activity.</body>
</ownedComment>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ActivityNode-activity-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityNode-inGroup" name="inGroup" type="ActivityGroup" isReadOnly="true" isDerived="true" isDerivedUnion="true" association="A_containedNode_inGroup">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityNode-inGroup-_ownedComment.0" annotatedElement="ActivityNode-inGroup">
<body>ActivityGroups containing the ActivityNode.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="ActivityNode-inGroup-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ActivityNode-inGroup-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityNode-inInterruptibleRegion" name="inInterruptibleRegion" type="InterruptibleActivityRegion" subsettedProperty="ActivityNode-inGroup" association="A_inInterruptibleRegion_node">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityNode-inInterruptibleRegion-_ownedComment.0" annotatedElement="ActivityNode-inInterruptibleRegion">
<body>InterruptibleActivityRegions containing the ActivityNode.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="ActivityNode-inInterruptibleRegion-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ActivityNode-inInterruptibleRegion-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityNode-inPartition" name="inPartition" type="ActivityPartition" subsettedProperty="ActivityNode-inGroup" association="A_inPartition_node">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityNode-inPartition-_ownedComment.0" annotatedElement="ActivityNode-inPartition">
<body>ActivityPartitions containing the ActivityNode.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="ActivityNode-inPartition-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ActivityNode-inPartition-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityNode-inStructuredNode" name="inStructuredNode" type="StructuredActivityNode" subsettedProperty="ActivityNode-inGroup Element-owner" association="A_node_inStructuredNode">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityNode-inStructuredNode-_ownedComment.0" annotatedElement="ActivityNode-inStructuredNode">
<body>The StructuredActivityNode containing the ActvityNode, if it is directly owned by a StructuredActivityNode.</body>
</ownedComment>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ActivityNode-inStructuredNode-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityNode-incoming" name="incoming" type="ActivityEdge" association="A_incoming_target_node">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityNode-incoming-_ownedComment.0" annotatedElement="ActivityNode-incoming">
<body>ActivityEdges that have the ActivityNode as their target.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="ActivityNode-incoming-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ActivityNode-incoming-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityNode-outgoing" name="outgoing" type="ActivityEdge" association="A_outgoing_source_node">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityNode-outgoing-_ownedComment.0" annotatedElement="ActivityNode-outgoing">
<body>ActivityEdges that have the ActivityNode as their source.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="ActivityNode-outgoing-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ActivityNode-outgoing-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityNode-redefinedNode" name="redefinedNode" type="ActivityNode" subsettedProperty="RedefinableElement-redefinedElement" association="A_redefinedNode_activityNode">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityNode-redefinedNode-_ownedComment.0" annotatedElement="ActivityNode-redefinedNode">
<body>ActivityNodes from a generalization of the Activity containining this ActivityNode that are redefined by this ActivityNode.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="ActivityNode-redefinedNode-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ActivityNode-redefinedNode-_lowerValue"/>
</ownedAttribute>
<ownedOperation xmi:type="uml:Operation" xmi:id="ActivityNode-containingActivity" name="containingActivity" isQuery="true" bodyCondition="ActivityNode-containingActivity-spec">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityNode-containingActivity-_ownedComment.0" annotatedElement="ActivityNode-containingActivity">
<body>The Activity that directly or indirectly contains this ActivityNode.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="ActivityNode-containingActivity-spec" name="spec" constrainedElement="ActivityNode-containingActivity">
<specification xmi:type="uml:OpaqueExpression" xmi:id="ActivityNode-containingActivity-spec-_specification">
<language>OCL</language>
<body>result = (if inStructuredNode&lt;&gt;null then inStructuredNode.containingActivity()&#xD;
else activity&#xD;
endif)</body>
</specification>
</ownedRule>
<ownedParameter xmi:type="uml:Parameter" xmi:id="ActivityNode-containingActivity-result" name="result" type="Activity" direction="return">
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ActivityNode-containingActivity-result-_lowerValue"/>
</ownedParameter>
</ownedOperation>
<ownedOperation xmi:type="uml:Operation" xmi:id="ActivityNode-isConsistentWith" name="isConsistentWith" isQuery="true" redefinedOperation="RedefinableElement-isConsistentWith" bodyCondition="ActivityNode-isConsistentWith-spec">
<ownedRule xmi:type="uml:Constraint" xmi:id="ActivityNode-isConsistentWith-spec" name="spec" constrainedElement="ActivityNode-isConsistentWith">
<specification xmi:type="uml:OpaqueExpression" xmi:id="ActivityNode-isConsistentWith-spec-_specification">
<language>OCL</language>
<body>result = (redefiningElement.oclIsKindOf(ActivityNode))</body>
</specification>
</ownedRule>
<ownedParameter xmi:type="uml:Parameter" xmi:id="ActivityNode-isConsistentWith-result" name="result" direction="return">
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Boolean"/>
</ownedParameter>
<ownedParameter xmi:type="uml:Parameter" xmi:id="ActivityNode-isConsistentWith-redefiningElement" name="redefiningElement" type="RedefinableElement"/>
</ownedOperation>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="ActivityParameterNode" name="ActivityParameterNode">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityParameterNode-_ownedComment.0" annotatedElement="ActivityParameterNode">
<body>An ActivityParameterNode is an ObjectNode for accepting values from the input Parameters or providing values to the output Parameters of an Activity.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="ActivityParameterNode-no_outgoing_edges" name="no_outgoing_edges" constrainedElement="ActivityParameterNode">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityParameterNode-no_outgoing_edges-_ownedComment.0" annotatedElement="ActivityParameterNode-no_outgoing_edges">
<body>An ActivityParameterNode with no outgoing ActivityEdges and one or more incoming ActivityEdges must have a parameter with direction out, inout, or return.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ActivityParameterNode-no_outgoing_edges-_specification">
<language>OCL</language>
<body>(incoming-&gt;notEmpty() and outgoing-&gt;isEmpty()) implies &#xD;
(parameter.direction = ParameterDirectionKind::out or &#xD;
parameter.direction = ParameterDirectionKind::inout or &#xD;
parameter.direction = ParameterDirectionKind::return)</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="ActivityParameterNode-has_parameters" name="has_parameters" constrainedElement="ActivityParameterNode">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityParameterNode-has_parameters-_ownedComment.0" annotatedElement="ActivityParameterNode-has_parameters">
<body>The parameter of an ActivityParameterNode must be from the containing Activity.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ActivityParameterNode-has_parameters-_specification">
<language>OCL</language>
<body>activity.ownedParameter-&gt;includes(parameter)</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="ActivityParameterNode-same_type" name="same_type" constrainedElement="ActivityParameterNode">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityParameterNode-same_type-_ownedComment.0" annotatedElement="ActivityParameterNode-same_type">
<body>The type of an ActivityParameterNode is the same as the type of its parameter.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ActivityParameterNode-same_type-_specification">
<language>OCL</language>
<body>type = parameter.type</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="ActivityParameterNode-no_incoming_edges" name="no_incoming_edges" constrainedElement="ActivityParameterNode">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityParameterNode-no_incoming_edges-_ownedComment.0" annotatedElement="ActivityParameterNode-no_incoming_edges">
<body>An ActivityParameterNode with no incoming ActivityEdges and one or more outgoing ActivityEdges must have a parameter with direction in or inout.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ActivityParameterNode-no_incoming_edges-_specification">
<language>OCL</language>
<body>(outgoing-&gt;notEmpty() and incoming-&gt;isEmpty()) implies &#xD;
(parameter.direction = ParameterDirectionKind::_'in' or &#xD;
parameter.direction = ParameterDirectionKind::inout)</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="ActivityParameterNode-no_edges" name="no_edges" constrainedElement="ActivityParameterNode">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityParameterNode-no_edges-_ownedComment.0" annotatedElement="ActivityParameterNode-no_edges">
<body>An ActivityParameterNode may have all incoming ActivityEdges or all outgoing ActivityEdges, but it must not have both incoming and outgoing ActivityEdges.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ActivityParameterNode-no_edges-_specification">
<language>OCL</language>
<body>incoming-&gt;isEmpty() or outgoing-&gt;isEmpty()</body>
</specification>
</ownedRule>
<generalization xmi:type="uml:Generalization" xmi:id="ActivityParameterNode-_generalization.0" general="ObjectNode"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityParameterNode-parameter" name="parameter" type="Parameter" association="A_parameter_activityParameterNode">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityParameterNode-parameter-_ownedComment.0" annotatedElement="ActivityParameterNode-parameter">
<body>The Parameter for which the ActivityParameterNode will be accepting or providing values.</body>
</ownedComment>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="ActivityPartition" name="ActivityPartition">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityPartition-_ownedComment.0" annotatedElement="ActivityPartition">
<body>An ActivityPartition is a kind of ActivityGroup for identifying ActivityNodes that have some characteristic in common.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="ActivityPartition-represents_classifier" name="represents_classifier" constrainedElement="ActivityPartition">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityPartition-represents_classifier-_ownedComment.0" annotatedElement="ActivityPartition-represents_classifier">
<body>If a non-external ActivityPartition represents a Classifier and has a superPartition, then the superPartition must represent a Classifier, and the Classifier of the subpartition must be nested (nestedClassifier or ownedBehavior) in the Classifier represented by the superPartition, or be at the contained end of a composition Association with the Classifier represented by the superPartition.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ActivityPartition-represents_classifier-_specification">
<language>OCL</language>
<body>(not isExternal and represents.oclIsKindOf(Classifier) and superPartition-&gt;notEmpty()) implies&#xD;
(&#xD;
let representedClassifier : Classifier = represents.oclAsType(Classifier) in&#xD;
superPartition.represents.oclIsKindOf(Classifier) and&#xD;
let representedSuperClassifier : Classifier = superPartition.represents.oclAsType(Classifier) in&#xD;
(representedSuperClassifier.oclIsKindOf(BehavioredClassifier) and representedClassifier.oclIsKindOf(Behavior) and &#xD;
representedSuperClassifier.oclAsType(BehavioredClassifier).ownedBehavior-&gt;includes(representedClassifier.oclAsType(Behavior))) &#xD;
or&#xD;
(representedSuperClassifier.oclIsKindOf(Class) and representedSuperClassifier.oclAsType(Class).nestedClassifier-&gt;includes(representedClassifier))&#xD;
or&#xD;
(Association.allInstances()-&gt;exists(a | a.memberEnd-&gt;exists(end1 | end1.isComposite and end1.type = representedClassifier and &#xD;
a.memberEnd-&gt;exists(end2 | end1&lt;&gt;end2 and end2.type = representedSuperClassifier))))&#xD;
)</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="ActivityPartition-represents_property_and_is_contained" name="represents_property_and_is_contained" constrainedElement="ActivityPartition">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityPartition-represents_property_and_is_contained-_ownedComment.0" annotatedElement="ActivityPartition-represents_property_and_is_contained">
<body>If an ActivityPartition represents a Property and has a superPartition, then the Property must be of a Classifier represented by the superPartition, or of a Classifier that is the type of a Property represented by the superPartition.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ActivityPartition-represents_property_and_is_contained-_specification">
<language>OCL</language>
<body>(represents.oclIsKindOf(Property) and superPartition-&gt;notEmpty()) implies&#xD;
(&#xD;
(superPartition.represents.oclIsKindOf(Classifier) and represents.owner = superPartition.represents) or &#xD;
(superPartition.represents.oclIsKindOf(Property) and represents.owner = superPartition.represents.oclAsType(Property).type)&#xD;
)</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="ActivityPartition-represents_property" name="represents_property" constrainedElement="ActivityPartition">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityPartition-represents_property-_ownedComment.0" annotatedElement="ActivityPartition-represents_property">
<body>If an ActivityPartition represents a Property and has a superPartition representing a Classifier, then all the other non-external subpartitions of the superPartition must represent Properties directly owned by the same Classifier.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ActivityPartition-represents_property-_specification">
<language>OCL</language>
<body>(represents.oclIsKindOf(Property) and superPartition-&gt;notEmpty() and superPartition.represents.oclIsKindOf(Classifier)) implies&#xD;
(&#xD;
let representedClassifier : Classifier = superPartition.represents.oclAsType(Classifier)&#xD;
in&#xD;
superPartition.subpartition-&gt;reject(isExternal)-&gt;forAll(p | &#xD;
p.represents.oclIsKindOf(Property) and p.owner=representedClassifier)&#xD;
)</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="ActivityPartition-dimension_not_contained" name="dimension_not_contained" constrainedElement="ActivityPartition">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityPartition-dimension_not_contained-_ownedComment.0" annotatedElement="ActivityPartition-dimension_not_contained">
<body>An ActvivityPartition with isDimension = true may not be contained by another ActivityPartition.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ActivityPartition-dimension_not_contained-_specification">
<language>OCL</language>
<body>isDimension implies superPartition-&gt;isEmpty()</body>
</specification>
</ownedRule>
<generalization xmi:type="uml:Generalization" xmi:id="ActivityPartition-_generalization.0" general="ActivityGroup"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityPartition-edge" name="edge" type="ActivityEdge" subsettedProperty="ActivityGroup-containedEdge" association="A_edge_inPartition">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityPartition-edge-_ownedComment.0" annotatedElement="ActivityPartition-edge">
<body>ActivityEdges immediately contained in the ActivityPartition.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="ActivityPartition-edge-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ActivityPartition-edge-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityPartition-isDimension" name="isDimension">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityPartition-isDimension-_ownedComment.0" annotatedElement="ActivityPartition-isDimension">
<body>Indicates whether the ActivityPartition groups other ActivityPartitions along a dimension.</body>
</ownedComment>
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Boolean"/>
<defaultValue xmi:type="uml:LiteralBoolean" xmi:id="ActivityPartition-isDimension-_defaultValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityPartition-isExternal" name="isExternal">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityPartition-isExternal-_ownedComment.0" annotatedElement="ActivityPartition-isExternal">
<body>Indicates whether the ActivityPartition represents an entity to which the partitioning structure does not apply.</body>
</ownedComment>
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Boolean"/>
<defaultValue xmi:type="uml:LiteralBoolean" xmi:id="ActivityPartition-isExternal-_defaultValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityPartition-node" name="node" type="ActivityNode" subsettedProperty="ActivityGroup-containedNode" association="A_inPartition_node">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityPartition-node-_ownedComment.0" annotatedElement="ActivityPartition-node">
<body>ActivityNodes immediately contained in the ActivityPartition.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="ActivityPartition-node-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ActivityPartition-node-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityPartition-represents" name="represents" type="Element" association="A_represents_activityPartition">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityPartition-represents-_ownedComment.0" annotatedElement="ActivityPartition-represents">
<body>An Element represented by the functionality modeled within the ActivityPartition.</body>
</ownedComment>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ActivityPartition-represents-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityPartition-subpartition" name="subpartition" type="ActivityPartition" aggregation="composite" subsettedProperty="ActivityGroup-subgroup" association="A_subpartition_superPartition">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityPartition-subpartition-_ownedComment.0" annotatedElement="ActivityPartition-subpartition">
<body>Other ActivityPartitions immediately contained in this ActivityPartition (as its subgroups).</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="ActivityPartition-subpartition-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ActivityPartition-subpartition-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ActivityPartition-superPartition" name="superPartition" type="ActivityPartition" subsettedProperty="ActivityGroup-superGroup" association="A_subpartition_superPartition">
<ownedComment xmi:type="uml:Comment" xmi:id="ActivityPartition-superPartition-_ownedComment.0" annotatedElement="ActivityPartition-superPartition">
<body>Other ActivityPartitions immediately containing this ActivityPartition (as its superGroups).</body>
</ownedComment>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ActivityPartition-superPartition-_lowerValue"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="CentralBufferNode" name="CentralBufferNode">
<ownedComment xmi:type="uml:Comment" xmi:id="CentralBufferNode-_ownedComment.0" annotatedElement="CentralBufferNode">
<body>A CentralBufferNode is an ObjectNode for managing flows from multiple sources and targets.</body>
</ownedComment>
<generalization xmi:type="uml:Generalization" xmi:id="CentralBufferNode-_generalization.0" general="ObjectNode"/>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="ControlFlow" name="ControlFlow">
<ownedComment xmi:type="uml:Comment" xmi:id="ControlFlow-_ownedComment.0" annotatedElement="ControlFlow">
<body>A ControlFlow is an ActivityEdge traversed by control tokens or object tokens of control type, which are use to control the execution of ExecutableNodes.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="ControlFlow-object_nodes" name="object_nodes" constrainedElement="ControlFlow">
<ownedComment xmi:type="uml:Comment" xmi:id="ControlFlow-object_nodes-_ownedComment.0" annotatedElement="ControlFlow-object_nodes">
<body>ControlFlows may not have ObjectNodes at either end, except for ObjectNodes with control type.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ControlFlow-object_nodes-_specification">
<language>OCL</language>
<body>(source.oclIsKindOf(ObjectNode) implies source.oclAsType(ObjectNode).isControlType) and &#xD;
(target.oclIsKindOf(ObjectNode) implies target.oclAsType(ObjectNode).isControlType)</body>
</specification>
</ownedRule>
<generalization xmi:type="uml:Generalization" xmi:id="ControlFlow-_generalization.0" general="ActivityEdge"/>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="ControlNode" name="ControlNode" isAbstract="true">
<ownedComment xmi:type="uml:Comment" xmi:id="ControlNode-_ownedComment.0" annotatedElement="ControlNode">
<body>A ControlNode is an abstract ActivityNode that coordinates flows in an Activity.</body>
</ownedComment>
<generalization xmi:type="uml:Generalization" xmi:id="ControlNode-_generalization.0" general="ActivityNode"/>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="DataStoreNode" name="DataStoreNode">
<ownedComment xmi:type="uml:Comment" xmi:id="DataStoreNode-_ownedComment.0" annotatedElement="DataStoreNode">
<body>A DataStoreNode is a CentralBufferNode for persistent data.</body>
</ownedComment>
<generalization xmi:type="uml:Generalization" xmi:id="DataStoreNode-_generalization.0" general="CentralBufferNode"/>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="DecisionNode" name="DecisionNode">
<ownedComment xmi:type="uml:Comment" xmi:id="DecisionNode-_ownedComment.0" annotatedElement="DecisionNode">
<body>A DecisionNode is a ControlNode that chooses between outgoing ActivityEdges for the routing of tokens.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="DecisionNode-zero_input_parameters" name="zero_input_parameters" constrainedElement="DecisionNode">
<ownedComment xmi:type="uml:Comment" xmi:id="DecisionNode-zero_input_parameters-_ownedComment.0" annotatedElement="DecisionNode-zero_input_parameters">
<body>If the DecisionNode has no decisionInputFlow and an incoming ControlFlow, then any decisionInput Behavior has no in parameters.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="DecisionNode-zero_input_parameters-_specification">
<language>OCL</language>
<body>(decisionInput&lt;&gt;null and decisionInputFlow=null and incoming-&gt;exists(oclIsKindOf(ControlFlow))) implies&#xD;
decisionInput.inputParameters()-&gt;isEmpty()</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="DecisionNode-edges" name="edges" constrainedElement="DecisionNode">
<ownedComment xmi:type="uml:Comment" xmi:id="DecisionNode-edges-_ownedComment.0" annotatedElement="DecisionNode-edges">
<body>The ActivityEdges incoming to and outgoing from a DecisionNode, other than the decisionInputFlow (if any), must be either all ObjectFlows or all ControlFlows.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="DecisionNode-edges-_specification">
<language>OCL</language>
<body>let allEdges: Set(ActivityEdge) = incoming-&gt;union(outgoing) in&#xD;
let allRelevantEdges: Set(ActivityEdge) = if decisionInputFlow-&gt;notEmpty() then allEdges-&gt;excluding(decisionInputFlow) else allEdges endif in&#xD;
allRelevantEdges-&gt;forAll(oclIsKindOf(ControlFlow)) or allRelevantEdges-&gt;forAll(oclIsKindOf(ObjectFlow))&#xD;
</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="DecisionNode-decision_input_flow_incoming" name="decision_input_flow_incoming" constrainedElement="DecisionNode">
<ownedComment xmi:type="uml:Comment" xmi:id="DecisionNode-decision_input_flow_incoming-_ownedComment.0" annotatedElement="DecisionNode-decision_input_flow_incoming">
<body>The decisionInputFlow of a DecisionNode must be an incoming ActivityEdge of the DecisionNode.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="DecisionNode-decision_input_flow_incoming-_specification">
<language>OCL</language>
<body>incoming-&gt;includes(decisionInputFlow)</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="DecisionNode-two_input_parameters" name="two_input_parameters" constrainedElement="DecisionNode">
<ownedComment xmi:type="uml:Comment" xmi:id="DecisionNode-two_input_parameters-_ownedComment.0" annotatedElement="DecisionNode-two_input_parameters">
<body>If the DecisionNode has a decisionInputFlow and an second incoming ObjectFlow, then any decisionInput has two in Parameters, the first of which has a type that is the same as or a supertype of the type of object tokens offered on the non-decisionInputFlow and the second of which has a type that is the same as or a supertype of the type of object tokens offered on the decisionInputFlow.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="DecisionNode-two_input_parameters-_specification">
<language>OCL</language>
<body>(decisionInput&lt;&gt;null and decisionInputFlow&lt;&gt;null and incoming-&gt;forAll(oclIsKindOf(ObjectFlow))) implies&#xD;
decisionInput.inputParameters()-&gt;size()=2</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="DecisionNode-incoming_outgoing_edges" name="incoming_outgoing_edges" constrainedElement="DecisionNode">
<ownedComment xmi:type="uml:Comment" xmi:id="DecisionNode-incoming_outgoing_edges-_ownedComment.0" annotatedElement="DecisionNode-incoming_outgoing_edges">
<body>A DecisionNode has one or two incoming ActivityEdges and at least one outgoing ActivityEdge.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="DecisionNode-incoming_outgoing_edges-_specification">
<language>OCL</language>
<body>(incoming-&gt;size() = 1 or incoming-&gt;size() = 2) and outgoing-&gt;size() &gt; 0</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="DecisionNode-incoming_control_one_input_parameter" name="incoming_control_one_input_parameter" constrainedElement="DecisionNode">
<ownedComment xmi:type="uml:Comment" xmi:id="DecisionNode-incoming_control_one_input_parameter-_ownedComment.0" annotatedElement="DecisionNode-incoming_control_one_input_parameter">
<body>If the DecisionNode has a decisionInputFlow and an incoming ControlFlow, then any decisionInput Behavior has one in Parameter whose type is the same as or a supertype of the type of object tokens offered on the decisionInputFlow.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="DecisionNode-incoming_control_one_input_parameter-_specification">
<language>OCL</language>
<body>(decisionInput&lt;&gt;null and decisionInputFlow&lt;&gt;null and incoming-&gt;exists(oclIsKindOf(ControlFlow))) implies&#xD;
decisionInput.inputParameters()-&gt;size()=1</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="DecisionNode-parameters" name="parameters" constrainedElement="DecisionNode">
<ownedComment xmi:type="uml:Comment" xmi:id="DecisionNode-parameters-_ownedComment.0" annotatedElement="DecisionNode-parameters">
<body>A decisionInput Behavior has no out parameters, no inout parameters, and one return parameter.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="DecisionNode-parameters-_specification">
<language>OCL</language>
<body>decisionInput&lt;&gt;null implies &#xD;
(decisionInput.ownedParameter-&gt;forAll(par | &#xD;
par.direction &lt;&gt; ParameterDirectionKind::out and &#xD;
par.direction &lt;&gt; ParameterDirectionKind::inout ) and&#xD;
decisionInput.ownedParameter-&gt;one(par | &#xD;
par.direction &lt;&gt; ParameterDirectionKind::return))&#xD;
</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="DecisionNode-incoming_object_one_input_parameter" name="incoming_object_one_input_parameter" constrainedElement="DecisionNode">
<ownedComment xmi:type="uml:Comment" xmi:id="DecisionNode-incoming_object_one_input_parameter-_ownedComment.0" annotatedElement="DecisionNode-incoming_object_one_input_parameter">
<body>If the DecisionNode has no decisionInputFlow and an incoming ObjectFlow, then any decisionInput Behavior has one in Parameter whose type is the same as or a supertype of the type of object tokens offered on the incoming ObjectFlow.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="DecisionNode-incoming_object_one_input_parameter-_specification">
<language>OCL</language>
<body>(decisionInput&lt;&gt;null and decisionInputFlow=null and incoming-&gt;forAll(oclIsKindOf(ObjectFlow))) implies&#xD;
decisionInput.inputParameters()-&gt;size()=1</body>
</specification>
</ownedRule>
<generalization xmi:type="uml:Generalization" xmi:id="DecisionNode-_generalization.0" general="ControlNode"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="DecisionNode-decisionInput" name="decisionInput" type="Behavior" association="A_decisionInput_decisionNode">
<ownedComment xmi:type="uml:Comment" xmi:id="DecisionNode-decisionInput-_ownedComment.0" annotatedElement="DecisionNode-decisionInput">
<body>A Behavior that is executed to provide an input to guard ValueSpecifications on ActivityEdges outgoing from the DecisionNode.</body>
</ownedComment>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="DecisionNode-decisionInput-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="DecisionNode-decisionInputFlow" name="decisionInputFlow" type="ObjectFlow" association="A_decisionInputFlow_decisionNode">
<ownedComment xmi:type="uml:Comment" xmi:id="DecisionNode-decisionInputFlow-_ownedComment.0" annotatedElement="DecisionNode-decisionInputFlow">
<body>An additional ActivityEdge incoming to the DecisionNode that provides a decision input value for the guards ValueSpecifications on ActivityEdges outgoing from the DecisionNode.</body>
</ownedComment>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="DecisionNode-decisionInputFlow-_lowerValue"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="ExceptionHandler" name="ExceptionHandler">
<ownedComment xmi:type="uml:Comment" xmi:id="ExceptionHandler-_ownedComment.0" annotatedElement="ExceptionHandler">
<body>An ExceptionHandler is an Element that specifies a handlerBody ExecutableNode to execute in case the specified exception occurs during the execution of the protected ExecutableNode.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="ExceptionHandler-handler_body_edges" name="handler_body_edges" constrainedElement="ExceptionHandler">
<ownedComment xmi:type="uml:Comment" xmi:id="ExceptionHandler-handler_body_edges-_ownedComment.0" annotatedElement="ExceptionHandler-handler_body_edges">
<body>The handlerBody has no incoming or outgoing ActivityEdges and the exceptionInput has no incoming ActivityEdges.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ExceptionHandler-handler_body_edges-_specification">
<language>OCL</language>
<body>handlerBody.incoming-&gt;isEmpty() and handlerBody.outgoing-&gt;isEmpty() and exceptionInput.incoming-&gt;isEmpty()</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="ExceptionHandler-output_pins" name="output_pins" constrainedElement="ExceptionHandler">
<ownedComment xmi:type="uml:Comment" xmi:id="ExceptionHandler-output_pins-_ownedComment.0" annotatedElement="ExceptionHandler-output_pins">
<body>If the protectedNode is an Action with OutputPins, then the handlerBody must also be an Action with the same number of OutputPins, which are compatible in type, ordering, and multiplicity to those of the protectedNode.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ExceptionHandler-output_pins-_specification">
<language>OCL</language>
<body>(protectedNode.oclIsKindOf(Action) and protectedNode.oclAsType(Action).output-&gt;notEmpty()) implies&#xD;
(&#xD;
handlerBody.oclIsKindOf(Action) and &#xD;
let protectedNodeOutput : OrderedSet(OutputPin) = protectedNode.oclAsType(Action).output,&#xD;
handlerBodyOutput : OrderedSet(OutputPin) = handlerBody.oclAsType(Action).output in&#xD;
protectedNodeOutput-&gt;size() = handlerBodyOutput-&gt;size() and&#xD;
Sequence{1..protectedNodeOutput-&gt;size()}-&gt;forAll(i |&#xD;
handlerBodyOutput-&gt;at(i).type.conformsTo(protectedNodeOutput-&gt;at(i).type) and&#xD;
handlerBodyOutput-&gt;at(i).isOrdered=protectedNodeOutput-&gt;at(i).isOrdered and&#xD;
handlerBodyOutput-&gt;at(i).compatibleWith(protectedNodeOutput-&gt;at(i)))&#xD;
)</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="ExceptionHandler-one_input" name="one_input" constrainedElement="ExceptionHandler">
<ownedComment xmi:type="uml:Comment" xmi:id="ExceptionHandler-one_input-_ownedComment.0" annotatedElement="ExceptionHandler-one_input">
<body>The handlerBody is an Action with one InputPin, and that InputPin is the same as the exceptionInput.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ExceptionHandler-one_input-_specification">
<language>OCL</language>
<body>handlerBody.oclIsKindOf(Action) and&#xD;
let inputs: OrderedSet(InputPin) = handlerBody.oclAsType(Action).input in&#xD;
inputs-&gt;size()=1 and inputs-&gt;first()=exceptionInput</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="ExceptionHandler-edge_source_target" name="edge_source_target" constrainedElement="ExceptionHandler">
<ownedComment xmi:type="uml:Comment" xmi:id="ExceptionHandler-edge_source_target-_ownedComment.0" annotatedElement="ExceptionHandler-edge_source_target">
<body>An ActivityEdge that has a source within the handlerBody of an ExceptionHandler must have its target in the handlerBody also, and vice versa.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ExceptionHandler-edge_source_target-_specification">
<language>OCL</language>
<body>let nodes:Set(ActivityNode) = handlerBody.oclAsType(Action).allOwnedNodes() in&#xD;
nodes.outgoing-&gt;forAll(nodes-&gt;includes(target)) and&#xD;
nodes.incoming-&gt;forAll(nodes-&gt;includes(source))</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="ExceptionHandler-handler_body_owner" name="handler_body_owner" constrainedElement="ExceptionHandler">
<ownedComment xmi:type="uml:Comment" xmi:id="ExceptionHandler-handler_body_owner-_ownedComment.0" annotatedElement="ExceptionHandler-handler_body_owner">
<body>The handlerBody must have the same owner as the protectedNode.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ExceptionHandler-handler_body_owner-_specification">
<language>OCL</language>
<body>handlerBody.owner=protectedNode.owner</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="ExceptionHandler-exception_input_type" name="exception_input_type" constrainedElement="ExceptionHandler">
<ownedComment xmi:type="uml:Comment" xmi:id="ExceptionHandler-exception_input_type-_ownedComment.0" annotatedElement="ExceptionHandler-exception_input_type">
<body>The exceptionInput must either have no type or every exceptionType must conform to the exceptionInput type.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ExceptionHandler-exception_input_type-_specification">
<language>OCL</language>
<body>exceptionInput.type=null or &#xD;
exceptionType-&gt;forAll(conformsTo(exceptionInput.type.oclAsType(Classifier)))</body>
</specification>
</ownedRule>
<generalization xmi:type="uml:Generalization" xmi:id="ExceptionHandler-_generalization.0" general="Element"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="ExceptionHandler-exceptionInput" name="exceptionInput" type="ObjectNode" association="A_exceptionInput_exceptionHandler">
<ownedComment xmi:type="uml:Comment" xmi:id="ExceptionHandler-exceptionInput-_ownedComment.0" annotatedElement="ExceptionHandler-exceptionInput">
<body>An ObjectNode within the handlerBody. When the ExceptionHandler catches an exception, the exception token is placed on this ObjectNode, causing the handlerBody to execute.</body>
</ownedComment>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ExceptionHandler-exceptionType" name="exceptionType" type="Classifier" association="A_exceptionType_exceptionHandler">
<ownedComment xmi:type="uml:Comment" xmi:id="ExceptionHandler-exceptionType-_ownedComment.0" annotatedElement="ExceptionHandler-exceptionType">
<body>The Classifiers whose instances the ExceptionHandler catches as exceptions. If an exception occurs whose type is any exceptionType, the ExceptionHandler catches the exception and executes the handlerBody.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="ExceptionHandler-exceptionType-_upperValue" value="*"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ExceptionHandler-handlerBody" name="handlerBody" type="ExecutableNode" association="A_handlerBody_exceptionHandler">
<ownedComment xmi:type="uml:Comment" xmi:id="ExceptionHandler-handlerBody-_ownedComment.0" annotatedElement="ExceptionHandler-handlerBody">
<body>An ExecutableNode that is executed if the ExceptionHandler catches an exception.</body>
</ownedComment>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ExceptionHandler-protectedNode" name="protectedNode" type="ExecutableNode" subsettedProperty="Element-owner" association="A_handler_protectedNode">
<ownedComment xmi:type="uml:Comment" xmi:id="ExceptionHandler-protectedNode-_ownedComment.0" annotatedElement="ExceptionHandler-protectedNode">
<body>The ExecutableNode protected by the ExceptionHandler. If an exception propagates out of the protectedNode and has a type matching one of the exceptionTypes, then it is caught by this ExceptionHandler.</body>
</ownedComment>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="ExecutableNode" name="ExecutableNode" isAbstract="true">
<ownedComment xmi:type="uml:Comment" xmi:id="ExecutableNode-_ownedComment.0" annotatedElement="ExecutableNode">
<body>An ExecutableNode is an abstract class for ActivityNodes whose execution may be controlled using ControlFlows and to which ExceptionHandlers may be attached.</body>
</ownedComment>
<generalization xmi:type="uml:Generalization" xmi:id="ExecutableNode-_generalization.0" general="ActivityNode"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="ExecutableNode-handler" name="handler" type="ExceptionHandler" aggregation="composite" subsettedProperty="Element-ownedElement" association="A_handler_protectedNode">
<ownedComment xmi:type="uml:Comment" xmi:id="ExecutableNode-handler-_ownedComment.0" annotatedElement="ExecutableNode-handler">
<body>A set of ExceptionHandlers that are examined if an exception propagates out of the ExceptionNode.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="ExecutableNode-handler-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ExecutableNode-handler-_lowerValue"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="FinalNode" name="FinalNode" isAbstract="true">
<ownedComment xmi:type="uml:Comment" xmi:id="FinalNode-_ownedComment.0" annotatedElement="FinalNode">
<body>A FinalNode is an abstract ControlNode at which a flow in an Activity stops.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="FinalNode-no_outgoing_edges" name="no_outgoing_edges" constrainedElement="FinalNode">
<ownedComment xmi:type="uml:Comment" xmi:id="FinalNode-no_outgoing_edges-_ownedComment.0" annotatedElement="FinalNode-no_outgoing_edges">
<body>A FinalNode has no outgoing ActivityEdges.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="FinalNode-no_outgoing_edges-_specification">
<language>OCL</language>
<body>outgoing-&gt;isEmpty()</body>
</specification>
</ownedRule>
<generalization xmi:type="uml:Generalization" xmi:id="FinalNode-_generalization.0" general="ControlNode"/>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="FlowFinalNode" name="FlowFinalNode">
<ownedComment xmi:type="uml:Comment" xmi:id="FlowFinalNode-_ownedComment.0" annotatedElement="FlowFinalNode">
<body>A FlowFinalNode is a FinalNode that terminates a flow by consuming the tokens offered to it.</body>
</ownedComment>
<generalization xmi:type="uml:Generalization" xmi:id="FlowFinalNode-_generalization.0" general="FinalNode"/>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="ForkNode" name="ForkNode">
<ownedComment xmi:type="uml:Comment" xmi:id="ForkNode-_ownedComment.0" annotatedElement="ForkNode">
<body>A ForkNode is a ControlNode that splits a flow into multiple concurrent flows.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="ForkNode-edges" name="edges" constrainedElement="ForkNode">
<ownedComment xmi:type="uml:Comment" xmi:id="ForkNode-edges-_ownedComment.0" annotatedElement="ForkNode-edges">
<body>The ActivityEdges incoming to and outgoing from a ForkNode must be either all ObjectFlows or all ControlFlows.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ForkNode-edges-_specification">
<language>OCL</language>
<body>let allEdges : Set(ActivityEdge) = incoming-&gt;union(outgoing) in&#xD;
allEdges-&gt;forAll(oclIsKindOf(ControlFlow)) or allEdges-&gt;forAll(oclIsKindOf(ObjectFlow))&#xD;
</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="ForkNode-one_incoming_edge" name="one_incoming_edge" constrainedElement="ForkNode">
<ownedComment xmi:type="uml:Comment" xmi:id="ForkNode-one_incoming_edge-_ownedComment.0" annotatedElement="ForkNode-one_incoming_edge">
<body>A ForkNode has one incoming ActivityEdge.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ForkNode-one_incoming_edge-_specification">
<language>OCL</language>
<body>incoming-&gt;size()=1</body>
</specification>
</ownedRule>
<generalization xmi:type="uml:Generalization" xmi:id="ForkNode-_generalization.0" general="ControlNode"/>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="InitialNode" name="InitialNode">
<ownedComment xmi:type="uml:Comment" xmi:id="InitialNode-_ownedComment.0" annotatedElement="InitialNode">
<body>An InitialNode is a ControlNode that offers a single control token when initially enabled.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="InitialNode-no_incoming_edges" name="no_incoming_edges" constrainedElement="InitialNode">
<ownedComment xmi:type="uml:Comment" xmi:id="InitialNode-no_incoming_edges-_ownedComment.0" annotatedElement="InitialNode-no_incoming_edges">
<body>An InitialNode has no incoming ActivityEdges.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="InitialNode-no_incoming_edges-_specification">
<language>OCL</language>
<body>incoming-&gt;isEmpty()</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="InitialNode-control_edges" name="control_edges" constrainedElement="InitialNode">
<ownedComment xmi:type="uml:Comment" xmi:id="InitialNode-control_edges-_ownedComment.0" annotatedElement="InitialNode-control_edges">
<body>All the outgoing ActivityEdges from an InitialNode must be ControlFlows.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="InitialNode-control_edges-_specification">
<language>OCL</language>
<body>outgoing-&gt;forAll(oclIsKindOf(ControlFlow))</body>
</specification>
</ownedRule>
<generalization xmi:type="uml:Generalization" xmi:id="InitialNode-_generalization.0" general="ControlNode"/>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="InterruptibleActivityRegion" name="InterruptibleActivityRegion">
<ownedComment xmi:type="uml:Comment" xmi:id="InterruptibleActivityRegion-_ownedComment.0" annotatedElement="InterruptibleActivityRegion">
<body>An InterruptibleActivityRegion is an ActivityGroup that supports the termination of tokens flowing in the portions of an activity within it.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="InterruptibleActivityRegion-interrupting_edges" name="interrupting_edges" constrainedElement="InterruptibleActivityRegion">
<ownedComment xmi:type="uml:Comment" xmi:id="InterruptibleActivityRegion-interrupting_edges-_ownedComment.0" annotatedElement="InterruptibleActivityRegion-interrupting_edges">
<body>The interruptingEdges of an InterruptibleActivityRegion must have their source in the region and their target outside the region, but within the same Activity containing the region.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="InterruptibleActivityRegion-interrupting_edges-_specification">
<language>OCL</language>
<body>interruptingEdge-&gt;forAll(edge | &#xD;
node-&gt;includes(edge.source) and node-&gt;excludes(edge.target) and edge.target.containingActivity() = inActivity)</body>
</specification>
</ownedRule>
<generalization xmi:type="uml:Generalization" xmi:id="InterruptibleActivityRegion-_generalization.0" general="ActivityGroup"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="InterruptibleActivityRegion-interruptingEdge" name="interruptingEdge" type="ActivityEdge" association="A_interruptingEdge_interrupts">
<ownedComment xmi:type="uml:Comment" xmi:id="InterruptibleActivityRegion-interruptingEdge-_ownedComment.0" annotatedElement="InterruptibleActivityRegion-interruptingEdge">
<body>The ActivityEdges leaving the InterruptibleActivityRegion on which a traversing token will result in the termination of other tokens flowing in the InterruptibleActivityRegion.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="InterruptibleActivityRegion-interruptingEdge-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="InterruptibleActivityRegion-interruptingEdge-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="InterruptibleActivityRegion-node" name="node" type="ActivityNode" subsettedProperty="ActivityGroup-containedNode" association="A_inInterruptibleRegion_node">
<ownedComment xmi:type="uml:Comment" xmi:id="InterruptibleActivityRegion-node-_ownedComment.0" annotatedElement="InterruptibleActivityRegion-node">
<body>ActivityNodes immediately contained in the InterruptibleActivityRegion.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="InterruptibleActivityRegion-node-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="InterruptibleActivityRegion-node-_lowerValue"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="JoinNode" name="JoinNode">
<ownedComment xmi:type="uml:Comment" xmi:id="JoinNode-_ownedComment.0" annotatedElement="JoinNode">
<body>A JoinNode is a ControlNode that synchronizes multiple flows.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="JoinNode-one_outgoing_edge" name="one_outgoing_edge" constrainedElement="JoinNode">
<ownedComment xmi:type="uml:Comment" xmi:id="JoinNode-one_outgoing_edge-_ownedComment.0" annotatedElement="JoinNode-one_outgoing_edge">
<body>A JoinNode has one outgoing ActivityEdge.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="JoinNode-one_outgoing_edge-_specification">
<language>OCL</language>
<body>outgoing-&gt;size() = 1</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="JoinNode-incoming_object_flow" name="incoming_object_flow" constrainedElement="JoinNode">
<ownedComment xmi:type="uml:Comment" xmi:id="JoinNode-incoming_object_flow-_ownedComment.0" annotatedElement="JoinNode-incoming_object_flow">
<body>If one of the incoming ActivityEdges of a JoinNode is an ObjectFlow, then its outgoing ActivityEdge must be an ObjectFlow. Otherwise its outgoing ActivityEdge must be a ControlFlow.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="JoinNode-incoming_object_flow-_specification">
<language>OCL</language>
<body>if incoming-&gt;exists(oclIsKindOf(ObjectFlow)) then outgoing-&gt;forAll(oclIsKindOf(ObjectFlow))&#xD;
else outgoing-&gt;forAll(oclIsKindOf(ControlFlow))&#xD;
endif</body>
</specification>
</ownedRule>
<generalization xmi:type="uml:Generalization" xmi:id="JoinNode-_generalization.0" general="ControlNode"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="JoinNode-isCombineDuplicate" name="isCombineDuplicate">
<ownedComment xmi:type="uml:Comment" xmi:id="JoinNode-isCombineDuplicate-_ownedComment.0" annotatedElement="JoinNode-isCombineDuplicate">
<body>Indicates whether incoming tokens having objects with the same identity are combined into one by the JoinNode.</body>
</ownedComment>
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Boolean"/>
<defaultValue xmi:type="uml:LiteralBoolean" xmi:id="JoinNode-isCombineDuplicate-_defaultValue" value="true"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="JoinNode-joinSpec" name="joinSpec" type="ValueSpecification" aggregation="composite" subsettedProperty="Element-ownedElement" association="A_joinSpec_joinNode">
<ownedComment xmi:type="uml:Comment" xmi:id="JoinNode-joinSpec-_ownedComment.0" annotatedElement="JoinNode-joinSpec">
<body>A ValueSpecification giving the condition under which the JoinNode will offer a token on its outgoing ActivityEdge. If no joinSpec is specified, then the JoinNode will offer an outgoing token if tokens are offered on all of its incoming ActivityEdges (an "and" condition).</body>
</ownedComment>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="JoinNode-joinSpec-_lowerValue"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="MergeNode" name="MergeNode">
<ownedComment xmi:type="uml:Comment" xmi:id="MergeNode-_ownedComment.0" annotatedElement="MergeNode">
<body>A merge node is a control node that brings together multiple alternate flows. It is not used to synchronize concurrent flows but to accept one among several alternate flows.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="MergeNode-one_outgoing_edge" name="one_outgoing_edge" constrainedElement="MergeNode">
<ownedComment xmi:type="uml:Comment" xmi:id="MergeNode-one_outgoing_edge-_ownedComment.0" annotatedElement="MergeNode-one_outgoing_edge">
<body>A MergeNode has one outgoing ActivityEdge.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="MergeNode-one_outgoing_edge-_specification">
<language>OCL</language>
<body>outgoing-&gt;size()=1</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="MergeNode-edges" name="edges" constrainedElement="MergeNode">
<ownedComment xmi:type="uml:Comment" xmi:id="MergeNode-edges-_ownedComment.0" annotatedElement="MergeNode-edges">
<body>The ActivityEdges incoming to and outgoing from a MergeNode must be either all ObjectFlows or all ControlFlows.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="MergeNode-edges-_specification">
<language>OCL</language>
<body>let allEdges : Set(ActivityEdge) = incoming-&gt;union(outgoing) in&#xD;
allEdges-&gt;forAll(oclIsKindOf(ControlFlow)) or allEdges-&gt;forAll(oclIsKindOf(ObjectFlow))&#xD;
</body>
</specification>
</ownedRule>
<generalization xmi:type="uml:Generalization" xmi:id="MergeNode-_generalization.0" general="ControlNode"/>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="ObjectFlow" name="ObjectFlow">
<ownedComment xmi:type="uml:Comment" xmi:id="ObjectFlow-_ownedComment.0" annotatedElement="ObjectFlow">
<body>An ObjectFlow is an ActivityEdge that is traversed by object tokens that may hold values. Object flows also support multicast/receive, token selection from object nodes, and transformation of tokens.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="ObjectFlow-input_and_output_parameter" name="input_and_output_parameter" constrainedElement="ObjectFlow">
<ownedComment xmi:type="uml:Comment" xmi:id="ObjectFlow-input_and_output_parameter-_ownedComment.0" annotatedElement="ObjectFlow-input_and_output_parameter">
<body>A selection Behavior has one input Parameter and one output Parameter. The input Parameter must have the same as or a supertype of the type of the source ObjectNode, be non-unique and have multiplicity 0..*. The output Parameter must be the same or a subtype of the type of source ObjectNode. The Behavior cannot have side effects.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ObjectFlow-input_and_output_parameter-_specification">
<language>OCL</language>
<body>selection&lt;&gt;null implies&#xD;
selection.inputParameters()-&gt;size()=1 and&#xD;
selection.inputParameters()-&gt;forAll(not isUnique and is(0,*)) and&#xD;
selection.outputParameters()-&gt;size()=1</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="ObjectFlow-no_executable_nodes" name="no_executable_nodes" constrainedElement="ObjectFlow">
<ownedComment xmi:type="uml:Comment" xmi:id="ObjectFlow-no_executable_nodes-_ownedComment.0" annotatedElement="ObjectFlow-no_executable_nodes">
<body>ObjectFlows may not have ExecutableNodes at either end.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ObjectFlow-no_executable_nodes-_specification">
<language>OCL</language>
<body>not (source.oclIsKindOf(ExecutableNode) or target.oclIsKindOf(ExecutableNode))</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="ObjectFlow-transformation_behavior" name="transformation_behavior" constrainedElement="ObjectFlow">
<ownedComment xmi:type="uml:Comment" xmi:id="ObjectFlow-transformation_behavior-_ownedComment.0" annotatedElement="ObjectFlow-transformation_behavior">
<body>A transformation Behavior has one input Parameter and one output Parameter. The input Parameter must be the same as or a supertype of the type of object token coming from the source end. The output Parameter must be the same or a subtype of the type of object token expected downstream. The Behavior cannot have side effects.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ObjectFlow-transformation_behavior-_specification">
<language>OCL</language>
<body>transformation&lt;&gt;null implies&#xD;
transformation.inputParameters()-&gt;size()=1 and&#xD;
transformation.outputParameters()-&gt;size()=1</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="ObjectFlow-selection_behavior" name="selection_behavior" constrainedElement="ObjectFlow">
<ownedComment xmi:type="uml:Comment" xmi:id="ObjectFlow-selection_behavior-_ownedComment.0" annotatedElement="ObjectFlow-selection_behavior">
<body>An ObjectFlow may have a selection Behavior only if it has an ObjectNode as its source.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ObjectFlow-selection_behavior-_specification">
<language>OCL</language>
<body>selection&lt;&gt;null implies source.oclIsKindOf(ObjectNode)</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="ObjectFlow-compatible_types" name="compatible_types" constrainedElement="ObjectFlow">
<ownedComment xmi:type="uml:Comment" xmi:id="ObjectFlow-compatible_types-_ownedComment.0" annotatedElement="ObjectFlow-compatible_types">
<body>ObjectNodes connected by an ObjectFlow, with optionally intervening ControlNodes, must have compatible types. In particular, the downstream ObjectNode type must be the same or a supertype of the upstream ObjectNode type.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ObjectFlow-compatible_types-_specification" language=""/>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="ObjectFlow-same_upper_bounds" name="same_upper_bounds" constrainedElement="ObjectFlow">
<ownedComment xmi:type="uml:Comment" xmi:id="ObjectFlow-same_upper_bounds-_ownedComment.0" annotatedElement="ObjectFlow-same_upper_bounds">
<body>ObjectNodes connected by an ObjectFlow, with optionally intervening ControlNodes, must have the same upperBounds.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ObjectFlow-same_upper_bounds-_specification" language=""/>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="ObjectFlow-target" name="target" constrainedElement="ObjectFlow">
<ownedComment xmi:type="uml:Comment" xmi:id="ObjectFlow-target-_ownedComment.0" annotatedElement="ObjectFlow-target">
<body>An ObjectFlow with a constant weight may not target an ObjectNode, with optionally intervening ControlNodes, that has an upper bound less than the weight.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ObjectFlow-target-_specification" language=""/>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="ObjectFlow-is_multicast_or_is_multireceive" name="is_multicast_or_is_multireceive" constrainedElement="ObjectFlow">
<ownedComment xmi:type="uml:Comment" xmi:id="ObjectFlow-is_multicast_or_is_multireceive-_ownedComment.0" annotatedElement="ObjectFlow-is_multicast_or_is_multireceive">
<body>isMulticast and isMultireceive cannot both be true.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ObjectFlow-is_multicast_or_is_multireceive-_specification">
<language>OCL</language>
<body>not (isMulticast and isMultireceive)</body>
</specification>
</ownedRule>
<generalization xmi:type="uml:Generalization" xmi:id="ObjectFlow-_generalization.0" general="ActivityEdge"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="ObjectFlow-isMulticast" name="isMulticast">
<ownedComment xmi:type="uml:Comment" xmi:id="ObjectFlow-isMulticast-_ownedComment.0" annotatedElement="ObjectFlow-isMulticast">
<body>Indicates whether the objects in the ObjectFlow are passed by multicasting.</body>
</ownedComment>
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Boolean"/>
<defaultValue xmi:type="uml:LiteralBoolean" xmi:id="ObjectFlow-isMulticast-_defaultValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ObjectFlow-isMultireceive" name="isMultireceive">
<ownedComment xmi:type="uml:Comment" xmi:id="ObjectFlow-isMultireceive-_ownedComment.0" annotatedElement="ObjectFlow-isMultireceive">
<body>Indicates whether the objects in the ObjectFlow are gathered from respondents to multicasting.</body>
</ownedComment>
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Boolean"/>
<defaultValue xmi:type="uml:LiteralBoolean" xmi:id="ObjectFlow-isMultireceive-_defaultValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ObjectFlow-selection" name="selection" type="Behavior" association="A_selection_objectFlow">
<ownedComment xmi:type="uml:Comment" xmi:id="ObjectFlow-selection-_ownedComment.0" annotatedElement="ObjectFlow-selection">
<body>A Behavior used to select tokens from a source ObjectNode.</body>
</ownedComment>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ObjectFlow-selection-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ObjectFlow-transformation" name="transformation" type="Behavior" association="A_transformation_objectFlow">
<ownedComment xmi:type="uml:Comment" xmi:id="ObjectFlow-transformation-_ownedComment.0" annotatedElement="ObjectFlow-transformation">
<body>A Behavior used to change or replace object tokens flowing along the ObjectFlow.</body>
</ownedComment>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ObjectFlow-transformation-_lowerValue"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="ObjectNode" name="ObjectNode" isAbstract="true">
<ownedComment xmi:type="uml:Comment" xmi:id="ObjectNode-_ownedComment.0" annotatedElement="ObjectNode">
<body>An ObjectNode is an abstract ActivityNode that may hold tokens within the object flow in an Activity. ObjectNodes also support token selection, limitation on the number of tokens held, specification of the state required for tokens being held, and carrying control values.&#xD;
</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="ObjectNode-input_output_parameter" name="input_output_parameter" constrainedElement="ObjectNode">
<ownedComment xmi:type="uml:Comment" xmi:id="ObjectNode-input_output_parameter-_ownedComment.0" annotatedElement="ObjectNode-input_output_parameter">
<body>A selection Behavior has one input Parameter and one output Parameter. The input Parameter must have the same type as or a supertype of the type of ObjectNode, be non-unique, and have multiplicity 0..*. The output Parameter must be the same or a subtype of the type of ObjectNode. The Behavior cannot have side effects.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ObjectNode-input_output_parameter-_specification">
<language>OCL</language>
<body>selection&lt;&gt;null implies&#xD;
selection.inputParameters()-&gt;size()=1 and&#xD;
selection.inputParameters()-&gt;forAll(p | not p.isUnique and p.is(0,*) and self.type.conformsTo(p.type)) and&#xD;
selection.outputParameters()-&gt;size()=1 and&#xD;
selection.inputParameters()-&gt;forAll(p | self.type.conformsTo(p.type))&#xD;
</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="ObjectNode-selection_behavior" name="selection_behavior" constrainedElement="ObjectNode">
<ownedComment xmi:type="uml:Comment" xmi:id="ObjectNode-selection_behavior-_ownedComment.0" annotatedElement="ObjectNode-selection_behavior">
<body>If an ObjectNode has a selection Behavior, then the ordering of the object node is ordered, and vice versa.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ObjectNode-selection_behavior-_specification">
<language>OCL</language>
<body>(selection&lt;&gt;null) = (ordering=ObjectNodeOrderingKind::ordered)</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="ObjectNode-object_flow_edges" name="object_flow_edges" constrainedElement="ObjectNode">
<ownedComment xmi:type="uml:Comment" xmi:id="ObjectNode-object_flow_edges-_ownedComment.0" annotatedElement="ObjectNode-object_flow_edges">
<body>If isControlType=false, the ActivityEdges incoming to or outgoing from an ObjectNode must all be ObjectFlows.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="ObjectNode-object_flow_edges-_specification">
<language>OCL</language>
<body>(not isControlType) implies incoming-&gt;union(outgoing)-&gt;forAll(oclIsKindOf(ObjectFlow))</body>
</specification>
</ownedRule>
<generalization xmi:type="uml:Generalization" xmi:id="ObjectNode-_generalization.1" general="TypedElement"/>
<generalization xmi:type="uml:Generalization" xmi:id="ObjectNode-_generalization.0" general="ActivityNode"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="ObjectNode-inState" name="inState" type="State" association="A_inState_objectNode">
<ownedComment xmi:type="uml:Comment" xmi:id="ObjectNode-inState-_ownedComment.0" annotatedElement="ObjectNode-inState">
<body>The States required to be associated with the values held by tokens on this ObjectNode.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="ObjectNode-inState-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ObjectNode-inState-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ObjectNode-isControlType" name="isControlType">
<ownedComment xmi:type="uml:Comment" xmi:id="ObjectNode-isControlType-_ownedComment.0" annotatedElement="ObjectNode-isControlType">
<body>Indicates whether the type of the ObjectNode is to be treated as representing control values that may traverse ControlFlows.</body>
</ownedComment>
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Boolean"/>
<defaultValue xmi:type="uml:LiteralBoolean" xmi:id="ObjectNode-isControlType-_defaultValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ObjectNode-ordering" name="ordering" type="ObjectNodeOrderingKind">
<ownedComment xmi:type="uml:Comment" xmi:id="ObjectNode-ordering-_ownedComment.0" annotatedElement="ObjectNode-ordering">
<body>Indicates how the tokens held by the ObjectNode are ordered for selection to traverse ActivityEdges outgoing from the ObjectNode.</body>
</ownedComment>
<defaultValue xmi:type="uml:InstanceValue" xmi:id="ObjectNode-ordering-_defaultValue" type="ObjectNodeOrderingKind" instance="ObjectNodeOrderingKind-FIFO"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ObjectNode-selection" name="selection" type="Behavior" association="A_selection_objectNode">
<ownedComment xmi:type="uml:Comment" xmi:id="ObjectNode-selection-_ownedComment.0" annotatedElement="ObjectNode-selection">
<body>A Behavior used to select tokens to be offered on outgoing ActivityEdges.</body>
</ownedComment>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ObjectNode-selection-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="ObjectNode-upperBound" name="upperBound" type="ValueSpecification" aggregation="composite" subsettedProperty="Element-ownedElement" association="A_upperBound_objectNode">
<ownedComment xmi:type="uml:Comment" xmi:id="ObjectNode-upperBound-_ownedComment.0" annotatedElement="ObjectNode-upperBound">
<body>The maximum number of tokens that may be held by this ObjectNode. Tokens cannot flow into the ObjectNode if the upperBound is reached. If no upperBound is specified, then there is no limit on how many tokens the ObjectNode can hold.</body>
</ownedComment>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="ObjectNode-upperBound-_lowerValue"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="Variable" name="Variable">
<ownedComment xmi:type="uml:Comment" xmi:id="Variable-_ownedComment.0" annotatedElement="Variable">
<body>A Variable is a ConnectableElement that may store values during the execution of an Activity. Reading and writing the values of a Variable provides an alternative means for passing data than the use of ObjectFlows. A Variable may be owned directly by an Activity, in which case it is accessible from anywhere within that activity, or it may be owned by a StructuredActivityNode, in which case it is only accessible within that node.</body>
</ownedComment>
<generalization xmi:type="uml:Generalization" xmi:id="Variable-_generalization.0" general="ConnectableElement"/>
<generalization xmi:type="uml:Generalization" xmi:id="Variable-_generalization.1" general="MultiplicityElement"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="Variable-activityScope" name="activityScope" type="Activity" subsettedProperty="NamedElement-namespace" association="A_variable_activityScope">
<ownedComment xmi:type="uml:Comment" xmi:id="Variable-activityScope-_ownedComment.0" annotatedElement="Variable-activityScope">
<body>An Activity that owns the Variable.</body>
</ownedComment>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="Variable-activityScope-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="Variable-scope" name="scope" type="StructuredActivityNode" subsettedProperty="NamedElement-namespace" association="A_variable_scope">
<ownedComment xmi:type="uml:Comment" xmi:id="Variable-scope-_ownedComment.0" annotatedElement="Variable-scope">
<body>A StructuredActivityNode that owns the Variable.</body>
</ownedComment>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="Variable-scope-_lowerValue"/>
</ownedAttribute>
<ownedOperation xmi:type="uml:Operation" xmi:id="Variable-isAccessibleBy" name="isAccessibleBy" isQuery="true" bodyCondition="Variable-isAccessibleBy-spec">
<ownedComment xmi:type="uml:Comment" xmi:id="Variable-isAccessibleBy-_ownedComment.0" annotatedElement="Variable-isAccessibleBy">
<body>A Variable is accessible by Actions within its scope (the Activity or StructuredActivityNode that owns it).</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="Variable-isAccessibleBy-spec" name="spec" constrainedElement="Variable-isAccessibleBy">
<specification xmi:type="uml:OpaqueExpression" xmi:id="Variable-isAccessibleBy-spec-_specification">
<language>OCL</language>
<body>result = (if scope&lt;&gt;null then scope.allOwnedNodes()-&gt;includes(a)&#xD;
else a.containingActivity()=activityScope&#xD;
endif)</body>
</specification>
</ownedRule>
<ownedParameter xmi:type="uml:Parameter" xmi:id="Variable-isAccessibleBy-result" name="result" direction="return">
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Boolean"/>
</ownedParameter>
<ownedParameter xmi:type="uml:Parameter" xmi:id="Variable-isAccessibleBy-a" name="a" type="Action"/>
</ownedOperation>
</packagedElement>
<packagedElement xmi:type="uml:Enumeration" xmi:id="ObjectNodeOrderingKind" name="ObjectNodeOrderingKind">
<ownedComment xmi:type="uml:Comment" xmi:id="ObjectNodeOrderingKind-_ownedComment.0" annotatedElement="ObjectNodeOrderingKind">
<body>ObjectNodeOrderingKind is an enumeration indicating queuing order for offering the tokens held by an ObjectNode.</body>
</ownedComment>
<ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="ObjectNodeOrderingKind-unordered" name="unordered">
<ownedComment xmi:type="uml:Comment" xmi:id="ObjectNodeOrderingKind-unordered-_ownedComment.0" annotatedElement="ObjectNodeOrderingKind-unordered">
<body>Indicates that tokens are unordered.</body>
</ownedComment>
</ownedLiteral>
<ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="ObjectNodeOrderingKind-ordered" name="ordered">
<ownedComment xmi:type="uml:Comment" xmi:id="ObjectNodeOrderingKind-ordered-_ownedComment.0" annotatedElement="ObjectNodeOrderingKind-ordered">
<body>Indicates that tokens are ordered.</body>
</ownedComment>
</ownedLiteral>
<ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="ObjectNodeOrderingKind-LIFO" name="LIFO">
<ownedComment xmi:type="uml:Comment" xmi:id="ObjectNodeOrderingKind-LIFO-_ownedComment.0" annotatedElement="ObjectNodeOrderingKind-LIFO">
<body>Indicates that tokens are queued in a last in, first out manner.</body>
</ownedComment>
</ownedLiteral>
<ownedLiteral xmi:type="uml:EnumerationLiteral" xmi:id="ObjectNodeOrderingKind-FIFO" name="FIFO">
<ownedComment xmi:type="uml:Comment" xmi:id="ObjectNodeOrderingKind-FIFO-_ownedComment.0" annotatedElement="ObjectNodeOrderingKind-FIFO">
<body>Indicates that tokens are queued in a first in, first out manner.</body>
</ownedComment>
</ownedLiteral>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="A_selection_objectNode" name="A_selection_objectNode" memberEnd="ObjectNode-selection A_selection_objectNode-objectNode">
<ownedEnd xmi:type="uml:Property" xmi:id="A_selection_objectNode-objectNode" name="objectNode" type="ObjectNode" association="A_selection_objectNode">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="A_selection_objectNode-objectNode-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="A_selection_objectNode-objectNode-_lowerValue"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="A_inState_objectNode" name="A_inState_objectNode" memberEnd="ObjectNode-inState A_inState_objectNode-objectNode">
<ownedEnd xmi:type="uml:Property" xmi:id="A_inState_objectNode-objectNode" name="objectNode" type="ObjectNode" association="A_inState_objectNode">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="A_inState_objectNode-objectNode-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="A_inState_objectNode-objectNode-_lowerValue"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="A_upperBound_objectNode" name="A_upperBound_objectNode" memberEnd="ObjectNode-upperBound A_upperBound_objectNode-objectNode">
<ownedEnd xmi:type="uml:Property" xmi:id="A_upperBound_objectNode-objectNode" name="objectNode" type="ObjectNode" subsettedProperty="Element-owner" association="A_upperBound_objectNode">
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="A_upperBound_objectNode-objectNode-_lowerValue"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="A_transformation_objectFlow" name="A_transformation_objectFlow" memberEnd="ObjectFlow-transformation A_transformation_objectFlow-objectFlow">
<ownedEnd xmi:type="uml:Property" xmi:id="A_transformation_objectFlow-objectFlow" name="objectFlow" type="ObjectFlow" association="A_transformation_objectFlow">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="A_transformation_objectFlow-objectFlow-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="A_transformation_objectFlow-objectFlow-_lowerValue"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="A_selection_objectFlow" name="A_selection_objectFlow" memberEnd="ObjectFlow-selection A_selection_objectFlow-objectFlow">
<ownedEnd xmi:type="uml:Property" xmi:id="A_selection_objectFlow-objectFlow" name="objectFlow" type="ObjectFlow" association="A_selection_objectFlow">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="A_selection_objectFlow-objectFlow-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="A_selection_objectFlow-objectFlow-_lowerValue"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="A_joinSpec_joinNode" name="A_joinSpec_joinNode" memberEnd="JoinNode-joinSpec A_joinSpec_joinNode-joinNode">
<ownedEnd xmi:type="uml:Property" xmi:id="A_joinSpec_joinNode-joinNode" name="joinNode" type="JoinNode" subsettedProperty="Element-owner" association="A_joinSpec_joinNode">
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="A_joinSpec_joinNode-joinNode-_lowerValue"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="A_interruptingEdge_interrupts" name="A_interruptingEdge_interrupts" memberEnd="InterruptibleActivityRegion-interruptingEdge ActivityEdge-interrupts"/>
<packagedElement xmi:type="uml:Association" xmi:id="A_handler_protectedNode" name="A_handler_protectedNode" memberEnd="ExecutableNode-handler ExceptionHandler-protectedNode"/>
<packagedElement xmi:type="uml:Association" xmi:id="A_handlerBody_exceptionHandler" name="A_handlerBody_exceptionHandler" memberEnd="ExceptionHandler-handlerBody A_handlerBody_exceptionHandler-exceptionHandler">
<ownedEnd xmi:type="uml:Property" xmi:id="A_handlerBody_exceptionHandler-exceptionHandler" name="exceptionHandler" type="ExceptionHandler" association="A_handlerBody_exceptionHandler">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="A_handlerBody_exceptionHandler-exceptionHandler-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="A_handlerBody_exceptionHandler-exceptionHandler-_lowerValue"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="A_exceptionType_exceptionHandler" name="A_exceptionType_exceptionHandler" memberEnd="ExceptionHandler-exceptionType A_exceptionType_exceptionHandler-exceptionHandler">
<ownedEnd xmi:type="uml:Property" xmi:id="A_exceptionType_exceptionHandler-exceptionHandler" name="exceptionHandler" type="ExceptionHandler" association="A_exceptionType_exceptionHandler">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="A_exceptionType_exceptionHandler-exceptionHandler-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="A_exceptionType_exceptionHandler-exceptionHandler-_lowerValue"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="A_exceptionInput_exceptionHandler" name="A_exceptionInput_exceptionHandler" memberEnd="ExceptionHandler-exceptionInput A_exceptionInput_exceptionHandler-exceptionHandler">
<ownedEnd xmi:type="uml:Property" xmi:id="A_exceptionInput_exceptionHandler-exceptionHandler" name="exceptionHandler" type="ExceptionHandler" association="A_exceptionInput_exceptionHandler">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="A_exceptionInput_exceptionHandler-exceptionHandler-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="A_exceptionInput_exceptionHandler-exceptionHandler-_lowerValue"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="A_decisionInput_decisionNode" name="A_decisionInput_decisionNode" memberEnd="DecisionNode-decisionInput A_decisionInput_decisionNode-decisionNode">
<ownedEnd xmi:type="uml:Property" xmi:id="A_decisionInput_decisionNode-decisionNode" name="decisionNode" type="DecisionNode" association="A_decisionInput_decisionNode">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="A_decisionInput_decisionNode-decisionNode-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="A_decisionInput_decisionNode-decisionNode-_lowerValue"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="A_decisionInputFlow_decisionNode" name="A_decisionInputFlow_decisionNode" memberEnd="DecisionNode-decisionInputFlow A_decisionInputFlow_decisionNode-decisionNode">
<ownedEnd xmi:type="uml:Property" xmi:id="A_decisionInputFlow_decisionNode-decisionNode" name="decisionNode" type="DecisionNode" association="A_decisionInputFlow_decisionNode">
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="A_decisionInputFlow_decisionNode-decisionNode-_lowerValue"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="A_represents_activityPartition" name="A_represents_activityPartition" memberEnd="ActivityPartition-represents A_represents_activityPartition-activityPartition">
<ownedEnd xmi:type="uml:Property" xmi:id="A_represents_activityPartition-activityPartition" name="activityPartition" type="ActivityPartition" association="A_represents_activityPartition">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="A_represents_activityPartition-activityPartition-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="A_represents_activityPartition-activityPartition-_lowerValue"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="A_subpartition_superPartition" name="A_subpartition_superPartition" memberEnd="ActivityPartition-subpartition ActivityPartition-superPartition"/>
<packagedElement xmi:type="uml:Association" xmi:id="A_edge_inPartition" name="A_edge_inPartition" memberEnd="ActivityPartition-edge ActivityEdge-inPartition"/>
<packagedElement xmi:type="uml:Association" xmi:id="A_parameter_activityParameterNode" name="A_parameter_activityParameterNode" memberEnd="ActivityParameterNode-parameter A_parameter_activityParameterNode-activityParameterNode">
<ownedEnd xmi:type="uml:Property" xmi:id="A_parameter_activityParameterNode-activityParameterNode" name="activityParameterNode" type="ActivityParameterNode" association="A_parameter_activityParameterNode">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="A_parameter_activityParameterNode-activityParameterNode-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="A_parameter_activityParameterNode-activityParameterNode-_lowerValue"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="A_inInterruptibleRegion_node" name="A_inInterruptibleRegion_node" memberEnd="ActivityNode-inInterruptibleRegion InterruptibleActivityRegion-node"/>
<packagedElement xmi:type="uml:Association" xmi:id="A_inPartition_node" name="A_inPartition_node" memberEnd="ActivityNode-inPartition ActivityPartition-node"/>
<packagedElement xmi:type="uml:Association" xmi:id="A_incoming_target_node" name="A_incoming_target_node" memberEnd="ActivityNode-incoming ActivityEdge-target"/>
<packagedElement xmi:type="uml:Association" xmi:id="A_outgoing_source_node" name="A_outgoing_source_node" memberEnd="ActivityNode-outgoing ActivityEdge-source"/>
<packagedElement xmi:type="uml:Association" xmi:id="A_redefinedNode_activityNode" name="A_redefinedNode_activityNode" memberEnd="ActivityNode-redefinedNode A_redefinedNode_activityNode-activityNode">
<ownedEnd xmi:type="uml:Property" xmi:id="A_redefinedNode_activityNode-activityNode" name="activityNode" type="ActivityNode" subsettedProperty="A_redefinedElement_redefinableElement-redefinableElement" association="A_redefinedNode_activityNode">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="A_redefinedNode_activityNode-activityNode-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="A_redefinedNode_activityNode-activityNode-_lowerValue"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="A_containedEdge_inGroup" name="A_containedEdge_inGroup" memberEnd="ActivityGroup-containedEdge ActivityEdge-inGroup" isDerived="true"/>
<packagedElement xmi:type="uml:Association" xmi:id="A_containedNode_inGroup" name="A_containedNode_inGroup" memberEnd="ActivityGroup-containedNode ActivityNode-inGroup" isDerived="true"/>
<packagedElement xmi:type="uml:Association" xmi:id="A_subgroup_superGroup" name="A_subgroup_superGroup" memberEnd="ActivityGroup-subgroup ActivityGroup-superGroup" isDerived="true"/>
<packagedElement xmi:type="uml:Association" xmi:id="A_redefinedEdge_activityEdge" name="A_redefinedEdge_activityEdge" memberEnd="ActivityEdge-redefinedEdge A_redefinedEdge_activityEdge-activityEdge">
<ownedEnd xmi:type="uml:Property" xmi:id="A_redefinedEdge_activityEdge-activityEdge" name="activityEdge" type="ActivityEdge" subsettedProperty="A_redefinedElement_redefinableElement-redefinableElement" association="A_redefinedEdge_activityEdge">
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="A_redefinedEdge_activityEdge-activityEdge-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="A_redefinedEdge_activityEdge-activityEdge-_lowerValue"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="A_weight_activityEdge" name="A_weight_activityEdge" memberEnd="ActivityEdge-weight A_weight_activityEdge-activityEdge">
<ownedEnd xmi:type="uml:Property" xmi:id="A_weight_activityEdge-activityEdge" name="activityEdge" type="ActivityEdge" subsettedProperty="Element-owner" association="A_weight_activityEdge">
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="A_weight_activityEdge-activityEdge-_lowerValue"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="A_guard_activityEdge" name="A_guard_activityEdge" memberEnd="ActivityEdge-guard A_guard_activityEdge-activityEdge">
<ownedEnd xmi:type="uml:Property" xmi:id="A_guard_activityEdge-activityEdge" name="activityEdge" type="ActivityEdge" subsettedProperty="Element-owner" association="A_guard_activityEdge">
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="A_guard_activityEdge-activityEdge-_lowerValue"/>
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Association" xmi:id="A_structuredNode_activity" name="A_structuredNode_activity" memberEnd="Activity-structuredNode StructuredActivityNode-activity"/>
<packagedElement xmi:type="uml:Association" xmi:id="A_group_inActivity" name="A_group_inActivity" memberEnd="Activity-group ActivityGroup-inActivity"/>
<packagedElement xmi:type="uml:Association" xmi:id="A_node_activity" name="A_node_activity" memberEnd="Activity-node ActivityNode-activity"/>
<packagedElement xmi:type="uml:Association" xmi:id="A_variable_activityScope" name="A_variable_activityScope" memberEnd="Activity-variable Variable-activityScope"/>
<packagedElement xmi:type="uml:Association" xmi:id="A_edge_activity" name="A_edge_activity" memberEnd="Activity-edge ActivityEdge-activity"/>
<packagedElement xmi:type="uml:Association" xmi:id="A_partition_activity" name="A_partition_activity" memberEnd="Activity-partition A_partition_activity-activity">
<ownedEnd xmi:type="uml:Property" xmi:id="A_partition_activity-activity" name="activity" type="Activity" subsettedProperty="ActivityGroup-inActivity" association="A_partition_activity">
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="A_partition_activity-activity-_lowerValue"/>
</ownedEnd>
</packagedElement>
</packagedElement>
<packagedElement xmi:type="uml:Package" xmi:id="Values" name="Values">
<packageImport xmi:type="uml:PackageImport" xmi:id="_packageImport.0" importedPackage="Classification"/>
<packagedElement xmi:type="uml:Class" xmi:id="Duration" name="Duration">
<ownedComment xmi:type="uml:Comment" xmi:id="Duration-_ownedComment.0" annotatedElement="Duration">
<body>A Duration is a ValueSpecification that specifies the temporal distance between two time instants.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="Duration-no_expr_requires_observation" name="no_expr_requires_observation" constrainedElement="Duration">
<ownedComment xmi:type="uml:Comment" xmi:id="Duration-no_expr_requires_observation-_ownedComment.0" annotatedElement="Duration-no_expr_requires_observation">
<body>If a Duration has no expr, then it must have a single observation that is a DurationObservation.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="Duration-no_expr_requires_observation-_specification">
<language>OCL</language>
<body>expr = null implies (observation-&gt;size() = 1 and observation-&gt;forAll(oclIsKindOf(DurationObservation)))</body>
</specification>
</ownedRule>
<generalization xmi:type="uml:Generalization" xmi:id="Duration-_generalization.0" general="ValueSpecification"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="Duration-expr" name="expr" type="ValueSpecification" aggregation="composite" subsettedProperty="Element-ownedElement" association="A_expr_duration">
<ownedComment xmi:type="uml:Comment" xmi:id="Duration-expr-_ownedComment.0" annotatedElement="Duration-expr">
<body>A ValueSpecification that evaluates to the value of the Duration.</body>
</ownedComment>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="Duration-expr-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="Duration-observation" name="observation" type="Observation" association="A_observation_duration">
<ownedComment xmi:type="uml:Comment" xmi:id="Duration-observation-_ownedComment.0" annotatedElement="Duration-observation">
<body>Refers to the Observations that are involved in the computation of the Duration value</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="Duration-observation-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="Duration-observation-_lowerValue"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="DurationConstraint" name="DurationConstraint">
<ownedComment xmi:type="uml:Comment" xmi:id="DurationConstraint-_ownedComment.0" annotatedElement="DurationConstraint">
<body>A DurationConstraint is a Constraint that refers to a DurationInterval.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="DurationConstraint-first_event_multiplicity" name="first_event_multiplicity" constrainedElement="DurationConstraint">
<ownedComment xmi:type="uml:Comment" xmi:id="DurationConstraint-first_event_multiplicity-_ownedComment.0" annotatedElement="DurationConstraint-first_event_multiplicity">
<body>The multiplicity of firstEvent must be 2 if the multiplicity of constrainedElement is 2. Otherwise the multiplicity of firstEvent is 0.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="DurationConstraint-first_event_multiplicity-_specification">
<language>OCL</language>
<body>if (constrainedElement-&gt;size() = 2)&#xD;
then (firstEvent-&gt;size() = 2) else (firstEvent-&gt;size() = 0) &#xD;
endif</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="DurationConstraint-has_one_or_two_constrainedElements" name="has_one_or_two_constrainedElements" constrainedElement="DurationConstraint">
<ownedComment xmi:type="uml:Comment" xmi:id="DurationConstraint-has_one_or_two_constrainedElements-_ownedComment.0" annotatedElement="DurationConstraint-has_one_or_two_constrainedElements">
<body>A DurationConstraint has either one or two constrainedElements.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="DurationConstraint-has_one_or_two_constrainedElements-_specification">
<language>OCL</language>
<body>constrainedElement-&gt;size() = 1 or constrainedElement-&gt;size()=2</body>
</specification>
</ownedRule>
<generalization xmi:type="uml:Generalization" xmi:id="DurationConstraint-_generalization.0" general="IntervalConstraint"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="DurationConstraint-firstEvent" name="firstEvent">
<ownedComment xmi:type="uml:Comment" xmi:id="DurationConstraint-firstEvent-_ownedComment.0" annotatedElement="DurationConstraint-firstEvent">
<body>The value of firstEvent[i] is related to constrainedElement[i] (where i is 1 or 2). If firstEvent[i] is true, then the corresponding observation event is the first time instant the execution enters constrainedElement[i]. If firstEvent[i] is false, then the corresponding observation event is the last time instant the execution is within constrainedElement[i].</body>
</ownedComment>
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Boolean"/>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="DurationConstraint-firstEvent-_upperValue" value="2"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="DurationConstraint-firstEvent-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="DurationConstraint-specification" name="specification" type="DurationInterval" aggregation="composite" redefinedProperty="IntervalConstraint-specification" association="A_specification_durationConstraint">
<ownedComment xmi:type="uml:Comment" xmi:id="DurationConstraint-specification-_ownedComment.0" annotatedElement="DurationConstraint-specification">
<body>The DurationInterval constraining the duration.</body>
</ownedComment>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="DurationInterval" name="DurationInterval">
<ownedComment xmi:type="uml:Comment" xmi:id="DurationInterval-_ownedComment.0" annotatedElement="DurationInterval">
<body>A DurationInterval defines the range between two Durations.</body>
</ownedComment>
<generalization xmi:type="uml:Generalization" xmi:id="DurationInterval-_generalization.0" general="Interval"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="DurationInterval-max" name="max" type="Duration" redefinedProperty="Interval-max" association="A_max_durationInterval">
<ownedComment xmi:type="uml:Comment" xmi:id="DurationInterval-max-_ownedComment.0" annotatedElement="DurationInterval-max">
<body>Refers to the Duration denoting the maximum value of the range.</body>
</ownedComment>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="DurationInterval-min" name="min" type="Duration" redefinedProperty="Interval-min" association="A_min_durationInterval">
<ownedComment xmi:type="uml:Comment" xmi:id="DurationInterval-min-_ownedComment.0" annotatedElement="DurationInterval-min">
<body>Refers to the Duration denoting the minimum value of the range.</body>
</ownedComment>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="DurationObservation" name="DurationObservation">
<ownedComment xmi:type="uml:Comment" xmi:id="DurationObservation-_ownedComment.0" annotatedElement="DurationObservation">
<body>A DurationObservation is a reference to a duration during an execution. It points out the NamedElement(s) in the model to observe and whether the observations are when this NamedElement is entered or when it is exited.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="DurationObservation-first_event_multiplicity" name="first_event_multiplicity" constrainedElement="DurationObservation">
<ownedComment xmi:type="uml:Comment" xmi:id="DurationObservation-first_event_multiplicity-_ownedComment.0" annotatedElement="DurationObservation-first_event_multiplicity">
<body>The multiplicity of firstEvent must be 2 if the multiplicity of event is 2. Otherwise the multiplicity of firstEvent is 0.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="DurationObservation-first_event_multiplicity-_specification">
<language>OCL</language>
<body>if (event-&gt;size() = 2)&#xD;
then (firstEvent-&gt;size() = 2) else (firstEvent-&gt;size() = 0)&#xD;
endif</body>
</specification>
</ownedRule>
<generalization xmi:type="uml:Generalization" xmi:id="DurationObservation-_generalization.0" general="Observation"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="DurationObservation-event" name="event" type="NamedElement" isOrdered="true" association="A_event_durationObservation">
<ownedComment xmi:type="uml:Comment" xmi:id="DurationObservation-event-_ownedComment.0" annotatedElement="DurationObservation-event">
<body>The DurationObservation is determined as the duration between the entering or exiting of a single event Element during execution, or the entering/exiting of one event Element and the entering/exiting of a second.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="DurationObservation-event-_upperValue" value="2"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="DurationObservation-firstEvent" name="firstEvent">
<ownedComment xmi:type="uml:Comment" xmi:id="DurationObservation-firstEvent-_ownedComment.0" annotatedElement="DurationObservation-firstEvent">
<body>The value of firstEvent[i] is related to event[i] (where i is 1 or 2). If firstEvent[i] is true, then the corresponding observation event is the first time instant the execution enters event[i]. If firstEvent[i] is false, then the corresponding observation event is the time instant the execution exits event[i].</body>
</ownedComment>
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Boolean"/>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="DurationObservation-firstEvent-_upperValue" value="2"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="DurationObservation-firstEvent-_lowerValue"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="Expression" name="Expression">
<ownedComment xmi:type="uml:Comment" xmi:id="Expression-_ownedComment.0" annotatedElement="Expression">
<body>An Expression represents a node in an expression tree, which may be non-terminal or terminal. It defines a symbol, and has a possibly empty sequence of operands that are ValueSpecifications. It denotes a (possibly empty) set of values when evaluated in a context.</body>
</ownedComment>
<generalization xmi:type="uml:Generalization" xmi:id="Expression-_generalization.0" general="ValueSpecification"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="Expression-operand" name="operand" type="ValueSpecification" isOrdered="true" aggregation="composite" subsettedProperty="Element-ownedElement" association="A_operand_expression">
<ownedComment xmi:type="uml:Comment" xmi:id="Expression-operand-_ownedComment.0" annotatedElement="Expression-operand">
<body>Specifies a sequence of operand ValueSpecifications.</body>
</ownedComment>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="Expression-operand-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="Expression-operand-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="Expression-symbol" name="symbol">
<ownedComment xmi:type="uml:Comment" xmi:id="Expression-symbol-_ownedComment.0" annotatedElement="Expression-symbol">
<body>The symbol associated with this node in the expression tree.</body>
</ownedComment>
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#String"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="Expression-symbol-_lowerValue"/>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="Interval" name="Interval">
<ownedComment xmi:type="uml:Comment" xmi:id="Interval-_ownedComment.0" annotatedElement="Interval">
<body>An Interval defines the range between two ValueSpecifications.</body>
</ownedComment>
<generalization xmi:type="uml:Generalization" xmi:id="Interval-_generalization.0" general="ValueSpecification"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="Interval-max" name="max" type="ValueSpecification" association="A_max_interval">
<ownedComment xmi:type="uml:Comment" xmi:id="Interval-max-_ownedComment.0" annotatedElement="Interval-max">
<body>Refers to the ValueSpecification denoting the maximum value of the range.</body>
</ownedComment>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="Interval-min" name="min" type="ValueSpecification" association="A_min_interval">
<ownedComment xmi:type="uml:Comment" xmi:id="Interval-min-_ownedComment.0" annotatedElement="Interval-min">
<body>Refers to the ValueSpecification denoting the minimum value of the range.</body>
</ownedComment>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="IntervalConstraint" name="IntervalConstraint">
<ownedComment xmi:type="uml:Comment" xmi:id="IntervalConstraint-_ownedComment.0" annotatedElement="IntervalConstraint">
<body>An IntervalConstraint is a Constraint that is specified by an Interval.</body>
</ownedComment>
<generalization xmi:type="uml:Generalization" xmi:id="IntervalConstraint-_generalization.0" general="Constraint"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="IntervalConstraint-specification" name="specification" type="Interval" aggregation="composite" redefinedProperty="Constraint-specification" association="A_specification_intervalConstraint">
<ownedComment xmi:type="uml:Comment" xmi:id="IntervalConstraint-specification-_ownedComment.0" annotatedElement="IntervalConstraint-specification">
<body>The Interval that specifies the condition of the IntervalConstraint.</body>
</ownedComment>
</ownedAttribute>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="LiteralBoolean" name="LiteralBoolean">
<ownedComment xmi:type="uml:Comment" xmi:id="LiteralBoolean-_ownedComment.0" annotatedElement="LiteralBoolean">
<body>A LiteralBoolean is a specification of a Boolean value.</body>
</ownedComment>
<generalization xmi:type="uml:Generalization" xmi:id="LiteralBoolean-_generalization.0" general="LiteralSpecification"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="LiteralBoolean-value" name="value">
<ownedComment xmi:type="uml:Comment" xmi:id="LiteralBoolean-value-_ownedComment.0" annotatedElement="LiteralBoolean-value">
<body>The specified Boolean value.</body>
</ownedComment>
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Boolean"/>
<defaultValue xmi:type="uml:LiteralBoolean" xmi:id="LiteralBoolean-value-_defaultValue" value="false"/>
</ownedAttribute>
<ownedOperation xmi:type="uml:Operation" xmi:id="LiteralBoolean-booleanValue" name="booleanValue" isQuery="true" redefinedOperation="ValueSpecification-booleanValue" bodyCondition="LiteralBoolean-booleanValue-spec">
<ownedComment xmi:type="uml:Comment" xmi:id="LiteralBoolean-booleanValue-_ownedComment.0" annotatedElement="LiteralBoolean-booleanValue">
<body>The query booleanValue() gives the value.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="LiteralBoolean-booleanValue-spec" name="spec" constrainedElement="LiteralBoolean-booleanValue">
<specification xmi:type="uml:OpaqueExpression" xmi:id="LiteralBoolean-booleanValue-spec-_specification">
<language>OCL</language>
<body>result = (value)</body>
</specification>
</ownedRule>
<ownedParameter xmi:type="uml:Parameter" xmi:id="LiteralBoolean-booleanValue-result" name="result" direction="return">
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Boolean"/>
</ownedParameter>
</ownedOperation>
<ownedOperation xmi:type="uml:Operation" xmi:id="LiteralBoolean-isComputable" name="isComputable" isQuery="true" redefinedOperation="ValueSpecification-isComputable" bodyCondition="LiteralBoolean-isComputable-spec">
<ownedComment xmi:type="uml:Comment" xmi:id="LiteralBoolean-isComputable-_ownedComment.0" annotatedElement="LiteralBoolean-isComputable">
<body>The query isComputable() is redefined to be true.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="LiteralBoolean-isComputable-spec" name="spec" constrainedElement="LiteralBoolean-isComputable">
<specification xmi:type="uml:OpaqueExpression" xmi:id="LiteralBoolean-isComputable-spec-_specification">
<language>OCL</language>
<body>result = (true)</body>
</specification>
</ownedRule>
<ownedParameter xmi:type="uml:Parameter" xmi:id="LiteralBoolean-isComputable-result" name="result" direction="return">
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Boolean"/>
</ownedParameter>
</ownedOperation>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="LiteralInteger" name="LiteralInteger">
<ownedComment xmi:type="uml:Comment" xmi:id="LiteralInteger-_ownedComment.0" annotatedElement="LiteralInteger">
<body>A LiteralInteger is a specification of an Integer value.</body>
</ownedComment>
<generalization xmi:type="uml:Generalization" xmi:id="LiteralInteger-_generalization.0" general="LiteralSpecification"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="LiteralInteger-value" name="value">
<ownedComment xmi:type="uml:Comment" xmi:id="LiteralInteger-value-_ownedComment.0" annotatedElement="LiteralInteger-value">
<body>The specified Integer value.</body>
</ownedComment>
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Integer"/>
<defaultValue xmi:type="uml:LiteralInteger" xmi:id="LiteralInteger-value-_defaultValue" value="0"/>
</ownedAttribute>
<ownedOperation xmi:type="uml:Operation" xmi:id="LiteralInteger-integerValue" name="integerValue" isQuery="true" redefinedOperation="ValueSpecification-integerValue" bodyCondition="LiteralInteger-integerValue-spec">
<ownedComment xmi:type="uml:Comment" xmi:id="LiteralInteger-integerValue-_ownedComment.0" annotatedElement="LiteralInteger-integerValue">
<body>The query integerValue() gives the value.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="LiteralInteger-integerValue-spec" name="spec" constrainedElement="LiteralInteger-integerValue">
<specification xmi:type="uml:OpaqueExpression" xmi:id="LiteralInteger-integerValue-spec-_specification">
<language>OCL</language>
<body>result = (value)</body>
</specification>
</ownedRule>
<ownedParameter xmi:type="uml:Parameter" xmi:id="LiteralInteger-integerValue-result" name="result" direction="return">
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Integer"/>
</ownedParameter>
</ownedOperation>
<ownedOperation xmi:type="uml:Operation" xmi:id="LiteralInteger-isComputable" name="isComputable" isQuery="true" redefinedOperation="ValueSpecification-isComputable" bodyCondition="LiteralInteger-isComputable-spec">
<ownedComment xmi:type="uml:Comment" xmi:id="LiteralInteger-isComputable-_ownedComment.0" annotatedElement="LiteralInteger-isComputable">
<body>The query isComputable() is redefined to be true.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="LiteralInteger-isComputable-spec" name="spec" constrainedElement="LiteralInteger-isComputable">
<specification xmi:type="uml:OpaqueExpression" xmi:id="LiteralInteger-isComputable-spec-_specification">
<language>OCL</language>
<body>result = (true)</body>
</specification>
</ownedRule>
<ownedParameter xmi:type="uml:Parameter" xmi:id="LiteralInteger-isComputable-result" name="result" direction="return">
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Boolean"/>
</ownedParameter>
</ownedOperation>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="LiteralNull" name="LiteralNull">
<ownedComment xmi:type="uml:Comment" xmi:id="LiteralNull-_ownedComment.0" annotatedElement="LiteralNull">
<body>A LiteralNull specifies the lack of a value.</body>
</ownedComment>
<generalization xmi:type="uml:Generalization" xmi:id="LiteralNull-_generalization.0" general="LiteralSpecification"/>
<ownedOperation xmi:type="uml:Operation" xmi:id="LiteralNull-isComputable" name="isComputable" isQuery="true" redefinedOperation="ValueSpecification-isComputable" bodyCondition="LiteralNull-isComputable-spec">
<ownedComment xmi:type="uml:Comment" xmi:id="LiteralNull-isComputable-_ownedComment.0" annotatedElement="LiteralNull-isComputable">
<body>The query isComputable() is redefined to be true.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="LiteralNull-isComputable-spec" name="spec" constrainedElement="LiteralNull-isComputable">
<specification xmi:type="uml:OpaqueExpression" xmi:id="LiteralNull-isComputable-spec-_specification">
<language>OCL</language>
<body>result = (true)</body>
</specification>
</ownedRule>
<ownedParameter xmi:type="uml:Parameter" xmi:id="LiteralNull-isComputable-result" name="result" direction="return">
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Boolean"/>
</ownedParameter>
</ownedOperation>
<ownedOperation xmi:type="uml:Operation" xmi:id="LiteralNull-isNull" name="isNull" isQuery="true" redefinedOperation="ValueSpecification-isNull" bodyCondition="LiteralNull-isNull-spec">
<ownedComment xmi:type="uml:Comment" xmi:id="LiteralNull-isNull-_ownedComment.0" annotatedElement="LiteralNull-isNull">
<body>The query isNull() returns true.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="LiteralNull-isNull-spec" name="spec" constrainedElement="LiteralNull-isNull">
<specification xmi:type="uml:OpaqueExpression" xmi:id="LiteralNull-isNull-spec-_specification">
<language>OCL</language>
<body>result = (true)</body>
</specification>
</ownedRule>
<ownedParameter xmi:type="uml:Parameter" xmi:id="LiteralNull-isNull-result" name="result" direction="return">
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Boolean"/>
</ownedParameter>
</ownedOperation>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="LiteralReal" name="LiteralReal">
<ownedComment xmi:type="uml:Comment" xmi:id="LiteralReal-_ownedComment.0" annotatedElement="LiteralReal">
<body>A LiteralReal is a specification of a Real value.</body>
</ownedComment>
<generalization xmi:type="uml:Generalization" xmi:id="LiteralReal-_generalization.0" general="LiteralSpecification"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="LiteralReal-value" name="value">
<ownedComment xmi:type="uml:Comment" xmi:id="LiteralReal-value-_ownedComment.0" annotatedElement="LiteralReal-value">
<body>The specified Real value.</body>
</ownedComment>
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Real"/>
</ownedAttribute>
<ownedOperation xmi:type="uml:Operation" xmi:id="LiteralReal-isComputable" name="isComputable" isQuery="true" redefinedOperation="ValueSpecification-isComputable" bodyCondition="LiteralReal-isComputable-spec">
<ownedComment xmi:type="uml:Comment" xmi:id="LiteralReal-isComputable-_ownedComment.0" annotatedElement="LiteralReal-isComputable">
<body>The query isComputable() is redefined to be true.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="LiteralReal-isComputable-spec" name="spec" constrainedElement="LiteralReal-isComputable">
<specification xmi:type="uml:OpaqueExpression" xmi:id="LiteralReal-isComputable-spec-_specification">
<language>OCL</language>
<body>result = (true)</body>
</specification>
</ownedRule>
<ownedParameter xmi:type="uml:Parameter" xmi:id="LiteralReal-isComputable-result" name="result" direction="return">
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Boolean"/>
</ownedParameter>
</ownedOperation>
<ownedOperation xmi:type="uml:Operation" xmi:id="LiteralReal-realValue" name="realValue" isQuery="true" redefinedOperation="ValueSpecification-realValue" bodyCondition="LiteralReal-realValue-spec">
<ownedComment xmi:type="uml:Comment" xmi:id="LiteralReal-realValue-_ownedComment.0" annotatedElement="LiteralReal-realValue">
<body>The query realValue() gives the value.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="LiteralReal-realValue-spec" name="spec" constrainedElement="LiteralReal-realValue">
<specification xmi:type="uml:OpaqueExpression" xmi:id="LiteralReal-realValue-spec-_specification">
<language>OCL</language>
<body>result = (value)</body>
</specification>
</ownedRule>
<ownedParameter xmi:type="uml:Parameter" xmi:id="LiteralReal-realValue-result" name="result" direction="return">
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Real"/>
</ownedParameter>
</ownedOperation>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="LiteralSpecification" name="LiteralSpecification" isAbstract="true">
<ownedComment xmi:type="uml:Comment" xmi:id="LiteralSpecification-_ownedComment.0" annotatedElement="LiteralSpecification">
<body>A LiteralSpecification identifies a literal constant being modeled.</body>
</ownedComment>
<generalization xmi:type="uml:Generalization" xmi:id="LiteralSpecification-_generalization.0" general="ValueSpecification"/>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="LiteralString" name="LiteralString">
<ownedComment xmi:type="uml:Comment" xmi:id="LiteralString-_ownedComment.0" annotatedElement="LiteralString">
<body>A LiteralString is a specification of a String value.</body>
</ownedComment>
<generalization xmi:type="uml:Generalization" xmi:id="LiteralString-_generalization.0" general="LiteralSpecification"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="LiteralString-value" name="value">
<ownedComment xmi:type="uml:Comment" xmi:id="LiteralString-value-_ownedComment.0" annotatedElement="LiteralString-value">
<body>The specified String value.</body>
</ownedComment>
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#String"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="LiteralString-value-_lowerValue"/>
</ownedAttribute>
<ownedOperation xmi:type="uml:Operation" xmi:id="LiteralString-isComputable" name="isComputable" isQuery="true" redefinedOperation="ValueSpecification-isComputable" bodyCondition="LiteralString-isComputable-spec">
<ownedComment xmi:type="uml:Comment" xmi:id="LiteralString-isComputable-_ownedComment.0" annotatedElement="LiteralString-isComputable">
<body>The query isComputable() is redefined to be true.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="LiteralString-isComputable-spec" name="spec" constrainedElement="LiteralString-isComputable">
<specification xmi:type="uml:OpaqueExpression" xmi:id="LiteralString-isComputable-spec-_specification">
<language>OCL</language>
<body>result = (true)</body>
</specification>
</ownedRule>
<ownedParameter xmi:type="uml:Parameter" xmi:id="LiteralString-isComputable-result" name="result" direction="return">
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Boolean"/>
</ownedParameter>
</ownedOperation>
<ownedOperation xmi:type="uml:Operation" xmi:id="LiteralString-stringValue" name="stringValue" isQuery="true" redefinedOperation="ValueSpecification-stringValue" bodyCondition="LiteralString-stringValue-spec">
<ownedComment xmi:type="uml:Comment" xmi:id="LiteralString-stringValue-_ownedComment.0" annotatedElement="LiteralString-stringValue">
<body>The query stringValue() gives the value.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="LiteralString-stringValue-spec" name="spec" constrainedElement="LiteralString-stringValue">
<specification xmi:type="uml:OpaqueExpression" xmi:id="LiteralString-stringValue-spec-_specification">
<language>OCL</language>
<body>result = (value)</body>
</specification>
</ownedRule>
<ownedParameter xmi:type="uml:Parameter" xmi:id="LiteralString-stringValue-result" name="result" direction="return">
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#String"/>
</ownedParameter>
</ownedOperation>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="LiteralUnlimitedNatural" name="LiteralUnlimitedNatural">
<ownedComment xmi:type="uml:Comment" xmi:id="LiteralUnlimitedNatural-_ownedComment.0" annotatedElement="LiteralUnlimitedNatural">
<body>A LiteralUnlimitedNatural is a specification of an UnlimitedNatural number.</body>
</ownedComment>
<generalization xmi:type="uml:Generalization" xmi:id="LiteralUnlimitedNatural-_generalization.0" general="LiteralSpecification"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="LiteralUnlimitedNatural-value" name="value">
<ownedComment xmi:type="uml:Comment" xmi:id="LiteralUnlimitedNatural-value-_ownedComment.0" annotatedElement="LiteralUnlimitedNatural-value">
<body>The specified UnlimitedNatural value.</body>
</ownedComment>
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#UnlimitedNatural"/>
<defaultValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="LiteralUnlimitedNatural-value-_defaultValue" value="0"/>
</ownedAttribute>
<ownedOperation xmi:type="uml:Operation" xmi:id="LiteralUnlimitedNatural-isComputable" name="isComputable" isQuery="true" redefinedOperation="ValueSpecification-isComputable" bodyCondition="LiteralUnlimitedNatural-isComputable-spec">
<ownedComment xmi:type="uml:Comment" xmi:id="LiteralUnlimitedNatural-isComputable-_ownedComment.0" annotatedElement="LiteralUnlimitedNatural-isComputable">
<body>The query isComputable() is redefined to be true.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="LiteralUnlimitedNatural-isComputable-spec" name="spec" constrainedElement="LiteralUnlimitedNatural-isComputable">
<specification xmi:type="uml:OpaqueExpression" xmi:id="LiteralUnlimitedNatural-isComputable-spec-_specification">
<language>OCL</language>
<body>result = (true)</body>
</specification>
</ownedRule>
<ownedParameter xmi:type="uml:Parameter" xmi:id="LiteralUnlimitedNatural-isComputable-result" name="result" direction="return">
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Boolean"/>
</ownedParameter>
</ownedOperation>
<ownedOperation xmi:type="uml:Operation" xmi:id="LiteralUnlimitedNatural-unlimitedValue" name="unlimitedValue" isQuery="true" redefinedOperation="ValueSpecification-unlimitedValue" bodyCondition="LiteralUnlimitedNatural-unlimitedValue-spec">
<ownedComment xmi:type="uml:Comment" xmi:id="LiteralUnlimitedNatural-unlimitedValue-_ownedComment.0" annotatedElement="LiteralUnlimitedNatural-unlimitedValue">
<body>The query unlimitedValue() gives the value.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="LiteralUnlimitedNatural-unlimitedValue-spec" name="spec" constrainedElement="LiteralUnlimitedNatural-unlimitedValue">
<specification xmi:type="uml:OpaqueExpression" xmi:id="LiteralUnlimitedNatural-unlimitedValue-spec-_specification">
<language>OCL</language>
<body>result = (value)</body>
</specification>
</ownedRule>
<ownedParameter xmi:type="uml:Parameter" xmi:id="LiteralUnlimitedNatural-unlimitedValue-result" name="result" direction="return">
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#UnlimitedNatural"/>
</ownedParameter>
</ownedOperation>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="Observation" name="Observation" isAbstract="true">
<ownedComment xmi:type="uml:Comment" xmi:id="Observation-_ownedComment.0" annotatedElement="Observation">
<body>Observation specifies a value determined by observing an event or events that occur relative to other model Elements.</body>
</ownedComment>
<generalization xmi:type="uml:Generalization" xmi:id="Observation-_generalization.0" general="PackageableElement"/>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="OpaqueExpression" name="OpaqueExpression">
<ownedComment xmi:type="uml:Comment" xmi:id="OpaqueExpression-_ownedComment.0" annotatedElement="OpaqueExpression">
<body>An OpaqueExpression is a ValueSpecification that specifies the computation of a collection of values either in terms of a UML Behavior or based on a textual statement in a language other than UML</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="OpaqueExpression-language_body_size" name="language_body_size" constrainedElement="OpaqueExpression">
<ownedComment xmi:type="uml:Comment" xmi:id="OpaqueExpression-language_body_size-_ownedComment.0" annotatedElement="OpaqueExpression-language_body_size">
<body>If the language attribute is not empty, then the size of the body and language arrays must be the same.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="OpaqueExpression-language_body_size-_specification">
<language>OCL</language>
<body>language-&gt;notEmpty() implies (_'body'-&gt;size() = language-&gt;size())</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="OpaqueExpression-one_return_result_parameter" name="one_return_result_parameter" constrainedElement="OpaqueExpression">
<ownedComment xmi:type="uml:Comment" xmi:id="OpaqueExpression-one_return_result_parameter-_ownedComment.0" annotatedElement="OpaqueExpression-one_return_result_parameter">
<body>The behavior must have exactly one return result parameter.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="OpaqueExpression-one_return_result_parameter-_specification">
<language>OCL</language>
<body>behavior &lt;&gt; null implies&#xD;
behavior.ownedParameter-&gt;select(direction=ParameterDirectionKind::return)-&gt;size() = 1</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="OpaqueExpression-only_return_result_parameters" name="only_return_result_parameters" constrainedElement="OpaqueExpression">
<ownedComment xmi:type="uml:Comment" xmi:id="OpaqueExpression-only_return_result_parameters-_ownedComment.0" annotatedElement="OpaqueExpression-only_return_result_parameters">
<body>The behavior may only have return result parameters.</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="OpaqueExpression-only_return_result_parameters-_specification">
<language>OCL</language>
<body>behavior &lt;&gt; null implies behavior.ownedParameter-&gt;select(direction&lt;&gt;ParameterDirectionKind::return)-&gt;isEmpty()</body>
</specification>
</ownedRule>
<generalization xmi:type="uml:Generalization" xmi:id="OpaqueExpression-_generalization.0" general="ValueSpecification"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="OpaqueExpression-behavior" name="behavior" type="Behavior" association="A_behavior_opaqueExpression">
<ownedComment xmi:type="uml:Comment" xmi:id="OpaqueExpression-behavior-_ownedComment.0" annotatedElement="OpaqueExpression-behavior">
<body>Specifies the behavior of the OpaqueExpression as a UML Behavior.</body>
</ownedComment>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="OpaqueExpression-behavior-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="OpaqueExpression-body" name="body" isOrdered="true" isUnique="false">
<ownedComment xmi:type="uml:Comment" xmi:id="OpaqueExpression-body-_ownedComment.0" annotatedElement="OpaqueExpression-body">
<body>A textual definition of the behavior of the OpaqueExpression, possibly in multiple languages.</body>
</ownedComment>
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#String"/>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="OpaqueExpression-body-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="OpaqueExpression-body-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="OpaqueExpression-language" name="language" isOrdered="true">
<ownedComment xmi:type="uml:Comment" xmi:id="OpaqueExpression-language-_ownedComment.0" annotatedElement="OpaqueExpression-language">
<body>Specifies the languages used to express the textual bodies of the OpaqueExpression. Languages are matched to body Strings by order. The interpretation of the body depends on the languages. If the languages are unspecified, they may be implicit from the expression body or the context.</body>
</ownedComment>
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#String"/>
<upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="OpaqueExpression-language-_upperValue" value="*"/>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="OpaqueExpression-language-_lowerValue"/>
</ownedAttribute>
<ownedAttribute xmi:type="uml:Property" xmi:id="OpaqueExpression-result" name="result" type="Parameter" isReadOnly="true" isDerived="true" association="A_result_opaqueExpression">
<ownedComment xmi:type="uml:Comment" xmi:id="OpaqueExpression-result-_ownedComment.0" annotatedElement="OpaqueExpression-result">
<body>If an OpaqueExpression is specified using a UML Behavior, then this refers to the single required return Parameter of that Behavior. When the Behavior completes execution, the values on this Parameter give the result of evaluating the OpaqueExpression.</body>
</ownedComment>
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="OpaqueExpression-result-_lowerValue"/>
</ownedAttribute>
<ownedOperation xmi:type="uml:Operation" xmi:id="OpaqueExpression-isIntegral" name="isIntegral" isQuery="true" bodyCondition="OpaqueExpression-isIntegral-spec">
<ownedComment xmi:type="uml:Comment" xmi:id="OpaqueExpression-isIntegral-_ownedComment.0" annotatedElement="OpaqueExpression-isIntegral">
<body>The query isIntegral() tells whether an expression is intended to produce an Integer.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="OpaqueExpression-isIntegral-spec" name="spec" constrainedElement="OpaqueExpression-isIntegral">
<specification xmi:type="uml:OpaqueExpression" xmi:id="OpaqueExpression-isIntegral-spec-_specification">
<language>OCL</language>
<body>result = (false)</body>
</specification>
</ownedRule>
<ownedParameter xmi:type="uml:Parameter" xmi:id="OpaqueExpression-isIntegral-result" name="result" direction="return">
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Boolean"/>
</ownedParameter>
</ownedOperation>
<ownedOperation xmi:type="uml:Operation" xmi:id="OpaqueExpression-isNonNegative" name="isNonNegative" isQuery="true" precondition="OpaqueExpression-isNonNegative-pre" bodyCondition="OpaqueExpression-isNonNegative-spec">
<ownedComment xmi:type="uml:Comment" xmi:id="OpaqueExpression-isNonNegative-_ownedComment.0" annotatedElement="OpaqueExpression-isNonNegative">
<body>The query isNonNegative() tells whether an integer expression has a non-negative value.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="OpaqueExpression-isNonNegative-pre" name="pre" constrainedElement="OpaqueExpression-isNonNegative">
<specification xmi:type="uml:OpaqueExpression" xmi:id="OpaqueExpression-isNonNegative-pre-_specification">
<language>OCL</language>
<body>self.isIntegral()</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="OpaqueExpression-isNonNegative-spec" name="spec" constrainedElement="OpaqueExpression-isNonNegative">
<specification xmi:type="uml:OpaqueExpression" xmi:id="OpaqueExpression-isNonNegative-spec-_specification">
<language>OCL</language>
<body>result = (false)</body>
</specification>
</ownedRule>
<ownedParameter xmi:type="uml:Parameter" xmi:id="OpaqueExpression-isNonNegative-result" name="result" direction="return">
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Boolean"/>
</ownedParameter>
</ownedOperation>
<ownedOperation xmi:type="uml:Operation" xmi:id="OpaqueExpression-isPositive" name="isPositive" isQuery="true" precondition="OpaqueExpression-isPositive-pre" bodyCondition="OpaqueExpression-isPositive-spec">
<ownedComment xmi:type="uml:Comment" xmi:id="OpaqueExpression-isPositive-_ownedComment.0" annotatedElement="OpaqueExpression-isPositive">
<body>The query isPositive() tells whether an integer expression has a positive value.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="OpaqueExpression-isPositive-spec" name="spec" constrainedElement="OpaqueExpression-isPositive">
<specification xmi:type="uml:OpaqueExpression" xmi:id="OpaqueExpression-isPositive-spec-_specification">
<language>OCL</language>
<body>result = (false)</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="OpaqueExpression-isPositive-pre" name="pre" constrainedElement="OpaqueExpression-isPositive">
<specification xmi:type="uml:OpaqueExpression" xmi:id="OpaqueExpression-isPositive-pre-_specification">
<language>OCL</language>
<body>self.isIntegral()</body>
</specification>
</ownedRule>
<ownedParameter xmi:type="uml:Parameter" xmi:id="OpaqueExpression-isPositive-result" name="result" direction="return">
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Boolean"/>
</ownedParameter>
</ownedOperation>
<ownedOperation xmi:type="uml:Operation" xmi:id="OpaqueExpression-result.1" name="result" isQuery="true" bodyCondition="OpaqueExpression-result.1-spec">
<ownedComment xmi:type="uml:Comment" xmi:id="OpaqueExpression-result.1-_ownedComment.0" annotatedElement="OpaqueExpression-result.1">
<body>Derivation for OpaqueExpression::/result </body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="OpaqueExpression-result.1-spec" name="spec" constrainedElement="OpaqueExpression-result.1 OpaqueExpression-result">
<specification xmi:type="uml:OpaqueExpression" xmi:id="OpaqueExpression-result.1-spec-_specification">
<language>OCL</language>
<body>result = (if behavior = null then&#xD;
null&#xD;
else&#xD;
behavior.ownedParameter-&gt;first()&#xD;
endif)</body>
</specification>
</ownedRule>
<ownedParameter xmi:type="uml:Parameter" xmi:id="OpaqueExpression-result.1-result" name="result" type="Parameter" direction="return">
<lowerValue xmi:type="uml:LiteralInteger" xmi:id="OpaqueExpression-result.1-result-_lowerValue"/>
</ownedParameter>
</ownedOperation>
<ownedOperation xmi:type="uml:Operation" xmi:id="OpaqueExpression-value" name="value" isQuery="true" precondition="OpaqueExpression-value-pre" bodyCondition="OpaqueExpression-value-spec">
<ownedComment xmi:type="uml:Comment" xmi:id="OpaqueExpression-value-_ownedComment.0" annotatedElement="OpaqueExpression-value">
<body>The query value() gives an integer value for an expression intended to produce one.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="OpaqueExpression-value-pre" name="pre" constrainedElement="OpaqueExpression-value">
<specification xmi:type="uml:OpaqueExpression" xmi:id="OpaqueExpression-value-pre-_specification">
<language>OCL</language>
<body>self.isIntegral()</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="OpaqueExpression-value-spec" name="spec" constrainedElement="OpaqueExpression-value">
<specification xmi:type="uml:OpaqueExpression" xmi:id="OpaqueExpression-value-spec-_specification">
<language>OCL</language>
<body>result = (0)</body>
</specification>
</ownedRule>
<ownedParameter xmi:type="uml:Parameter" xmi:id="OpaqueExpression-value-result" name="result" direction="return">
<type xmi:type="uml:PrimitiveType" href="http://www.omg.org/spec/UML/20131001/PrimitiveTypes.xmi#Integer"/>
</ownedParameter>
</ownedOperation>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="StringExpression" name="StringExpression">
<ownedComment xmi:type="uml:Comment" xmi:id="StringExpression-_ownedComment.0" annotatedElement="StringExpression">
<body>A StringExpression is an Expression that specifies a String value that is derived by concatenating a sequence of operands with String values or a sequence of subExpressions, some of which might be template parameters.</body>
</ownedComment>
<ownedRule xmi:type="uml:Constraint" xmi:id="StringExpression-operands" name="operands" constrainedElement="StringExpression">
<ownedComment xmi:type="uml:Comment" xmi:id="StringExpression-operands-_ownedComment.0" annotatedElement="StringExpression-operands">
<body>All the operands of a StringExpression must be LiteralStrings</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="StringExpression-operands-_specification">
<language>OCL</language>
<body>operand-&gt;forAll (oclIsKindOf (LiteralString))</body>
</specification>
</ownedRule>
<ownedRule xmi:type="uml:Constraint" xmi:id="StringExpression-subexpressions" name="subexpressions" constrainedElement="StringExpression">
<ownedComment xmi:type="uml:Comment" xmi:id="StringExpression-subexpressions-_ownedComment.0" annotatedElement="StringExpression-subexpressions">
<body>If a StringExpression has sub-expressions, it cannot have operands and vice versa (this avoids the problem of having to define a collating sequence between operands and subexpressions).</body>
</ownedComment>
<specification xmi:type="uml:OpaqueExpression" xmi:id="StringExpression-subexpressions-_specification">
<language>OCL</language>
<body>if subExpression-&gt;notEmpty() then operand-&gt;isEmpty() else operand-&gt;notEmpty() endif</body>
</specification>
</ownedRule>
<generalization xmi:type="uml:Generalization"