From 74b75e5b343a105894f1b1f176eecf2b7a5fdb72 Mon Sep 17 00:00:00 2001 From: Ed Seidewitz Date: Wed, 20 May 2026 22:18:53 -0700 Subject: [PATCH 1/6] ST6RI-934 Update all .uml files for the 2026-05 abstract syntax model. - Updated URI version to 20260501. --- org.omg.sysml/model/KerML_only.uml | 6931 +++-- org.omg.sysml/model/KerML_only_xmi.uml | 225 +- org.omg.sysml/model/SysML.uml | 22638 ++++++++-------- org.omg.sysml/model/SysML_only.uml | 13633 +++++----- org.omg.sysml/model/SysML_only_xmi.uml | 103 +- org.omg.sysml/model/SysML_xmi.uml | 326 +- .../transforms/PrepareMetamodel.qvto | 2 +- 7 files changed, 21925 insertions(+), 21933 deletions(-) diff --git a/org.omg.sysml/model/KerML_only.uml b/org.omg.sysml/model/KerML_only.uml index 62dc703f0..90942e1aa 100644 --- a/org.omg.sysml/model/KerML_only.uml +++ b/org.omg.sysml/model/KerML_only.uml @@ -1,284 +1,182 @@ - - - - <p>A <code>TextualRepresentation</code> is an <code>AnnotatingElement</code> whose <code>body</code> represents the <code>representedElement</code> in a given <code>language</code>. The <code>representedElement</code> must be the <code>owner</code> of the <code>TextualRepresentation</code>. The named <code>language</code> can be a natural language, in which case the <code>body</code> is an informal representation, or an artificial language, in which case the <code>body</code> is expected to be a formal, machine-parsable representation.</p> - -<p>If the named <code>language</code> of a <code>TextualRepresentation</code> is machine-parsable, then the <code>body</code> text should be legal input text as defined for that <code>language</code>. The interpretation of the named language string shall be case insensitive. The following <code>language</code> names are defined to correspond to the given standard languages:</p> - -<table border="1" cellpadding="1" cellspacing="1" width="498"> - <thead> - </thead> - <tbody> - <tr> - <td style="text-align: center; width: 154px;"><code>kerml</code></td> - <td style="width: 332px;">Kernel Modeling Language</td> - </tr> - <tr> - <td style="text-align: center; width: 154px;"><code>ocl</code></td> - <td style="width: 332px;">Object Constraint Language</td> - </tr> - <tr> - <td style="text-align: center; width: 154px;"><code>alf</code></td> - <td style="width: 332px;">Action Language for fUML</td> - </tr> - </tbody> -</table> - -<p>Other specifications may define specific <code>language</code> strings, other than those shown above, to be used to indicate the use of languages from those specifications in KerML <code>TextualRepresentation</code>.</p> - -<p>If the <code>language</code> of a <code>TextualRepresentation</code> is &quot;<code>kerml</code>&quot;, then the <code>body</code> text shall be a legal representation of the <code>representedElement</code> in the KerML textual concrete syntax. A conforming tool can use such a <code>TextualRepresentation</code> <code>Annotation</code> to record the original KerML concrete syntax text from which an <code>Element</code> was parsed. In this case, it is a tool responsibility to ensure that the <code>body</code> of the <code>TextualRepresentation</code> remains correct (or the Annotation is removed) if the annotated <code>Element</code> changes other than by re-parsing the <code>body</code> text.</p> + + + + + + <p>The Namespace with a certain <code>importedMembership</code>.</p> + + + + + + + + <p>An <code>Import</code> is an <code>Relationship</code> between its <code>importOwningNamespace</code> and either a <code>Membership</code> (for a <code>MembershipImport</code>) or another <code>Namespace</code> (for a <code>NamespaceImport</code>), which determines a set of <code>Memberships</code> that become <code>importedMemberships</code> of the <code>importOwningNamespace</code>. If <code>isImportAll = false</code> (the default), then only public <code>Memberships</code> are considered &quot;visible&quot;. If <code>isImportAll = true</code>, then all <code>Memberships</code> are considered &quot;visible&quot;, regardless of their declared <code>visibility</code>. If <code>isRecursive = true</code>, then visible <code>Memberships</code> are also recursively imported from owned sub-<code>Namespaces</code>.</p> -<p>An <code>Element</code> with a <code>TextualRepresentation</code> in a language other than KerML is essentially a semantically &quot;opaque&quot; <code>Element</code> specified in the other language. However, a conforming KerML tool may interpret such an element consistently with the specification of the named language.</p> - - - - <p>The natural or artifical language in which the <code>body</code> text is written.</p> + + + <p>A top-level <code>Import</code> (that is, one that is owned by a root <code>Namespace</code>) must have a <code>visibility</code> of <code>private</code>.</p> + + + OCL2.0 + importOwningNamespace.owner = null implies + visibility = VisibilityKind::private + + + + + + <p>The Namespace into which Memberships are imported by this Import, which must be the <code>owningRelatedElement</code> of the Import.</p> - - - + + - - - <p>The <code>Element</code> that is represented by this <code>TextualRepresentation</code>.</p> + + + <p>The visibility level of the imported <code>members</code> from this Import relative to the <code>importOwningNamespace</code>. The default is <code>private</code>.</p> - - + - - - <p>The textual representation of the <code>representedElement</code> in the given <code>language</code>.</p> + + + <p>Whether to recursively import Memberships from visible, owned sub-Namespaces.</p> + + + + + + + <p>Whether to import memberships without regard to declared visibility.</p> - - - + + - - - - <p>An <code>Annotation</code> is a Relationship between an <code>AnnotatingElement</code> and the <code>Element</code> that is annotated by that <code>AnnotatingElement</code>.</p> + + + <p>The effectively imported <code>Element</code> for this </code>Import</code>. For a <code>MembershipImport</code>, this is the <code>memberElement</code> of the <code>importedMembership</code>. For a <code>NamespaceImport</code>, it is the <code>importedNamespace</code>.</p> + + + + + + + <p>Returns Memberships that are to become <code>importedMemberships</code> of the <code>importOwningNamespace</code>. (The <code>excluded</code> parameter is used to handle the possibility of circular Import Relationships.)</p> - - - - <p>An <code>Annotation</code> owns its <code>annotatingElement</code> if and only if it is owned by its <code>annotatedElement</code>.</p> - - OCL2.0 - (owningAnnotatedElement <> null) = (ownedAnnotatingElement <> null) - - - - - <p>Either the <code>ownedAnnotatingElement</code> of an <code>Annotation</code> must be non-null, or the <code>owningAnnotatingElement</code> must be non-null, but not both.</p> + + + + + + + + + + + + + + <p>An Import with a certain <code>importedElement</code>.</p> - - OCL2.0 - ownedAnnotatingElement <> null xor owningAnnotatingElement <> null - - - - - <p>The <code>ownedAnnotatingElement</code> of an <code>Annotation</code> is the first <code>ownedRelatedElement</code> that is an <code>AnnotatingElement</code>, if any.</p> + + + + + + + <p>A <code>Membership</code> is a <code>Relationship</code> between a <code>Namespace</code> and an <code>Element</code> that indicates the <code>Element</code> is a <code>member</code> of (i.e., is contained in) the Namespace. Any <code>memberNames</code> specify how the <code>memberElement</code> is identified in the <code>Namespace</code> and the <code>visibility</code> specifies whether or not the <code>memberElement</code> is publicly visible from outside the <code>Namespace</code>.</p> + +<p>If a <code>Membership</code> is an <code>OwningMembership</code>, then it owns its <code>memberElement</code>, which becomes an <code>ownedMember</code> of the <code>membershipOwningNamespace</code>. Otherwise, the <code>memberNames</code> of a <code>Membership</code> are effectively aliases within the <code>membershipOwningNamespace</code> for an <code>Element</code> with a separate <code>OwningMembership</code> in the same or a different <code>Namespace</code>.</p> + +<p>&nbsp;</p> + + + + + <p>The <code>memberElementId</code> of a <code>Membership</code> is the <code>elementId</code> of its <code>memberElement</code>.</p> - + OCL2.0 - ownedAnnotatingElement = - let ownedAnnotatingElements : Sequence(AnnotatingElement) = - ownedRelatedElement->selectByKind(AnnotatingElement) in - if ownedAnnotatingElements->isEmpty() then null - else ownedAnnotatingElements->first() - endif + memberElementId = memberElement.elementId - - - <p>The <code>annotatingElement</code> of an <code>Annotation</code> is either its <code>ownedAnnotatingElement</code> or its <code>owningAnnotatingElement</code>.</p> + + + + <p>The <code>elementId</code> of the <code>memberElement</code>.</p> - - OCL2.0 - annotatingElement = - if ownedAnnotatingElement <> null then ownedAnnotatingElement - else owningAnnotatingElement - endif - - - - - - <p>The <code>AnnotatingElement</code> that annotates the <code>annotatedElement</code> of this <code>Annotation</code>. This is always either the <code>ownedAnnotatingElement</code> or the <code>owningAnnotatingElement</code>.</p> + + + + + <p>The <code>Namespace</code> of which the <code>memberElement</code> becomes a <code>member</code> due to this <code>Membership</code>.</p> - - + + - - - <p>The <code>Element</code> that is annotated by the <code>annotatingElement</code> of this Annotation.</p> - + + + <p>The short name of the <code>memberElement</code> relative to the <code>membershipOwningNamespace</code>.</p> - - + + + - - - <p>The <code>annotatedElement</code> of this <code>Annotation</code>, when it is also the <code>owningRelatedElement</code>.</p> + + + <p>The <code>Element</code> that becomes a <code>member</code> of the <code>membershipOwningNamespace</code> due to this <code>Membership</code>.</p> - - + + - - - <p>The <code>annotatingElement</code> of this <code>Annotation</code>, when it is the <code>owningRelatedElement</code>.</p> + + + <p>The name of the <code>memberElement</code> relative to the <code>membershipOwningNamespace</code>.</p> + - - + + + - - - <p>The <code>annotatingElement</code> of this <code>Annotation</code>, when it is an <code>ownedRelatedElement</code>.</p> + + + <p>Whether or not the <code>Membership</code> of the <code>memberElement</code> in the <code>membershipOwningNamespace</code> is publicly visible outside that <code>Namespace</code>.</p> + - - + - - - - - <p><code>Documentation</code> is a <code>Comment</code> that specifically documents a <code>documentedElement</code>, which must be its <code>owner</code>.</p> - - - - - - <p>The <code>Element</code> that is documented by this <code>Documentation</code>.</p> + + + <p>Whether this <code>Membership</code> is distinguishable from a given <code>other</code> <code>Membership</code>. By default, this is true if this <code>Membership</code> has no <code>memberShortName</code> or <code>memberName</code>; or each of the <code>memberShortName</code> and <code>memberName</code> are different than both of those of the <code>other</code> <code>Membership</code>; or neither of the metaclasses of the <code>memberElement</code> of this <code>Membership</code> and the <code>memberElement</code> of the <code>other</code> <code>Membership</code> conform to the other. But this may be overridden in specializations of <code>Membership</code>.</p> - - - - - - - <p>A <code>Comment</code> is an <code>AnnotatingElement</code> whose <code>body</code> in some way describes its <code>annotatedElements</code>.</p> - - - - - - <p>Identification of the language of the <code>body</code> text and, optionally, the region and/or encoding. The format shall be a POSIX locale conformant to ISO/IEC 15897, with the format <code>[language[_territory][.codeset][@modifier]]</code>.</p> - - - - - - - - <p>The annotation text for the <code>Comment</code>.</p> - - - - - - - - - - - <p>The AnnotatingElements that have a certain Element as their <code>annotatedElement</code>.</p> - - - - - - - - - - <p>The Annotations associated with a certain <code>annotatedElement</code>.</p> - - - - - - - - - <p>An <code>AnnotatingElement</code> is an <code>Element</code> that provides additional description of or metadata on some other <code>Element</code>. An <code>AnnotatingElement</code> is either attached to its <code>annotatedElements</code> by <code>Annotation</code> <code>Relationships</code>, or it implicitly annotates its <code>owningNamespace</code>.</p> - - - - - <p>If an <code>AnnotatingElement</code> has <code>annotations</code>, then its <code>annotatedElements</code> are the <code>annotatedElements</code> of all its <code>annotations</code>. Otherwise, it's single <code>annotatedElement</code> is its <code>owningNamespace</code>.</p> - - - OCL2.0 - annotatedElement = - if annotation->notEmpty() then annotation.annotatedElement - else Sequence{owningNamespace} endif - - - - - <p>The <code>ownedAnnotatingRelationships</code> of an <code>AnnotatingElement</code> are its <code>ownedRelationships</code> that are <code>Annotations</code>, for which the <code>AnnotatingElement</code> is not the <code>annotatedElement</code>.</p> - - - OCL2.0 - ownedAnnotatingRelationship = ownedRelationship-> - selectByKind(Annotation)-> - select(a | a.annotatedElement <> self) - - - - - <p>The <code>annotations</code> of an <code>AnnotatingElement</code> are its <code>owningAnnotatingRelationship</code> (if any) followed by all its <code>ownedAnnotatingRelationships</code>.</p> - - - OCL2.0 - annotation = - if owningAnnotatingRelationship = null then ownedAnnotatingRelationship - else owningAnnotatingRelationship->prepend(owningAnnotatingRelationship) - endif - - - - - - <p>The <code>Elements</code> that are annotated by this <code>AnnotatingElement</code>. If <code>annotation</code> is not empty, these are the <code>annotatedElements</code> of the <code>annotations</code>. If <code>annotation</code> is empty, then it is the <code>owningNamespace</code> of the <code>AnnotatingElement</code>.</p> - - - - - - - - <p>The <code>ownedRelationships</code> of this <code>AnnotatingElement</code> that are <code>Annotations</code>, for which this <code>AnnotatingElement</code> is the <code>annotatingElement</code>.</p> - - - - - - - <p>The <code>owningRelationship</code> of this <code>AnnotatingRelationship</code>, if it is an <code>Annotation</code></p> - - - - - - - <p>The <code>Annotations</code> that relate this <code>AnnotatingElement</code> to its <code>annotatedElements</code>. This includes the <code>owningAnnotatingRelationship</code> (if any) followed by all the <code>ownedAnnotatingRelationshps</code>.</p> + + + OCL2.0 + not (memberElement.oclKindOf(other.memberElement.oclType()) or + other.memberElement.oclKindOf(memberElement.oclType())) or +(shortMemberName = null or + (shortMemberName <> other.shortMemberName and + shortMemberName <> other.memberName)) and +(memberName = null or + (memberName <> other.shortMemberName and + memberName <> other.memberName))) - - - - + + + + + + + @@ -583,7 +481,7 @@ else let memberships : Membership = membership-> select(memberShortName = name or memberName = name) in if memberships->notEmpty() then memberships->first() - else owningNamspace.resolveLocal(name) + else owningNamespace.resolveLocal(name) endif endif @@ -657,96 +555,15 @@ endif - - - <p>An <code>OwningMembership</code> is a <code>Membership</code> that owns its <code>memberElement</code> as a <code>ownedRelatedElement</code>. The <code>ownedMemberElement</code> becomes an <code>ownedMember</code> of the <code>membershipOwningNamespace</code>.</p> - - - - - <p>The <code>ownedMemberName</code> of an <code>OwningMembership</code> is the <code>name</code> of its <code>ownedMemberElement</code>.</p> - - - OCL2.0 - ownedMemberName = ownedMemberElement.name - - - - - <p>The <code>ownedMemberShortName</code> of an <code>OwningMembership</code> is the <code>shortName</code> of its <code>ownedMemberElement</code>.</p> - - - OCL2.0 - ownedMemberShortName = ownedMemberElement.shortName - - - - - - <p>The <code>Element</code> that becomes an <code>ownedMember</code> of the <code>membershipOwningNamespace</code> due to this <code>OwningMembership</code>.</p> - - - - - - - - <p>The <code>elementId</code> of the <code>ownedMemberElement</code>.</p> - - - - - - <p>The <code>shortName</code> of the <code>ownedMemberElement</code>.</p> - - - - - - - - <p>The <code>name</code> of the <code>ownedMemberElement</code>.</p> - - - - - - - - - <p>If the <code>ownedMemberElement</code> of this <code>OwningMembership</code> has a non-null <code>qualifiedName</code>, then return the string constructed by appending to that <code>qualifiedName</code> the string <code>"/owningMembership"</code>. Otherwise, return the <code>path</code> of the <code>OwningMembership</code> as specified for a <code>Relationship</code> in general. - - - - OCL2.0 - if ownedElement.qualifiedName <> null then - ownedElement.qualifiedName + '/owningMembership' -else self.oclAsType(Relationship).path() -endif - - - - - - - - - - - <p>An Import with a certain <code>importedElement</code>.</p> - - - - - - - - - <p>The Namespace with a certain <code>importedMembership</code>.</p> + + + + + <p>A MembershipImport that has a certain <code>importedMembership</code>.</p> - - + + @@ -800,74 +617,27 @@ endif - - - <p>An <code>Import</code> is an <code>Relationship</code> between its <code>importOwningNamespace</code> and either a <code>Membership</code> (for a <code>MembershipImport</code>) or another <code>Namespace</code> (for a <code>NamespaceImport</code>), which determines a set of <code>Memberships</code> that become <code>importedMemberships</code> of the <code>importOwningNamespace</code>. If <code>isImportAll = false</code> (the default), then only public <code>Memberships</code> are considered &quot;visible&quot;. If <code>isImportAll = true</code>, then all <code>Memberships</code> are considered &quot;visible&quot;, regardless of their declared <code>visibility</code>. If <code>isRecursive = true</code>, then visible <code>Memberships</code> are also recursively imported from owned sub-<code>Namespaces</code>.</p> - + + + <p><code>VisibilityKind</code> is an enumeration whose literals specify the visibility of a <code>Membership</code> of an <code>Element</code> in a <code>Namespace</code> outside of that <code>Namespace</code>. Note that &quot;visibility&quot; specifically restricts whether an <code>Element</code> in a <code>Namespace</code> may be referenced by name from outside the <code>Namespace</code> and only otherwise restricts access to an <code>Element</code> as provided by specific constraints in the abstract syntax (e.g., preventing the import or inheritance of private <code>Elements</code>).</p> - - - <p>A top-level <code>Import</code> (that is, one that is owned by a root <code>Namespace</code>) must have a <code>visibility</code> of <code>private</code>.</p> + + + <p>Indicates a <code>Membership</code> is not visible outside its owning <code>Namespace</code>.</p> - - OCL2.0 - importOwningNamespace.owner = null implies - visibility = VisibilityKind::private - - - - - - <p>The Namespace into which Memberships are imported by this Import, which must be the <code>owningRelatedElement</code> of the Import.</p> + + + + <p>An intermediate level of visibility between <code>public</code> and <code>private</code>. By default, it is equivalent to <code>private</code> for the purposes of normal access to and import of <code>Elements</code> from a <code>Namespace</code>. However, other <code>Relationships</code> may be specified to include <code>Memberships</code> with <code>protected</code> visibility in the list of <code>memberships</code> for a <code>Namespace</code> (e.g., <code>Specialization</code>).</p> - - - - - - <p>The visibility level of the imported <code>members</code> from this Import relative to the <code>importOwningNamespace</code>. The default is <code>private</code>.</p> - - - - - - - <p>Whether to recursively import Memberships from visible, owned sub-Namespaces.</p> - - - - - - - <p>Whether to import memberships without regard to declared visibility.</p> - - - - - - - - <p>The effectively imported <code>Element</code> for this </code>Import</code>. For a <code>MembershipImport</code>, this is the <code>memberElement</code> of the <code>importedMembership</code>. For a <code>NamespaceImport</code>, it is the <code>importedNamespace</code>.</p> - - - - - - - <p>Returns Memberships that are to become <code>importedMemberships</code> of the <code>importOwningNamespace</code>. (The <code>excluded</code> parameter is used to handle the possibility of circular Import Relationships.)</p> - + + + + <p>Indicates that a <code>Membership</code> is publicly visible outside its owning <code>Namespace</code>.</p> - - - - - - - - - + @@ -878,147 +648,6 @@ endif - - - - <p>A NamespaceImport that has a certain <code>importedNamespace</code>.</p> - - - - - - - - - <p>The Membership with a certain Element as its <code>memberElement</code>.</p> - - - - - - - - <p><code>VisibilityKind</code> is an enumeration whose literals specify the visibility of a <code>Membership</code> of an <code>Element</code> in a <code>Namespace</code> outside of that <code>Namespace</code>. Note that &quot;visibility&quot; specifically restricts whether an <code>Element</code> in a <code>Namespace</code> may be referenced by name from outside the <code>Namespace</code> and only otherwise restricts access to an <code>Element</code> as provided by specific constraints in the abstract syntax (e.g., preventing the import or inheritance of private <code>Elements</code>).</p> - - - - - <p>Indicates a <code>Membership</code> is not visible outside its owning <code>Namespace</code>.</p> - - - - - <p>An intermediate level of visibility between <code>public</code> and <code>private</code>. By default, it is equivalent to <code>private</code> for the purposes of normal access to and import of <code>Elements</code> from a <code>Namespace</code>. However, other <code>Relationships</code> may be specified to include <code>Memberships</code> with <code>protected</code> visibility in the list of <code>memberships</code> for a <code>Namespace</code> (e.g., <code>Specialization</code>).</p> - - - - - - <p>Indicates that a <code>Membership</code> is publicly visible outside its owning <code>Namespace</code>.</p> - - - - - - - - <p>A <code>Membership</code> is a <code>Relationship</code> between a <code>Namespace</code> and an <code>Element</code> that indicates the <code>Element</code> is a <code>member</code> of (i.e., is contained in) the Namespace. Any <code>memberNames</code> specify how the <code>memberElement</code> is identified in the <code>Namespace</code> and the <code>visibility</code> specifies whether or not the <code>memberElement</code> is publicly visible from outside the <code>Namespace</code>.</p> - -<p>If a <code>Membership</code> is an <code>OwningMembership</code>, then it owns its <code>memberElement</code>, which becomes an <code>ownedMember</code> of the <code>membershipOwningNamespace</code>. Otherwise, the <code>memberNames</code> of a <code>Membership</code> are effectively aliases within the <code>membershipOwningNamespace</code> for an <code>Element</code> with a separate <code>OwningMembership</code> in the same or a different <code>Namespace</code>.</p> - -<p>&nbsp;</p> - - - - - <p>The <code>memberElementId</code> of a <code>Membership</code> is the <code>elementId</code> of its <code>memberElement</code>.</p> - - - OCL2.0 - memberElementId = memberElement.elementId - - - - - - <p>The <code>elementId</code> of the <code>memberElement</code>.</p> - - - - - - <p>The <code>Namespace</code> of which the <code>memberElement</code> becomes a <code>member</code> due to this <code>Membership</code>.</p> - - - - - - - - <p>The short name of the <code>memberElement</code> relative to the <code>membershipOwningNamespace</code>.</p> - - - - - - - - <p>The <code>Element</code> that becomes a <code>member</code> of the <code>membershipOwningNamespace</code> due to this <code>Membership</code>.</p> - - - - - - - - <p>The name of the <code>memberElement</code> relative to the <code>membershipOwningNamespace</code>.</p> - - - - - - - - - <p>Whether or not the <code>Membership</code> of the <code>memberElement</code> in the <code>membershipOwningNamespace</code> is publicly visible outside that <code>Namespace</code>.</p> - - - - - - - <p>Whether this <code>Membership</code> is distinguishable from a given <code>other</code> <code>Membership</code>. By default, this is true if this <code>Membership</code> has no <code>memberShortName</code> or <code>memberName</code>; or each of the <code>memberShortName</code> and <code>memberName</code> are different than both of those of the <code>other</code> <code>Membership</code>; or neither of the metaclasses of the <code>memberElement</code> of this <code>Membership</code> and the <code>memberElement</code> of the <code>other</code> <code>Membership</code> conform to the other. But this may be overridden in specializations of <code>Membership</code>.</p> - - - - - OCL2.0 - not (memberElement.oclKindOf(other.memberElement.oclType()) or - other.memberElement.oclKindOf(memberElement.oclType())) or -(shortMemberName = null or - (shortMemberName <> other.shortMemberName and - shortMemberName <> other.memberName)) and -(memberName = null or - (memberName <> other.shortMemberName and - memberName <> other.memberName))) - - - - - - - - - - - - - <p>The Namespace the has a certain Element as a <code>member</code>.</p> - - - - - <p>A <code>NamespaceImport</code> is an Import that imports <code>Memberships</code> from its <code>importedNamespace</code> into the <code>importOwningNamespace</code>. If <code> isRecursive = false</code>, then only the visible <code>Memberships</code> of the <code>importedNamespace</code> are imported. If <code> isRecursive = true</code>, then, in addition, <code>Memberships</code> are recursively imported from any <code>ownedMembers</code> of the <code>importedNamespace</code> that are <code>Namespaces</code>.</p> @@ -1064,71 +693,105 @@ else importedNamespace.visibleMemberships(excluded, isRecursive, isImportAll) - - - - - <p>A MembershipImport that has a certain <code>importedMembership</code>.</p> + + + + <p>The Membership with a certain Element as its <code>memberElement</code>.</p> - - + + - - - - <p>The <code>Dependencies</code> that have a certain <code>client</code> <code>Element</code>.</p> + + + + + <p>The Namespace the has a certain Element as a <code>member</code>.</p> - - + + - - - <p>A <code>Dependency</code> is a <code>Relationship</code> that indicates that one or more <code>client</code> <code>Elements</code> require one more <code>supplier</code> <code>Elements</code> for their complete specification. In general, this means that a change to one of the <code>supplier</code> <code>Elements</code> may necessitate a change to, or re-specification of, the <code>client</code> <code>Elements</code>.</p> - -<p>Note that a <code>Dependency</code> is entirely a model-level <code>Relationship</code>, without instance-level semantics.</p> + + + <p>An <code>OwningMembership</code> is a <code>Membership</code> that owns its <code>memberElement</code> as a <code>ownedRelatedElement</code>. The <code>ownedMemberElement</code> becomes an <code>ownedMember</code> of the <code>membershipOwningNamespace</code>.</p> + - - - - <p>The <code>Element</code> or <code>Elements</code> dependent on the <code>supplier</code> <code>Elements</code>.</p> - - - - - - - <p>The <code>Element</code> or <code>Elements</code> on which the <code>client</code> <code>Elements</code> depend in some respect.</p> + + + <p>The <code>ownedMemberName</code> of an <code>OwningMembership</code> is the <code>name</code> of its <code>ownedMemberElement</code>.</p> - - - - - - - - <p>The <code>Dependencies</code> that have a certain <code>supplier</code> <code>Element</code>.</p> + + OCL2.0 + ownedMemberName = ownedMemberElement.name + + + + + <p>The <code>ownedMemberShortName</code> of an <code>OwningMembership</code> is the <code>shortName</code> of its <code>ownedMemberElement</code>.</p> - - - - - - - - - - - - + + OCL2.0 + ownedMemberShortName = ownedMemberElement.shortName + + + + + + <p>The <code>Element</code> that becomes an <code>ownedMember</code> of the <code>membershipOwningNamespace</code> due to this <code>OwningMembership</code>.</p> + + + + + + + + <p>The <code>elementId</code> of the <code>ownedMemberElement</code>.</p> + + + + + + <p>The <code>shortName</code> of the <code>ownedMemberElement</code>.</p> + + + + + + + + <p>The <code>name</code> of the <code>ownedMemberElement</code>.</p> + + + + + + + + + <p>If the <code>ownedMemberElement</code> of this <code>OwningMembership</code> has a non-null <code>qualifiedName</code>, then return the string constructed by appending to that <code>qualifiedName</code> the string <code>"/owningMembership"</code>. Otherwise, return the <code>path</code> of the <code>OwningMembership</code> as specified for a <code>Relationship</code> in general. + + + + OCL2.0 + if ownedElement.qualifiedName <> null then + ownedElement.qualifiedName + '/owningMembership' +else self.oclAsType(Relationship).path() +endif + + + + + + - - - - - - + + + + <p>A NamespaceImport that has a certain <code>importedNamespace</code>.</p> + + + @@ -1229,9 +892,9 @@ else importedNamespace.visibleMemberships(excluded, isRecursive, isImportAll)shortName = effectiveShortName() - + - <p>The <code>owningNamespace</code> of an <code>Element</code> is the <code>membershipOwningNamspace</code> of its <code>owningMembership</code> (if any).</p> + <p>The <code>owningNamespace</code> of an <code>Element</code> is the <code>membershipOwningNamespace</code> of its <code>owningMembership</code> (if any).</p> OCL2.0 @@ -1570,406 +1233,459 @@ endif - + + + + + + + - - - - <p>The FeatureInvertings that identify this Feature as their <code>invertingFeature</code>.</p> - - - - - - - - - <p>The FeatureTypings for which a certain Feature is the <code>typedFeature</code>.</p> - - - - + + + + + + + - - - - <p>The FeatureInvertings that identify this Feature as their <code>featureInverted</code>.</p> + + + + + + <p>The <code>Dependencies</code> that have a certain <code>client</code> <code>Element</code>.</p> - - + + - - - - <p>The <code>TypeFeaturings</code> for which a certain <code>Feature</code> is the <code>featureOfType</code>.</p> + + + <p>A <code>Dependency</code> is a <code>Relationship</code> that indicates that one or more <code>client</code> <code>Elements</code> require one more <code>supplier</code> <code>Elements</code> for their complete specification. In general, this means that a change to one of the <code>supplier</code> <code>Elements</code> may necessitate a change to, or re-specification of, the <code>client</code> <code>Elements</code>.</p> + +<p>Note that a <code>Dependency</code> is entirely a model-level <code>Relationship</code>, without instance-level semantics.</p> + + + + + <p>The <code>Element</code> or <code>Elements</code> dependent on the <code>supplier</code> <code>Elements</code>.</p> - - - - - - - - <p>The <code>ReferenceSubsetting</code> with a certain <code>Feature</code> as the <code>referencedFeature</code>.</p> + + + + + + <p>The <code>Element</code> or <code>Elements</code> on which the <code>client</code> <code>Elements</code> depend in some respect.</p> - - - + + + - - - - <p>The Redefinitions with a certain Feature as the <code>redefinedFeature</code>.</p> + + + + <p>The <code>Dependencies</code> that have a certain <code>supplier</code> <code>Element</code>.</p> - - + + - - - - <p>The <code>CrossSubsetting</code> with a certain <code>Feature</code> as the <code>crossedFeature</code>.</p> + + + + <p>The Annotations associated with a certain <code>annotatedElement</code>.</p> - - + + - - - <p><code>CrossSubsetting</code> is a kind of <code>Subsetting</code> for end <code>Features</code>, as identified by <code>crossingFeature</code>, to subset a chained <code>Feature</code>, identified by <code>crossedFeature.</code> It navigates to instances of the end <code>Feature</code>’s type from instances of other end <code>Feature</code> types on the same <code>owningType</code> (at least two end <code>Features</code> are required for any of them to have a <code>CrossSubsetting</code>).</p> - -<p>The <code>crossedFeature</code> of a <code>CrossSubsetting</code> must have a feature chain of exactly two <code>Features</code>. The second <code>Feature</code> in the chain is the <code>crossFeature</code> of the <code>crossingFeature</code> (end <code>Feature</code>), which has the same type as the <code>crossingFeature</code>. When the <code>owningType</code> of the <code>crossingFeature</code> has exactly two end <code>Features</code>, the first <code>Feature</code> in the chain of the <code>crossedFeature</code> is the other end <code>Feature</code>. The <code>crossFeature</code>’s <code>featuringType</code> in this case is the other end <code>Feature</code>. When the <code>owningType</code> has more than two end <code>Features</code>, the first <code>Feature</code> in the chain is a <code>Feature</code> that <code>CrossMultiplies</code> all the other end <code>Features</code>, which is also the <code>featuringType</code> of the <code>crossFeature</code>.</p> - -<p>A <code>crossFeature</code> must be owned by its <code>featureCrossing</code> (end <code>Feature</code>) when the <code>featureCrossing</code> <code>owningType</code> has more than two end <code>Features</code>. Otherwise, for exactly two end <code>Features</code>, the <code>crossFeatures</code> of each the ends can instead optionally be inherited by the other end from one of its <code>types</code> or a subsetted <code>Feature</code>.</p> + + + <p><code>Documentation</code> is a <code>Comment</code> that specifically documents a <code>documentedElement</code>, which must be its <code>owner</code>.</p> + - - - <p>The <code>crossedFeature</code> of a <code>CrossSubsetting</code> must have exactly two <code>chainingFeatures</code>. If the <code>crossingFeature</code> of the <code>CrossSubsetting</code> is one of two end <code>Features</code>, then the first <code>chainingFeature</code> must be the other end <code>Feature</code>.</p> - - - OCL2.0 - crossingFeature.isEnd and crossingFeature.owningType <> null implies - let endFeatures: Sequence(Feature) = crossingFeature.owningType.endFeature in - let chainingFeatures: Sequence(Feature) = crossedFeature.chainingFeature in - chainingFeatures->size() = 2 and - endFeatures->size() = 2 implies - chainingFeatures->at(1) = endFeatures->excluding(crossingFeature)->at(1) - - - - - <p>The <code>crossingFeature</code> of a <code>CrossSubsetting</code> must be an end <code>Feature</code> that is owned by a <code>Type</code> with at least two end <code>Features</code>.</p> + + + + <p>The <code>Element</code> that is documented by this <code>Documentation</code>.</p> + - - OCL2.0 - crossingFeature.isEnd and -crossingFeature.owningType<>null and -crossingFeature.owningType.endFeature ->size() > 1 - - - - - - <p>The chained <code>Feature</code> that is cross subset by the <code>crossingFeature</code> of this <code>CrossSubsetting</code>.</p> + + + + + + + <p>A <code>Comment</code> is an <code>AnnotatingElement</code> whose <code>body</code> in some way describes its <code>annotatedElements</code>.</p> + + + + + <p>Identification of the language of the <code>body</code> text and, optionally, the region and/or encoding. The format shall be a POSIX locale conformant to ISO/IEC 15897, with the format <code>[language[_territory][.codeset][@modifier]]</code>.</p> - - + + + - - - <p>The end <code>Feature</code> that owns this <code>CrossSubsetting</code> relationship and is also its </code>subsettingFeature</code>.</p> + + + <p>The annotation text for the <code>Comment</code>.</p> + - - + + + - - - - <p>A <code>Type</code> that has the <code>multiplicity</code> as an <code>ownedMember</code>.</p> + + + <p>A <code>TextualRepresentation</code> is an <code>AnnotatingElement</code> whose <code>body</code> represents the <code>representedElement</code> in a given <code>language</code>. The <code>representedElement</code> must be the <code>owner</code> of the <code>TextualRepresentation</code>. The named <code>language</code> can be a natural language, in which case the <code>body</code> is an informal representation, or an artificial language, in which case the <code>body</code> is expected to be a formal, machine-parsable representation.</p> + +<p>If the named <code>language</code> of a <code>TextualRepresentation</code> is machine-parsable, then the <code>body</code> text should be legal input text as defined for that <code>language</code>. The interpretation of the named language string shall be case insensitive. The following <code>language</code> names are defined to correspond to the given standard languages:</p> + +<table border="1" cellpadding="1" cellspacing="1" width="498"> + <thead> + </thead> + <tbody> + <tr> + <td style="text-align: center; width: 154px;"><code>kerml</code></td> + <td style="width: 332px;">Kernel Modeling Language</td> + </tr> + <tr> + <td style="text-align: center; width: 154px;"><code>ocl</code></td> + <td style="width: 332px;">Object Constraint Language</td> + </tr> + <tr> + <td style="text-align: center; width: 154px;"><code>alf</code></td> + <td style="width: 332px;">Action Language for fUML</td> + </tr> + </tbody> +</table> + +<p>Other specifications may define specific <code>language</code> strings, other than those shown above, to be used to indicate the use of languages from those specifications in KerML <code>TextualRepresentation</code>.</p> + +<p>If the <code>language</code> of a <code>TextualRepresentation</code> is &quot;<code>kerml</code>&quot;, then the <code>body</code> text shall be a legal representation of the <code>representedElement</code> in the KerML textual concrete syntax. A conforming tool can use such a <code>TextualRepresentation</code> <code>Annotation</code> to record the original KerML concrete syntax text from which an <code>Element</code> was parsed. In this case, it is a tool responsibility to ensure that the <code>body</code> of the <code>TextualRepresentation</code> remains correct (or the Annotation is removed) if the annotated <code>Element</code> changes other than by re-parsing the <code>body</code> text.</p> + +<p>An <code>Element</code> with a <code>TextualRepresentation</code> in a language other than KerML is essentially a semantically &quot;opaque&quot; <code>Element</code> specified in the other language. However, a conforming KerML tool may interpret such an element consistently with the specification of the named language.</p> + + + + + + <p>The natural or artifical language in which the <code>body</code> text is written.</p> + - - - - - - - - <p>The <code>Features</code> that identify a <code>Feature</code> as their <code>featureTarget</code>.</p> + + + + + + + <p>The <code>Element</code> that is represented by this <code>TextualRepresentation</code>.</p> + - - <p>The <code>Features</code> that are the same as or the <code>chainedFeature</code> for a <code>targetFeature</code>.</p> + + + + + + <p>The textual representation of the <code>representedElement</code> in the given <code>language</code>.</p> + - - - + + + + - - - - <p>The Features for which a certain Type is a <code>featuringType</code>.</p> + + + + <p>The AnnotatingElements that have a certain Element as their <code>annotatedElement</code>.</p> - - + + - - - <p><code>Subsetting</code> is <code>Specialization</code> in which the <code>specific</code> and <code>general</code> <code>Types</code> are <code>Features</code>. This means all values of the <code>subsettingFeature</code> (on instances of its domain, i.e., the intersection of its <code>featuringTypes</code>) are values of the <code>subsettedFeature</code> on instances of its domain. To support this the domain of the <code>subsettingFeature</code> must be the same or specialize (at least indirectly) the domain of the <code>subsettedFeature</code> (via <code>Specialization</code>), and the co-domain (intersection of the <code>types</code>) of the <code>subsettingFeature</code> must specialize the co-domain of the <code>subsettedFeature</code>.</p> + + + + <p>An <code>AnnotatingElement</code> is an <code>Element</code> that provides additional description of or metadata on some other <code>Element</code>. An <code>AnnotatingElement</code> is either attached to its <code>annotatedElements</code> by <code>Annotation</code> <code>Relationships</code>, or it implicitly annotates its <code>owningNamespace</code>.</p> - - - <p>The <code>subsettedFeature</code> must be accessible by the <code>subsettingFeature</code>.</p> + + + <p>If an <code>AnnotatingElement</code> has <code>annotations</code>, then its <code>annotatedElements</code> are the <code>annotatedElements</code> of all its <code>annotations</code>. Otherwise, it's single <code>annotatedElement</code> is its <code>owningNamespace</code>.</p> - + OCL2.0 - subsettingFeature.canAccess(subsettedFeature) + annotatedElement = + if annotation->notEmpty() then annotation.annotatedElement + else Sequence{owningNamespace} endif - - - <p>If the <code>subsettedFeature</code> of a <code>Subsetting</code> has <code>isUnique = true</code>, then the <code>subsettingFeature</code> must have <code>isUnique = true</code>.</p> + + + <p>The <code>ownedAnnotatingRelationships</code> of an <code>AnnotatingElement</code> are its <code>ownedRelationships</code> that are <code>Annotations</code>, for which the <code>AnnotatingElement</code> is not the <code>annotatedElement</code>.</p> - + OCL2.0 - subsettedFeature.isUnique implies subsettingFeature.isUnique + ownedAnnotatingRelationship = ownedRelationship-> + selectByKind(Annotation)-> + select(a | a.annotatedElement <> self) - - - <p>If the <code>subsettedFeature</code> of a <code>Subsetting</code> has <code>isConstant = true</code> and the <code>subsettingFeature</code> has <code>isVariable = true</code>, then the <code>subsettingFeature</code> must have <code>isConstant = true</code>.</p> + + + <p>The <code>annotations</code> of an <code>AnnotatingElement</code> are its <code>owningAnnotatingRelationship</code> (if any) followed by all its <code>ownedAnnotatingRelationships</code>.</p> - + OCL2.0 - subsettedFeature.isConstant and subsettingFeature.isVariable implies - subsettingFeature.isConstant - + annotation = + if owningAnnotatingRelationship = null then ownedAnnotatingRelationship + else owningAnnotatingRelationship->prepend(owningAnnotatingRelationship) + endif - - - - <p>The <code>Feature</code> that is subsetted by the <code>subsettingFeature</code> of this <code>Subsetting</code>.</p> + + + + <p>The <code>Elements</code> that are annotated by this <code>AnnotatingElement</code>. If <code>annotation</code> is not empty, these are the <code>annotatedElements</code> of the <code>annotations</code>. If <code>annotation</code> is empty, then it is the <code>owningNamespace</code> of the <code>AnnotatingElement</code>.</p> - - + + - - - <p>The <code>Feature</code> that is a subset of the <code>subsettedFeature</code> of this <code>Subsetting</code>.</p> - + + + <p>The <code>ownedRelationships</code> of this <code>AnnotatingElement</code> that are <code>Annotations</code>, for which this <code>AnnotatingElement</code> is the <code>annotatingElement</code>.</p> - - + + - - - <p>A <code>subsettingFeature</code> that is also the <code>owningRelatedElement</code> of this <code>Subsetting</code>.</p> - + + + <p>The <code>owningRelationship</code> of this <code>AnnotatingRelationship</code>, if it is an <code>Annotation</code></p> + + + + + + + <p>The <code>Annotations</code> that relate this <code>AnnotatingElement</code> to its <code>annotatedElements</code>. This includes the <code>owningAnnotatingRelationship</code> (if any) followed by all the <code>ownedAnnotatingRelationshps</code>.</p> - - + + - - - - - <p>The Redefinitions with a certain Feature as the <code>redefiningFeature</code>.</p> + + + <p>An <code>Annotation</code> is a Relationship between an <code>AnnotatingElement</code> and the <code>Element</code> that is annotated by that <code>AnnotatingElement</code>.</p> + + + + + <p>An <code>Annotation</code> owns its <code>annotatingElement</code> if and only if it is owned by its <code>annotatedElement</code>.</p> - - - - - - - - <p>The <code>Features</code> that have a particular <code>chainingFeature</code> in their <code>Feature</code> chain, whose values are partly determined by values of the <code>chainingFeature</code>, as described in <code>chainingFeature</code>.</p> + + OCL2.0 + (owningAnnotatedElement <> null) = (ownedAnnotatingElement <> null) + + + + + <p>Either the <code>ownedAnnotatingElement</code> of an <code>Annotation</code> must be non-null, or the <code>owningAnnotatingElement</code> must be non-null, but not both.</p> - - - - - - - <p><code>FeatureTyping</code> is <code>Specialization</code> in which the <code>specific</code> <code>Type</code> is a <code>Feature</code>. This means the set of instances of the (specific) <code>typedFeature</code> is a subset of the set of instances of the (general) <code>type</code>. In the simplest case, the <code>type</code> is a <code>Classifier</code>, whereupon the <code>typedFeature</code> has values that are instances of the <code>Classifier</code>.</p> + + OCL2.0 + ownedAnnotatingElement <> null xor owningAnnotatingElement <> null + + + + + <p>The <code>ownedAnnotatingElement</code> of an <code>Annotation</code> is the first <code>ownedRelatedElement</code> that is an <code>AnnotatingElement</code>, if any.</p> + + + OCL2.0 + ownedAnnotatingElement = + let ownedAnnotatingElements : Sequence(AnnotatingElement) = + ownedRelatedElement->selectByKind(AnnotatingElement) in + if ownedAnnotatingElements->isEmpty() then null + else ownedAnnotatingElements->first() + endif + + + + + <p>The <code>annotatingElement</code> of an <code>Annotation</code> is either its <code>ownedAnnotatingElement</code> or its <code>owningAnnotatingElement</code>.</p> + + + OCL2.0 + annotatingElement = + if ownedAnnotatingElement <> null then ownedAnnotatingElement + else owningAnnotatingElement + endif + + + + + + <p>The <code>AnnotatingElement</code> that annotates the <code>annotatedElement</code> of this <code>Annotation</code>. This is always either the <code>ownedAnnotatingElement</code> or the <code>owningAnnotatingElement</code>.</p> - - - - - <p>The <code>Feature</code> that has a <code>type</code> determined by this <code>FeatureTyping</code>.</p> - - + + - - - <p>The <code>Type</code> that is being applied by this <code>FeatureTyping</code>.</p> + + + <p>The <code>Element</code> that is annotated by the <code>annotatingElement</code> of this Annotation.</p> - - + + - - - <p>A <code>typedFeature</code> that is also the <code>owningRelatedElement</code> of this <code>FeatureTyping</code>.</p> + + + <p>The <code>annotatedElement</code> of this <code>Annotation</code>, when it is also the <code>owningRelatedElement</code>.</p> + - - + + + + + + <p>The <code>annotatingElement</code> of this <code>Annotation</code>, when it is the <code>owningRelatedElement</code>.</p> + + + + + + + <p>The <code>annotatingElement</code> of this <code>Annotation</code>, when it is an <code>ownedRelatedElement</code>.</p> + + + - - - - <p>The FeatureTyping relating this Type to a Feature.</p> + + + + + + <p>The <code>TypeFeaturings</code> for which a certain <code>Type</code> is the <code>featuringType</code>.</p> - - + + - - - - <p>The Features for which a certain Type is a <code>type</code>.</p> + + + + <p>The <code>CrossSubsetting</code> with a certain <code>Feature</code> as the <code>crossedFeature</code>.</p> - - + + - - - - <p>The Subsettings with a certain Feature as the <code>subsettedFeature</code>.</p> + + + + <p>The Features for which a certain Type is a <code>featuringType</code>.</p> - - + + - - - <p>A <code>TypeFeaturing</code> is a <code>Featuring</code> <code>Relationship</code> in which the <code>featureOfType</code> is the <code>source</code> and the <code>featuringType</code> is the <code>target</code>.</p> + + + + + <p>The FeatureTypings for which a certain Feature is the <code>typedFeature</code>.</p> + + + + + + + + + <p>A <code>FeatureInverting</code> is a <code>Relationship</code> between <code>Features</code> asserting that their interpretations (sequences) are the reverse of each other, identified as <code>featureInverted</code> and <code>invertingFeature</code>. For example, a <code>Feature</code> identifying each person&#39;s parents is the inverse of a <code>Feature</code> identifying each person&#39;s children. A person identified as a parent of another will identify that other as one of their children.</p> + - - - - <p>The <code>Feature</code> that is featured by the <code>featuringType</code>. It is the <code>source</code> of the <code>TypeFeaturing</code>.</p> + + + + <p>The <code>Feature</code> that is an inverse of the <code>invertingFeature</code>.</p> - - + + - - - <p>The <code>Type</code> that features the <code>featureOfType</code>. It is the <code>target</code> of the <code>TypeFeaturing</code>.</p> + + + <p>The <code>Feature</code> that is an inverse of the <code>invertedFeature</code>.</p> - - + + - - - <p>A <code>featureOfType</code> that is also the <code>owningRelatedElement</code> of this <code>TypeFeaturing</code>.</p> + + + <p>A <code>featureInverted</code> that is also the <code>owningRelatedElement</code> of this <code>FeatureInverting</code>.</p> + - - + + - - - <p><code>Redefinition</code> is a kind of <code>Subsetting</code> that requires the <code>redefinedFeature</code> and the <code>redefiningFeature</code> to have the same values (on each instance of the domain of the <code>redefiningFeature</code>). This means any restrictions on the <code>redefiningFeature</code>, such as <code>type</code> or <code>multiplicity</code>, also apply to the <code>redefinedFeature</code> (on each instance of the domain of the <code>redefiningFeature</code>), and vice versa. The <code>redefinedFeature</code> might have values for instances of the domain of the <code>redefiningFeature</code>, but only as instances of the domain of the <code>redefinedFeature</code> that happen to also be instances of the domain of the <code>redefiningFeature</code>. This is supported by the constraints inherited from <code>Subsetting</code> on the domains of the <code>redefiningFeature</code> and <code>redefinedFeature</code>. However, these constraints are narrowed for <code>Redefinition</code> to require the <code>owningTypes</code> of the <code>redefiningFeature</code> and <code>redefinedFeature</code> to be different and the <code>redefinedFeature</code> to not be inherited into the <code>owningNamespace</code> of the <code>redefiningFeature</code>.This enables the <code>redefiningFeature</code> to have the same name as the <code>redefinedFeature</code>, if desired.</p> - - - - - <p>The <code>redefiningFeature</code> of a <code>Redefinition</code> must have at least one <code>featuringType</code> that is not also a <code>featuringType</code> of the <code>redefinedFeature</code>.</p> - - - OCL2.0 - let anythingType: Type = - redefiningFeature.resolveGlobal('Base::Anything').modelElement.oclAsType(Type) in --- Including "Anything" accounts for implicit featuringType of Features --- with no explicit featuringType. -let redefiningFeaturingTypes: Set(Type) = - if redefiningFeature.isVariable then Set{redefiningFeature.owningType} - else redefiningFeature.featuringTypes->asSet()->including(anythingType) - endif in -let redefinedFeaturingTypes: Set(Type) = - if redefinedFeature.isVariable then Set{redefinedFeature.owningType} - else redefinedFeature.featuringTypes->asSet()->including(anythingType) - endif in -redefiningFeaturingTypes <> redefinedFeaturingType - - - - - <p>If the <code>redefinedFeature</code> of a <code>Redefinition</code> has a direction of <code>in</code> or <code>out</code> (relative to any <code>featuringType</code> of the <code>redefiningFeature</code> or the <code>owningType</code>, if the <code>redefiningFeature</code> has <code>isVariable = true</code>), then the <code>redefiningFeature</code> must have the same <code>direction</code>. If the <code>redefinedFeature</code> has a direction of <code>inout</code>, then the <code>redefiningFeature</code> must have a non-null <code>direction</code>. (Note: the direction of the <code>redefinedFeature</code> relative to a <code>featuringType</code> of the <code>redefiningFeature</code> is the direction it would have if it had been inherited and not redefined.)</p> - - - OCL2.0 - let featuringTypes : Sequence(Type) = - if redefiningFeature.isVariable then Sequence{redefiningFeature.owningType} - else redefiningFeature.featuringType - endif in -featuringTypes->forAll(t | - let direction : FeatureDirectionKind = t.directionOf(redefinedFeature) in - ((direction = FeatureDirectionKind::_'in' or - direction = FeatureDirectionKind::out) implies - redefiningFeature.direction = direction) - and - (direction = FeatureDirectionKind::inout implies - redefiningFeature.direction <> null)) - - - - - <p>If the redefinedFeature of a Redefinition has isEnd = true, then the redefiningFeature must have isEnd = true.</p> + + + + <p>The Features for which a certain Type is a <code>type</code>.</p> - - OCL2.0 - redefinedFeature.isEnd implies redefiningFeature.isEnd - - - - - - <p>The <code>Feature</code> that is redefining the <code>redefinedFeature</code> of this <code>Redefinition</code>.</p> - + + + + + + + + <p>The FeatureInvertings that identify this Feature as their <code>featureInverted</code>.</p> - - - - - - <p>The <code>Feature</code> that is redefined by the <code>redefiningFeature</code> of this <code>Redefinition</code>.</p> - + + + + + + + + <p>The <code>Features</code> with a certain other <code>Feature</code> as the <code>crossFeature</code>.</p> - - - + + + - - - <p>Relationship for chainedFeatures.</p> - - - - <p>The <code>FeatureChainings</code> that identify a <code>Feature</code> as their <code>chainingFeature</code>.</p> + + + + <p>The Redefinitions with a certain Feature as the <code>redefiningFeature</code>.</p> - - + + + + + + + + - <p>A <code>Feature</code> is a <code>Type</code> that classifies relations between multiple things (in the universe). The domain of the relation is the intersection of the <code>featuringTypes</code> of the <code>Feature</code>. (The domain of a <code>Feature</code> with no <code>featuringTyps</code> is implicitly the most general <code>Type</code> <em><code>Base::Anything</code></em> from the Kernel Semantic Library.) The co-domain of the relation is the intersection of the <code>types</code> of the <code>Feature</code>. @@ -2191,7 +1907,7 @@ owningType.ownedFeature->at(1) = self implies (i = 1 implies redefinesFromLibrary('Transfers::Transfer::source::sourceOutput')) and (i = 2 implies - redefinesFromLibrary('Transfers::Transfer::source::targetInput')) + redefinesFromLibrary('Transfers::Transfer::target::targetInput')) @@ -2208,26 +1924,28 @@ owningType.ownedFeature->at(1) = self implies OCL2.0 owningType <> null and -not owningFeatureMembership. - oclIsKindOf(ReturnParameterMembership) and (owningType.oclIsKindOf(Behavior) or owningType.oclIsKindOf(Step) and (owningType.oclIsKindOf(InvocationExpression) implies - not ownedRedefinition->exists(not isImplied)) + not ownedRedefinition->exists(not isImplied))) implies - let i : Integer = + let ownerParameters : Sequence(Feature) = owningType.ownedFeature->select(direction <> null)-> reject(owningFeatureMembership. - oclIsKindOf(ReturnParameterMembership))-> - indexOf(self) in - owningType.ownedSpecialization.general-> - forAll(supertype | - let ownedParameters : Sequence(Feature) = - supertype.ownedFeature->select(direction <> null)-> - reject(owningFeatureMembership. - oclIsKindOf(ReturnParameterMembership)) in - ownedParameters->size() >= i implies - redefines(ownedParameters->at(i)) + oclIsKindOf(ReturnParameterMembership)) in + ownerParameters->includes(self) implies + let i : Integer = ownerParameters.indexof(self) in + owningType.ownedSpecialization.general-> + forAll(supertype | + supertype.oclIsKindOf(Behavior) or + supertype.oclIsKindOf(Step) + implies + let ownedParameters : Sequence(Feature) = + supertype.ownedFeature->select(direction <> null)-> + reject(owningFeatureMembership. + oclIsKindOf(ReturnParameterMembership)) in + ownedParameters->size() >= i implies + redefines(ownedParameters->at(i))) @@ -2237,7 +1955,7 @@ implies OCL2.0 ownedTyping.type->exists(selectByKind(Structure)) implies - specializesFromLibary('Objects::objects') + specializesFromLibrary('Objects::objects') @@ -2280,7 +1998,7 @@ implies OCL2.0 featuringType = let featuringTypes : OrderedSet(Type) = - featuring.type->asOrderedSet() in + typeFeaturing.type->asOrderedSet() in if chainingFeature->isEmpty() then featuringTypes else featuringTypes-> @@ -2904,7 +2622,7 @@ redefines(mem.memberElement.oclAsType(Feature)) - + @@ -3109,26 +2827,140 @@ endif - - - <p><code>EndFeatureMembership</code> is a <code>FeatureMembership</code> that requires its <code>memberFeature</code> be owned and have <code>isEnd = true</code>.</p> - + + + + <p><code>CrossSubsetting</code> is a kind of <code>Subsetting</code> for end <code>Features</code>, as identified by <code>crossingFeature</code>, to subset a chained <code>Feature</code>, identified by <code>crossedFeature.</code> It navigates to instances of the end <code>Feature</code>’s type from instances of other end <code>Feature</code> types on the same <code>owningType</code> (at least two end <code>Features</code> are required for any of them to have a <code>CrossSubsetting</code>).</p> + +<p>The <code>crossedFeature</code> of a <code>CrossSubsetting</code> must have a feature chain of exactly two <code>Features</code>. The second <code>Feature</code> in the chain is the <code>crossFeature</code> of the <code>crossingFeature</code> (end <code>Feature</code>), which has the same type as the <code>crossingFeature</code>. When the <code>owningType</code> of the <code>crossingFeature</code> has exactly two end <code>Features</code>, the first <code>Feature</code> in the chain of the <code>crossedFeature</code> is the other end <code>Feature</code>. The <code>crossFeature</code>’s <code>featuringType</code> in this case is the other end <code>Feature</code>. When the <code>owningType</code> has more than two end <code>Features</code>, the first <code>Feature</code> in the chain is a <code>Feature</code> that <code>CrossMultiplies</code> all the other end <code>Features</code>, which is also the <code>featuringType</code> of the <code>crossFeature</code>.</p> + +<p>A <code>crossFeature</code> must be owned by its <code>featureCrossing</code> (end <code>Feature</code>) when the <code>featureCrossing</code> <code>owningType</code> has more than two end <code>Features</code>. Otherwise, for exactly two end <code>Features</code>, the <code>crossFeatures</code> of each the ends can instead optionally be inherited by the other end from one of its <code>types</code> or a subsetted <code>Feature</code>.</p> - - - <p>The <code>ownedMemberFeature</code> of an <code>EndFeatureMembership</code> must be an end <code>Feature</code>.</p> + + + <p>The <code>crossedFeature</code> of a <code>CrossSubsetting</code> must have exactly two <code>chainingFeatures</code>. If the <code>crossingFeature</code> of the <code>CrossSubsetting</code> is one of two end <code>Features</code>, then the first <code>chainingFeature</code> must be the other end <code>Feature</code>.</p> - + OCL2.0 - ownedMemberFeature.isEnd - - - + crossingFeature.isEnd and crossingFeature.owningType <> null implies + let endFeatures: Sequence(Feature) = crossingFeature.owningType.endFeature in + let chainingFeatures: Sequence(Feature) = crossedFeature.chainingFeature in + chainingFeatures->size() = 2 and + endFeatures->size() = 2 implies + chainingFeatures->at(1) = endFeatures->excluding(crossingFeature)->at(1) + + + + + <p>The <code>crossingFeature</code> of a <code>CrossSubsetting</code> must be an end <code>Feature</code> that is owned by a <code>Type</code> with at least two end <code>Features</code>.</p> + + + OCL2.0 + crossingFeature.isEnd and +crossingFeature.owningType<>null and +crossingFeature.owningType.endFeature ->size() > 1 + + + + + + <p>The chained <code>Feature</code> that is cross subset by the <code>crossingFeature</code> of this <code>CrossSubsetting</code>.</p> + + + + + + + + <p>The end <code>Feature</code> that owns this <code>CrossSubsetting</code> relationship and is also its </code>subsettingFeature</code>.</p> + + + + + + + + <p><code>EndFeatureMembership</code> is a <code>FeatureMembership</code> that requires its <code>memberFeature</code> be owned and have <code>isEnd = true</code>.</p> + + + + + <p>The <code>ownedMemberFeature</code> of an <code>EndFeatureMembership</code> must be an end <code>Feature</code>.</p> + + + OCL2.0 + ownedMemberFeature.isEnd + + + + + + + <p>The FeatureTyping relating this Type to a Feature.</p> + + + + + + + + <p>A <code>TypeFeaturing</code> is a <code>Featuring</code> <code>Relationship</code> in which the <code>featureOfType</code> is the <code>source</code> and the <code>featuringType</code> is the <code>target</code>.</p> + + + + + <p>The <code>Feature</code> that is featured by the <code>featuringType</code>. It is the <code>source</code> of the <code>TypeFeaturing</code>.</p> + + + + + + + <p>The <code>Type</code> that features the <code>featureOfType</code>. It is the <code>target</code> of the <code>TypeFeaturing</code>.</p> + + + + + + + <p>A <code>featureOfType</code> that is also the <code>owningRelatedElement</code> of this <code>TypeFeaturing</code>.</p> + + + + + + + + + <p>The Redefinitions with a certain Feature as the <code>redefinedFeature</code>.</p> + + + + + + + + + <p>The <code>ReferenceSubsetting</code> with a certain <code>Feature</code> as the <code>referencedFeature</code>.</p> + + + + + + + + + <p>A <code>Type</code> that has the <code>multiplicity</code> as an <code>ownedMember</code>.</p> + + + + + <p><code>FeatureChaining</code> is a <code>Relationship</code> that makes its target <code>Feature</code> one of the <code>chainingFeatures</code> of its owning <code>Feature</code>.</p> @@ -3151,196 +2983,302 @@ endif - - - - <p>The <code>TypeFeaturings</code> for which a certain <code>Type</code> is the <code>featuringType</code>.</p> + + + + <p>The <code>TypeFeaturings</code> for which a certain <code>Feature</code> is the <code>featureOfType</code>.</p> - - + + - - - - <p>A <code>FeatureInverting</code> is a <code>Relationship</code> between <code>Features</code> asserting that their interpretations (sequences) are the reverse of each other, identified as <code>featureInverted</code> and <code>invertingFeature</code>. For example, a <code>Feature</code> identifying each person&#39;s parents is the inverse of a <code>Feature</code> identifying each person&#39;s children. A person identified as a parent of another will identify that other as one of their children.</p> + + + <p><code>FeatureTyping</code> is <code>Specialization</code> in which the <code>specific</code> <code>Type</code> is a <code>Feature</code>. This means the set of instances of the (specific) <code>typedFeature</code> is a subset of the set of instances of the (general) <code>type</code>. In the simplest case, the <code>type</code> is a <code>Classifier</code>, whereupon the <code>typedFeature</code> has values that are instances of the <code>Classifier</code>.</p> - - - - <p>The <code>Feature</code> that is an inverse of the <code>invertingFeature</code>.</p> - - - - - - - <p>The <code>Feature</code> that is an inverse of the <code>invertedFeature</code>.</p> + + + + <p>The <code>Feature</code> that has a <code>type</code> determined by this <code>FeatureTyping</code>.</p> - - + + - - - <p>A <code>featureInverted</code> that is also the <code>owningRelatedElement</code> of this <code>FeatureInverting</code>.</p> + + + <p>The <code>Type</code> that is being applied by this <code>FeatureTyping</code>.</p> - - + + - - - - - - - - - - - - - - <p>The <code>Features</code> with a certain other <code>Feature</code> as the <code>crossFeature</code>.</p> - - - - - - - - - <p>The Subsettings with a certain Feature as the <code>subsettingFeature</code>.</p> + + + <p>A <code>typedFeature</code> that is also the <code>owningRelatedElement</code> of this <code>FeatureTyping</code>.</p> - - - + + + - - - - <p>The Feature that owns this Redefinition relationship, which must also be its <code>redefiningFeature</code>.</p> + + + <p>Relationship for chainedFeatures.</p> + + + + <p>The <code>FeatureChainings</code> that identify a <code>Feature</code> as their <code>chainingFeature</code>.</p> - - + + - - - <p><code>ReferenceSubsetting</code> is a kind of <code>Subsetting</code> in which the <code>referencedFeature</code> is syntactically distinguished from other <code>Features</code> subsetted by the <code>referencingFeature</code>. <code>ReferenceSubsetting</code> has the same semantics as <code>Subsetting</code>, but the <code>referencedFeature</code> may have a special purpose relative to the <code>referencingFeature</code>. For instance, <code>ReferenceSubsetting</code> is used to identify the <code>relatedFeatures</code> of a <code>Connector</code>.</p> - -<p><code>ReferenceSubsetting</code> is always an <code>ownedRelationship</code> of its <code>referencingFeature</code>. A <code>Feature</code> can have at most one <code>ownedReferenceSubsetting</code>.</p> + + + <p><code>Redefinition</code> is a kind of <code>Subsetting</code> that requires the <code>redefinedFeature</code> and the <code>redefiningFeature</code> to have the same values (on each instance of the domain of the <code>redefiningFeature</code>). This means any restrictions on the <code>redefiningFeature</code>, such as <code>type</code> or <code>multiplicity</code>, also apply to the <code>redefinedFeature</code> (on each instance of the domain of the <code>redefiningFeature</code>), and vice versa. The <code>redefinedFeature</code> might have values for instances of the domain of the <code>redefiningFeature</code>, but only as instances of the domain of the <code>redefinedFeature</code> that happen to also be instances of the domain of the <code>redefiningFeature</code>. This is supported by the constraints inherited from <code>Subsetting</code> on the domains of the <code>redefiningFeature</code> and <code>redefinedFeature</code>. However, these constraints are narrowed for <code>Redefinition</code> to require the <code>owningTypes</code> of the <code>redefiningFeature</code> and <code>redefinedFeature</code> to be different and the <code>redefinedFeature</code> to not be inherited into the <code>owningNamespace</code> of the <code>redefiningFeature</code>.This enables the <code>redefiningFeature</code> to have the same name as the <code>redefinedFeature</code>, if desired.</p> - - - - <p>The <code>Feature</code> that is referenced by the <code>referencingFeature</code> of this <code>ReferenceSubsetting</code>.</p> - + + + <p>The <code>redefiningFeature</code> of a <code>Redefinition</code> must have at least one <code>featuringType</code> that is not also a <code>featuringType</code> of the <code>redefinedFeature</code>.</p> - - - - - - <p>The <code>Feature</code> that owns this <code>ReferenceSubsetting</code> relationship, which is also its <code>subsettingFeature</code>.</p> - + + OCL2.0 + let anythingType: Type = + redefiningFeature.resolveGlobal('Base::Anything').modelElement.oclAsType(Type) in +-- Including "Anything" accounts for implicit featuringType of Features +-- with no explicit featuringType. +let redefiningFeaturingTypes: Set(Type) = + if redefiningFeature.isVariable then Set{redefiningFeature.owningType} + else redefiningFeature.featuringTypes->asSet()->including(anythingType) + endif in +let redefinedFeaturingTypes: Set(Type) = + if redefinedFeature.isVariable then Set{redefinedFeature.owningType} + else redefinedFeature.featuringTypes->asSet()->including(anythingType) + endif in +redefiningFeaturingTypes <> redefinedFeaturingType + + + + + <p>If the <code>redefinedFeature</code> of a <code>Redefinition</code> has a direction of <code>in</code> or <code>out</code> (relative to any <code>featuringType</code> of the <code>redefiningFeature</code> or the <code>owningType</code>, if the <code>redefiningFeature</code> has <code>isVariable = true</code>), then the <code>redefiningFeature</code> must have the same <code>direction</code>. If the <code>redefinedFeature</code> has a direction of <code>inout</code>, then the <code>redefiningFeature</code> must have a non-null <code>direction</code>. (Note: the direction of the <code>redefinedFeature</code> relative to a <code>featuringType</code> of the <code>redefiningFeature</code> is the direction it would have if it had been inherited and not redefined.)</p> - - - - - - - - - - - <p>The Disjoinings that identify this Type as their <code>typeDisjoined</code>.</p> + + OCL2.0 + let featuringTypes : Sequence(Type) = + if redefiningFeature.isVariable then Sequence{redefiningFeature.owningType} + else redefiningFeature.featuringType + endif in +featuringTypes->forAll(t | + let direction : FeatureDirectionKind = t.directionOf(redefinedFeature) in + ((direction = FeatureDirectionKind::_'in' or + direction = FeatureDirectionKind::out) implies + redefiningFeature.direction = direction) + and + (direction = FeatureDirectionKind::inout implies + redefiningFeature.direction <> null)) + + + + + <p>If the redefinedFeature of a Redefinition has isEnd = true, then the redefiningFeature must have isEnd = true.</p> + + + OCL2.0 + redefinedFeature.isEnd implies redefiningFeature.isEnd + + + + + + <p>The <code>Feature</code> that is redefining the <code>redefinedFeature</code> of this <code>Redefinition</code>.</p> - - + + + + + + <p>The <code>Feature</code> that is redefined by the <code>redefiningFeature</code> of this <code>Redefinition</code>.</p> + + + + + + + + + + <p>The Subsettings with a certain Feature as the <code>subsettedFeature</code>.</p> + + + - - - - - <p>The Specializations with a certain <code>general<code> Type.</p> + + + + + + + <p>The <code>Features</code> that identify a <code>Feature</code> as their <code>featureTarget</code>.</p> - - + + <p>The <code>Features</code> that are the same as or the <code>chainedFeature</code> for a <code>targetFeature</code>.</p> + + + - - - - <p>The Conjugation corresponding to the <code>conjugatedType</code>.</p> + + + + + <p>The Subsettings with a certain Feature as the <code>subsettingFeature</code>.</p> - - + + - - - <p><code>Specialization</code> is a <code>Relationship</code> between two <code>Types</code> that requires all instances of the <code>specific</code> type to also be instances of the <code>general</code> Type (i.e., the set of instances of the <code>specific</code> Type is a <em>subset</em> of those of the <code>general</code> Type, which might be the same set).</p> + + + + <p>The <code>Features</code> that have a particular <code>chainingFeature</code> in their <code>Feature</code> chain, whose values are partly determined by values of the <code>chainingFeature</code>, as described in <code>chainingFeature</code>.</p> + + + + + + + + + <p>The FeatureInvertings that identify this Feature as their <code>invertingFeature</code>.</p> + + + + + + + + + <p>The Feature that owns this Redefinition relationship, which must also be its <code>redefiningFeature</code>.</p> + + + + + + + + + <p><code>ReferenceSubsetting</code> is a kind of <code>Subsetting</code> in which the <code>referencedFeature</code> is syntactically distinguished from other <code>Features</code> subsetted by the <code>referencingFeature</code>. <code>ReferenceSubsetting</code> has the same semantics as <code>Subsetting</code>, but the <code>referencedFeature</code> may have a special purpose relative to the <code>referencingFeature</code>. For instance, <code>ReferenceSubsetting</code> is used to identify the <code>relatedFeatures</code> of a <code>Connector</code>.</p> + +<p><code>ReferenceSubsetting</code> is always an <code>ownedRelationship</code> of its <code>referencingFeature</code>. A <code>Feature</code> can have at most one <code>ownedReferenceSubsetting</code>.</p> - - - <p>The <code>specific</code> <code>Type</code> of a <code>Specialization</code> cannot be a conjugated <code>Type</code>.</p> + + + + <p>The <code>Feature</code> that is referenced by the <code>referencingFeature</code> of this <code>ReferenceSubsetting</code>.</p> + - + + + + + + <p>The <code>Feature</code> that owns this <code>ReferenceSubsetting</code> relationship, which is also its <code>subsettingFeature</code>.</p> + + + + + + + + + <p><code>Subsetting</code> is <code>Specialization</code> in which the <code>specific</code> and <code>general</code> <code>Types</code> are <code>Features</code>. This means all values of the <code>subsettingFeature</code> (on instances of its domain, i.e., the intersection of its <code>featuringTypes</code>) are values of the <code>subsettedFeature</code> on instances of its domain. To support this the domain of the <code>subsettingFeature</code> must be the same or specialize (at least indirectly) the domain of the <code>subsettedFeature</code> (via <code>Specialization</code>), and the co-domain (intersection of the <code>types</code>) of the <code>subsettingFeature</code> must specialize the co-domain of the <code>subsettedFeature</code>.</p> + + + + + <p>The <code>subsettedFeature</code> must be accessible by the <code>subsettingFeature</code>.</p> + + OCL2.0 - not specific.isConjugated + subsettingFeature.canAccess(subsettedFeature) - - - - <p>The <code>Type</code> that is the <code>specific</code> <code>Type</code> of this <code>Specialization</code> and owns it as its <code>owningRelatedElement</code>.</p> + + + <p>If the <code>subsettedFeature</code> of a <code>Subsetting</code> has <code>isUnique = true</code>, then the <code>subsettingFeature</code> must have <code>isUnique = true</code>.</p> + + + OCL2.0 + subsettedFeature.isUnique implies subsettingFeature.isUnique + + + + + <p>If the <code>subsettedFeature</code> of a <code>Subsetting</code> has <code>isConstant = true</code> and the <code>subsettingFeature</code> has <code>isVariable = true</code>, then the <code>subsettingFeature</code> must have <code>isConstant = true</code>.</p> + + + OCL2.0 + subsettedFeature.isConstant and subsettingFeature.isVariable implies + subsettingFeature.isConstant + + + + + + + <p>The <code>Feature</code> that is subsetted by the <code>subsettingFeature</code> of this <code>Subsetting</code>.</p> - - + + - - - <p>A <code>Type</code> with a superset of all instances of the <code>specific</code> <code>Type</code>, which might be the same set.</p> + + + <p>The <code>Feature</code> that is a subset of the <code>subsettedFeature</code> of this <code>Subsetting</code>.</p> - - + + - - - <p>A <code>Type</code> with a subset of all instances of the <code>general</code> <code>Type</code>, which might be the same set.</p> + + + <p>A <code>subsettingFeature</code> that is also the <code>owningRelatedElement</code> of this <code>Subsetting</code>.</p> + - - + + - - - - <p>The Intersectings that identify this Type as their <code>intersectingType</code>.</p> + + + + <p><code>Unioning</code> is a <code>Relationship</code> that makes its <code>unioningType</code> one of the <code>unioningTypes</code> of its <code>typeUnioned</code>.</p> + + + + + + <p><code>Type</code> with interpretations partly determined by <code>unioningType</code>, as described in <code>Type::unioningType</code>.</p> + - - - - - - - - <p>A Type that owns or inherits a FeatureMembership Relationship with the <code>feature</code>.</p> + + + + + + <p><code>Type</code> that partly determines interpretations of <code>typeUnioned</code>, as described in <code>Type::unioningType</code>.</p> + - - - + + + + <p>A <code>FeatureMembership</code> is an <code>OwningMembership</code> between an <code>ownedMemberFeature</code> and an <code>owningType</code>. If the <code>ownedMemberFeature</code> has <code>isVariable = false</code>, then the <code>FeatureMembership</code> implies that the <code>owningType</code> is also a <code>featuringType</code> of the <code>ownedMemberFeature</code>. If the <code>ownedMemberFeature</code> has <code>isVariable = true</code>, then the <code>FeatureMembership</code> implies that the <code>ownedMemberFeature</code> is featured by the <em><code>snapshots</code></em> of the <code>owningType</code>, which must specialize the Kernel Semantic Library base class <em><code>Occurrence</code></em>.</p> @@ -3364,86 +3302,39 @@ endif - - - - <p>The Types that include this one among their <code>differencingTypes</code>.</p> + + + + <p>The Disjoinings that identify this Type as their <code>disjoiningType</code>.</p> - - - - - - - - - <p>A Type that has an <code>inheritedMembership</code> with the <code>inheritedFeature</code> as its <code>memberFeature</code>.</p> - - - + + - - - - - <p>The Type that inherits the <code>inheritedMembership</code>.</p> - - - + + + + - - - - <p>The Types that include this one among their <code>intersectingTypes</code>.</p> + + + + <p>The Differencings that identify this Type as their <code>differencingType</code>.</p> - - + + - - - - <p>The Types that include this one among their <code>unioningTypes</code>.</p> + + + + <p>The Conjugations with a certain Type as the <code>originalType</code>.</p> - - + + - - - <p><code>Conjugation</code> is a <code>Relationship</code> between two types in which the <code>conjugatedType</code> inherits all the <code>Features</code> of the <code>originalType</code>, but with all <code>input</code> and <code>output</code> <code>Features</code> reversed. That is, any <code>Features</code> with a <code>direction</code> <em>in</em> relative to the <code>originalType</code> are considered to have an effective <code>direction</code> of <em>out</em> relative to the <code>conjugatedType</code> and, similarly, <code>Features</code> with <code>direction</code> <em>out</em> in the <code>originalType</code> are considered to have an effective <code>direction</code> of <em>in</em> in the <code>conjugatedType</code>. <code>Features</code> with <code>direction</code> <em>inout</em>, or with no <code>direction</code>, in the <code>originalType</code>, are inherited without change.</p> - -<p>A <code>Type</code> may participate as a <code>conjugatedType</code> in at most one <code>Conjugation</code> relationship, and such a <code>Type</code> may not also be the <code>specific</code> <code>Type</code> in any <code>Specialization</code> relationship.</p> - - - - - - <p>The <code>Type</code> to be conjugated.</p> - - - - - - - - <p>The <code>Type</code> that is the result of applying <code>Conjugation</code> to the <code>originalType</code>.</p> - - - - - - - - <p>The <code>conjugatedType</code> of this <code>Conjugation</code> that is also its <code>owningRelatedElement</code>.</p> - - - - - - <p>A <code>Type</code> is a <code>Namespace</code> that is the most general kind of <code>Element</code> supporting the semantics of classification. A <code>Type</code> may be a <code>Classifier</code> or a <code>Feature</code>, defining conditions on what is classified by the <code>Type</code> (see also the description of <code>isSufficient</code>).</p> @@ -4248,7 +4139,7 @@ specializes(mem.memberElement.oclAsType(Type)) - + @@ -4274,55 +4165,22 @@ endif - - - <p><code>Differencing</code> is a <code>Relationship</code> that makes its <code>differencingType</code> one of the <code>differencingTypes</code> of its <code>typeDifferenced</code>.</p> - - - - - - <p><code>Type</code> with interpretations partly determined by <code>differencingType</code>, as described in <code>Type::differencingType</code>.</p> - - - - - - - - <p><code>Type</code> that partly determines interpretations of <code>typeDifferenced</code>, as described in <code>Type::differencingType</code>.</p> - - - - - - - - - - - <p>The Specializations with a certain <code>specific</code> Type.</p> - - - - - - - - - <p>A Type with a certain <code>input</code>.</p> + + + + <p>A Type that owns or inherits a FeatureMembership Relationship with the <code>feature</code>.</p> - - + + - - - - <p>A Type with a certain <code>output</code>.</p> + + + + <p>A Type that has an <code>inheritedMembership</code> with the <code>inheritedFeature</code> as its <code>memberFeature</code>.</p> - - + + @@ -4355,21 +4213,6 @@ endif - - - - <p>A Type that has an EndFeatureMembership in which the <code>endFeature</code> is a <code>memberFeature</code>.</p> - - - - - - - - - - - @@ -4379,58 +4222,52 @@ endif - - - - <p>The Differencings that identify this Type as their <code>differencingType</code>.</p> - - - - - - - - - <p>The Disjoinings that identify this Type as their <code>disjoiningType</code>.</p> + + + + <p>A Type with a certain <code>input</code>.</p> - - + + - - - - <p><code>Intersecting</code> is a <code>Relationship</code> that makes its <code>intersectingType</code> one of the <code>intersectingTypes</code> of its <code>typeIntersected</code>.</p> + + + <p><code>FeatureDirectionKind</code> enumerates the possible kinds of <code>direction</code> that a <code>Feature</code> may be given as a member of a <code>Type</code>.</p> - - - - <p><code>Type</code> with interpretations partly determined by <code>intersectingType</code>, as described in <code>Type::intersectingType</code>.</p> + + + <p>Values of the <code>Feature</code> on each instance of its domain are determined externally to that instance and used internally.</p> - - - - - - <p><code>Type</code> that partly determines interpretations of <code>typeIntersected</code>, as described in <code>Type::intersectingType</code>.</p> + + + + <p>Values of the <code>Feature</code> on each instance are determined either as <em>in</em> or <em>out</em> directions, or both.</p> - - - + + + + <p>Values of the <code>Feature</code> on each instance of its domain are determined internally to that instance and used externally.</p> + + + - - - - <p>The Conjugations with a certain Type as the <code>originalType</code>.</p> + + + + + + <p>The Types that include this one among their <code>intersectingTypes</code>.</p> - - + + + <p>A <code>Multiplicity</code> is a <code>Feature</code> whose co-domain is a set of natural numbers giving the allowed cardinalities of each <code>typeWithMultiplicity</code>. The <em>cardinality</em> of a <code>Type</code> is defined as follows, depending on whether the <code>Type</code> is a <code>Classifier</code> or <code>Feature</code>. @@ -4444,13 +4281,13 @@ endif - <p>If the <code>owningType</code> of a <code>Multiplicity</code> is a <code>Feature</code>, then the <code>Multiplicity</code> must have the same <code>featuringTypes</code> as that <code>Feature</code>. Otherwise, it must have no <code>featuringTypes</code> (meaning that it is implicitly featured by the base <code>Classifier</code> <em><code>Anything</code></em>).</p> + <p>If the <code>owningNamespace</code> of a <code>Multiplicity</code> is a <code>Feature</code>, then the <code>Multiplicity</code> must have the same <code>featuringTypes</code> as that <code>Feature</code>. Otherwise, it must have no <code>featuringTypes</code> (meaning that it is implicitly featured by the base <code>Classifier</code> <em><code>Anything</code></em>).</p> OCL2.0 - if owningType <> null and owningType.oclIsKindOf(Feature) then + if owningNamespace <> null and owningNamespace.oclIsKindOf(Feature) then featuringType = - owningType.oclAsType(Feature).featuringType + owningNamespace.oclAsType(Feature).featuringType else featuringType->isEmpty() endif @@ -4467,104 +4304,247 @@ endif - - - - <p>A Type that owns or inherits the <code>featureMembership</code>.</p> + + + + + <p>The Type that inherits the <code>inheritedMembership</code>.</p> - - + + - - - - <p><code>FeatureDirectionKind</code> enumerates the possible kinds of <code>direction</code> that a <code>Feature</code> may be given as a member of a <code>Type</code>.</p> - - - - - <p>Values of the <code>Feature</code> on each instance of its domain are determined externally to that instance and used internally.</p> + + + + <p>The Disjoinings that identify this Type as their <code>typeDisjoined</code>.</p> - - - - <p>Values of the <code>Feature</code> on each instance are determined either as <em>in</em> or <em>out</em> directions, or both.</p> - + + + + + + + + + <p>The Intersectings that identify this Type as their <code>intersectingType</code>.</p> - - - - <p>Values of the <code>Feature</code> on each instance of its domain are determined internally to that instance and used externally.</p> - + + + + + + + + <p>The Specializations with a certain <code>specific</code> Type.</p> - + + + - - - - <p><code>Unioning</code> is a <code>Relationship</code> that makes its <code>unioningType</code> one of the <code>unioningTypes</code> of its <code>typeUnioned</code>.</p> + + + + <p>A Type with a certain <code>output</code>.</p> + + + + + + + + <p><code>Differencing</code> is a <code>Relationship</code> that makes its <code>differencingType</code> one of the <code>differencingTypes</code> of its <code>typeDifferenced</code>.</p> - - - - <p><code>Type</code> with interpretations partly determined by <code>unioningType</code>, as described in <code>Type::unioningType</code>.</p> + + + + <p><code>Type</code> with interpretations partly determined by <code>differencingType</code>, as described in <code>Type::differencingType</code>.</p> - - + + - - - <p><code>Type</code> that partly determines interpretations of <code>typeUnioned</code>, as described in <code>Type::unioningType</code>.</p> + + + <p><code>Type</code> that partly determines interpretations of <code>typeDifferenced</code>, as described in <code>Type::differencingType</code>.</p> - - + + - - - <p>A <code>Classifier</code> is a <code>Type</code> that classifies:</p> - -<ul> - <li>Things (in the universe) regardless of how <code>Features</code> relate them. (These are interpreted semantically as sequences of exactly one thing.)</li> - <li>How the above things are related by <code>Features.</code> (These are interpreted semantically as sequences of multiple things, such that the last thing in the sequence is also classified by the <code>Classifier</code>. Note that this means that a <code>Classifier</code> modeled as specializing a <code>Feature</code> cannot classify anything.)</li> -</ul> + + + <p><code>Conjugation</code> is a <code>Relationship</code> between two types in which the <code>conjugatedType</code> inherits all the <code>Features</code> of the <code>originalType</code>, but with all <code>input</code> and <code>output</code> <code>Features</code> reversed. That is, any <code>Features</code> with a <code>direction</code> <em>in</em> relative to the <code>originalType</code> are considered to have an effective <code>direction</code> of <em>out</em> relative to the <code>conjugatedType</code> and, similarly, <code>Features</code> with <code>direction</code> <em>out</em> in the <code>originalType</code> are considered to have an effective <code>direction</code> of <em>in</em> in the <code>conjugatedType</code>. <code>Features</code> with <code>direction</code> <em>inout</em>, or with no <code>direction</code>, in the <code>originalType</code>, are inherited without change.</p> +<p>A <code>Type</code> may participate as a <code>conjugatedType</code> in at most one <code>Conjugation</code> relationship, and such a <code>Type</code> may not also be the <code>specific</code> <code>Type</code> in any <code>Specialization</code> relationship.</p> - - - <p>The <code>ownedSubclassifications</code> of a <code>Classifier</code> are its <code>ownedSpecializations</code> that are <code>Subclassifications</code>.</p> + + + + <p>The <code>Type</code> to be conjugated.</p> + - - OCL2.0 - ownedSubclassification = - ownedSpecialization->selectByKind(Subclassification) - - - - - <p>If a <code>Classifier</code> has a <code>multiplicity</code>, then the <code>multiplicity</code> must have no <code>featuringTypes</code> (meaning that its domain is implicitly <em>Base::Anything</em>).</p> + + + + + + <p>The <code>Type</code> that is the result of applying <code>Conjugation</code> to the <code>originalType</code>.</p> + - + + + + + + <p>The <code>conjugatedType</code> of this <code>Conjugation</code> that is also its <code>owningRelatedElement</code>.</p> + + + + + + + + + + <p>The Types that include this one among their <code>differencingTypes</code>.</p> + + + + + + + + <p><code>Intersecting</code> is a <code>Relationship</code> that makes its <code>intersectingType</code> one of the <code>intersectingTypes</code> of its <code>typeIntersected</code>.</p> + + + + + + <p><code>Type</code> with interpretations partly determined by <code>intersectingType</code>, as described in <code>Type::intersectingType</code>.</p> + + + + + + + + <p><code>Type</code> that partly determines interpretations of <code>typeIntersected</code>, as described in <code>Type::intersectingType</code>.</p> + + + + + + + + + <p><code>Specialization</code> is a <code>Relationship</code> between two <code>Types</code> that requires all instances of the <code>specific</code> type to also be instances of the <code>general</code> Type (i.e., the set of instances of the <code>specific</code> Type is a <em>subset</em> of those of the <code>general</code> Type, which might be the same set).</p> + + + + + <p>The <code>specific</code> <code>Type</code> of a <code>Specialization</code> cannot be a conjugated <code>Type</code>.</p> + + OCL2.0 - multiplicity <> null implies multiplicity.featuringType->isEmpty() + not specific.isConjugated - - - - <p>The <code>ownedSpecializations</code> of this <code>Classifier</code> that are <code>Subclassifications</code>, for which this <code>Classifier</code> is the <code>subclassifier</code>.</p> + + + + <p>The <code>Type</code> that is the <code>specific</code> <code>Type</code> of this <code>Specialization</code> and owns it as its <code>owningRelatedElement</code>.</p> - - + + + + + + <p>A <code>Type</code> with a superset of all instances of the <code>specific</code> <code>Type</code>, which might be the same set.</p> + + + + + + + + <p>A <code>Type</code> with a subset of all instances of the <code>general</code> <code>Type</code>, which might be the same set.</p> + + + + + + + + + <p>The Specializations with a certain <code>general<code> Type.</p> + + + + + + + + + <p>A Type that owns or inherits the <code>featureMembership</code>.</p> + + + + + + + + + + <p>The Conjugation corresponding to the <code>conjugatedType</code>.</p> + + + + + + + + + <p>A Type that has an EndFeatureMembership in which the <code>endFeature</code> is a <code>memberFeature</code>.</p> + + + + + + + + + <p>The Types that include this one among their <code>unioningTypes</code>.</p> + + + + + + + + + <p>The Subclassifications with a certain <code>superclassifier</code>.</p> + + + + + + + + + <p>The Subclassifications with a certain <code>subclassifier</code>.</p> + + + + + @@ -4597,296 +4577,223 @@ endif - - - - <p>The Subclassifications with a certain <code>superclassifier</code>.</p> - - - - - - - - - <p>The Subclassifications with a certain <code>subclassifier</code>.</p> - - - - - - - - - - - - - - <p>A <code>Succession</code> is a binary <code>Connector</code> that requires its <code>relatedFeatures</code> to happen separately in time.</p> + + + <p>A <code>Classifier</code> is a <code>Type</code> that classifies:</p> + +<ul> + <li>Things (in the universe) regardless of how <code>Features</code> relate them. (These are interpreted semantically as sequences of exactly one thing.)</li> + <li>How the above things are related by <code>Features.</code> (These are interpreted semantically as sequences of multiple things, such that the last thing in the sequence is also classified by the <code>Classifier</code>. Note that this means that a <code>Classifier</code> modeled as specializing a <code>Feature</code> cannot classify anything.)</li> +</ul> + - - - <p>A <code>Succession</code> must directly or indirectly specialize the Feature <code><em>Occurrences::happensBeforeLinks</em></code> from the Kernel Semantic Library.</p> + + + <p>The <code>ownedSubclassifications</code> of a <code>Classifier</code> are its <code>ownedSpecializations</code> that are <code>Subclassifications</code>.</p> - + OCL2.0 - specializesFromLibrary('Occurrences::happensBeforeLinks') + ownedSubclassification = + ownedSpecialization->selectByKind(Subclassification) - + + + <p>If a <code>Classifier</code> has a <code>multiplicity</code>, then the <code>multiplicity</code> must have no <code>featuringTypes</code> (meaning that its domain is implicitly <em>Base::Anything</em>).</p> + + + OCL2.0 + multiplicity <> null implies multiplicity.featuringType->isEmpty() + + + + + + <p>The <code>ownedSpecializations</code> of this <code>Classifier</code> that are <code>Subclassifications</code>, for which this <code>Classifier</code> is the <code>subclassifier</code>.</p> + + + + + - - - - + + + + - - - - - + + + + - - - - + + + + - - - <p>A <code>Connector</code> is a usage of <code>Associations</code>, with links restricted according to instances of the <code>Type</code> in which they are used (domain of the <code>Connector</code>). The <code>associations</code> of the <code>Connector</code> restrict what kinds of things might be linked. The <code>Connector</code> further restricts these links to be between values of <code>Features</code> on instances of its domain.</p> - + + + <p>An <code>AssociationStructure</code> is an <code>Association</code> that is also a <code>Structure</code>, classifying link objects that are both links and objects. As objects, link objects can be created and destroyed, and their non-end <code>Features</code> can change over time. However, the values of the end <code>Features</code> of a link object are fixed and cannot change over its lifetime.</p> - - - <p>The <code>relatedFeatures</code> of a <code>Connector</code> are the referenced <code>Features</code> of its <code>connectorEnds</code>.</p> + + + <p>An <code>AssociationStructure</code> must directly or indirectly specialize the base <code>AssociationStructure</code> <code><em>Objects::LinkObject</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - relatedFeature = connectorEnd.ownedReferenceSubsetting-> - select(s | s <> null).subsettedFeature + specializesFromLibrary('Objects::LinkObject') - - - <p>Each <code>relatedFeature</code> of a <code>Connector</code> must have each <code>featuringType</code> of the <code>Connector</code> as a direct or indirect <code>featuringType</code> (where a <code>Feature</code> with no <code>featuringType</code> is treated as if the <code>Classifier</code> <code><em>Base::Anything</em></code> was its <code>featuringType</code>).</p> + + + <p>A binary <code>AssociationStructure</code> must directly or indirectly specialize the base <code>AssociationStructure</code> <code><em>Objects::BinaryLinkObject</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - relatedFeature->forAll(f | - if featuringType->isEmpty() then f.isFeaturedWithin(null) - else featuringType->forAll(t | f.isFeaturedWithin(t)) - endif) + endFeature->size() = 2 implies + specializesFromLibrary('Objects::BinaryLinkObject') - - - <p>The <code>sourceFeature</code> of a <code>Connector</code> is its first <code>relatedFeature</code> (if any).</p> + + + + + + + + + + + + <p>An <code>Association</code> is a <code>Relationship</code> and a <code>Classifier</code> to enable classification of links between things (in the universe). The co-domains (<code>types</code>) of the <code>associationEnd</code> <code>Features</code> are the <code>relatedTypes</code>, as co-domain and participants (linked things) of an <code>Association</code> identify each other.</p> + + + + + <p>The <code>relatedTypes</code> of an <code>Association</code> are the <code>types</code> of its <code>associationEnds</code>.</p> - + OCL2.0 - sourceFeature = - if relatedFeature->isEmpty() then null - else relatedFeature->first() - endif + relatedType = associationEnd.type - - - <p>The <code>targetFeatures</code> of a <code>Connector</code> are the <code>relatedFeatures</code> other than the <code>sourceFeature</code>.</p> + + + <p>An <code>Association</code> must directly or indirectly specialize the base <code>Association</code> <code><em>Links::Link</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - targetFeature = - if relatedFeature->size() < 2 then OrderedSet{} - else - relatedFeature-> - subSequence(2, relatedFeature->size())-> - asOrderedSet() - endif + specializesFromLibrary('Links::Link') - - - <p>If a <code>Connector</code> is concrete (not abstract), then it must have at least two <code>relatedFeatures</code>.</p> + + + <p>If an <code>Association</code> is also a kind of <code>Structure</code>, then it must be an <code>AssociationStructure</code>.</p> - - OCL2.0 - not isAbstract implies relatedFeature->size() >= 2 + + English + oclIsKindOf(Structure) = oclIsKindOf(AssociationStructure) - - - <p>A <code>Connector</code> must directly or indirectly specialize the base <code>Connector</code> <code><em>Links::links</em></code> from the Kernel Semantic Library.</p> + + + <p>A binary <code>Association</code> must directly or indirectly specialize the base <code>Association</code> <code><em>Links::binaryLink</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - specializesFromLibrary('Links::links') + associationEnd->size() = 2 implies + specializesFromLibrary('Links::BinaryLink') - - - <p>A <code>Connector</code> for an <code>AssociationStructure</code> must directly or indirectly specialize the base <code>Connector</code> <code><em>Objects::linkObjects</em></code> from the Kernel Semantic Library.</p> + + + <p>If an <code>Association</code> is concrete (not abstract), then it must have at least two <code>relatedTypes</code>.</p> - + OCL2.0 - association->exists(oclIsKindOf(AssociationStructure)) implies - specializesFromLibrary('Objects::linkObjects') + not isAbstract implies relatedType->size() >= 2 - - - <p>A binary <code>Connector</code> for an <code>AssociationStructure</code> must directly or indirectly specialize the base <code>Connector</code> <code><em>Objects::binaryLinkObjects</em></code> from the Kernel Semantic Library.</p> + + + <p>If an <code>Association</code> has more than two <code>associationEnds</code>, then it must <em>not</em> specialize, directly or indirectly, the <code>Association</code> <em><code>BinaryLink</code></em> from the Kernel Semantic Library.</p> - + OCL2.0 - connectorEnds->size() = 2 and -association->exists(oclIsKindOf(AssociationStructure)) implies - specializesFromLibrary('Objects::binaryLinkObjects') + associationEnds->size() > 2 implies + not specializesFromLibrary('Links::BinaryLink') - - - <p>A binary <code>Connector</code> must directly or indirectly specialize the base <code>Connector</code> <code><em>Links::binaryLinks</em></code> from the Kernel Semantic Library.</p> + + + <p>The <code>sourceType</code> of an <code>Association</code> is its first <code>relatedType</code> (if any).</p> - + OCL2.0 - connectorEnd->size() = 2 implies - specializesFromLibrary('Links::binaryLinks') + sourceType = + if relatedType->isEmpty() then null + else relatedType->first() endif - - - <p>If a <code>Connector</code> has more than two <code>connectorEnds</code>, then it must <em>not</em> specialize, directly or indirectly, the <code>Association</code> <em><code>BinaryLink</code></em> from the Kernel Semantic Library.</p> - - + + OCL2.0 - connectorEnds->size() > 2 implies - not specializesFromLibrary('Links::BinaryLink') + targetType = + if relatedType->size() < 2 then OrderedSet{} + else + relatedType-> + subSequence(2, relatedType->size())-> + asOrderedSet() + endif - - - <p>The <code>defaultFeaturingType</code> of a <code>Connector</code> is the innermost common direct or indirect <code>featuringType</code> of the <code>relatedFeatures</code> of the <code>Connector</code>, so that each <code>relatedElement</code> is featured within the <code>defaultFeaturingType</code>, if such exists.</p> + + + <p>The <code>ownedEndFeatures</code> of an <code>Association</code> must have exactly one <code>type</code></p>. - + OCL2.0 - let commonFeaturingTypes : OrderedSet(Type) = - relatedFeature->closure(featuringType)->select(t | - relatedFeature->forAll(f | f.isFeaturedWithin(t)) - ) in -let nearestCommonFeaturingTypes : OrderedSet(Type) = - commonFeaturingTypes->reject(t1 | - commonFeaturingTypes->exists(t2 | - t2 <> t1 and t2->closure(featuringType)->contains(t1) - )) in -if nearestCommonFeaturingTypes->isEmpty() then null -else nearestCommonFeaturingTypes->first() -endif + ownedEndFeature->forAll(type->size() = 1) - - - - - <p>The <code>Features</code> that are related by this <code>Connector</code> considered as a <code>Relationship</code> and that restrict the links it identifies, given by the referenced <code>Features</code> of the <code>connectorEnds</code> of the <code>Connector</code>.</p> + + + + + <p>The <code>types</code> of the <code>associationEnds</code> of the <code>Association</code>, which are the <code>relatedElements</code> of the <code>Association</code> considered as a <code>Relationship</code>.</p> - - + + - - - <p>The <code>Associations</code> that type the <code>Connector</code>.</p> + + + <p>The source <code>relatedType</code> for this <code>Association</code>. It is the first <code>relatedType</code> of the <code>Association</code>.</p> - - - - - - <p>The <code>endFeatures</code> of a <code>Connector</code>, which redefine the <code>endFeatures</code> of the <code>associations</code> of the <code>Connector</code>. The <code>connectorEnds</code> determine via <code>ReferenceSubsetting</code> <code>Relationships</code> which <code>Features</code> are related by the <code>Connector</code>.</p> - - - - - - - <p>The source <code>relatedFeature</code> for this <code>Connector</code>. It is the first <code>relatedFeature</code>.</p> - - - - - - - <p>The target <code>relatedFeatures</code> for this <code>Connector</code>. This includes all the <code>relatedFeatures</code> other than the <code>sourceFeature</code>.</p> - - - + + - - - <p>The innermost <code>Type</code> that is a common direct or indirect <code>featuringType</code> of the <code>relatedFeatures</code>, such that, if it exists and was the <code>featuringType</code> of this <code>Connector</code>, the <code>Connector</code> would satisfy the <code>checkConnectorTypeFeaturing</code> constraint.</p> + + + <p>The target <code>relatedTypes</code> for this <code>Association</code>. This includes all the <code>relatedTypes</code> other than the <code>sourceType</code>.</p> + - - + + - - - - <p>A <code>BindingConnector</code> is a binary <code>Connector</code> that requires its <code>relatedFeatures</code> to identify the same things (have the same values).</p> + + + <p>The <code>features</code> of the <code>Association</code> that identify the things that can be related by it. A concrete <code>Association</code> must have at least two <code>associationEnds</code>. When it has exactly two, the <code>Association</code> is called a <em>binary</em> <code>Association</code>.</p> - - - - <p>A <code>BindingConnector</code> must be binary.</p> - - - OCL2.0 - relatedFeature->size() = 2 - - - - - <p>A <code>BindingConnector</code> must directly or indirectly specialize the base <code>BindingConnector</code> <code><em>Links::selfLinks</em></code> from the Kernel Semantic Library.</p> - - - OCL2.0 - specializesFromLibrary('Links::selfLinks') - - - - - - - - - - - - - - - - - - - - <p>A <code>Connector</code> with a certain <code>defaultFeaturingType</code>.</p> - - - - - - - - - + + + @@ -4894,6 +4801,12 @@ endif + + + + + + <p>A <code>MultiplicityRange</code> is a <code>Multiplicity</code> whose value is defined to be the (inclusive) range of natural numbers given by the result of a <code>lowerBound</code> <code>Expression</code> and the result of an <code>upperBound</code> <code>Expression</code>. The result of these <code>Expressions</code> shall be of type <code><em>Natural</em></code>. If the result of the <code>upperBound</code> <code>Expression</code> is the unbounded value <code>*</code>, then the specified range includes all natural numbers greater than or equal to the <code>lowerBound</code> value. If no <code>lowerBound</code> <code>Expression</code>, then the default is that the lower bound has the same value as the upper bound, except if the <code>upperBound</code> evaluates to <code>*</code>, in which case the default for the lower bound is 0.</p> @@ -5063,729 +4976,555 @@ endif - - - - - - - - - - <p>The Expressions that are typed by a certain <code>function</code>.</p> - - - - - - - - - + + + + - - - - <p>The Expressions that have a certain Feature its owned or inherited <code>result</code>.</p> + + + + <p>The MetadataFeatures whose <code>type</code> is a certain Metaclass.</p> - - + + - - - <p>An <code>Invariant</code> is a <code>BooleanExpression</code> that is asserted to have a specific <code><em>Boolean</em></code> result value. If <code>isNegated = false</code>, then the result is asserted to be true. If <code>isNegated = true</code>, then the result is asserted to be false.</p> + + + <p>A <code>MetadataFeature</code> is a <code>Feature</code> that is an <code>AnnotatingElement</code> used to annotate another <code>Element</code> with metadata. It is typed by a <code>Metaclass</code>. All its <code>ownedFeatures</code> must redefine <code>features</code> of its <code>metaclass</code> and any feature bindings must be model-level evaluable.</p> + - - - <p>An <code>Invariant</code> must directly or indirectly specialize either of the following <code>BooleanExpressions</code> from the Kernel Semantic Library: <code><em>Performances::trueEvaluations</em></code>, if <code>isNegated = false</code>, or <code><em>Performances::falseEvaluations</em></code>, if <code>isNegated = true</code>.</p> + + + <p>A <code>MetadataFeature</code> must have exactly one <code>type</code> that is a <code>Metaclass</code>.</p> - + OCL2.0 - if isNegated then - specializesFromLibrary('Performances::falseEvaluations') -else - specializesFromLibrary('Performances::trueEvaluations') -endif + type->selectByKind(Metaclass).size() = 1 - - - - <p>Whether this <code>Invariant</code> is asserted to be false rather than true.</p> - - - - - - - - - <p>A <code>ReturnParameterMembership</code> is a <code>ParameterMembership</code> that indicates that the <code>ownedMemberParameter</code> is the <code>result</code> <code>parameter</code> of a <code>Function</code> or <code>Expression</code>. The <code>direction</code> of the <code>ownedMemberParameter</code> must be <code>out</code>.</p> - - - - - <p>The <code>owningType</code> of a <code>ReturnParameterMembership</code> must be a <code>Function</code> or <code>Expression</code>.</p> + + + <p>The <code>metaclass</code> of a <code>MetadataFeature</code> must not be abstract.</p> - + OCL2.0 - owningType.oclIsKindOf(Function) or owningType.oclIsKindOf(Expression) + not metaclass.isAbstract - - - - <p>The <code>ownedMemberParameter</code> of a <code>ReturnParameterMembership</code> must have direction <code>out</code>. (This is a leaf operation that cannot be further redefined.)</p> - - - - OCL2.0 - FeatureDirectionKind::out - - - - - - - - - - - <p>A <code>Function</code> is a <code>Behavior</code> that has an <code>out</code> <code>parameter</code> that is identified as its <code>result</code>. A <code>Function</code> represents the performance of a calculation that produces the values of its <code>result</code> <code>parameter</code>. This calculation may be decomposed into <code>Expressions</code> that are <code>steps</code> of the <code>Function</code>.</p> - - - - - <p>A <code>Function</code> must have exactly one <code>featureMembership</code> (owned or inherited) that is a <code>ResultParameterMembership</code>.</p> + + + <p>A <code>MetadataFeature</code> must directly or indirectly specialize the base <code>MetadataFeature</code> <code><em>Metaobjects::metaobjects</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - featureMembership-> - selectByKind(ReturnParameterMembership)-> - size() = 1 + specializesFromLibrary('Metaobjects::metaobjects') - - - <p>A <code>Function</code> must directly or indirectly specialize the base <code>Function</code> <code><em>Performances::Evaluation</em></code> from the Kernel Semantic Library.</p> + + + <p>Each <code>ownedFeature</code> of a <code>MetadataFeature</code> must have no declared name, redefine a single <code>Feature</code>, either have no <code>featureValue</code> or a <code>featureValue</code> with a <code>value</code> <code>Expression</code> that is model-level evaluable, and only have <code>ownedFeatures</code> that also meet these restrictions.</p> - + OCL2.0 - specializesFromLibrary('Performances::Evaluation') + ownedFeature->closure(ownedFeature)->forAll(f | + f.declaredName = null and f.declaredShortName = null and + f.valuation <> null implies f.valuation.value.isModelLevelEvaluable and + f.redefinition.redefinedFeature->size() = 1) - - - <p>If a <code>Function</code> has an <code>Expression</code> owned via a <code>ResultExpressionMembership</code>, then the owning <code>Function</code> must also own a <code>BindingConnector</code> between its <code>result</code> <code>parameter</code> and the <code>result</code> <code>parameter</code> of the result <code>Expression</code>.</p> + + + <p>The <code>metaclass</code> of a <code>MetadataFeature</code> is one of its <code>types</code> that is a <code>Metaclass</code>. - + OCL2.0 - ownedMembership.selectByKind(ResultExpressionMembership)-> - forAll(mem | ownedFeature.selectByKind(BindingConnector)-> - exists(binding | - binding.relatedFeature->includes(result) and - binding.relatedFeature->includes(mem.ownedResultExpression.result))) - + metaclass = + let metaclassTypes : Sequence(Type) = type->selectByKind(Metaclass) in + if metaclassTypes->isEmpty() then null + else metaClassTypes->first() + endif + - - - <p>The <code>result</code> <code>parameter</code> of a <code>Function</code> is its <code>parameter</code> owned (possibly in a supertype) via a <code>ReturnParameterMembership</code> (if any).</p> + + + <p>The <code>annotatedElements</code> of a <code>MetadataFeature</code> must have an abstract syntax metaclass consistent with the <code>annotatedElement</code> declarations for the <code>MetadataFeature</code>.</p> - + OCL2.0 - result = - let resultParams : Sequence(Feature) = - featureMemberships-> - selectByKind(ReturnParameterMembership). - ownedMemberParameter in - if resultParams->notEmpty() then resultParams->first() - else null - endif + let baseAnnotatedElementFeature : Feature = + resolveGlobal('Metaobjects::Metaobject::annotatedElement').memberElement. + oclAsType(Feature) in +let annotatedElementFeatures : OrderedSet(Feature) = feature-> + select(specializes(baseAnnotatedElementFeature))-> + excluding(baseAnnotatedElementFeature) in +annotatedElementFeatures->notEmpty() implies + let annotatedElementTypes : Set(Feature) = + annotatedElementFeatures.typing.type->asSet() in + let metaclasses : Set(Metaclass) = + annotatedElement.oclType().qualifiedName->collect(qn | + resolveGlobal(qn).memberElement.oclAsType(Metaclass)) in + metaclasses->forAll(m | annotatedElementTypes->exists(t | m.specializes(t))) - - - <p>A <code>Function</code> must have at most one <code>ResultExpressionMembership</code>.</p> + + + <p>If this <code>MetadataFeature</code> is an application of <code><em>SemanticMetadata</em></code>, then its <code>annotatingElement</code> must be a <code>Type</code>. The annotated <code>Type</code> must then directly or indirectly specialize the specified value of the <code><em>baseType</em></code>, <em>unless</em> the <code>Type</code> is a <code>Classifier</code> and the <code><em>baseType</em></code> represents a kind of <code>Feature</code>, in which case the <code>Classifier</code> must directly or indirectly specialize each of the <code>types</code> of the <code>Feature</code>.</p> - + OCL2.0 - membership->selectByKind(ResultExpressionMembership)->size() <= 1 + isSemantic() implies + let annotatedTypes : Sequence(Type) = + annotatedElement->selectAsKind(Type) in + let baseTypes : Sequence(MetadataFeature) = + evaluateFeature(resolveGlobal( + 'Metaobjects::SemanticMetadata::baseType'). + memberElement. + oclAsType(Feature))-> + selectAsKind(MetadataFeature) in + annotatedTypes->notEmpty() and + baseTypes()->notEmpty() and + baseTypes()->first().isSyntactic() implies + let annotatedType : Type = annotatedTypes->first() in + let baseType : Element = baseTypes->first().syntaxElement() in + if annotatedType.oclIsKindOf(Classifier) and + baseType.oclIsKindOf(Feature) then + baseType.oclAsType(Feature).type-> + forAll(t | annotatedType.specializes(t)) + else if baseType.oclIsKindOf(Type) then + annotatedType.specializes(baseType.oclAsType(Type)) + else + true + endif - - - - <p>The <code>Expressions</code> that are <code>steps</code> in the calculation of the <code>result</code> of this <code>Function</code>.</p> - - - - <p>The set of expressions that represent computational steps or parts of a system of equations within the Function.</p> - + + + + + <p>The <code>type</code> of this <code>MetadataFeature</code>, which must be a <code>Metaclass</code>.</p> - - + + - - - <p>The object or value that is the result of evaluating the Function.</p> - - - <p>The <code>result</code> <code>parameter</code> of the <code>Function</code>, which is owned by the <code>Function</code> via a <code>ReturnParameterMembership</code>.</p> - + + + <p>If the given <code>baseFeature</code> is a <code>feature</code> of this <code>MetadataFeature</code>, or is directly or indirectly redefined by a <code>feature</code>, then return the result of evaluating the appropriate (model-level evaluable) <code>value</code> <code>Expression</code> for it (if any), with the <code>MetadataFeature</code> as the target.</p> - - - - - - <p>Whether this <code>Function</code> can be used as the <code>function</code> of a model-level evaluable <code>InvocationExpression</code>. Certain <code>Functions</code> from the Kernel Functions Library are considered to have <code>isModelLevelEvaluable = true</code>. For all other <code>Functions</code> it is <code>false</code>.</p> - -<p><strong>Note:</strong> See the specification of the KerML concrete syntax notation for <code>Expressions</code> for an identification of which library <code>Functions</code> are model-level evaluable.</p> + + + OCL2.0 + let selectedFeatures : Sequence(Feature) = feature-> + select(closure(ownedRedefinition.redefinedFeature)-> + includes(baseFeature)) in +if selectedFeatures->isEmpty() then null +else + let selectedFeature : Feature = selectedFeatures->first() in + let featureValues : FeatureValue = selectedFeature-> + closure(ownedRedefinition.redefinedFeature).ownedMember-> + selectAsKind(FeatureValue) in + if featureValues->isEmpty() then null + else featureValues->first().value.evaluate(self) + endif + + + + + + + + + + + <p>Check if this <code>MetadataFeature</code> has a <code>metaclass</code> which is a kind of <code><em>SemanticMetadata</code>.<p> - - - - - - - <p>The Functions that have a certain Feature its owned or inherited <code>result</code>.</p> + + + OCL2.0 + specializesFromLibrary('Metaobjects::SemanticMetadata') + + + + + + + + + <p>Check if this <code>MetadataFeature</code> has a <code>metaclass</code> that is a kind of <code><em>KerML::Element</em></code> (that is, it is from the reflective abstract syntax model).</p> - - - - - - - - <p>The Functions that hasve a certain <code>expression</code> as a step.</p> + + + OCL2.0 + specializesFromLibrary('KerML::Element') + + + + + + + + + <p>If this <code>MetadataFeature</code> reflectively represents a model element, then return the corresponding <code>Element</code> instance from the MOF abstract syntax representation of the model.</p> - - - + + + English + No OCL + + + + + OCL2.0 + isSyntactic() + + + + + + + - - - <p>A <code>ResultExpressionMembership</code> is a <code>FeatureMembership</code> that indicates that the <code>ownedResultExpression</code> provides the result values for the <code>Function</code> or <code>Expression</code> that owns it. The owning <code>Function</code> or <code>Expression</code> must contain a <code>BindingConnector</code> between the <code>result</code> <code>parameter</code> of the <code>ownedResultExpression</code> and the <code>result</code> <code>parameter</code> of the owning <code>Function</code> or <code>Expression</code>.</p> - + + + <p>A <code>Metaclass</code> is a <code>Structure</code> used to type <code>MetadataFeatures</code>.</p> - - - <p>The <code>owningType</code> of a <code>ResultExpressionMembership</code> must be a <code>Function</code> or <code>Expression</code>.</p> + + + <p>A <code>Metaclass</code> must directly or indirectly specialize the base <code>Metaclass</code> <code><em>Metaobjects::Metaobject</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - owningType.oclIsKindOf(Function) or owningType.oclIsKindOf(Expression) + specializesFromLibrary('Metaobjects::Metaobject') - - - - <p>The <code>Expression</code> that provides the result for the owner of the <code>ResultExpressionMembership</code>.</p> - - - - - + - - - <p>A <code>Predicate</code> is a <code>Function</code> whose <code>result</code> <code>parameter</code> has type <code><em>Boolean</em></code> and multiplicity <code>1..1</code>.</p> + + + <p>A <code>Class</code> is a <code>Classifier</code> of things (in the universe) that can be distinguished without regard to how they are related to other things (via <code>Features</code>). This means multiple things classified by the same <code>Class</code> can be distinguished, even when they are related other things in exactly the same way.</p> - - - <p>A <code>Predicate</code> must directly or indirectly specialize the base <code>Predicate</code> <code><em>Performances::BooleanEvaluation</em></code> from the Kernel Semantic Library.</p> + + + <p>A <code>Class</code> must directly or indirectly specialize the base <code>Class</code> <code><em>Occurrences::Occurrence</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - specializesFromLibrary('Performances::BooleanEvaluation') + specializesFromLibrary('Occurrences::Occurrence') - - - - - <p>A <code>BooleanExpression</code> is a <em><code>Boolean</code></em>-valued <code>Expression</code> whose type is a <code>Predicate</code>. It represents a logical condition resulting from the evaluation of the <code>Predicate</code>.</p> - - - - - <p>A <code>BooleanExpression</code> must directly or indirectly specialize the base <code>BooleanExpression</code> <code><em>Performances::booleanEvaluations</em></code> from the Kernel Semantic Library.</p> + + + <p>A <code>Class</code> must not specialize a <code>DataType</code> and it can only specialize an <code>Association</code> if it is also itself a kind of <code>Association</code> (such as an <code>AssociationStructure</code> or <code>Interaction</code>).</p> - + OCL2.0 - specializesFromLibrary('Performances::booleanEvaluations') + ownedSpecialization.general-> + forAll(not oclIsKindOf(DataType)) and +not oclIsKindOf(Association) implies + ownedSpecialization.general-> + forAll(not oclIsKindOf(Association)) - - - - <p>The Predicate that types the Expression.</p> + + + + + <p>A <code>DataType</code> is a <code>Classifier</code> of things (in the universe) that can only be distinguished by how they are related to other things (via Features). This means multiple things classified by the same <code>DataType</code></p> + +<ul> + <li>Cannot be distinguished when they are related to other things in exactly the same way, even when they are intended to be about different things.</li> + <li>Can be distinguished when they are related to other things in different ways, even when they are intended to be about the same thing.</li> +</ul> + + + + <p>A <code>DataType</code> must not specialize a <code>Class</code> or an <code>Association</code>.</p> - - <p>The <code>Predicate</code> that types this <code>BooleanExpression</code>.</p> + + OCL2.0 + ownedSpecialization.general-> + forAll(not oclIsKindOf(Class) and + not oclIsKindOf(Association)) + + + + + <p>A <code>DataType</code> must directly or indirectly specialize the base <code>DataType</code> <code><em>Base::DataValue</em></code> from the Kernel Semantic Library.</p> - - - + + OCL2.0 + specializesFromLibrary('Base::DataValue') + + + - - - - <p>The ResultExpressionMembership that owns the <code>ownedResultExpression</code>.</p> + + + + <p>The ItemFlow that has a certain <code>targetInputFeature</code>.</p> - - + + - - - <p>An <code>Expression</code> is a <code>Step</code> that is typed by a <code>Function</code>. An <code>Expression</code> that also has a <code>Function</code> as its <code>featuringType</code> is a computational step within that <code>Function</code>. An <code>Expression</code> always has a single <code>result</code> parameter, which redefines the <code>result</code> parameter of its defining <code>function</code>. This allows <code>Expressions</code> to be interconnected in tree structures, in which inputs to each <code>Expression</code> in the tree are determined as the results of other <code>Expression</code> in the tree.</p> - + + + + + + + + + <p>A <code>FlowEnd</code> is a <code>Feature</code> that is one of the <code>connectorEnds</code> giving the <code><em>source</em></code> or <code><em>target</em></code> of a <code>Flow</code>. For <code>Flows</code> typed by <code><em>FlowTransfer</em></code> or its specializations, <code>FlowEnds</code> must have exactly one <code>ownedFeature</code>, which redefines <code><em>Transfer::source::sourceOutput</em></code> or <code><em>Transfer::target::targetInput</em></code> and redefines the corresponding feature of the <code>relatedElement</code> for its end.</p> - - - <p>Whether an <code>Expression</code> <code>isModelLevelEvaluable</code> is determined by the <code>modelLevelEvaluable()</code> operation.</p> + + + <p>A <code>FlowEnd</code> must be an end <code>Feature</code>.</p> - + OCL2.0 - isModelLevelEvaluable = modelLevelEvaluable(Set(Element){}) + isEnd - - - <p>An <code>Expression</code> must directly or indirectly specialize the base <code>Expression</code> <code><em>Performances::evaluations</em></code> from the Kernel Semantic Library.</p> + + + <p>A <code>FlowEnd</code> must have exactly one <code>ownedFeature</code>.</p> - + OCL2.0 - specializesFromLibrary('Performances::evaluations') + ownedFeature->size() = 1 - - - <p>If this <code>Expression</code> is owned by a <code>FeatureValue</code>, then it must have the same <code>featuringTypes</code> as the <code>featureWithValue</code> of the <code>FeatureValue</code>.</p> + + + <p>The <code>owningType</code> of a <code>FlowEnd</code> must be a <code>Flow</code>.</p> - + OCL2.0 - owningMembership <> null and -owningMembership.oclIsKindOf(FeatureValue) implies - let featureWithValue : Feature = - owningMembership.oclAsType(FeatureValue).featureWithValue in - featuringType = featureWithValue.featuringType + owningType <> null and owningType.oclIsKindOf(Flow) - - - <p>If an <code>Expression</code> has an <code>Expression</code> owned via a <code>ResultExpressionMembership</code>, then the owning <code>Expression</code> must also own a <code>BindingConnector</code> between its <code>result</code> <code>parameter</code> and the <code>result</code> <code>parameter</code> of the result <code>Expression</code>.</p> + + + + + <p>A <code>PayloadFeature</code> is the <code>ownedFeature</code> of a <code>Flow</code> that identifies the things carried by the kinds of transfers that are instances of the <code>Flow</code>.</p> + + + + <p>A <code>PayloadFeature</code> must redefine the <code>Feature</code> <code><em>Transfers::Transfer::payload</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - ownedMembership.selectByKind(ResultExpressionMembership)-> - forAll(mem | ownedFeature.selectByKind(BindingConnector)-> - exists(binding | - binding.relatedFeature->includes(result) and - binding.relatedFeature->includes(mem.ownedResultExpression.result))) + redefinesFromLibrary('Transfers::Transfer::payload') - - - <p>The <code>result</code> parameter of an <code>Expression</code> is its <code>parameter</code> owned (possibly in a supertype) via a <code>ReturnParameterMembership</code> (if any).</p> + + + + + <p>The ItemFlow that has a certain <code>itemType</code>.</p> + + + + + + + + + <p>An <code>Flow</code> is a <code>Step</code> that represents the transfer of values from one <code>Feature</code> to another. <code>Flows</code> can take non-zero time to complete.</p> + + + + + <p>A <code>Flow</code> must directly or indirectly specialize the <code>Step</code> <code><em>Transfers::transfers</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - result = - let resultParams : Sequence(Feature) = - featureMemberships-> - selectByKind(ReturnParameterMembership). - ownedMemberParameter in - if resultParams->notEmpty() then resultParams->first() - else null - endif - + specializesFromLibrary('Transfers::transfers') - - - <p>An <code>Expression</code> must have exactly one <code>featureMembership</code> (owned or inherited) that is a <code>ResultParameterMembership</code>.</p> + + + <p>The <code>payloadTypes</code> of a <code>Flow</code> are the <code>types</code> of the <code>payloadFeature</code> of the <code>Flow</code> (if any).</p> - + OCL2.0 - featureMembership-> - selectByKind(ReturnParameterMembership)-> - size() = 1 + payloadType = + if payloadFeature = null then Sequence{} + else payloadFeature.type + endif - - - <p>An <code>Expression</code> must have at most one <code>ResultExpressionMembership</code>.</p> + + + <p>The <code>sourceOutputFeature</code> of a <code>Flow</code> is the first <code>ownedFeature</code> of the first <code>connectorEnd</code> of the <code>Flow</code>.</p> - + OCL2.0 - membership->selectByKind(ResultExpressionMembership)->size() <= 1 + sourceOutputFeature = + if connectorEnd->isEmpty() or + connectorEnd.ownedFeature->isEmpty() + then null + else connectorEnd.ownedFeature->first() + endif - - - - <p>The <code>Function</code> that types this <code>Expression</code>.</p> - - - - <p>This is the Function that types the Expression.</p> - - - - - - - - <p><p>An <code>output</code> <code>parameter</code> of the <code>Expression</code> whose value is the result of the <code>Expression</code>. The result of an <code>Expression</code> is either inherited from its <code>function</code> or it is related to the <code>Expression</code> via a <code>ReturnParameterMembership</code>, in which case it redefines the <code>result</code> <code>parameter</code> of its <code>function</code>.</p> - - - - - - - - <p>Whether this <code>Expression</code> meets the constraints necessary to be evaluated at <em>model level</em>, that is, using metadata within the model.</p> - - - - - - <p>Return whether this <code>Expression</code> is model-level evaluable. The <code>visited</code> parameter is used to track possible circular <code>Feature</code> references made from <code>FeatureReferenceExpressions</code> (see the redefinition of this operation for <code>FeatureReferenceExpression</code>). Such circular references are not allowed in model-level evaluable expressions.</p> - -<p>An <code>Expression</code> that is not otherwise specialized is model-level evaluable if it has no (non-implied) <code>ownedSpecializations</code> and all its <code>ownedFeatures</code> are either <code>in</code> parameters, the <code>result</code> <code>parameter</code> or a result <code>Expression</code> owned via a <code>ResultExpressionMembership</code>. The <code>parameters</code> must not have any <code>ownedFeatures</code> or a <code>FeatureValue</code>, and the result <code>Expression</code> must be model-level evaluable.</p> - - - - OCL2.0 - ownedSpecialization->forAll(isImplied) and -ownedFeature->forAll(f | - (directionOf(f) = FeatureDirectionKind::_'in' or f = result) and - f.ownedFeature->isEmpty() and f.valuation = null or - f.owningFeatureMembership.oclIsKindOf(ResultExpressionMembership) and - f.oclAsType(Expression).modelLevelEvaluable(visited) - - - - - - - - - - - - - - <p>If this <code>Expression</code> <code>isModelLevelEvaluable</code>, then evaluate it using the <code>target</code> as the context <code>Element</code> for resolving <code>Feature</code> names and testing classification. The result is a collection of <code>Elements</code>, which, for a fully evaluable <code>Expression</code>, will be a <code>LiteralExpression</code> or a <code>Feature</code> that is not an <code>Expression</code>.</p> - - - - OCL2.0 - isModelLevelEvaluable - - - - - OCL2.0 - let resultExprs : Sequence(Expression) = - ownedFeatureMembership-> - selectByKind(ResultExpressionMembership). - ownedResultExpression in -if resultExpr->isEmpty() then Sequence{} -else resultExprs->first().evaluate(target) -endif - - - - - - - - - - - <p>Model-level evaluate this <code>Expression</code> with the given <code>target</code>. If the result is a <code>LiteralBoolean</code>, return its <code>value</code>. Otherwise return <code>false</code>.</p> - - - - - OCL2.0 - let results: Sequence(Element) = evaluate(target) in - result->size() = 1 and - results->first().oclIsKindOf(LiteralBoolean) and - results->first().oclAsType(LiteralBoolean).value - - - - - - - - - - - <p>A <code>FeatureValue</code> is a <code>Membership</code> that identifies a particular member <code>Expression</code> that provides the value of the <code>Feature</code> that owns the <code>FeatureValue</code>. The value is specified as either a bound value or an initial value, and as either a concrete or default value. A <code>Feature</code> can have at most one <code>FeatureValue</code>.</p> - -<p>The result of the <code>value</code> <code>Expression</code> is bound to the <code>featureWithValue</code> using a <code>BindingConnector</code>. If <code>isInitial = false</code>, then the <code>featuringType</code> of the <code>BindingConnector</code> is the same as the <code>featuringType</code> of the <code>featureWithValue</code>. If <code>isInitial = true</code>, then the <code>featuringType</code> of the <code>BindingConnector</code> is restricted to its <code>startShot</code>. - -<p>If <code>isDefault = false</code>, then the above semantics of the <code>FeatureValue</code> are realized for the given <code>featureWithValue</code>. Otherwise, the semantics are realized for any individual of the <code>featuringType</code> of the <code>featureWithValue</code>, unless another value is explicitly given for the <code>featureWithValue</code> for that individual.</p> - - - - - <p>If <code>isDefault = false</code>, then the <code>featureWithValue</code> must have an <code>ownedMember</code> that is a <code>BindingConnector</code> whose <code>relatedElements</code> are the <code>featureWithValue</code> and a feature chain consisting of the <code>value</code> <code>Expression</code> and its <code>result</code>. If <code>isInitial = false</code>, then this <code>BindingConnector</code> must have <code>featuringTypes</code> that are the same as those of the <code>featureWithValue</code>. If <code>isInitial = true</code>, then the <code>BindingConnector</code> must have <code><em>that.startShot</em><code> as its <code>featuringType</code>.</p> + + + <p>The <code>targetInputFeature</code> of a <code>Flow</code> is the first <code>ownedFeature</code> of the second <code>connectorEnd</code> of the <code>Flow</code>.</p> - + OCL2.0 - not isDefault implies - featureWithValue.ownedMember-> - selectByKind(BindingConnector)->exists(b | - b.relatedFeature->includes(featureWithValue) and - b.relatedFeature->exists(f | - f.chainingFeature = Sequence{value, value.result}) and - if not isInitial then - b.featuringType = featureWithValue.featuringType - else - b.featuringType->exists(t | - t.oclIsKindOf(Feature) and - t.oclAsType(Feature).chainingFeature = - Sequence{ - resolveGlobal('Base::things::that'). - memberElement, - resolveGlobal('Occurrences::Occurrence::startShot'). - memberElement - } - ) - endif) + targetInputFeature = + if connectorEnd->size() < 2 or + connectorEnd->at(2).ownedFeature->isEmpty() + then null + else connectorEnd->at(2).ownedFeature->first() + endif - - - <p>All <code>Features</code> directly or indirectly redefined by the <code>featureWithValue</code> of a <code>FeatureValue</code> must have only default <code>FeatureValues</code>.</p> + + + <p>The <code>flowEnds</code> of a <code>Flow</code> are all its <code>connectorEnds</code> that are <code>FlowEnds</code>.</p> - + OCL2.0 - featureWithValue.redefinition.redefinedFeature-> - closure(redefinition.redefinedFeature).valuation-> - forAll(isDefault) + flowEnd = connectorEnd->selectByKind(FlowEnd) - - - <p>If a <code>FeatureValue</code> has <code>isInitial = true</code>, then its <code>featureWithValue</code> must have <code>isVariable = true</code>.</p> + + + <p>The <code>payloadFeature</code> of a <code>Flow</code> is the single one of its <code>ownedFeatures</code> that is a <code>PayloadFeature</code>.</p> - + OCL2.0 - isInitial implies featureWithValue.isVariable + payloadFeature = + let payloadFeatures : Sequence(PayloadFeature) = + ownedFeature->selectByKind(PayloadFeature) in + if payloadFeatures->isEmpty() then null + else payloadFeatures->first() + endif - - - - - <p>The Feature to be provided a value.</p> - - - <p>The <code>Feature</code> to be provided a value.</p> - - - - - - - - <p>The Expression that provides the value as a result.</p> - - - <p>The <code>Expression</code> that provides the value of the <code>featureWithValue</code> as its <code>result</code>.</p> - - - - - - - - <p>Whether this <code>FeatureValue</code> specifies a bound value or an initial value for the <code>featureWithValue</code>.</p> - - - - - - - <p>Whether this <code>FeatureValue</code> is a concrete specification of the bound or initial value of the <code>featureWithValue</code>, or just a default value that may be overridden.</p> - - - - - - - - - <p>The FeatureValue that owns the <code>value</code> Expression.</p> - - - - - - - - - <p>The (at most one) <code>ownedMembership</code> of this Feature that is the FeatureValue that provides the value of the Feature.</p> - - - - - - - - - <p>The Package that has a certain Expression as a <code>filterCondition</code>.</p> - - - - - - - - <p>A <code>LibraryPackage</code> is a <code>Package</code> that is the container for a model library. A <code>LibraryPackage</code> is itself a library <code>Element</code> as are all <code>Elements</code> that are directly or indirectly contained in it.</p> - - - - - - <p>Whether this <code>LibraryPackage</code> contains a standard library model. This should only be set to true for <code>LibraryPackages</code> in the standard Kernel Model Libraries or in normative model libraries for a language built on KerML.</p> - - - - - - - <p>The <code>libraryNamespace</code> for a <code>LibraryPackage</code> is itself.</p> - - - - OCL2.0 - self - - - - - - - - - - - - <p>The ElementFilterMembership that owns the <code>condition</code>.</p> - - - - - - - - <p>A <code>Package</code> is a <code>Namespace</code> used to group <code>Elements</code>, without any instance-level semantics. It may have one or more model-level evaluable <code>filterCondition</code> <code>Expressions</code> used to filter its <code>importedMemberships</code>. Any imported <code>member</code> must meet all of the <code>filterConditions</code>.</p> - - - - <p>The <code>filterConditions</code> of a <code>Package</code> are the <code>conditions</code> of its owned <code>ElementFilterMemberships</code>.</p> + + + + <p>A <code>Flow</code> must have at most one <code>ownedFeature</code> that is an <code>PayloadFeature</code>.</p> - + OCL2.0 - filterCondition = ownedMembership-> - selectByKind(ElementFilterMembership).condition + ownedFeature->selectByKind(PayloadFeature)->size() <= 1 - - - - <p>The model-level evaluable <code><em>Boolean</em></code>-valued <code>Expression</code> used to filter the <code>members</code> of this <code>Package</code>, which are owned by the <code>Package</code> are via <code>ElementFilterMemberships</code>.</p> + + + <p>A <code>Flow</code> with <code>ownedEndFeatures</code> must specialize the <code>Step</code> <code><em>Transfers::flowTransfers</em></code> from the Kernel Semantic Library.</p> + + + OCL2.0 + ownedEndFeatures->notEmpty() implies + specializesFromLibrary('Transfers::flowTransfers') + + + + + + + <p>The type of values transferred, which is the <code>type</code> of the <code>payloadFeature</code> of the <code>Flow</code>.</p> + - - + + - - - <p>Exclude <code>Elements</code> that do not meet all the <code>filterConditions</code>.</p> + + + <p>The <code>Feature</code> that receives the values carried by the <code>Flow</code>. It must be a <code>feature</code> of the <code>target</code> of the <code>Flow</code>.</p> + + + + + + + <p>The <code>Feature</code> that provides the items carried by the <code>Flow</code>. It must be a <code>feature</code> of the <code>source</code> of the <code>Flow</code>.</p> - - - OCL2.0 - self.oclAsType(Namespace).importedMemberships(excluded)-> - select(m | self.includeAsMember(m.memberElement)) - - - - - - - - - - - - - - <p>Determine whether the given <code>element</code> meets all the <code>filterConditions</code>.</p> + + + + + + <p>The <code>connectorEnds</code> of this <code>Flow</code> that are <code>FlowEnds</code>.</p> + - - - OCL2.0 - let metadataFeatures: Sequence(AnnotatingElement) = - element.ownedAnnotation.annotatingElement-> - selectByKind(MetadataFeature) in - self.filterCondition->forAll(cond | - metadataFeatures->exists(elem | - cond.checkCondition(elem))) - - - - - - - + + + + + + <p>The <code>ownedFeature</code> of the <code>Flow</code> that is a <code>PayloadFeature</code> (if any).</p> + + + + + + + + <p>The <code>Interactions</code> that type this <code>Flow</code>. <code>Interactions</code> are both <code>Associations</code> and <code>Behaviors</code>, which can type <code>Connectors</code> and <code>Steps</code>, respectively.</p> + + + + - - - <p><code>ElementFilterMembership</code> is a <code>Membership</code> between a <code>Namespace</code> and a model-level evaluable <code><em>Boolean</em></code>-valued <code>Expression</code>, asserting that imported <code>members</code> of the <code>Namespace</code> should be filtered using the <code>condition</code> <code>Expression</code>. A general <code>Namespace</code> does not define any specific filtering behavior, but such behavior may be defined for various specialized kinds of <code>Namespaces</code>.</p> + + + + + + + + + + <p>The ItemFlow that has a certain <code>sourceOutputFeature</code>.</p> + + + + + + + + <p>An <code>Interaction</code> is a <code>Behavior</code> that is also an <code>Association</code>, providing a context for multiple objects that have behaviors that impact one another.</p> - - - <p>The <code>condition</code> <code>Expression</code> must be model-level evaluable.</p> - - - OCL2.0 - condition.isModelLevelEvaluable - - - - - <p>The <code>result</code> <code>parameter</code> of the <code>condition</code> <code>Expression</code> must directly or indirectly specialize <code><em>ScalarValues::Boolean</em></code>.</p> + + + + + + <p>A <code>SuccessionFlow</code> is a <code>Flow</code> that also provides temporal ordering. It classifies <code><em>Transfers</em></code> that cannot start until the source <code><em>Occurrence</em></code> has completed and that must complete before the target <code><em>Occurrence</em></code> can start.</p> + + + + <p>A <code>SuccessionFlow</code> must directly or indirectly specialize the <code>Step</code> <code><em>Transfers::flowTransfersBefore</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - condition.result.specializesFromLibrary('ScalarValues::Boolean') + specializesFromLibrary('Transfers::flowTransfersBefore') - - - - <p>The model-level evaluable <code>Boolean</code>-valued <code>Expression</code> used to filter the imported <code>members</code> of the <code>membershipOwningNamespace</code> of this <code>ElementFilterMembership</code>.</p> - - - - - + + + + + + + + @@ -5816,95 +5555,26 @@ endif - - - - - - - <p>The model-level value of a <code>NullExpression</code> is an empty sequence.</p> - - - - OCL2.0 - Sequence{} - - - - - - - - - - - - <p>A <code>LiteralInfinity</code> is a <code>LiteralExpression</code> that provides the positive infinity value (<code>*</code>). It's <code>result</code> must have the type <code><em>Positive</em></code>.</p> - - - - - <p>A <code>LiteralInfinity</code> must directly or indirectly specialize <em><code>Performances::literalIntegerEvaluations</code></em> from the Kernel Semantic Library.</p> - - - OCL2.0 - specializesFromLibrary('Performances::literalIntegerEvaluations') - - - - - - - - <p>A <code>FeatureReferenceExpression</code> that has a certain <code>referent</code> <code>Feature</code>.</p> - - - - - - - - - <p>The <code>MetadataAccessExpressions</code> having a certain <code>Element</code> as their <code>referencedElement</code>.</p> - - - - - - - - - <p>A <code>InstantiationExpression</code> that has a certain <code>argument</code> <code>Expression</code>.</p> - - - - - - - - <p>A <code>LiteralInteger</code> is a <code>LiteralExpression</code> that provides an <code><em>Integer</em></code> value as a result. Its <code>result</code> <code>parameter</code> must have the type <code><em>Integer</em></code>.</p> - - - - - <p>A <code>LiteralInteger</code> must directly or indirectly specialize <em><code>Performances::literalIntegerEvaluations</code></em> from the Kernel Semantic Library.</p> - - - OCL2.0 - specializesFromLibrary('Performances::literalIntegerEvaluations') - - - - - - <p>The <code><em>Integer</em></code> value that is the result of evaluating this <code>LiteralInteger</code>.</p> - - - <p>The Integer value that is the result of evaluating this Expression.</p> - + + + + + + + <p>The model-level value of a <code>NullExpression</code> is an empty sequence.</p> - - + + + OCL2.0 + Sequence{} + + + + + + + + @@ -5958,403 +5628,372 @@ endif - - - <p>A <code>SelectExpression</code> is an <code>OperatorExpression</code> whose operator is <code>"select"</code>, which resolves to the <code>Function</code> <em><code>ControlFunctions::select</code></em> from the Kernel Functions Library.</p> + + + <p>A <code>LiteralInteger</code> is a <code>LiteralExpression</code> that provides an <code><em>Integer</em></code> value as a result. Its <code>result</code> <code>parameter</code> must have the type <code><em>Integer</em></code>.</p> + - - - <p>The <code>operator</code> of a <code>SelectExpression</code> must be <code>'select'</code>.</p> - - - OCL2.0 - operator = 'select' - - - - - <p>The <code>result</code> of a <code>SelectExpression</code> must specialize the <code>result</code> parameter of the first <code>argument</code> of the <code>SelectExpression</code>.</p> + + + <p>A <code>LiteralInteger</code> must directly or indirectly specialize <em><code>Performances::literalIntegerEvaluations</code></em> from the Kernel Semantic Library.</p> - + OCL2.0 - arguments->notEmpty() implies - result.specializes(arguments->first().result) + specializesFromLibrary('Performances::literalIntegerEvaluations') - - - - - - - - - <p>An <code>OperatorExpression</code> is an <code>InvocationExpression</code> whose <code>function</code> is determined by resolving its <code>operator</code> in the context of one of the standard packages from the Kernel Function Library.</p> - - - - - <p>An <code>operator</code> symbol that names a corresponding <code>Function</code> from one of the standard packages from the Kernel Function Library .</p> - - - - - - <p>The <code>instantiatedType</code> of an <code>OperatorExpression</code> is the resolution of it's <code>operator</code> from one of the packages <em><code>BaseFunctions</code></em>, <em><code>DataFunctions</code></em>, or <em><code>ControlFunctions</code></em> from the Kernel Function Library.</p> + + + + <p>The <code><em>Integer</em></code> value that is the result of evaluating this <code>LiteralInteger</code>.</p> - - - OCL2.0 - let libFunctions : Sequence(Element) = - Sequence{'BaseFunctions', 'DataFunctions', 'ControlFunctions'}-> - collect(ns | resolveGlobal(ns + "::'" + operator + "'"). - memberElement) in -if libFunctions->isEmpty() then null -else libFunctions->first().oclAsType(Type) -endif - - - - - - - - <p>A <code>CollectExpression</code> is an <code>OperatorExpression</code> whose <code>operator</code> is <code>"collect"</code>, which resolves to the <code>Function</code> <em><code>ControlFunctions::collect</code></em> from the Kernel Functions Library.</p> - - - - <p>The <code>operator</code> of a <code>CollectExpression</code> must be <code>"collect"</code>.</p> + + <p>The Integer value that is the result of evaluating this Expression.</p> + - - OCL2.0 - operator = 'collect' - - - - - - + - - - <p>A <code>FeatureReferenceExpression</code> is an <code>Expression</code> whose <code>result</code> is bound to a <code>referent</code> <code>Feature</code>.</p> - - - - <p>The <code>referent</code> of a <code>FeatureReferenceExpression</code> is the <code>memberElement</code> of its first <code>ownedMembership</code> that is not a <code>ParameterMembership</code>.</p> - - - OCL2.0 - referent = - let nonParameterMemberships : Sequence(Membership) = ownedMembership-> - reject(oclIsKindOf(ParameterMembership)) in - if nonParameterMemberships->isEmpty() or - not nonParameterMemberships->first().memberElement.oclIsKindOf(Feature) - then null - else nonParameterMemberships->first().memberElement.oclAsType(Feature) - endif - - - - - <p>A <code>FeatureReferenceExpression</code> must have an <code>ownedMember</code> that is a <code>BindingConnector</code> between the <code>referent</code> and <code>result</code> of the <code>FeatureReferenceExpression</code>.</p> - - - OCL2.0 - ownedMember->selectByKind(BindingConnector)->exists(b | - b.relatedFeatures->includes(targetFeature) and - b.relatedFeatures->includes(result)) - - - - - <p>The first <code>ownedMembership</code> of a <code>FeatureReferenceExpression</code> that is not a <code>ParameterMembership</code> must have a <code>Feature</code> as its <code>memberElement</code>.</p> - - - OCL2.0 - let membership : Membership = - ownedMembership->reject(m | m.oclIsKindOf(ParameterMembership)) in -membership->notEmpty() and -membership->at(1).memberElement.oclIsKindOf(Feature) - - - - - <p>The <code>result</code> parameter of a <code>FeatureReferenceExpression</code> must specialize the <code>referent</code> of the <code>FeatureReferenceExpression</code>.</p> - - - OCL2.0 - result.owningType() = self and result.specializes(referent) - - - - - <p>A <code>FeatureReferenceExpression</code> must own its <code>result</code> parameter.</p> - - - OCL2.0 - result.owningType = self - - - - - - <p>The <code>Feature</code> that is referenced by this <code>FeatureReferenceExpression</code>, which is its first non-<code>parameter</code> <code>member</code>.<p> - - - - - - - <p>A <code>FeatureReferenceExpression</code> is model-level evaluable if it&#39;s <code>referent</code></p> - -<ul> - <li>conforms to the self-reference feature <code><em>Anything::self</em></code>;</li> - <li>is an <code>Expression</code> that is model-level evaluable;</li> - <li>has an <code>owningType</code> that is a <code>Metaclass</code> or <code>MetadataFeature</code>; or</li> - <li>has no <code>featuringTypes</code> and, if it has a <code>FeatureValue</code>, the <code>value</code> <code>Expression</code> is model-level evaluable.</li> -</ul> - - - - - OCL2.0 - referent.conformsTo('Anything::self') or -visited->excludes(referent) and -(referent.oclIsKindOf(Expression) and - referent.oclAsType(Expression).modelLevelEvaluable(visited->including(referent)) or -referent.owningType <> null and - (referent.owningType.isOclKindOf(MetaClass) or - referent.owningType.isOclKindOf(MetadataFeature)) or -referent.featuringType->isEmpty() and - (referent.valuation = null or - referent.valuation.modelLevelEvaluable(visited->including(referent)))) - - - - - - - - - - - - - <p>First, determine a <code>value</code> <code>Expression</code> for the <code>referent</code>:</p> - -<ul> - <li>If the <code>target</code> <code>Element</code> is a Type that has a <code>feature</code> that is the <code>referent</code> or (directly or indirectly) redefines it, then the <code>value</code> <code>Expression</code> of the <code>FeatureValue</code> for that <code>feature</code> (if any).</li> - <li>Else, if the <code>referent</code> has no <code>featuringTypes</code>, the <code>value</code> <code>Expression</code> of the <code>FeatureValue</code> for the <code>referent</code> (if any).</li> -</ul> - -<p>Then:</p> - -<ul> - <li>If such a value <code>Expression</code> exists, return the result of evaluating that <code>Expression</code> on the <code>target</code>.</li> - <li>Else, if the <code>referent</code> is not an <code>Expression</code>, return the <code>referent</code>.</li> - <li>Else return the empty sequence.</li> -</ul> - + + + + <p>A <code>FeatureReferenceExpression</code> that has a certain <code>referent</code> <code>Feature</code>.</p> - - - OCL2.0 - if not target.oclIsKindOf(Type) then Sequence{} -else - let feature: Sequence(Feature) = - target.oclAsType(Type).feature->select(f | - f.ownedRedefinition.redefinedFeature-> - includes(referent)) in - if feature->notEmpty() then - feature.valuation.value.evaluate(target) - else if referent.featuringType->isEmpty() - then referent - else Sequence{} - endif endif -endif - - - - - - - - + + + - - - <p>An <code>IndexExpression</code> is an <code>OperatorExpression</code> whose operator is <code>"#"</code>, which resolves to the <code>Function</code> <em><code>BasicFunctions::'#'</code></em> from the Kernel Functions Library.</p> + + + <p>A <code>SelectExpression</code> is an <code>OperatorExpression</code> whose operator is <code>"select"</code>, which resolves to the <code>Function</code> <em><code>ControlFunctions::select</code></em> from the Kernel Functions Library.</p> - - - <p>The <code>result</code> of an <code>IndexExpression</code> must specialize the <code>result</code> parameter of the first <code>argument</code> of the <code>IndexExpression</code>, unless that <code>result</code> already directly or indirectly specializes the <code>DataType</code> <em><code>Collections::Array</code></em> from the Kernel Data Type Library.</p> + + + <p>The <code>operator</code> of a <code>SelectExpression</code> must be <code>'select'</code>.</p> - + OCL2.0 - arguments->notEmpty() and -not arguments->first().result.specializesFromLibrary('Collections::Array') implies - result.specializes(arguments->first().result) + operator = 'select' - - - <p>The <code>operator</code> of an <code>IndexExpression</code> must be <code>"#"</code>.</p> + + + <p>The <code>result</code> of a <code>SelectExpression</code> must specialize the <code>result</code> parameter of the first <code>argument</code> of the <code>SelectExpression</code>.</p> - + OCL2.0 - operator = '#' + arguments->notEmpty() implies + result.specializes(arguments->first().result) - - + + - + - - - <p>An <code>InvocationExpression</code> is an <code>InstantiationExpression</code> whose <code>instantiatedType</code> must be a <code>Behavior</code> or a <code>Feature</code> typed by a single <code>Behavior</code> (such as a <code>Step</code>). Each of the input <code>parameters</code> of the <code>instantiatedType</code> are bound to the <code>result</code> of an <code>argument</code> <code>Expression</code>. If the <code>instantiatedType</code> is a <code>Function</code> or a <code>Feature</code> typed by a <code>Function</code>, then the <code>result</code> of the <code>InvocationExpression</code> is the <code>result</code> of the invoked <code>Function</code>. Otherwise, the <code>result</code> is an instance of the <code>instantiatedType</code> (essentially like a behavioral <code>ConstructorExpression</code>).</p> - + + + <p>A <code>ConstructorExpression</code> is an <code>InstantiationExpression</code> whose <code>result</code> specializes its <code>instantiatedType</code>, binding some or all of the <code>features</code> of the <code>instantiatedType</code> to the <code>results</code> of its <code>argument</code> <code>Expressions</code>.</p> - - - <p>If the <code>instantiatedType</code> of an <code>InvocationExpression</code> is neither a <code>Function</code> nor a <code>Feature</code> whose type is a <code>Function</code>, then the <code>InvocationExpression</code> must own a <code>BindingConnector</code> between itself and its <code>result</code> parameter.</p> + + + <p>The <code>arguments</code> of a <code>ConstructorExpression</code> are the <code>value</code> <code>Expressions</code> of the <code>FeatureValues</code> of the <code>ownedFeatures</code> of its <code>result</code> parameter, in an order corresponding to the order of the <code>features</code> of the <code>instantiatedType</code> that the <code>result</code> <code>ownedFeatures</code> redefine.</p> - + OCL2.0 - not instantiatedType.oclIsKindOf(Function) and -not (instantiatedType.oclIsKindOf(Feature) and - instantiatedType.oclAsType(Feature).type->exists(oclIsKindOf(Function))) implies - ownedFeature.selectByKind(BindingConnector)->exists( - relatedFeature->includes(self) and - relatedFeature->includes(result)) + instantiatedType.feature->collect(f | + result.ownedFeatures->select(redefines(f)).valuation-> + select(v | v <> null).value +) - - - <p>An <code>InvocationExpression</code> must own a <code>BindingConnector</code> between the <code>featureWithValue</code> and <code>value</code> <code>Expression</code> of any <code>FeatureValue</code> that is the effective default value for a <code>feature</code> of the <code>instantiatedType</code> of the <code>InvocationExpression</code>.</p> + + + <p>Two different <code>ownedFeatures</code> of the <code>result</code> of a <code>ConstructorExpression</code> must not redefine the same <code>feature</code> of the <code>instantiatedType</code> of the <code>ConstructorExpression</code>.</p> - + + OCL2.0 + let features : OrderedSet(Feature) = instantiatedType.feature-> + select(visibility = VisibilityKind::public) in +result.ownedFeature->forAll(f1 | result.ownedFeature->forAll(f2 | + f1 <> f2 implies + f1.ownedRedefinition.redefinedFeature-> + intersection(f2.ownedRedefinition.redefinedFeature)-> + intersection(features)->isEmpty())) + + + + + <p>Each <code>ownedFeature</code> of the result of a <code>ConstructionExpression</code> must redefine exactly one public <code>feature</code> of the <code>instantiatedType</code> of the <code>ConstructorExpression</code>.</p> + + + OCL2.0 + let features : OrderedSet(Feature) = instantiatedType.feature-> + select(owningMembership.visibility = VisibilityKind::public) in +result.ownedFeature->forAll(f | + f.ownedRedefinition.redefinedFeature-> + intersection(features)->size() = 1) + + + + + <p>The <code>result</code> of a <code>ConstructorExpression</code> must own a <code>BindingConnector</code> between the <code>featureWithValue</code> and <code>value</code> <code>Expression</code> of any <code>FeatureValue</code> that is the effective default value for a <code>feature</code> of the <code>instantiatedType</code> of the <code>InvocationExpression</code>.</p> + + OCL2.0 TBD - - - <p>The <code>arguments</code> of an <code>InvocationExpression</code> are the <code>value</code> <code>Expressions</code> of the <code>FeatureValues</code> of its <code>ownedFeatures</code>, in an order corresponding to the order of the <code>input</code> parameters of the <code>instantiatedType</code> that the <code>ownedFeatures</code> redefine.</p> + + + <p>A <code>ConstructorExpression</code> must directly or indirectly specialize the <code>Expression</code> <em><code>Performances::constructorEvaluations</code></em> from the Kernel Semantic Library.</p> - + OCL2.0 - instantiatedType.input->collect(inp | - ownedFeatures->select(redefines(inp)).valuation-> - select(v | v <> null).value -) + specializes('Performances::constructorEvaluations') - - - <p>Each <code>input</code> parameter of an <code>InvocationExpression</code> must redefine exactly one <code>input</code> parameter of the <code>instantiatedType</code> of the <code>InvocationExpression</code>.</p> + + + <p>The <code>result</code> of a <code>ConstructorExpression</code> must specialize the <code>instantiatedType</code> of the <code>ConstructorExpression</code>.</p> - + OCL2.0 - let parameters : OrderedSet(Feature) = instantiatedType.input in -input->forAll(inp | - inp.ownedRedefinition.redefinedFeature-> - intersection(parameters)->size() = 1) + result.specializes(instantiatedType) - - - <p>Two different <code>ownedFeatures</code> of an <code>InvocationExpression</code> must not redefine the same <code>feature</code> of the <code>instantiatedType</code> of the <code>InvocationExpression</code>.</p> + + + <p>A <code>ConstructorExpression</code> must not have any <code>ownedFeatures</code> other than its <code>result</code>.</p> - + OCL2.0 - let features : OrderedSet(Feature) = instantiatedType.feature in -input->forAll(inp1 | input->forAll(inp2 | - inp1 <> inp2 implies - inp1.ownedRedefinition.redefinedFeature-> - intersection(inp2.ownedRedefinition.redefinedFeature)-> - intersection(features)->isEmpty())) + ownedFeatures->excluding(result)->isEmpty() - - - <p>If the <code>instantiatedType</code> of an <code>InvocationExpression</code> is neither a <code>Function</code> nor a <code>Feature</code> whose type is a <code>Function</code>, then the <code>result</code> of the <code>InvocationExpression</code> must specialize the <code>instantiatedType</code>.</p> + + + + <p>A <code>ConstructorExpression</code> is model-level evaluable if all its argument <code>Expressions</code> are model-level evaluable.</p> + - + + + OCL2.0 + argument->forAll(modelLevelEvaluable(visited)) + + + + + + + + + + + + + + <p>A <code>CollectExpression</code> is an <code>OperatorExpression</code> whose <code>operator</code> is <code>"collect"</code>, which resolves to the <code>Function</code> <em><code>ControlFunctions::collect</code></em> from the Kernel Functions Library.</p> + + + + <p>The <code>operator</code> of a <code>CollectExpression</code> must be <code>"collect"</code>.</p> + + OCL2.0 - not instantiatedType.oclIsKindOf(Function) and -not (instantiatedType.oclIsKindOf(Feature) and - instantiatedType.oclAsType(Feature).type->exists(oclIsKindOf(Function))) implies - result.specializes(instantiatedType) + operator = 'collect' - - - <p>An <code>InvocationExpression</code> must specialize its <code>instantiatedType</code>.</p> + + + + + + + + + <p>A <code>LiteralExpression</code> is an <code>Expression</code> that provides a basic <code><em>DataValue</em></code> as a result.</p> + + + + + <p>A <code>LiteralExpression</code> is always model-level evaluable.</p> + + + OCL2.0 + isModelLevelEvaluable = true + + + + + <p>A <code>LiteralExpression</code> must directly or indirectly specialize the base <code>LiteralExpression</code> <code><em>Performances::literalEvaluations</em></code> from the Kernel Semantic Library.</p> + + + OCL2.0 + specializesFromLibrary('Performances::literalEvaluations') + + + + + + <p>A <code>LiteralExpression</code> is always model-level evaluable.</p> + + + + OCL2.0 + true + + + + + + + + + + + + + <p>The model-level value of a <code>LiteralExpression</code> is itself.</p> + + + + OCL2.0 + Sequence{self} + + + + + + + + + + + + + + + + + + <p>A <code>MetadataAccessExpression</code> is an <code>Expression</code> whose <code>result</code> is a sequence of instances of <code>Metaclasses</code> representing all the <code>MetadataFeature</code> annotations of the <code>referencedElement</code>. In addition, the sequence includes an instance of the reflective <code>Metaclass</code> corresponding to the MOF class of the <code>referencedElement</code>, with values for all the abstract syntax properties of the <code>referencedElement</code>.</p> + + + + <p>A <code>MetadataAccessExpression</code> must directly or indirectly specialize the base <code>MetadataAccessExpression</code> <code><em>Performances::metadataAccessEvaluations</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - specializes(instantiatedType) + specializesFromLibrary('Performances::metadataAccessEvaluations') - - - <p>The <code>instantiatedType</code> of an <code>InvocationExpression</code> must be either a <code>Behavior</code> or a <code>Feature</code> with a single <code>type</code>, which is a <code>Behavior</code>.</p> + + + <p>A <code>MetadataAccessExpression</code> must have at least one <code>ownedMember</code> that is not a <code>FeatureMembership</code>.</p> - + OCL2.0 - instantiatedType.oclIsKindOf(Behavior) or -instantiatedType.oclIsKindOf(Feature) and - instantiatedType.type->exists(oclIsKindOf(Behavior)) and - instantiatedType.type->size(1) + ownedMembership->exists(not oclIsKindOf(FeatureMembership)) - - - <p>Other than its <code>result</code>, all the <code>ownedFeatures</code> of an <code>InvocationExpression</code> must have <code>direction = in</code>.</p> + + + <p>The <code>referencedElement</code> of a <code>MetadataAccessExpression</code> is the <code>memberElement</code> of its first <code>ownedMembership</code> that is not a <code>FeatureMembership</code>.</p> - + OCL2.0 - ownedFeature->forAll(f | - f <> result implies - f.direction = FeatureDirectionKind::_'in') + referencedElement = + let elements : Sequence(Element) = ownedMembership-> + reject(oclIsKindOf(FeatureMembership)).memberElement in + if elements->isEmpty() then null + else elements->first() + endif - - - - <p>An <code>InvocationExpression</code> is model-level evaluable if all its <code>argument</code> <code>Expressions</code> are model-level evaluable and its <code>function</code> is model-level evaluable.</p> - + + + + <p>The <code>Element</code> whose metadata is being accessed.</p> - - + + + + + + <p>A <code>MetadataAccessExpression</code> is always model-level evaluable.</p> + + + OCL2.0 - argument->forAll(modelLevelEvaluable(visited)) and - function.isModelLevelEvaluable + true - + - - - + + + - - - <p>Apply the <code>Function</code> that is the <code>type</code> of this <code>InvocationExpression</code> to the argument values resulting from evaluating each of the <code>argument</code> <code>Expressions</code> on the given <code>target</code>. If the application is not possible, then return an empty sequence.</p> - + + + <p>Return the <code>ownedElements</code> of the <code>referencedElement</code> that are <code>MetadataFeatures</code> and have the <code>referencedElement</code> as an <code>annotatedElement</code>, plus a <code>MetadataFeature</code> whose <code>annotatedElement</code> is the <code>referencedElement</code>, whose <code>metaclass</code> is the reflective <code>Metaclass</code> corresponding to the MOF class of the <code>referencedElement</code> and whose <code>ownedFeatures</code> are bound to the values of the MOF properties of the <code>referencedElement</code>.</p> - - - - + + + OCL2.0 + referencedElement.ownedElement-> + select(oclIsKindOf(MetadataFeature) + and annotatedElement->includes(referencedElement))-> + including(metaclassFeature()) + + + + + + + + + <p>Return a <code>MetadataFeature</code> whose <code>annotatedElement</code> is the <code>referencedElement</code>, whose <code>metaclass</code> is the reflective <code>Metaclass</code> corresponding to the MOF class of the <code>referencedElement</code> and whose <code>ownedFeatures</code> are bound to the MOF properties of the <code>referencedElement</code>.</p> + + + + + + + <p>An <code>OperatorExpression</code> is an <code>InvocationExpression</code> whose <code>function</code> is determined by resolving its <code>operator</code> in the context of one of the standard packages from the Kernel Function Library.</p> + + + + + <p>An <code>operator</code> symbol that names a corresponding <code>Function</code> from one of the standard packages from the Kernel Function Library .</p> + + + + + + <p>The <code>instantiatedType</code> of an <code>OperatorExpression</code> is the resolution of it's <code>operator</code> from one of the packages <em><code>BaseFunctions</code></em>, <em><code>DataFunctions</code></em>, or <em><code>ControlFunctions</code></em> from the Kernel Function Library.</p> + + + + OCL2.0 + let libFunctions : Sequence(Element) = + Sequence{'BaseFunctions', 'DataFunctions', 'ControlFunctions'}-> + collect(ns | resolveGlobal(ns + "::'" + operator + "'"). + memberElement) in +if libFunctions->isEmpty() then null +else libFunctions->first().oclAsType(Type) +endif + + + + @@ -6410,309 +6049,394 @@ instantiatedType.oclIsKindOf(Feature) and <p>Return the <code>Type</code> to act as the <code>instantiatedType</code> for this <code>InstantiationExpression</code>. By default, this is the <code>memberElement</code> of the first <code>ownedMembership</code> that is not a <code>FeatureMembership</code>, which must be a <code>Type</code>.</p> -<p><b>Note.</b> This operation is overridden in the subclass <code>OperatorExpression</code>.</p> +<p><b>Note.</b> This operation is overridden in the subclass <code>OperatorExpression</code>.</p> + + + + OCL2.0 + let members : Sequence(Element) = ownedMembership-> + reject(oclIsKindOf(FeatureMembership)).memberElement in +if members->isEmpty() or not members->first().oclIsKindOf(Type) then null +else typeMembers->first().oclAsType(Type) +endif + + + + + + + + + + + <p>A <code>FeatureReferenceExpression</code> is an <code>Expression</code> whose <code>result</code> is bound to a <code>referent</code> <code>Feature</code>.</p> + + + + <p>The <code>referent</code> of a <code>FeatureReferenceExpression</code> is the <code>memberElement</code> of its first <code>ownedMembership</code> that is not a <code>ParameterMembership</code>.</p> + + + OCL2.0 + referent = + let nonParameterMemberships : Sequence(Membership) = ownedMembership-> + reject(oclIsKindOf(ParameterMembership)) in + if nonParameterMemberships->isEmpty() or + not nonParameterMemberships->first().memberElement.oclIsKindOf(Feature) + then null + else nonParameterMemberships->first().memberElement.oclAsType(Feature) + endif + + + + + <p>A <code>FeatureReferenceExpression</code> must have an <code>ownedMember</code> that is a <code>BindingConnector</code> between the <code>referent</code> and <code>result</code> of the <code>FeatureReferenceExpression</code>.</p> + + + OCL2.0 + ownedMember->selectByKind(BindingConnector)->exists(b | + b.relatedFeatures->includes(targetFeature) and + b.relatedFeatures->includes(result)) + + + + + <p>The first <code>ownedMembership</code> of a <code>FeatureReferenceExpression</code> that is not a <code>ParameterMembership</code> must have a <code>Feature</code> as its <code>memberElement</code>.</p> + + + OCL2.0 + let membership : Membership = + ownedMembership->reject(m | m.oclIsKindOf(ParameterMembership)) in +membership->notEmpty() and +membership->at(1).memberElement.oclIsKindOf(Feature) + + + + + <p>The <code>result</code> parameter of a <code>FeatureReferenceExpression</code> must specialize the <code>referent</code> of the <code>FeatureReferenceExpression</code>.</p> + + + OCL2.0 + result.owningType() = self and result.specializes(referent) + + + + + <p>A <code>FeatureReferenceExpression</code> must own its <code>result</code> parameter.</p> + + + OCL2.0 + result.owningType = self + + + + + + <p>The <code>Feature</code> that is referenced by this <code>FeatureReferenceExpression</code>, which is its first non-<code>parameter</code> <code>member</code>.<p> + + + + + + + <p>A <code>FeatureReferenceExpression</code> is model-level evaluable if it&#39;s <code>referent</code></p> + +<ul> + <li>conforms to the self-reference feature <code><em>Anything::self</em></code>;</li> + <li>is an <code>Expression</code> that is model-level evaluable;</li> + <li>has an <code>owningType</code> that is a <code>Metaclass</code> or <code>MetadataFeature</code>; or</li> + <li>has no <code>featuringTypes</code> and, if it has a <code>FeatureValue</code>, the <code>value</code> <code>Expression</code> is model-level evaluable.</li> +</ul> + + + + + OCL2.0 + referent.conformsTo('Anything::self') or +visited->excludes(referent) and +(referent.oclIsKindOf(Expression) and + referent.oclAsType(Expression).modelLevelEvaluable(visited->including(referent)) or +referent.owningType <> null and + (referent.owningType.isOclKindOf(MetaClass) or + referent.owningType.isOclKindOf(MetadataFeature)) or +referent.featuringType->isEmpty() and + (referent.valuation = null or + referent.valuation.modelLevelEvaluable(visited->including(referent)))) + + + + + + + + + + + + + <p>First, determine a <code>value</code> <code>Expression</code> for the <code>referent</code>:</p> + +<ul> + <li>If the <code>target</code> <code>Element</code> is a Type that has a <code>feature</code> that is the <code>referent</code> or (directly or indirectly) redefines it, then the <code>value</code> <code>Expression</code> of the <code>FeatureValue</code> for that <code>feature</code> (if any).</li> + <li>Else, if the <code>referent</code> has no <code>featuringTypes</code>, the <code>value</code> <code>Expression</code> of the <code>FeatureValue</code> for the <code>referent</code> (if any).</li> +</ul> + +<p>Then:</p> + +<ul> + <li>If such a value <code>Expression</code> exists, return the result of evaluating that <code>Expression</code> on the <code>target</code>.</li> + <li>Else, if the <code>referent</code> is not an <code>Expression</code>, return the <code>referent</code>.</li> + <li>Else return the empty sequence.</li> +</ul> + - - + + OCL2.0 - let members : Sequence(Element) = ownedMembership-> - reject(oclIsKindOf(FeatureMembership)).memberElement in -if members->isEmpty() or not members->first().oclIsKindOf(Type) then null -else typeMembers->first().oclAsType(Type) + if not target.oclIsKindOf(Type) then Sequence{} +else + let feature: Sequence(Feature) = + target.oclAsType(Type).feature->select(f | + f.ownedRedefinition.redefinedFeature-> + includes(referent)) in + if feature->notEmpty() then + feature.valuation.value.evaluate(target) + else if referent.featuringType->isEmpty() + then referent + else Sequence{} + endif endif endif - - - + + + + - - - <p>A <code>MetadataAccessExpression</code> is an <code>Expression</code> whose <code>result</code> is a sequence of instances of <code>Metaclasses</code> representing all the <code>MetadataFeature</code> annotations of the <code>referencedElement</code>. In addition, the sequence includes an instance of the reflective <code>Metaclass</code> corresponding to the MOF class of the <code>referencedElement</code>, with values for all the abstract syntax properties of the <code>referencedElement</code>.</p> + + + <p>An <code>IndexExpression</code> is an <code>OperatorExpression</code> whose operator is <code>"#"</code>, which resolves to the <code>Function</code> <em><code>BasicFunctions::'#'</code></em> from the Kernel Functions Library.</p> - - - <p>A <code>MetadataAccessExpression</code> must directly or indirectly specialize the base <code>MetadataAccessExpression</code> <code><em>Performances::metadataAccessEvaluations</em></code> from the Kernel Semantic Library.</p> + + + <p>The <code>result</code> of an <code>IndexExpression</code> must specialize the <code>result</code> parameter of the first <code>argument</code> of the <code>IndexExpression</code>, unless that <code>result</code> already directly or indirectly specializes the <code>DataType</code> <em><code>Collections::Array</code></em> from the Kernel Data Type Library.</p> - + OCL2.0 - specializesFromLibrary('Performances::metadataAccessEvaluations') + arguments->notEmpty() and +not arguments->first().result.specializesFromLibrary('Collections::Array') implies + result.specializes(arguments->first().result) - - - <p>A <code>MetadataAccessExpression</code> must have at least one <code>ownedMember</code> that is not a <code>FeatureMembership</code>.</p> + + + <p>The <code>operator</code> of an <code>IndexExpression</code> must be <code>"#"</code>.</p> - + OCL2.0 - ownedMembership->exists(not oclIsKindOf(FeatureMembership)) + operator = '#' - - - <p>The <code>referencedElement</code> of a <code>MetadataAccessExpression</code> is the <code>memberElement</code> of its first <code>ownedMembership</code> that is not a <code>FeatureMembership</code>.</p> + + + + + + + + + <p>A <code>LiteralRational</code> is a <code>LiteralExpression</code> that provides a <code><em>Rational</em></code> value as a result. Its <code>result</code> <code>parameter</code> must have the type <code><em>Rational</em></code>.</p> + + + + + <p>A <code>LiteralRational</code> must directly or indirectly specialize <em><code>Performances::literalRationalEvaluations</code></em> from the Kernel Semantic Library.</p> - + OCL2.0 - referencedElement = - let elements : Sequence(Element) = ownedMembership-> - reject(oclIsKindOf(FeatureMembership)).memberElement in - if elements->isEmpty() then null - else elements->first() - endif + specializesFromLibrary('Performances::literalRationalEvaluations') - - - - <p>The <code>Element</code> whose metadata is being accessed.</p> - - - - - - - <p>A <code>MetadataAccessExpression</code> is always model-level evaluable.</p> - - - - OCL2.0 - true - - - - - - - - - - - - - <p>Return the <code>ownedElements</code> of the <code>referencedElement</code> that are <code>MetadataFeatures</code> and have the <code>referencedElement</code> as an <code>annotatedElement</code>, plus a <code>MetadataFeature</code> whose <code>annotatedElement</code> is the <code>referencedElement</code>, whose <code>metaclass</code> is the reflective <code>Metaclass</code> corresponding to the MOF class of the <code>referencedElement</code> and whose <code>ownedFeatures</code> are bound to the values of the MOF properties of the <code>referencedElement</code>.</p> + + + + <p>The value whose rational approximation is the result of evaluating this <code>LiteralRational</code>.</p> + - - - OCL2.0 - referencedElement.ownedElement-> - select(oclIsKindOf(MetadataFeature) - and annotatedElement->includes(referencedElement))-> - including(metaclassFeature()) - - - - - - - - - - - <p>Return a <code>MetadataFeature</code> whose <code>annotatedElement</code> is the <code>referencedElement</code>, whose <code>metaclass</code> is the reflective <code>Metaclass</code> corresponding to the MOF class of the <code>referencedElement</code> and whose <code>ownedFeatures</code> are bound to the MOF properties of the <code>referencedElement</code>.</p> + + <p>The Real value that is the result of evaluating this Expression.</p> - - + + - - - <p>A <code>ConstructorExpression</code> is an <code>InstantiationExpression</code> whose <code>result</code> specializes its <code>instantiatedType</code>, binding some or all of the <code>features</code> of the <code>instantiatedType</code> to the <code>results</code> of its <code>argument</code> <code>Expressions</code>.</p> + + + <p>An <code>InvocationExpression</code> is an <code>InstantiationExpression</code> whose <code>instantiatedType</code> must be a <code>Behavior</code> or a <code>Feature</code> typed by a single <code>Behavior</code> (such as a <code>Step</code>). Each of the input <code>parameters</code> of the <code>instantiatedType</code> are bound to the <code>result</code> of an <code>argument</code> <code>Expression</code>. If the <code>instantiatedType</code> is a <code>Function</code> or a <code>Feature</code> typed by a <code>Function</code>, then the <code>result</code> of the <code>InvocationExpression</code> is the <code>result</code> of the invoked <code>Function</code>. Otherwise, the <code>result</code> is an instance of the <code>instantiatedType</code> (essentially like a behavioral <code>ConstructorExpression</code>).</p> + - - - <p>The <code>arguments</code> of a <code>ConstructorExpression</code> are the <code>value</code> <code>Expressions</code> of the <code>FeatureValues</code> of the <code>ownedFeatures</code> of its <code>result</code> parameter, in an order corresponding to the order of the <code>features</code> of the <code>instantiatedType</code> that the <code>result</code> <code>ownedFeatures</code> redefine.</p> + + + <p>If the <code>instantiatedType</code> of an <code>InvocationExpression</code> is neither a <code>Function</code> nor a <code>Feature</code> whose type is a <code>Function</code>, then the <code>InvocationExpression</code> must own a <code>BindingConnector</code> between itself and its <code>result</code> parameter.</p> - + OCL2.0 - instantiatedType.feature->collect(f | - result.ownedFeatures->select(redefines(f)).valuation-> - select(v | v <> null).value -) + not instantiatedType.oclIsKindOf(Function) and +not (instantiatedType.oclIsKindOf(Feature) and + instantiatedType.oclAsType(Feature).type->exists(oclIsKindOf(Function))) implies + ownedFeature.selectByKind(BindingConnector)->exists( + relatedFeature->includes(self) and + relatedFeature->includes(result)) - - - <p>Two different <code>ownedFeatures</code> of the <code>result</code> of a <code>ConstructorExpression</code> must not redefine the same <code>feature</code> of the <code>instantiatedType</code> of the <code>ConstructorExpression</code>.</p> + + + <p>An <code>InvocationExpression</code> must own a <code>BindingConnector</code> between the <code>featureWithValue</code> and <code>value</code> <code>Expression</code> of any <code>FeatureValue</code> that is the effective default value for a <code>feature</code> of the <code>instantiatedType</code> of the <code>InvocationExpression</code>.</p> - + OCL2.0 - let features : OrderedSet(Feature) = instantiatedType.feature-> - select(visibility = VisibilityKind::public) in -result.ownedFeature->forAll(f1 | result.ownedFeature->forAll(f2 | - f1 <> f2 implies - f1.ownedRedefinition.redefinedFeature-> - intersection(f2.ownedRedefinition.redefinedFeature)-> - intersection(features)->isEmpty())) + TBD - - - <p>Each <code>ownedFeature</code> of the result of a <code>ConstructionExpression</code> must redefine exactly one public <code>feature</code> of the <code>instantiatedType</code> of the <code>ConstructorExpression</code>.</p> + + + <p>The <code>arguments</code> of an <code>InvocationExpression</code> are the <code>value</code> <code>Expressions</code> of the <code>FeatureValues</code> of its <code>ownedFeatures</code>, in an order corresponding to the order of the <code>input</code> parameters of the <code>instantiatedType</code> that the <code>ownedFeatures</code> redefine.</p> - + OCL2.0 - let features : OrderedSet(Feature) = instantiatedType.feature-> - select(owningMembership.visibility = VisibilityKind::public) in -result.ownedFeature->forAll(f | - f.ownedRedefinition.redefinedFeature-> - intersection(features)->size() = 1) + instantiatedType.input->collect(inp | + ownedFeatures->select(redefines(inp)).valuation-> + select(v | v <> null).value +) - - - <p>The <code>result</code> of a <code>ConstructorExpression</code> must own a <code>BindingConnector</code> between the <code>featureWithValue</code> and <code>value</code> <code>Expression</code> of any <code>FeatureValue</code> that is the effective default value for a <code>feature</code> of the <code>instantiatedType</code> of the <code>InvocationExpression</code>.</p> + + + <p>Each <code>input</code> parameter of an <code>InvocationExpression</code> must redefine exactly one <code>input</code> parameter of the <code>instantiatedType</code> of the <code>InvocationExpression</code>.</p> - + OCL2.0 - TBD + let parameters : OrderedSet(Feature) = instantiatedType.input in +input->forAll(inp | + inp.ownedRedefinition.redefinedFeature-> + intersection(parameters)->size() = 1) - - - <p>A <code>ConstructorExpression</code> must directly or indirectly specialize the <code>Expression</code> <em><code>Performances::constructorEvaluations</code></em> from the Kernel Semantic Library.</p> + + + <p>Two different <code>ownedFeatures</code> of an <code>InvocationExpression</code> must not redefine the same <code>feature</code> of the <code>instantiatedType</code> of the <code>InvocationExpression</code>.</p> - + OCL2.0 - specializes('Performances::constructorEvaluations') + let features : OrderedSet(Feature) = instantiatedType.feature in +input->forAll(inp1 | input->forAll(inp2 | + inp1 <> inp2 implies + inp1.ownedRedefinition.redefinedFeature-> + intersection(inp2.ownedRedefinition.redefinedFeature)-> + intersection(features)->isEmpty())) - - - <p>The <code>result</code> of a <code>ConstructorExpression</code> must specialize the <code>instantiatedType</code> of the <code>ConstructorExpression</code>.</p> + + + <p>If the <code>instantiatedType</code> of an <code>InvocationExpression</code> is neither a <code>Function</code> nor a <code>Feature</code> whose type is a <code>Function</code>, then the <code>result</code> of the <code>InvocationExpression</code> must specialize the <code>instantiatedType</code>.</p> - + OCL2.0 - result.specializes(instantiatedType) + not instantiatedType.oclIsKindOf(Function) and +not (instantiatedType.oclIsKindOf(Feature) and + instantiatedType.oclAsType(Feature).type->exists(oclIsKindOf(Function))) implies + result.specializes(instantiatedType) - - - <p>A <code>ConstructorExpression</code> must not have any <code>ownedFeatures</code> other than its <code>result</code>.</p> + + + <p>An <code>InvocationExpression</code> must specialize its <code>instantiatedType</code>.</p> - + OCL2.0 - ownedFeatures->excluding(result)->isEmpty() + specializes(instantiatedType) - - - - <p>A <code>ConstructorExpression</code> is model-level evaluable if all its argument <code>Expressions</code> are model-level evaluable.</p> - - - - - OCL2.0 - argument->forAll(modelLevelEvaluable(visited)) - - - - - - - - - - - - - - - - - - - - <p>A <code>LiteralExpression</code> is an <code>Expression</code> that provides a basic <code><em>DataValue</em></code> as a result.</p> - - - - - <p>A <code>LiteralExpression</code> is always model-level evaluable.</p> + + + <p>The <code>instantiatedType</code> of an <code>InvocationExpression</code> must be either a <code>Behavior</code> or a <code>Feature</code> with a single <code>type</code>, which is a <code>Behavior</code>.</p> - + OCL2.0 - isModelLevelEvaluable = true + instantiatedType.oclIsKindOf(Behavior) or +instantiatedType.oclIsKindOf(Feature) and + instantiatedType.type->exists(oclIsKindOf(Behavior)) and + instantiatedType.type->size(1) - - - <p>A <code>LiteralExpression</code> must directly or indirectly specialize the base <code>LiteralExpression</code> <code><em>Performances::literalEvaluations</em></code> from the Kernel Semantic Library.</p> + + + <p>Other than its <code>result</code>, all the <code>ownedFeatures</code> of an <code>InvocationExpression</code> must have <code>direction = in</code>.</p> - + OCL2.0 - specializesFromLibrary('Performances::literalEvaluations') + ownedFeature->forAll(f | + f <> result implies + f.direction = FeatureDirectionKind::_'in') - - - - <p>A <code>LiteralExpression</code> is always model-level evaluable.</p> + + + + <p>An <code>InvocationExpression</code> is model-level evaluable if all its <code>argument</code> <code>Expressions</code> are model-level evaluable and its <code>function</code> is model-level evaluable.</p> + - - + + OCL2.0 - true + argument->forAll(modelLevelEvaluable(visited)) and + function.isModelLevelEvaluable - + - - - + + + - - - <p>The model-level value of a <code>LiteralExpression</code> is itself.</p> + + + <p>Apply the <code>Function</code> that is the <code>type</code> of this <code>InvocationExpression</code> to the argument values resulting from evaluating each of the <code>argument</code> <code>Expressions</code> on the given <code>target</code>. If the application is not possible, then return an empty sequence.</p> + - - - OCL2.0 - Sequence{self} - - - - - - + + + + - - - - - - - - - <p>A <code>LiteralRational</code> is a <code>LiteralExpression</code> that provides a <code><em>Rational</em></code> value as a result. Its <code>result</code> <code>parameter</code> must have the type <code><em>Rational</em></code>.</p> + + + <p>A <code>LiteralInfinity</code> is a <code>LiteralExpression</code> that provides the positive infinity value (<code>*</code>). It's <code>result</code> must have the type <code><em>Positive</em></code>.</p> - - - <p>A <code>LiteralRational</code> must directly or indirectly specialize <em><code>Performances::literalRationalEvaluations</code></em> from the Kernel Semantic Library.</p> + + + <p>A <code>LiteralInfinity</code> must directly or indirectly specialize <em><code>Performances::literalIntegerEvaluations</code></em> from the Kernel Semantic Library.</p> - + OCL2.0 - specializesFromLibrary('Performances::literalRationalEvaluations') + specializesFromLibrary('Performances::literalIntegerEvaluations') - - - - <p>The value whose rational approximation is the result of evaluating this <code>LiteralRational</code>.</p> - - - - <p>The Real value that is the result of evaluating this Expression.</p> + + + + + + <p>The <code>MetadataAccessExpressions</code> having a certain <code>Element</code> as their <code>referencedElement</code>.</p> - - + + + @@ -6724,7 +6448,7 @@ result.ownedFeature->forAll(f | OCL2.0 - let sourceParameter : Feature = sourceTargetFeature() in + let sourceTargetFeature : Feature = sourceTargetFeature() in sourceTargetFeature <> null and sourceTargetFeature.redefinesFromLibrary('ControlFunctions::\'.\'::source::target') @@ -6735,7 +6459,7 @@ sourceTargetFeature.redefinesFromLibrary('ControlFunctions::\'.\'::source::targe OCL2.0 - let sourceParameter : Feature = sourceTargetFeature() in + let sourceTargetFeature : Feature = sourceTargetFeature() in sourceTargetFeature <> null and sourceTargetFeature.redefines(targetFeature) @@ -6826,975 +6550,1238 @@ endif - - - - - - - - - - - <p>The ItemFlow that has a certain <code>itemType</code>.</p> - - - - + + + + - - - - + + + + <p>A <code>InstantiationExpression</code> that has a certain <code>argument</code> <code>Expression</code>.</p> + + + - - - <p>A <code>PayloadFeature</code> is the <code>ownedFeature</code> of a <code>Flow</code> that identifies the things carried by the kinds of transfers that are instances of the <code>Flow</code>.</p> + + + <p>A <code>Structure</code> is a <code>Class</code> of objects in the modeled universe that are primarily structural in nature. While such an object is not itself behavioral, it may be involved in and acted on by <code>Behaviors</code>, and it may be the performer of some of them.</p> + - - - <p>A <code>PayloadFeature</code> must redefine the <code>Feature</code> <code><em>Transfers::Transfer::payload</em></code> from the Kernel Semantic Library.</p> + + + <p>A <code>Structure</code> must directly or indirectly specialize the base <code>Structure</code> <code><em>Objects::Object</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - redefinesFromLibrary('Transfers::Transfer::payload') + specializesFromLibrary('Objects::Object') - - - - - - - + + + <p>A <code>Structure</code> must not specialize a <code>Behavior</code>.</p> + + + OCL2.0 + ownedSpecialization.general->forAll(not oclIsKindOf(Behavior)) + + + - - - - <p>The ItemFlow that has a certain <code>sourceOutputFeature</code>.</p> + + + <p>A <code>Succession</code> is a binary <code>Connector</code> that requires its <code>relatedFeatures</code> to happen separately in time.</p> + + + + + <p>A <code>Succession</code> must directly or indirectly specialize the Feature <code><em>Occurrences::happensBeforeLinks</em></code> from the Kernel Semantic Library.</p> - - - + + OCL2.0 + specializesFromLibrary('Occurrences::happensBeforeLinks') + + + - - - - + + + + <p>A <code>Connector</code> with a certain <code>defaultFeaturingType</code>.</p> + + + - - - <p>An <code>Interaction</code> is a <code>Behavior</code> that is also an <code>Association</code>, providing a context for multiple objects that have behaviors that impact one another.</p> + + + <p>A <code>Connector</code> is a usage of <code>Associations</code>, with links restricted according to instances of the <code>Type</code> in which they are used (domain of the <code>Connector</code>). The <code>associations</code> of the <code>Connector</code> restrict what kinds of things might be linked. The <code>Connector</code> further restricts these links to be between values of <code>Features</code> on instances of its domain.</p> - - - - - - <p>A <code>FlowEnd</code> is a <code>Feature</code> that is one of the <code>connectorEnds</code> giving the <code><em>source</em></code> or <code><em>target</em></code> of a <code>Flow</code>. For <code>Flows</code> typed by <code><em>FlowTransfer</em></code> or its specializations, <code>FlowEnds</code> must have exactly one <code>ownedFeature</code>, which redefines <code><em>Transfer::source::sourceOutput</em></code> or <code><em>Transfer::target::targetInput</em></code> and redefines the corresponding feature of the <code>relatedElement</code> for its end.</p> - - - - <p>A <code>FlowEnd</code> must be an end <code>Feature</code>.</p> + + + <p>The <code>relatedFeatures</code> of a <code>Connector</code> are the referenced <code>Features</code> of its <code>connectorEnds</code>.</p> + + + OCL2.0 + relatedFeature = connectorEnd.ownedReferenceSubsetting-> + select(s | s <> null).subsettedFeature + + + + + <p>Each <code>relatedFeature</code> of a <code>Connector</code> must have each <code>featuringType</code> of the <code>Connector</code> as a direct or indirect <code>featuringType</code> (where a <code>Feature</code> with no <code>featuringType</code> is treated as if the <code>Classifier</code> <code><em>Base::Anything</em></code> was its <code>featuringType</code>).</p> - + OCL2.0 - isEnd + relatedFeature->forAll(f | + if featuringType->isEmpty() then f.isFeaturedWithin(null) + else featuringType->forAll(t | f.isFeaturedWithin(t)) + endif) - - - <p>A <code>FlowEnd</code> must have exactly one <code>ownedFeature</code>.</p> + + + <p>The <code>sourceFeature</code> of a <code>Connector</code> is its first <code>relatedFeature</code> (if any).</p> - + OCL2.0 - ownedFeature->size() = 1 + sourceFeature = + if relatedFeature->isEmpty() then null + else relatedFeature->first() + endif - - - <p>The <code>owningType</code> of a <code>FlowEnd</code> must be a <code>Flow</code>.</p> + + + <p>The <code>targetFeatures</code> of a <code>Connector</code> are the <code>relatedFeatures</code> other than the <code>sourceFeature</code>.</p> - + OCL2.0 - owningType <> null and owningType.oclIsKindOf(Flow) + targetFeature = + if relatedFeature->size() < 2 then OrderedSet{} + else + relatedFeature-> + subSequence(2, relatedFeature->size())-> + asOrderedSet() + endif - - - - - <p>A <code>SuccessionFlow</code> is a <code>Flow</code> that also provides temporal ordering. It classifies <code><em>Transfers</em></code> that cannot start until the source <code><em>Occurrence</em></code> has completed and that must complete before the target <code><em>Occurrence</em></code> can start.</p> - - - - <p>A <code>SuccessionFlow</code> must directly or indirectly specialize the <code>Step</code> <code><em>Transfers::flowTransfersBefore</em></code> from the Kernel Semantic Library.</p> + + + <p>If a <code>Connector</code> is concrete (not abstract), then it must have at least two <code>relatedFeatures</code>.</p> - + OCL2.0 - specializesFromLibrary('Transfers::flowTransfersBefore') + not isAbstract implies relatedFeature->size() >= 2 - - - - - - - <p>The ItemFlow that has a certain <code>targetInputFeature</code>.</p> + + + <p>A <code>Connector</code> must directly or indirectly specialize the base <code>Connector</code> <code><em>Links::links</em></code> from the Kernel Semantic Library.</p> - - - - - - - <p>An <code>Flow</code> is a <code>Step</code> that represents the transfer of values from one <code>Feature</code> to another. <code>Flows</code> can take non-zero time to complete.</p> - - - - - <p>A <code>Flow</code> must directly or indirectly specialize the <code>Step</code> <code><em>Transfers::transfers</em></code> from the Kernel Semantic Library.</p> + + OCL2.0 + specializesFromLibrary('Links::links') + + + + + <p>A <code>Connector</code> for an <code>AssociationStructure</code> must directly or indirectly specialize the base <code>Connector</code> <code><em>Objects::linkObjects</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - specializesFromLibrary('Transfers::transfers') + association->exists(oclIsKindOf(AssociationStructure)) implies + specializesFromLibrary('Objects::linkObjects') - - - <p>The <code>payloadTypes</code> of a <code>Flow</code> are the <code>types</code> of the <code>payloadFeature</code> of the <code>Flow</code> (if any).</p> + + + <p>A binary <code>Connector</code> for an <code>AssociationStructure</code> must directly or indirectly specialize the base <code>Connector</code> <code><em>Objects::binaryLinkObjects</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - payloadType = - if payloadFeature = null then Sequence{} - else payloadFeature.type - endif + connectorEnds->size() = 2 and +association->exists(oclIsKindOf(AssociationStructure)) implies + specializesFromLibrary('Objects::binaryLinkObjects') - - - <p>The <code>sourceOutputFeature</code> of a <code>Flow</code> is the first <code>ownedFeature</code> of the first <code>connectorEnd</code> of the <code>Flow</code>.</p> + + + <p>A binary <code>Connector</code> must directly or indirectly specialize the base <code>Connector</code> <code><em>Links::binaryLinks</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - sourceOutputFeature = - if connectorEnd->isEmpty() or - connectorEnd.ownedFeature->isEmpty() - then null - else connectorEnd.ownedFeature->first() - endif + connectorEnd->size() = 2 implies + specializesFromLibrary('Links::binaryLinks') - - - <p>The <code>targetInputFeature</code> of a <code>Flow</code> is the first <code>ownedFeature</code> of the second <code>connectorEnd</code> of the <code>Flow</code>.</p> + + + <p>If a <code>Connector</code> has more than two <code>connectorEnds</code>, then it must <em>not</em> specialize, directly or indirectly, the <code>Association</code> <em><code>BinaryLink</code></em> from the Kernel Semantic Library.</p> - + OCL2.0 - targetInputFeature = - if connectorEnd->size() < 2 or - connectorEnd->at(2).ownedFeature->isEmpty() - then null - else connectorEnd->at(2).ownedFeature->first() - endif + connectorEnds->size() > 2 implies + not specializesFromLibrary('Links::BinaryLink') - - - <p>The <code>flowEnds</code> of a <code>Flow</code> are all its <code>connectorEnds</code> that are <code>FlowEnds</code>.</p> + + + <p>The <code>defaultFeaturingType</code> of a <code>Connector</code> is the innermost common direct or indirect <code>featuringType</code> of the <code>relatedFeatures</code> of the <code>Connector</code>, so that each <code>relatedElement</code> is featured within the <code>defaultFeaturingType</code>, if such exists.</p> - + OCL2.0 - flowEnd = connectorEnd->selectByKind(FlowEnd) + let commonFeaturingTypes : OrderedSet(Type) = + relatedFeature->closure(featuringType)->select(t | + relatedFeature->forAll(f | f.isFeaturedWithin(t)) + ) in +let nearestCommonFeaturingTypes : OrderedSet(Type) = + commonFeaturingTypes->reject(t1 | + commonFeaturingTypes->exists(t2 | + t2 <> t1 and t2->closure(featuringType)->contains(t1) + )) in +if nearestCommonFeaturingTypes->isEmpty() then null +else nearestCommonFeaturingTypes->first() +endif - - - <p>The <code>payloadFeature</code> of a <code>Flow</code> is the single one of its <code>ownedFeatures</code> that is a <code>PayloadFeature</code>.</p> + + + + + <p>The <code>Features</code> that are related by this <code>Connector</code> considered as a <code>Relationship</code> and that restrict the links it identifies, given by the referenced <code>Features</code> of the <code>connectorEnds</code> of the <code>Connector</code>.</p> + - + + + + + + <p>The <code>Associations</code> that type the <code>Connector</code>.</p> + + + + + + + + <p>The <code>endFeatures</code> of a <code>Connector</code>, which redefine the <code>endFeatures</code> of the <code>associations</code> of the <code>Connector</code>. The <code>connectorEnds</code> determine via <code>ReferenceSubsetting</code> <code>Relationships</code> which <code>Features</code> are related by the <code>Connector</code>.</p> + + + + + + + <p>The source <code>relatedFeature</code> for this <code>Connector</code>. It is the first <code>relatedFeature</code>.</p> + + + + + + + <p>The target <code>relatedFeatures</code> for this <code>Connector</code>. This includes all the <code>relatedFeatures</code> other than the <code>sourceFeature</code>.</p> + + + + + + + <p>The innermost <code>Type</code> that is a common direct or indirect <code>featuringType</code> of the <code>relatedFeatures</code>, such that, if it exists and was the <code>featuringType</code> of this <code>Connector</code>, the <code>Connector</code> would satisfy the <code>checkConnectorTypeFeaturing</code> constraint.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + <p>A <code>BindingConnector</code> is a binary <code>Connector</code> that requires its <code>relatedFeatures</code> to identify the same things (have the same values).</p> + + + + + <p>A <code>BindingConnector</code> must be binary.</p> + + OCL2.0 - payloadFeature = - let payloadFeatures : Sequence(PayloadFeature) = - ownedFeature->selectByKind(PayloadFeature) in - if payloadFeatures->isEmpty() then null - else payloadFeatures->first() - endif + relatedFeature->size() = 2 - - - <p>A <code>Flow</code> must have at most one <code>ownedFeature</code> that is an <code>PayloadFeature</code>.</p> + + + <p>A <code>BindingConnector</code> must directly or indirectly specialize the base <code>BindingConnector</code> <code><em>Links::selfLinks</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - ownedFeature->selectByKind(PayloadFeature)->size() <= 1 + specializesFromLibrary('Links::selfLinks') - - - <p>A <code>Flow</code> with <code>ownedEndFeatures</code> must specialize the <code>Step</code> <code><em>Transfers::flowTransfers</em></code> from the Kernel Semantic Library.</p> + + + + + + + + + + + + + + + + + <p>A <code>Package</code> is a <code>Namespace</code> used to group <code>Elements</code>, without any instance-level semantics. It may have one or more model-level evaluable <code>filterCondition</code> <code>Expressions</code> used to filter its <code>importedMemberships</code>. Any imported <code>member</code> must meet all of the <code>filterConditions</code>.</p> + + + + <p>The <code>filterConditions</code> of a <code>Package</code> are the <code>conditions</code> of its owned <code>ElementFilterMemberships</code>.</p> - + OCL2.0 - ownedEndFeatures->notEmpty() implies - specializesFromLibrary('Transfers::flowTransfers') + filterCondition = ownedMembership-> + selectByKind(ElementFilterMembership).condition - - - - - <p>The type of values transferred, which is the <code>type</code> of the <code>payloadFeature</code> of the <code>Flow</code>.</p> - - - - - - - - - <p>The <code>Feature</code> that receives the values carried by the <code>Flow</code>. It must be a <code>feature</code> of the <code>target</code> of the <code>Flow</code>.</p> - - - - - - - <p>The <code>Feature</code> that provides the items carried by the <code>Flow</code>. It must be a <code>feature</code> of the <code>source</code> of the <code>Flow</code>.</p> + + + + <p>The model-level evaluable <code><em>Boolean</em></code>-valued <code>Expression</code> used to filter the <code>members</code> of this <code>Package</code>, which are owned by the <code>Package</code> are via <code>ElementFilterMemberships</code>.</p> - - + + - - - <p>The <code>connectorEnds</code> of this <code>Flow</code> that are <code>FlowEnds</code>.</p> + + + <p>Exclude <code>Elements</code> that do not meet all the <code>filterConditions</code>.</p> - - - - - - <p>The <code>ownedFeature</code> of the <code>Flow</code> that is a <code>PayloadFeature</code> (if any).</p> - + + + OCL2.0 + self.oclAsType(Namespace).importedMemberships(excluded)-> + select(m | self.includeAsMember(m.memberElement)) + + + + + + + + + + + + + + <p>Determine whether the given <code>element</code> meets all the <code>filterConditions</code>.</p> - - - - - - <p>The <code>Interactions</code> that type this <code>Flow</code>. <code>Interactions</code> are both <code>Associations</code> and <code>Behaviors</code>, which can type <code>Connectors</code> and <code>Steps</code>, respectively.</p> + + + OCL2.0 + let metadataFeatures: Sequence(AnnotatingElement) = + element.ownedAnnotation.annotatingElement-> + selectByKind(MetadataFeature) in + self.filterCondition->forAll(cond | + metadataFeatures->exists(elem | + cond.checkCondition(elem))) + + + + + + + + + + + + <p>The Package that has a certain Expression as a <code>filterCondition</code>.</p> - - - + + + - - - <p>An <code>AssociationStructure</code> is an <code>Association</code> that is also a <code>Structure</code>, classifying link objects that are both links and objects. As objects, link objects can be created and destroyed, and their non-end <code>Features</code> can change over time. However, the values of the end <code>Features</code> of a link object are fixed and cannot change over its lifetime.</p> + + + <p><code>ElementFilterMembership</code> is a <code>Membership</code> between a <code>Namespace</code> and a model-level evaluable <code><em>Boolean</em></code>-valued <code>Expression</code>, asserting that imported <code>members</code> of the <code>Namespace</code> should be filtered using the <code>condition</code> <code>Expression</code>. A general <code>Namespace</code> does not define any specific filtering behavior, but such behavior may be defined for various specialized kinds of <code>Namespaces</code>.</p> + - - - <p>An <code>AssociationStructure</code> must directly or indirectly specialize the base <code>AssociationStructure</code> <code><em>Objects::LinkObject</em></code> from the Kernel Semantic Library.</p> + + + <p>The <code>condition</code> <code>Expression</code> must be model-level evaluable.</p> - + OCL2.0 - specializesFromLibrary('Objects::LinkObject') + condition.isModelLevelEvaluable - - - <p>A binary <code>AssociationStructure</code> must directly or indirectly specialize the base <code>AssociationStructure</code> <code><em>Objects::BinaryLinkObject</em></code> from the Kernel Semantic Library.</p> + + + <p>The <code>result</code> <code>parameter</code> of the <code>condition</code> <code>Expression</code> must directly or indirectly specialize <code><em>ScalarValues::Boolean</em></code>.</p> - + OCL2.0 - endFeature->size() = 2 implies - specializesFromLibrary('Objects::BinaryLinkObject') + condition.result.specializesFromLibrary('ScalarValues::Boolean') - - + + + + <p>The model-level evaluable <code>Boolean</code>-valued <code>Expression</code> used to filter the imported <code>members</code> of the <code>membershipOwningNamespace</code> of this <code>ElementFilterMembership</code>.</p> + + + + + - - - - + + + <p>A <code>LibraryPackage</code> is a <code>Package</code> that is the container for a model library. A <code>LibraryPackage</code> is itself a library <code>Element</code> as are all <code>Elements</code> that are directly or indirectly contained in it.</p> + + + + + + <p>Whether this <code>LibraryPackage</code> contains a standard library model. This should only be set to true for <code>LibraryPackages</code> in the standard Kernel Model Libraries or in normative model libraries for a language built on KerML.</p> + + + + + + + <p>The <code>libraryNamespace</code> for a <code>LibraryPackage</code> is itself.</p> + + + + OCL2.0 + self + + + + + + + + + + + + <p>The ElementFilterMembership that owns the <code>condition</code>.</p> + + + - - - - + + + + - - - - + + + + + - - - - + + + + - - - <p>An <code>Association</code> is a <code>Relationship</code> and a <code>Classifier</code> to enable classification of links between things (in the universe). The co-domains (<code>types</code>) of the <code>associationEnd</code> <code>Features</code> are the <code>relatedTypes</code>, as co-domain and participants (linked things) of an <code>Association</code> identify each other.</p> - - - - - <p>The <code>relatedTypes</code> of an <code>Association</code> are the <code>types</code> of its <code>associationEnds</code>.</p> - - - OCL2.0 - relatedType = associationEnd.type - - - - - <p>An <code>Association</code> must directly or indirectly specialize the base <code>Association</code> <code><em>Links::Link</em></code> from the Kernel Semantic Library.</p> + + + + + + + + + + + + + + + <p>A <code>Behavior </code>coordinates occurrences of other <code>Behaviors</code>, as well as changes in objects. <code>Behaviors</code> can be decomposed into <code>Steps</code> and be characterized by <code>parameters</code>.</p> + + + + + <p>A <code>Behavior</code> must not specialize a <code>Structure</code>.</p> - + OCL2.0 - specializesFromLibrary('Links::Link') + ownedSpecialization.general->forAll(not oclIsKindOf(Structure)) - - - <p>If an <code>Association</code> is also a kind of <code>Structure</code>, then it must be an <code>AssociationStructure</code>.</p> + + + <p>A <code>Behavior</code> must directly or indirectly specialize the base <code>Behavior</code> <code><em>Performances::Performance</em></code> from the Kernel Semantic Library.</p> - + English - oclIsKindOf(Structure) = oclIsKindOf(AssociationStructure) + specializesFromLibrary('Performances::Performance') - - - <p>A binary <code>Association</code> must directly or indirectly specialize the base <code>Association</code> <code><em>Links::binaryLink</em></code> from the Kernel Semantic Library.</p> + + + <p>The <code>steps</code> of a <code>Behavior</code> are its <code>features</code> that are <code>Steps</code>.</p> - + OCL2.0 - associationEnd->size() = 2 implies - specializesFromLibrary('Links::BinaryLink') + step = feature->selectByKind(Step) - - - <p>If an <code>Association</code> is concrete (not abstract), then it must have at least two <code>relatedTypes</code>.</p> + + + + <p>The <code>Steps</code> that make up this <code>Behavior</code>.</p> + - + + + + + + <p>The parameters of this <code>Behavior</code>, which are defined as its <code>directedFeatures</code>, whose values are passed into and/or out of a performance of the <code>Behavior</code>.</p> + + + + + + + + + + + + + + + <p>A <code>Step</code> is a <code>Feature</code> that is typed by one or more <code>Behaviors</code>. <code>Steps</code> may be used by one <code>Behavior</code> to coordinate the performance of other <code>Behaviors</code>, supporting a steady refinement of behavioral descriptions. <code>Steps</code> can be ordered in time and can be connected using <code>Flows</code> to specify things flowing between their <code>parameters</code>.</p> + + + + + <p>A <code>Step</code> must directly or indirectly specialize the base <code>Step</code> <code><em>Performances::performances</em></code> from the Kernel Semantic Library.</p> + + OCL2.0 - not isAbstract implies relatedType->size() >= 2 + specializesFromLibrary('Performances::performances') - - - <p>If an <code>Association</code> has more than two <code>associationEnds</code>, then it must <em>not</em> specialize, directly or indirectly, the <code>Association</code> <em><code>BinaryLink</code></em> from the Kernel Semantic Library.</p> + + + <p>A<code>Step</code> whose <code>owningType</code> is a <code>Behavior</code> or another <code>Step</code> must directly or indirectly specialize the <code>Step</code> <code><em>Performances::Performance::enclosedPerformance</em></code>.</p> - + OCL2.0 - associationEnds->size() > 2 implies - not specializesFromLibrary('Links::BinaryLink') + owningType <> null and + (owningType.oclIsKindOf(Behavior) or + owningType.oclIsKindOf(Step)) implies + specializesFromLibrary('Performances::Performance::enclosedPerformance') - - - <p>The <code>sourceType</code> of an <code>Association</code> is its first <code>relatedType</code> (if any).</p> + + + <p>A composite <code>Step</code> whose <code>owningType</code> is a <code>Structure</code> or a <code>Feature</code> typed by a <code>Structure</code> must directly or indirectly specialize the <code>Step</code> <code><em>Objects::Object::ownedPerformance</em></code>.</p> - + OCL2.0 - sourceType = - if relatedType->isEmpty() then null - else relatedType->first() endif + isComposite and owningType <> null and +(owningType.oclIsKindOf(Structure) or + owningType.oclIsKindOf(Feature) and + owningType.oclAsType(Feature).type-> + exists(oclIsKindOf(Structure)) implies + specializesFromLibrary('Objects::Object::ownedPerformance') - - + + + <p>A<code>Step</code> whose <code>owningType</code> is a <code>Behavior</code> or another <code>Step</code>, and which is composite, must directly or indirectly specialize the <code>Step</code> <code><em>Performances::Performance::subperformance</em></code>.</p> + + OCL2.0 - targetType = - if relatedType->size() < 2 then OrderedSet{} - else - relatedType-> - subSequence(2, relatedType->size())-> - asOrderedSet() - endif + owningType <> null and + (owningType.oclIsKindOf(Behavior) or + owningType.oclIsKindOf(Step)) and + self.isComposite implies + specializesFromLibrary('Performances::Performance::subperformance') - - - <p>The <code>ownedEndFeatures</code> of an <code>Association</code> must have exactly one <code>type</code></p>. + + + <p>The <code>behaviors</code> of a <code>Step</code> are all its <code>types</code> that are <code>Behaviors</code>.</p> - + OCL2.0 - ownedEndFeature->forAll(type->size() = 1) + behavior = type->selectByKind(Behavior) - - - - - <p>The <code>types</code> of the <code>associationEnds</code> of the <code>Association</code>, which are the <code>relatedElements</code> of the <code>Association</code> considered as a <code>Relationship</code>.</p> + + + + <p>The <code>Behaviors</code> that type this <code>Step</code>.</p> - - + + - - - <p>The source <code>relatedType</code> for this <code>Association</code>. It is the first <code>relatedType</code> of the <code>Association</code>.</p> + + + <p>The <code>parameters</code> of this <code>Step</code>, which are defined as its <code>directedFeatures</code>, whose values are passed into and/or out of a performance of the <code>Step</code>.</p> - - + + - - - <p>The target <code>relatedTypes</code> for this <code>Association</code>. This includes all the <code>relatedTypes</code> other than the <code>sourceType</code>.</p> + + + + <p>A <code>ParameterMembership</code> is a <code>FeatureMembership</code> that identifies its <code>memberFeature</code> as a parameter, which is always owned, and must have a <code>direction</code>. A <code>ParameterMembership</code> must be owned by a <code>Behavior</code>, a <code>Step</code>, or the <code>result</code> parameter of a <code>ConstructorExpression</code>.</p> + + + + <p>The <code>ownedMemberParameter</code> of a <code>ParameterMembership</code> must have a <code>direction</code> equal to the result of the <code>parameterDirection()</code> operation.</p> + + + OCL2.0 + ownedMemberParameter.direction = parameterDirection() + + + + + <p>A <code>ParameterMembership</code> must be owned by a <code>Behavior</code>,<code>Step</code>, or the <code>result</code> parameter of a <code>ConstructorExpression</code>.</p> + + + OCL2.0 + owningType.oclIsKindOf(Behavior) or owningType.oclIsKindOf(Step) or +owningType.owningMembership.oclIsKindOf(ReturnParameterMembership) and + owningType.owningNamespace.oclIsKindOf(ConstructorExpression) + + + + + + <p>The <code>Feature</code> that is identified as a <code>parameter</code> by this <code>ParameterMembership</code>.</p> - - + + - - - <p>The <code>features</code> of the <code>Association</code> that identify the things that can be related by it. A concrete <code>Association</code> must have at least two <code>associationEnds</code>. When it has exactly two, the <code>Association</code> is called a <em>binary</em> <code>Association</code>.</p> + + + <p>Return the required value of the <code>direction</code> of the <code>ownedMemberParameter</code>. By default, this is <code>in</code>.</p> + + + + OCL2.0 + FeatureDirectionKind::_'in' + + + + + + + + + + + + <p>The Functions that have a certain Feature its owned or inherited <code>result</code>.</p> + + + + + + + + <p>A <code>ResultExpressionMembership</code> is a <code>FeatureMembership</code> that indicates that the <code>ownedResultExpression</code> provides the result values for the <code>Function</code> or <code>Expression</code> that owns it. The owning <code>Function</code> or <code>Expression</code> must contain a <code>BindingConnector</code> between the <code>result</code> <code>parameter</code> of the <code>ownedResultExpression</code> and the <code>result</code> <code>parameter</code> of the owning <code>Function</code> or <code>Expression</code>.</p> + + + + <p>The <code>owningType</code> of a <code>ResultExpressionMembership</code> must be a <code>Function</code> or <code>Expression</code>.</p> - - + + OCL2.0 + owningType.oclIsKindOf(Function) or owningType.oclIsKindOf(Expression) + + + + + + <p>The <code>Expression</code> that provides the result for the owner of the <code>ResultExpressionMembership</code>.</p> + + + + - - - <p>A <code>Structure</code> is a <code>Class</code> of objects in the modeled universe that are primarily structural in nature. While such an object is not itself behavioral, it may be involved in and acted on by <code>Behaviors</code>, and it may be the performer of some of them.</p> + + + + <p>The Functions that hasve a certain <code>expression</code> as a step.</p> + + + + + + + + <p>A <code>ReturnParameterMembership</code> is a <code>ParameterMembership</code> that indicates that the <code>ownedMemberParameter</code> is the <code>result</code> <code>parameter</code> of a <code>Function</code> or <code>Expression</code>. The <code>direction</code> of the <code>ownedMemberParameter</code> must be <code>out</code>.</p> - - - <p>A <code>Structure</code> must directly or indirectly specialize the base <code>Structure</code> <code><em>Objects::Object</em></code> from the Kernel Semantic Library.</p> + + + <p>The <code>owningType</code> of a <code>ReturnParameterMembership</code> must be a <code>Function</code> or <code>Expression</code>.</p> - + OCL2.0 - specializesFromLibrary('Objects::Object') + owningType.oclIsKindOf(Function) or owningType.oclIsKindOf(Expression) - - - <p>A <code>Structure</code> must not specialize a <code>Behavior</code>.</p> + + + + <p>The <code>ownedMemberParameter</code> of a <code>ReturnParameterMembership</code> must have direction <code>out</code>. (This is a leaf operation that cannot be further redefined.)</p> - + + + OCL2.0 + FeatureDirectionKind::out + + + + + + + + + + + <p>An <code>Invariant</code> is a <code>BooleanExpression</code> that is asserted to have a specific <code><em>Boolean</em></code> result value. If <code>isNegated = false</code>, then the result is asserted to be true. If <code>isNegated = true</code>, then the result is asserted to be false.</p> + + + + + <p>An <code>Invariant</code> must directly or indirectly specialize either of the following <code>BooleanExpressions</code> from the Kernel Semantic Library: <code><em>Performances::trueEvaluations</em></code>, if <code>isNegated = false</code>, or <code><em>Performances::falseEvaluations</em></code>, if <code>isNegated = true</code>.</p> + + OCL2.0 - ownedSpecialization.general->forAll(not oclIsKindOf(Behavior)) + if isNegated then + specializesFromLibrary('Performances::falseEvaluations') +else + specializesFromLibrary('Performances::trueEvaluations') +endif - + + + + <p>Whether this <code>Invariant</code> is asserted to be false rather than true.</p> + + + + + - - - - <p>The MetadataFeatures whose <code>type</code> is a certain Metaclass.</p> + + + + <p>The Expressions that have a certain Feature its owned or inherited <code>result</code>.</p> - - + + - - - <p>A <code>MetadataFeature</code> is a <code>Feature</code> that is an <code>AnnotatingElement</code> used to annotate another <code>Element</code> with metadata. It is typed by a <code>Metaclass</code>. All its <code>ownedFeatures</code> must redefine <code>features</code> of its <code>metaclass</code> and any feature bindings must be model-level evaluable.</p> - + + + <p>An <code>Expression</code> is a <code>Step</code> that is typed by a <code>Function</code>. An <code>Expression</code> that also has a <code>Function</code> as its <code>featuringType</code> is a computational step within that <code>Function</code>. An <code>Expression</code> always has a single <code>result</code> parameter, which redefines the <code>result</code> parameter of its defining <code>function</code>. This allows <code>Expressions</code> to be interconnected in tree structures, in which inputs to each <code>Expression</code> in the tree are determined as the results of other <code>Expression</code> in the tree.</p> - - - <p>A <code>MetadataFeature</code> must have exactly one <code>type</code> that is a <code>Metaclass</code>.</p> + + + <p>Whether an <code>Expression</code> <code>isModelLevelEvaluable</code> is determined by the <code>modelLevelEvaluable()</code> operation.</p> - + OCL2.0 - type->selectByKind(Metaclass).size() = 1 + isModelLevelEvaluable = modelLevelEvaluable(Set(Element){}) - - - <p>The <code>metaclass</code> of a <code>MetadataFeature</code> must not be abstract.</p> + + + <p>An <code>Expression</code> must directly or indirectly specialize the base <code>Expression</code> <code><em>Performances::evaluations</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - not metaclass.isAbstract + specializesFromLibrary('Performances::evaluations') - - - <p>A <code>MetadataFeature</code> must directly or indirectly specialize the base <code>MetadataFeature</code> <code><em>Metaobjects::metaobjects</em></code> from the Kernel Semantic Library.</p> + + + <p>If this <code>Expression</code> is owned by a <code>FeatureValue</code>, then it must have the same <code>featuringTypes</code> as the <code>featureWithValue</code> of the <code>FeatureValue</code>.</p> - + OCL2.0 - specializesFromLibrary('Metaobjects::metaobjects') + owningMembership <> null and +owningMembership.oclIsKindOf(FeatureValue) implies + let featureWithValue : Feature = + owningMembership.oclAsType(FeatureValue).featureWithValue in + featuringType = featureWithValue.featuringType - - - <p>Each <code>ownedFeature</code> of a <code>MetadataFeature</code> must have no declared name, redefine a single <code>Feature</code>, either have no <code>featureValue</code> or a <code>featureValue</code> with a <code>value</code> <code>Expression</code> that is model-level evaluable, and only have <code>ownedFeatures</code> that also meet these restrictions.</p> + + + <p>If an <code>Expression</code> has an <code>Expression</code> owned via a <code>ResultExpressionMembership</code>, then the owning <code>Expression</code> must also own a <code>BindingConnector</code> between its <code>result</code> <code>parameter</code> and the <code>result</code> <code>parameter</code> of the result <code>Expression</code>.</p> - + OCL2.0 - ownedFeature->closure(ownedFeature)->forAll(f | - f.declaredName = null and f.declaredShortName = null and - f.valuation <> null implies f.valuation.value.isModelLevelEvaluable and - f.redefinition.redefinedFeature->size() = 1) + ownedMembership.selectByKind(ResultExpressionMembership)-> + forAll(mem | ownedFeature.selectByKind(BindingConnector)-> + exists(binding | + binding.relatedFeature->includes(result) and + binding.relatedFeature->includes(mem.ownedResultExpression.result))) - - - <p>The <code>metaclass</code> of a <code>MetadataFeature</code> is one of its <code>types</code> that is a <code>Metaclass</code>. + + + <p>The <code>result</code> parameter of an <code>Expression</code> is its <code>parameter</code> owned (possibly in a supertype) via a <code>ReturnParameterMembership</code> (if any).</p> - + OCL2.0 - metaclass = - let metaclassTypes : Sequence(Type) = type->selectByKind(Metaclass) in - if metaclassTypes->isEmpty() then null - else metaClassTypes->first() - endif + result = + let resultParams : Sequence(Feature) = + featureMemberships-> + selectByKind(ReturnParameterMembership). + ownedMemberParameter in + if resultParams->notEmpty() then resultParams->first() + else null + endif + - - - <p>The <code>annotatedElements</code> of a <code>MetadataFeature</code> must have an abstract syntax metaclass consistent with the <code>annotatedElement</code> declarations for the <code>MetadataFeature</code>.</p> + + + <p>An <code>Expression</code> must have exactly one <code>featureMembership</code> (owned or inherited) that is a <code>ResultParameterMembership</code>.</p> - + OCL2.0 - let baseAnnotatedElementFeature : Feature = - resolveGlobal('Metaobjects::Metaobject::annotatedElement').memberElement. - oclAsType(Feature) in -let annotatedElementFeatures : OrderedSet(Feature) = feature-> - select(specializes(baseAnnotatedElementFeature))-> - excluding(baseAnnotatedElementFeature) in -annotatedElementFeatures->notEmpty() implies - let annotatedElementTypes : Set(Feature) = - annotatedElementFeatures.typing.type->asSet() in - let metaclasses : Set(Metaclass) = - annotatedElement.oclType().qualifiedName->collect(qn | - resolveGlobal(qn).memberElement.oclAsType(Metaclass)) in - metaclasses->forAll(m | annotatedElementTypes->exists(t | m.specializes(t))) + featureMembership-> + selectByKind(ReturnParameterMembership)-> + size() = 1 - - - <p>If this <code>MetadataFeature</code> is an application of <code><em>SemanticMetadata</em></code>, then its <code>annotatingElement</code> must be a <code>Type</code>. The annotated <code>Type</code> must then directly or indirectly specialize the specified value of the <code><em>baseType</em></code>, <em>unless</em> the <code>Type</code> is a <code>Classifier</code> and the <code><em>baseType</em></code> represents a kind of <code>Feature</code>, in which case the <code>Classifier</code> must directly or indirectly specialize each of the <code>types</code> of the <code>Feature</code>.</p> + + + <p>An <code>Expression</code> must have at most one <code>ResultExpressionMembership</code>.</p> - + OCL2.0 - isSemantic() implies - let annotatedTypes : Sequence(Type) = - annotatedElement->selectAsKind(Type) in - let baseTypes : Sequence(MetadataFeature) = - evaluateFeature(resolveGlobal( - 'Metaobjects::SemanticMetadata::baseType'). - memberElement. - oclAsType(Feature))-> - selectAsKind(MetadataFeature) in - annotatedTypes->notEmpty() and - baseTypes()->notEmpty() and - baseTypes()->first().isSyntactic() implies - let annotatedType : Type = annotatedTypes->first() in - let baseType : Element = baseTypes->first().syntaxElement() in - if annotatedType.oclIsKindOf(Classifier) and - baseType.oclIsKindOf(Feature) then - baseType.oclAsType(Feature).type-> - forAll(t | annotatedType.specializes(t)) - else if baseType.oclIsKindOf(Type) then - annotatedType.specializes(baseType.oclAsType(Type)) - else - true - endif + membership->selectByKind(ResultExpressionMembership)->size() <= 1 - - - - - <p>The <code>type</code> of this <code>MetadataFeature</code>, which must be a <code>Metaclass</code>.</p> + + + + <p>The <code>Function</code> that types this <code>Expression</code>.</p> + - - - - - - <p>If the given <code>baseFeature</code> is a <code>feature</code> of this <code>MetadataFeature</code>, or is directly or indirectly redefined by a <code>feature</code>, then return the result of evaluating the appropriate (model-level evaluable) <code>value</code> <code>Expression</code> for it (if any), with the <code>MetadataFeature</code> as the target.</p> + + <p>This is the Function that types the Expression.</p> + - - - OCL2.0 - let selectedFeatures : Sequence(Feature) = feature-> - select(closure(ownedRedefinition.redefinedFeature)-> - includes(baseFeature)) in -if selectedFeatures->isEmpty() then null -else - let selectedFeature : Feature = selectedFeatures->first() in - let featureValues : FeatureValue = selectedFeature-> - closure(ownedRedefinition.redefinedFeature).ownedMember-> - selectAsKind(FeatureValue) in - if featureValues->isEmpty() then null - else featureValues->first().value.evaluate(self) - endif - - - - - - - - - - - <p>Check if this <code>MetadataFeature</code> has a <code>metaclass</code> which is a kind of <code><em>SemanticMetadata</code>.<p> + + + + + + <p><p>An <code>output</code> <code>parameter</code> of the <code>Expression</code> whose value is the result of the <code>Expression</code>. The result of an <code>Expression</code> is either inherited from its <code>function</code> or it is related to the <code>Expression</code> via a <code>ReturnParameterMembership</code>, in which case it redefines the <code>result</code> <code>parameter</code> of its <code>function</code>.</p> + - - + + + + + + <p>Whether this <code>Expression</code> meets the constraints necessary to be evaluated at <em>model level</em>, that is, using metadata within the model.</p> + + + + + + <p>Return whether this <code>Expression</code> is model-level evaluable. The <code>visited</code> parameter is used to track possible circular <code>Feature</code> references made from <code>FeatureReferenceExpressions</code> (see the redefinition of this operation for <code>FeatureReferenceExpression</code>). Such circular references are not allowed in model-level evaluable expressions.</p> + +<p>An <code>Expression</code> that is not otherwise specialized is model-level evaluable if it has no (non-implied) <code>ownedSpecializations</code> and all its <code>ownedFeatures</code> are either <code>in</code> parameters, the <code>result</code> <code>parameter</code> or a result <code>Expression</code> owned via a <code>ResultExpressionMembership</code>. The <code>parameters</code> must not have any <code>ownedFeatures</code> or a <code>FeatureValue</code>, and the result <code>Expression</code> must be model-level evaluable.</p> + + + OCL2.0 - specializesFromLibrary('Metaobjects::SemanticMetadata') + ownedSpecialization->forAll(isImplied) and +ownedFeature->forAll(f | + (directionOf(f) = FeatureDirectionKind::_'in' or f = result) and + f.ownedFeature->isEmpty() and f.valuation = null or + f.owningFeatureMembership.oclIsKindOf(ResultExpressionMembership) and + f.oclAsType(Expression).modelLevelEvaluable(visited) + - + + + + + - - - <p>Check if this <code>MetadataFeature</code> has a <code>metaclass</code> that is a kind of <code><em>KerML::Element</em></code> (that is, it is from the reflective abstract syntax model).</p> + + + <p>If this <code>Expression</code> <code>isModelLevelEvaluable</code>, then evaluate it using the <code>target</code> as the context <code>Element</code> for resolving <code>Feature</code> names and testing classification. The result is a collection of <code>Elements</code>, which, for a fully evaluable <code>Expression</code>, will be a <code>LiteralExpression</code> or a <code>Feature</code> that is not an <code>Expression</code>.</p> - - + + OCL2.0 - specializesFromLibrary('KerML::Element') + isModelLevelEvaluable - - + + + OCL2.0 + let resultExprs : Sequence(Expression) = + ownedFeatureMembership-> + selectByKind(ResultExpressionMembership). + ownedResultExpression in +if resultExpr->isEmpty() then Sequence{} +else resultExprs->first().evaluate(target) +endif + + + + + + - - - <p>If this <code>MetadataFeature</code> reflectively represents a model element, then return the corresponding <code>Element</code> instance from the MOF abstract syntax representation of the model.</p> + + + <p>Model-level evaluate this <code>Expression</code> with the given <code>target</code>. If the result is a <code>LiteralBoolean</code>, return its <code>value</code>. Otherwise return <code>false</code>.</p> + - - - English - No OCL - - - - + + OCL2.0 - isSyntactic() + let results: Sequence(Element) = evaluate(target) in + result->size() = 1 and + results->first().oclIsKindOf(LiteralBoolean) and + results->first().oclAsType(LiteralBoolean).value - - - + + + - - - <p>A <code>Metaclass</code> is a <code>Structure</code> used to type <code>MetadataFeatures</code>.</p> - - - - <p>A <code>Metaclass</code> must directly or indirectly specialize the base <code>Metaclass</code> <code><em>Metaobjects::Metaobject</em></code> from the Kernel Semantic Library.</p> + + + + <p>The Expressions that are typed by a certain <code>function</code>.</p> - - OCL2.0 - specializesFromLibrary('Metaobjects::Metaobject') - - - + + + - - - <p>A <code>Class</code> is a <code>Classifier</code> of things (in the universe) that can be distinguished without regard to how they are related to other things (via <code>Features</code>). This means multiple things classified by the same <code>Class</code> can be distinguished, even when they are related other things in exactly the same way.</p> + + + <p>A <code>Predicate</code> is a <code>Function</code> whose <code>result</code> <code>parameter</code> has type <code><em>Boolean</em></code> and multiplicity <code>1..1</code>.</p> - - - <p>A <code>Class</code> must directly or indirectly specialize the base <code>Class</code> <code><em>Occurrences::Occurrence</em></code> from the Kernel Semantic Library.</p> + + + <p>A <code>Predicate</code> must directly or indirectly specialize the base <code>Predicate</code> <code><em>Performances::BooleanEvaluation</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - specializesFromLibrary('Occurrences::Occurrence') + specializesFromLibrary('Performances::BooleanEvaluation') - - - <p>A <code>Class</code> must not specialize a <code>DataType</code> and it can only specialize an <code>Association</code> if it is also itself a kind of <code>Association</code> (such as an <code>AssociationStructure</code> or <code>Interaction</code>).</p> + + + + + + <p>The ResultExpressionMembership that owns the <code>ownedResultExpression</code>.</p> - - OCL2.0 - ownedSpecialization.general-> - forAll(not oclIsKindOf(DataType)) and -not oclIsKindOf(Association) implies - ownedSpecialization.general-> - forAll(not oclIsKindOf(Association)) - - - + + + - - - <p>A <code>DataType</code> is a <code>Classifier</code> of things (in the universe) that can only be distinguished by how they are related to other things (via Features). This means multiple things classified by the same <code>DataType</code></p> - -<ul> - <li>Cannot be distinguished when they are related to other things in exactly the same way, even when they are intended to be about different things.</li> - <li>Can be distinguished when they are related to other things in different ways, even when they are intended to be about the same thing.</li> -</ul> + + + <p>A <code>BooleanExpression</code> is a <em><code>Boolean</code></em>-valued <code>Expression</code> whose type is a <code>Predicate</code>. It represents a logical condition resulting from the evaluation of the <code>Predicate</code>.</p> - - - <p>A <code>DataType</code> must not specialize a <code>Class</code> or an <code>Association</code>.</p> + + + <p>A <code>BooleanExpression</code> must directly or indirectly specialize the base <code>BooleanExpression</code> <code><em>Performances::booleanEvaluations</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - ownedSpecialization.general-> - forAll(not oclIsKindOf(Class) and - not oclIsKindOf(Association)) + specializesFromLibrary('Performances::booleanEvaluations') - - - <p>A <code>DataType</code> must directly or indirectly specialize the base <code>DataType</code> <code><em>Base::DataValue</em></code> from the Kernel Semantic Library.</p> + + + + <p>The Predicate that types the Expression.</p> + - - OCL2.0 - specializesFromLibrary('Base::DataValue') - - - - - - - - - + + <p>The <code>Predicate</code> that types this <code>BooleanExpression</code>.</p> + + + + - - - <p>A <code>Step</code> is a <code>Feature</code> that is typed by one or more <code>Behaviors</code>. <code>Steps</code> may be used by one <code>Behavior</code> to coordinate the performance of other <code>Behaviors</code>, supporting a steady refinement of behavioral descriptions. <code>Steps</code> can be ordered in time and can be connected using <code>Flows</code> to specify things flowing between their <code>parameters</code>.</p> + + + <p>A <code>Function</code> is a <code>Behavior</code> that has an <code>out</code> <code>parameter</code> that is identified as its <code>result</code>. A <code>Function</code> represents the performance of a calculation that produces the values of its <code>result</code> <code>parameter</code>. This calculation may be decomposed into <code>Expressions</code> that are <code>steps</code> of the <code>Function</code>.</p> - - - <p>A <code>Step</code> must directly or indirectly specialize the base <code>Step</code> <code><em>Performances::performances</em></code> from the Kernel Semantic Library.</p> + + + <p>A <code>Function</code> must have exactly one <code>featureMembership</code> (owned or inherited) that is a <code>ResultParameterMembership</code>.</p> - + OCL2.0 - specializesFromLibrary('Performances::performances') + featureMembership-> + selectByKind(ReturnParameterMembership)-> + size() = 1 - - - <p>A<code>Step</code> whose <code>owningType</code> is a <code>Behavior</code> or another <code>Step</code> must directly or indirectly specialize the <code>Step</code> <code><em>Performances::Performance::enclosedPerformance</em></code>.</p> + + + <p>A <code>Function</code> must directly or indirectly specialize the base <code>Function</code> <code><em>Performances::Evaluation</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - owningType <> null and - (owningType.oclIsKindOf(Behavior) or - owningType.oclIsKindOf(Step)) implies - specializesFromLibrary('Performances::Performance::enclosedPerformance') + specializesFromLibrary('Performances::Evaluation') - - - <p>A composite <code>Step</code> whose <code>owningType</code> is a <code>Structure</code> or a <code>Feature</code> typed by a <code>Structure</code> must directly or indirectly specialize the <code>Step</code> <code><em>Objects::Object::ownedPerformance</em></code>.</p> + + + <p>If a <code>Function</code> has an <code>Expression</code> owned via a <code>ResultExpressionMembership</code>, then the owning <code>Function</code> must also own a <code>BindingConnector</code> between its <code>result</code> <code>parameter</code> and the <code>result</code> <code>parameter</code> of the result <code>Expression</code>.</p> - + OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(Structure) or - owningType.oclIsKindOf(Feature) and - owningType.oclAsType(Feature).type-> - exists(oclIsKindOf(Structure)) implies - specializesFromLibrary('Objects::Object::ownedPerformance') - - - - - <p>A<code>Step</code> whose <code>owningType</code> is a <code>Behavior</code> or another <code>Step</code>, and which is composite, must directly or indirectly specialize the <code>Step</code> <code><em>Performances::Performance::subperformance</em></code>.</p> + ownedMembership.selectByKind(ResultExpressionMembership)-> + forAll(mem | ownedFeature.selectByKind(BindingConnector)-> + exists(binding | + binding.relatedFeature->includes(result) and + binding.relatedFeature->includes(mem.ownedResultExpression.result))) + + + + + <p>The <code>result</code> <code>parameter</code> of a <code>Function</code> is its <code>parameter</code> owned (possibly in a supertype) via a <code>ReturnParameterMembership</code> (if any).</p> - + OCL2.0 - owningType <> null and - (owningType.oclIsKindOf(Behavior) or - owningType.oclIsKindOf(Step)) and - self.isComposite implies - specializesFromLibrary('Performances::Performance::subperformance') + result = + let resultParams : Sequence(Feature) = + featureMemberships-> + selectByKind(ReturnParameterMembership). + ownedMemberParameter in + if resultParams->notEmpty() then resultParams->first() + else null + endif - - - <p>The <code>behaviors</code> of a <code>Step</code> are all its <code>types</code> that are <code>Behaviors</code>.</p> + + + <p>A <code>Function</code> must have at most one <code>ResultExpressionMembership</code>.</p> - + OCL2.0 - behavior = type->selectByKind(Behavior) + membership->selectByKind(ResultExpressionMembership)->size() <= 1 - - - - <p>The <code>Behaviors</code> that type this <code>Step</code>.</p> + + + + <p>The <code>Expressions</code> that are <code>steps</code> in the calculation of the <code>result</code> of this <code>Function</code>.</p> - - - - - - <p>The <code>parameters</code> of this <code>Step</code>, which are defined as its <code>directedFeatures</code>, whose values are passed into and/or out of a performance of the <code>Step</code>.</p> + + <p>The set of expressions that represent computational steps or parts of a system of equations within the Function.</p> - - + + - - - - <p>A <code>ParameterMembership</code> is a <code>FeatureMembership</code> that identifies its <code>memberFeature</code> as a parameter, which is always owned, and must have a <code>direction</code>. A <code>ParameterMembership</code> must be owned by a <code>Behavior</code>, a <code>Step</code>, or the <code>result</code> parameter of a <code>ConstructorExpression</code>.</p> - - - - <p>The <code>ownedMemberParameter</code> of a <code>ParameterMembership</code> must have a <code>direction</code> equal to the result of the <code>parameterDirection()</code> operation.</p> - - - OCL2.0 - ownedMemberParameter.direction = parameterDirection() - - - - - <p>A <code>ParameterMembership</code> must be owned by a <code>Behavior</code>,<code>Step</code>, or the <code>result</code> parameter of a <code>ConstructorExpression</code>.</p> + + + <p>The object or value that is the result of evaluating the Function.</p> - - OCL2.0 - owningType.oclIsKindOf(Behavior) or owningType.oclIsKindOf(Step) or -owningType.owningMembership.oclIsKindOf(ReturnParameterMembership) and - owningType.owningNamespace.oclIsKindOf(ConstructorExpression) - - - - - - <p>The <code>Feature</code> that is identified as a <code>parameter</code> by this <code>ParameterMembership</code>.</p> + + <p>The <code>result</code> <code>parameter</code> of the <code>Function</code>, which is owned by the <code>Function</code> via a <code>ReturnParameterMembership</code>.</p> - - + + - - - <p>Return the required value of the <code>direction</code> of the <code>ownedMemberParameter</code>. By default, this is <code>in</code>.</p> + + + <p>Whether this <code>Function</code> can be used as the <code>function</code> of a model-level evaluable <code>InvocationExpression</code>. Certain <code>Functions</code> from the Kernel Functions Library are considered to have <code>isModelLevelEvaluable = true</code>. For all other <code>Functions</code> it is <code>false</code>.</p> + +<p><strong>Note:</strong> See the specification of the KerML concrete syntax notation for <code>Expressions</code> for an identification of which library <code>Functions</code> are model-level evaluable.</p> - - - OCL2.0 - FeatureDirectionKind::_'in' - - - - - - - - - - - - - + + - - - - - + + + + - - - - + + + + <p>The (at most one) <code>ownedMembership</code> of this Feature that is the FeatureValue that provides the value of the Feature.</p> + + + - - - <p>A <code>Behavior </code>coordinates occurrences of other <code>Behaviors</code>, as well as changes in objects. <code>Behaviors</code> can be decomposed into <code>Steps</code> and be characterized by <code>parameters</code>.</p> + + + <p>A <code>FeatureValue</code> is a <code>Membership</code> that identifies a particular member <code>Expression</code> that provides the value of the <code>Feature</code> that owns the <code>FeatureValue</code>. The value is specified as either a bound value or an initial value, and as either a concrete or default value. A <code>Feature</code> can have at most one <code>FeatureValue</code>.</p> + +<p>The result of the <code>value</code> <code>Expression</code> is bound to the <code>featureWithValue</code> using a <code>BindingConnector</code>. If <code>isInitial = false</code>, then the <code>featuringType</code> of the <code>BindingConnector</code> is the same as the <code>featuringType</code> of the <code>featureWithValue</code>. If <code>isInitial = true</code>, then the <code>featuringType</code> of the <code>BindingConnector</code> is restricted to its <code>startShot</code>. + +<p>If <code>isDefault = false</code>, then the above semantics of the <code>FeatureValue</code> are realized for the given <code>featureWithValue</code>. Otherwise, the semantics are realized for any individual of the <code>featuringType</code> of the <code>featureWithValue</code>, unless another value is explicitly given for the <code>featureWithValue</code> for that individual.</p> - - - <p>A <code>Behavior</code> must not specialize a <code>Structure</code>.</p> + + + <p>If <code>isDefault = false</code>, then the <code>featureWithValue</code> must have an <code>ownedMember</code> that is a <code>BindingConnector</code> whose <code>relatedElements</code> are the <code>featureWithValue</code> and a feature chain consisting of the <code>value</code> <code>Expression</code> and its <code>result</code>. If <code>isInitial = false</code>, then this <code>BindingConnector</code> must have <code>featuringTypes</code> that are the same as those of the <code>featureWithValue</code>. If <code>isInitial = true</code>, then the <code>BindingConnector</code> must have <code><em>that.startShot</em><code> as its <code>featuringType</code>.</p> - + OCL2.0 - ownedSpecialization.general->forAll(not oclIsKindOf(Structure)) + not isDefault implies + featureWithValue.ownedMember-> + selectByKind(BindingConnector)->exists(b | + b.relatedFeature->includes(featureWithValue) and + b.relatedFeature->exists(f | + f.chainingFeature = Sequence{value, value.result}) and + if not isInitial then + b.featuringType = featureWithValue.featuringType + else + b.featuringType->exists(t | + t.oclIsKindOf(Feature) and + t.oclAsType(Feature).chainingFeature = + Sequence{ + resolveGlobal('Base::things::that'). + memberElement, + resolveGlobal('Occurrences::Occurrence::startShot'). + memberElement + } + ) + endif) - - - <p>A <code>Behavior</code> must directly or indirectly specialize the base <code>Behavior</code> <code><em>Performances::Performance</em></code> from the Kernel Semantic Library.</p> + + + <p>All <code>Features</code> directly or indirectly redefined by the <code>featureWithValue</code> of a <code>FeatureValue</code> must have only default <code>FeatureValues</code>.</p> - - English - specializesFromLibrary('Performances::Performance') + + OCL2.0 + featureWithValue.redefinition.redefinedFeature-> + closure(redefinition.redefinedFeature).valuation-> + forAll(isDefault) - - - <p>The <code>steps</code> of a <code>Behavior</code> are its <code>features</code> that are <code>Steps</code>.</p> + + + <p>If a <code>FeatureValue</code> has <code>isInitial = true</code>, then its <code>featureWithValue</code> must have <code>isVariable = true</code>.</p> - + OCL2.0 - step = feature->selectByKind(Step) + isInitial implies featureWithValue.isVariable - - - - <p>The <code>Steps</code> that make up this <code>Behavior</code>.</p> + + + + <p>The Feature to be provided a value.</p> + + + <p>The <code>Feature</code> to be provided a value.</p> - - + + - - - <p>The parameters of this <code>Behavior</code>, which are defined as its <code>directedFeatures</code>, whose values are passed into and/or out of a performance of the <code>Behavior</code>.</p> + + + <p>The Expression that provides the value as a result.</p> + + + <p>The <code>Expression</code> that provides the value of the <code>featureWithValue</code> as its <code>result</code>.</p> - - + + + + + + <p>Whether this <code>FeatureValue</code> specifies a bound value or an initial value for the <code>featureWithValue</code>.</p> + + + + + + + <p>Whether this <code>FeatureValue</code> is a concrete specification of the bound or initial value of the <code>featureWithValue</code>, or just a default value that may be overridden.</p> + + + - - - - - - - - - - + + + + <p>The FeatureValue that owns the <code>value</code> Expression.</p> + + + diff --git a/org.omg.sysml/model/KerML_only_xmi.uml b/org.omg.sysml/model/KerML_only_xmi.uml index fdbe3eab3..679dc5681 100644 --- a/org.omg.sysml/model/KerML_only_xmi.uml +++ b/org.omg.sysml/model/KerML_only_xmi.uml @@ -1,5 +1,5 @@ - + The Root layer provides the syntactic foundation for KerML. @@ -633,7 +633,7 @@ else let memberships : Membership = membership-> select(memberShortName = name or memberName = name) in if memberships->notEmpty() then memberships->first() - else owningNamspace.resolveLocal(name) + else owningNamespace.resolveLocal(name) endif endif @@ -1224,9 +1224,9 @@ endif shortName = effectiveShortName() - + - <p>The <code>owningNamespace</code> of an <code>Element</code> is the <code>membershipOwningNamspace</code> of its <code>owningMembership</code> (if any).</p> + <p>The <code>owningNamespace</code> of an <code>Element</code> is the <code>membershipOwningNamespace</code> of its <code>owningMembership</code> (if any).</p> OCL2.0 @@ -2514,7 +2514,7 @@ specializes(mem.memberElement.oclAsType(Type)) - + @@ -2656,13 +2656,13 @@ endif - <p>If the <code>owningType</code> of a <code>Multiplicity</code> is a <code>Feature</code>, then the <code>Multiplicity</code> must have the same <code>featuringTypes</code> as that <code>Feature</code>. Otherwise, it must have no <code>featuringTypes</code> (meaning that it is implicitly featured by the base <code>Classifier</code> <em><code>Anything</code></em>).</p> + <p>If the <code>owningNamespace</code> of a <code>Multiplicity</code> is a <code>Feature</code>, then the <code>Multiplicity</code> must have the same <code>featuringTypes</code> as that <code>Feature</code>. Otherwise, it must have no <code>featuringTypes</code> (meaning that it is implicitly featured by the base <code>Classifier</code> <em><code>Anything</code></em>).</p> OCL2.0 - if owningType <> null and owningType.oclIsKindOf(Feature) then + if owningNamespace <> null and owningNamespace.oclIsKindOf(Feature) then featuringType = - owningType.oclAsType(Feature).featuringType + owningNamespace.oclAsType(Feature).featuringType else featuringType->isEmpty() endif @@ -3313,7 +3313,7 @@ owningType.ownedFeature->at(1) = self implies (i = 1 implies redefinesFromLibrary('Transfers::Transfer::source::sourceOutput')) and (i = 2 implies - redefinesFromLibrary('Transfers::Transfer::source::targetInput')) + redefinesFromLibrary('Transfers::Transfer::target::targetInput')) @@ -3330,26 +3330,28 @@ owningType.ownedFeature->at(1) = self implies OCL2.0 owningType <> null and -not owningFeatureMembership. - oclIsKindOf(ReturnParameterMembership) and (owningType.oclIsKindOf(Behavior) or owningType.oclIsKindOf(Step) and (owningType.oclIsKindOf(InvocationExpression) implies - not ownedRedefinition->exists(not isImplied)) + not ownedRedefinition->exists(not isImplied))) implies - let i : Integer = + let ownerParameters : Sequence(Feature) = owningType.ownedFeature->select(direction <> null)-> reject(owningFeatureMembership. - oclIsKindOf(ReturnParameterMembership))-> - indexOf(self) in - owningType.ownedSpecialization.general-> - forAll(supertype | - let ownedParameters : Sequence(Feature) = - supertype.ownedFeature->select(direction <> null)-> - reject(owningFeatureMembership. - oclIsKindOf(ReturnParameterMembership)) in - ownedParameters->size() >= i implies - redefines(ownedParameters->at(i)) + oclIsKindOf(ReturnParameterMembership)) in + ownerParameters->includes(self) implies + let i : Integer = ownerParameters.indexof(self) in + owningType.ownedSpecialization.general-> + forAll(supertype | + supertype.oclIsKindOf(Behavior) or + supertype.oclIsKindOf(Step) + implies + let ownedParameters : Sequence(Feature) = + supertype.ownedFeature->select(direction <> null)-> + reject(owningFeatureMembership. + oclIsKindOf(ReturnParameterMembership)) in + ownedParameters->size() >= i implies + redefines(ownedParameters->at(i))) @@ -3359,7 +3361,7 @@ implies OCL2.0 ownedTyping.type->exists(selectByKind(Structure)) implies - specializesFromLibary('Objects::objects') + specializesFromLibrary('Objects::objects') @@ -3402,7 +3404,7 @@ implies OCL2.0 featuringType = let featuringTypes : OrderedSet(Type) = - featuring.type->asOrderedSet() in + typeFeaturing.type->asOrderedSet() in if chainingFeature->isEmpty() then featuringTypes else featuringTypes-> @@ -4026,7 +4028,7 @@ redefines(mem.memberElement.oclAsType(Feature)) - + @@ -4647,89 +4649,6 @@ crossingFeature.owningType.endFeature ->size() > 1 - - - - - - - - - - <p>The ItemFlow that has a certain <code>sourceOutputFeature</code>.</p> - - - - - - - - - - - - - - - - - - - - - - - - - - - - <p>A <code>PayloadFeature</code> is the <code>ownedFeature</code> of a <code>Flow</code> that identifies the things carried by the kinds of transfers that are instances of the <code>Flow</code>.</p> - - - - <p>A <code>PayloadFeature</code> must redefine the <code>Feature</code> <code><em>Transfers::Transfer::payload</em></code> from the Kernel Semantic Library.</p> - - - OCL2.0 - redefinesFromLibrary('Transfers::Transfer::payload') - - - - - - - <p>The ItemFlow that has a certain <code>itemType</code>.</p> - - - - - - - - - <p>An <code>Interaction</code> is a <code>Behavior</code> that is also an <code>Association</code>, providing a context for multiple objects that have behaviors that impact one another.</p> - - - - - - - - <p>A <code>SuccessionFlow</code> is a <code>Flow</code> that also provides temporal ordering. It classifies <code><em>Transfers</em></code> that cannot start until the source <code><em>Occurrence</em></code> has completed and that must complete before the target <code><em>Occurrence</em></code> can start.</p> - - - - <p>A <code>SuccessionFlow</code> must directly or indirectly specialize the <code>Step</code> <code><em>Transfers::flowTransfersBefore</em></code> from the Kernel Semantic Library.</p> - - - OCL2.0 - specializesFromLibrary('Transfers::flowTransfersBefore') - - - - - @@ -4885,6 +4804,81 @@ crossingFeature.owningType.endFeature ->size() > 1 + + + <p>The ItemFlow that has a certain <code>itemType</code>.</p> + + + + + + + + + <p>A <code>SuccessionFlow</code> is a <code>Flow</code> that also provides temporal ordering. It classifies <code><em>Transfers</em></code> that cannot start until the source <code><em>Occurrence</em></code> has completed and that must complete before the target <code><em>Occurrence</em></code> can start.</p> + + + + <p>A <code>SuccessionFlow</code> must directly or indirectly specialize the <code>Step</code> <code><em>Transfers::flowTransfersBefore</em></code> from the Kernel Semantic Library.</p> + + + OCL2.0 + specializesFromLibrary('Transfers::flowTransfersBefore') + + + + + + + + + <p>The ItemFlow that has a certain <code>sourceOutputFeature</code>.</p> + + + + + + + + + + + + + + + + + + + + <p>An <code>Interaction</code> is a <code>Behavior</code> that is also an <code>Association</code>, providing a context for multiple objects that have behaviors that impact one another.</p> + + + + + + + + + + + + + + <p>A <code>PayloadFeature</code> is the <code>ownedFeature</code> of a <code>Flow</code> that identifies the things carried by the kinds of transfers that are instances of the <code>Flow</code>.</p> + + + + <p>A <code>PayloadFeature</code> must redefine the <code>Feature</code> <code><em>Transfers::Transfer::payload</em></code> from the Kernel Semantic Library.</p> + + + OCL2.0 + redefinesFromLibrary('Transfers::Transfer::payload') + + + + <p>A <code>FlowEnd</code> is a <code>Feature</code> that is one of the <code>connectorEnds</code> giving the <code><em>source</em></code> or <code><em>target</em></code> of a <code>Flow</code>. For <code>Flows</code> typed by <code><em>FlowTransfer</em></code> or its specializations, <code>FlowEnds</code> must have exactly one <code>ownedFeature</code>, which redefines <code><em>Transfer::source::sourceOutput</em></code> or <code><em>Transfer::target::targetInput</em></code> and redefines the corresponding feature of the <code>relatedElement</code> for its end.</p> @@ -5714,7 +5708,7 @@ endif OCL2.0 - let sourceParameter : Feature = sourceTargetFeature() in + let sourceTargetFeature : Feature = sourceTargetFeature() in sourceTargetFeature <> null and sourceTargetFeature.redefinesFromLibrary('ControlFunctions::\'.\'::source::target') @@ -5725,7 +5719,7 @@ sourceTargetFeature.redefinesFromLibrary('ControlFunctions::\'.\'::source::targe OCL2.0 - let sourceParameter : Feature = sourceTargetFeature() in + let sourceTargetFeature : Feature = sourceTargetFeature() in sourceTargetFeature <> null and sourceTargetFeature.redefines(targetFeature) @@ -5853,7 +5847,7 @@ endif ownedMembership->exists(not oclIsKindOf(FeatureMembership)) - + <p>The <code>referencedElement</code> of a <code>MetadataAccessExpression</code> is the <code>memberElement</code> of its first <code>ownedMembership</code> that is not a <code>FeatureMembership</code>.</p> @@ -7778,13 +7772,6 @@ endif - - - - - - - <p>A <code>BindingConnector</code> is a binary <code>Connector</code> that requires its <code>relatedFeatures</code> to identify the same things (have the same values).</p> diff --git a/org.omg.sysml/model/SysML.uml b/org.omg.sysml/model/SysML.uml index 14a639130..9d5a3bd5c 100644 --- a/org.omg.sysml/model/SysML.uml +++ b/org.omg.sysml/model/SysML.uml @@ -1,930 +1,886 @@ - - - - - <p>A <code>FeatureReferenceExpression</code> that has a certain <code>referent</code> <code>Feature</code>.</p> + + + + + <p>The ElementFilterMembership that owns the <code>condition</code>.</p> - - + + - - - - <p>A <code>InstantiationExpression</code> that has a certain <code>argument</code> <code>Expression</code>.</p> + + + + <p>The Package that has a certain Expression as a <code>filterCondition</code>.</p> - - + + - - - <p>A <code>SelectExpression</code> is an <code>OperatorExpression</code> whose operator is <code>"select"</code>, which resolves to the <code>Function</code> <em><code>ControlFunctions::select</code></em> from the Kernel Functions Library.</p> + + + <p>A <code>Package</code> is a <code>Namespace</code> used to group <code>Elements</code>, without any instance-level semantics. It may have one or more model-level evaluable <code>filterCondition</code> <code>Expressions</code> used to filter its <code>importedMemberships</code>. Any imported <code>member</code> must meet all of the <code>filterConditions</code>.</p> - - - <p>The <code>operator</code> of a <code>SelectExpression</code> must be <code>'select'</code>.</p> + + + <p>The <code>filterConditions</code> of a <code>Package</code> are the <code>conditions</code> of its owned <code>ElementFilterMemberships</code>.</p> - + OCL2.0 - operator = 'select' + filterCondition = ownedMembership-> + selectByKind(ElementFilterMembership).condition - - - <p>The <code>result</code> of a <code>SelectExpression</code> must specialize the <code>result</code> parameter of the first <code>argument</code> of the <code>SelectExpression</code>.</p> + + + + <p>The model-level evaluable <code><em>Boolean</em></code>-valued <code>Expression</code> used to filter the <code>members</code> of this <code>Package</code>, which are owned by the <code>Package</code> are via <code>ElementFilterMemberships</code>.</p> + - - OCL2.0 - arguments->notEmpty() implies - result.specializes(arguments->first().result) - - - - - - + + - - - - <p>An <code>InstantiationExpression</code> is an <code>Expression</code> that instantiates its <code>instantiatedType</code>, binding some or all of the <code>features</code> of that <code>Type</code> to the <code>results</code> of its <code>arguments</code>.</p> - -<p><code>InstantiationExpression</code> is abstract, with concrete subclasses <code>InvocationExpression</code> and <code>ConstructorExpression</code>.</p> - - - - <p>An <code>InstantiationExpression</code> must own its <code>result</code> parameter.</p> - - - OCL2.0 - result.owningType = self - - - - - <p>The <code>instantiatedType</code> of an <code>InstantiationExpression</code> is given by the result of the <code>instantiatedType()</code> operation.</p> - - - OCL2.0 - instantiatedType = instantiatedType() - - - - - <p>An <code>InstantiationExpression</code> must have an <code>InstantiatedType</code>.</p> + + + <p>Exclude <code>Elements</code> that do not meet all the <code>filterConditions</code>.</p> + - - OCL2.0 - instantiatedType() <> null - - - - - - <p>The <code>Expressions</code> whose <code>results</code> are bound to <code>features</code> of the <code>instantiatedType</code>. The <code>arguments</code> are ordered consistent with the order of the <code>features</code>, though they may not be one-to-one with all the <code>features</code>.</p> - -<p><strong>Note.</strong> The derivation of <code>argument</code> is given in the concrete subclasses of <code>InstantiationExpression</code>.</p> + + + OCL2.0 + self.oclAsType(Namespace).importedMemberships(excluded)-> + select(m | self.includeAsMember(m.memberElement)) + + + + + + + + + + + + + + <p>Determine whether the given <code>element</code> meets all the <code>filterConditions</code>.</p> - - - - - - <p>The <code>Type</code> that is being instantiated.</p> + + + OCL2.0 + let metadataFeatures: Sequence(AnnotatingElement) = + element.ownedAnnotation.annotatingElement-> + selectByKind(MetadataFeature) in + self.filterCondition->forAll(cond | + metadataFeatures->exists(elem | + cond.checkCondition(elem))) + + + + + + + + + + + <p>A <code>LibraryPackage</code> is a <code>Package</code> that is the container for a model library. A <code>LibraryPackage</code> is itself a library <code>Element</code> as are all <code>Elements</code> that are directly or indirectly contained in it.</p> + + + + + + <p>Whether this <code>LibraryPackage</code> contains a standard library model. This should only be set to true for <code>LibraryPackages</code> in the standard Kernel Model Libraries or in normative model libraries for a language built on KerML.</p> - - + + - - - <p>Return the <code>Type</code> to act as the <code>instantiatedType</code> for this <code>InstantiationExpression</code>. By default, this is the <code>memberElement</code> of the first <code>ownedMembership</code> that is not a <code>FeatureMembership</code>, which must be a <code>Type</code>.</p> - -<p><b>Note.</b> This operation is overridden in the subclass <code>OperatorExpression</code>.</p> + + + <p>The <code>libraryNamespace</code> for a <code>LibraryPackage</code> is itself.</p> - - + + OCL2.0 - let members : Sequence(Element) = ownedMembership-> - reject(oclIsKindOf(FeatureMembership)).memberElement in -if members->isEmpty() or not members->first().oclIsKindOf(Type) then null -else typeMembers->first().oclAsType(Type) -endif + self - - - + + + - - - <p>A <code>ConstructorExpression</code> is an <code>InstantiationExpression</code> whose <code>result</code> specializes its <code>instantiatedType</code>, binding some or all of the <code>features</code> of the <code>instantiatedType</code> to the <code>results</code> of its <code>argument</code> <code>Expressions</code>.</p> + + + <p><code>ElementFilterMembership</code> is a <code>Membership</code> between a <code>Namespace</code> and a model-level evaluable <code><em>Boolean</em></code>-valued <code>Expression</code>, asserting that imported <code>members</code> of the <code>Namespace</code> should be filtered using the <code>condition</code> <code>Expression</code>. A general <code>Namespace</code> does not define any specific filtering behavior, but such behavior may be defined for various specialized kinds of <code>Namespaces</code>.</p> + - - - <p>The <code>arguments</code> of a <code>ConstructorExpression</code> are the <code>value</code> <code>Expressions</code> of the <code>FeatureValues</code> of the <code>ownedFeatures</code> of its <code>result</code> parameter, in an order corresponding to the order of the <code>features</code> of the <code>instantiatedType</code> that the <code>result</code> <code>ownedFeatures</code> redefine.</p> - - - OCL2.0 - instantiatedType.feature->collect(f | - result.ownedFeatures->select(redefines(f)).valuation-> - select(v | v <> null).value -) - - - - - <p>Two different <code>ownedFeatures</code> of the <code>result</code> of a <code>ConstructorExpression</code> must not redefine the same <code>feature</code> of the <code>instantiatedType</code> of the <code>ConstructorExpression</code>.</p> + + + <p>The <code>condition</code> <code>Expression</code> must be model-level evaluable.</p> - + OCL2.0 - let features : OrderedSet(Feature) = instantiatedType.feature-> - select(visibility = VisibilityKind::public) in -result.ownedFeature->forAll(f1 | result.ownedFeature->forAll(f2 | - f1 <> f2 implies - f1.ownedRedefinition.redefinedFeature-> - intersection(f2.ownedRedefinition.redefinedFeature)-> - intersection(features)->isEmpty())) + condition.isModelLevelEvaluable - - - <p>Each <code>ownedFeature</code> of the result of a <code>ConstructionExpression</code> must redefine exactly one public <code>feature</code> of the <code>instantiatedType</code> of the <code>ConstructorExpression</code>.</p> + + + <p>The <code>result</code> <code>parameter</code> of the <code>condition</code> <code>Expression</code> must directly or indirectly specialize <code><em>ScalarValues::Boolean</em></code>.</p> - + OCL2.0 - let features : OrderedSet(Feature) = instantiatedType.feature-> - select(owningMembership.visibility = VisibilityKind::public) in -result.ownedFeature->forAll(f | - f.ownedRedefinition.redefinedFeature-> - intersection(features)->size() = 1) + condition.result.specializesFromLibrary('ScalarValues::Boolean') - - - <p>The <code>result</code> of a <code>ConstructorExpression</code> must own a <code>BindingConnector</code> between the <code>featureWithValue</code> and <code>value</code> <code>Expression</code> of any <code>FeatureValue</code> that is the effective default value for a <code>feature</code> of the <code>instantiatedType</code> of the <code>InvocationExpression</code>.</p> + + + + <p>The model-level evaluable <code>Boolean</code>-valued <code>Expression</code> used to filter the imported <code>members</code> of the <code>membershipOwningNamespace</code> of this <code>ElementFilterMembership</code>.</p> + - - OCL2.0 - TBD - - - - - <p>A <code>ConstructorExpression</code> must directly or indirectly specialize the <code>Expression</code> <em><code>Performances::constructorEvaluations</code></em> from the Kernel Semantic Library.</p> + + + + + + + + <p>The ResultExpressionMembership that owns the <code>ownedResultExpression</code>.</p> - - OCL2.0 - specializes('Performances::constructorEvaluations') - - - - - <p>The <code>result</code> of a <code>ConstructorExpression</code> must specialize the <code>instantiatedType</code> of the <code>ConstructorExpression</code>.</p> - - - OCL2.0 - result.specializes(instantiatedType) - - - - - <p>A <code>ConstructorExpression</code> must not have any <code>ownedFeatures</code> other than its <code>result</code>.</p> - - - OCL2.0 - ownedFeatures->excluding(result)->isEmpty() - - - - - - <p>A <code>ConstructorExpression</code> is model-level evaluable if all its argument <code>Expressions</code> are model-level evaluable.</p> - - - - - OCL2.0 - argument->forAll(modelLevelEvaluable(visited)) - - - - - - - - - - + + + - - - <p>A <code>NullExpression</code> is an <code>Expression</code> that results in a null value.</p> + + + <p>A <code>ReturnParameterMembership</code> is a <code>ParameterMembership</code> that indicates that the <code>ownedMemberParameter</code> is the <code>result</code> <code>parameter</code> of a <code>Function</code> or <code>Expression</code>. The <code>direction</code> of the <code>ownedMemberParameter</code> must be <code>out</code>.</p> - - - <p>A <code>NullExpression</code> must directly or indirectly specialize the base <code>NullExpression</code> <code><em>Performances::nullEvaluations</em></code> from the Kernel Semantic Library.</p> + + + <p>The <code>owningType</code> of a <code>ReturnParameterMembership</code> must be a <code>Function</code> or <code>Expression</code>.</p> - + OCL2.0 - specializesFromLibrary('Performances::nullEvaluations') + owningType.oclIsKindOf(Function) or owningType.oclIsKindOf(Expression) - - - - <p>A <code>NullExpression</code> is always model-level evaluable.</p> - - - - OCL2.0 - true - - - - - - - - - - - - - <p>The model-level value of a <code>NullExpression</code> is an empty sequence.</p> + + + + <p>The <code>ownedMemberParameter</code> of a <code>ReturnParameterMembership</code> must have direction <code>out</code>. (This is a leaf operation that cannot be further redefined.)</p> - - + + OCL2.0 - Sequence{} + FeatureDirectionKind::out - - - - + + + - - - <p>An <code>OperatorExpression</code> is an <code>InvocationExpression</code> whose <code>function</code> is determined by resolving its <code>operator</code> in the context of one of the standard packages from the Kernel Function Library.</p> - - - - - <p>An <code>operator</code> symbol that names a corresponding <code>Function</code> from one of the standard packages from the Kernel Function Library .</p> - - - - - - <p>The <code>instantiatedType</code> of an <code>OperatorExpression</code> is the resolution of it's <code>operator</code> from one of the packages <em><code>BaseFunctions</code></em>, <em><code>DataFunctions</code></em>, or <em><code>ControlFunctions</code></em> from the Kernel Function Library.</p> + + + + <p>The Functions that have a certain Feature its owned or inherited <code>result</code>.</p> - - - OCL2.0 - let libFunctions : Sequence(Element) = - Sequence{'BaseFunctions', 'DataFunctions', 'ControlFunctions'}-> - collect(ns | resolveGlobal(ns + "::'" + operator + "'"). - memberElement) in -if libFunctions->isEmpty() then null -else libFunctions->first().oclAsType(Type) -endif - - - - + + + - - - <p>An <code>InvocationExpression</code> is an <code>InstantiationExpression</code> whose <code>instantiatedType</code> must be a <code>Behavior</code> or a <code>Feature</code> typed by a single <code>Behavior</code> (such as a <code>Step</code>). Each of the input <code>parameters</code> of the <code>instantiatedType</code> are bound to the <code>result</code> of an <code>argument</code> <code>Expression</code>. If the <code>instantiatedType</code> is a <code>Function</code> or a <code>Feature</code> typed by a <code>Function</code>, then the <code>result</code> of the <code>InvocationExpression</code> is the <code>result</code> of the invoked <code>Function</code>. Otherwise, the <code>result</code> is an instance of the <code>instantiatedType</code> (essentially like a behavioral <code>ConstructorExpression</code>).</p> + + + <p>An <code>Expression</code> is a <code>Step</code> that is typed by a <code>Function</code>. An <code>Expression</code> that also has a <code>Function</code> as its <code>featuringType</code> is a computational step within that <code>Function</code>. An <code>Expression</code> always has a single <code>result</code> parameter, which redefines the <code>result</code> parameter of its defining <code>function</code>. This allows <code>Expressions</code> to be interconnected in tree structures, in which inputs to each <code>Expression</code> in the tree are determined as the results of other <code>Expression</code> in the tree.</p> - - - <p>If the <code>instantiatedType</code> of an <code>InvocationExpression</code> is neither a <code>Function</code> nor a <code>Feature</code> whose type is a <code>Function</code>, then the <code>InvocationExpression</code> must own a <code>BindingConnector</code> between itself and its <code>result</code> parameter.</p> + + + <p>Whether an <code>Expression</code> <code>isModelLevelEvaluable</code> is determined by the <code>modelLevelEvaluable()</code> operation.</p> - + OCL2.0 - not instantiatedType.oclIsKindOf(Function) and -not (instantiatedType.oclIsKindOf(Feature) and - instantiatedType.oclAsType(Feature).type->exists(oclIsKindOf(Function))) implies - ownedFeature.selectByKind(BindingConnector)->exists( - relatedFeature->includes(self) and - relatedFeature->includes(result)) + isModelLevelEvaluable = modelLevelEvaluable(Set(Element){}) - - - <p>An <code>InvocationExpression</code> must own a <code>BindingConnector</code> between the <code>featureWithValue</code> and <code>value</code> <code>Expression</code> of any <code>FeatureValue</code> that is the effective default value for a <code>feature</code> of the <code>instantiatedType</code> of the <code>InvocationExpression</code>.</p> + + + <p>An <code>Expression</code> must directly or indirectly specialize the base <code>Expression</code> <code><em>Performances::evaluations</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - TBD + specializesFromLibrary('Performances::evaluations') - - - <p>The <code>arguments</code> of an <code>InvocationExpression</code> are the <code>value</code> <code>Expressions</code> of the <code>FeatureValues</code> of its <code>ownedFeatures</code>, in an order corresponding to the order of the <code>input</code> parameters of the <code>instantiatedType</code> that the <code>ownedFeatures</code> redefine.</p> + + + <p>If this <code>Expression</code> is owned by a <code>FeatureValue</code>, then it must have the same <code>featuringTypes</code> as the <code>featureWithValue</code> of the <code>FeatureValue</code>.</p> - + OCL2.0 - instantiatedType.input->collect(inp | - ownedFeatures->select(redefines(inp)).valuation-> - select(v | v <> null).value -) + owningMembership <> null and +owningMembership.oclIsKindOf(FeatureValue) implies + let featureWithValue : Feature = + owningMembership.oclAsType(FeatureValue).featureWithValue in + featuringType = featureWithValue.featuringType - - - <p>Each <code>input</code> parameter of an <code>InvocationExpression</code> must redefine exactly one <code>input</code> parameter of the <code>instantiatedType</code> of the <code>InvocationExpression</code>.</p> + + + <p>If an <code>Expression</code> has an <code>Expression</code> owned via a <code>ResultExpressionMembership</code>, then the owning <code>Expression</code> must also own a <code>BindingConnector</code> between its <code>result</code> <code>parameter</code> and the <code>result</code> <code>parameter</code> of the result <code>Expression</code>.</p> - + OCL2.0 - let parameters : OrderedSet(Feature) = instantiatedType.input in -input->forAll(inp | - inp.ownedRedefinition.redefinedFeature-> - intersection(parameters)->size() = 1) + ownedMembership.selectByKind(ResultExpressionMembership)-> + forAll(mem | ownedFeature.selectByKind(BindingConnector)-> + exists(binding | + binding.relatedFeature->includes(result) and + binding.relatedFeature->includes(mem.ownedResultExpression.result))) - - - <p>Two different <code>ownedFeatures</code> of an <code>InvocationExpression</code> must not redefine the same <code>feature</code> of the <code>instantiatedType</code> of the <code>InvocationExpression</code>.</p> + + + <p>The <code>result</code> parameter of an <code>Expression</code> is its <code>parameter</code> owned (possibly in a supertype) via a <code>ReturnParameterMembership</code> (if any).</p> - + OCL2.0 - let features : OrderedSet(Feature) = instantiatedType.feature in -input->forAll(inp1 | input->forAll(inp2 | - inp1 <> inp2 implies - inp1.ownedRedefinition.redefinedFeature-> - intersection(inp2.ownedRedefinition.redefinedFeature)-> - intersection(features)->isEmpty())) + result = + let resultParams : Sequence(Feature) = + featureMemberships-> + selectByKind(ReturnParameterMembership). + ownedMemberParameter in + if resultParams->notEmpty() then resultParams->first() + else null + endif + - - - <p>If the <code>instantiatedType</code> of an <code>InvocationExpression</code> is neither a <code>Function</code> nor a <code>Feature</code> whose type is a <code>Function</code>, then the <code>result</code> of the <code>InvocationExpression</code> must specialize the <code>instantiatedType</code>.</p> + + + <p>An <code>Expression</code> must have exactly one <code>featureMembership</code> (owned or inherited) that is a <code>ResultParameterMembership</code>.</p> - + OCL2.0 - not instantiatedType.oclIsKindOf(Function) and -not (instantiatedType.oclIsKindOf(Feature) and - instantiatedType.oclAsType(Feature).type->exists(oclIsKindOf(Function))) implies - result.specializes(instantiatedType) + featureMembership-> + selectByKind(ReturnParameterMembership)-> + size() = 1 - - - <p>An <code>InvocationExpression</code> must specialize its <code>instantiatedType</code>.</p> + + + <p>An <code>Expression</code> must have at most one <code>ResultExpressionMembership</code>.</p> - + OCL2.0 - specializes(instantiatedType) + membership->selectByKind(ResultExpressionMembership)->size() <= 1 - - - <p>The <code>instantiatedType</code> of an <code>InvocationExpression</code> must be either a <code>Behavior</code> or a <code>Feature</code> with a single <code>type</code>, which is a <code>Behavior</code>.</p> - - - OCL2.0 - instantiatedType.oclIsKindOf(Behavior) or -instantiatedType.oclIsKindOf(Feature) and - instantiatedType.type->exists(oclIsKindOf(Behavior)) and - instantiatedType.type->size(1) - - - - - <p>Other than its <code>result</code>, all the <code>ownedFeatures</code> of an <code>InvocationExpression</code> must have <code>direction = in</code>.</p> + + + + <p>The <code>Function</code> that types this <code>Expression</code>.</p> + - - OCL2.0 - ownedFeature->forAll(f | - f <> result implies - f.direction = FeatureDirectionKind::_'in') - - - - - - <p>An <code>InvocationExpression</code> is model-level evaluable if all its <code>argument</code> <code>Expressions</code> are model-level evaluable and its <code>function</code> is model-level evaluable.</p> + + <p>This is the Function that types the Expression.</p> - - + + + + + + <p><p>An <code>output</code> <code>parameter</code> of the <code>Expression</code> whose value is the result of the <code>Expression</code>. The result of an <code>Expression</code> is either inherited from its <code>function</code> or it is related to the <code>Expression</code> via a <code>ReturnParameterMembership</code>, in which case it redefines the <code>result</code> <code>parameter</code> of its <code>function</code>.</p> + + + + + + + + <p>Whether this <code>Expression</code> meets the constraints necessary to be evaluated at <em>model level</em>, that is, using metadata within the model.</p> + + + + + + <p>Return whether this <code>Expression</code> is model-level evaluable. The <code>visited</code> parameter is used to track possible circular <code>Feature</code> references made from <code>FeatureReferenceExpressions</code> (see the redefinition of this operation for <code>FeatureReferenceExpression</code>). Such circular references are not allowed in model-level evaluable expressions.</p> + +<p>An <code>Expression</code> that is not otherwise specialized is model-level evaluable if it has no (non-implied) <code>ownedSpecializations</code> and all its <code>ownedFeatures</code> are either <code>in</code> parameters, the <code>result</code> <code>parameter</code> or a result <code>Expression</code> owned via a <code>ResultExpressionMembership</code>. The <code>parameters</code> must not have any <code>ownedFeatures</code> or a <code>FeatureValue</code>, and the result <code>Expression</code> must be model-level evaluable.</p> + + + OCL2.0 - argument->forAll(modelLevelEvaluable(visited)) and - function.isModelLevelEvaluable + ownedSpecialization->forAll(isImplied) and +ownedFeature->forAll(f | + (directionOf(f) = FeatureDirectionKind::_'in' or f = result) and + f.ownedFeature->isEmpty() and f.valuation = null or + f.owningFeatureMembership.oclIsKindOf(ResultExpressionMembership) and + f.oclAsType(Expression).modelLevelEvaluable(visited) + - + + + + + - - - + + + + <p>If this <code>Expression</code> <code>isModelLevelEvaluable</code>, then evaluate it using the <code>target</code> as the context <code>Element</code> for resolving <code>Feature</code> names and testing classification. The result is a collection of <code>Elements</code>, which, for a fully evaluable <code>Expression</code>, will be a <code>LiteralExpression</code> or a <code>Feature</code> that is not an <code>Expression</code>.</p> + + + + OCL2.0 + isModelLevelEvaluable + + + + + OCL2.0 + let resultExprs : Sequence(Expression) = + ownedFeatureMembership-> + selectByKind(ResultExpressionMembership). + ownedResultExpression in +if resultExpr->isEmpty() then Sequence{} +else resultExprs->first().evaluate(target) +endif + + + + + + - - - <p>Apply the <code>Function</code> that is the <code>type</code> of this <code>InvocationExpression</code> to the argument values resulting from evaluating each of the <code>argument</code> <code>Expressions</code> on the given <code>target</code>. If the application is not possible, then return an empty sequence.</p> + + + <p>Model-level evaluate this <code>Expression</code> with the given <code>target</code>. If the result is a <code>LiteralBoolean</code>, return its <code>value</code>. Otherwise return <code>false</code>.</p> - - - - + + + OCL2.0 + let results: Sequence(Element) = evaluate(target) in + result->size() = 1 and + results->first().oclIsKindOf(LiteralBoolean) and + results->first().oclAsType(LiteralBoolean).value + + + + + - - - <p>An <code>IndexExpression</code> is an <code>OperatorExpression</code> whose operator is <code>"#"</code>, which resolves to the <code>Function</code> <em><code>BasicFunctions::'#'</code></em> from the Kernel Functions Library.</p> + + + <p>A <code>ResultExpressionMembership</code> is a <code>FeatureMembership</code> that indicates that the <code>ownedResultExpression</code> provides the result values for the <code>Function</code> or <code>Expression</code> that owns it. The owning <code>Function</code> or <code>Expression</code> must contain a <code>BindingConnector</code> between the <code>result</code> <code>parameter</code> of the <code>ownedResultExpression</code> and the <code>result</code> <code>parameter</code> of the owning <code>Function</code> or <code>Expression</code>.</p> + - - - <p>The <code>result</code> of an <code>IndexExpression</code> must specialize the <code>result</code> parameter of the first <code>argument</code> of the <code>IndexExpression</code>, unless that <code>result</code> already directly or indirectly specializes the <code>DataType</code> <em><code>Collections::Array</code></em> from the Kernel Data Type Library.</p> + + + <p>The <code>owningType</code> of a <code>ResultExpressionMembership</code> must be a <code>Function</code> or <code>Expression</code>.</p> - + OCL2.0 - arguments->notEmpty() and -not arguments->first().result.specializesFromLibrary('Collections::Array') implies - result.specializes(arguments->first().result) + owningType.oclIsKindOf(Function) or owningType.oclIsKindOf(Expression) - - - <p>The <code>operator</code> of an <code>IndexExpression</code> must be <code>"#"</code>.</p> + + + + <p>The <code>Expression</code> that provides the result for the owner of the <code>ResultExpressionMembership</code>.</p> + - - OCL2.0 - operator = '#' - - - - - - + + - - - <p>A <code>CollectExpression</code> is an <code>OperatorExpression</code> whose <code>operator</code> is <code>"collect"</code>, which resolves to the <code>Function</code> <em><code>ControlFunctions::collect</code></em> from the Kernel Functions Library.</p> + + + <p>A <code>Predicate</code> is a <code>Function</code> whose <code>result</code> <code>parameter</code> has type <code><em>Boolean</em></code> and multiplicity <code>1..1</code>.</p> + - - - <p>The <code>operator</code> of a <code>CollectExpression</code> must be <code>"collect"</code>.</p> + + + <p>A <code>Predicate</code> must directly or indirectly specialize the base <code>Predicate</code> <code><em>Performances::BooleanEvaluation</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - operator = 'collect' + specializesFromLibrary('Performances::BooleanEvaluation') - - - - - + - - - - + + + + - - - <p><code>LiteralBoolean</code> is a <code>LiteralExpression</code> that provides a <code><em>Boolean</em></code> value as a result. Its <code>result</code> <code>parameter</code> must have type <code><em>Boolean</em></code>.</p> + + + + <p>The Expressions that are typed by a certain <code>function</code>.</p> + + + + + + + + <p>A <code>Function</code> is a <code>Behavior</code> that has an <code>out</code> <code>parameter</code> that is identified as its <code>result</code>. A <code>Function</code> represents the performance of a calculation that produces the values of its <code>result</code> <code>parameter</code>. This calculation may be decomposed into <code>Expressions</code> that are <code>steps</code> of the <code>Function</code>.</p> - - - <p>A <code>LiteralBoolean</code> must directly or indirectly specialize <em><code>Performances::literalBooleanEvaluations</code></em> from the Kernel Semantic Library.</p> + + + <p>A <code>Function</code> must have exactly one <code>featureMembership</code> (owned or inherited) that is a <code>ResultParameterMembership</code>.</p> - + OCL2.0 - specializesFromLibrary('Performances::literalBooleanEvaluations') + featureMembership-> + selectByKind(ReturnParameterMembership)-> + size() = 1 - - - - <p>The <code><em>Boolean</em></code> value that is the result of evaluating this <code>LiteralBoolean</code>.</p> - - - <p>The Boolean value that is the result of evaluating this Expression.</p> - - - - - - - - - - - - - - <p>A <code>FeatureReferenceExpression</code> is an <code>Expression</code> whose <code>result</code> is bound to a <code>referent</code> <code>Feature</code>.</p> - - - - <p>The <code>referent</code> of a <code>FeatureReferenceExpression</code> is the <code>memberElement</code> of its first <code>ownedMembership</code> that is not a <code>ParameterMembership</code>.</p> + + + <p>A <code>Function</code> must directly or indirectly specialize the base <code>Function</code> <code><em>Performances::Evaluation</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - referent = - let nonParameterMemberships : Sequence(Membership) = ownedMembership-> - reject(oclIsKindOf(ParameterMembership)) in - if nonParameterMemberships->isEmpty() or - not nonParameterMemberships->first().memberElement.oclIsKindOf(Feature) - then null - else nonParameterMemberships->first().memberElement.oclAsType(Feature) - endif + specializesFromLibrary('Performances::Evaluation') - - - <p>A <code>FeatureReferenceExpression</code> must have an <code>ownedMember</code> that is a <code>BindingConnector</code> between the <code>referent</code> and <code>result</code> of the <code>FeatureReferenceExpression</code>.</p> + + + <p>If a <code>Function</code> has an <code>Expression</code> owned via a <code>ResultExpressionMembership</code>, then the owning <code>Function</code> must also own a <code>BindingConnector</code> between its <code>result</code> <code>parameter</code> and the <code>result</code> <code>parameter</code> of the result <code>Expression</code>.</p> - + OCL2.0 - ownedMember->selectByKind(BindingConnector)->exists(b | - b.relatedFeatures->includes(targetFeature) and - b.relatedFeatures->includes(result)) + ownedMembership.selectByKind(ResultExpressionMembership)-> + forAll(mem | ownedFeature.selectByKind(BindingConnector)-> + exists(binding | + binding.relatedFeature->includes(result) and + binding.relatedFeature->includes(mem.ownedResultExpression.result))) - - - <p>The first <code>ownedMembership</code> of a <code>FeatureReferenceExpression</code> that is not a <code>ParameterMembership</code> must have a <code>Feature</code> as its <code>memberElement</code>.</p> + + + <p>The <code>result</code> <code>parameter</code> of a <code>Function</code> is its <code>parameter</code> owned (possibly in a supertype) via a <code>ReturnParameterMembership</code> (if any).</p> - + OCL2.0 - let membership : Membership = - ownedMembership->reject(m | m.oclIsKindOf(ParameterMembership)) in -membership->notEmpty() and -membership->at(1).memberElement.oclIsKindOf(Feature) + result = + let resultParams : Sequence(Feature) = + featureMemberships-> + selectByKind(ReturnParameterMembership). + ownedMemberParameter in + if resultParams->notEmpty() then resultParams->first() + else null + endif - - - <p>The <code>result</code> parameter of a <code>FeatureReferenceExpression</code> must specialize the <code>referent</code> of the <code>FeatureReferenceExpression</code>.</p> + + + <p>A <code>Function</code> must have at most one <code>ResultExpressionMembership</code>.</p> - + OCL2.0 - result.owningType() = self and result.specializes(referent) + membership->selectByKind(ResultExpressionMembership)->size() <= 1 - - - <p>A <code>FeatureReferenceExpression</code> must own its <code>result</code> parameter.</p> + + + + <p>The <code>Expressions</code> that are <code>steps</code> in the calculation of the <code>result</code> of this <code>Function</code>.</p> + - - OCL2.0 - result.owningType = self - - - - - - <p>The <code>Feature</code> that is referenced by this <code>FeatureReferenceExpression</code>, which is its first non-<code>parameter</code> <code>member</code>.<p> + + <p>The set of expressions that represent computational steps or parts of a system of equations within the Function.</p> + - - + + - - - <p>A <code>FeatureReferenceExpression</code> is model-level evaluable if it&#39;s <code>referent</code></p> - -<ul> - <li>conforms to the self-reference feature <code><em>Anything::self</em></code>;</li> - <li>is an <code>Expression</code> that is model-level evaluable;</li> - <li>has an <code>owningType</code> that is a <code>Metaclass</code> or <code>MetadataFeature</code>; or</li> - <li>has no <code>featuringTypes</code> and, if it has a <code>FeatureValue</code>, the <code>value</code> <code>Expression</code> is model-level evaluable.</li> -</ul> + + + <p>The object or value that is the result of evaluating the Function.</p> + + + <p>The <code>result</code> <code>parameter</code> of the <code>Function</code>, which is owned by the <code>Function</code> via a <code>ReturnParameterMembership</code>.</p> - - - OCL2.0 - referent.conformsTo('Anything::self') or -visited->excludes(referent) and -(referent.oclIsKindOf(Expression) and - referent.oclAsType(Expression).modelLevelEvaluable(visited->including(referent)) or -referent.owningType <> null and - (referent.owningType.isOclKindOf(MetaClass) or - referent.owningType.isOclKindOf(MetadataFeature)) or -referent.featuringType->isEmpty() and - (referent.valuation = null or - referent.valuation.modelLevelEvaluable(visited->including(referent)))) - - - - - - - - - - - - - <p>First, determine a <code>value</code> <code>Expression</code> for the <code>referent</code>:</p> - -<ul> - <li>If the <code>target</code> <code>Element</code> is a Type that has a <code>feature</code> that is the <code>referent</code> or (directly or indirectly) redefines it, then the <code>value</code> <code>Expression</code> of the <code>FeatureValue</code> for that <code>feature</code> (if any).</li> - <li>Else, if the <code>referent</code> has no <code>featuringTypes</code>, the <code>value</code> <code>Expression</code> of the <code>FeatureValue</code> for the <code>referent</code> (if any).</li> -</ul> - -<p>Then:</p> + + + + + + <p>Whether this <code>Function</code> can be used as the <code>function</code> of a model-level evaluable <code>InvocationExpression</code>. Certain <code>Functions</code> from the Kernel Functions Library are considered to have <code>isModelLevelEvaluable = true</code>. For all other <code>Functions</code> it is <code>false</code>.</p> -<ul> - <li>If such a value <code>Expression</code> exists, return the result of evaluating that <code>Expression</code> on the <code>target</code>.</li> - <li>Else, if the <code>referent</code> is not an <code>Expression</code>, return the <code>referent</code>.</li> - <li>Else return the empty sequence.</li> -</ul> +<p><strong>Note:</strong> See the specification of the KerML concrete syntax notation for <code>Expressions</code> for an identification of which library <code>Functions</code> are model-level evaluable.</p> + + + + + + + <p>An <code>Invariant</code> is a <code>BooleanExpression</code> that is asserted to have a specific <code><em>Boolean</em></code> result value. If <code>isNegated = false</code>, then the result is asserted to be true. If <code>isNegated = true</code>, then the result is asserted to be false.</p> + + + + <p>An <code>Invariant</code> must directly or indirectly specialize either of the following <code>BooleanExpressions</code> from the Kernel Semantic Library: <code><em>Performances::trueEvaluations</em></code>, if <code>isNegated = false</code>, or <code><em>Performances::falseEvaluations</em></code>, if <code>isNegated = true</code>.</p> - - - OCL2.0 - if not target.oclIsKindOf(Type) then Sequence{} + + OCL2.0 + if isNegated then + specializesFromLibrary('Performances::falseEvaluations') else - let feature: Sequence(Feature) = - target.oclAsType(Type).feature->select(f | - f.ownedRedefinition.redefinedFeature-> - includes(referent)) in - if feature->notEmpty() then - feature.valuation.value.evaluate(target) - else if referent.featuringType->isEmpty() - then referent - else Sequence{} - endif endif + specializesFromLibrary('Performances::trueEvaluations') endif - - - - - - - - + + + + + + <p>Whether this <code>Invariant</code> is asserted to be false rather than true.</p> + + + + + - - - <p>A <code>MetadataAccessExpression</code> is an <code>Expression</code> whose <code>result</code> is a sequence of instances of <code>Metaclasses</code> representing all the <code>MetadataFeature</code> annotations of the <code>referencedElement</code>. In addition, the sequence includes an instance of the reflective <code>Metaclass</code> corresponding to the MOF class of the <code>referencedElement</code>, with values for all the abstract syntax properties of the <code>referencedElement</code>.</p> + + + <p>A <code>BooleanExpression</code> is a <em><code>Boolean</code></em>-valued <code>Expression</code> whose type is a <code>Predicate</code>. It represents a logical condition resulting from the evaluation of the <code>Predicate</code>.</p> + - - - <p>A <code>MetadataAccessExpression</code> must directly or indirectly specialize the base <code>MetadataAccessExpression</code> <code><em>Performances::metadataAccessEvaluations</em></code> from the Kernel Semantic Library.</p> + + + <p>A <code>BooleanExpression</code> must directly or indirectly specialize the base <code>BooleanExpression</code> <code><em>Performances::booleanEvaluations</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - specializesFromLibrary('Performances::metadataAccessEvaluations') + specializesFromLibrary('Performances::booleanEvaluations') - - - <p>A <code>MetadataAccessExpression</code> must have at least one <code>ownedMember</code> that is not a <code>FeatureMembership</code>.</p> + + + + <p>The Predicate that types the Expression.</p> + - + + <p>The <code>Predicate</code> that types this <code>BooleanExpression</code>.</p> + + + + + + + + + <p>The Expressions that have a certain Feature its owned or inherited <code>result</code>.</p> + + + + + + + + + <p>The Functions that hasve a certain <code>expression</code> as a step.</p> + + + + + + + + <p>A <code>Structure</code> is a <code>Class</code> of objects in the modeled universe that are primarily structural in nature. While such an object is not itself behavioral, it may be involved in and acted on by <code>Behaviors</code>, and it may be the performer of some of them.</p> + + + + + <p>A <code>Structure</code> must directly or indirectly specialize the base <code>Structure</code> <code><em>Objects::Object</em></code> from the Kernel Semantic Library.</p> + + OCL2.0 - ownedMembership->exists(not oclIsKindOf(FeatureMembership)) + specializesFromLibrary('Objects::Object') - - - <p>The <code>referencedElement</code> of a <code>MetadataAccessExpression</code> is the <code>memberElement</code> of its first <code>ownedMembership</code> that is not a <code>FeatureMembership</code>.</p> + + + <p>A <code>Structure</code> must not specialize a <code>Behavior</code>.</p> - + OCL2.0 - referencedElement = - let elements : Sequence(Element) = ownedMembership-> - reject(oclIsKindOf(FeatureMembership)).memberElement in - if elements->isEmpty() then null - else elements->first() - endif + ownedSpecialization.general->forAll(not oclIsKindOf(Behavior)) - - - - <p>The <code>Element</code> whose metadata is being accessed.</p> - - - - - - - <p>A <code>MetadataAccessExpression</code> is always model-level evaluable.</p> - - - - OCL2.0 - true - - - - - - - - - - - - - <p>Return the <code>ownedElements</code> of the <code>referencedElement</code> that are <code>MetadataFeatures</code> and have the <code>referencedElement</code> as an <code>annotatedElement</code>, plus a <code>MetadataFeature</code> whose <code>annotatedElement</code> is the <code>referencedElement</code>, whose <code>metaclass</code> is the reflective <code>Metaclass</code> corresponding to the MOF class of the <code>referencedElement</code> and whose <code>ownedFeatures</code> are bound to the values of the MOF properties of the <code>referencedElement</code>.</p> - - - - OCL2.0 - referencedElement.ownedElement-> - select(oclIsKindOf(MetadataFeature) - and annotatedElement->includes(referencedElement))-> - including(metaclassFeature()) - - - - - - - - - - - <p>Return a <code>MetadataFeature</code> whose <code>annotatedElement</code> is the <code>referencedElement</code>, whose <code>metaclass</code> is the reflective <code>Metaclass</code> corresponding to the MOF class of the <code>referencedElement</code> and whose <code>ownedFeatures</code> are bound to the MOF properties of the <code>referencedElement</code>.</p> - - - + - - - <p>A <code>LiteralRational</code> is a <code>LiteralExpression</code> that provides a <code><em>Rational</em></code> value as a result. Its <code>result</code> <code>parameter</code> must have the type <code><em>Rational</em></code>.</p> + + + + + + + + + + + + + + + + + + + + + + + + + + + <p>An <code>Association</code> is a <code>Relationship</code> and a <code>Classifier</code> to enable classification of links between things (in the universe). The co-domains (<code>types</code>) of the <code>associationEnd</code> <code>Features</code> are the <code>relatedTypes</code>, as co-domain and participants (linked things) of an <code>Association</code> identify each other.</p> - - - <p>A <code>LiteralRational</code> must directly or indirectly specialize <em><code>Performances::literalRationalEvaluations</code></em> from the Kernel Semantic Library.</p> + + + <p>The <code>relatedTypes</code> of an <code>Association</code> are the <code>types</code> of its <code>associationEnds</code>.</p> - + OCL2.0 - specializesFromLibrary('Performances::literalRationalEvaluations') + relatedType = associationEnd.type - - - - <p>The value whose rational approximation is the result of evaluating this <code>LiteralRational</code>.</p> - - - - <p>The Real value that is the result of evaluating this Expression.</p> - - - - - - - <p>A <code>LiteralInteger</code> is a <code>LiteralExpression</code> that provides an <code><em>Integer</em></code> value as a result. Its <code>result</code> <code>parameter</code> must have the type <code><em>Integer</em></code>.</p> - - - - - <p>A <code>LiteralInteger</code> must directly or indirectly specialize <em><code>Performances::literalIntegerEvaluations</code></em> from the Kernel Semantic Library.</p> + + + <p>An <code>Association</code> must directly or indirectly specialize the base <code>Association</code> <code><em>Links::Link</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - specializesFromLibrary('Performances::literalIntegerEvaluations') + specializesFromLibrary('Links::Link') - - - - <p>The <code><em>Integer</em></code> value that is the result of evaluating this <code>LiteralInteger</code>.</p> - - - <p>The Integer value that is the result of evaluating this Expression.</p> - - - - - - - - <p>A <code>LiteralString</code> is a <code>LiteralExpression</code> that provides a <code><em>String</em></code> value as a result. Its <code>result</code> <code>parameter</code> must have the type <code><em>String</em></code>.</p> - - - - - <p>A <code>LiteralString</code> must directly or indirectly specialize <em><code>Performances::literalStringEvaluations</code></em> from the Kernel Semantic Library.</p> + + + <p>If an <code>Association</code> is also a kind of <code>Structure</code>, then it must be an <code>AssociationStructure</code>.</p> - - OCL2.0 - specializesFromLibrary('Performances::literalStringEvaluations') + + English + oclIsKindOf(Structure) = oclIsKindOf(AssociationStructure) - - - - <p>The String value that is the result of evaluating this Expression.</p> - - - <p>The <code><em>String</em></code> value that is the result of evaluating this <code>LiteralString</code>.</p> - - - - - - - - - <p>The <code>MetadataAccessExpressions</code> having a certain <code>Element</code> as their <code>referencedElement</code>.</p> - - - - - - - - <p>A <code>FeatureChainExpression</code> is an <code>OperatorExpression</code> whose operator is <code>"."</code>, which resolves to the <code>Function</code> <em><code>ControlFunctions::'.'</code></em> from the Kernel Functions Library. It evaluates to the result of chaining the <code>result</code> <code>Feature</code> of its single <code>argument</code> <code>Expression</code> with its <code>targetFeature</code>.</p> - - - - <p>The first <code>ownedFeature</code> of the first owned input <code>parameter</code> of a <code>FeatureChainExpression</code> must redefine the <code>Feature</code> <code><em>ControlFunctions::'.'::source::target</em></code> from the Kernel Functions Library.</p> + + + <p>A binary <code>Association</code> must directly or indirectly specialize the base <code>Association</code> <code><em>Links::binaryLink</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - let sourceParameter : Feature = sourceTargetFeature() in -sourceTargetFeature <> null and -sourceTargetFeature.redefinesFromLibrary('ControlFunctions::\'.\'::source::target') + associationEnd->size() = 2 implies + specializesFromLibrary('Links::BinaryLink') - - - <p>The first <code>ownedFeature</code> of the first owned input <code>parameter</code> of a <code>FeatureChainExpression</code> must redefine its <code>targetFeature</code>.</p> + + + <p>If an <code>Association</code> is concrete (not abstract), then it must have at least two <code>relatedTypes</code>.</p> - + OCL2.0 - let sourceParameter : Feature = sourceTargetFeature() in -sourceTargetFeature <> null and -sourceTargetFeature.redefines(targetFeature) + not isAbstract implies relatedType->size() >= 2 - - - <p>The <code>targetFeature</code> of a <code>FeatureChainExpression</code> is the <code>memberElement</code> of its first <code>ownedMembership</code> that is not a <code>ParameterMembership</code>.</p> + + + <p>If an <code>Association</code> has more than two <code>associationEnds</code>, then it must <em>not</em> specialize, directly or indirectly, the <code>Association</code> <em><code>BinaryLink</code></em> from the Kernel Semantic Library.</p> - + OCL2.0 - targetFeature = - let nonParameterMemberships : Sequence(Membership) = ownedMembership-> - reject(oclIsKindOf(ParameterMembership)) in - if nonParameterMemberships->isEmpty() or - not nonParameterMemberships->first().memberElement.oclIsKindOf(Feature) - then null - else nonParameterMemberships->first().memberElement.oclAsType(Feature) - endif + associationEnds->size() > 2 implies + not specializesFromLibrary('Links::BinaryLink') - - - <p>The <code>targetFeature</code> of a <code>FeatureChainExpression</code> must be featured within the <code>result</code> parameter of the <code>argument</code> <code>Expression</code> of the <code>FeatureChainExpression</code>.</p> - - + + + <p>The <code>sourceType</code> of an <code>Association</code> is its first <code>relatedType</code> (if any).</p> - + OCL2.0 - argument->notEmpty() implies - targetFeature.isFeaturedWithin(argument->first().result) + sourceType = + if relatedType->isEmpty() then null + else relatedType->first() endif - - - <p>The <code>operator</code> of a <code>FeatureChainExpression</code> must be <code>"."</code>.</p> - - + + OCL2.0 - operator = '.' + targetType = + if relatedType->size() < 2 then OrderedSet{} + else + relatedType-> + subSequence(2, relatedType->size())-> + asOrderedSet() + endif - - - <p>The <code>result</code> parameter of a <code>FeatureChainExpression</code> must specialize the feature chain of the <code>FeatureChainExpression</code>.</p> + + + <p>The <code>ownedEndFeatures</code> of an <code>Association</code> must have exactly one <code>type</code></p>. - + OCL2.0 - let inputParameters : Sequence(Feature) = - ownedFeatures->select(direction = _'in') in -let sourceTargetFeature : Feature = - owningExpression.sourceTargetFeature() in + ownedEndFeature->forAll(type->size() = 1) + + + + + + + <p>The <code>types</code> of the <code>associationEnds</code> of the <code>Association</code>, which are the <code>relatedElements</code> of the <code>Association</code> considered as a <code>Relationship</code>.</p> + + + + + + + + <p>The source <code>relatedType</code> for this <code>Association</code>. It is the first <code>relatedType</code> of the <code>Association</code>.</p> + + + + + + + + <p>The target <code>relatedTypes</code> for this <code>Association</code>. This includes all the <code>relatedTypes</code> other than the <code>sourceType</code>.</p> + + + + + + + + <p>The <code>features</code> of the <code>Association</code> that identify the things that can be related by it. A concrete <code>Association</code> must have at least two <code>associationEnds</code>. When it has exactly two, the <code>Association</code> is called a <em>binary</em> <code>Association</code>.</p> + + + + + + + + + <p>An <code>AssociationStructure</code> is an <code>Association</code> that is also a <code>Structure</code>, classifying link objects that are both links and objects. As objects, link objects can be created and destroyed, and their non-end <code>Features</code> can change over time. However, the values of the end <code>Features</code> of a link object are fixed and cannot change over its lifetime.</p> + + + + <p>An <code>AssociationStructure</code> must directly or indirectly specialize the base <code>AssociationStructure</code> <code><em>Objects::LinkObject</em></code> from the Kernel Semantic Library.</p> + + + OCL2.0 + specializesFromLibrary('Objects::LinkObject') + + + + + <p>A binary <code>AssociationStructure</code> must directly or indirectly specialize the base <code>AssociationStructure</code> <code><em>Objects::BinaryLinkObject</em></code> from the Kernel Semantic Library.</p> + + + OCL2.0 + endFeature->size() = 2 implies + specializesFromLibrary('Objects::BinaryLinkObject') + + + + + + + + <p>A <code>FeatureChainExpression</code> is an <code>OperatorExpression</code> whose operator is <code>"."</code>, which resolves to the <code>Function</code> <em><code>ControlFunctions::'.'</code></em> from the Kernel Functions Library. It evaluates to the result of chaining the <code>result</code> <code>Feature</code> of its single <code>argument</code> <code>Expression</code> with its <code>targetFeature</code>.</p> + + + + <p>The first <code>ownedFeature</code> of the first owned input <code>parameter</code> of a <code>FeatureChainExpression</code> must redefine the <code>Feature</code> <code><em>ControlFunctions::'.'::source::target</em></code> from the Kernel Functions Library.</p> + + + OCL2.0 + let sourceTargetFeature : Feature = sourceTargetFeature() in +sourceTargetFeature <> null and +sourceTargetFeature.redefinesFromLibrary('ControlFunctions::\'.\'::source::target') + + + + + <p>The first <code>ownedFeature</code> of the first owned input <code>parameter</code> of a <code>FeatureChainExpression</code> must redefine its <code>targetFeature</code>.</p> + + + OCL2.0 + let sourceTargetFeature : Feature = sourceTargetFeature() in +sourceTargetFeature <> null and +sourceTargetFeature.redefines(targetFeature) + + + + + <p>The <code>targetFeature</code> of a <code>FeatureChainExpression</code> is the <code>memberElement</code> of its first <code>ownedMembership</code> that is not a <code>ParameterMembership</code>.</p> + + + OCL2.0 + targetFeature = + let nonParameterMemberships : Sequence(Membership) = ownedMembership-> + reject(oclIsKindOf(ParameterMembership)) in + if nonParameterMemberships->isEmpty() or + not nonParameterMemberships->first().memberElement.oclIsKindOf(Feature) + then null + else nonParameterMemberships->first().memberElement.oclAsType(Feature) + endif + + + + + <p>The <code>targetFeature</code> of a <code>FeatureChainExpression</code> must be featured within the <code>result</code> parameter of the <code>argument</code> <code>Expression</code> of the <code>FeatureChainExpression</code>.</p> + + + + + OCL2.0 + argument->notEmpty() implies + targetFeature.isFeaturedWithin(argument->first().result) + + + + + <p>The <code>operator</code> of a <code>FeatureChainExpression</code> must be <code>"."</code>.</p> + + + OCL2.0 + operator = '.' + + + + + <p>The <code>result</code> parameter of a <code>FeatureChainExpression</code> must specialize the feature chain of the <code>FeatureChainExpression</code>.</p> + + + OCL2.0 + let inputParameters : Sequence(Feature) = + ownedFeatures->select(direction = _'in') in +let sourceTargetFeature : Feature = + owningExpression.sourceTargetFeature() in sourceTargetFeature <> null and result.subsetsChain(inputParameters->first(), sourceTargetFeature) and result.owningType = self @@ -964,65 +920,6 @@ endif - - - <p>A <code>LiteralExpression</code> is an <code>Expression</code> that provides a basic <code><em>DataValue</em></code> as a result.</p> - - - - - <p>A <code>LiteralExpression</code> is always model-level evaluable.</p> - - - OCL2.0 - isModelLevelEvaluable = true - - - - - <p>A <code>LiteralExpression</code> must directly or indirectly specialize the base <code>LiteralExpression</code> <code><em>Performances::literalEvaluations</em></code> from the Kernel Semantic Library.</p> - - - OCL2.0 - specializesFromLibrary('Performances::literalEvaluations') - - - - - - <p>A <code>LiteralExpression</code> is always model-level evaluable.</p> - - - - OCL2.0 - true - - - - - - - - - - - - - <p>The model-level value of a <code>LiteralExpression</code> is itself.</p> - - - - OCL2.0 - Sequence{self} - - - - - - - - - <p>A <code>LiteralInfinity</code> is a <code>LiteralExpression</code> that provides the positive infinity value (<code>*</code>). It's <code>result</code> must have the type <code><em>Positive</em></code>.</p> @@ -1039,1123 +936,1252 @@ endif - - - <p>A <code>BooleanExpression</code> is a <em><code>Boolean</code></em>-valued <code>Expression</code> whose type is a <code>Predicate</code>. It represents a logical condition resulting from the evaluation of the <code>Predicate</code>.</p> - + + + <p>A <code>CollectExpression</code> is an <code>OperatorExpression</code> whose <code>operator</code> is <code>"collect"</code>, which resolves to the <code>Function</code> <em><code>ControlFunctions::collect</code></em> from the Kernel Functions Library.</p> - - - <p>A <code>BooleanExpression</code> must directly or indirectly specialize the base <code>BooleanExpression</code> <code><em>Performances::booleanEvaluations</em></code> from the Kernel Semantic Library.</p> + + + <p>The <code>operator</code> of a <code>CollectExpression</code> must be <code>"collect"</code>.</p> - + OCL2.0 - specializesFromLibrary('Performances::booleanEvaluations') + operator = 'collect' - - - - <p>The Predicate that types the Expression.</p> - - - - <p>The <code>Predicate</code> that types this <code>BooleanExpression</code>.</p> - - - + + + + - - - - <p>The ResultExpressionMembership that owns the <code>ownedResultExpression</code>.</p> - - - - - - - - <p>A <code>ReturnParameterMembership</code> is a <code>ParameterMembership</code> that indicates that the <code>ownedMemberParameter</code> is the <code>result</code> <code>parameter</code> of a <code>Function</code> or <code>Expression</code>. The <code>direction</code> of the <code>ownedMemberParameter</code> must be <code>out</code>.</p> - + + + <p>A <code>SelectExpression</code> is an <code>OperatorExpression</code> whose operator is <code>"select"</code>, which resolves to the <code>Function</code> <em><code>ControlFunctions::select</code></em> from the Kernel Functions Library.</p> - - - <p>The <code>owningType</code> of a <code>ReturnParameterMembership</code> must be a <code>Function</code> or <code>Expression</code>.</p> + + + <p>The <code>operator</code> of a <code>SelectExpression</code> must be <code>'select'</code>.</p> - + OCL2.0 - owningType.oclIsKindOf(Function) or owningType.oclIsKindOf(Expression) + operator = 'select' - - - - <p>The <code>ownedMemberParameter</code> of a <code>ReturnParameterMembership</code> must have direction <code>out</code>. (This is a leaf operation that cannot be further redefined.)</p> + + + <p>The <code>result</code> of a <code>SelectExpression</code> must specialize the <code>result</code> parameter of the first <code>argument</code> of the <code>SelectExpression</code>.</p> - - + + OCL2.0 + arguments->notEmpty() implies + result.specializes(arguments->first().result) + + + + + + + + + + + <p>An <code>OperatorExpression</code> is an <code>InvocationExpression</code> whose <code>function</code> is determined by resolving its <code>operator</code> in the context of one of the standard packages from the Kernel Function Library.</p> + + + + + <p>An <code>operator</code> symbol that names a corresponding <code>Function</code> from one of the standard packages from the Kernel Function Library .</p> + + + + + + <p>The <code>instantiatedType</code> of an <code>OperatorExpression</code> is the resolution of it's <code>operator</code> from one of the packages <em><code>BaseFunctions</code></em>, <em><code>DataFunctions</code></em>, or <em><code>ControlFunctions</code></em> from the Kernel Function Library.</p> + + + OCL2.0 - FeatureDirectionKind::out + let libFunctions : Sequence(Element) = + Sequence{'BaseFunctions', 'DataFunctions', 'ControlFunctions'}-> + collect(ns | resolveGlobal(ns + "::'" + operator + "'"). + memberElement) in +if libFunctions->isEmpty() then null +else libFunctions->first().oclAsType(Type) +endif - - - - + - - - <p>An <code>Expression</code> is a <code>Step</code> that is typed by a <code>Function</code>. An <code>Expression</code> that also has a <code>Function</code> as its <code>featuringType</code> is a computational step within that <code>Function</code>. An <code>Expression</code> always has a single <code>result</code> parameter, which redefines the <code>result</code> parameter of its defining <code>function</code>. This allows <code>Expressions</code> to be interconnected in tree structures, in which inputs to each <code>Expression</code> in the tree are determined as the results of other <code>Expression</code> in the tree.</p> - + + + + + + + + + <p>A <code>FeatureReferenceExpression</code> is an <code>Expression</code> whose <code>result</code> is bound to a <code>referent</code> <code>Feature</code>.</p> - - - <p>Whether an <code>Expression</code> <code>isModelLevelEvaluable</code> is determined by the <code>modelLevelEvaluable()</code> operation.</p> - - - OCL2.0 - isModelLevelEvaluable = modelLevelEvaluable(Set(Element){}) - - - - - <p>An <code>Expression</code> must directly or indirectly specialize the base <code>Expression</code> <code><em>Performances::evaluations</em></code> from the Kernel Semantic Library.</p> - - - OCL2.0 - specializesFromLibrary('Performances::evaluations') - - - - - <p>If this <code>Expression</code> is owned by a <code>FeatureValue</code>, then it must have the same <code>featuringTypes</code> as the <code>featureWithValue</code> of the <code>FeatureValue</code>.</p> + + + <p>The <code>referent</code> of a <code>FeatureReferenceExpression</code> is the <code>memberElement</code> of its first <code>ownedMembership</code> that is not a <code>ParameterMembership</code>.</p> - + OCL2.0 - owningMembership <> null and -owningMembership.oclIsKindOf(FeatureValue) implies - let featureWithValue : Feature = - owningMembership.oclAsType(FeatureValue).featureWithValue in - featuringType = featureWithValue.featuringType + referent = + let nonParameterMemberships : Sequence(Membership) = ownedMembership-> + reject(oclIsKindOf(ParameterMembership)) in + if nonParameterMemberships->isEmpty() or + not nonParameterMemberships->first().memberElement.oclIsKindOf(Feature) + then null + else nonParameterMemberships->first().memberElement.oclAsType(Feature) + endif - - - <p>If an <code>Expression</code> has an <code>Expression</code> owned via a <code>ResultExpressionMembership</code>, then the owning <code>Expression</code> must also own a <code>BindingConnector</code> between its <code>result</code> <code>parameter</code> and the <code>result</code> <code>parameter</code> of the result <code>Expression</code>.</p> + + + <p>A <code>FeatureReferenceExpression</code> must have an <code>ownedMember</code> that is a <code>BindingConnector</code> between the <code>referent</code> and <code>result</code> of the <code>FeatureReferenceExpression</code>.</p> - + OCL2.0 - ownedMembership.selectByKind(ResultExpressionMembership)-> - forAll(mem | ownedFeature.selectByKind(BindingConnector)-> - exists(binding | - binding.relatedFeature->includes(result) and - binding.relatedFeature->includes(mem.ownedResultExpression.result))) + ownedMember->selectByKind(BindingConnector)->exists(b | + b.relatedFeatures->includes(targetFeature) and + b.relatedFeatures->includes(result)) - - - <p>The <code>result</code> parameter of an <code>Expression</code> is its <code>parameter</code> owned (possibly in a supertype) via a <code>ReturnParameterMembership</code> (if any).</p> + + + <p>The first <code>ownedMembership</code> of a <code>FeatureReferenceExpression</code> that is not a <code>ParameterMembership</code> must have a <code>Feature</code> as its <code>memberElement</code>.</p> - + OCL2.0 - result = - let resultParams : Sequence(Feature) = - featureMemberships-> - selectByKind(ReturnParameterMembership). - ownedMemberParameter in - if resultParams->notEmpty() then resultParams->first() - else null - endif - + let membership : Membership = + ownedMembership->reject(m | m.oclIsKindOf(ParameterMembership)) in +membership->notEmpty() and +membership->at(1).memberElement.oclIsKindOf(Feature) - - - <p>An <code>Expression</code> must have exactly one <code>featureMembership</code> (owned or inherited) that is a <code>ResultParameterMembership</code>.</p> + + + <p>The <code>result</code> parameter of a <code>FeatureReferenceExpression</code> must specialize the <code>referent</code> of the <code>FeatureReferenceExpression</code>.</p> - + OCL2.0 - featureMembership-> - selectByKind(ReturnParameterMembership)-> - size() = 1 + result.owningType() = self and result.specializes(referent) - - - <p>An <code>Expression</code> must have at most one <code>ResultExpressionMembership</code>.</p> + + + <p>A <code>FeatureReferenceExpression</code> must own its <code>result</code> parameter.</p> - + OCL2.0 - membership->selectByKind(ResultExpressionMembership)->size() <= 1 + result.owningType = self - - - - <p>The <code>Function</code> that types this <code>Expression</code>.</p> - - - - <p>This is the Function that types the Expression.</p> - - - - - - - - <p><p>An <code>output</code> <code>parameter</code> of the <code>Expression</code> whose value is the result of the <code>Expression</code>. The result of an <code>Expression</code> is either inherited from its <code>function</code> or it is related to the <code>Expression</code> via a <code>ReturnParameterMembership</code>, in which case it redefines the <code>result</code> <code>parameter</code> of its <code>function</code>.</p> - - - - - - - - <p>Whether this <code>Expression</code> meets the constraints necessary to be evaluated at <em>model level</em>, that is, using metadata within the model.</p> + + + + <p>The <code>Feature</code> that is referenced by this <code>FeatureReferenceExpression</code>, which is its first non-<code>parameter</code> <code>member</code>.<p> - + + - - - <p>Return whether this <code>Expression</code> is model-level evaluable. The <code>visited</code> parameter is used to track possible circular <code>Feature</code> references made from <code>FeatureReferenceExpressions</code> (see the redefinition of this operation for <code>FeatureReferenceExpression</code>). Such circular references are not allowed in model-level evaluable expressions.</p> + + + <p>A <code>FeatureReferenceExpression</code> is model-level evaluable if it&#39;s <code>referent</code></p> -<p>An <code>Expression</code> that is not otherwise specialized is model-level evaluable if it has no (non-implied) <code>ownedSpecializations</code> and all its <code>ownedFeatures</code> are either <code>in</code> parameters, the <code>result</code> <code>parameter</code> or a result <code>Expression</code> owned via a <code>ResultExpressionMembership</code>. The <code>parameters</code> must not have any <code>ownedFeatures</code> or a <code>FeatureValue</code>, and the result <code>Expression</code> must be model-level evaluable.</p> +<ul> + <li>conforms to the self-reference feature <code><em>Anything::self</em></code>;</li> + <li>is an <code>Expression</code> that is model-level evaluable;</li> + <li>has an <code>owningType</code> that is a <code>Metaclass</code> or <code>MetadataFeature</code>; or</li> + <li>has no <code>featuringTypes</code> and, if it has a <code>FeatureValue</code>, the <code>value</code> <code>Expression</code> is model-level evaluable.</li> +</ul> + - - + + OCL2.0 - ownedSpecialization->forAll(isImplied) and -ownedFeature->forAll(f | - (directionOf(f) = FeatureDirectionKind::_'in' or f = result) and - f.ownedFeature->isEmpty() and f.valuation = null or - f.owningFeatureMembership.oclIsKindOf(ResultExpressionMembership) and - f.oclAsType(Expression).modelLevelEvaluable(visited) - + referent.conformsTo('Anything::self') or +visited->excludes(referent) and +(referent.oclIsKindOf(Expression) and + referent.oclAsType(Expression).modelLevelEvaluable(visited->including(referent)) or +referent.owningType <> null and + (referent.owningType.isOclKindOf(MetaClass) or + referent.owningType.isOclKindOf(MetadataFeature)) or +referent.featuringType->isEmpty() and + (referent.valuation = null or + referent.valuation.modelLevelEvaluable(visited->including(referent)))) - - - - - + + + + + - - - <p>If this <code>Expression</code> <code>isModelLevelEvaluable</code>, then evaluate it using the <code>target</code> as the context <code>Element</code> for resolving <code>Feature</code> names and testing classification. The result is a collection of <code>Elements</code>, which, for a fully evaluable <code>Expression</code>, will be a <code>LiteralExpression</code> or a <code>Feature</code> that is not an <code>Expression</code>.</p> + + + <p>First, determine a <code>value</code> <code>Expression</code> for the <code>referent</code>:</p> + +<ul> + <li>If the <code>target</code> <code>Element</code> is a Type that has a <code>feature</code> that is the <code>referent</code> or (directly or indirectly) redefines it, then the <code>value</code> <code>Expression</code> of the <code>FeatureValue</code> for that <code>feature</code> (if any).</li> + <li>Else, if the <code>referent</code> has no <code>featuringTypes</code>, the <code>value</code> <code>Expression</code> of the <code>FeatureValue</code> for the <code>referent</code> (if any).</li> +</ul> + +<p>Then:</p> + +<ul> + <li>If such a value <code>Expression</code> exists, return the result of evaluating that <code>Expression</code> on the <code>target</code>.</li> + <li>Else, if the <code>referent</code> is not an <code>Expression</code>, return the <code>referent</code>.</li> + <li>Else return the empty sequence.</li> +</ul> + - - - OCL2.0 - isModelLevelEvaluable - - - - + + OCL2.0 - let resultExprs : Sequence(Expression) = - ownedFeatureMembership-> - selectByKind(ResultExpressionMembership). - ownedResultExpression in -if resultExpr->isEmpty() then Sequence{} -else resultExprs->first().evaluate(target) + if not target.oclIsKindOf(Type) then Sequence{} +else + let feature: Sequence(Feature) = + target.oclAsType(Type).feature->select(f | + f.ownedRedefinition.redefinedFeature-> + includes(referent)) in + if feature->notEmpty() then + feature.valuation.value.evaluate(target) + else if referent.featuringType->isEmpty() + then referent + else Sequence{} + endif endif endif - - - - + + + + - - - <p>Model-level evaluate this <code>Expression</code> with the given <code>target</code>. If the result is a <code>LiteralBoolean</code>, return its <code>value</code>. Otherwise return <code>false</code>.</p> + + + + <p>A <code>NullExpression</code> is an <code>Expression</code> that results in a null value.</p> + + + + <p>A <code>NullExpression</code> must directly or indirectly specialize the base <code>NullExpression</code> <code><em>Performances::nullEvaluations</em></code> from the Kernel Semantic Library.</p> - - + + OCL2.0 + specializesFromLibrary('Performances::nullEvaluations') + + + + + + <p>A <code>NullExpression</code> is always model-level evaluable.</p> + + + OCL2.0 - let results: Sequence(Element) = evaluate(target) in - result->size() = 1 and - results->first().oclIsKindOf(LiteralBoolean) and - results->first().oclAsType(LiteralBoolean).value + true - - + + + + + - - - - <p>A <code>Predicate</code> is a <code>Function</code> whose <code>result</code> <code>parameter</code> has type <code><em>Boolean</em></code> and multiplicity <code>1..1</code>.</p> - - - - - <p>A <code>Predicate</code> must directly or indirectly specialize the base <code>Predicate</code> <code><em>Performances::BooleanEvaluation</em></code> from the Kernel Semantic Library.</p> - - - OCL2.0 - specializesFromLibrary('Performances::BooleanEvaluation') - - - - - - - - <p>The Expressions that have a certain Feature its owned or inherited <code>result</code>.</p> + + + <p>The model-level value of a <code>NullExpression</code> is an empty sequence.</p> - - - + + + OCL2.0 + Sequence{} + + + + + + + + - - - - <p>The Expressions that are typed by a certain <code>function</code>.</p> + + + + <p>The <code>MetadataAccessExpressions</code> having a certain <code>Element</code> as their <code>referencedElement</code>.</p> - - - - - - - - + + - - - <p>An <code>Invariant</code> is a <code>BooleanExpression</code> that is asserted to have a specific <code><em>Boolean</em></code> result value. If <code>isNegated = false</code>, then the result is asserted to be true. If <code>isNegated = true</code>, then the result is asserted to be false.</p> - + + + <p>An <code>InstantiationExpression</code> is an <code>Expression</code> that instantiates its <code>instantiatedType</code>, binding some or all of the <code>features</code> of that <code>Type</code> to the <code>results</code> of its <code>arguments</code>.</p> + +<p><code>InstantiationExpression</code> is abstract, with concrete subclasses <code>InvocationExpression</code> and <code>ConstructorExpression</code>.</p> - - - <p>An <code>Invariant</code> must directly or indirectly specialize either of the following <code>BooleanExpressions</code> from the Kernel Semantic Library: <code><em>Performances::trueEvaluations</em></code>, if <code>isNegated = false</code>, or <code><em>Performances::falseEvaluations</em></code>, if <code>isNegated = true</code>.</p> + + + <p>An <code>InstantiationExpression</code> must own its <code>result</code> parameter.</p> - + OCL2.0 - if isNegated then - specializesFromLibrary('Performances::falseEvaluations') -else - specializesFromLibrary('Performances::trueEvaluations') -endif + result.owningType = self - - - - <p>Whether this <code>Invariant</code> is asserted to be false rather than true.</p> - - - - - - - - - - <p>The Functions that hasve a certain <code>expression</code> as a step.</p> + + + <p>The <code>instantiatedType</code> of an <code>InstantiationExpression</code> is given by the result of the <code>instantiatedType()</code> operation.</p> - - - - - - - <p>A <code>ResultExpressionMembership</code> is a <code>FeatureMembership</code> that indicates that the <code>ownedResultExpression</code> provides the result values for the <code>Function</code> or <code>Expression</code> that owns it. The owning <code>Function</code> or <code>Expression</code> must contain a <code>BindingConnector</code> between the <code>result</code> <code>parameter</code> of the <code>ownedResultExpression</code> and the <code>result</code> <code>parameter</code> of the owning <code>Function</code> or <code>Expression</code>.</p> - - - - - <p>The <code>owningType</code> of a <code>ResultExpressionMembership</code> must be a <code>Function</code> or <code>Expression</code>.</p> + + OCL2.0 + instantiatedType = instantiatedType() + + + + + <p>An <code>InstantiationExpression</code> must have an <code>InstantiatedType</code>.</p> - + OCL2.0 - owningType.oclIsKindOf(Function) or owningType.oclIsKindOf(Expression) + instantiatedType() <> null - - - - <p>The <code>Expression</code> that provides the result for the owner of the <code>ResultExpressionMembership</code>.</p> - + + + + <p>The <code>Expressions</code> whose <code>results</code> are bound to <code>features</code> of the <code>instantiatedType</code>. The <code>arguments</code> are ordered consistent with the order of the <code>features</code>, though they may not be one-to-one with all the <code>features</code>.</p> + +<p><strong>Note.</strong> The derivation of <code>argument</code> is given in the concrete subclasses of <code>InstantiationExpression</code>.</p> - - + + - - - - - <p>The Functions that have a certain Feature its owned or inherited <code>result</code>.</p> + + + <p>The <code>Type</code> that is being instantiated.</p> - - - + + + + + + <p>Return the <code>Type</code> to act as the <code>instantiatedType</code> for this <code>InstantiationExpression</code>. By default, this is the <code>memberElement</code> of the first <code>ownedMembership</code> that is not a <code>FeatureMembership</code>, which must be a <code>Type</code>.</p> + +<p><b>Note.</b> This operation is overridden in the subclass <code>OperatorExpression</code>.</p> + + + + OCL2.0 + let members : Sequence(Element) = ownedMembership-> + reject(oclIsKindOf(FeatureMembership)).memberElement in +if members->isEmpty() or not members->first().oclIsKindOf(Type) then null +else typeMembers->first().oclAsType(Type) +endif + + + + + + + - - - <p>A <code>Function</code> is a <code>Behavior</code> that has an <code>out</code> <code>parameter</code> that is identified as its <code>result</code>. A <code>Function</code> represents the performance of a calculation that produces the values of its <code>result</code> <code>parameter</code>. This calculation may be decomposed into <code>Expressions</code> that are <code>steps</code> of the <code>Function</code>.</p> - + + + <p>A <code>MetadataAccessExpression</code> is an <code>Expression</code> whose <code>result</code> is a sequence of instances of <code>Metaclasses</code> representing all the <code>MetadataFeature</code> annotations of the <code>referencedElement</code>. In addition, the sequence includes an instance of the reflective <code>Metaclass</code> corresponding to the MOF class of the <code>referencedElement</code>, with values for all the abstract syntax properties of the <code>referencedElement</code>.</p> - - - <p>A <code>Function</code> must have exactly one <code>featureMembership</code> (owned or inherited) that is a <code>ResultParameterMembership</code>.</p> + + + <p>A <code>MetadataAccessExpression</code> must directly or indirectly specialize the base <code>MetadataAccessExpression</code> <code><em>Performances::metadataAccessEvaluations</em></code> from the Kernel Semantic Library.</p> - - OCL2.0 - featureMembership-> - selectByKind(ReturnParameterMembership)-> - size() = 1 - - - - - <p>A <code>Function</code> must directly or indirectly specialize the base <code>Function</code> <code><em>Performances::Evaluation</em></code> from the Kernel Semantic Library.</p> - - + OCL2.0 - specializesFromLibrary('Performances::Evaluation') + specializesFromLibrary('Performances::metadataAccessEvaluations') - - - <p>If a <code>Function</code> has an <code>Expression</code> owned via a <code>ResultExpressionMembership</code>, then the owning <code>Function</code> must also own a <code>BindingConnector</code> between its <code>result</code> <code>parameter</code> and the <code>result</code> <code>parameter</code> of the result <code>Expression</code>.</p> + + + <p>A <code>MetadataAccessExpression</code> must have at least one <code>ownedMember</code> that is not a <code>FeatureMembership</code>.</p> - + OCL2.0 - ownedMembership.selectByKind(ResultExpressionMembership)-> - forAll(mem | ownedFeature.selectByKind(BindingConnector)-> - exists(binding | - binding.relatedFeature->includes(result) and - binding.relatedFeature->includes(mem.ownedResultExpression.result))) + ownedMembership->exists(not oclIsKindOf(FeatureMembership)) - - - <p>The <code>result</code> <code>parameter</code> of a <code>Function</code> is its <code>parameter</code> owned (possibly in a supertype) via a <code>ReturnParameterMembership</code> (if any).</p> + + + <p>The <code>referencedElement</code> of a <code>MetadataAccessExpression</code> is the <code>memberElement</code> of its first <code>ownedMembership</code> that is not a <code>FeatureMembership</code>.</p> - + OCL2.0 - result = - let resultParams : Sequence(Feature) = - featureMemberships-> - selectByKind(ReturnParameterMembership). - ownedMemberParameter in - if resultParams->notEmpty() then resultParams->first() - else null + referencedElement = + let elements : Sequence(Element) = ownedMembership-> + reject(oclIsKindOf(FeatureMembership)).memberElement in + if elements->isEmpty() then null + else elements->first() endif - - - <p>A <code>Function</code> must have at most one <code>ResultExpressionMembership</code>.</p> - - - OCL2.0 - membership->selectByKind(ResultExpressionMembership)->size() <= 1 - - - - - - <p>The <code>Expressions</code> that are <code>steps</code> in the calculation of the <code>result</code> of this <code>Function</code>.</p> - - - - <p>The set of expressions that represent computational steps or parts of a system of equations within the Function.</p> - + + + + <p>The <code>Element</code> whose metadata is being accessed.</p> - - + + - - - <p>The object or value that is the result of evaluating the Function.</p> + + + <p>A <code>MetadataAccessExpression</code> is always model-level evaluable.</p> - - <p>The <code>result</code> <code>parameter</code> of the <code>Function</code>, which is owned by the <code>Function</code> via a <code>ReturnParameterMembership</code>.</p> - + + + OCL2.0 + true + + + + + + + + + + + + + <p>Return the <code>ownedElements</code> of the <code>referencedElement</code> that are <code>MetadataFeatures</code> and have the <code>referencedElement</code> as an <code>annotatedElement</code>, plus a <code>MetadataFeature</code> whose <code>annotatedElement</code> is the <code>referencedElement</code>, whose <code>metaclass</code> is the reflective <code>Metaclass</code> corresponding to the MOF class of the <code>referencedElement</code> and whose <code>ownedFeatures</code> are bound to the values of the MOF properties of the <code>referencedElement</code>.</p> - - - - - - <p>Whether this <code>Function</code> can be used as the <code>function</code> of a model-level evaluable <code>InvocationExpression</code>. Certain <code>Functions</code> from the Kernel Functions Library are considered to have <code>isModelLevelEvaluable = true</code>. For all other <code>Functions</code> it is <code>false</code>.</p> - -<p><strong>Note:</strong> See the specification of the KerML concrete syntax notation for <code>Expressions</code> for an identification of which library <code>Functions</code> are model-level evaluable.</p> + + + OCL2.0 + referencedElement.ownedElement-> + select(oclIsKindOf(MetadataFeature) + and annotatedElement->includes(referencedElement))-> + including(metaclassFeature()) + + + + + + + + + + + <p>Return a <code>MetadataFeature</code> whose <code>annotatedElement</code> is the <code>referencedElement</code>, whose <code>metaclass</code> is the reflective <code>Metaclass</code> corresponding to the MOF class of the <code>referencedElement</code> and whose <code>ownedFeatures</code> are bound to the MOF properties of the <code>referencedElement</code>.</p> - - + + - - - <p>A <code>Structure</code> is a <code>Class</code> of objects in the modeled universe that are primarily structural in nature. While such an object is not itself behavioral, it may be involved in and acted on by <code>Behaviors</code>, and it may be the performer of some of them.</p> + + + <p>A <code>LiteralString</code> is a <code>LiteralExpression</code> that provides a <code><em>String</em></code> value as a result. Its <code>result</code> <code>parameter</code> must have the type <code><em>String</em></code>.</p> - - - <p>A <code>Structure</code> must directly or indirectly specialize the base <code>Structure</code> <code><em>Objects::Object</em></code> from the Kernel Semantic Library.</p> + + + <p>A <code>LiteralString</code> must directly or indirectly specialize <em><code>Performances::literalStringEvaluations</code></em> from the Kernel Semantic Library.</p> - + OCL2.0 - specializesFromLibrary('Objects::Object') + specializesFromLibrary('Performances::literalStringEvaluations') - - - <p>A <code>Structure</code> must not specialize a <code>Behavior</code>.</p> + + + + <p>The String value that is the result of evaluating this Expression.</p> - - OCL2.0 - ownedSpecialization.general->forAll(not oclIsKindOf(Behavior)) - - - - - - - - - + + <p>The <code><em>String</em></code> value that is the result of evaluating this <code>LiteralString</code>.</p> + + + + - - - - + + + + <p>A <code>FeatureReferenceExpression</code> that has a certain <code>referent</code> <code>Feature</code>.</p> + + + - - - - + + + + <p>A <code>InstantiationExpression</code> that has a certain <code>argument</code> <code>Expression</code>.</p> + + + - - - <p>A <code>MultiplicityRange</code> is a <code>Multiplicity</code> whose value is defined to be the (inclusive) range of natural numbers given by the result of a <code>lowerBound</code> <code>Expression</code> and the result of an <code>upperBound</code> <code>Expression</code>. The result of these <code>Expressions</code> shall be of type <code><em>Natural</em></code>. If the result of the <code>upperBound</code> <code>Expression</code> is the unbounded value <code>*</code>, then the specified range includes all natural numbers greater than or equal to the <code>lowerBound</code> value. If no <code>lowerBound</code> <code>Expression</code>, then the default is that the lower bound has the same value as the upper bound, except if the <code>upperBound</code> evaluates to <code>*</code>, in which case the default for the lower bound is 0.</p> + + + <p><code>LiteralBoolean</code> is a <code>LiteralExpression</code> that provides a <code><em>Boolean</em></code> value as a result. Its <code>result</code> <code>parameter</code> must have type <code><em>Boolean</em></code>.</p> - - - <p>The <code>bounds</code> of a <code>MultiplicityRange</code> must have the same <code>featuringTypes</code> as the <code>MultiplicityRange</code>.</p> + + + <p>A <code>LiteralBoolean</code> must directly or indirectly specialize <em><code>Performances::literalBooleanEvaluations</code></em> from the Kernel Semantic Library.</p> - + OCL2.0 - bound->forAll(b | b.featuringType = self.featuringType) + specializesFromLibrary('Performances::literalBooleanEvaluations') - - - <p>The <code>results</code> of the <code>bound</code> <code>Expression(s)</code> of a <code>MultiplicityRange</code> must be typed by <code><em>ScalarValues::Intger</em></code> from the Kernel Data Types Library. If a <code>bound</code> is model-level evaluable, then it must evaluate to a non-negative value.</p> + + + + <p>The <code><em>Boolean</em></code> value that is the result of evaluating this <code>LiteralBoolean</code>.</p> - + + <p>The Boolean value that is the result of evaluating this Expression.</p> + + + + + + + + <p>An <code>InvocationExpression</code> is an <code>InstantiationExpression</code> whose <code>instantiatedType</code> must be a <code>Behavior</code> or a <code>Feature</code> typed by a single <code>Behavior</code> (such as a <code>Step</code>). Each of the input <code>parameters</code> of the <code>instantiatedType</code> are bound to the <code>result</code> of an <code>argument</code> <code>Expression</code>. If the <code>instantiatedType</code> is a <code>Function</code> or a <code>Feature</code> typed by a <code>Function</code>, then the <code>result</code> of the <code>InvocationExpression</code> is the <code>result</code> of the invoked <code>Function</code>. Otherwise, the <code>result</code> is an instance of the <code>instantiatedType</code> (essentially like a behavioral <code>ConstructorExpression</code>).</p> + + + + + <p>If the <code>instantiatedType</code> of an <code>InvocationExpression</code> is neither a <code>Function</code> nor a <code>Feature</code> whose type is a <code>Function</code>, then the <code>InvocationExpression</code> must own a <code>BindingConnector</code> between itself and its <code>result</code> parameter.</p> + + OCL2.0 - bound->forAll(b | - b.result.specializesFromLibrary('ScalarValues::Integer') and - let value : UnlimitedNatural = valueOf(b) in - value <> null implies value >= 0 -) + not instantiatedType.oclIsKindOf(Function) and +not (instantiatedType.oclIsKindOf(Feature) and + instantiatedType.oclAsType(Feature).type->exists(oclIsKindOf(Function))) implies + ownedFeature.selectByKind(BindingConnector)->exists( + relatedFeature->includes(self) and + relatedFeature->includes(result)) - - - <p>If a <code>MultiplicityRange</code> has two <code>ownedMembers</code> that are <code>Expressions</code>, then the <code>lowerBound</code> is the first of these, otherwise it is <code>null</code>.</p> + + + <p>An <code>InvocationExpression</code> must own a <code>BindingConnector</code> between the <code>featureWithValue</code> and <code>value</code> <code>Expression</code> of any <code>FeatureValue</code> that is the effective default value for a <code>feature</code> of the <code>instantiatedType</code> of the <code>InvocationExpression</code>.</p> - + OCL2.0 - lowerBound = - let ownedExpressions : Sequence(Expression) = - ownedMember->selectByKind(Expression) in - if ownedExpressions->size() < 2 then null - else ownedExpressions->first() - endif + TBD - - - <p>If a <code>MultiplicityRange</code> has one <code>ownedMember</code> that is an <code>Expression</code>, then this is the <code>upperBound</code>. If it has more than one <code>ownedMember</code> that is an <code>Expression</code>, then the <code>upperBound</code> is the second of those. Otherwise, it is null.</p> + + + <p>The <code>arguments</code> of an <code>InvocationExpression</code> are the <code>value</code> <code>Expressions</code> of the <code>FeatureValues</code> of its <code>ownedFeatures</code>, in an order corresponding to the order of the <code>input</code> parameters of the <code>instantiatedType</code> that the <code>ownedFeatures</code> redefine.</p> - + OCL2.0 - upperBound = - let ownedExpressions : Sequence(Expression) = - ownedMember->selectByKind(Expression) in - if ownedExpressions->isEmpty() then null - else if ownedExpressions->size() = 1 then ownedExpressions->at(1) - else ownedExpressions->at(2) - endif endif + instantiatedType.input->collect(inp | + ownedFeatures->select(redefines(inp)).valuation-> + select(v | v <> null).value +) - - - <p>The <code>bounds</code> of a <code>MultiplicityRange</code> are the <code>lowerBound</code> (if any) followed by the <code>upperBound</code>.</p> + + + <p>Each <code>input</code> parameter of an <code>InvocationExpression</code> must redefine exactly one <code>input</code> parameter of the <code>instantiatedType</code> of the <code>InvocationExpression</code>.</p> - + OCL2.0 - bound = - if upperBound = null then Sequence{} - else if lowerBound = null then Sequence{upperBound} - else Sequence{lowerBound, upperBound} - endif endif + let parameters : OrderedSet(Feature) = instantiatedType.input in +input->forAll(inp | + inp.ownedRedefinition.redefinedFeature-> + intersection(parameters)->size() = 1) - - - <p>The <code>lowerBound</code> (if any) and <code>upperBound</code> <code>Expressions</code> must be the first <code>ownedMembers</code> of a <code>MultiplicityRange</code>.</p> + + + <p>Two different <code>ownedFeatures</code> of an <code>InvocationExpression</code> must not redefine the same <code>feature</code> of the <code>instantiatedType</code> of the <code>InvocationExpression</code>.</p> - + OCL2.0 - if lowerBound = null then - ownedMember->notEmpty() and - ownedMember->at(1) = upperBound -else - ownedMember->size() > 1 and - ownedMember->at(1) = lowerBound and - ownedMember->at(2) = upperBound -endif + let features : OrderedSet(Feature) = instantiatedType.feature in +input->forAll(inp1 | input->forAll(inp2 | + inp1 <> inp2 implies + inp1.ownedRedefinition.redefinedFeature-> + intersection(inp2.ownedRedefinition.redefinedFeature)-> + intersection(features)->isEmpty())) - - - - <p>The <code>Expression</code> whose result provides the lower bound of the <code>MultiplicityRange</code>. If no <code>lowerBound</code> <code>Expression</code> is given, then the lower bound shall have the same value as the upper bound, unless the upper bound is unbounded (<code>*</code>), in which case the lower bound shall be 0.</p> - + + + <p>If the <code>instantiatedType</code> of an <code>InvocationExpression</code> is neither a <code>Function</code> nor a <code>Feature</code> whose type is a <code>Function</code>, then the <code>result</code> of the <code>InvocationExpression</code> must specialize the <code>instantiatedType</code>.</p> - - - - - - <p>The <code>Expression</code> whose result is the upper bound of the <code>MultiplicityRange</code>.</p> + + OCL2.0 + not instantiatedType.oclIsKindOf(Function) and +not (instantiatedType.oclIsKindOf(Feature) and + instantiatedType.oclAsType(Feature).type->exists(oclIsKindOf(Function))) implies + result.specializes(instantiatedType) + + + + + <p>An <code>InvocationExpression</code> must specialize its <code>instantiatedType</code>.</p> - - - - - - <p>The owned <code>Expressions</code> of the <code>MultiplicityRange</code> whose results provide its bounds. These must be the first <code>ownedMembers</code> of the <code>MultiplicityRange</code>.</p> + + OCL2.0 + specializes(instantiatedType) + + + + + <p>The <code>instantiatedType</code> of an <code>InvocationExpression</code> must be either a <code>Behavior</code> or a <code>Feature</code> with a single <code>type</code>, which is a <code>Behavior</code>.</p> - - - - - - <p>Check whether this <code>MultiplicityRange</code> represents the range bounded by the given values <code>lower</code> and <code>upper</code>, presuming the <code>lowerBound</code> and <code>upperBound</code> <code>Expressions</code> are model-level evaluable.</p> + + OCL2.0 + instantiatedType.oclIsKindOf(Behavior) or +instantiatedType.oclIsKindOf(Feature) and + instantiatedType.type->exists(oclIsKindOf(Behavior)) and + instantiatedType.type->size(1) + + + + + <p>Other than its <code>result</code>, all the <code>ownedFeatures</code> of an <code>InvocationExpression</code> must have <code>direction = in</code>.</p> - - + + OCL2.0 + ownedFeature->forAll(f | + f <> result implies + f.direction = FeatureDirectionKind::_'in') + + + + + + <p>An <code>InvocationExpression</code> is model-level evaluable if all its <code>argument</code> <code>Expressions</code> are model-level evaluable and its <code>function</code> is model-level evaluable.</p> + + + + OCL2.0 - valueOf(upperBound) = upper and -let lowerValue: UnlimitedNatural = valueOf(lowerBound) in -(lowerValue = lower or - lowerValue = null and - (lower = upper or - lower = 0 and upper = *)) - + argument->forAll(modelLevelEvaluable(visited)) and + function.isModelLevelEvaluable - - - - - - - + + + + + - - - <p>Evaluate the given <code>bound</code> <code>Expression</code> (at model level) and return the result represented as a MOF <code>UnlimitedNatural</code> value.</p> + + + <p>Apply the <code>Function</code> that is the <code>type</code> of this <code>InvocationExpression</code> to the argument values resulting from evaluating each of the <code>argument</code> <code>Expressions</code> on the given <code>target</code>. If the application is not possible, then return an empty sequence.</p> + - - - OCL2.0 - if bound = null or not bound.isModelLevelEvaluable then - null -else - let boundEval: Sequence(Element) = bound.evaluate(owningType) in - if boundEval->size() <> 1 then null else - let valueEval: Element = boundEval->at(1) in - if valueEval.oclIsKindOf(LiteralInfinity) then * - else if valueEval.oclIsKindOf(LiteralInteger) then - let value : Integer = - valueEval.oclAsKindOf(LiteralInteger).value in - if value >= 0 then value else null endif - else null - endif endif - endif -endif - - - - - - - - - - + + + + - - - - <p>The FeatureValue that owns the <code>value</code> Expression.</p> + + + <p>A <code>LiteralRational</code> is a <code>LiteralExpression</code> that provides a <code><em>Rational</em></code> value as a result. Its <code>result</code> <code>parameter</code> must have the type <code><em>Rational</em></code>.</p> + + + + + <p>A <code>LiteralRational</code> must directly or indirectly specialize <em><code>Performances::literalRationalEvaluations</code></em> from the Kernel Semantic Library.</p> - - - - - - - - <p>The (at most one) <code>ownedMembership</code> of this Feature that is the FeatureValue that provides the value of the Feature.</p> + + OCL2.0 + specializesFromLibrary('Performances::literalRationalEvaluations') + + + + + + <p>The value whose rational approximation is the result of evaluating this <code>LiteralRational</code>.</p> + - - - + + <p>The Real value that is the result of evaluating this Expression.</p> + + + - - - <p>A <code>FeatureValue</code> is a <code>Membership</code> that identifies a particular member <code>Expression</code> that provides the value of the <code>Feature</code> that owns the <code>FeatureValue</code>. The value is specified as either a bound value or an initial value, and as either a concrete or default value. A <code>Feature</code> can have at most one <code>FeatureValue</code>.</p> - -<p>The result of the <code>value</code> <code>Expression</code> is bound to the <code>featureWithValue</code> using a <code>BindingConnector</code>. If <code>isInitial = false</code>, then the <code>featuringType</code> of the <code>BindingConnector</code> is the same as the <code>featuringType</code> of the <code>featureWithValue</code>. If <code>isInitial = true</code>, then the <code>featuringType</code> of the <code>BindingConnector</code> is restricted to its <code>startShot</code>. - -<p>If <code>isDefault = false</code>, then the above semantics of the <code>FeatureValue</code> are realized for the given <code>featureWithValue</code>. Otherwise, the semantics are realized for any individual of the <code>featuringType</code> of the <code>featureWithValue</code>, unless another value is explicitly given for the <code>featureWithValue</code> for that individual.</p> + + + <p>A <code>LiteralExpression</code> is an <code>Expression</code> that provides a basic <code><em>DataValue</em></code> as a result.</p> - - - <p>If <code>isDefault = false</code>, then the <code>featureWithValue</code> must have an <code>ownedMember</code> that is a <code>BindingConnector</code> whose <code>relatedElements</code> are the <code>featureWithValue</code> and a feature chain consisting of the <code>value</code> <code>Expression</code> and its <code>result</code>. If <code>isInitial = false</code>, then this <code>BindingConnector</code> must have <code>featuringTypes</code> that are the same as those of the <code>featureWithValue</code>. If <code>isInitial = true</code>, then the <code>BindingConnector</code> must have <code><em>that.startShot</em><code> as its <code>featuringType</code>.</p> + + + <p>A <code>LiteralExpression</code> is always model-level evaluable.</p> - + OCL2.0 - not isDefault implies - featureWithValue.ownedMember-> - selectByKind(BindingConnector)->exists(b | - b.relatedFeature->includes(featureWithValue) and - b.relatedFeature->exists(f | - f.chainingFeature = Sequence{value, value.result}) and - if not isInitial then - b.featuringType = featureWithValue.featuringType - else - b.featuringType->exists(t | - t.oclIsKindOf(Feature) and - t.oclAsType(Feature).chainingFeature = - Sequence{ - resolveGlobal('Base::things::that'). - memberElement, - resolveGlobal('Occurrences::Occurrence::startShot'). - memberElement - } - ) - endif) + isModelLevelEvaluable = true - - - <p>All <code>Features</code> directly or indirectly redefined by the <code>featureWithValue</code> of a <code>FeatureValue</code> must have only default <code>FeatureValues</code>.</p> + + + <p>A <code>LiteralExpression</code> must directly or indirectly specialize the base <code>LiteralExpression</code> <code><em>Performances::literalEvaluations</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - featureWithValue.redefinition.redefinedFeature-> - closure(redefinition.redefinedFeature).valuation-> - forAll(isDefault) + specializesFromLibrary('Performances::literalEvaluations') - - - <p>If a <code>FeatureValue</code> has <code>isInitial = true</code>, then its <code>featureWithValue</code> must have <code>isVariable = true</code>.</p> + + + + <p>A <code>LiteralExpression</code> is always model-level evaluable.</p> - + + + OCL2.0 + true + + + + + + + + + + + + + <p>The model-level value of a <code>LiteralExpression</code> is itself.</p> + + + + OCL2.0 + Sequence{self} + + + + + + + + + + + + <p>An <code>IndexExpression</code> is an <code>OperatorExpression</code> whose operator is <code>"#"</code>, which resolves to the <code>Function</code> <em><code>BasicFunctions::'#'</code></em> from the Kernel Functions Library.</p> + + + + <p>The <code>result</code> of an <code>IndexExpression</code> must specialize the <code>result</code> parameter of the first <code>argument</code> of the <code>IndexExpression</code>, unless that <code>result</code> already directly or indirectly specializes the <code>DataType</code> <em><code>Collections::Array</code></em> from the Kernel Data Type Library.</p> + + OCL2.0 - isInitial implies featureWithValue.isVariable + arguments->notEmpty() and +not arguments->first().result.specializesFromLibrary('Collections::Array') implies + result.specializes(arguments->first().result) - - - - <p>The Feature to be provided a value.</p> - - - <p>The <code>Feature</code> to be provided a value.</p> - + + + <p>The <code>operator</code> of an <code>IndexExpression</code> must be <code>"#"</code>.</p> - - + + OCL2.0 + operator = '#' + + + + + + - - - <p>The Expression that provides the value as a result.</p> - - - <p>The <code>Expression</code> that provides the value of the <code>featureWithValue</code> as its <code>result</code>.</p> + + + + + + + + + + <p>A <code>LiteralInteger</code> is a <code>LiteralExpression</code> that provides an <code><em>Integer</em></code> value as a result. Its <code>result</code> <code>parameter</code> must have the type <code><em>Integer</em></code>.</p> + + + + <p>A <code>LiteralInteger</code> must directly or indirectly specialize <em><code>Performances::literalIntegerEvaluations</code></em> from the Kernel Semantic Library.</p> - - - - - - <p>Whether this <code>FeatureValue</code> specifies a bound value or an initial value for the <code>featureWithValue</code>.</p> + + OCL2.0 + specializesFromLibrary('Performances::literalIntegerEvaluations') + + + + + + <p>The <code><em>Integer</em></code> value that is the result of evaluating this <code>LiteralInteger</code>.</p> - - - - - - <p>Whether this <code>FeatureValue</code> is a concrete specification of the bound or initial value of the <code>featureWithValue</code>, or just a default value that may be overridden.</p> + + <p>The Integer value that is the result of evaluating this Expression.</p> + - - + - - - <p>A <code>Class</code> is a <code>Classifier</code> of things (in the universe) that can be distinguished without regard to how they are related to other things (via <code>Features</code>). This means multiple things classified by the same <code>Class</code> can be distinguished, even when they are related other things in exactly the same way.</p> - + + + <p>A <code>ConstructorExpression</code> is an <code>InstantiationExpression</code> whose <code>result</code> specializes its <code>instantiatedType</code>, binding some or all of the <code>features</code> of the <code>instantiatedType</code> to the <code>results</code> of its <code>argument</code> <code>Expressions</code>.</p> - - - <p>A <code>Class</code> must directly or indirectly specialize the base <code>Class</code> <code><em>Occurrences::Occurrence</em></code> from the Kernel Semantic Library.</p> + + + <p>The <code>arguments</code> of a <code>ConstructorExpression</code> are the <code>value</code> <code>Expressions</code> of the <code>FeatureValues</code> of the <code>ownedFeatures</code> of its <code>result</code> parameter, in an order corresponding to the order of the <code>features</code> of the <code>instantiatedType</code> that the <code>result</code> <code>ownedFeatures</code> redefine.</p> - + OCL2.0 - specializesFromLibrary('Occurrences::Occurrence') + instantiatedType.feature->collect(f | + result.ownedFeatures->select(redefines(f)).valuation-> + select(v | v <> null).value +) - - - <p>A <code>Class</code> must not specialize a <code>DataType</code> and it can only specialize an <code>Association</code> if it is also itself a kind of <code>Association</code> (such as an <code>AssociationStructure</code> or <code>Interaction</code>).</p> + + + <p>Two different <code>ownedFeatures</code> of the <code>result</code> of a <code>ConstructorExpression</code> must not redefine the same <code>feature</code> of the <code>instantiatedType</code> of the <code>ConstructorExpression</code>.</p> - + OCL2.0 - ownedSpecialization.general-> - forAll(not oclIsKindOf(DataType)) and -not oclIsKindOf(Association) implies - ownedSpecialization.general-> - forAll(not oclIsKindOf(Association)) + let features : OrderedSet(Feature) = instantiatedType.feature-> + select(visibility = VisibilityKind::public) in +result.ownedFeature->forAll(f1 | result.ownedFeature->forAll(f2 | + f1 <> f2 implies + f1.ownedRedefinition.redefinedFeature-> + intersection(f2.ownedRedefinition.redefinedFeature)-> + intersection(features)->isEmpty())) - - - - - <p>A <code>DataType</code> is a <code>Classifier</code> of things (in the universe) that can only be distinguished by how they are related to other things (via Features). This means multiple things classified by the same <code>DataType</code></p> - -<ul> - <li>Cannot be distinguished when they are related to other things in exactly the same way, even when they are intended to be about different things.</li> - <li>Can be distinguished when they are related to other things in different ways, even when they are intended to be about the same thing.</li> -</ul> - - - - - <p>A <code>DataType</code> must not specialize a <code>Class</code> or an <code>Association</code>.</p> + + + <p>Each <code>ownedFeature</code> of the result of a <code>ConstructionExpression</code> must redefine exactly one public <code>feature</code> of the <code>instantiatedType</code> of the <code>ConstructorExpression</code>.</p> - + OCL2.0 - ownedSpecialization.general-> - forAll(not oclIsKindOf(Class) and - not oclIsKindOf(Association)) + let features : OrderedSet(Feature) = instantiatedType.feature-> + select(owningMembership.visibility = VisibilityKind::public) in +result.ownedFeature->forAll(f | + f.ownedRedefinition.redefinedFeature-> + intersection(features)->size() = 1) - - - <p>A <code>DataType</code> must directly or indirectly specialize the base <code>DataType</code> <code><em>Base::DataValue</em></code> from the Kernel Semantic Library.</p> + + + <p>The <code>result</code> of a <code>ConstructorExpression</code> must own a <code>BindingConnector</code> between the <code>featureWithValue</code> and <code>value</code> <code>Expression</code> of any <code>FeatureValue</code> that is the effective default value for a <code>feature</code> of the <code>instantiatedType</code> of the <code>InvocationExpression</code>.</p> - + OCL2.0 - specializesFromLibrary('Base::DataValue') + TBD - - - - - <p>A <code>BindingConnector</code> is a binary <code>Connector</code> that requires its <code>relatedFeatures</code> to identify the same things (have the same values).</p> - - - - - <p>A <code>BindingConnector</code> must be binary.</p> + + + <p>A <code>ConstructorExpression</code> must directly or indirectly specialize the <code>Expression</code> <em><code>Performances::constructorEvaluations</code></em> from the Kernel Semantic Library.</p> - + OCL2.0 - relatedFeature->size() = 2 + specializes('Performances::constructorEvaluations') - - - <p>A <code>BindingConnector</code> must directly or indirectly specialize the base <code>BindingConnector</code> <code><em>Links::selfLinks</em></code> from the Kernel Semantic Library.</p> + + + <p>The <code>result</code> of a <code>ConstructorExpression</code> must specialize the <code>instantiatedType</code> of the <code>ConstructorExpression</code>.</p> - + OCL2.0 - specializesFromLibrary('Links::selfLinks') + result.specializes(instantiatedType) - - - - - - - + + + <p>A <code>ConstructorExpression</code> must not have any <code>ownedFeatures</code> other than its <code>result</code>.</p> + + + OCL2.0 + ownedFeatures->excluding(result)->isEmpty() + + + + + + <p>A <code>ConstructorExpression</code> is model-level evaluable if all its argument <code>Expressions</code> are model-level evaluable.</p> + + + + + OCL2.0 + argument->forAll(modelLevelEvaluable(visited)) + + + + + + + + + + - - - - + + + <p>An <code>Interaction</code> is a <code>Behavior</code> that is also an <code>Association</code>, providing a context for multiple objects that have behaviors that impact one another.</p> + + + + + + + + + - - - <p>A <code>Connector</code> is a usage of <code>Associations</code>, with links restricted according to instances of the <code>Type</code> in which they are used (domain of the <code>Connector</code>). The <code>associations</code> of the <code>Connector</code> restrict what kinds of things might be linked. The <code>Connector</code> further restricts these links to be between values of <code>Features</code> on instances of its domain.</p> - + + + <p>A <code>FlowEnd</code> is a <code>Feature</code> that is one of the <code>connectorEnds</code> giving the <code><em>source</em></code> or <code><em>target</em></code> of a <code>Flow</code>. For <code>Flows</code> typed by <code><em>FlowTransfer</em></code> or its specializations, <code>FlowEnds</code> must have exactly one <code>ownedFeature</code>, which redefines <code><em>Transfer::source::sourceOutput</em></code> or <code><em>Transfer::target::targetInput</em></code> and redefines the corresponding feature of the <code>relatedElement</code> for its end.</p> - - - <p>The <code>relatedFeatures</code> of a <code>Connector</code> are the referenced <code>Features</code> of its <code>connectorEnds</code>.</p> + + + <p>A <code>FlowEnd</code> must be an end <code>Feature</code>.</p> - + OCL2.0 - relatedFeature = connectorEnd.ownedReferenceSubsetting-> - select(s | s <> null).subsettedFeature + isEnd - - - <p>Each <code>relatedFeature</code> of a <code>Connector</code> must have each <code>featuringType</code> of the <code>Connector</code> as a direct or indirect <code>featuringType</code> (where a <code>Feature</code> with no <code>featuringType</code> is treated as if the <code>Classifier</code> <code><em>Base::Anything</em></code> was its <code>featuringType</code>).</p> + + + <p>A <code>FlowEnd</code> must have exactly one <code>ownedFeature</code>.</p> - + OCL2.0 - relatedFeature->forAll(f | - if featuringType->isEmpty() then f.isFeaturedWithin(null) - else featuringType->forAll(t | f.isFeaturedWithin(t)) - endif) + ownedFeature->size() = 1 - - - <p>The <code>sourceFeature</code> of a <code>Connector</code> is its first <code>relatedFeature</code> (if any).</p> + + + <p>The <code>owningType</code> of a <code>FlowEnd</code> must be a <code>Flow</code>.</p> - + OCL2.0 - sourceFeature = - if relatedFeature->isEmpty() then null - else relatedFeature->first() - endif + owningType <> null and owningType.oclIsKindOf(Flow) - - - <p>The <code>targetFeatures</code> of a <code>Connector</code> are the <code>relatedFeatures</code> other than the <code>sourceFeature</code>.</p> + + + + + + + + + + + + + + + + + <p>A <code>PayloadFeature</code> is the <code>ownedFeature</code> of a <code>Flow</code> that identifies the things carried by the kinds of transfers that are instances of the <code>Flow</code>.</p> + + + + <p>A <code>PayloadFeature</code> must redefine the <code>Feature</code> <code><em>Transfers::Transfer::payload</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - targetFeature = - if relatedFeature->size() < 2 then OrderedSet{} - else - relatedFeature-> - subSequence(2, relatedFeature->size())-> - asOrderedSet() - endif + redefinesFromLibrary('Transfers::Transfer::payload') - - - <p>If a <code>Connector</code> is concrete (not abstract), then it must have at least two <code>relatedFeatures</code>.</p> + + + + + <p>An <code>Flow</code> is a <code>Step</code> that represents the transfer of values from one <code>Feature</code> to another. <code>Flows</code> can take non-zero time to complete.</p> + + + + + <p>A <code>Flow</code> must directly or indirectly specialize the <code>Step</code> <code><em>Transfers::transfers</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - not isAbstract implies relatedFeature->size() >= 2 + specializesFromLibrary('Transfers::transfers') - - - <p>A <code>Connector</code> must directly or indirectly specialize the base <code>Connector</code> <code><em>Links::links</em></code> from the Kernel Semantic Library.</p> + + + <p>The <code>payloadTypes</code> of a <code>Flow</code> are the <code>types</code> of the <code>payloadFeature</code> of the <code>Flow</code> (if any).</p> - + OCL2.0 - specializesFromLibrary('Links::links') + payloadType = + if payloadFeature = null then Sequence{} + else payloadFeature.type + endif - - - <p>A <code>Connector</code> for an <code>AssociationStructure</code> must directly or indirectly specialize the base <code>Connector</code> <code><em>Objects::linkObjects</em></code> from the Kernel Semantic Library.</p> + + + <p>The <code>sourceOutputFeature</code> of a <code>Flow</code> is the first <code>ownedFeature</code> of the first <code>connectorEnd</code> of the <code>Flow</code>.</p> - + OCL2.0 - association->exists(oclIsKindOf(AssociationStructure)) implies - specializesFromLibrary('Objects::linkObjects') + sourceOutputFeature = + if connectorEnd->isEmpty() or + connectorEnd.ownedFeature->isEmpty() + then null + else connectorEnd.ownedFeature->first() + endif - - - <p>A binary <code>Connector</code> for an <code>AssociationStructure</code> must directly or indirectly specialize the base <code>Connector</code> <code><em>Objects::binaryLinkObjects</em></code> from the Kernel Semantic Library.</p> + + + <p>The <code>targetInputFeature</code> of a <code>Flow</code> is the first <code>ownedFeature</code> of the second <code>connectorEnd</code> of the <code>Flow</code>.</p> - + OCL2.0 - connectorEnds->size() = 2 and -association->exists(oclIsKindOf(AssociationStructure)) implies - specializesFromLibrary('Objects::binaryLinkObjects') + targetInputFeature = + if connectorEnd->size() < 2 or + connectorEnd->at(2).ownedFeature->isEmpty() + then null + else connectorEnd->at(2).ownedFeature->first() + endif - - - <p>A binary <code>Connector</code> must directly or indirectly specialize the base <code>Connector</code> <code><em>Links::binaryLinks</em></code> from the Kernel Semantic Library.</p> + + + <p>The <code>flowEnds</code> of a <code>Flow</code> are all its <code>connectorEnds</code> that are <code>FlowEnds</code>.</p> - + OCL2.0 - connectorEnd->size() = 2 implies - specializesFromLibrary('Links::binaryLinks') + flowEnd = connectorEnd->selectByKind(FlowEnd) - - - <p>If a <code>Connector</code> has more than two <code>connectorEnds</code>, then it must <em>not</em> specialize, directly or indirectly, the <code>Association</code> <em><code>BinaryLink</code></em> from the Kernel Semantic Library.</p> + + + <p>The <code>payloadFeature</code> of a <code>Flow</code> is the single one of its <code>ownedFeatures</code> that is a <code>PayloadFeature</code>.</p> - + OCL2.0 - connectorEnds->size() > 2 implies - not specializesFromLibrary('Links::BinaryLink') + payloadFeature = + let payloadFeatures : Sequence(PayloadFeature) = + ownedFeature->selectByKind(PayloadFeature) in + if payloadFeatures->isEmpty() then null + else payloadFeatures->first() + endif - - - <p>The <code>defaultFeaturingType</code> of a <code>Connector</code> is the innermost common direct or indirect <code>featuringType</code> of the <code>relatedFeatures</code> of the <code>Connector</code>, so that each <code>relatedElement</code> is featured within the <code>defaultFeaturingType</code>, if such exists.</p> + + + <p>A <code>Flow</code> must have at most one <code>ownedFeature</code> that is an <code>PayloadFeature</code>.</p> - + OCL2.0 - let commonFeaturingTypes : OrderedSet(Type) = - relatedFeature->closure(featuringType)->select(t | - relatedFeature->forAll(f | f.isFeaturedWithin(t)) - ) in -let nearestCommonFeaturingTypes : OrderedSet(Type) = - commonFeaturingTypes->reject(t1 | - commonFeaturingTypes->exists(t2 | - t2 <> t1 and t2->closure(featuringType)->contains(t1) - )) in -if nearestCommonFeaturingTypes->isEmpty() then null -else nearestCommonFeaturingTypes->first() -endif + ownedFeature->selectByKind(PayloadFeature)->size() <= 1 - - - - - <p>The <code>Features</code> that are related by this <code>Connector</code> considered as a <code>Relationship</code> and that restrict the links it identifies, given by the referenced <code>Features</code> of the <code>connectorEnds</code> of the <code>Connector</code>.</p> - - - - - - - - <p>The <code>Associations</code> that type the <code>Connector</code>.</p> - + + + <p>A <code>Flow</code> with <code>ownedEndFeatures</code> must specialize the <code>Step</code> <code><em>Transfers::flowTransfers</em></code> from the Kernel Semantic Library.</p> - - + + OCL2.0 + ownedEndFeatures->notEmpty() implies + specializesFromLibrary('Transfers::flowTransfers') + + + + + + + <p>The type of values transferred, which is the <code>type</code> of the <code>payloadFeature</code> of the <code>Flow</code>.</p> + + + + + - - - <p>The <code>endFeatures</code> of a <code>Connector</code>, which redefine the <code>endFeatures</code> of the <code>associations</code> of the <code>Connector</code>. The <code>connectorEnds</code> determine via <code>ReferenceSubsetting</code> <code>Relationships</code> which <code>Features</code> are related by the <code>Connector</code>.</p> + + + <p>The <code>Feature</code> that receives the values carried by the <code>Flow</code>. It must be a <code>feature</code> of the <code>target</code> of the <code>Flow</code>.</p> - - + + - - - <p>The source <code>relatedFeature</code> for this <code>Connector</code>. It is the first <code>relatedFeature</code>.</p> + + + <p>The <code>Feature</code> that provides the items carried by the <code>Flow</code>. It must be a <code>feature</code> of the <code>source</code> of the <code>Flow</code>.</p> + - - + + - - - <p>The target <code>relatedFeatures</code> for this <code>Connector</code>. This includes all the <code>relatedFeatures</code> other than the <code>sourceFeature</code>.</p> + + + <p>The <code>connectorEnds</code> of this <code>Flow</code> that are <code>FlowEnds</code>.</p> + - - + + - - - <p>The innermost <code>Type</code> that is a common direct or indirect <code>featuringType</code> of the <code>relatedFeatures</code>, such that, if it exists and was the <code>featuringType</code> of this <code>Connector</code>, the <code>Connector</code> would satisfy the <code>checkConnectorTypeFeaturing</code> constraint.</p> + + + <p>The <code>ownedFeature</code> of the <code>Flow</code> that is a <code>PayloadFeature</code> (if any).</p> + - - + + + + + + <p>The <code>Interactions</code> that type this <code>Flow</code>. <code>Interactions</code> are both <code>Associations</code> and <code>Behaviors</code>, which can type <code>Connectors</code> and <code>Steps</code>, respectively.</p> + + + - - - - - + + + + <p>The ItemFlow that has a certain <code>sourceOutputFeature</code>.</p> + + + - - - - <p>A <code>Connector</code> with a certain <code>defaultFeaturingType</code>.</p> + + + + <p>The ItemFlow that has a certain <code>targetInputFeature</code>.</p> - - + + - - - - + + + <p>The ItemFlow that has a certain <code>itemType</code>.</p> + + + + - - - - + + + <p>A <code>SuccessionFlow</code> is a <code>Flow</code> that also provides temporal ordering. It classifies <code><em>Transfers</em></code> that cannot start until the source <code><em>Occurrence</em></code> has completed and that must complete before the target <code><em>Occurrence</em></code> can start.</p> + + + + <p>A <code>SuccessionFlow</code> must directly or indirectly specialize the <code>Step</code> <code><em>Transfers::flowTransfersBefore</em></code> from the Kernel Semantic Library.</p> + + + OCL2.0 + specializesFromLibrary('Transfers::flowTransfersBefore') + + + + + + + + + - - - <p>A <code>Succession</code> is a binary <code>Connector</code> that requires its <code>relatedFeatures</code> to happen separately in time.</p> + + + + + + + + + <p>A <code>Behavior </code>coordinates occurrences of other <code>Behaviors</code>, as well as changes in objects. <code>Behaviors</code> can be decomposed into <code>Steps</code> and be characterized by <code>parameters</code>.</p> - - - <p>A <code>Succession</code> must directly or indirectly specialize the Feature <code><em>Occurrences::happensBeforeLinks</em></code> from the Kernel Semantic Library.</p> + + + <p>A <code>Behavior</code> must not specialize a <code>Structure</code>.</p> - + OCL2.0 - specializesFromLibrary('Occurrences::happensBeforeLinks') + ownedSpecialization.general->forAll(not oclIsKindOf(Structure)) - + + + <p>A <code>Behavior</code> must directly or indirectly specialize the base <code>Behavior</code> <code><em>Performances::Performance</em></code> from the Kernel Semantic Library.</p> + + + English + specializesFromLibrary('Performances::Performance') + + + + + <p>The <code>steps</code> of a <code>Behavior</code> are its <code>features</code> that are <code>Steps</code>.</p> + + + OCL2.0 + step = feature->selectByKind(Step) + + + + + + <p>The <code>Steps</code> that make up this <code>Behavior</code>.</p> + + + + + + + + <p>The parameters of this <code>Behavior</code>, which are defined as its <code>directedFeatures</code>, whose values are passed into and/or out of a performance of the <code>Behavior</code>.</p> + + + + + - - - - + + + + - - - - + + + + @@ -2238,108 +2264,47 @@ endif - - - <p>A <code>Behavior </code>coordinates occurrences of other <code>Behaviors</code>, as well as changes in objects. <code>Behaviors</code> can be decomposed into <code>Steps</code> and be characterized by <code>parameters</code>.</p> - + + + + + + + + + + + + + + + + <p>A <code>ParameterMembership</code> is a <code>FeatureMembership</code> that identifies its <code>memberFeature</code> as a parameter, which is always owned, and must have a <code>direction</code>. A <code>ParameterMembership</code> must be owned by a <code>Behavior</code>, a <code>Step</code>, or the <code>result</code> parameter of a <code>ConstructorExpression</code>.</p> - - - <p>A <code>Behavior</code> must not specialize a <code>Structure</code>.</p> + + + <p>The <code>ownedMemberParameter</code> of a <code>ParameterMembership</code> must have a <code>direction</code> equal to the result of the <code>parameterDirection()</code> operation.</p> - + OCL2.0 - ownedSpecialization.general->forAll(not oclIsKindOf(Structure)) - - - - - <p>A <code>Behavior</code> must directly or indirectly specialize the base <code>Behavior</code> <code><em>Performances::Performance</em></code> from the Kernel Semantic Library.</p> - - - English - specializesFromLibrary('Performances::Performance') + ownedMemberParameter.direction = parameterDirection() - - - <p>The <code>steps</code> of a <code>Behavior</code> are its <code>features</code> that are <code>Steps</code>.</p> + + + <p>A <code>ParameterMembership</code> must be owned by a <code>Behavior</code>,<code>Step</code>, or the <code>result</code> parameter of a <code>ConstructorExpression</code>.</p> - + OCL2.0 - step = feature->selectByKind(Step) + owningType.oclIsKindOf(Behavior) or owningType.oclIsKindOf(Step) or +owningType.owningMembership.oclIsKindOf(ReturnParameterMembership) and + owningType.owningNamespace.oclIsKindOf(ConstructorExpression) - - - - <p>The <code>Steps</code> that make up this <code>Behavior</code>.</p> - - - - - - - - <p>The parameters of this <code>Behavior</code>, which are defined as its <code>directedFeatures</code>, whose values are passed into and/or out of a performance of the <code>Behavior</code>.</p> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <p>A <code>ParameterMembership</code> is a <code>FeatureMembership</code> that identifies its <code>memberFeature</code> as a parameter, which is always owned, and must have a <code>direction</code>. A <code>ParameterMembership</code> must be owned by a <code>Behavior</code>, a <code>Step</code>, or the <code>result</code> parameter of a <code>ConstructorExpression</code>.</p> - - - - <p>The <code>ownedMemberParameter</code> of a <code>ParameterMembership</code> must have a <code>direction</code> equal to the result of the <code>parameterDirection()</code> operation.</p> - - - OCL2.0 - ownedMemberParameter.direction = parameterDirection() - - - - - <p>A <code>ParameterMembership</code> must be owned by a <code>Behavior</code>,<code>Step</code>, or the <code>result</code> parameter of a <code>ConstructorExpression</code>.</p> - - - OCL2.0 - owningType.oclIsKindOf(Behavior) or owningType.oclIsKindOf(Step) or -owningType.owningMembership.oclIsKindOf(ReturnParameterMembership) and - owningType.owningNamespace.oclIsKindOf(ConstructorExpression) - - - - - - <p>The <code>Feature</code> that is identified as a <code>parameter</code> by this <code>ParameterMembership</code>.</p> + + + + <p>The <code>Feature</code> that is identified as a <code>parameter</code> by this <code>ParameterMembership</code>.</p> @@ -2361,334 +2326,264 @@ owningType.owningMembership.oclIsKindOf(ReturnParameterMembership) and - - - - - + + + + - - - - + + + + - - - <p>An <code>AssociationStructure</code> is an <code>Association</code> that is also a <code>Structure</code>, classifying link objects that are both links and objects. As objects, link objects can be created and destroyed, and their non-end <code>Features</code> can change over time. However, the values of the end <code>Features</code> of a link object are fixed and cannot change over its lifetime.</p> + + + <p>A <code>BindingConnector</code> is a binary <code>Connector</code> that requires its <code>relatedFeatures</code> to identify the same things (have the same values).</p> + - - - <p>An <code>AssociationStructure</code> must directly or indirectly specialize the base <code>AssociationStructure</code> <code><em>Objects::LinkObject</em></code> from the Kernel Semantic Library.</p> + + + <p>A <code>BindingConnector</code> must be binary.</p> - + OCL2.0 - specializesFromLibrary('Objects::LinkObject') + relatedFeature->size() = 2 - - - <p>A binary <code>AssociationStructure</code> must directly or indirectly specialize the base <code>AssociationStructure</code> <code><em>Objects::BinaryLinkObject</em></code> from the Kernel Semantic Library.</p> + + + <p>A <code>BindingConnector</code> must directly or indirectly specialize the base <code>BindingConnector</code> <code><em>Links::selfLinks</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - endFeature->size() = 2 implies - specializesFromLibrary('Objects::BinaryLinkObject') + specializesFromLibrary('Links::selfLinks') - - + - - - - + + + + - - - <p>An <code>Association</code> is a <code>Relationship</code> and a <code>Classifier</code> to enable classification of links between things (in the universe). The co-domains (<code>types</code>) of the <code>associationEnd</code> <code>Features</code> are the <code>relatedTypes</code>, as co-domain and participants (linked things) of an <code>Association</code> identify each other.</p> + + + <p>A <code>Connector</code> is a usage of <code>Associations</code>, with links restricted according to instances of the <code>Type</code> in which they are used (domain of the <code>Connector</code>). The <code>associations</code> of the <code>Connector</code> restrict what kinds of things might be linked. The <code>Connector</code> further restricts these links to be between values of <code>Features</code> on instances of its domain.</p> - - - <p>The <code>relatedTypes</code> of an <code>Association</code> are the <code>types</code> of its <code>associationEnds</code>.</p> + + + <p>The <code>relatedFeatures</code> of a <code>Connector</code> are the referenced <code>Features</code> of its <code>connectorEnds</code>.</p> - + OCL2.0 - relatedType = associationEnd.type + relatedFeature = connectorEnd.ownedReferenceSubsetting-> + select(s | s <> null).subsettedFeature - - - <p>An <code>Association</code> must directly or indirectly specialize the base <code>Association</code> <code><em>Links::Link</em></code> from the Kernel Semantic Library.</p> + + + <p>Each <code>relatedFeature</code> of a <code>Connector</code> must have each <code>featuringType</code> of the <code>Connector</code> as a direct or indirect <code>featuringType</code> (where a <code>Feature</code> with no <code>featuringType</code> is treated as if the <code>Classifier</code> <code><em>Base::Anything</em></code> was its <code>featuringType</code>).</p> - + OCL2.0 - specializesFromLibrary('Links::Link') + relatedFeature->forAll(f | + if featuringType->isEmpty() then f.isFeaturedWithin(null) + else featuringType->forAll(t | f.isFeaturedWithin(t)) + endif) - - - <p>If an <code>Association</code> is also a kind of <code>Structure</code>, then it must be an <code>AssociationStructure</code>.</p> + + + <p>The <code>sourceFeature</code> of a <code>Connector</code> is its first <code>relatedFeature</code> (if any).</p> - - English - oclIsKindOf(Structure) = oclIsKindOf(AssociationStructure) + + OCL2.0 + sourceFeature = + if relatedFeature->isEmpty() then null + else relatedFeature->first() + endif - - - <p>A binary <code>Association</code> must directly or indirectly specialize the base <code>Association</code> <code><em>Links::binaryLink</em></code> from the Kernel Semantic Library.</p> + + + <p>The <code>targetFeatures</code> of a <code>Connector</code> are the <code>relatedFeatures</code> other than the <code>sourceFeature</code>.</p> - + OCL2.0 - associationEnd->size() = 2 implies - specializesFromLibrary('Links::BinaryLink') + targetFeature = + if relatedFeature->size() < 2 then OrderedSet{} + else + relatedFeature-> + subSequence(2, relatedFeature->size())-> + asOrderedSet() + endif - - - <p>If an <code>Association</code> is concrete (not abstract), then it must have at least two <code>relatedTypes</code>.</p> + + + <p>If a <code>Connector</code> is concrete (not abstract), then it must have at least two <code>relatedFeatures</code>.</p> - + OCL2.0 - not isAbstract implies relatedType->size() >= 2 + not isAbstract implies relatedFeature->size() >= 2 - - - <p>If an <code>Association</code> has more than two <code>associationEnds</code>, then it must <em>not</em> specialize, directly or indirectly, the <code>Association</code> <em><code>BinaryLink</code></em> from the Kernel Semantic Library.</p> + + + <p>A <code>Connector</code> must directly or indirectly specialize the base <code>Connector</code> <code><em>Links::links</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - associationEnds->size() > 2 implies - not specializesFromLibrary('Links::BinaryLink') + specializesFromLibrary('Links::links') - - - <p>The <code>sourceType</code> of an <code>Association</code> is its first <code>relatedType</code> (if any).</p> + + + <p>A <code>Connector</code> for an <code>AssociationStructure</code> must directly or indirectly specialize the base <code>Connector</code> <code><em>Objects::linkObjects</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - sourceType = - if relatedType->isEmpty() then null - else relatedType->first() endif + association->exists(oclIsKindOf(AssociationStructure)) implies + specializesFromLibrary('Objects::linkObjects') - - + + + <p>A binary <code>Connector</code> for an <code>AssociationStructure</code> must directly or indirectly specialize the base <code>Connector</code> <code><em>Objects::binaryLinkObjects</em></code> from the Kernel Semantic Library.</p> + + OCL2.0 - targetType = - if relatedType->size() < 2 then OrderedSet{} - else - relatedType-> - subSequence(2, relatedType->size())-> - asOrderedSet() - endif + connectorEnds->size() = 2 and +association->exists(oclIsKindOf(AssociationStructure)) implies + specializesFromLibrary('Objects::binaryLinkObjects') - - - <p>The <code>ownedEndFeatures</code> of an <code>Association</code> must have exactly one <code>type</code></p>. + + + <p>A binary <code>Connector</code> must directly or indirectly specialize the base <code>Connector</code> <code><em>Links::binaryLinks</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - ownedEndFeature->forAll(type->size() = 1) + connectorEnd->size() = 2 implies + specializesFromLibrary('Links::binaryLinks') - - - - - <p>The <code>types</code> of the <code>associationEnds</code> of the <code>Association</code>, which are the <code>relatedElements</code> of the <code>Association</code> considered as a <code>Relationship</code>.</p> - + + + <p>If a <code>Connector</code> has more than two <code>connectorEnds</code>, then it must <em>not</em> specialize, directly or indirectly, the <code>Association</code> <em><code>BinaryLink</code></em> from the Kernel Semantic Library.</p> - - - - - - <p>The source <code>relatedType</code> for this <code>Association</code>. It is the first <code>relatedType</code> of the <code>Association</code>.</p> - + + OCL2.0 + connectorEnds->size() > 2 implies + not specializesFromLibrary('Links::BinaryLink') + + + + + <p>The <code>defaultFeaturingType</code> of a <code>Connector</code> is the innermost common direct or indirect <code>featuringType</code> of the <code>relatedFeatures</code> of the <code>Connector</code>, so that each <code>relatedElement</code> is featured within the <code>defaultFeaturingType</code>, if such exists.</p> - - - - - - <p>The target <code>relatedTypes</code> for this <code>Association</code>. This includes all the <code>relatedTypes</code> other than the <code>sourceType</code>.</p> + + OCL2.0 + let commonFeaturingTypes : OrderedSet(Type) = + relatedFeature->closure(featuringType)->select(t | + relatedFeature->forAll(f | f.isFeaturedWithin(t)) + ) in +let nearestCommonFeaturingTypes : OrderedSet(Type) = + commonFeaturingTypes->reject(t1 | + commonFeaturingTypes->exists(t2 | + t2 <> t1 and t2->closure(featuringType)->contains(t1) + )) in +if nearestCommonFeaturingTypes->isEmpty() then null +else nearestCommonFeaturingTypes->first() +endif + + + + + + + <p>The <code>Features</code> that are related by this <code>Connector</code> considered as a <code>Relationship</code> and that restrict the links it identifies, given by the referenced <code>Features</code> of the <code>connectorEnds</code> of the <code>Connector</code>.</p> - - + + - - - <p>The <code>features</code> of the <code>Association</code> that identify the things that can be related by it. A concrete <code>Association</code> must have at least two <code>associationEnds</code>. When it has exactly two, the <code>Association</code> is called a <em>binary</em> <code>Association</code>.</p> + + + <p>The <code>Associations</code> that type the <code>Connector</code>.</p> - - + + - - - - - - - - - - - - - - - - <p>A <code>Package</code> is a <code>Namespace</code> used to group <code>Elements</code>, without any instance-level semantics. It may have one or more model-level evaluable <code>filterCondition</code> <code>Expressions</code> used to filter its <code>importedMemberships</code>. Any imported <code>member</code> must meet all of the <code>filterConditions</code>.</p> - - - - <p>The <code>filterConditions</code> of a <code>Package</code> are the <code>conditions</code> of its owned <code>ElementFilterMemberships</code>.</p> + + + <p>The <code>endFeatures</code> of a <code>Connector</code>, which redefine the <code>endFeatures</code> of the <code>associations</code> of the <code>Connector</code>. The <code>connectorEnds</code> determine via <code>ReferenceSubsetting</code> <code>Relationships</code> which <code>Features</code> are related by the <code>Connector</code>.</p> - - OCL2.0 - filterCondition = ownedMembership-> - selectByKind(ElementFilterMembership).condition - - - - - - <p>The model-level evaluable <code><em>Boolean</em></code>-valued <code>Expression</code> used to filter the <code>members</code> of this <code>Package</code>, which are owned by the <code>Package</code> are via <code>ElementFilterMemberships</code>.</p> - + + + + + + <p>The source <code>relatedFeature</code> for this <code>Connector</code>. It is the first <code>relatedFeature</code>.</p> - - + + - - - <p>Exclude <code>Elements</code> that do not meet all the <code>filterConditions</code>.</p> - + + + <p>The target <code>relatedFeatures</code> for this <code>Connector</code>. This includes all the <code>relatedFeatures</code> other than the <code>sourceFeature</code>.</p> - - - OCL2.0 - self.oclAsType(Namespace).importedMemberships(excluded)-> - select(m | self.includeAsMember(m.memberElement)) - - - - - - - - - - - - - - <p>Determine whether the given <code>element</code> meets all the <code>filterConditions</code>.</p> + + + + + + <p>The innermost <code>Type</code> that is a common direct or indirect <code>featuringType</code> of the <code>relatedFeatures</code>, such that, if it exists and was the <code>featuringType</code> of this <code>Connector</code>, the <code>Connector</code> would satisfy the <code>checkConnectorTypeFeaturing</code> constraint.</p> - - - OCL2.0 - let metadataFeatures: Sequence(AnnotatingElement) = - element.ownedAnnotation.annotatingElement-> - selectByKind(MetadataFeature) in - self.filterCondition->forAll(cond | - metadataFeatures->exists(elem | - cond.checkCondition(elem))) - - - - - - - + + + - - - - <p>The Package that has a certain Expression as a <code>filterCondition</code>.</p> - - - + + + + - - - <p>A <code>LibraryPackage</code> is a <code>Package</code> that is the container for a model library. A <code>LibraryPackage</code> is itself a library <code>Element</code> as are all <code>Elements</code> that are directly or indirectly contained in it.</p> - - - - - - <p>Whether this <code>LibraryPackage</code> contains a standard library model. This should only be set to true for <code>LibraryPackages</code> in the standard Kernel Model Libraries or in normative model libraries for a language built on KerML.</p> - - - - - - - <p>The <code>libraryNamespace</code> for a <code>LibraryPackage</code> is itself.</p> + + + + <p>A <code>Connector</code> with a certain <code>defaultFeaturingType</code>.</p> - - - OCL2.0 - self - - - - - - - + + + - - - <p><code>ElementFilterMembership</code> is a <code>Membership</code> between a <code>Namespace</code> and a model-level evaluable <code><em>Boolean</em></code>-valued <code>Expression</code>, asserting that imported <code>members</code> of the <code>Namespace</code> should be filtered using the <code>condition</code> <code>Expression</code>. A general <code>Namespace</code> does not define any specific filtering behavior, but such behavior may be defined for various specialized kinds of <code>Namespaces</code>.</p> + + + <p>A <code>Succession</code> is a binary <code>Connector</code> that requires its <code>relatedFeatures</code> to happen separately in time.</p> - - - <p>The <code>condition</code> <code>Expression</code> must be model-level evaluable.</p> - - - OCL2.0 - condition.isModelLevelEvaluable - - - - - <p>The <code>result</code> <code>parameter</code> of the <code>condition</code> <code>Expression</code> must directly or indirectly specialize <code><em>ScalarValues::Boolean</em></code>.</p> + + + <p>A <code>Succession</code> must directly or indirectly specialize the Feature <code><em>Occurrences::happensBeforeLinks</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - condition.result.specializesFromLibrary('ScalarValues::Boolean') + specializesFromLibrary('Occurrences::happensBeforeLinks') - - - - <p>The model-level evaluable <code>Boolean</code>-valued <code>Expression</code> used to filter the imported <code>members</code> of the <code>membershipOwningNamespace</code> of this <code>ElementFilterMembership</code>.</p> - - - - - + - - - - <p>The ElementFilterMembership that owns the <code>condition</code>.</p> - - - + + + + @@ -2911,1730 +2806,1937 @@ else - - - - <p>The ItemFlow that has a certain <code>sourceOutputFeature</code>.</p> - - - - - - - - <p>An <code>Flow</code> is a <code>Step</code> that represents the transfer of values from one <code>Feature</code> to another. <code>Flows</code> can take non-zero time to complete.</p> + + + <p>A <code>Class</code> is a <code>Classifier</code> of things (in the universe) that can be distinguished without regard to how they are related to other things (via <code>Features</code>). This means multiple things classified by the same <code>Class</code> can be distinguished, even when they are related other things in exactly the same way.</p> - - - <p>A <code>Flow</code> must directly or indirectly specialize the <code>Step</code> <code><em>Transfers::transfers</em></code> from the Kernel Semantic Library.</p> + + + <p>A <code>Class</code> must directly or indirectly specialize the base <code>Class</code> <code><em>Occurrences::Occurrence</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - specializesFromLibrary('Transfers::transfers') + specializesFromLibrary('Occurrences::Occurrence') - - - <p>The <code>payloadTypes</code> of a <code>Flow</code> are the <code>types</code> of the <code>payloadFeature</code> of the <code>Flow</code> (if any).</p> + + + <p>A <code>Class</code> must not specialize a <code>DataType</code> and it can only specialize an <code>Association</code> if it is also itself a kind of <code>Association</code> (such as an <code>AssociationStructure</code> or <code>Interaction</code>).</p> - + OCL2.0 - payloadType = - if payloadFeature = null then Sequence{} - else payloadFeature.type - endif + ownedSpecialization.general-> + forAll(not oclIsKindOf(DataType)) and +not oclIsKindOf(Association) implies + ownedSpecialization.general-> + forAll(not oclIsKindOf(Association)) - - - <p>The <code>sourceOutputFeature</code> of a <code>Flow</code> is the first <code>ownedFeature</code> of the first <code>connectorEnd</code> of the <code>Flow</code>.</p> + + + + + <p>A <code>DataType</code> is a <code>Classifier</code> of things (in the universe) that can only be distinguished by how they are related to other things (via Features). This means multiple things classified by the same <code>DataType</code></p> + +<ul> + <li>Cannot be distinguished when they are related to other things in exactly the same way, even when they are intended to be about different things.</li> + <li>Can be distinguished when they are related to other things in different ways, even when they are intended to be about the same thing.</li> +</ul> + + + + + <p>A <code>DataType</code> must not specialize a <code>Class</code> or an <code>Association</code>.</p> - + OCL2.0 - sourceOutputFeature = - if connectorEnd->isEmpty() or - connectorEnd.ownedFeature->isEmpty() - then null - else connectorEnd.ownedFeature->first() - endif + ownedSpecialization.general-> + forAll(not oclIsKindOf(Class) and + not oclIsKindOf(Association)) - - - <p>The <code>targetInputFeature</code> of a <code>Flow</code> is the first <code>ownedFeature</code> of the second <code>connectorEnd</code> of the <code>Flow</code>.</p> + + + <p>A <code>DataType</code> must directly or indirectly specialize the base <code>DataType</code> <code><em>Base::DataValue</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - targetInputFeature = - if connectorEnd->size() < 2 or - connectorEnd->at(2).ownedFeature->isEmpty() - then null - else connectorEnd->at(2).ownedFeature->first() - endif + specializesFromLibrary('Base::DataValue') - - - <p>The <code>flowEnds</code> of a <code>Flow</code> are all its <code>connectorEnds</code> that are <code>FlowEnds</code>.</p> + + + + + + + + + + + <p>A <code>MultiplicityRange</code> is a <code>Multiplicity</code> whose value is defined to be the (inclusive) range of natural numbers given by the result of a <code>lowerBound</code> <code>Expression</code> and the result of an <code>upperBound</code> <code>Expression</code>. The result of these <code>Expressions</code> shall be of type <code><em>Natural</em></code>. If the result of the <code>upperBound</code> <code>Expression</code> is the unbounded value <code>*</code>, then the specified range includes all natural numbers greater than or equal to the <code>lowerBound</code> value. If no <code>lowerBound</code> <code>Expression</code>, then the default is that the lower bound has the same value as the upper bound, except if the <code>upperBound</code> evaluates to <code>*</code>, in which case the default for the lower bound is 0.</p> + + + + + <p>The <code>bounds</code> of a <code>MultiplicityRange</code> must have the same <code>featuringTypes</code> as the <code>MultiplicityRange</code>.</p> - + OCL2.0 - flowEnd = connectorEnd->selectByKind(FlowEnd) + bound->forAll(b | b.featuringType = self.featuringType) - - - <p>The <code>payloadFeature</code> of a <code>Flow</code> is the single one of its <code>ownedFeatures</code> that is a <code>PayloadFeature</code>.</p> + + + <p>The <code>results</code> of the <code>bound</code> <code>Expression(s)</code> of a <code>MultiplicityRange</code> must be typed by <code><em>ScalarValues::Intger</em></code> from the Kernel Data Types Library. If a <code>bound</code> is model-level evaluable, then it must evaluate to a non-negative value.</p> - + OCL2.0 - payloadFeature = - let payloadFeatures : Sequence(PayloadFeature) = - ownedFeature->selectByKind(PayloadFeature) in - if payloadFeatures->isEmpty() then null - else payloadFeatures->first() - endif + bound->forAll(b | + b.result.specializesFromLibrary('ScalarValues::Integer') and + let value : UnlimitedNatural = valueOf(b) in + value <> null implies value >= 0 +) - - - <p>A <code>Flow</code> must have at most one <code>ownedFeature</code> that is an <code>PayloadFeature</code>.</p> + + + <p>If a <code>MultiplicityRange</code> has two <code>ownedMembers</code> that are <code>Expressions</code>, then the <code>lowerBound</code> is the first of these, otherwise it is <code>null</code>.</p> - + OCL2.0 - ownedFeature->selectByKind(PayloadFeature)->size() <= 1 + lowerBound = + let ownedExpressions : Sequence(Expression) = + ownedMember->selectByKind(Expression) in + if ownedExpressions->size() < 2 then null + else ownedExpressions->first() + endif - - - <p>A <code>Flow</code> with <code>ownedEndFeatures</code> must specialize the <code>Step</code> <code><em>Transfers::flowTransfers</em></code> from the Kernel Semantic Library.</p> + + + <p>If a <code>MultiplicityRange</code> has one <code>ownedMember</code> that is an <code>Expression</code>, then this is the <code>upperBound</code>. If it has more than one <code>ownedMember</code> that is an <code>Expression</code>, then the <code>upperBound</code> is the second of those. Otherwise, it is null.</p> - + OCL2.0 - ownedEndFeatures->notEmpty() implies - specializesFromLibrary('Transfers::flowTransfers') + upperBound = + let ownedExpressions : Sequence(Expression) = + ownedMember->selectByKind(Expression) in + if ownedExpressions->isEmpty() then null + else if ownedExpressions->size() = 1 then ownedExpressions->at(1) + else ownedExpressions->at(2) + endif endif - - - - - <p>The type of values transferred, which is the <code>type</code> of the <code>payloadFeature</code> of the <code>Flow</code>.</p> - - - - - - - - - <p>The <code>Feature</code> that receives the values carried by the <code>Flow</code>. It must be a <code>feature</code> of the <code>target</code> of the <code>Flow</code>.</p> + + + <p>The <code>bounds</code> of a <code>MultiplicityRange</code> are the <code>lowerBound</code> (if any) followed by the <code>upperBound</code>.</p> - - - - - - <p>The <code>Feature</code> that provides the items carried by the <code>Flow</code>. It must be a <code>feature</code> of the <code>source</code> of the <code>Flow</code>.</p> - + + OCL2.0 + bound = + if upperBound = null then Sequence{} + else if lowerBound = null then Sequence{upperBound} + else Sequence{lowerBound, upperBound} + endif endif + + + + + <p>The <code>lowerBound</code> (if any) and <code>upperBound</code> <code>Expressions</code> must be the first <code>ownedMembers</code> of a <code>MultiplicityRange</code>.</p> - - - - - - <p>The <code>connectorEnds</code> of this <code>Flow</code> that are <code>FlowEnds</code>.</p> + + OCL2.0 + if lowerBound = null then + ownedMember->notEmpty() and + ownedMember->at(1) = upperBound +else + ownedMember->size() > 1 and + ownedMember->at(1) = lowerBound and + ownedMember->at(2) = upperBound +endif + + + + + + <p>The <code>Expression</code> whose result provides the lower bound of the <code>MultiplicityRange</code>. If no <code>lowerBound</code> <code>Expression</code> is given, then the lower bound shall have the same value as the upper bound, unless the upper bound is unbounded (<code>*</code>), in which case the lower bound shall be 0.</p> - - + + - - - <p>The <code>ownedFeature</code> of the <code>Flow</code> that is a <code>PayloadFeature</code> (if any).</p> - + + + <p>The <code>Expression</code> whose result is the upper bound of the <code>MultiplicityRange</code>.</p> - - + + - - - <p>The <code>Interactions</code> that type this <code>Flow</code>. <code>Interactions</code> are both <code>Associations</code> and <code>Behaviors</code>, which can type <code>Connectors</code> and <code>Steps</code>, respectively.</p> + + + <p>The owned <code>Expressions</code> of the <code>MultiplicityRange</code> whose results provide its bounds. These must be the first <code>ownedMembers</code> of the <code>MultiplicityRange</code>.</p> - - + + - - - - <p>A <code>FlowEnd</code> is a <code>Feature</code> that is one of the <code>connectorEnds</code> giving the <code><em>source</em></code> or <code><em>target</em></code> of a <code>Flow</code>. For <code>Flows</code> typed by <code><em>FlowTransfer</em></code> or its specializations, <code>FlowEnds</code> must have exactly one <code>ownedFeature</code>, which redefines <code><em>Transfer::source::sourceOutput</em></code> or <code><em>Transfer::target::targetInput</em></code> and redefines the corresponding feature of the <code>relatedElement</code> for its end.</p> - - - - <p>A <code>FlowEnd</code> must be an end <code>Feature</code>.</p> - - - OCL2.0 - isEnd - - - - - <p>A <code>FlowEnd</code> must have exactly one <code>ownedFeature</code>.</p> - - - OCL2.0 - ownedFeature->size() = 1 - - - - - <p>The <code>owningType</code> of a <code>FlowEnd</code> must be a <code>Flow</code>.</p> + + + <p>Check whether this <code>MultiplicityRange</code> represents the range bounded by the given values <code>lower</code> and <code>upper</code>, presuming the <code>lowerBound</code> and <code>upperBound</code> <code>Expressions</code> are model-level evaluable.</p> - - OCL2.0 - owningType <> null and owningType.oclIsKindOf(Flow) - - - - - - - - - + + + OCL2.0 + valueOf(upperBound) = upper and +let lowerValue: UnlimitedNatural = valueOf(lowerBound) in +(lowerValue = lower or + lowerValue = null and + (lower = upper or + lower = 0 and upper = *)) + + + + + + + + + + + + + + + + <p>Evaluate the given <code>bound</code> <code>Expression</code> (at model level) and return the result represented as a MOF <code>UnlimitedNatural</code> value.</p> + + + + OCL2.0 + if bound = null or not bound.isModelLevelEvaluable then + null +else + let boundEval: Sequence(Element) = bound.evaluate(owningType) in + if boundEval->size() <> 1 then null else + let valueEval: Element = boundEval->at(1) in + if valueEval.oclIsKindOf(LiteralInfinity) then * + else if valueEval.oclIsKindOf(LiteralInteger) then + let value : Integer = + valueEval.oclAsKindOf(LiteralInteger).value in + if value >= 0 then value else null endif + else null + endif endif + endif +endif + + + + + + + + + + + + - - - - + + + + - - - - + + + + - - - - - - + + + + <p>The (at most one) <code>ownedMembership</code> of this Feature that is the FeatureValue that provides the value of the Feature.</p> + + + - - - <p>A <code>PayloadFeature</code> is the <code>ownedFeature</code> of a <code>Flow</code> that identifies the things carried by the kinds of transfers that are instances of the <code>Flow</code>.</p> + + + <p>A <code>FeatureValue</code> is a <code>Membership</code> that identifies a particular member <code>Expression</code> that provides the value of the <code>Feature</code> that owns the <code>FeatureValue</code>. The value is specified as either a bound value or an initial value, and as either a concrete or default value. A <code>Feature</code> can have at most one <code>FeatureValue</code>.</p> + +<p>The result of the <code>value</code> <code>Expression</code> is bound to the <code>featureWithValue</code> using a <code>BindingConnector</code>. If <code>isInitial = false</code>, then the <code>featuringType</code> of the <code>BindingConnector</code> is the same as the <code>featuringType</code> of the <code>featureWithValue</code>. If <code>isInitial = true</code>, then the <code>featuringType</code> of the <code>BindingConnector</code> is restricted to its <code>startShot</code>. + +<p>If <code>isDefault = false</code>, then the above semantics of the <code>FeatureValue</code> are realized for the given <code>featureWithValue</code>. Otherwise, the semantics are realized for any individual of the <code>featuringType</code> of the <code>featureWithValue</code>, unless another value is explicitly given for the <code>featureWithValue</code> for that individual.</p> + - - - <p>A <code>PayloadFeature</code> must redefine the <code>Feature</code> <code><em>Transfers::Transfer::payload</em></code> from the Kernel Semantic Library.</p> + + + <p>If <code>isDefault = false</code>, then the <code>featureWithValue</code> must have an <code>ownedMember</code> that is a <code>BindingConnector</code> whose <code>relatedElements</code> are the <code>featureWithValue</code> and a feature chain consisting of the <code>value</code> <code>Expression</code> and its <code>result</code>. If <code>isInitial = false</code>, then this <code>BindingConnector</code> must have <code>featuringTypes</code> that are the same as those of the <code>featureWithValue</code>. If <code>isInitial = true</code>, then the <code>BindingConnector</code> must have <code><em>that.startShot</em><code> as its <code>featuringType</code>.</p> - + OCL2.0 - redefinesFromLibrary('Transfers::Transfer::payload') + not isDefault implies + featureWithValue.ownedMember-> + selectByKind(BindingConnector)->exists(b | + b.relatedFeature->includes(featureWithValue) and + b.relatedFeature->exists(f | + f.chainingFeature = Sequence{value, value.result}) and + if not isInitial then + b.featuringType = featureWithValue.featuringType + else + b.featuringType->exists(t | + t.oclIsKindOf(Feature) and + t.oclAsType(Feature).chainingFeature = + Sequence{ + resolveGlobal('Base::things::that'). + memberElement, + resolveGlobal('Occurrences::Occurrence::startShot'). + memberElement + } + ) + endif) - - - - - - <p>The ItemFlow that has a certain <code>targetInputFeature</code>.</p> + + + <p>All <code>Features</code> directly or indirectly redefined by the <code>featureWithValue</code> of a <code>FeatureValue</code> must have only default <code>FeatureValues</code>.</p> - - - - - - - <p>The ItemFlow that has a certain <code>itemType</code>.</p> - - - - - - - - - <p>An <code>Interaction</code> is a <code>Behavior</code> that is also an <code>Association</code>, providing a context for multiple objects that have behaviors that impact one another.</p> - - - - - - - - <p>A <code>SuccessionFlow</code> is a <code>Flow</code> that also provides temporal ordering. It classifies <code><em>Transfers</em></code> that cannot start until the source <code><em>Occurrence</em></code> has completed and that must complete before the target <code><em>Occurrence</em></code> can start.</p> - - - - <p>A <code>SuccessionFlow</code> must directly or indirectly specialize the <code>Step</code> <code><em>Transfers::flowTransfersBefore</em></code> from the Kernel Semantic Library.</p> + + OCL2.0 + featureWithValue.redefinition.redefinedFeature-> + closure(redefinition.redefinedFeature).valuation-> + forAll(isDefault) + + + + + <p>If a <code>FeatureValue</code> has <code>isInitial = true</code>, then its <code>featureWithValue</code> must have <code>isVariable = true</code>.</p> - + OCL2.0 - specializesFromLibrary('Transfers::flowTransfersBefore') + isInitial implies featureWithValue.isVariable - - - - - - - <p>The Types that include this one among their <code>differencingTypes</code>.</p> + + + + <p>The Feature to be provided a value.</p> - - - - - - - <p><code>FeatureDirectionKind</code> enumerates the possible kinds of <code>direction</code> that a <code>Feature</code> may be given as a member of a <code>Type</code>.</p> - - - - - <p>Values of the <code>Feature</code> on each instance of its domain are determined externally to that instance and used internally.</p> + + <p>The <code>Feature</code> to be provided a value.</p> - - - - <p>Values of the <code>Feature</code> on each instance are determined either as <em>in</em> or <em>out</em> directions, or both.</p> - + + + + + + <p>The Expression that provides the value as a result.</p> - - - - <p>Values of the <code>Feature</code> on each instance of its domain are determined internally to that instance and used externally.</p> + + <p>The <code>Expression</code> that provides the value of the <code>featureWithValue</code> as its <code>result</code>.</p> - + + + + + + <p>Whether this <code>FeatureValue</code> specifies a bound value or an initial value for the <code>featureWithValue</code>.</p> + + + + + + + <p>Whether this <code>FeatureValue</code> is a concrete specification of the bound or initial value of the <code>featureWithValue</code>, or just a default value that may be overridden.</p> + + + + - - - - <p>The Unionings that identify all these Types as their <code>unioningType</code>.</p> + + + + <p>The FeatureValue that owns the <code>value</code> Expression.</p> - - + + - - - <p>A <code>Multiplicity</code> is a <code>Feature</code> whose co-domain is a set of natural numbers giving the allowed cardinalities of each <code>typeWithMultiplicity</code>. The <em>cardinality</em> of a <code>Type</code> is defined as follows, depending on whether the <code>Type</code> is a <code>Classifier</code> or <code>Feature</code>. + + + + + <p>The Subclassifications with a certain <code>subclassifier</code>.</p> + + + + + + + + <p>A <code>Classifier</code> is a <code>Type</code> that classifies:</p> + <ul> -<li><code>Classifier</code> – The number of basic instances of the <code>Classifier</code>, that is, those instances representing things, which are not instances of any subtypes of the <code>Classifier</code> that are <code>Features</code>. -<li><code>Features</code> – The number of instances with the same featuring instances. In the case of a <code>Feature</code> with a <code>Classifier</code> as its <code>featuringType</code>, this is the number of values of <code>Feature</code> for each basic instance of the <code>Classifier</code>. Note that, for non-unique <code>Features</code>, all duplicate values are included in this count.</li> + <li>Things (in the universe) regardless of how <code>Features</code> relate them. (These are interpreted semantically as sequences of exactly one thing.)</li> + <li>How the above things are related by <code>Features.</code> (These are interpreted semantically as sequences of multiple things, such that the last thing in the sequence is also classified by the <code>Classifier</code>. Note that this means that a <code>Classifier</code> modeled as specializing a <code>Feature</code> cannot classify anything.)</li> </ul> -<p><code>Multiplicity</code> co-domains (in models) can be specified by <code>Expression</code> that might vary in their results. If the <code>typeWithMultiplicity</code> is a <code>Classifier</code>, the domain of the <code>Multiplicity</code> shall be <em><code>Base::Anything</code></em>. If the <code>typeWithMultiplicity</code> is a <code>Feature</code>, the <code>Multiplicity</code> shall have the same domain as the <code>typeWithMultiplicity</code>.</p> - - - <p>If the <code>owningType</code> of a <code>Multiplicity</code> is a <code>Feature</code>, then the <code>Multiplicity</code> must have the same <code>featuringTypes</code> as that <code>Feature</code>. Otherwise, it must have no <code>featuringTypes</code> (meaning that it is implicitly featured by the base <code>Classifier</code> <em><code>Anything</code></em>).</p> + + + <p>The <code>ownedSubclassifications</code> of a <code>Classifier</code> are its <code>ownedSpecializations</code> that are <code>Subclassifications</code>.</p> - + OCL2.0 - if owningType <> null and owningType.oclIsKindOf(Feature) then - featuringType = - owningType.oclAsType(Feature).featuringType -else - featuringType->isEmpty() -endif + ownedSubclassification = + ownedSpecialization->selectByKind(Subclassification) - - - <p>A <code>Multiplicity</code> must directly or indirectly specialize the <code>Feature</code> <code><em>Base::naturals</em></code> from the Kernel Semantic Library.</p> + + + <p>If a <code>Classifier</code> has a <code>multiplicity</code>, then the <code>multiplicity</code> must have no <code>featuringTypes</code> (meaning that its domain is implicitly <em>Base::Anything</em>).</p> - + OCL2.0 - specializesFromLibrary('Base::naturals') + multiplicity <> null implies multiplicity.featuringType->isEmpty() - - - - - - - <p>A Type that has an <code>inheritedMembership</code> with the <code>inheritedFeature</code> as its <code>memberFeature</code>.</p> - - - - - - - - - - <p>The Type that inherits the <code>inheritedMembership</code>.</p> - - - - - - - - - <p>A Type that has an EndFeatureMembership in which the <code>endFeature</code> is a <code>memberFeature</code>.</p> + + + + <p>The <code>ownedSpecializations</code> of this <code>Classifier</code> that are <code>Subclassifications</code>, for which this <code>Classifier</code> is the <code>subclassifier</code>.</p> + - - - + + + - - - <p><code>Specialization</code> is a <code>Relationship</code> between two <code>Types</code> that requires all instances of the <code>specific</code> type to also be instances of the <code>general</code> Type (i.e., the set of instances of the <code>specific</code> Type is a <em>subset</em> of those of the <code>general</code> Type, which might be the same set).</p> + + + <p><code>Subclassification</code> is <code>Specialization</code> in which both the <code>specific</code> and <code>general</code> <code>Types</code> are <code>Classifier</code>. This means all instances of the specific <code>Classifier</code> are also instances of the general <code>Classifier</code>.</p> - - - <p>The <code>specific</code> <code>Type</code> of a <code>Specialization</code> cannot be a conjugated <code>Type</code>.</p> - - - OCL2.0 - not specific.isConjugated - - - - - - <p>The <code>Type</code> that is the <code>specific</code> <code>Type</code> of this <code>Specialization</code> and owns it as its <code>owningRelatedElement</code>.</p> + + + + <p>The more <code>general</code> Classifier in this <code>Subclassification</code>.</p> - - + + - - - <p>A <code>Type</code> with a superset of all instances of the <code>specific</code> <code>Type</code>, which might be the same set.</p> + + + <p>The more specific <code>Classifier</code> in this <code>Subclassification</code>.</p> - - + + - - - <p>A <code>Type</code> with a subset of all instances of the <code>general</code> <code>Type</code>, which might be the same set.</p> + + + <p>The <code>Classifier</code> that owns this <code>Subclassification</code> relationship, which must also be its <code>subclassifier</code>.</p> - - + + - - - - <p>The Specializations with a certain <code>general<code> Type.</p> + + + + <p>The Subclassifications with a certain <code>superclassifier</code>.</p> - - + + - - - <p>A <code>FeatureMembership</code> is an <code>OwningMembership</code> between an <code>ownedMemberFeature</code> and an <code>owningType</code>. If the <code>ownedMemberFeature</code> has <code>isVariable = false</code>, then the <code>FeatureMembership</code> implies that the <code>owningType</code> is also a <code>featuringType</code> of the <code>ownedMemberFeature</code>. If the <code>ownedMemberFeature</code> has <code>isVariable = true</code>, then the <code>FeatureMembership</code> implies that the <code>ownedMemberFeature</code> is featured by the <em><code>snapshots</code></em> of the <code>owningType</code>, which must specialize the Kernel Semantic Library base class <em><code>Occurrence</code></em>.</p> - - - - - - <p>The <code>Type</code> that owns this <code>FeatureMembership</code>.</p> - - - - - - - - <p>The <code>Feature</code> that this <code>FeatureMembership</code> relates to its <code>owningType</code>, making it an <code>ownedFeature</code> of the <code>owningType</code>.</p> - - - - - - - - - <p>A <code>Type</code> is a <code>Namespace</code> that is the most general kind of <code>Element</code> supporting the semantics of classification. A <code>Type</code> may be a <code>Classifier</code> or a <code>Feature</code>, defining conditions on what is classified by the <code>Type</code> (see also the description of <code>isSufficient</code>).</p> + + + <p>A <code>Feature</code> is a <code>Type</code> that classifies relations between multiple things (in the universe). The domain of the relation is the intersection of the <code>featuringTypes</code> of the <code>Feature</code>. (The domain of a <code>Feature</code> with no <code>featuringTyps</code> is implicitly the most general <code>Type</code> <em><code>Base::Anything</code></em> from the Kernel Semantic Library.) The co-domain of the relation is the intersection of the <code>types</code> of the <code>Feature</code>. + +<p>In the simplest cases, the <code>featuringTypes</code> and <code>types</code> are <code>Classifiers</code> and the <code>Feature</code> relates two things, one from the domain and one from the range. Examples include cars paired with wheels, people paired with other people, and cars paired with numbers representing the car length.</p> + +<p>Since <code>Features</code> are <code>Types</code>, their <code>featuringTypes</code> and <code>types</code> can be <code>Features</code>. In this case, the <code>Feature</code> effectively classifies relations between relations, which can be interpreted as the sequence of things related by the domain <code>Feature</code> concatenated with the sequence of things related by the co-domain <code>Feature</code>.</p> + +<p>The <em>values</em> of a <code>Feature</code> for a given instance of its domain are all the instances of its co-domain that are related to that domain instance by the <code>Feature</code>. The values of a <code>Feature</code> with <code>chainingFeatures</code> are the same as values of the last <code>Feature</code> in the chain, which can be found by starting with values of the first <code>Feature</code>, then using those values as domain instances to obtain valus of the second <code>Feature</code>, and so on, to values of the last <code>Feature</code>.</p> - - - <p>The <code>ownedSpecializations</code> of a <code>Type</code> are the <code>ownedRelationships</code> that are <code>Specializations</code> whose <code>special</code> <code>Type</code> is the owning <code>Type</code>.</p> + + + <p>The <code>ownedRedefinitions</code> of a <code>Feature</code> are its <code>ownedSubsettings</code> that are <code>Redefinitions</code>.</p> - + OCL2.0 - ownedSpecialization = ownedRelationship->selectByKind(Specialization)-> - select(s | s.special = self) - + ownedRedefinition = ownedSubsetting->selectByKind(Redefinition) - - - <p>If a <code>Type</code> has an owned <code>Multiplicity</code>, then that is its <code>multiplicity</code>. Otherwise, if the <code>Type</code> has an <code>ownedSpecialization</code>, then its <code>multiplicity</code> is the <code>multiplicity</code> of the <code>general</code> <code>Type</code> of that <code>Specialization</code>.</p> + + + <p>The <code>ownedTypeFeaturings</code> of a <code>Feature</code> are its <code>ownedRelationships</code> that are <code>TypeFeaturings</code> and which have the <code>Feature</code> as their <code>featureOfType</code>.</p> - + OCL2.0 - multiplicity = - let ownedMultiplicities: Sequence(Multiplicity) = - ownedMember->selectByKind(Multiplicity) in - if ownedMultiplicities->isEmpty() then null - else ownedMultiplicities->first() - endif + ownedTypeFeaturing = ownedRelationship->selectByKind(TypeFeaturing)-> + select(tf | tf.featureOfType = self) - - - <p>The <code>ownedFeatureMemberships</code> of a <code>Type</code> are its <code>ownedMemberships</code> that are <code>FeatureMemberships</code>.</p> + + + <p>The <code>ownedSubsettings</code> of a <code>Feature</code> are its <code>ownedSpecializations</code> that are <code>Subsettings</code>.</p> - + OCL2.0 - ownedFeatureMembership = ownedRelationship->selectByKind(FeatureMembership) + ownedSubsetting = ownedSpecialization->selectByKind(Subsetting) - - - <p>The <code>ownedConjugator</code> of a <code>Type</code> is the its single <code>ownedRelationship</code> that is a <code>Conjugation</code>.</p> + + + <p>The <code>ownedTypings</code> of a <code>Feature</code> are its <code>ownedSpecializations</code> that are <code>FeatureTypings</code>.</p> - + OCL2.0 - ownedConjugator = - let ownedConjugators: Sequence(Conjugator) = - ownedRelationship->selectByKind(Conjugation) in - if ownedConjugators->isEmpty() then null - else ownedConjugators->at(1) endif + ownedTyping = ownedGeneralization->selectByKind(FeatureTyping) - - - <p>The <code>outputs</code> of a <code>Type</code> are those of its <code>features</code> that have a direction of <ode>out</code> or <code>inout</code> relative to the <code>Type</code>, taking conjugation into account.</p> + + + <p>The <code>types</code> of a <code>Feature</code> are the union of the <code>types</code> of its <code>typings</code> and the <code>types</code> of the <code>Features</code> it subsets, with all redundant supertypes removed. If the <code>Feature</code> has <code>chainingFeatures</code>, then the union also includes the types of the last <code>chainingFeature</code>.</p> - + OCL2.0 - output = feature->select(f | - let direction: FeatureDirectionKind = directionOf(f) in - direction = FeatureDirectionKind::out or - direction = FeatureDirectionKind::inout) + type = + let types : OrderedSet(Types) = OrderedSet{self}-> + -- Note: The closure operation automatically handles circular relationships. + closure(typingFeatures()).typing.type->asOrderedSet() in + types->reject(t1 | types->exist(t2 | t2 <> t1 and t2.specializes(t1))) - - - <p>The <code>inputs</code> of a <code>Type</code> are those of its features that have a direction of <code>in</code> or <code>inout</code> relative to the <code>Type</code>, taking conjugation into account.</p> + + + <p>If a <code>Feature</code> has a <code>multiplicity</code>, then the <code>featuringTypes</code> of the <code>multiplicity</code> must be the same as those of the <code>Feature</code> itself.</p> - + OCL2.0 - input = feature->select(f | - let direction: FeatureDirectionKind = directionOf(f) in - direction = FeatureDirectionKind::_'in' or - direction = FeatureDirectionKind::inout) + multiplicity <> null implies multiplicity.featuringType = featuringType - - - <p>The <code>inheritedMemberships<code> of a <code>Type</code> are determined by the <code>inheritedMemberships()</code> operation.</p> + + + <p>A <code>Feature</code> must directly or indirectly specialize <code><em>Base::things</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - inheritedMembership = inheritedMemberships(Set{}, Set{}, false) + specializesFromLibrary('Base::things') - - - <p>A <code>Type</code> must directly or indirectly specialize <code><em>Base::Anything</em></code> from the Kernel Semantic Library.</p> + + + <p>A <code>Feature</code> cannot be one of its own <code>chainingFeatures</code>.</p> - - OCL2.0 - specializesFromLibrary('Base::Anything') + + English + chainingFeature->excludes(self) - - - <p>The <code>directedFeatures</code> of a <code>Type</code> are those <code>features</code> for which the <code>direction</code> is non-null.</p> + + + <p>The <code>ownedFeatureChainings</code> of a <code>Feature</code> are the <code>ownedRelationships</code> that are <code>FeatureChainings</code>.</p> - + OCL2.0 - directedFeature = feature->select(f | directionOf(f) <> null) + ownedFeatureChaining = ownedRelationship->selectByKind(FeatureChaining) - - - <p>The <code>features</code> of a <code>Type</code> are the <code>ownedMemberFeatures</code> of its <code>featureMemberships</code>. + + + <p>The <code>chainingFeatures</code> of a <code>Feature</code> are the <code>chainingFeatures</code> of its <code>ownedFeatureChainings</code>.</p> - + OCL2.0 - feature = featureMembership.ownedMemberFeature + chainingFeature = ownedFeatureChaining.chainingFeature - - - <p>The <code>featureMemberships</code> of a <code>Type</code> is the union of the <code>ownedFeatureMemberships</code> and those <code>inheritedMemberships</code> that are <code>FeatureMemberships</code>.</p> + + + A <code>Feature</code> must have either no <code>chainingFeatures</code> or more than one. - + OCL2.0 - featureMembership = ownedFeatureMembership->union( - inheritedMembership->selectByKind(FeatureMembership)) + chainingFeature->size() <> 1 - - - <p>The <code>ownedFeatures</code> of a <code>Type</code> are the <code>ownedMemberFeatures</code> of its <code>ownedFeatureMemberships</code>. + + + <p>If a <code>Feature</code> has <code>isEnd = true</code> and an <code>owningType</code> that is not empty, then, for each direct supertype of its <code>owningType</code>, it must redefine the <code>endFeature</code> at the same position, if any.</p> - - English - ownedFeature = ownedFeatureMembership.ownedMemberFeature + + OCL2.0 + isEnd and owningType <> null implies + let i : Integer = + owningType.ownedEndFeature->indexOf(self) in + owningType.ownedSpecialization.general-> + forAll(supertype | + supertype.endFeature->size() >= i implies + redefines(supertype.endFeature->at(i)) - - - <p>The <code>differencingTypes</code> of a <code>Type</code> are the <code>differencingTypes</code> of its <code>ownedDifferencings</code>, in the same order.</p> + + + <p>If a <code>Feature</code> has a <code>FeatureValue</code>, no <code>ownedSpecializations</code> that are not implied, and is not directed, then it must specialize the <code>result</code> of the <code>value</code> <code>Expression</code> of the <code>FeatureValue</code>.</p> - - English - differencingType = ownedDifferencing.differencingType + + OCL2.0 + direction = null and +ownedSpecializations->forAll(isImplied) implies + ownedMembership-> + selectByKind(FeatureValue)-> + forAll(fv | specializes(fv.value.result)) - - - <p>A <code>Type</code> cannot be one of its own <code>intersectingTypes</code>.</p> + + + <p>If a <code>Feature</code> has <code>isEnd = true</code> and an <code>owningType</code> that is an <code>Association</code> or a <code>Connector</code>, then it must directly or indirectly specialize <code><em>Links::Link::participant</em></code> from the Kernel Semantic Library.</p> - - English - intersectingType->excludes(self) + + OCL2.0 + isEnd and owningType <> null and +(owningType.oclIsKindOf(Association) or + owningType.oclIsKindOf(Connector)) implies + specializesFromLibrary('Links::Link::participant') - - - <p>A <code>Type</code> cannot be one of its own <code>differencingTypes</code>.</p> + + + <p>A composite <code>Feature</code> typed by a <code>Structure</code>, and whose <code>ownedType</code> is a <code>Structure</code> or another <code>Feature</code> typed by a <code>Structure</code> must directly or indirectly specialize <em><code>Objects::Object::subobjects</code></em>. - - English - differencingType->excludes(self) + + OCL2.0 + isComposite and +ownedTyping.type->includes(oclIsKindOf(Structure)) and +owningType <> null and +(owningType.oclIsKindOf(Structure) or + owningType.type->includes(oclIsKindOf(Structure))) implies + specializesFromLibrary('Occurrence::Occurrence::suboccurrences') - - - <p>The <code>unioningTypes</code> of a <code>Type</code> are the <code>unioningTypes</code> of its <code>ownedUnionings</code>.<p> + + + <p>If a <code>Feature</code> has an <code>ownedTyping</code> relationship to a <code>Class</code>, then it must directly or indirectly specialize <code><em>Occurrences::occurrences</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - unioningType = ownedUnioning.unioningType + ownedTyping.type->exists(selectByKind(Class)) implies + specializesFromLibrary('Occurrences::occurrences') - - - <p>A <code>Type</code> cannot be one of its own <code>unioningTypes</code>.</p> + + + <p>A composite <code>Feature</code> that has an <code>ownedTyping</code> relationship to a <code>Class</code>, and whose <code>ownedType</code> is a <code>Class</code> or another <code>Feature</code> typed by a <code>Class</code>, must directly or indirectly specialize <em><code>Occurrences::Occurrence::suboccurrences</code></em>. - - English - unioningType->excludes(self) + + OCL2.0 + isComposite and +ownedTyping.type->includes(oclIsKindOf(Class)) and +owningType <> null and +(owningType.oclIsKindOf(Class) or + owningType.oclIsKindOf(Feature) and + owningType.oclAsType(Feature).type-> + exists(oclIsKindOf(Class))) implies + specializesFromLibrary('Occurrence::Occurrence::suboccurrences') - - - <p>The <code>intersectingTypes</code> of a <code>Type</code> are the <code>intersectingTypes</code> of its <code>ownedIntersectings</code>.</p> + + + <p>If a <code>Feature</code> has an <code>ownedTyping</code> relationship to a <code>DataType</code>, then it must directly or indirectly specialize <code><em>Base::dataValues</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - intersectingType = ownedIntersecting.intersectingType + ownedTyping.type->exists(selectByKind(DataType)) implies + specializesFromLibrary('Base::dataValues') - - - A <code>Type</code> must have at most one owned <code>Conjugation</code> <code>Relationship</code>. + + + <p>If a <code>Feature</code> is the first <code>ownedFeature</code> of a first or second <code>FlowEnd</code>, then it must directly or indirectly specialize either <em><code>Transfers::Transfer::source::sourceOutput</code></em> or <em><code>Transfers::Transfer::target::targetInput</code></em>, respectively, from the Kernel Semantic Library.</p> - + OCL2.0 - ownedRelationship->selectByKind(Conjugation)->size() <= 1 + owningType <> null and +owningType.oclIsKindOf(FlowEnd) and +owningType.ownedFeature->at(1) = self implies + let flowType : Type = owningType.owningType in + flowType <> null implies + let i : Integer = + flowType.ownedFeature.indexOf(owningType) in + (i = 1 implies + redefinesFromLibrary('Transfers::Transfer::source::sourceOutput')) and + (i = 2 implies + redefinesFromLibrary('Transfers::Transfer::target::targetInput')) + - - - <p>A <code>Type</code> may have at most one <code>ownedMember</code> that is a <code>Multiplicity</code>.</p> + + + <p>If a <code>Feature</code> is a <code>parameter</code> of an <code>owningType</code> that is a <code>Behavior</code> or <code>Step</code>, but <em>not</em> +</p> +<ul> + <li>A <code>result</code> <code>parameter</code></li> + <li>A <code>parameter</code> of an <code>InvocationExpression</code>, with at least one non-implied <code>ownedRedefinition</code></li> +</ul> +<p>then, for each direct supertype of its <code>owningType</code> that is also a <code>Behavior</code> or <code>Step</code>, it must redefine the <code>parameter</code> at the same position, if any.</p> - + OCL2.0 - ownedMember->selectByKind(Multiplicity)->size() <= 1 + owningType <> null and +(owningType.oclIsKindOf(Behavior) or + owningType.oclIsKindOf(Step) and + (owningType.oclIsKindOf(InvocationExpression) implies + not ownedRedefinition->exists(not isImplied))) +implies + let ownerParameters : Sequence(Feature) = + owningType.ownedFeature->select(direction <> null)-> + reject(owningFeatureMembership. + oclIsKindOf(ReturnParameterMembership)) in + ownerParameters->includes(self) implies + let i : Integer = ownerParameters.indexof(self) in + owningType.ownedSpecialization.general-> + forAll(supertype | + supertype.oclIsKindOf(Behavior) or + supertype.oclIsKindOf(Step) + implies + let ownedParameters : Sequence(Feature) = + supertype.ownedFeature->select(direction <> null)-> + reject(owningFeatureMembership. + oclIsKindOf(ReturnParameterMembership)) in + ownedParameters->size() >= i implies + redefines(ownedParameters->at(i))) - - - <p>The <code>endFeatures</code> of a <code>Type</code> are all its <code>features</code> for which <code>isEnd = true</code>.</p> + + + <p>If a <code>Feature</code> has an <code>ownedTyping</code> relationship to a <code>Structure</code>, then it must directly or indirectly specialize <code><em>Objects::objects</em></code> from the Kernel Semantics Library.</p> - + OCL2.0 - endFeature = feature->select(isEnd) + ownedTyping.type->exists(selectByKind(Structure)) implies + specializesFromLibrary('Objects::objects') - - - <p>The <code>ownedDisjoinings</code> of a <code>Type</code> are the <code>ownedRelationships</code> that are <code>Disjoinings</code>.</p> + + + <p>If a <code>Feature</code> is a <code>result</code> <code>parameter</code> of an <code>owningType</code> that is a <code>Function</code> or <code>Expression</code>, then, for each direct supertype of its <code>owningType</code> that is also a <code>Function</code> or <code>Expression</code>, it must redefine the <code>result</code> <code>parameter</code>.</p> - + OCL2.0 - ownedDisjoining = - ownedRelationship->selectByKind(Disjoining) + owningType <> null and +(owningType.oclIsKindOf(Function) and + self = owningType.oclAsType(Function).result or + owningType.oclIsKindOf(Expression) and + self = owningType.oclAsType(Expression).result) implies + owningType.ownedSpecialization.general-> + select(oclIsKindOf(Function) or oclIsKindOf(Expression))-> + forAll(supertype | + redefines( + if superType.oclIsKindOf(Function) then + superType.oclAsType(Function).result + else + superType.oclAsType(Expression).result + endif) - - - <p>The <code>ownedUnionings</code> of a <code>Type</code> are the <code>ownedRelationships</code> that are <code>Unionings</code>.</p> + + + <p>The <code>ownedFeatureInvertings</code> of a <code>Feature</code> are its <code>ownedRelationships</code> that are <code>FeatureInvertings</code>.</p> - + OCL2.0 - ownedUnioning = - ownedRelationship->selectByKind(Unioning) + ownedFeatureInverting = ownedRelationship->selectByKind(FeatureInverting)-> + select(fi | fi.featureInverted = self) - - - <p>The <code>ownedIntersectings</code> of a <code>Type</code> are the <code>ownedRelationships</code> that are <code>Intersectings</code>.</p> + + + The <code>featuringTypes</code> of a <code>Feature</code> include the <code>featuringTypes</code> of all the <code>typeFeaturings</code> of the <code>Feature</code>. If the <code>Feature</code> has <code>chainingFeatures</code>, then its <code>featuringTypes</code> also include the <code>featuringTypes</code> of the first <code>chainingFeature</code>. - + OCL2.0 - ownedRelationship->selectByKind(Intersecting) + featuringType = + let featuringTypes : OrderedSet(Type) = + typeFeaturing.type->asOrderedSet() in + if chainingFeature->isEmpty() then featuringTypes + else + featuringTypes-> + union(chainingFeature->first().featuringType)-> + asOrderedSet() + endif - - - <p>The <code>ownedDifferencings</code> of a <code>Type</code> are its <code>ownedRelationships</code> that are <code>Differencings</code>.</p> + + + <p>The <code>ownedReferenceSubsetting</code> of a <code>Feature</code> is the first +<code>ownedSubsetting</code> that is a <code>ReferenceSubsetting</code> (if any).</p> - + OCL2.0 - ownedDifferencing = - ownedRelationship->selectByKind(Differencing) + ownedReferenceSubsetting = + let referenceSubsettings : OrderedSet(ReferenceSubsetting) = + ownedSubsetting->selectByKind(ReferenceSubsetting) in + if referenceSubsettings->isEmpty() then null + else referenceSubsettings->first() endif - - - <p>The <code>ownedEndFeatures</code> of a <code>Type</code> are all its <code>ownedFeatures</code> for which <code>isEnd = true</code>.</p> + + + <p>A <code>Feature</code> must have at most one <code>ownedSubsetting</code> that is an <code>ReferenceSubsetting</code>.</p> - + OCL2.0 - ownedEndFeature = ownedFeature->select(isEnd) + ownedSubsetting->selectByKind(ReferenceSubsetting)->size() <= 1 - - - <p>The <code>inheritedFeatures</code> of this <code>Type</code> are the <code>memberFeatures</code> of the <code>inheritedMemberships</code> that are <code>FeatureMemberships</code>.</p> + + + <p>Each <code>chainingFeature</code> (other than the first) must be featured within the previous <code>chainingFeature</code>.</p> - + OCL2.0 - inheritedFeature = inheritedMemberships-> - selectByKind(FeatureMembership).memberFeature + Sequence{2..chainingFeature->size()}->forAll(i | + chainingFeature->at(i).isFeaturedWithin(chainingFeature->at(i-1))) + - - - A <code>Type</code> must not have exactly one <code>ownedUnioning</code>. + + + <p>If a <code>Feature</code> has <code>isPortion = true</code>, an <code>ownedTyping </code> relationship to a <code>Class</code>, and an <code>owningType</code> that is a <code>Class</code> or another <code>Feature</code> typed by a <code>Class</code>, then it must directly or indirectly specialize <em><code>Occurrences::Occurrence::portions</code></em> from the Kernel Semantic Library.</p> - + OCL2.0 - ownedUnioning->size() <> 1 + isPortion and +ownedTyping.type->includes(oclIsKindOf(Class)) and +owningType <> null and +(owningType.oclIsKindOf(Class) or + owningType.oclIsKindOf(Feature) and + owningType.oclAsType(Feature).type-> + exists(oclIsKindOf(Class))) implies + specializesFromLibrary('Occurrence::Occurrence::portions') - - - A <code>Type</code> must not have exactly one <code>ownedIntersecting</code>. + + + <p>If a <code>Feature</code> has no <code>chainingFeatures</code>, then its <code>featureTarget</code> is the <code>Feature</code> itself, otherwise the <code>featureTarget</code> is the last of the <code>chainingFeatures</code>.</p> - + OCL2.0 - ownedIntersecting->size() <> 1 + featureTarget = if chainingFeature->isEmpty() then self else chainingFeature->last() endif - - - A <code>Type</code> must not have exactly one <code>ownedDifferencing</code>. + + + <p>The <code>ownedCrossSubsetting</code> of a <code>Feature</code> is the <code>ownedSubsetting</code> that is a <code>CrossSubsetting</code>, if any.</p> - + OCL2.0 - ownedDifferencing->size() <> 1 + ownedCrossSubsetting = + let crossSubsettings: Sequence(CrossSubsetting) = + ownedSubsetting->selectByKind(CrossSubsetting) in + if crossSubsettings->isEmpty() then null + else crossSubsettings->first() + endif - - - - <p>The <code>ownedRelationships</code> of this <code>Type</code> that are <code>Specializations</code>, for which the <code>Type</code> is the <code>specific</code> <code>Type</code>.</p> - - - - - - - - <p>The <code>ownedMemberships</code> of this <code>Type</code> that are <code>FeatureMemberships</code>, for which the <code>Type</code> is the <code>owningType</code>. Each such <code>FeatureMembership</code> identifies an <code>ownedFeature</code> of the <code>Type</code>.</p> - - - - - - - - <p>The <code>ownedMemberFeatures</code> of the <code>featureMemberships</code> of this <code>Type</code>.</p> - + + + <p>If a <code>Feature</code> has <code>isEnd = true</code>, then it must have multiplicity <code>1..1</code>.</p> - - - - - - <p>The <code>ownedMemberFeatures</code> of the <code>ownedFeatureMemberships</code> of this <code>Type</code>.</p> - + + OCL2.0 + isEnd implies + multiplicities().allSuperTypes()->flatten()-> + selectByKind(MultiplicityRange)->exists(hasBounds(1,1)) + + + + + <p>The <code>crossFeature</code> of a <code>Feature</code> must have the same <code>types</code> as the <code>Feature</code>.</p> - - - - - - <p>All <code>features</code> related to this <code>Type</code> by <code>FeatureMemberships</code> that have <code>direction</code> <code>in</code> or <code>inout</code>.</p> - + + OCL2.0 + crossFeature <> null implies + crossFeature.type->asSet() = type->asSet() + + + + + <p>A <code>Feature</code> must have at most one <code>ownedSubsetting</code> that is a <code>CrossSubsetting</code>.</p> - - - - - - <p>All <code>features</code> related to this <code>Type</code> by <code>FeatureMemberships</code> that have <code>direction</code> <code>out</code> or <code>inout</code>.</p> - + + OCL2.0 + ownedSubsetting->selectByKind(CrossSubsetting)->size() <= 1 + + + + + <p>The <code>crossFeature</code> of a <code>Feature</code> is the second <code>chainingFeature</code> of the <code>crossedFeature</code> of the <code>ownedCrossSubsetting</code> of the <code>Feature</code>, if any.</p> - - - - - - <p>Indicates whether instances of this <code>Type</code> must also be instances of at least one of its specialized <code>Types</code>.</p> - + + OCL2.0 + crossFeature = + if ownedCrossSubsetting = null then null + else + let chainingFeatures: Sequence(Feature) = + ownedCrossSubsetting.crossedFeature.chainingFeature in + if chainingFeatures->size() < 2 then null + else chainingFeatures->at(2) + endif + + + + + <p>If this <code>Feature</code> is the <code>ownedCrossFeature</code> of an end <code>Feature</code>, then it must directly or indirectly specialize the <code>types</code> of its owning end <code>Feature</code>.</p> - - - - - - <p>All <code>Memberships</code> inherited by this <code>Type</code> via <code>Specialization</code> or <code>Conjugation</code>. These are included in the derived union for the <code>memberships</code> of the <code>Type</code>.</p> - + + OCL2.0 + isOwnedCrossFeature() implies + owner.oclAsType(Feature).type->forAll(t | self.specializes(t)) + + + + + <p>If this <code>Feature</code> is the <code>ownedCrossFeature</code> of an end <code>Feature</code>, then, for any end <code>Feature</code> that is redefined by the owning end <code>Feature</code> of this <code>Feature</code>, this <code>Feature</code> must subset the <code>crossFeature</code> of the redefined end <code>Feature</code>, if this exists.</p> - - - - - - <p>All <code>features</code> of this <code>Type</code> with <code>isEnd = true</code>.</p> + + OCL2.0 + isOwnedCrossFeature() implies + ownedSubsetting.subsettedFeature->includesAll( + owner.oclAsType(Feature).ownedRedefinition.redefinedFeature-> + select(crossFeature <> null).crossFeature) + + + + + <p>If this <code>Feature</code> has a <code>crossFeature</code>, then, for any <code>Feature</code> that is redefined by this <code>Feature</code>, the <code>crossFeature</code> must specialize the <code>crossFeature</code> of the redefined end <code>Feature</code>, if this exists.</p> - - - - - - <p>All <code>endFeatures</code> of this <code>Type</code> that are <code>ownedFeatures</code>.</p> - + + OCL2.0 + crossFeature <> null implies + ownedRedefinition.redefinedFeature.crossFeature-> + forAll(f | f <> null implies crossFeature.specializes(f)) + + + + + <p>If this <code>Feature</code> has <code>isEnd = true</code> and <code>ownedCrossFeature</code> returns a non-null value, then the <code>crossFeature</code> of the <code>Feature</code> must be the <code>Feature</code> returned from <code>ownedCrossFeature</code> (which implies that this <code>Feature</code> has an appropriate <code>ownedCrossSubsetting</code> to realize this).</p> - - - - - - <p>Whether all things that meet the classification conditions of this <code>Type</code> must be classified by the <code>Type</code>.</p> - -<p>(A <code>Type</code>&nbsp;gives conditions that must be met by whatever it classifies, but when <code>isSufficient</code> is false, things may meet those conditions but still not be classified by the <code>Type</code>. For example, a Type <code><em>Car</em></code> that is not sufficient could require everything it classifies to have four wheels, but not all four wheeled things would classify as cars. However, if the <code>Type</code> <code><em>Car</em></code> were sufficient, it would classify all four-wheeled things.)</p> - + + OCL2.0 + ownedCrossFeature() <> null implies + crossFeature = ownedCrossFeature() + + + + + <p>If this <code>Feature</code> is the <code>ownedCrossFeature</code> of an end <code>Feature</code>, then it must have <code>featuringTypes</code> consistent with the crossing from other end <code>Features</code> of the <code>owningType</code> of its end <code>Feature</code>.</p> - - - - - - <p>A <code>Conjugation</code> owned by this <code>Type</code> for which the <code>Type</code> is the <code>originalType</code>.</p> - + + OCL2.0 + isOwnedCrossFeature() implies + let otherEnds : OrderedSet(Feature) = + owner.oclAsType(Feature).owningType.endFeature->excluding(self) in + if (otherEnds->size() = 1) then + featuringType = otherEnds->first().type + else + featuringType->size() = 1 and + featuringType->first().isCartesianProduct() and + featuringType->first().asCartesianProduct() = otherEnds.type and + featuringType->first().allSupertypes()->includesAll( + owner.oclAsType(Feature).ownedRedefinition.redefinedFeature-> + select(crossFeature() <> null).crossFeature().featuringType) + endif + + + + + OCL2.0 + isPortion implies not isVariable + + + + + <p>A <code>Feature</code> with <code>isEnd = true</code> must have no direction.</p> - - + + OCL2.0 + isEnd implied direction = null + + + + + <p>If a <code>Feature</code> is owned via a <code>FeatureMembership</code>, then it must have a <code>featuringType</code> for which the operation <code>isFeaturingType</code> returns true.</p> + + + OCL2.0 + owningFeatureMembership <> null implies + featuringTypes->exists(t | isFeaturingType(t)) + + + + + <p>A <code>Feature</code> with <code>isConstant = true</code> must have <code>isVariable = true</code>. + + + OCL2.0 + isConstant implies isVariable + + + + + <p>A <code>Feature</code> with <code>isVariable = true</code> must have an <code>owningType</code> that directly or indirectly specializes the <code>Class</code> <em><code>Occurrences::Occurrence</code></em> from the Kernel Semantic Library.</p> + + + OCL2.0 + isVariable implies + owningType <> null and + owningType.specializes('Occurrences::Occurrence') + + + + + <p>A <code>Feature</code> with <code>isEnd = true</code> must have all of <code>isDerived = false</code>, <code>isAbstract = false</code>, <code>isComposite = false</code>, and <code>isPortion = false</code>.</p> + + + OCL2.0 + isEnd implies not (isDerived or isAbstract or isComposite or isPortion) + + + + + <p>A <code>Feature</code> with <code>isEnd = true</code> and <code>isVariable = true</code> must have <code>isConstant = true</code>.</p> + + + OCL2.0 + isEnd and isVariable implies isConstant + + + + + + <p>The <code>Type</code> that is the <code>owningType</code> of the <code>owningFeatureMembership</code> of this <code>Feature</code>.</p> + + + - - - <p>Indicates whether this <code>Type</code> has an <code>ownedConjugator</code>.</p> + + + <p>Whether or not values for this <code>Feature</code> must have no duplicates or not.</p> + - - - <p>All the <code>memberFeatures</code> of the <code>inheritedMemberships</code> of this <code>Type</code> that are <code>FeatureMemberships</code>.</p> - + + + <p>Whether an order exists for the values of this <code>Feature</code> or not.</p> - - + + - - - <p>An <code>ownedMember</code> of this <code>Type</code> that is a <code>Multiplicity</code>, which constraints the cardinality of the <code>Type</code>. If there is no such <code>ownedMember</code>, then the cardinality of this <code>Type</code> is constrained by all the <code>Multiplicity</code> constraints applicable to any direct supertypes.</p> + + + <p><code>Types</code> that restrict the values of this <code>Feature</code>, such that the values must be instances of all the <code>types</code>. The types of a <code>Feature</code> are derived from its <code>typings</code> and the <code>types</code> of its <code>subsettings</code>. If the <code>Feature</code> is chained, then the <code>types</code> of the last <code>Feature</code> in the chain are also <code>types</code> of the chained <code>Feature</code>.</p> + - - + + - - - <p>The interpretations of a <code>Type</code> with <code>unioningTypes</code> are asserted to be the same as those of all the <code>unioningTypes</code> together, which are the <code>Types</code> derived from the <code>unioningType</code> of the <code>ownedUnionings</code> of this <code>Type</code>. For example, a <code>Classifier</code> for people might be the union of <code>Classifiers</code> for all the sexes. Similarly, a feature for people&#39;s children might be the union of features dividing them in the same ways as people in general.</p> + + + <p>The <code>ownedSubsettings</code> of this <code>Feature</code> that are <code>Redefinitions</code>, for which the <code>Feature</code> is the <code>redefiningFeature</code>.</p> + - - + + - - - <p>The <code>ownedRelationships</code> of this <code>Type</code> that are <code>Intersectings</code>, have the <code>Type</code> as their <code>typeIntersected</code>.</p> + + + <p>The <code>ownedSpecializations</code> of this <code>Feature</code> that are <code>Subsettings</code>, for which the <code>Feature</code> is the <code>subsettingFeature</code>.</p> - - + + - - - <p>The interpretations of a <code>Type</code> with <code>intersectingTypes</code> are asserted to be those in common among the <code>intersectingTypes</code>, which are the <code>Types</code> derived from the <code>intersectingType</code> of the <code>ownedIntersectings</code> of this <code>Type</code>. For example, a <code>Classifier</code> might be an intersection of <code>Classifiers</code> for people of a particular sex and of a particular nationality. Similarly, a feature for people&#39;s children of a particular sex might be the intersection of a <code>Feature</code> for their children and a <code>Classifier</code> for people of that sex (because the interpretations of the children <code>Feature</code> that identify those of that sex are also interpretations of the Classifier for that sex).</p> - + + + <p>The <code>FeatureMembership</code> that owns this <code>Feature</code> as an <code>ownedMemberFeature</code>, determining its <code>owningType</code>.</p> - - + + - - - <p>The <code>ownedRelationships</code> of this <code>Type</code> that are <code>Unionings</code>, having the <code>Type</code> as their <code>typeUnioned</code>.</p> + + + <p>Whether the <code>Feature</code> is a composite <code>feature</code> of its <code>featuringType</code>. If so, the values of the <code>Feature</code> cannot exist after its featuring instance no longer does and cannot be values of another composite feature that is not on the same featuring instance.</p> - - + + - - - <p>The <code>ownedRelationships</code> of this <code>Type</code> that are <code>Disjoinings</code>, for which the <code>Type</code> is the <code>typeDisjoined</code> <code>Type</code>.</p> + + + <p>Whether or not this <code>Feature</code> is an end <code>Feature</code>. An end <code>Feature</code> always has multiplicity 1, mapping each of its domain instances to a single co-domain instance. However, it may have a <code>crossFeature</code>, in which case values of the <code>crossFeature</code> must be the same as those found by navigation across instances of the <code>owningType</code> from values of other end <code>Features</code> to values of this Feature. If the <code>owningType</code> has <em>n</em> end <code>Features</code>, then the multiplicity, ordering, and uniqueness declared for the <code>crossFeature</code> of any one of these end <code>Features</code> constrains the cardinality, ordering, and uniqueness of the collection of values of that <code>Feature</code> reached by navigation when the values of the other <em>n-1</em> end <code>Features</code> are held fixed.</p> - - + + - - - <p>The <code>FeatureMemberships</code> for <code>features</code> of this <code>Type</code>, which include all <code>ownedFeatureMemberships</code> and those <code>inheritedMemberships</code> that are <code>FeatureMemberships</code> (but does <em>not</em> include any <code>importedMemberships</code>).</p> - + + + <p>The <code>Type</code> that is related to this <code>Feature</code> by an <code>EndFeatureMembership</code> in which the <code>Feature</code> is an <code>ownedMemberFeature</code>.</p> - - + + - - - <p>The interpretations of a <code>Type</code> with <code>differencingTypes</code> are asserted to be those of the first of those <code>Types</code>, but not including those of the remaining <code>Types</code>. For example, a <code>Classifier</code> might be the difference of a <code>Classifier</code> for people and another for people of a particular nationality, leaving people who are not of that nationality. Similarly, a feature of people might be the difference between a feature for their children and a <code>Classifier</code> for people of a particular sex, identifying their children not of that sex (because the interpretations of the children <code>Feature</code> that identify those of that sex are also interpretations of the <code>Classifier</code> for that sex).</p> - + + + <p>The <code>ownedSpecializations</code> of this <code>Feature</code> that are <code>FeatureTypings</code>, for which the <code>Feature</code> is the <code>typedFeature</code>.</p> - - + + - - - <p>The <code>ownedRelationships</code> of this <code>Type</code> that are <code>Differencings</code>, having this <code>Type</code> as their <code>typeDifferenced</code>.</p> - + + + <p><code>Types</code> that feature this <code>Feature</code>, such that any instance in the domain of the <code>Feature</code> must be classified by all of these <code>Types</code>, including at least all the <code>featuringTypes</code> of its <code>typeFeaturings</code>. If the <code>Feature</code> is chained, then the <code>featuringTypes</code> of the first <code>Feature</code> in the chain are also <code>featuringTypes</code> of the chained <code>Feature</code>.</p> - - + + - - - <p>The <code>features</code> of this <code>Type</code> that have a non-null <code>direction</code>.</p> + + + <p>The <code>ownedRelationships</code> of this <code>Feature</code> that are <code>TypeFeaturings</code> and for which the <code>Feature</code> is the <code>featureOfType</code>.</p> + + + + + + + <p>Whether the values of this <code>Feature</code> can always be computed from the values of other <code>Features</code>.</p> - - + + - - - <p>The visible <code>Memberships</code> of a <code>Type</code> include <code>inheritedMemberships</code>.</p> + + + <p>The <code>Feature</code> that are chained together to determine the values of this <code>Feature</code>, derived from the <code>chainingFeatures</code> of the <code>ownedFeatureChainings</code> of this <code>Feature</code>, in the same order. The values of a <code>Feature</code> with <code>chainingFeatures</code> are the same as values of the last <code>Feature</code> in the chain, which can be found by starting with the values of the first <code>Feature</code> (for each instance of the domain of the original <code>Feature</code>), then using each of those as domain instances to find the values of the second <code>Feature</code> in chainingFeatures, and so on, to values of the last <code>Feature</code>.</p> + + + + + + + <p>The <code>ownedRelationships</code> of this <code>Feature</code> that are <code>FeatureInvertings</code> and for which the <code>Feature</code> is the <code>featureInverted</code>.</p> + + + + + + + <p>The <code>ownedRelationships</code> of this <code>Feature</code> that are <code>FeatureChainings</code>, for which the <code>Feature</code> will be the <code>featureChained</code>.</p> + + + + + + + <p>Whether the values of this <code>Feature</code> are contained in the space and time of instances of the domain of the <code>Feature</code> and represent the same thing as those instances.</p> - - - OCL2.0 - let visibleMemberships : OrderedSet(Membership) = - self.oclAsType(Namespace). - visibleMemberships(excluded, isRecursive, includeAll) in -let visibleInheritedMemberships : OrderedSet(Membership) = - inheritedMemberships(excluded->including(self), Set{}, isRecursive)-> - select(includeAll or visibility = VisibilityKind::public) in -visibleMemberships->union(visibleInheritedMemberships) + + + + + + <p>Whether the value of this <code>Feature</code> might vary over time. That is, whether the <code>Feature</code> may have a different value for each <em><code>snapshot</code></em> of an <code>owningType</code> that is an <em><code>Occurrence</code></em>.</p> + + + + + + + <p>If <code>isVariable</code> is true, then whether the value of this <code>Feature</code> nevertheless does not change over all <code><em>snapshots</em></code> of its <code>owningType</code>.</p> + + + + + + + + <p>The one <code>ownedSubsetting</code> of this <code>Feature</code>, if any, that is a <code>ReferenceSubsetting</code>, for which the <code>Feature</code> is the <code>referencingFeature</code>.</p> + + + + + + + <p>The last of the <code>chainingFeatures</code> of this <code>Feature</code>, if it has any. Otherwise, this <code>Feature</code> itself.</p> + + + + + + + <p>The second <code>chainingFeature</code> of the <code>crossedFeature</code> of the <code>ownedCrossSubsetting</code> of this <code>Feature</code>, if it has one. Semantically, the values of the <code>crossFeature</code> of an end <code>Feature</code> must include all values of the end <code>Feature</code> obtained when navigating from values of the other end <code>Features</code> of the same <code>owningType</code>. +</p> + + + + + + + <p>Indicates how values of this <code>Feature</code> are determined or used (as specified for the <code>FeatureDirectionKind</code>).</p> + + + + + + + + <p>The one <code>ownedSubsetting</code> of this <code>Feature</code>, if any, that is a <code>CrossSubsetting}, for which the <code>Feature</code> is the <code>crossingFeature</code>.</p> + + + + + + + <p>Return the <code>directionOf</code> this <code>Feature</code> relative to the given <code>type</code>.</p> + + + + OCL2.0 + type.directionOf(self) - - - - - - - - - - - - - + + + + - - - <p>Return the <code>Memberships</code> inheritable from supertypes of this <code>Type</code> with redefined <code>Features</code> removed. When computing inheritable <code>Memberships</code>, exclude <code>Imports</code> of <code>excludedNamespaces</code>, <code>Specializations</code> of <code>excludedTypes</code>, and, if <code>excludeImplied = true</code>, all implied <code>Specializations</code>.</p> - + + + <p>If a <code>Feature</code> has no <code>declaredShortName</code> or <code>declaredName</code>, then its effective <code>shortName</code> is given by the effective <code>shortName</code> of the <code>Feature</code> returned by the <code>namingFeature()</code> operation, if any.</p> - - + + OCL2.0 - removeRedefinedFeatures( - inheritableMemberships(excludedNamespaces, excludedTypes, excludeImplied)) + if declaredShortName <> null or declaredName <> null then + declaredShortName +else + let namingFeature : Feature = namingFeature() in + if namingFeature = null then + null + else + namingFeature.effectiveShortName() + endif +endif - - - - - - - - - - - - - - + + + + - - - <p>Return all the non-<code>private</code> <code>Memberships</code> of all the supertypes of this <code>Type</code>, excluding any supertypes that are this <code>Type</code> or are in the given set of <code>excludedTypes</code>. If <code>excludeImplied = true</code>, then also transitively exclude any supertypes from implied <code>Specializations</code>.</p> + + + <p>If a <code>Feature</code> has no <code>declaredName</code> or <code>declaredShortName</code> +, then its effective <code>name</code> is given by the effective <code>name</code> of the <code>Feature</code> returned by the <code>namingFeature()</code> operation, if any.</p> - - + + OCL2.0 - let excludingSelf : Set(Type) = excludedType->including(self) in -supertypes(excludeImplied)->reject(t | excludingSelf->includes(t)). - nonPrivateMemberships(excludedNamespaces, excludingSelf, excludeImplied) - + if declaredShortName <> null or declaredName <> null then + declaredName +else + let namingFeature : Feature = namingFeature() in + if namingFeature = null then + null + else + namingFeature.effectiveName() + endif +endif - - - - - - - - - - - - - - + + + + - - - <p>Return the <code>public</code>, <code>protected</code> and inherited <code>Memberships</code> of this <code>Type</code>. When computing imported <code>Memberships</code>, exclude the given set of <code>excludedNamespaces</code>. When computing inherited <code>Memberships</code>, exclude <code>Types</code> in the given set of <code>excludedTypes</code>. If <code>excludeImplied = true</code>, then also exclude any supertypes from implied <code>Specializations</code>.</p> + + + <p>By default, the naming <code>Feature</code> of a <code>Feature</code> is given by its first <code>redefinedFeature</code> of its first <code>ownedRedefinition</code>, if any.</p> - - + + OCL2.0 - let publicMemberships : OrderedSet(Membership) = - membershipsOfVisibility(VisibilityKind::public, excludedNamespaces) in -let protectedMemberships : OrderedSet(Membership) = - membershipsOfVisibility(VisibilityKind::protected, excludedNamespaces) in -let inheritedMemberships : OrderedSet(Membership) = - inheritedMemberships(excludedNamespaces, excludedTypes, excludeImplied) in -publicMemberships-> - union(protectedMemberships)-> - union(inheritedMemberships) + if ownedRedefinition->isEmpty() then + null +else + ownedRedefinition->at(1).redefinedFeature +endif - - - - - - - + + + - + + + + + OCL2.0 + let supertypes : OrderedSet(Type) = + self.oclAsType(Type).supertypes(excludeImplied) in +if featureTarget = self then supertypes +else supertypes->append(featureTarget) +endif + + + - - - + + + - - - <p>Return a subset of <code>memberships</code>, removing those <code>Memberships</code> whose <code>memberElements</code> are <code>Features</code> and for which either of the following two conditions holds:</p> - -<ol> - <li>The <code>memberElement</code> of the <code>Membership</code> is included in redefined <code>Features</code> of another <code>Membership</code> in <code>memberships</code>.</li> - <li>One of the redefined <code>Features</code> of the <code>Membership</code> is a directly <code>redefinedFeature</code> of an <code>ownedFeature</code> of this <code>Type</code>.</li> -</ol> - -<p>For this purpose, the redefined <code>Features</code> of a <code>Membership</code> whose <code>memberElement</code> is a <code>Feature</code> includes the <code>memberElement</code> and all <code>Features</code> directly or indirectly redefined by the <code>memberElement</code>.</p> + + + <p>Check whether this <code>Feature</code> <em>directly</em> redefines the given <code>redefinedFeature</code>.</p> - - + + OCL2.0 - let reducedMemberships : Sequence(Membership) = - memberships->reject(mem1 | - memberships->excluding(mem1)-> - exists(mem2 | allRedefinedFeaturesOf(mem2)-> - includes(mem1.memberElement))) in -let redefinedFeatures : Set(Feature) = - ownedFeature.redefinition.redefinedFeature->asSet() in -reducedMemberships->reject(mem | allRedefinedFeaturesOf(mem)-> - exists(feature | redefinedFeatures->includes(feature))) + ownedRedefinition.redefinedFeature->includes(redefinedFeature) - - - - - - - + + + - - - <p>If the <code>memberElement</code> of the given <code>membership</code> is a <code>Feature</code>, then return all <code>Features</code> directly or indirectly redefined by the <code>memberElement</code>.</p> + + + <p>Check whether this <code>Feature</code> <em>directly</em> redefines the named library <code>Feature</code>. <code>libraryFeatureName</code> must conform to the syntax of a KerML qualified name and must resolve to a <code>Feature</code> in global scope.</p> - - + + OCL2.0 - if not membership.memberElement.oclIsType(Feature) then Set{} -else membership.memberElement.oclAsType(Feature).allRedefinedFeatures() -endif + let mem: Membership = resolveGlobal(libraryFeatureName) in +mem <> null and mem.memberElement.oclIsKindOf(Feature) and +redefines(mem.memberElement.oclAsType(Feature)) - - - - + + + + + - - - <p>If the given <code>feature</code> is a <code>feature</code> of this <code>Type</code>, then return its direction relative to this <code>Type</code>, taking conjugation into account.</p> - + + + <p>Check whether this <code>Feature</code> directly or indirectly specializes a <code>Feature</code> whose last two <code>chainingFeatures</code> are the given <code>Features</code> <code>first</code> and <code>second</code>.</p> - - + + OCL2.0 - directionOfExcluding(f, Set{}) + allSuperTypes()->selectAsKind(Feature)-> + exists(f | let n: Integer = f.chainingFeature->size() in + n >= 2 and + f.chainingFeature->at(n-1) = first and + f.chainingFeature->at(n) = second) - - - - + + + + - - - <p>Return the direction of the given <code>feature</code> relative to this <code>Type</code>, excluding a given set of <code>Types</code> from the search of supertypes of this <code>Type</code>.</p> + + + <p>A <code>Feature</code> is compatible with an <code>otherType</code> if it either directly or indirectly specializes the <code>otherType</code> or if the <code>otherType</code> is also a <code>Feature</code> and all of the following are true.</p> +<ol> + <li>Neither this <code>Feature</code> or the <code>otherType</code> have any <code>ownedFeatures</code>.</li> + <li>This <code>Feature</code> directly or indirectly redefines a <code>Feature</code> that is also directly or indirectly redefined by the <code>otherType</code>.</li> + <li>This <code>Feature</code> can access the <code>otherType</code>. +</li></ol> - - + + OCL2.0 - let excludedSelf : Set(Type) = excluded->including(self) in -if feature.owningType = self then feature.direction -else - let directions : Sequence(FeatureDirectionKind) = - supertypes(false)->excluding(excludedSelf). - directionOfExcluding(feature, excludedSelf)-> - select(d | d <> null) in - if directions->isEmpty() then null - else - let direction : FeatureDirectionKind = directions->first() in - if not isConjugated then direction - else if direction = FeatureDirectionKind::_'in' then FeatureDirectionKind::out - else if direction = FeatureDirectionKind::out then FeatureDirectionKind::_'in' - else direction - endif endif endif endif -endif + specializes(otherType) or + supertype.oclIsKindOf(Feature) and + ownedFeature->isEmpty() and + otherType.ownedFeature->isEmpty() and + ownedRedefinitions.allRedefinedFeatures()->exists(f | + otherType.oclAsType(Feature).allRedefinedFeatures()->includes(f)) and + canAccess(otherType.oclAsType(Feature)) - - - - - - - - + + + - - - <p>If this <code>Type</code> is conjugated, then return just the <code>originalType</code> of the <code>Conjugation</code>. Otherwise, return the <code>general</code> <code>Types</code> from all <code>ownedSpecializations</code> of this type, if <code>excludeImplied = false</code>, or all non-implied <code>ownedSpecializations</code>, if <code>excludeImplied = true</code>.</p> + + + <p>Return the <code>Features</code> used to determine the <code>types</code> of this <code>Feature</code> (other than this <code>Feature</code> itself). If this <code>Feature</code> is <em>not</em> conjugated, then the <code>typingFeatures</code> consist of all subsetted <code>Features</code>, <em>except</em> from <code>CrossSubsetting</code>, and the last <code>chainingFeature</code> (if any). If this <code>Feature</code> <em>is</em> conjugated, then the <code>typingFeatures</code> are only its <code>originalType</code> (if the <code>originalType</code> is a <code>Feature</code>).</p> + +<p><strong>Note.</strong> <code>CrossSubsetting</code> is excluded from the determination of the <code>type</code> of a <code>Feature</code> in order to avoid circularity in the construction of implied <code>CrossSubsetting</code> relationships. The <code>validateFeatureCrossFeatureType</code> requires that the <code>crossFeature</code> of a <code>Feature</code> have the same <code>type</code> as the <code>Feature</code>.</p> + - - + + OCL2.0 - if isConjugated then Sequence{conjugator.originalType} -else if not excludeImplied then ownedSpecialization.general -else ownedSpecialization->reject(isImplied).general -endif -endif + if not isConjugated then + let subsettedFeatures : OrderedSet(Feature) = + subsetting->reject(s | s.oclIsKindOf(CrossSubsetting)).subsettedFeatures in + if chainingFeature->isEmpty() or + subsettedFeature->includes(chainingFeature->last()) + then subsettedFeatures + else subsettedFeatures->append(chainingFeature->last()) + endif +else if conjugator.originalType.oclIsKindOf(Feature) then + OrderedSet{conjugator.originalType.oclAsType(Feature)} +else OrderedSet{} +endif endif - - - - - - + + + - - - <p>Return this <code>Type</code> and all <code>Types</code> that are directly or transitively supertypes of this <code>Type</code> (as determined by the <code>supertypes</code> operation with <code>excludeImplied = false</code>).</p> - + + + <p>If <code>isCartesianProduct</code> is true, then return the list of <code>Types</code> whose Cartesian product can be represented by this <code>Feature</code>. (If <code>isCartesianProduct</code> is not true, the operation will still return a valid value, it will just not represent anything useful.)</p> - - + + OCL2.0 - OrderedSet{self}->closure(supertypes(false)) + featuringType->select(t | t.owner <> self)-> + union(featuringType->select(t | t.owner = self)-> + selectByKind(Feature).asCartesianProduct())-> + union(type) - - - + + + - - - <p>Check whether this <code>Type</code> is a direct or indirect specialization of the given <code>supertype<code>.</p> + + + <p>Check whether this <code>Feature</code> can be used to represent a Cartesian product of <code>Types</code>.</p> - - + + OCL2.0 - if isConjugated then - ownedConjugator.originalType.specializes(supertype) -else - allSupertypes()->includes(supertype) -endif + type->size() = 1 and +featuringType.size() = 1 and +(featuringType.first().owner = self implies + featuringType.first().oclIsKindOf(Feature) and + featuringType.first().oclAsType(Feature).isCartesianProduct()) - - + - - - <p>Check whether this <code>Type</code> is a direct or indirect specialization of the named library <code>Type</code>. <code>libraryTypeName</code> must conform to the syntax of a KerML qualified name and must resolve to a <code>Type</code> in global scope.</p> - + + + <p>Return whether this <code>Feature</code> is an owned cross <code>Feature</code> of an end <code>Feature</code>.</p> - - + + OCL2.0 - let mem : Membership = resolveGlobal(libraryTypeName) in -mem <> null and mem.memberElement.oclIsKindOf(Type) and -specializes(mem.memberElement.oclAsType(Type)) + owningNamespace <> null and +owningNamespace.oclIsKindOf(Feature) and +owningNamespace.oclAsType(Feature).ownedCrossFeature() = self - - - - + - - - <p>By default, this <code>Type</code> is compatible with an <code>otherType</code> if it directly or indirectly specializes the <code>otherType</code>.</p> + + + <p>If this <code>Feature</code> is an end <code>Feature</code> of its <code>owningType</code>, then return the first <code>ownedMember</code> of the <code>Feature</code> that is a <code>Feature</code>, but not a <code>Multiplicity</code> or a <code>MetadataFeature</code>, and whose <code>owningMembership</code> is <em>not</em> a <code>FeatureMembership</code>. If this exists, it is the <code>crossFeature</code> of the end <code>Feature</code>.</p> - - + + OCL2.0 - specializes(otherType) + if not isEnd or owningType = null then null +else + let ownedMemberFeatures: Sequence(Feature) = + ownedMember->selectByKind(Feature)-> + reject(oclIsKindOf(Multiplicity) or + oclIsKindOf(MetadataFeature) or + oclIsKindOf(FeatureValue))-> + reject(owningMembership.oclIsKindOf(FeatureMembership)) in + if ownedMemberFeatures.isEmpty() then null + else ownedMemberFeatures->first() + endif - - - + + + - - - <p>Return the owned or inherited <code>Multiplicities</code> for this <code>Type<./code>.</p> + + + <p>Return this <code>Feature</code> and all the <code>Features</code> that are directly or indirectly <code>Redefined</code> by this <code>Feature</code>.</p> - - + + OCL2.0 - if multiplicity <> null then OrderedSet{multiplicity} -else - ownedSpecialization.general->closure(t | - if t.multiplicity <> null then OrderedSet{} - else ownedSpecialization.general - )->select(multiplicity <> null).multiplicity->asOrderedSet() -endif + ownedRedefinition.redefinedFeature-> + closure(ownedRedefinition.redefinedFeature)-> + asOrderedSet()->prepend(self) + - - - + + + + + + + + <p>Return if the <code>featuringTypes</code> of this <code>Feature</code> are compatible with the given <code>type</code>. If <code>type</code> is null, then check if this <code>Feature</code> is explicitly or implicitly featured by <em><code>Base::Anything</code></em>. If this <code>Feature</code> has <code>isVariable = true</code>, then also consider it to be featured within its <code>owningType</code>. If this <code>Feature</code> is a feature chain whose first <code>chainingFeature</code> has <code>isVariable = true</code>, then also consider it to be featured within the <code>owningType</code> of its first <code>chainingFeature</code>.</p> + + + + OCL2.0 + if type = null then + featuringType->forAll(f | f = resolveGlobal('Base::Anything').memberElement) +else + featuringType->forAll(f | type.isCompatibleWith(f)) or + isVariable and type.specializes(owningType) or + chainingFeature->notEmpty() and chainingFeature->first().isVariable and + type.specializes(chainingFeature->first().owningType) +endif + + + + + + + + + + + + + <p>A <code>Feature</code> can access another <code>feature</code> if the other <code>feature</code> is featured within one of the direct or indirect <code>featuringTypes</code> of this <code>Feature</code>.</p> + + + + OCL2.0 + let anythingType: Element = + subsettingFeature.resolveGlobal('Base::Anything').memberElement in +let allFeaturingTypes : Sequence(Type) = + featuringTypes->closure(t | + if not t.oclIsKindOf(Feature) then Sequence{} + else + let featuringTypes : OrderedSet(Type) = t.oclAsType(Feature).featuringType in + if featuringTypes->isEmpty() then Sequence{anythingType} + else featuringTypes + endif + endif) in +allFeaturingTypes->exists(t | feature.isFeaturedWithin(t)) + + + + + + + + + + <p>Return whether the given <code>type</code> must be a <code>featuringType</code> of this <code>Feature</code>. If this <code>Feature</code> has <code>isVariable = false</code>, then return true if the <code>type</code> is the <code>owningType</code> of the <code>Feature</code>. If <code>isVariable = true</code>, then return true if the <code>type</code> is a <code>Feature</code> representing the <em><code>snapshots</code></em> of the <code>owningType</code> of this <code>Feature</code>.</p> + + + + OCL2.0 + owningType <> null and +if not isVariable then type = owningType +else if owningType = resolveGlobal('Occurrences::Occurrence').memberElement then + type = resolveGlobal('Occurrences::Occurrence::snapshots').memberElement +else + type.oclIsKindOf(Feature) and + let feature : Feature = type.oclAsType(Feature) in + feature.featuringType->includes(owningType) and + feature.redefinesFromLibrary('Occurrences::Occurrence::snapshots') +endif + + + + + + - - - - <p><code>Intersecting</code> is a <code>Relationship</code> that makes its <code>intersectingType</code> one of the <code>intersectingTypes</code> of its <code>typeIntersected</code>.</p> + + + + + <p><code>EndFeatureMembership</code> is a <code>FeatureMembership</code> that requires its <code>memberFeature</code> be owned and have <code>isEnd = true</code>.</p> - - - - <p><code>Type</code> with interpretations partly determined by <code>intersectingType</code>, as described in <code>Type::intersectingType</code>.</p> - + + + <p>The <code>ownedMemberFeature</code> of an <code>EndFeatureMembership</code> must be an end <code>Feature</code>.</p> - - + + OCL2.0 + ownedMemberFeature.isEnd + + + + + + - - - <p><code>Type</code> that partly determines interpretations of <code>typeIntersected</code>, as described in <code>Type::intersectingType</code>.</p> - + + + + + <p>The FeatureInvertings that identify this Feature as their <code>invertingFeature</code>.</p> - - - + + + - - - - - - - <p>A Type with a certain <code>input</code>.</p> + + + + <p>The Feature that owns this Redefinition relationship, which must also be its <code>redefiningFeature</code>.</p> - - + + - - - - - <p>The Disjoinings that identify this Type as their <code>typeDisjoined</code>.</p> - + + + + <p>The Subsettings with a certain Feature as the <code>subsettedFeature</code>.</p> - - + + - - - - <p><code>Conjugation</code> is a <code>Relationship</code> between two types in which the <code>conjugatedType</code> inherits all the <code>Features</code> of the <code>originalType</code>, but with all <code>input</code> and <code>output</code> <code>Features</code> reversed. That is, any <code>Features</code> with a <code>direction</code> <em>in</em> relative to the <code>originalType</code> are considered to have an effective <code>direction</code> of <em>out</em> relative to the <code>conjugatedType</code> and, similarly, <code>Features</code> with <code>direction</code> <em>out</em> in the <code>originalType</code> are considered to have an effective <code>direction</code> of <em>in</em> in the <code>conjugatedType</code>. <code>Features</code> with <code>direction</code> <em>inout</em>, or with no <code>direction</code>, in the <code>originalType</code>, are inherited without change.</p> - -<p>A <code>Type</code> may participate as a <code>conjugatedType</code> in at most one <code>Conjugation</code> relationship, and such a <code>Type</code> may not also be the <code>specific</code> <code>Type</code> in any <code>Specialization</code> relationship.</p> - + + + <p>A <code>TypeFeaturing</code> is a <code>Featuring</code> <code>Relationship</code> in which the <code>featureOfType</code> is the <code>source</code> and the <code>featuringType</code> is the <code>target</code>.</p> - - - - <p>The <code>Type</code> to be conjugated.</p> - + + + + <p>The <code>Feature</code> that is featured by the <code>featuringType</code>. It is the <code>source</code> of the <code>TypeFeaturing</code>.</p> - - + + - - - <p>The <code>Type</code> that is the result of applying <code>Conjugation</code> to the <code>originalType</code>.</p> - + + + <p>The <code>Type</code> that features the <code>featureOfType</code>. It is the <code>target</code> of the <code>TypeFeaturing</code>.</p> - - + + - - - <p>The <code>conjugatedType</code> of this <code>Conjugation</code> that is also its <code>owningRelatedElement</code>.</p> - + + + <p>A <code>featureOfType</code> that is also the <code>owningRelatedElement</code> of this <code>TypeFeaturing</code>.</p> - - + + - - - - - <p>The Disjoinings that identify this Type as their <code>disjoiningType</code>.</p> - - - - - - - - - <p>A Type that owns or inherits the <code>featureMembership</code>.</p> - - - - - - - - - <p>The Types that include this one among their <code>intersectingTypes</code>.</p> + + + + <p>The <code>TypeFeaturings</code> for which a certain <code>Feature</code> is the <code>featureOfType</code>.</p> - - + + - - - <p><code>Differencing</code> is a <code>Relationship</code> that makes its <code>differencingType</code> one of the <code>differencingTypes</code> of its <code>typeDifferenced</code>.</p> + + + <p><code>FeatureTyping</code> is <code>Specialization</code> in which the <code>specific</code> <code>Type</code> is a <code>Feature</code>. This means the set of instances of the (specific) <code>typedFeature</code> is a subset of the set of instances of the (general) <code>type</code>. In the simplest case, the <code>type</code> is a <code>Classifier</code>, whereupon the <code>typedFeature</code> has values that are instances of the <code>Classifier</code>.</p> - - - - <p><code>Type</code> with interpretations partly determined by <code>differencingType</code>, as described in <code>Type::differencingType</code>.</p> - + + + + <p>The <code>Feature</code> that has a <code>type</code> determined by this <code>FeatureTyping</code>.</p> - - + + - - - <p><code>Type</code> that partly determines interpretations of <code>typeDifferenced</code>, as described in <code>Type::differencingType</code>.</p> + + + <p>The <code>Type</code> that is being applied by this <code>FeatureTyping</code>.</p> - - - - - - - <p><code>Unioning</code> is a <code>Relationship</code> that makes its <code>unioningType</code> one of the <code>unioningTypes</code> of its <code>typeUnioned</code>.</p> - - - - - - <p><code>Type</code> with interpretations partly determined by <code>unioningType</code>, as described in <code>Type::unioningType</code>.</p> - - - - - - - - <p><code>Type</code> that partly determines interpretations of <code>typeUnioned</code>, as described in <code>Type::unioningType</code>.</p> - - - - - - - - - - <p>A Type that owns or inherits a FeatureMembership Relationship with the <code>feature</code>.</p> - - - - - - - - <p>A <code>Disjoining</code> is a <code>Relationship</code> between <code>Types</code> asserted to have interpretations that are not shared (disjoint) between them, identified as <code>typeDisjoined</code> and <code>disjoiningType</code>. For example, a <code>Classifier</code> for mammals is disjoint from a <code>Classifier</code> for minerals, and a <code>Feature</code> for people&#39;s parents is disjoint from a <code>Feature</code> for their children.</p> - - - - - - <p><code>Type</code> asserted to be disjoint with the <code>disjoiningType</code>.</p> - - - - - - - - <p><code>Type</code> asserted to be disjoint with the <code>typeDisjoined</code>.</p> - - - - + + - - - <p>A <code>typeDisjoined</code> that is also an <code>owningRelatedElement</code>.</p> + + + <p>A <code>typedFeature</code> that is also the <code>owningRelatedElement</code> of this <code>FeatureTyping</code>.</p> - - + + - - - - <p>The Types that include this one among their <code>unioningTypes</code>.</p> - - - - - - - - - <p>A Type with a certain <code>output</code>.</p> - - - - - - - - - <p>The Specializations with a certain <code>specific</code> Type.</p> - - - - - - - - - - - - - - - <p>The Differencings that identify this Type as their <code>differencingType</code>.</p> - - - - - - - - - - <p>The Conjugations with a certain Type as the <code>originalType</code>.</p> + + + + <p>The Redefinitions with a certain Feature as the <code>redefiningFeature</code>.</p> - - + + - - - - <p>The Intersectings that identify this Type as their <code>intersectingType</code>.</p> + + + + <p>The Redefinitions with a certain Feature as the <code>redefinedFeature</code>.</p> - - + + - - - - <p>The Conjugation corresponding to the <code>conjugatedType</code>.</p> + + + + <p>The FeatureInvertings that identify this Feature as their <code>featureInverted</code>.</p> - - + + - - - <p>A <code>Classifier</code> is a <code>Type</code> that classifies:</p> + + + <p><code>CrossSubsetting</code> is a kind of <code>Subsetting</code> for end <code>Features</code>, as identified by <code>crossingFeature</code>, to subset a chained <code>Feature</code>, identified by <code>crossedFeature.</code> It navigates to instances of the end <code>Feature</code>’s type from instances of other end <code>Feature</code> types on the same <code>owningType</code> (at least two end <code>Features</code> are required for any of them to have a <code>CrossSubsetting</code>).</p> -<ul> - <li>Things (in the universe) regardless of how <code>Features</code> relate them. (These are interpreted semantically as sequences of exactly one thing.)</li> - <li>How the above things are related by <code>Features.</code> (These are interpreted semantically as sequences of multiple things, such that the last thing in the sequence is also classified by the <code>Classifier</code>. Note that this means that a <code>Classifier</code> modeled as specializing a <code>Feature</code> cannot classify anything.)</li> -</ul> +<p>The <code>crossedFeature</code> of a <code>CrossSubsetting</code> must have a feature chain of exactly two <code>Features</code>. The second <code>Feature</code> in the chain is the <code>crossFeature</code> of the <code>crossingFeature</code> (end <code>Feature</code>), which has the same type as the <code>crossingFeature</code>. When the <code>owningType</code> of the <code>crossingFeature</code> has exactly two end <code>Features</code>, the first <code>Feature</code> in the chain of the <code>crossedFeature</code> is the other end <code>Feature</code>. The <code>crossFeature</code>’s <code>featuringType</code> in this case is the other end <code>Feature</code>. When the <code>owningType</code> has more than two end <code>Features</code>, the first <code>Feature</code> in the chain is a <code>Feature</code> that <code>CrossMultiplies</code> all the other end <code>Features</code>, which is also the <code>featuringType</code> of the <code>crossFeature</code>.</p> - +<p>A <code>crossFeature</code> must be owned by its <code>featureCrossing</code> (end <code>Feature</code>) when the <code>featureCrossing</code> <code>owningType</code> has more than two end <code>Features</code>. Otherwise, for exactly two end <code>Features</code>, the <code>crossFeatures</code> of each the ends can instead optionally be inherited by the other end from one of its <code>types</code> or a subsetted <code>Feature</code>.</p> - - - <p>The <code>ownedSubclassifications</code> of a <code>Classifier</code> are its <code>ownedSpecializations</code> that are <code>Subclassifications</code>.</p> + + + <p>The <code>crossedFeature</code> of a <code>CrossSubsetting</code> must have exactly two <code>chainingFeatures</code>. If the <code>crossingFeature</code> of the <code>CrossSubsetting</code> is one of two end <code>Features</code>, then the first <code>chainingFeature</code> must be the other end <code>Feature</code>.</p> - + OCL2.0 - ownedSubclassification = - ownedSpecialization->selectByKind(Subclassification) + crossingFeature.isEnd and crossingFeature.owningType <> null implies + let endFeatures: Sequence(Feature) = crossingFeature.owningType.endFeature in + let chainingFeatures: Sequence(Feature) = crossedFeature.chainingFeature in + chainingFeatures->size() = 2 and + endFeatures->size() = 2 implies + chainingFeatures->at(1) = endFeatures->excluding(crossingFeature)->at(1) - - - <p>If a <code>Classifier</code> has a <code>multiplicity</code>, then the <code>multiplicity</code> must have no <code>featuringTypes</code> (meaning that its domain is implicitly <em>Base::Anything</em>).</p> + + + <p>The <code>crossingFeature</code> of a <code>CrossSubsetting</code> must be an end <code>Feature</code> that is owned by a <code>Type</code> with at least two end <code>Features</code>.</p> - + OCL2.0 - multiplicity <> null implies multiplicity.featuringType->isEmpty() + crossingFeature.isEnd and +crossingFeature.owningType<>null and +crossingFeature.owningType.endFeature ->size() > 1 - - - - <p>The <code>ownedSpecializations</code> of this <code>Classifier</code> that are <code>Subclassifications</code>, for which this <code>Classifier</code> is the <code>subclassifier</code>.</p> + + + + <p>The chained <code>Feature</code> that is cross subset by the <code>crossingFeature</code> of this <code>CrossSubsetting</code>.</p> - - + + - - - - - - <p>The Subclassifications with a certain <code>superclassifier</code>.</p> + + + <p>The end <code>Feature</code> that owns this <code>CrossSubsetting</code> relationship and is also its </code>subsettingFeature</code>.</p> - - - + + + - - - <p><code>Subclassification</code> is <code>Specialization</code> in which both the <code>specific</code> and <code>general</code> <code>Types</code> are <code>Classifier</code>. This means all instances of the specific <code>Classifier</code> are also instances of the general <code>Classifier</code>.</p> - + + + <p><code>FeatureChaining</code> is a <code>Relationship</code> that makes its target <code>Feature</code> one of the <code>chainingFeatures</code> of its owning <code>Feature</code>.</p> - - - - <p>The more <code>general</code> Classifier in this <code>Subclassification</code>.</p> - - - - - - - - <p>The more specific <code>Classifier</code> in this <code>Subclassification</code>.</p> + + + + <p>The <code>Feature</code> whose values partly determine values of <code>featureChained</code>, as described in <code>Feature::chainingFeature</code>.</p> - - + + - - - <p>The <code>Classifier</code> that owns this <code>Subclassification</code> relationship, which must also be its <code>subclassifier</code>.</p> + + + <p>The <code>Feature</code> whose values are partly determined by values of the <code>chainingFeature</code>, as described in <code>Feature::chainingFeature</code>.</p> - - + + - - - - <p>The Subclassifications with a certain <code>subclassifier</code>.</p> - - - + + + + <p>A <code>Type</code> that has the <code>multiplicity</code> as an <code>ownedMember</code>.</p> + + + - - - - <p>The <code>Features</code> that have a particular <code>chainingFeature</code> in their <code>Feature</code> chain, whose values are partly determined by values of the <code>chainingFeature</code>, as described in <code>chainingFeature</code>.</p> - - - + + + + - - - <p><code>FeatureTyping</code> is <code>Specialization</code> in which the <code>specific</code> <code>Type</code> is a <code>Feature</code>. This means the set of instances of the (specific) <code>typedFeature</code> is a subset of the set of instances of the (general) <code>type</code>. In the simplest case, the <code>type</code> is a <code>Classifier</code>, whereupon the <code>typedFeature</code> has values that are instances of the <code>Classifier</code>.</p> + + + <p><code>Redefinition</code> is a kind of <code>Subsetting</code> that requires the <code>redefinedFeature</code> and the <code>redefiningFeature</code> to have the same values (on each instance of the domain of the <code>redefiningFeature</code>). This means any restrictions on the <code>redefiningFeature</code>, such as <code>type</code> or <code>multiplicity</code>, also apply to the <code>redefinedFeature</code> (on each instance of the domain of the <code>redefiningFeature</code>), and vice versa. The <code>redefinedFeature</code> might have values for instances of the domain of the <code>redefiningFeature</code>, but only as instances of the domain of the <code>redefinedFeature</code> that happen to also be instances of the domain of the <code>redefiningFeature</code>. This is supported by the constraints inherited from <code>Subsetting</code> on the domains of the <code>redefiningFeature</code> and <code>redefinedFeature</code>. However, these constraints are narrowed for <code>Redefinition</code> to require the <code>owningTypes</code> of the <code>redefiningFeature</code> and <code>redefinedFeature</code> to be different and the <code>redefinedFeature</code> to not be inherited into the <code>owningNamespace</code> of the <code>redefiningFeature</code>.This enables the <code>redefiningFeature</code> to have the same name as the <code>redefinedFeature</code>, if desired.</p> - - - - <p>The <code>Feature</code> that has a <code>type</code> determined by this <code>FeatureTyping</code>.</p> + + + <p>The <code>redefiningFeature</code> of a <code>Redefinition</code> must have at least one <code>featuringType</code> that is not also a <code>featuringType</code> of the <code>redefinedFeature</code>.</p> - - - - - - <p>The <code>Type</code> that is being applied by this <code>FeatureTyping</code>.</p> + + OCL2.0 + let anythingType: Type = + redefiningFeature.resolveGlobal('Base::Anything').modelElement.oclAsType(Type) in +-- Including "Anything" accounts for implicit featuringType of Features +-- with no explicit featuringType. +let redefiningFeaturingTypes: Set(Type) = + if redefiningFeature.isVariable then Set{redefiningFeature.owningType} + else redefiningFeature.featuringTypes->asSet()->including(anythingType) + endif in +let redefinedFeaturingTypes: Set(Type) = + if redefinedFeature.isVariable then Set{redefinedFeature.owningType} + else redefinedFeature.featuringTypes->asSet()->including(anythingType) + endif in +redefiningFeaturingTypes <> redefinedFeaturingType + + + + + <p>If the <code>redefinedFeature</code> of a <code>Redefinition</code> has a direction of <code>in</code> or <code>out</code> (relative to any <code>featuringType</code> of the <code>redefiningFeature</code> or the <code>owningType</code>, if the <code>redefiningFeature</code> has <code>isVariable = true</code>), then the <code>redefiningFeature</code> must have the same <code>direction</code>. If the <code>redefinedFeature</code> has a direction of <code>inout</code>, then the <code>redefiningFeature</code> must have a non-null <code>direction</code>. (Note: the direction of the <code>redefinedFeature</code> relative to a <code>featuringType</code> of the <code>redefiningFeature</code> is the direction it would have if it had been inherited and not redefined.)</p> + + + OCL2.0 + let featuringTypes : Sequence(Type) = + if redefiningFeature.isVariable then Sequence{redefiningFeature.owningType} + else redefiningFeature.featuringType + endif in +featuringTypes->forAll(t | + let direction : FeatureDirectionKind = t.directionOf(redefinedFeature) in + ((direction = FeatureDirectionKind::_'in' or + direction = FeatureDirectionKind::out) implies + redefiningFeature.direction = direction) + and + (direction = FeatureDirectionKind::inout implies + redefiningFeature.direction <> null)) + + + + + <p>If the redefinedFeature of a Redefinition has isEnd = true, then the redefiningFeature must have isEnd = true.</p> + + + OCL2.0 + redefinedFeature.isEnd implies redefiningFeature.isEnd + + + + + + <p>The <code>Feature</code> that is redefining the <code>redefinedFeature</code> of this <code>Redefinition</code>.</p> - - + + - - - <p>A <code>typedFeature</code> that is also the <code>owningRelatedElement</code> of this <code>FeatureTyping</code>.</p> + + + <p>The <code>Feature</code> that is redefined by the <code>redefiningFeature</code> of this <code>Redefinition</code>.</p> + - - + + - - - <p><code>EndFeatureMembership</code> is a <code>FeatureMembership</code> that requires its <code>memberFeature</code> be owned and have <code>isEnd = true</code>.</p> + + + + + <p>The FeatureTypings for which a certain Feature is the <code>typedFeature</code>.</p> - - - - <p>The <code>ownedMemberFeature</code> of an <code>EndFeatureMembership</code> must be an end <code>Feature</code>.</p> - - OCL2.0 - ownedMemberFeature.isEnd - - - - - - - + + + - - - - <p>The <code>Features</code> that identify a <code>Feature</code> as their <code>featureTarget</code>.</p> - - - <p>The <code>Features</code> that are the same as or the <code>chainedFeature</code> for a <code>targetFeature</code>.</p> + + + + <p>The Features for which a certain Type is a <code>featuringType</code>.</p> - - + + - - - <p>Relationship for chainedFeatures.</p> - - - - <p>The <code>FeatureChainings</code> that identify a <code>Feature</code> as their <code>chainingFeature</code>.</p> + + + + <p>The <code>Features</code> that have a particular <code>chainingFeature</code> in their <code>Feature</code> chain, whose values are partly determined by values of the <code>chainingFeature</code>, as described in <code>chainingFeature</code>.</p> - - + + + - - - - <p>The Feature that owns this Redefinition relationship, which must also be its <code>redefiningFeature</code>.</p> + + + + <p>The Subsettings with a certain Feature as the <code>subsettingFeature</code>.</p> - - + + @@ -4646,50 +4748,42 @@ endif - - - - <p>The Subsettings with a certain Feature as the <code>subsettedFeature</code>.</p> - - - - - - - - - <p>A <code>TypeFeaturing</code> is a <code>Featuring</code> <code>Relationship</code> in which the <code>featureOfType</code> is the <code>source</code> and the <code>featuringType</code> is the <code>target</code>.</p> + + + <p><code>ReferenceSubsetting</code> is a kind of <code>Subsetting</code> in which the <code>referencedFeature</code> is syntactically distinguished from other <code>Features</code> subsetted by the <code>referencingFeature</code>. <code>ReferenceSubsetting</code> has the same semantics as <code>Subsetting</code>, but the <code>referencedFeature</code> may have a special purpose relative to the <code>referencingFeature</code>. For instance, <code>ReferenceSubsetting</code> is used to identify the <code>relatedFeatures</code> of a <code>Connector</code>.</p> + +<p><code>ReferenceSubsetting</code> is always an <code>ownedRelationship</code> of its <code>referencingFeature</code>. A <code>Feature</code> can have at most one <code>ownedReferenceSubsetting</code>.</p> + - - - - <p>The <code>Feature</code> that is featured by the <code>featuringType</code>. It is the <code>source</code> of the <code>TypeFeaturing</code>.</p> - - - - - - - <p>The <code>Type</code> that features the <code>featureOfType</code>. It is the <code>target</code> of the <code>TypeFeaturing</code>.</p> + + + + <p>The <code>Feature</code> that is referenced by the <code>referencingFeature</code> of this <code>ReferenceSubsetting</code>.</p> + - - + + - - - <p>A <code>featureOfType</code> that is also the <code>owningRelatedElement</code> of this <code>TypeFeaturing</code>.</p> + + + <p>The <code>Feature</code> that owns this <code>ReferenceSubsetting</code> relationship, which is also its <code>subsettingFeature</code>.</p> + - - + + - - - - <p>The Features for which a certain Type is a <code>featuringType</code>.</p> + + + + <p>Relationship for chainedFeatures.</p> + + + + <p>The <code>FeatureChainings</code> that identify a <code>Feature</code> as their <code>chainingFeature</code>.</p> - - + + @@ -4753,184 +4847,22 @@ endif - - - - <p>The <code>TypeFeaturings</code> for which a certain <code>Feature</code> is the <code>featureOfType</code>.</p> + + + + <p>The FeatureTyping relating this Type to a Feature.</p> - - + + - - - - <p>The FeatureTypings for which a certain Feature is the <code>typedFeature</code>.</p> - - - - - - - - - - <p>The Redefinitions with a certain Feature as the <code>redefiningFeature</code>.</p> - - - - - - - - - - <p>The Features for which a certain Type is a <code>type</code>.</p> - - - - - - - - <p><code>CrossSubsetting</code> is a kind of <code>Subsetting</code> for end <code>Features</code>, as identified by <code>crossingFeature</code>, to subset a chained <code>Feature</code>, identified by <code>crossedFeature.</code> It navigates to instances of the end <code>Feature</code>’s type from instances of other end <code>Feature</code> types on the same <code>owningType</code> (at least two end <code>Features</code> are required for any of them to have a <code>CrossSubsetting</code>).</p> - -<p>The <code>crossedFeature</code> of a <code>CrossSubsetting</code> must have a feature chain of exactly two <code>Features</code>. The second <code>Feature</code> in the chain is the <code>crossFeature</code> of the <code>crossingFeature</code> (end <code>Feature</code>), which has the same type as the <code>crossingFeature</code>. When the <code>owningType</code> of the <code>crossingFeature</code> has exactly two end <code>Features</code>, the first <code>Feature</code> in the chain of the <code>crossedFeature</code> is the other end <code>Feature</code>. The <code>crossFeature</code>’s <code>featuringType</code> in this case is the other end <code>Feature</code>. When the <code>owningType</code> has more than two end <code>Features</code>, the first <code>Feature</code> in the chain is a <code>Feature</code> that <code>CrossMultiplies</code> all the other end <code>Features</code>, which is also the <code>featuringType</code> of the <code>crossFeature</code>.</p> - -<p>A <code>crossFeature</code> must be owned by its <code>featureCrossing</code> (end <code>Feature</code>) when the <code>featureCrossing</code> <code>owningType</code> has more than two end <code>Features</code>. Otherwise, for exactly two end <code>Features</code>, the <code>crossFeatures</code> of each the ends can instead optionally be inherited by the other end from one of its <code>types</code> or a subsetted <code>Feature</code>.</p> - - - - <p>The <code>crossedFeature</code> of a <code>CrossSubsetting</code> must have exactly two <code>chainingFeatures</code>. If the <code>crossingFeature</code> of the <code>CrossSubsetting</code> is one of two end <code>Features</code>, then the first <code>chainingFeature</code> must be the other end <code>Feature</code>.</p> - - - OCL2.0 - crossingFeature.isEnd and crossingFeature.owningType <> null implies - let endFeatures: Sequence(Feature) = crossingFeature.owningType.endFeature in - let chainingFeatures: Sequence(Feature) = crossedFeature.chainingFeature in - chainingFeatures->size() = 2 and - endFeatures->size() = 2 implies - chainingFeatures->at(1) = endFeatures->excluding(crossingFeature)->at(1) - - - - - <p>The <code>crossingFeature</code> of a <code>CrossSubsetting</code> must be an end <code>Feature</code> that is owned by a <code>Type</code> with at least two end <code>Features</code>.</p> - - - OCL2.0 - crossingFeature.isEnd and -crossingFeature.owningType<>null and -crossingFeature.owningType.endFeature ->size() > 1 - - - - - - <p>The chained <code>Feature</code> that is cross subset by the <code>crossingFeature</code> of this <code>CrossSubsetting</code>.</p> - - - - - - - - <p>The end <code>Feature</code> that owns this <code>CrossSubsetting</code> relationship and is also its </code>subsettingFeature</code>.</p> - - - - - - - - - <p>The Subsettings with a certain Feature as the <code>subsettingFeature</code>.</p> - - - - - - - - - <p><code>Redefinition</code> is a kind of <code>Subsetting</code> that requires the <code>redefinedFeature</code> and the <code>redefiningFeature</code> to have the same values (on each instance of the domain of the <code>redefiningFeature</code>). This means any restrictions on the <code>redefiningFeature</code>, such as <code>type</code> or <code>multiplicity</code>, also apply to the <code>redefinedFeature</code> (on each instance of the domain of the <code>redefiningFeature</code>), and vice versa. The <code>redefinedFeature</code> might have values for instances of the domain of the <code>redefiningFeature</code>, but only as instances of the domain of the <code>redefinedFeature</code> that happen to also be instances of the domain of the <code>redefiningFeature</code>. This is supported by the constraints inherited from <code>Subsetting</code> on the domains of the <code>redefiningFeature</code> and <code>redefinedFeature</code>. However, these constraints are narrowed for <code>Redefinition</code> to require the <code>owningTypes</code> of the <code>redefiningFeature</code> and <code>redefinedFeature</code> to be different and the <code>redefinedFeature</code> to not be inherited into the <code>owningNamespace</code> of the <code>redefiningFeature</code>.This enables the <code>redefiningFeature</code> to have the same name as the <code>redefinedFeature</code>, if desired.</p> - - - - - <p>The <code>redefiningFeature</code> of a <code>Redefinition</code> must have at least one <code>featuringType</code> that is not also a <code>featuringType</code> of the <code>redefinedFeature</code>.</p> - - - OCL2.0 - let anythingType: Type = - redefiningFeature.resolveGlobal('Base::Anything').modelElement.oclAsType(Type) in --- Including "Anything" accounts for implicit featuringType of Features --- with no explicit featuringType. -let redefiningFeaturingTypes: Set(Type) = - if redefiningFeature.isVariable then Set{redefiningFeature.owningType} - else redefiningFeature.featuringTypes->asSet()->including(anythingType) - endif in -let redefinedFeaturingTypes: Set(Type) = - if redefinedFeature.isVariable then Set{redefinedFeature.owningType} - else redefinedFeature.featuringTypes->asSet()->including(anythingType) - endif in -redefiningFeaturingTypes <> redefinedFeaturingType - - - - - <p>If the <code>redefinedFeature</code> of a <code>Redefinition</code> has a direction of <code>in</code> or <code>out</code> (relative to any <code>featuringType</code> of the <code>redefiningFeature</code> or the <code>owningType</code>, if the <code>redefiningFeature</code> has <code>isVariable = true</code>), then the <code>redefiningFeature</code> must have the same <code>direction</code>. If the <code>redefinedFeature</code> has a direction of <code>inout</code>, then the <code>redefiningFeature</code> must have a non-null <code>direction</code>. (Note: the direction of the <code>redefinedFeature</code> relative to a <code>featuringType</code> of the <code>redefiningFeature</code> is the direction it would have if it had been inherited and not redefined.)</p> - - - OCL2.0 - let featuringTypes : Sequence(Type) = - if redefiningFeature.isVariable then Sequence{redefiningFeature.owningType} - else redefiningFeature.featuringType - endif in -featuringTypes->forAll(t | - let direction : FeatureDirectionKind = t.directionOf(redefinedFeature) in - ((direction = FeatureDirectionKind::_'in' or - direction = FeatureDirectionKind::out) implies - redefiningFeature.direction = direction) - and - (direction = FeatureDirectionKind::inout implies - redefiningFeature.direction <> null)) - - - - - <p>If the redefinedFeature of a Redefinition has isEnd = true, then the redefiningFeature must have isEnd = true.</p> - - - OCL2.0 - redefinedFeature.isEnd implies redefiningFeature.isEnd - - - - - - <p>The <code>Feature</code> that is redefining the <code>redefinedFeature</code> of this <code>Redefinition</code>.</p> - - - - - - - - <p>The <code>Feature</code> that is redefined by the <code>redefiningFeature</code> of this <code>Redefinition</code>.</p> - - - - - - - - - - <p>A <code>Type</code> that has the <code>multiplicity</code> as an <code>ownedMember</code>.</p> + + + + <p>The <code>ReferenceSubsetting</code> with a certain <code>Feature</code> as the <code>referencedFeature</code>.</p> - - + + @@ -4942,65 +4874,6 @@ featuringTypes->forAll(t | - - - - <p>The FeatureTyping relating this Type to a Feature.</p> - - - - - - - - - <p>The Redefinitions with a certain Feature as the <code>redefinedFeature</code>.</p> - - - - - - - - - - <p>The <code>CrossSubsetting</code> with a certain <code>Feature</code> as the <code>crossedFeature</code>.</p> - - - - - - - - <p><code>FeatureChaining</code> is a <code>Relationship</code> that makes its target <code>Feature</code> one of the <code>chainingFeatures</code> of its owning <code>Feature</code>.</p> - - - - - <p>The <code>Feature</code> whose values partly determine values of <code>featureChained</code>, as described in <code>Feature::chainingFeature</code>.</p> - - - - - - - - <p>The <code>Feature</code> whose values are partly determined by values of the <code>chainingFeature</code>, as described in <code>Feature::chainingFeature</code>.</p> - - - - - - - - - - <p>The <code>ReferenceSubsetting</code> with a certain <code>Feature</code> as the <code>referencedFeature</code>.</p> - - - - - <p>A <code>FeatureInverting</code> is a <code>Relationship</code> between <code>Features</code> asserting that their interpretations (sequences) are the reverse of each other, identified as <code>featureInverted</code> and <code>invertingFeature</code>. For example, a <code>Feature</code> identifying each person&#39;s parents is the inverse of a <code>Feature</code> identifying each person&#39;s children. A person identified as a parent of another will identify that other as one of their children.</p> @@ -5030,1484 +4903,1317 @@ featuringTypes->forAll(t | - - - <p>A <code>Feature</code> is a <code>Type</code> that classifies relations between multiple things (in the universe). The domain of the relation is the intersection of the <code>featuringTypes</code> of the <code>Feature</code>. (The domain of a <code>Feature</code> with no <code>featuringTyps</code> is implicitly the most general <code>Type</code> <em><code>Base::Anything</code></em> from the Kernel Semantic Library.) The co-domain of the relation is the intersection of the <code>types</code> of the <code>Feature</code>. - -<p>In the simplest cases, the <code>featuringTypes</code> and <code>types</code> are <code>Classifiers</code> and the <code>Feature</code> relates two things, one from the domain and one from the range. Examples include cars paired with wheels, people paired with other people, and cars paired with numbers representing the car length.</p> - -<p>Since <code>Features</code> are <code>Types</code>, their <code>featuringTypes</code> and <code>types</code> can be <code>Features</code>. In this case, the <code>Feature</code> effectively classifies relations between relations, which can be interpreted as the sequence of things related by the domain <code>Feature</code> concatenated with the sequence of things related by the co-domain <code>Feature</code>.</p> - -<p>The <em>values</em> of a <code>Feature</code> for a given instance of its domain are all the instances of its co-domain that are related to that domain instance by the <code>Feature</code>. The values of a <code>Feature</code> with <code>chainingFeatures</code> are the same as values of the last <code>Feature</code> in the chain, which can be found by starting with values of the first <code>Feature</code>, then using those values as domain instances to obtain valus of the second <code>Feature</code>, and so on, to values of the last <code>Feature</code>.</p> - - - - - <p>The <code>ownedRedefinitions</code> of a <code>Feature</code> are its <code>ownedSubsettings</code> that are <code>Redefinitions</code>.</p> - - - OCL2.0 - ownedRedefinition = ownedSubsetting->selectByKind(Redefinition) - - - - - <p>The <code>ownedTypeFeaturings</code> of a <code>Feature</code> are its <code>ownedRelationships</code> that are <code>TypeFeaturings</code> and which have the <code>Feature</code> as their <code>featureOfType</code>.</p> + + + + <p>The <code>CrossSubsetting</code> with a certain <code>Feature</code> as the <code>crossedFeature</code>.</p> - - OCL2.0 - ownedTypeFeaturing = ownedRelationship->selectByKind(TypeFeaturing)-> - select(tf | tf.featureOfType = self) - - - - - <p>The <code>ownedSubsettings</code> of a <code>Feature</code> are its <code>ownedSpecializations</code> that are <code>Subsettings</code>.</p> - - - OCL2.0 - ownedSubsetting = ownedSpecialization->selectByKind(Subsetting) - - - - - <p>The <code>ownedTypings</code> of a <code>Feature</code> are its <code>ownedSpecializations</code> that are <code>FeatureTypings</code>.</p> + + + + + + + + + <p>The Features for which a certain Type is a <code>type</code>.</p> - - OCL2.0 - ownedTyping = ownedGeneralization->selectByKind(FeatureTyping) - - - - - <p>The <code>types</code> of a <code>Feature</code> are the union of the <code>types</code> of its <code>typings</code> and the <code>types</code> of the <code>Features</code> it subsets, with all redundant supertypes removed. If the <code>Feature</code> has <code>chainingFeatures</code>, then the union also includes the types of the last <code>chainingFeature</code>.</p> + + + + + + + + <p>The <code>Features</code> that identify a <code>Feature</code> as their <code>featureTarget</code>.</p> - - OCL2.0 - type = - let types : OrderedSet(Types) = OrderedSet{self}-> - -- Note: The closure operation automatically handles circular relationships. - closure(typingFeatures()).typing.type->asOrderedSet() in - types->reject(t1 | types->exist(t2 | t2 <> t1 and t2.specializes(t1))) - - - - - <p>If a <code>Feature</code> has a <code>multiplicity</code>, then the <code>featuringTypes</code> of the <code>multiplicity</code> must be the same as those of the <code>Feature</code> itself.</p> + + <p>The <code>Features</code> that are the same as or the <code>chainedFeature</code> for a <code>targetFeature</code>.</p> - - OCL2.0 - multiplicity <> null implies multiplicity.featuringType = featuringType - - - - - <p>A <code>Feature</code> must directly or indirectly specialize <code><em>Base::things</em></code> from the Kernel Semantic Library.</p> + + + + + + + <p>A <code>Multiplicity</code> is a <code>Feature</code> whose co-domain is a set of natural numbers giving the allowed cardinalities of each <code>typeWithMultiplicity</code>. The <em>cardinality</em> of a <code>Type</code> is defined as follows, depending on whether the <code>Type</code> is a <code>Classifier</code> or <code>Feature</code>. +<ul> +<li><code>Classifier</code> – The number of basic instances of the <code>Classifier</code>, that is, those instances representing things, which are not instances of any subtypes of the <code>Classifier</code> that are <code>Features</code>. +<li><code>Features</code> – The number of instances with the same featuring instances. In the case of a <code>Feature</code> with a <code>Classifier</code> as its <code>featuringType</code>, this is the number of values of <code>Feature</code> for each basic instance of the <code>Classifier</code>. Note that, for non-unique <code>Features</code>, all duplicate values are included in this count.</li> +</ul> + +<p><code>Multiplicity</code> co-domains (in models) can be specified by <code>Expression</code> that might vary in their results. If the <code>typeWithMultiplicity</code> is a <code>Classifier</code>, the domain of the <code>Multiplicity</code> shall be <em><code>Base::Anything</code></em>. If the <code>typeWithMultiplicity</code> is a <code>Feature</code>, the <code>Multiplicity</code> shall have the same domain as the <code>typeWithMultiplicity</code>.</p> + + + + + <p>If the <code>owningNamespace</code> of a <code>Multiplicity</code> is a <code>Feature</code>, then the <code>Multiplicity</code> must have the same <code>featuringTypes</code> as that <code>Feature</code>. Otherwise, it must have no <code>featuringTypes</code> (meaning that it is implicitly featured by the base <code>Classifier</code> <em><code>Anything</code></em>).</p> - + OCL2.0 - specializesFromLibrary('Base::things') - - - - - <p>A <code>Feature</code> cannot be one of its own <code>chainingFeatures</code>.</p> - - - English - chainingFeature->excludes(self) + if owningNamespace <> null and owningNamespace.oclIsKindOf(Feature) then + featuringType = + owningNamespace.oclAsType(Feature).featuringType +else + featuringType->isEmpty() +endif - - - <p>The <code>ownedFeatureChainings</code> of a <code>Feature</code> are the <code>ownedRelationships</code> that are <code>FeatureChainings</code>.</p> + + + <p>A <code>Multiplicity</code> must directly or indirectly specialize the <code>Feature</code> <code><em>Base::naturals</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - ownedFeatureChaining = ownedRelationship->selectByKind(FeatureChaining) + specializesFromLibrary('Base::naturals') - - - <p>The <code>chainingFeatures</code> of a <code>Feature</code> are the <code>chainingFeatures</code> of its <code>ownedFeatureChainings</code>.</p> + + + + + + + + <p>The Specializations with a certain <code>specific</code> Type.</p> - - OCL2.0 - chainingFeature = ownedFeatureChaining.chainingFeature - - - - - A <code>Feature</code> must have either no <code>chainingFeatures</code> or more than one. + + + + + + + + <p>A Type that owns or inherits a FeatureMembership Relationship with the <code>feature</code>.</p> - - OCL2.0 - chainingFeature->size() <> 1 - - - - - <p>If a <code>Feature</code> has <code>isEnd = true</code> and an <code>owningType</code> that is not empty, then, for each direct supertype of its <code>owningType</code>, it must redefine the <code>endFeature</code> at the same position, if any.</p> + + + + + + + + + <p>The Type that inherits the <code>inheritedMembership</code>.</p> - - OCL2.0 - isEnd and owningType <> null implies - let i : Integer = - owningType.ownedEndFeature->indexOf(self) in - owningType.ownedSpecialization.general-> - forAll(supertype | - supertype.endFeature->size() >= i implies - redefines(supertype.endFeature->at(i)) - - - - - <p>If a <code>Feature</code> has a <code>FeatureValue</code>, no <code>ownedSpecializations</code> that are not implied, and is not directed, then it must specialize the <code>result</code> of the <code>value</code> <code>Expression</code> of the <code>FeatureValue</code>.</p> + + + + + + + + <p>A Type that owns or inherits the <code>featureMembership</code>.</p> - - OCL2.0 - direction = null and -ownedSpecializations->forAll(isImplied) implies - ownedMembership-> - selectByKind(FeatureValue)-> - forAll(fv | specializes(fv.value.result)) - - - - - <p>If a <code>Feature</code> has <code>isEnd = true</code> and an <code>owningType</code> that is an <code>Association</code> or a <code>Connector</code>, then it must directly or indirectly specialize <code><em>Links::Link::participant</em></code> from the Kernel Semantic Library.</p> + + + + + + + <p><code>Conjugation</code> is a <code>Relationship</code> between two types in which the <code>conjugatedType</code> inherits all the <code>Features</code> of the <code>originalType</code>, but with all <code>input</code> and <code>output</code> <code>Features</code> reversed. That is, any <code>Features</code> with a <code>direction</code> <em>in</em> relative to the <code>originalType</code> are considered to have an effective <code>direction</code> of <em>out</em> relative to the <code>conjugatedType</code> and, similarly, <code>Features</code> with <code>direction</code> <em>out</em> in the <code>originalType</code> are considered to have an effective <code>direction</code> of <em>in</em> in the <code>conjugatedType</code>. <code>Features</code> with <code>direction</code> <em>inout</em>, or with no <code>direction</code>, in the <code>originalType</code>, are inherited without change.</p> + +<p>A <code>Type</code> may participate as a <code>conjugatedType</code> in at most one <code>Conjugation</code> relationship, and such a <code>Type</code> may not also be the <code>specific</code> <code>Type</code> in any <code>Specialization</code> relationship.</p> + + + + + + <p>The <code>Type</code> to be conjugated.</p> + - - OCL2.0 - isEnd and owningType <> null and -(owningType.oclIsKindOf(Association) or - owningType.oclIsKindOf(Connector)) implies - specializesFromLibrary('Links::Link::participant') - - - - - <p>A composite <code>Feature</code> typed by a <code>Structure</code>, and whose <code>ownedType</code> is a <code>Structure</code> or another <code>Feature</code> typed by a <code>Structure</code> must directly or indirectly specialize <em><code>Objects::Object::subobjects</code></em>. + + + + + + <p>The <code>Type</code> that is the result of applying <code>Conjugation</code> to the <code>originalType</code>.</p> + - - OCL2.0 - isComposite and -ownedTyping.type->includes(oclIsKindOf(Structure)) and -owningType <> null and -(owningType.oclIsKindOf(Structure) or - owningType.type->includes(oclIsKindOf(Structure))) implies - specializesFromLibrary('Occurrence::Occurrence::suboccurrences') - - - - - <p>If a <code>Feature</code> has an <code>ownedTyping</code> relationship to a <code>Class</code>, then it must directly or indirectly specialize <code><em>Occurrences::occurrences</em></code> from the Kernel Semantic Library.</p> + + + + + + <p>The <code>conjugatedType</code> of this <code>Conjugation</code> that is also its <code>owningRelatedElement</code>.</p> + - - OCL2.0 - ownedTyping.type->exists(selectByKind(Class)) implies - specializesFromLibrary('Occurrences::occurrences') - - - - - <p>A composite <code>Feature</code> that has an <code>ownedTyping</code> relationship to a <code>Class</code>, and whose <code>ownedType</code> is a <code>Class</code> or another <code>Feature</code> typed by a <code>Class</code>, must directly or indirectly specialize <em><code>Occurrences::Occurrence::suboccurrences</code></em>. + + + + + + + + <p>The Disjoinings that identify this Type as their <code>disjoiningType</code>.</p> - - OCL2.0 - isComposite and -ownedTyping.type->includes(oclIsKindOf(Class)) and -owningType <> null and -(owningType.oclIsKindOf(Class) or - owningType.oclIsKindOf(Feature) and - owningType.oclAsType(Feature).type-> - exists(oclIsKindOf(Class))) implies - specializesFromLibrary('Occurrence::Occurrence::suboccurrences') - - - - - <p>If a <code>Feature</code> has an <code>ownedTyping</code> relationship to a <code>DataType</code>, then it must directly or indirectly specialize <code><em>Base::dataValues</em></code> from the Kernel Semantic Library.</p> - - - OCL2.0 - ownedTyping.type->exists(selectByKind(DataType)) implies - specializesFromLibrary('Base::dataValues') - - - - - <p>If a <code>Feature</code> is the first <code>ownedFeature</code> of a first or second <code>FlowEnd</code>, then it must directly or indirectly specialize either <em><code>Transfers::Transfer::source::sourceOutput</code></em> or <em><code>Transfers::Transfer::target::targetInput</code></em>, respectively, from the Kernel Semantic Library.</p> - - - OCL2.0 - owningType <> null and -owningType.oclIsKindOf(FlowEnd) and -owningType.ownedFeature->at(1) = self implies - let flowType : Type = owningType.owningType in - flowType <> null implies - let i : Integer = - flowType.ownedFeature.indexOf(owningType) in - (i = 1 implies - redefinesFromLibrary('Transfers::Transfer::source::sourceOutput')) and - (i = 2 implies - redefinesFromLibrary('Transfers::Transfer::source::targetInput')) - - - - - - <p>If a <code>Feature</code> is a <code>parameter</code> of an <code>owningType</code> that is a <code>Behavior</code> or <code>Step</code>, but <em>not</em> -</p> -<ul> - <li>A <code>result</code> <code>parameter</code></li> - <li>A <code>parameter</code> of an <code>InvocationExpression</code>, with at least one non-implied <code>ownedRedefinition</code></li> -</ul> -<p>then, for each direct supertype of its <code>owningType</code> that is also a <code>Behavior</code> or <code>Step</code>, it must redefine the <code>parameter</code> at the same position, if any.</p> + + + + + + + + + + + + + + + <p>The Differencings that identify this Type as their <code>differencingType</code>.</p> - - OCL2.0 - owningType <> null and -not owningFeatureMembership. - oclIsKindOf(ReturnParameterMembership) and -(owningType.oclIsKindOf(Behavior) or - owningType.oclIsKindOf(Step) and - (owningType.oclIsKindOf(InvocationExpression) implies - not ownedRedefinition->exists(not isImplied)) -implies - let i : Integer = - owningType.ownedFeature->select(direction <> null)-> - reject(owningFeatureMembership. - oclIsKindOf(ReturnParameterMembership))-> - indexOf(self) in - owningType.ownedSpecialization.general-> - forAll(supertype | - let ownedParameters : Sequence(Feature) = - supertype.ownedFeature->select(direction <> null)-> - reject(owningFeatureMembership. - oclIsKindOf(ReturnParameterMembership)) in - ownedParameters->size() >= i implies - redefines(ownedParameters->at(i)) - - - - - <p>If a <code>Feature</code> has an <code>ownedTyping</code> relationship to a <code>Structure</code>, then it must directly or indirectly specialize <code><em>Objects::objects</em></code> from the Kernel Semantics Library.</p> + + + + + + + + <p>A Type that has an EndFeatureMembership in which the <code>endFeature</code> is a <code>memberFeature</code>.</p> - - OCL2.0 - ownedTyping.type->exists(selectByKind(Structure)) implies - specializesFromLibary('Objects::objects') - - - - - <p>If a <code>Feature</code> is a <code>result</code> <code>parameter</code> of an <code>owningType</code> that is a <code>Function</code> or <code>Expression</code>, then, for each direct supertype of its <code>owningType</code> that is also a <code>Function</code> or <code>Expression</code>, it must redefine the <code>result</code> <code>parameter</code>.</p> + + + + + + + + <p>A Type with a certain <code>input</code>.</p> - - OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(Function) and - self = owningType.oclAsType(Function).result or - owningType.oclIsKindOf(Expression) and - self = owningType.oclAsType(Expression).result) implies - owningType.ownedSpecialization.general-> - select(oclIsKindOf(Function) or oclIsKindOf(Expression))-> - forAll(supertype | - redefines( - if superType.oclIsKindOf(Function) then - superType.oclAsType(Function).result - else - superType.oclAsType(Expression).result - endif) - - - - - <p>The <code>ownedFeatureInvertings</code> of a <code>Feature</code> are its <code>ownedRelationships</code> that are <code>FeatureInvertings</code>.</p> + + + + + + + + <p>A Type that has an <code>inheritedMembership</code> with the <code>inheritedFeature</code> as its <code>memberFeature</code>.</p> - - OCL2.0 - ownedFeatureInverting = ownedRelationship->selectByKind(FeatureInverting)-> - select(fi | fi.featureInverted = self) - - - - - The <code>featuringTypes</code> of a <code>Feature</code> include the <code>featuringTypes</code> of all the <code>typeFeaturings</code> of the <code>Feature</code>. If the <code>Feature</code> has <code>chainingFeatures</code>, then its <code>featuringTypes</code> also include the <code>featuringTypes</code> of the first <code>chainingFeature</code>. + + + + + + + + <p>The Types that include this one among their <code>intersectingTypes</code>.</p> - - OCL2.0 - featuringType = - let featuringTypes : OrderedSet(Type) = - featuring.type->asOrderedSet() in - if chainingFeature->isEmpty() then featuringTypes - else - featuringTypes-> - union(chainingFeature->first().featuringType)-> - asOrderedSet() - endif - - - - - <p>The <code>ownedReferenceSubsetting</code> of a <code>Feature</code> is the first -<code>ownedSubsetting</code> that is a <code>ReferenceSubsetting</code> (if any).</p> + + + + + + + + + <p>The Disjoinings that identify this Type as their <code>typeDisjoined</code>.</p> + - - OCL2.0 - ownedReferenceSubsetting = - let referenceSubsettings : OrderedSet(ReferenceSubsetting) = - ownedSubsetting->selectByKind(ReferenceSubsetting) in - if referenceSubsettings->isEmpty() then null - else referenceSubsettings->first() endif - - - - - <p>A <code>Feature</code> must have at most one <code>ownedSubsetting</code> that is an <code>ReferenceSubsetting</code>.</p> + + + + + + + + <p>The Types that include this one among their <code>unioningTypes</code>.</p> - - OCL2.0 - ownedSubsetting->selectByKind(ReferenceSubsetting)->size() <= 1 - - - - - <p>Each <code>chainingFeature</code> (other than the first) must be featured within the previous <code>chainingFeature</code>.</p> + + + + + + + + <p>The Unionings that identify all these Types as their <code>unioningType</code>.</p> - - OCL2.0 - Sequence{2..chainingFeature->size()}->forAll(i | - chainingFeature->at(i).isFeaturedWithin(chainingFeature->at(i-1))) + + + + + + + <p>A <code>FeatureMembership</code> is an <code>OwningMembership</code> between an <code>ownedMemberFeature</code> and an <code>owningType</code>. If the <code>ownedMemberFeature</code> has <code>isVariable = false</code>, then the <code>FeatureMembership</code> implies that the <code>owningType</code> is also a <code>featuringType</code> of the <code>ownedMemberFeature</code>. If the <code>ownedMemberFeature</code> has <code>isVariable = true</code>, then the <code>FeatureMembership</code> implies that the <code>ownedMemberFeature</code> is featured by the <em><code>snapshots</code></em> of the <code>owningType</code>, which must specialize the Kernel Semantic Library base class <em><code>Occurrence</code></em>.</p> + + + + + + <p>The <code>Type</code> that owns this <code>FeatureMembership</code>.</p> - - - - - <p>If a <code>Feature</code> has <code>isPortion = true</code>, an <code>ownedTyping </code> relationship to a <code>Class</code>, and an <code>owningType</code> that is a <code>Class</code> or another <code>Feature</code> typed by a <code>Class</code>, then it must directly or indirectly specialize <em><code>Occurrences::Occurrence::portions</code></em> from the Kernel Semantic Library.</p> - - OCL2.0 - isPortion and -ownedTyping.type->includes(oclIsKindOf(Class)) and -owningType <> null and -(owningType.oclIsKindOf(Class) or - owningType.oclIsKindOf(Feature) and - owningType.oclAsType(Feature).type-> - exists(oclIsKindOf(Class))) implies - specializesFromLibrary('Occurrence::Occurrence::portions') - - - - - <p>If a <code>Feature</code> has no <code>chainingFeatures</code>, then its <code>featureTarget</code> is the <code>Feature</code> itself, otherwise the <code>featureTarget</code> is the last of the <code>chainingFeatures</code>.</p> + + + + + + <p>The <code>Feature</code> that this <code>FeatureMembership</code> relates to its <code>owningType</code>, making it an <code>ownedFeature</code> of the <code>owningType</code>.</p> + - - OCL2.0 - featureTarget = if chainingFeature->isEmpty() then self else chainingFeature->last() endif - - - - - <p>The <code>ownedCrossSubsetting</code> of a <code>Feature</code> is the <code>ownedSubsetting</code> that is a <code>CrossSubsetting</code>, if any.</p> - - - OCL2.0 - ownedCrossSubsetting = - let crossSubsettings: Sequence(CrossSubsetting) = - ownedSubsetting->selectByKind(CrossSubsetting) in - if crossSubsettings->isEmpty() then null - else crossSubsettings->first() - endif - - - - - <p>If a <code>Feature</code> has <code>isEnd = true</code>, then it must have multiplicity <code>1..1</code>.</p> + + + + + + + + <p>The Conjugation corresponding to the <code>conjugatedType</code>.</p> - - OCL2.0 - isEnd implies - multiplicities().allSuperTypes()->flatten()-> - selectByKind(MultiplicityRange)->exists(hasBounds(1,1)) - - - - - <p>The <code>crossFeature</code> of a <code>Feature</code> must have the same <code>types</code> as the <code>Feature</code>.</p> + + + + + + + <p><code>Unioning</code> is a <code>Relationship</code> that makes its <code>unioningType</code> one of the <code>unioningTypes</code> of its <code>typeUnioned</code>.</p> + + + + + + <p><code>Type</code> with interpretations partly determined by <code>unioningType</code>, as described in <code>Type::unioningType</code>.</p> + - - OCL2.0 - crossFeature <> null implies - crossFeature.type->asSet() = type->asSet() - - - - - <p>A <code>Feature</code> must have at most one <code>ownedSubsetting</code> that is a <code>CrossSubsetting</code>.</p> + + + + + + <p><code>Type</code> that partly determines interpretations of <code>typeUnioned</code>, as described in <code>Type::unioningType</code>.</p> + - - OCL2.0 - ownedSubsetting->selectByKind(CrossSubsetting)->size() <= 1 - - - - - <p>The <code>crossFeature</code> of a <code>Feature</code> is the second <code>chainingFeature</code> of the <code>crossedFeature</code> of the <code>ownedCrossSubsetting</code> of the <code>Feature</code>, if any.</p> + + + + + + + + <p>A Type with a certain <code>output</code>.</p> - - OCL2.0 - crossFeature = - if ownedCrossSubsetting = null then null - else - let chainingFeatures: Sequence(Feature) = - ownedCrossSubsetting.crossedFeature.chainingFeature in - if chainingFeatures->size() < 2 then null - else chainingFeatures->at(2) - endif - - - - - <p>If this <code>Feature</code> is the <code>ownedCrossFeature</code> of an end <code>Feature</code>, then it must directly or indirectly specialize the <code>types</code> of its owning end <code>Feature</code>.</p> + + + + + + + + <p><code>Intersecting</code> is a <code>Relationship</code> that makes its <code>intersectingType</code> one of the <code>intersectingTypes</code> of its <code>typeIntersected</code>.</p> + + + + + + <p><code>Type</code> with interpretations partly determined by <code>intersectingType</code>, as described in <code>Type::intersectingType</code>.</p> + - - OCL2.0 - isOwnedCrossFeature() implies - owner.oclAsType(Feature).type->forAll(t | self.specializes(t)) - - - - - <p>If this <code>Feature</code> is the <code>ownedCrossFeature</code> of an end <code>Feature</code>, then, for any end <code>Feature</code> that is redefined by the owning end <code>Feature</code> of this <code>Feature</code>, this <code>Feature</code> must subset the <code>crossFeature</code> of the redefined end <code>Feature</code>, if this exists.</p> + + + + + + <p><code>Type</code> that partly determines interpretations of <code>typeIntersected</code>, as described in <code>Type::intersectingType</code>.</p> + - - OCL2.0 - isOwnedCrossFeature() implies - ownedSubsetting.subsettedFeature->includesAll( - owner.oclAsType(Feature).ownedRedefinition.redefinedFeature-> - select(crossFeature <> null).crossFeature) - - - - - <p>If this <code>Feature</code> has a <code>crossFeature</code>, then, for any <code>Feature</code> that is redefined by this <code>Feature</code>, the <code>crossFeature</code> must specialize the <code>crossFeature</code> of the redefined end <code>Feature</code>, if this exists.</p> + + + + + + + + <p>The Types that include this one among their <code>differencingTypes</code>.</p> - - OCL2.0 - crossFeature <> null implies - ownedRedefinition.redefinedFeature.crossFeature-> - forAll(f | f <> null implies crossFeature.specializes(f)) - - - - - <p>If this <code>Feature</code> has <code>isEnd = true</code> and <code>ownedCrossFeature</code> returns a non-null value, then the <code>crossFeature</code> of the <code>Feature</code> must be the <code>Feature</code> returned from <code>ownedCrossFeature</code> (which implies that this <code>Feature</code> has an appropriate <code>ownedCrossSubsetting</code> to realize this).</p> + + + + + + + <p><code>Specialization</code> is a <code>Relationship</code> between two <code>Types</code> that requires all instances of the <code>specific</code> type to also be instances of the <code>general</code> Type (i.e., the set of instances of the <code>specific</code> Type is a <em>subset</em> of those of the <code>general</code> Type, which might be the same set).</p> + + + + + <p>The <code>specific</code> <code>Type</code> of a <code>Specialization</code> cannot be a conjugated <code>Type</code>.</p> - + OCL2.0 - ownedCrossFeature() <> null implies - crossFeature = ownedCrossFeature() + not specific.isConjugated - - - <p>If this <code>Feature</code> is the <code>ownedCrossFeature</code> of an end <code>Feature</code>, then it must have <code>featuringTypes</code> consistent with the crossing from other end <code>Features</code> of the <code>owningType</code> of its end <code>Feature</code>.</p> + + + + <p>The <code>Type</code> that is the <code>specific</code> <code>Type</code> of this <code>Specialization</code> and owns it as its <code>owningRelatedElement</code>.</p> + - - OCL2.0 - isOwnedCrossFeature() implies - let otherEnds : OrderedSet(Feature) = - owner.oclAsType(Feature).owningType.endFeature->excluding(self) in - if (otherEnds->size() = 1) then - featuringType = otherEnds->first().type - else - featuringType->size() = 1 and - featuringType->first().isCartesianProduct() and - featuringType->first().asCartesianProduct() = otherEnds.type and - featuringType->first().allSupertypes()->includesAll( - owner.oclAsType(Feature).ownedRedefinition.redefinedFeature-> - select(crossFeature() <> null).crossFeature().featuringType) - endif - - - - - OCL2.0 - isPortion implies not isVariable - - - - - <p>A <code>Feature</code> with <code>isEnd = true</code> must have no direction.</p> + + + + + + <p>A <code>Type</code> with a superset of all instances of the <code>specific</code> <code>Type</code>, which might be the same set.</p> + - - OCL2.0 - isEnd implied direction = null - - - - - <p>If a <code>Feature</code> is owned via a <code>FeatureMembership</code>, then it must have a <code>featuringType</code> for which the operation <code>isFeaturingType</code> returns true.</p> + + + + + + <p>A <code>Type</code> with a subset of all instances of the <code>general</code> <code>Type</code>, which might be the same set.</p> + - - OCL2.0 - owningFeatureMembership <> null implies - featuringTypes->exists(t | isFeaturingType(t)) - - - - - <p>A <code>Feature</code> with <code>isConstant = true</code> must have <code>isVariable = true</code>. + + + + + + + + <p>The Intersectings that identify this Type as their <code>intersectingType</code>.</p> - - OCL2.0 - isConstant implies isVariable - - - - - <p>A <code>Feature</code> with <code>isVariable = true</code> must have an <code>owningType</code> that directly or indirectly specializes the <code>Class</code> <em><code>Occurrences::Occurrence</code></em> from the Kernel Semantic Library.</p> - - - OCL2.0 - isVariable implies - owningType <> null and - owningType.specializes('Occurrences::Occurrence') - - - - - <p>A <code>Feature</code> with <code>isEnd = true</code> must have all of <code>isDerived = false</code>, <code>isAbstract = false</code>, <code>isComposite = false</code>, and <code>isPortion = false</code>.</p> - - - OCL2.0 - isEnd implies not (isDerived or isAbstract or isComposite or isPortion) - - - - - <p>A <code>Feature</code> with <code>isEnd = true</code> and <code>isVariable = true</code> must have <code>isConstant = true</code>.</p> + + + + + + + + <p>The Specializations with a certain <code>general<code> Type.</p> - - OCL2.0 - isEnd and isVariable implies isConstant - - - - - - <p>The <code>Type</code> that is the <code>owningType</code> of the <code>owningFeatureMembership</code> of this <code>Feature</code>.</p> + + + + + + + <p>A <code>Disjoining</code> is a <code>Relationship</code> between <code>Types</code> asserted to have interpretations that are not shared (disjoint) between them, identified as <code>typeDisjoined</code> and <code>disjoiningType</code>. For example, a <code>Classifier</code> for mammals is disjoint from a <code>Classifier</code> for minerals, and a <code>Feature</code> for people&#39;s parents is disjoint from a <code>Feature</code> for their children.</p> + + + + + + <p><code>Type</code> asserted to be disjoint with the <code>disjoiningType</code>.</p> + - - + + - - - <p>Whether or not values for this <code>Feature</code> must have no duplicates or not.</p> + + + <p><code>Type</code> asserted to be disjoint with the <code>typeDisjoined</code>.</p> - - + + - - - <p>Whether an order exists for the values of this <code>Feature</code> or not.</p> + + + <p>A <code>typeDisjoined</code> that is also an <code>owningRelatedElement</code>.</p> - - + + - - - <p><code>Types</code> that restrict the values of this <code>Feature</code>, such that the values must be instances of all the <code>types</code>. The types of a <code>Feature</code> are derived from its <code>typings</code> and the <code>types</code> of its <code>subsettings</code>. If the <code>Feature</code> is chained, then the <code>types</code> of the last <code>Feature</code> in the chain are also <code>types</code> of the chained <code>Feature</code>.</p> + + + + <p><code>Differencing</code> is a <code>Relationship</code> that makes its <code>differencingType</code> one of the <code>differencingTypes</code> of its <code>typeDifferenced</code>.</p> - - - - - - - <p>The <code>ownedSubsettings</code> of this <code>Feature</code> that are <code>Redefinitions</code>, for which the <code>Feature</code> is the <code>redefiningFeature</code>.</p> - + + + + + <p><code>Type</code> with interpretations partly determined by <code>differencingType</code>, as described in <code>Type::differencingType</code>.</p> - - + + - - - <p>The <code>ownedSpecializations</code> of this <code>Feature</code> that are <code>Subsettings</code>, for which the <code>Feature</code> is the <code>subsettingFeature</code>.</p> + + + <p><code>Type</code> that partly determines interpretations of <code>typeDifferenced</code>, as described in <code>Type::differencingType</code>.</p> - - + + - - - <p>The <code>FeatureMembership</code> that owns this <code>Feature</code> as an <code>ownedMemberFeature</code>, determining its <code>owningType</code>.</p> + + + + + <p>The Conjugations with a certain Type as the <code>originalType</code>.</p> - - - - - - <p>Whether the <code>Feature</code> is a composite <code>feature</code> of its <code>featuringType</code>. If so, the values of the <code>Feature</code> cannot exist after its featuring instance no longer does and cannot be values of another composite feature that is not on the same featuring instance.</p> + + + + + + + <p><code>FeatureDirectionKind</code> enumerates the possible kinds of <code>direction</code> that a <code>Feature</code> may be given as a member of a <code>Type</code>.</p> - - - - - - - <p>Whether or not this <code>Feature</code> is an end <code>Feature</code>. An end <code>Feature</code> always has multiplicity 1, mapping each of its domain instances to a single co-domain instance. However, it may have a <code>crossFeature</code>, in which case values of the <code>crossFeature</code> must be the same as those found by navigation across instances of the <code>owningType</code> from values of other end <code>Features</code> to values of this Feature. If the <code>owningType</code> has <em>n</em> end <code>Features</code>, then the multiplicity, ordering, and uniqueness declared for the <code>crossFeature</code> of any one of these end <code>Features</code> constrains the cardinality, ordering, and uniqueness of the collection of values of that <code>Feature</code> reached by navigation when the values of the other <em>n-1</em> end <code>Features</code> are held fixed.</p> + + + + <p>Values of the <code>Feature</code> on each instance of its domain are determined externally to that instance and used internally.</p> - - - - - - <p>The <code>Type</code> that is related to this <code>Feature</code> by an <code>EndFeatureMembership</code> in which the <code>Feature</code> is an <code>ownedMemberFeature</code>.</p> - - - - - - - <p>The <code>ownedSpecializations</code> of this <code>Feature</code> that are <code>FeatureTypings</code>, for which the <code>Feature</code> is the <code>typedFeature</code>.</p> - - - - - - - <p><code>Types</code> that feature this <code>Feature</code>, such that any instance in the domain of the <code>Feature</code> must be classified by all of these <code>Types</code>, including at least all the <code>featuringTypes</code> of its <code>typeFeaturings</code>. If the <code>Feature</code> is chained, then the <code>featuringTypes</code> of the first <code>Feature</code> in the chain are also <code>featuringTypes</code> of the chained <code>Feature</code>.</p> - - - - - - - <p>The <code>ownedRelationships</code> of this <code>Feature</code> that are <code>TypeFeaturings</code> and for which the <code>Feature</code> is the <code>featureOfType</code>.</p> - - - - - - - <p>Whether the values of this <code>Feature</code> can always be computed from the values of other <code>Features</code>.</p> + + + + <p>Values of the <code>Feature</code> on each instance are determined either as <em>in</em> or <em>out</em> directions, or both.</p> - - - - - - <p>The <code>Feature</code> that are chained together to determine the values of this <code>Feature</code>, derived from the <code>chainingFeatures</code> of the <code>ownedFeatureChainings</code> of this <code>Feature</code>, in the same order. The values of a <code>Feature</code> with <code>chainingFeatures</code> are the same as values of the last <code>Feature</code> in the chain, which can be found by starting with the values of the first <code>Feature</code> (for each instance of the domain of the original <code>Feature</code>), then using each of those as domain instances to find the values of the second <code>Feature</code> in chainingFeatures, and so on, to values of the last <code>Feature</code>.</p> - - - - - - - <p>The <code>ownedRelationships</code> of this <code>Feature</code> that are <code>FeatureInvertings</code> and for which the <code>Feature</code> is the <code>featureInverted</code>.</p> - - - - - - - <p>The <code>ownedRelationships</code> of this <code>Feature</code> that are <code>FeatureChainings</code>, for which the <code>Feature</code> will be the <code>featureChained</code>.</p> - - - - - - - <p>Whether the values of this <code>Feature</code> are contained in the space and time of instances of the domain of the <code>Feature</code> and represent the same thing as those instances.</p> + + + + <p>Values of the <code>Feature</code> on each instance of its domain are determined internally to that instance and used externally.</p> - - - - - - <p>Whether the value of this <code>Feature</code> might vary over time. That is, whether the <code>Feature</code> may have a different value for each <em><code>snapshot</code></em> of an <code>owningType</code> that is an <em><code>Occurrence</code></em>.</p> - - - - - - - <p>If <code>isVariable</code> is true, then whether the value of this <code>Feature</code> nevertheless does not change over all <code><em>snapshots</em></code> of its <code>owningType</code>.</p> + + + + + + + + <p>A <code>Type</code> is a <code>Namespace</code> that is the most general kind of <code>Element</code> supporting the semantics of classification. A <code>Type</code> may be a <code>Classifier</code> or a <code>Feature</code>, defining conditions on what is classified by the <code>Type</code> (see also the description of <code>isSufficient</code>).</p> + + + + <p>The <code>ownedSpecializations</code> of a <code>Type</code> are the <code>ownedRelationships</code> that are <code>Specializations</code> whose <code>special</code> <code>Type</code> is the owning <code>Type</code>.</p> - - - - - - <p>The one <code>ownedSubsetting</code> of this <code>Feature</code>, if any, that is a <code>ReferenceSubsetting</code>, for which the <code>Feature</code> is the <code>referencingFeature</code>.</p> + + OCL2.0 + ownedSpecialization = ownedRelationship->selectByKind(Specialization)-> + select(s | s.special = self) + + + + + + <p>If a <code>Type</code> has an owned <code>Multiplicity</code>, then that is its <code>multiplicity</code>. Otherwise, if the <code>Type</code> has an <code>ownedSpecialization</code>, then its <code>multiplicity</code> is the <code>multiplicity</code> of the <code>general</code> <code>Type</code> of that <code>Specialization</code>.</p> - - - - - - <p>The last of the <code>chainingFeatures</code> of this <code>Feature</code>, if it has any. Otherwise, this <code>Feature</code> itself.</p> + + OCL2.0 + multiplicity = + let ownedMultiplicities: Sequence(Multiplicity) = + ownedMember->selectByKind(Multiplicity) in + if ownedMultiplicities->isEmpty() then null + else ownedMultiplicities->first() + endif + + + + + <p>The <code>ownedFeatureMemberships</code> of a <code>Type</code> are its <code>ownedMemberships</code> that are <code>FeatureMemberships</code>.</p> - - - - - - <p>The second <code>chainingFeature</code> of the <code>crossedFeature</code> of the <code>ownedCrossSubsetting</code> of this <code>Feature</code>, if it has one. Semantically, the values of the <code>crossFeature</code> of an end <code>Feature</code> must include all values of the end <code>Feature</code> obtained when navigating from values of the other end <code>Features</code> of the same <code>owningType</code>. -</p> + + OCL2.0 + ownedFeatureMembership = ownedRelationship->selectByKind(FeatureMembership) + + + + + <p>The <code>ownedConjugator</code> of a <code>Type</code> is the its single <code>ownedRelationship</code> that is a <code>Conjugation</code>.</p> - - - - - - <p>Indicates how values of this <code>Feature</code> are determined or used (as specified for the <code>FeatureDirectionKind</code>).</p> - + + OCL2.0 + ownedConjugator = + let ownedConjugators: Sequence(Conjugator) = + ownedRelationship->selectByKind(Conjugation) in + if ownedConjugators->isEmpty() then null + else ownedConjugators->at(1) endif + + + + + <p>The <code>outputs</code> of a <code>Type</code> are those of its <code>features</code> that have a direction of <ode>out</code> or <code>inout</code> relative to the <code>Type</code>, taking conjugation into account.</p> - - - - - - <p>The one <code>ownedSubsetting</code> of this <code>Feature</code>, if any, that is a <code>CrossSubsetting}, for which the <code>Feature</code> is the <code>crossingFeature</code>.</p> + + OCL2.0 + output = feature->select(f | + let direction: FeatureDirectionKind = directionOf(f) in + direction = FeatureDirectionKind::out or + direction = FeatureDirectionKind::inout) + + + + + <p>The <code>inputs</code> of a <code>Type</code> are those of its features that have a direction of <code>in</code> or <code>inout</code> relative to the <code>Type</code>, taking conjugation into account.</p> - - - - - - <p>Return the <code>directionOf</code> this <code>Feature</code> relative to the given <code>type</code>.</p> + + OCL2.0 + input = feature->select(f | + let direction: FeatureDirectionKind = directionOf(f) in + direction = FeatureDirectionKind::_'in' or + direction = FeatureDirectionKind::inout) + + + + + <p>The <code>inheritedMemberships<code> of a <code>Type</code> are determined by the <code>inheritedMemberships()</code> operation.</p> - - - OCL2.0 - type.directionOf(self) - - - - - - - - - - - <p>If a <code>Feature</code> has no <code>declaredShortName</code> or <code>declaredName</code>, then its effective <code>shortName</code> is given by the effective <code>shortName</code> of the <code>Feature</code> returned by the <code>namingFeature()</code> operation, if any.</p> + + OCL2.0 + inheritedMembership = inheritedMemberships(Set{}, Set{}, false) + + + + + <p>A <code>Type</code> must directly or indirectly specialize <code><em>Base::Anything</em></code> from the Kernel Semantic Library.</p> - - - OCL2.0 - if declaredShortName <> null or declaredName <> null then - declaredShortName -else - let namingFeature : Feature = namingFeature() in - if namingFeature = null then - null - else - namingFeature.effectiveShortName() - endif -endif - - - - - - - - - - - <p>If a <code>Feature</code> has no <code>declaredName</code> or <code>declaredShortName</code> -, then its effective <code>name</code> is given by the effective <code>name</code> of the <code>Feature</code> returned by the <code>namingFeature()</code> operation, if any.</p> + + OCL2.0 + specializesFromLibrary('Base::Anything') + + + + + <p>The <code>directedFeatures</code> of a <code>Type</code> are those <code>features</code> for which the <code>direction</code> is non-null.</p> - - - OCL2.0 - if declaredShortName <> null or declaredName <> null then - declaredName -else - let namingFeature : Feature = namingFeature() in - if namingFeature = null then - null - else - namingFeature.effectiveName() - endif -endif - - - - - - - - - - - <p>By default, the naming <code>Feature</code> of a <code>Feature</code> is given by its first <code>redefinedFeature</code> of its first <code>ownedRedefinition</code>, if any.</p> + + OCL2.0 + directedFeature = feature->select(f | directionOf(f) <> null) + + + + + <p>The <code>features</code> of a <code>Type</code> are the <code>ownedMemberFeatures</code> of its <code>featureMemberships</code>. - - - OCL2.0 - if ownedRedefinition->isEmpty() then - null -else - ownedRedefinition->at(1).redefinedFeature -endif - - - - - - - - - - - OCL2.0 - let supertypes : OrderedSet(Type) = - self.oclAsType(Type).supertypes(excludeImplied) in -if featureTarget = self then supertypes -else supertypes->append(featureTarget) -endif - - - - - - - - - - - - - <p>Check whether this <code>Feature</code> <em>directly</em> redefines the given <code>redefinedFeature</code>.</p> + + OCL2.0 + feature = featureMembership.ownedMemberFeature + + + + + <p>The <code>featureMemberships</code> of a <code>Type</code> is the union of the <code>ownedFeatureMemberships</code> and those <code>inheritedMemberships</code> that are <code>FeatureMemberships</code>.</p> - - - OCL2.0 - ownedRedefinition.redefinedFeature->includes(redefinedFeature) - - - - - - - - - - <p>Check whether this <code>Feature</code> <em>directly</em> redefines the named library <code>Feature</code>. <code>libraryFeatureName</code> must conform to the syntax of a KerML qualified name and must resolve to a <code>Feature</code> in global scope.</p> + + OCL2.0 + featureMembership = ownedFeatureMembership->union( + inheritedMembership->selectByKind(FeatureMembership)) + + + + + <p>The <code>ownedFeatures</code> of a <code>Type</code> are the <code>ownedMemberFeatures</code> of its <code>ownedFeatureMemberships</code>. - - - OCL2.0 - let mem: Membership = resolveGlobal(libraryFeatureName) in -mem <> null and mem.memberElement.oclIsKindOf(Feature) and -redefines(mem.memberElement.oclAsType(Feature)) - - - - - - - - - - - - <p>Check whether this <code>Feature</code> directly or indirectly specializes a <code>Feature</code> whose last two <code>chainingFeatures</code> are the given <code>Features</code> <code>first</code> and <code>second</code>.</p> + + English + ownedFeature = ownedFeatureMembership.ownedMemberFeature + + + + + <p>The <code>differencingTypes</code> of a <code>Type</code> are the <code>differencingTypes</code> of its <code>ownedDifferencings</code>, in the same order.</p> - - - OCL2.0 - allSuperTypes()->selectAsKind(Feature)-> - exists(f | let n: Integer = f.chainingFeature->size() in - n >= 2 and - f.chainingFeature->at(n-1) = first and - f.chainingFeature->at(n) = second) - - - - - - - - - - - <p>A <code>Feature</code> is compatible with an <code>otherType</code> if it either directly or indirectly specializes the <code>otherType</code> or if the <code>otherType</code> is also a <code>Feature</code> and all of the following are true.</p> -<ol> - <li>Neither this <code>Feature</code> or the <code>otherType</code> have any <code>ownedFeatures</code>.</li> - <li>This <code>Feature</code> directly or indirectly redefines a <code>Feature</code> that is also directly or indirectly redefined by the <code>otherType</code>.</li> - <li>This <code>Feature</code> can access the <code>otherType</code>. -</li></ol> + + English + differencingType = ownedDifferencing.differencingType + + + + + <p>A <code>Type</code> cannot be one of its own <code>intersectingTypes</code>.</p> - - - OCL2.0 - specializes(otherType) or - supertype.oclIsKindOf(Feature) and - ownedFeature->isEmpty() and - otherType.ownedFeature->isEmpty() and - ownedRedefinitions.allRedefinedFeatures()->exists(f | - otherType.oclAsType(Feature).allRedefinedFeatures()->includes(f)) and - canAccess(otherType.oclAsType(Feature)) - - - - - - - - - - <p>Return the <code>Features</code> used to determine the <code>types</code> of this <code>Feature</code> (other than this <code>Feature</code> itself). If this <code>Feature</code> is <em>not</em> conjugated, then the <code>typingFeatures</code> consist of all subsetted <code>Features</code>, <em>except</em> from <code>CrossSubsetting</code>, and the last <code>chainingFeature</code> (if any). If this <code>Feature</code> <em>is</em> conjugated, then the <code>typingFeatures</code> are only its <code>originalType</code> (if the <code>originalType</code> is a <code>Feature</code>).</p> - -<p><strong>Note.</strong> <code>CrossSubsetting</code> is excluded from the determination of the <code>type</code> of a <code>Feature</code> in order to avoid circularity in the construction of implied <code>CrossSubsetting</code> relationships. The <code>validateFeatureCrossFeatureType</code> requires that the <code>crossFeature</code> of a <code>Feature</code> have the same <code>type</code> as the <code>Feature</code>.</p> - + + English + intersectingType->excludes(self) + + + + + <p>A <code>Type</code> cannot be one of its own <code>differencingTypes</code>.</p> - - - OCL2.0 - if not isConjugated then - let subsettedFeatures : OrderedSet(Feature) = - subsetting->reject(s | s.oclIsKindOf(CrossSubsetting)).subsettedFeatures in - if chainingFeature->isEmpty() or - subsettedFeature->includes(chainingFeature->last()) - then subsettedFeatures - else subsettedFeatures->append(chainingFeature->last()) - endif -else if conjugator.originalType.oclIsKindOf(Feature) then - OrderedSet{conjugator.originalType.oclAsType(Feature)} -else OrderedSet{} -endif endif - - - - - - - - - - <p>If <code>isCartesianProduct</code> is true, then return the list of <code>Types</code> whose Cartesian product can be represented by this <code>Feature</code>. (If <code>isCartesianProduct</code> is not true, the operation will still return a valid value, it will just not represent anything useful.)</p> + + English + differencingType->excludes(self) + + + + + <p>The <code>unioningTypes</code> of a <code>Type</code> are the <code>unioningTypes</code> of its <code>ownedUnionings</code>.<p> - - - OCL2.0 - featuringType->select(t | t.owner <> self)-> - union(featuringType->select(t | t.owner = self)-> - selectByKind(Feature).asCartesianProduct())-> - union(type) - - - - - - - - - - <p>Check whether this <code>Feature</code> can be used to represent a Cartesian product of <code>Types</code>.</p> + + OCL2.0 + unioningType = ownedUnioning.unioningType + + + + + <p>A <code>Type</code> cannot be one of its own <code>unioningTypes</code>.</p> - - - OCL2.0 - type->size() = 1 and -featuringType.size() = 1 and -(featuringType.first().owner = self implies - featuringType.first().oclIsKindOf(Feature) and - featuringType.first().oclAsType(Feature).isCartesianProduct()) - - - - - - - - - <p>Return whether this <code>Feature</code> is an owned cross <code>Feature</code> of an end <code>Feature</code>.</p> + + English + unioningType->excludes(self) + + + + + <p>The <code>intersectingTypes</code> of a <code>Type</code> are the <code>intersectingTypes</code> of its <code>ownedIntersectings</code>.</p> - - - OCL2.0 - owningNamespace <> null and -owningNamespace.oclIsKindOf(Feature) and -owningNamespace.oclAsType(Feature).ownedCrossFeature() = self - - - - - - - - - <p>If this <code>Feature</code> is an end <code>Feature</code> of its <code>owningType</code>, then return the first <code>ownedMember</code> of the <code>Feature</code> that is a <code>Feature</code>, but not a <code>Multiplicity</code> or a <code>MetadataFeature</code>, and whose <code>owningMembership</code> is <em>not</em> a <code>FeatureMembership</code>. If this exists, it is the <code>crossFeature</code> of the end <code>Feature</code>.</p> + + OCL2.0 + intersectingType = ownedIntersecting.intersectingType + + + + + A <code>Type</code> must have at most one owned <code>Conjugation</code> <code>Relationship</code>. - - - OCL2.0 - if not isEnd or owningType = null then null -else - let ownedMemberFeatures: Sequence(Feature) = - ownedMember->selectByKind(Feature)-> - reject(oclIsKindOf(Multiplicity) or - oclIsKindOf(MetadataFeature) or - oclIsKindOf(FeatureValue))-> - reject(owningMembership.oclIsKindOf(FeatureMembership)) in - if ownedMemberFeatures.isEmpty() then null - else ownedMemberFeatures->first() - endif - - - - - - - - - - <p>Return this <code>Feature</code> and all the <code>Features</code> that are directly or indirectly <code>Redefined</code> by this <code>Feature</code>.</p> + + OCL2.0 + ownedRelationship->selectByKind(Conjugation)->size() <= 1 + + + + + <p>A <code>Type</code> may have at most one <code>ownedMember</code> that is a <code>Multiplicity</code>.</p> - - - OCL2.0 - ownedRedefinition.redefinedFeature-> - closure(ownedRedefinition.redefinedFeature)-> - asOrderedSet()->prepend(self) - - - - - - - - - - - <p>Return if the <code>featuringTypes</code> of this <code>Feature</code> are compatible with the given <code>type</code>. If <code>type</code> is null, then check if this <code>Feature</code> is explicitly or implicitly featured by <em><code>Base::Anything</code></em>. If this <code>Feature</code> has <code>isVariable = true</code>, then also consider it to be featured within its <code>owningType</code>. If this <code>Feature</code> is a feature chain whose first <code>chainingFeature</code> has <code>isVariable = true</code>, then also consider it to be featured within the <code>owningType</code> of its first <code>chainingFeature</code>.</p> + + OCL2.0 + ownedMember->selectByKind(Multiplicity)->size() <= 1 + + + + + <p>The <code>endFeatures</code> of a <code>Type</code> are all its <code>features</code> for which <code>isEnd = true</code>.</p> - - - OCL2.0 - if type = null then - featuringType->forAll(f | f = resolveGlobal('Base::Anything').memberElement) -else - featuringType->forAll(f | type.isCompatibleWith(f)) or - isVariable and type.specializes(owningType) or - chainingFeature->notEmpty() and chainingFeature->first().isVariable and - type.specializes(chainingFeature->first().owningType) -endif - - - - - - - - - - - - - <p>A <code>Feature</code> can access another <code>feature</code> if the other <code>feature</code> is featured within one of the direct or indirect <code>featuringTypes</code> of this <code>Feature</code>.</p> + + OCL2.0 + endFeature = feature->select(isEnd) + + + + + <p>The <code>ownedDisjoinings</code> of a <code>Type</code> are the <code>ownedRelationships</code> that are <code>Disjoinings</code>.</p> - - - OCL2.0 - let anythingType: Element = - subsettingFeature.resolveGlobal('Base::Anything').memberElement in -let allFeaturingTypes : Sequence(Type) = - featuringTypes->closure(t | - if not t.oclIsKindOf(Feature) then Sequence{} - else - let featuringTypes : OrderedSet(Type) = t.oclAsType(Feature).featuringType in - if featuringTypes->isEmpty() then Sequence{anythingType} - else featuringTypes - endif - endif) in -allFeaturingTypes->exists(t | feature.isFeaturedWithin(t)) - - - - - - - - - - <p>Return whether the given <code>type</code> must be a <code>featuringType</code> of this <code>Feature</code>. If this <code>Feature</code> has <code>isVariable = false</code>, then return true if the <code>type</code> is the <code>owningType</code> of the <code>Feature</code>. If <code>isVariable = true</code>, then return true if the <code>type</code> is a <code>Feature</code> representing the <em><code>snapshots</code></em> of the <code>owningType</code> of this <code>Feature</code>.</p> + + OCL2.0 + ownedDisjoining = + ownedRelationship->selectByKind(Disjoining) + + + + + <p>The <code>ownedUnionings</code> of a <code>Type</code> are the <code>ownedRelationships</code> that are <code>Unionings</code>.</p> - - - OCL2.0 - owningType <> null and -if not isVariable then type = owningType -else if owningType = resolveGlobal('Occurrences::Occurrence').memberElement then - type = resolveGlobal('Occurrences::Occurrence::snapshots').memberElement -else - type.oclIsKindOf(Feature) and - let feature : Feature = type.oclAsType(Feature) in - feature.featuringType->includes(owningType) and - feature.redefinesFromLibrary('Occurrences::Occurrence::snapshots') -endif - - - - - - - - - - - - - - - - - - - - - <p>The FeatureInvertings that identify this Feature as their <code>featureInverted</code>.</p> + + OCL2.0 + ownedUnioning = + ownedRelationship->selectByKind(Unioning) + + + + + <p>The <code>ownedIntersectings</code> of a <code>Type</code> are the <code>ownedRelationships</code> that are <code>Intersectings</code>.</p> - - - - - - - - <p>The FeatureInvertings that identify this Feature as their <code>invertingFeature</code>.</p> + + OCL2.0 + ownedRelationship->selectByKind(Intersecting) + + + + + <p>The <code>ownedDifferencings</code> of a <code>Type</code> are its <code>ownedRelationships</code> that are <code>Differencings</code>.</p> - - - - - - - <p><code>ReferenceSubsetting</code> is a kind of <code>Subsetting</code> in which the <code>referencedFeature</code> is syntactically distinguished from other <code>Features</code> subsetted by the <code>referencingFeature</code>. <code>ReferenceSubsetting</code> has the same semantics as <code>Subsetting</code>, but the <code>referencedFeature</code> may have a special purpose relative to the <code>referencingFeature</code>. For instance, <code>ReferenceSubsetting</code> is used to identify the <code>relatedFeatures</code> of a <code>Connector</code>.</p> - -<p><code>ReferenceSubsetting</code> is always an <code>ownedRelationship</code> of its <code>referencingFeature</code>. A <code>Feature</code> can have at most one <code>ownedReferenceSubsetting</code>.</p> - - - - - - <p>The <code>Feature</code> that is referenced by the <code>referencingFeature</code> of this <code>ReferenceSubsetting</code>.</p> - + + OCL2.0 + ownedDifferencing = + ownedRelationship->selectByKind(Differencing) + + + + + <p>The <code>ownedEndFeatures</code> of a <code>Type</code> are all its <code>ownedFeatures</code> for which <code>isEnd = true</code>.</p> - - - - - - <p>The <code>Feature</code> that owns this <code>ReferenceSubsetting</code> relationship, which is also its <code>subsettingFeature</code>.</p> - + + OCL2.0 + ownedEndFeature = ownedFeature->select(isEnd) + + + + + <p>The <code>inheritedFeatures</code> of this <code>Type</code> are the <code>memberFeatures</code> of the <code>inheritedMemberships</code> that are <code>FeatureMemberships</code>.</p> - - - - - - - <p>An <code>AnnotatingElement</code> is an <code>Element</code> that provides additional description of or metadata on some other <code>Element</code>. An <code>AnnotatingElement</code> is either attached to its <code>annotatedElements</code> by <code>Annotation</code> <code>Relationships</code>, or it implicitly annotates its <code>owningNamespace</code>.</p> - - - - - <p>If an <code>AnnotatingElement</code> has <code>annotations</code>, then its <code>annotatedElements</code> are the <code>annotatedElements</code> of all its <code>annotations</code>. Otherwise, it's single <code>annotatedElement</code> is its <code>owningNamespace</code>.</p> + + OCL2.0 + inheritedFeature = inheritedMemberships-> + selectByKind(FeatureMembership).memberFeature + + + + + A <code>Type</code> must not have exactly one <code>ownedUnioning</code>. - + OCL2.0 - annotatedElement = - if annotation->notEmpty() then annotation.annotatedElement - else Sequence{owningNamespace} endif + ownedUnioning->size() <> 1 - - - <p>The <code>ownedAnnotatingRelationships</code> of an <code>AnnotatingElement</code> are its <code>ownedRelationships</code> that are <code>Annotations</code>, for which the <code>AnnotatingElement</code> is not the <code>annotatedElement</code>.</p> + + + A <code>Type</code> must not have exactly one <code>ownedIntersecting</code>. - + OCL2.0 - ownedAnnotatingRelationship = ownedRelationship-> - selectByKind(Annotation)-> - select(a | a.annotatedElement <> self) + ownedIntersecting->size() <> 1 - - - <p>The <code>annotations</code> of an <code>AnnotatingElement</code> are its <code>owningAnnotatingRelationship</code> (if any) followed by all its <code>ownedAnnotatingRelationships</code>.</p> + + + A <code>Type</code> must not have exactly one <code>ownedDifferencing</code>. - + OCL2.0 - annotation = - if owningAnnotatingRelationship = null then ownedAnnotatingRelationship - else owningAnnotatingRelationship->prepend(owningAnnotatingRelationship) - endif + ownedDifferencing->size() <> 1 - - - - <p>The <code>Elements</code> that are annotated by this <code>AnnotatingElement</code>. If <code>annotation</code> is not empty, these are the <code>annotatedElements</code> of the <code>annotations</code>. If <code>annotation</code> is empty, then it is the <code>owningNamespace</code> of the <code>AnnotatingElement</code>.</p> + + + + <p>The <code>ownedRelationships</code> of this <code>Type</code> that are <code>Specializations</code>, for which the <code>Type</code> is the <code>specific</code> <code>Type</code>.</p> - - + + - - - <p>The <code>ownedRelationships</code> of this <code>AnnotatingElement</code> that are <code>Annotations</code>, for which this <code>AnnotatingElement</code> is the <code>annotatingElement</code>.</p> + + + <p>The <code>ownedMemberships</code> of this <code>Type</code> that are <code>FeatureMemberships</code>, for which the <code>Type</code> is the <code>owningType</code>. Each such <code>FeatureMembership</code> identifies an <code>ownedFeature</code> of the <code>Type</code>.</p> + - - + + - - - <p>The <code>owningRelationship</code> of this <code>AnnotatingRelationship</code>, if it is an <code>Annotation</code></p> + + + <p>The <code>ownedMemberFeatures</code> of the <code>featureMemberships</code> of this <code>Type</code>.</p> + - - + + - - - <p>The <code>Annotations</code> that relate this <code>AnnotatingElement</code> to its <code>annotatedElements</code>. This includes the <code>owningAnnotatingRelationship</code> (if any) followed by all the <code>ownedAnnotatingRelationshps</code>.</p> + + + <p>The <code>ownedMemberFeatures</code> of the <code>ownedFeatureMemberships</code> of this <code>Type</code>.</p> - - + + - - - - - <p>A <code>Comment</code> is an <code>AnnotatingElement</code> whose <code>body</code> in some way describes its <code>annotatedElements</code>.</p> + + + <p>All <code>features</code> related to this <code>Type</code> by <code>FeatureMemberships</code> that have <code>direction</code> <code>in</code> or <code>inout</code>.</p> - - - - - <p>Identification of the language of the <code>body</code> text and, optionally, the region and/or encoding. The format shall be a POSIX locale conformant to ISO/IEC 15897, with the format <code>[language[_territory][.codeset][@modifier]]</code>.</p> - - - + + - - - <p>The annotation text for the <code>Comment</code>.</p> + + + <p>All <code>features</code> related to this <code>Type</code> by <code>FeatureMemberships</code> that have <code>direction</code> <code>out</code> or <code>inout</code>.</p> - - - + + - - - - - <p>The AnnotatingElements that have a certain Element as their <code>annotatedElement</code>.</p> + + + <p>Indicates whether instances of this <code>Type</code> must also be instances of at least one of its specialized <code>Types</code>.</p> + - - - - - - - <p>An <code>Annotation</code> is a Relationship between an <code>AnnotatingElement</code> and the <code>Element</code> that is annotated by that <code>AnnotatingElement</code>.</p> + + + + + + <p>All <code>Memberships</code> inherited by this <code>Type</code> via <code>Specialization</code> or <code>Conjugation</code>. These are included in the derived union for the <code>memberships</code> of the <code>Type</code>.</p> - - - - <p>An <code>Annotation</code> owns its <code>annotatingElement</code> if and only if it is owned by its <code>annotatedElement</code>.</p> - - OCL2.0 - (owningAnnotatedElement <> null) = (ownedAnnotatingElement <> null) - - - - - <p>Either the <code>ownedAnnotatingElement</code> of an <code>Annotation</code> must be non-null, or the <code>owningAnnotatingElement</code> must be non-null, but not both.</p> + + + + + + <p>All <code>features</code> of this <code>Type</code> with <code>isEnd = true</code>.</p> - - OCL2.0 - ownedAnnotatingElement <> null xor owningAnnotatingElement <> null - - - - - <p>The <code>ownedAnnotatingElement</code> of an <code>Annotation</code> is the first <code>ownedRelatedElement</code> that is an <code>AnnotatingElement</code>, if any.</p> + + + + + + <p>All <code>endFeatures</code> of this <code>Type</code> that are <code>ownedFeatures</code>.</p> + - - OCL2.0 - ownedAnnotatingElement = - let ownedAnnotatingElements : Sequence(AnnotatingElement) = - ownedRelatedElement->selectByKind(AnnotatingElement) in - if ownedAnnotatingElements->isEmpty() then null - else ownedAnnotatingElements->first() - endif - - - - - <p>The <code>annotatingElement</code> of an <code>Annotation</code> is either its <code>ownedAnnotatingElement</code> or its <code>owningAnnotatingElement</code>.</p> + + + + + + <p>Whether all things that meet the classification conditions of this <code>Type</code> must be classified by the <code>Type</code>.</p> + +<p>(A <code>Type</code>&nbsp;gives conditions that must be met by whatever it classifies, but when <code>isSufficient</code> is false, things may meet those conditions but still not be classified by the <code>Type</code>. For example, a Type <code><em>Car</em></code> that is not sufficient could require everything it classifies to have four wheels, but not all four wheeled things would classify as cars. However, if the <code>Type</code> <code><em>Car</em></code> were sufficient, it would classify all four-wheeled things.)</p> + - - OCL2.0 - annotatingElement = - if ownedAnnotatingElement <> null then ownedAnnotatingElement - else owningAnnotatingElement - endif - - - - - - <p>The <code>AnnotatingElement</code> that annotates the <code>annotatedElement</code> of this <code>Annotation</code>. This is always either the <code>ownedAnnotatingElement</code> or the <code>owningAnnotatingElement</code>.</p> + + + + + + <p>A <code>Conjugation</code> owned by this <code>Type</code> for which the <code>Type</code> is the <code>originalType</code>.</p> - - + + - - - <p>The <code>Element</code> that is annotated by the <code>annotatingElement</code> of this Annotation.</p> + + + <p>Indicates whether this <code>Type</code> has an <code>ownedConjugator</code>.</p> - - + - - - <p>The <code>annotatedElement</code> of this <code>Annotation</code>, when it is also the <code>owningRelatedElement</code>.</p> + + + <p>All the <code>memberFeatures</code> of the <code>inheritedMemberships</code> of this <code>Type</code> that are <code>FeatureMemberships</code>.</p> - - + + - - - <p>The <code>annotatingElement</code> of this <code>Annotation</code>, when it is the <code>owningRelatedElement</code>.</p> + + + <p>An <code>ownedMember</code> of this <code>Type</code> that is a <code>Multiplicity</code>, which constraints the cardinality of the <code>Type</code>. If there is no such <code>ownedMember</code>, then the cardinality of this <code>Type</code> is constrained by all the <code>Multiplicity</code> constraints applicable to any direct supertypes.</p> - - + + - - - <p>The <code>annotatingElement</code> of this <code>Annotation</code>, when it is an <code>ownedRelatedElement</code>.</p> + + + <p>The interpretations of a <code>Type</code> with <code>unioningTypes</code> are asserted to be the same as those of all the <code>unioningTypes</code> together, which are the <code>Types</code> derived from the <code>unioningType</code> of the <code>ownedUnionings</code> of this <code>Type</code>. For example, a <code>Classifier</code> for people might be the union of <code>Classifiers</code> for all the sexes. Similarly, a feature for people&#39;s children might be the union of features dividing them in the same ways as people in general.</p> + - - + + - - - - - <p>The Annotations associated with a certain <code>annotatedElement</code>.</p> + + + <p>The <code>ownedRelationships</code> of this <code>Type</code> that are <code>Intersectings</code>, have the <code>Type</code> as their <code>typeIntersected</code>.</p> + - - - - - - - <p><code>Documentation</code> is a <code>Comment</code> that specifically documents a <code>documentedElement</code>, which must be its <code>owner</code>.</p> + + + + + + <p>The interpretations of a <code>Type</code> with <code>intersectingTypes</code> are asserted to be those in common among the <code>intersectingTypes</code>, which are the <code>Types</code> derived from the <code>intersectingType</code> of the <code>ownedIntersectings</code> of this <code>Type</code>. For example, a <code>Classifier</code> might be an intersection of <code>Classifiers</code> for people of a particular sex and of a particular nationality. Similarly, a feature for people&#39;s children of a particular sex might be the intersection of a <code>Feature</code> for their children and a <code>Classifier</code> for people of that sex (because the interpretations of the children <code>Feature</code> that identify those of that sex are also interpretations of the Classifier for that sex).</p> - - - - - <p>The <code>Element</code> that is documented by this <code>Documentation</code>.</p> + + + + + + + <p>The <code>ownedRelationships</code> of this <code>Type</code> that are <code>Unionings</code>, having the <code>Type</code> as their <code>typeUnioned</code>.</p> + + + + + + + + <p>The <code>ownedRelationships</code> of this <code>Type</code> that are <code>Disjoinings</code>, for which the <code>Type</code> is the <code>typeDisjoined</code> <code>Type</code>.</p> + + + + + + + + <p>The <code>FeatureMemberships</code> for <code>features</code> of this <code>Type</code>, which include all <code>ownedFeatureMemberships</code> and those <code>inheritedMemberships</code> that are <code>FeatureMemberships</code> (but does <em>not</em> include any <code>importedMemberships</code>).</p> + + + + + + + + <p>The interpretations of a <code>Type</code> with <code>differencingTypes</code> are asserted to be those of the first of those <code>Types</code>, but not including those of the remaining <code>Types</code>. For example, a <code>Classifier</code> might be the difference of a <code>Classifier</code> for people and another for people of a particular nationality, leaving people who are not of that nationality. Similarly, a feature of people might be the difference between a feature for their children and a <code>Classifier</code> for people of a particular sex, identifying their children not of that sex (because the interpretations of the children <code>Feature</code> that identify those of that sex are also interpretations of the <code>Classifier</code> for that sex).</p> + + + + + + + + <p>The <code>ownedRelationships</code> of this <code>Type</code> that are <code>Differencings</code>, having this <code>Type</code> as their <code>typeDifferenced</code>.</p> + + + + + + + + <p>The <code>features</code> of this <code>Type</code> that have a non-null <code>direction</code>.</p> + + + + + + + + <p>The visible <code>Memberships</code> of a <code>Type</code> include <code>inheritedMemberships</code>.</p> + + + + + OCL2.0 + let visibleMemberships : OrderedSet(Membership) = + self.oclAsType(Namespace). + visibleMemberships(excluded, isRecursive, includeAll) in +let visibleInheritedMemberships : OrderedSet(Membership) = + inheritedMemberships(excluded->including(self), Set{}, isRecursive)-> + select(includeAll or visibility = VisibilityKind::public) in +visibleMemberships->union(visibleInheritedMemberships) + + + + + + + + + + + + + + + + + + + + <p>Return the <code>Memberships</code> inheritable from supertypes of this <code>Type</code> with redefined <code>Features</code> removed. When computing inheritable <code>Memberships</code>, exclude <code>Imports</code> of <code>excludedNamespaces</code>, <code>Specializations</code> of <code>excludedTypes</code>, and, if <code>excludeImplied = true</code>, all implied <code>Specializations</code>.</p> - - - - - - - - <p>A <code>TextualRepresentation</code> is an <code>AnnotatingElement</code> whose <code>body</code> represents the <code>representedElement</code> in a given <code>language</code>. The <code>representedElement</code> must be the <code>owner</code> of the <code>TextualRepresentation</code>. The named <code>language</code> can be a natural language, in which case the <code>body</code> is an informal representation, or an artificial language, in which case the <code>body</code> is expected to be a formal, machine-parsable representation.</p> - -<p>If the named <code>language</code> of a <code>TextualRepresentation</code> is machine-parsable, then the <code>body</code> text should be legal input text as defined for that <code>language</code>. The interpretation of the named language string shall be case insensitive. The following <code>language</code> names are defined to correspond to the given standard languages:</p> - -<table border="1" cellpadding="1" cellspacing="1" width="498"> - <thead> - </thead> - <tbody> - <tr> - <td style="text-align: center; width: 154px;"><code>kerml</code></td> - <td style="width: 332px;">Kernel Modeling Language</td> - </tr> - <tr> - <td style="text-align: center; width: 154px;"><code>ocl</code></td> - <td style="width: 332px;">Object Constraint Language</td> - </tr> - <tr> - <td style="text-align: center; width: 154px;"><code>alf</code></td> - <td style="width: 332px;">Action Language for fUML</td> - </tr> - </tbody> -</table> - -<p>Other specifications may define specific <code>language</code> strings, other than those shown above, to be used to indicate the use of languages from those specifications in KerML <code>TextualRepresentation</code>.</p> - -<p>If the <code>language</code> of a <code>TextualRepresentation</code> is &quot;<code>kerml</code>&quot;, then the <code>body</code> text shall be a legal representation of the <code>representedElement</code> in the KerML textual concrete syntax. A conforming tool can use such a <code>TextualRepresentation</code> <code>Annotation</code> to record the original KerML concrete syntax text from which an <code>Element</code> was parsed. In this case, it is a tool responsibility to ensure that the <code>body</code> of the <code>TextualRepresentation</code> remains correct (or the Annotation is removed) if the annotated <code>Element</code> changes other than by re-parsing the <code>body</code> text.</p> - -<p>An <code>Element</code> with a <code>TextualRepresentation</code> in a language other than KerML is essentially a semantically &quot;opaque&quot; <code>Element</code> specified in the other language. However, a conforming KerML tool may interpret such an element consistently with the specification of the named language.</p> - - - - - - <p>The natural or artifical language in which the <code>body</code> text is written.</p> + + + OCL2.0 + removeRedefinedFeatures( + inheritableMemberships(excludedNamespaces, excludedTypes, excludeImplied)) + + + + + + + + + + + + + + + + + + + + + <p>Return all the non-<code>private</code> <code>Memberships</code> of all the supertypes of this <code>Type</code>, excluding any supertypes that are this <code>Type</code> or are in the given set of <code>excludedTypes</code>. If <code>excludeImplied = true</code>, then also transitively exclude any supertypes from implied <code>Specializations</code>.</p> + + + + OCL2.0 + let excludingSelf : Set(Type) = excludedType->including(self) in +supertypes(excludeImplied)->reject(t | excludingSelf->includes(t)). + nonPrivateMemberships(excludedNamespaces, excludingSelf, excludeImplied) + + + + + + + + + + + + + + + + + + + + + + <p>Return the <code>public</code>, <code>protected</code> and inherited <code>Memberships</code> of this <code>Type</code>. When computing imported <code>Memberships</code>, exclude the given set of <code>excludedNamespaces</code>. When computing inherited <code>Memberships</code>, exclude <code>Types</code> in the given set of <code>excludedTypes</code>. If <code>excludeImplied = true</code>, then also exclude any supertypes from implied <code>Specializations</code>.</p> + + + + OCL2.0 + let publicMemberships : OrderedSet(Membership) = + membershipsOfVisibility(VisibilityKind::public, excludedNamespaces) in +let protectedMemberships : OrderedSet(Membership) = + membershipsOfVisibility(VisibilityKind::protected, excludedNamespaces) in +let inheritedMemberships : OrderedSet(Membership) = + inheritedMemberships(excludedNamespaces, excludedTypes, excludeImplied) in +publicMemberships-> + union(protectedMemberships)-> + union(inheritedMemberships) + + + + + + + + + + + + + + + + + + + + + <p>Return a subset of <code>memberships</code>, removing those <code>Memberships</code> whose <code>memberElements</code> are <code>Features</code> and for which either of the following two conditions holds:</p> + +<ol> + <li>The <code>memberElement</code> of the <code>Membership</code> is included in redefined <code>Features</code> of another <code>Membership</code> in <code>memberships</code>.</li> + <li>One of the redefined <code>Features</code> of the <code>Membership</code> is a directly <code>redefinedFeature</code> of an <code>ownedFeature</code> of this <code>Type</code>.</li> +</ol> + +<p>For this purpose, the redefined <code>Features</code> of a <code>Membership</code> whose <code>memberElement</code> is a <code>Feature</code> includes the <code>memberElement</code> and all <code>Features</code> directly or indirectly redefined by the <code>memberElement</code>.</p> + + + + OCL2.0 + let reducedMemberships : Sequence(Membership) = + memberships->reject(mem1 | + memberships->excluding(mem1)-> + exists(mem2 | allRedefinedFeaturesOf(mem2)-> + includes(mem1.memberElement))) in +let redefinedFeatures : Set(Feature) = + ownedFeature.redefinition.redefinedFeature->asSet() in +reducedMemberships->reject(mem | allRedefinedFeaturesOf(mem)-> + exists(feature | redefinedFeatures->includes(feature))) + + + + + + + + + + + + + + <p>If the <code>memberElement</code> of the given <code>membership</code> is a <code>Feature</code>, then return all <code>Features</code> directly or indirectly redefined by the <code>memberElement</code>.</p> + + + + OCL2.0 + if not membership.memberElement.oclIsType(Feature) then Set{} +else membership.memberElement.oclAsType(Feature).allRedefinedFeatures() +endif + + + + + + + + + + + <p>If the given <code>feature</code> is a <code>feature</code> of this <code>Type</code>, then return its direction relative to this <code>Type</code>, taking conjugation into account.</p> + + + + + OCL2.0 + directionOfExcluding(f, Set{}) + + + + + + + + + + + <p>Return the direction of the given <code>feature</code> relative to this <code>Type</code>, excluding a given set of <code>Types</code> from the search of supertypes of this <code>Type</code>.</p> + + + + OCL2.0 + let excludedSelf : Set(Type) = excluded->including(self) in +if feature.owningType = self then feature.direction +else + let directions : Sequence(FeatureDirectionKind) = + supertypes(false)->excluding(excludedSelf). + directionOfExcluding(feature, excludedSelf)-> + select(d | d <> null) in + if directions->isEmpty() then null + else + let direction : FeatureDirectionKind = directions->first() in + if not isConjugated then direction + else if direction = FeatureDirectionKind::_'in' then FeatureDirectionKind::out + else if direction = FeatureDirectionKind::out then FeatureDirectionKind::_'in' + else direction + endif endif endif endif +endif + + + + + + + + + + + + + + + <p>If this <code>Type</code> is conjugated, then return just the <code>originalType</code> of the <code>Conjugation</code>. Otherwise, return the <code>general</code> <code>Types</code> from all <code>ownedSpecializations</code> of this type, if <code>excludeImplied = false</code>, or all non-implied <code>ownedSpecializations</code>, if <code>excludeImplied = true</code>.</p> + + + + OCL2.0 + if isConjugated then Sequence{conjugator.originalType} +else if not excludeImplied then ownedSpecialization.general +else ownedSpecialization->reject(isImplied).general +endif +endif + + + + + + + + + + + + + <p>Return this <code>Type</code> and all <code>Types</code> that are directly or transitively supertypes of this <code>Type</code> (as determined by the <code>supertypes</code> operation with <code>excludeImplied = false</code>).</p> - - - - - - - <p>The <code>Element</code> that is represented by this <code>TextualRepresentation</code>.</p> - + + + OCL2.0 + OrderedSet{self}->closure(supertypes(false)) + + + + + + + + + + <p>Check whether this <code>Type</code> is a direct or indirect specialization of the given <code>supertype<code>.</p> - - - - - - <p>The textual representation of the <code>representedElement</code> in the given <code>language</code>.</p> + + + OCL2.0 + if isConjugated then + ownedConjugator.originalType.specializes(supertype) +else + allSupertypes()->includes(supertype) +endif + + + + + + + + + + <p>Check whether this <code>Type</code> is a direct or indirect specialization of the named library <code>Type</code>. <code>libraryTypeName</code> must conform to the syntax of a KerML qualified name and must resolve to a <code>Type</code> in global scope.</p> - - - - + + + OCL2.0 + let mem : Membership = resolveGlobal(libraryTypeName) in +mem <> null and mem.memberElement.oclIsKindOf(Type) and +specializes(mem.memberElement.oclAsType(Type)) + + + + + + + + + + + + <p>By default, this <code>Type</code> is compatible with an <code>otherType</code> if it directly or indirectly specializes the <code>otherType</code>.</p> + + + + OCL2.0 + specializes(otherType) + + + + + + + + + + <p>Return the owned or inherited <code>Multiplicities</code> for this <code>Type<./code>.</p> + + + + OCL2.0 + if multiplicity <> null then OrderedSet{multiplicity} +else + ownedSpecialization.general->closure(t | + if t.multiplicity <> null then OrderedSet{} + else ownedSpecialization.general + )->select(multiplicity <> null).multiplicity->asOrderedSet() +endif + + + + + + + - - - - - - <p>The Namespace the has a certain Element as a <code>member</code>.</p> + + + + + <p>A NamespaceImport that has a certain <code>importedNamespace</code>.</p> - - + + @@ -6547,90 +6253,21 @@ endif then Sequence{importedMembership} else importedElement.oclAsType(Namespace). visibleMemberships(excluded, true, importAll)-> - prepend(importedMembership) -endif - - - - - - - - - - - - - - - - <p>An <code>Import</code> is an <code>Relationship</code> between its <code>importOwningNamespace</code> and either a <code>Membership</code> (for a <code>MembershipImport</code>) or another <code>Namespace</code> (for a <code>NamespaceImport</code>), which determines a set of <code>Memberships</code> that become <code>importedMemberships</code> of the <code>importOwningNamespace</code>. If <code>isImportAll = false</code> (the default), then only public <code>Memberships</code> are considered &quot;visible&quot;. If <code>isImportAll = true</code>, then all <code>Memberships</code> are considered &quot;visible&quot;, regardless of their declared <code>visibility</code>. If <code>isRecursive = true</code>, then visible <code>Memberships</code> are also recursively imported from owned sub-<code>Namespaces</code>.</p> - - - - - - <p>A top-level <code>Import</code> (that is, one that is owned by a root <code>Namespace</code>) must have a <code>visibility</code> of <code>private</code>.</p> - - - OCL2.0 - importOwningNamespace.owner = null implies - visibility = VisibilityKind::private - - - - - - <p>The Namespace into which Memberships are imported by this Import, which must be the <code>owningRelatedElement</code> of the Import.</p> - - - - - - - - <p>The visibility level of the imported <code>members</code> from this Import relative to the <code>importOwningNamespace</code>. The default is <code>private</code>.</p> - - - - - - - <p>Whether to recursively import Memberships from visible, owned sub-Namespaces.</p> - - - - - - - <p>Whether to import memberships without regard to declared visibility.</p> - - - - - - - - <p>The effectively imported <code>Element</code> for this </code>Import</code>. For a <code>MembershipImport</code>, this is the <code>memberElement</code> of the <code>importedMembership</code>. For a <code>NamespaceImport</code>, it is the <code>importedNamespace</code>.</p> - - - - - - - <p>Returns Memberships that are to become <code>importedMemberships</code> of the <code>importOwningNamespace</code>. (The <code>excluded</code> parameter is used to handle the possibility of circular Import Relationships.)</p> - - - - - + prepend(importedMembership) +endif + + + + + - - - + + + + @@ -6640,6 +6277,62 @@ endif + + + + <p>A <code>NamespaceImport</code> is an Import that imports <code>Memberships</code> from its <code>importedNamespace</code> into the <code>importOwningNamespace</code>. If <code> isRecursive = false</code>, then only the visible <code>Memberships</code> of the <code>importedNamespace</code> are imported. If <code> isRecursive = true</code>, then, in addition, <code>Memberships</code> are recursively imported from any <code>ownedMembers</code> of the <code>importedNamespace</code> that are <code>Namespaces</code>.</p> + + + + + <p>The <code>importedElement</code> of a <code>NamespaceImport</code> is its <code>importedNamespace</code>.</p> + + + OCL2.0 + importedElement = importedNamespace + + + + + + <p>The <code>Namespace</code> whose visible <code>Memberships</code> are imported by this <code>NamespaceImport</code>.</p> + + + + + + + + <p>Returns at least the visible <code>Memberships</code> of the <code>importedNamespace</code>. If <code>isRecursive = true</code>, then <code>Memberships</code> are also recursively imported from any <code>ownedMembers</code> of the <code>importedNamespace</code> that are themselves <code>Namespaces</code>.</p> + + + + + OCL2.0 + if excluded->includes(importedNamespace) then Sequence{} +else importedNamespace.visibleMemberships(excluded, isRecursive, isImportAll) + + + + + + + + + + + + + + + + <p>A MembershipImport that has a certain <code>importedMembership</code>.</p> + + + + + + @@ -6649,6 +6342,15 @@ endif + + + + <p>An Import with a certain <code>importedElement</code>.</p> + + + + + @@ -6658,24 +6360,6 @@ endif - - - - <p>A NamespaceImport that has a certain <code>importedNamespace</code>.</p> - - - - - - - - - <p>A MembershipImport that has a certain <code>importedMembership</code>.</p> - - - - - <p>An <code>OwningMembership</code> is a <code>Membership</code> that owns its <code>memberElement</code> as a <code>ownedRelatedElement</code>. The <code>ownedMemberElement</code> becomes an <code>ownedMember</code> of the <code>membershipOwningNamespace</code>.</p> @@ -6749,61 +6433,6 @@ endif - - - - <p>An Import with a certain <code>importedElement</code>.</p> - - - - - - - - - <p>A <code>NamespaceImport</code> is an Import that imports <code>Memberships</code> from its <code>importedNamespace</code> into the <code>importOwningNamespace</code>. If <code> isRecursive = false</code>, then only the visible <code>Memberships</code> of the <code>importedNamespace</code> are imported. If <code> isRecursive = true</code>, then, in addition, <code>Memberships</code> are recursively imported from any <code>ownedMembers</code> of the <code>importedNamespace</code> that are <code>Namespaces</code>.</p> - - - - - <p>The <code>importedElement</code> of a <code>NamespaceImport</code> is its <code>importedNamespace</code>.</p> - - - OCL2.0 - importedElement = importedNamespace - - - - - - <p>The <code>Namespace</code> whose visible <code>Memberships</code> are imported by this <code>NamespaceImport</code>.</p> - - - - - - - - <p>Returns at least the visible <code>Memberships</code> of the <code>importedNamespace</code>. If <code>isRecursive = true</code>, then <code>Memberships</code> are also recursively imported from any <code>ownedMembers</code> of the <code>importedNamespace</code> that are themselves <code>Namespaces</code>.</p> - - - - - OCL2.0 - if excluded->includes(importedNamespace) then Sequence{} -else importedNamespace.visibleMemberships(excluded, isRecursive, isImportAll) - - - - - - - - - - - - <p>A <code>Namespace</code> is an <code>Element</code> that contains other <code>Elements</code>, known as its <code>members</code>, via <code>Membership</code> <code>Relationships</code> with those <code>Elements</code>. The <code>members</code> of a <code>Namespace</code> may be owned by the <code>Namespace</code>, aliased in the <code>Namespace</code>, or imported into the <code>Namespace</code> via <code>Import</code> <code>Relationships</code>.</p> @@ -7107,7 +6736,7 @@ else let memberships : Membership = membership-> select(memberShortName = name or memberName = name) in if memberships->notEmpty() then memberships->first() - else owningNamspace.resolveLocal(name) + else owningNamespace.resolveLocal(name) endif endif @@ -7181,6 +6810,85 @@ endif + + + + <p>The Namespace the has a certain Element as a <code>member</code>.</p> + + + + + + + + + <p>An <code>Import</code> is an <code>Relationship</code> between its <code>importOwningNamespace</code> and either a <code>Membership</code> (for a <code>MembershipImport</code>) or another <code>Namespace</code> (for a <code>NamespaceImport</code>), which determines a set of <code>Memberships</code> that become <code>importedMemberships</code> of the <code>importOwningNamespace</code>. If <code>isImportAll = false</code> (the default), then only public <code>Memberships</code> are considered &quot;visible&quot;. If <code>isImportAll = true</code>, then all <code>Memberships</code> are considered &quot;visible&quot;, regardless of their declared <code>visibility</code>. If <code>isRecursive = true</code>, then visible <code>Memberships</code> are also recursively imported from owned sub-<code>Namespaces</code>.</p> + + + + + + <p>A top-level <code>Import</code> (that is, one that is owned by a root <code>Namespace</code>) must have a <code>visibility</code> of <code>private</code>.</p> + + + OCL2.0 + importOwningNamespace.owner = null implies + visibility = VisibilityKind::private + + + + + + <p>The Namespace into which Memberships are imported by this Import, which must be the <code>owningRelatedElement</code> of the Import.</p> + + + + + + + + <p>The visibility level of the imported <code>members</code> from this Import relative to the <code>importOwningNamespace</code>. The default is <code>private</code>.</p> + + + + + + + <p>Whether to recursively import Memberships from visible, owned sub-Namespaces.</p> + + + + + + + <p>Whether to import memberships without regard to declared visibility.</p> + + + + + + + + <p>The effectively imported <code>Element</code> for this </code>Import</code>. For a <code>MembershipImport</code>, this is the <code>memberElement</code> of the <code>importedMembership</code>. For a <code>NamespaceImport</code>, it is the <code>importedNamespace</code>.</p> + + + + + + + <p>Returns Memberships that are to become <code>importedMemberships</code> of the <code>importOwningNamespace</code>. (The <code>excluded</code> parameter is used to handle the possibility of circular Import Relationships.)</p> + + + + + + + + + + + + <p>A <code>Membership</code> is a <code>Relationship</code> between a <code>Namespace</code> and an <code>Element</code> that indicates the <code>Element</code> is a <code>member</code> of (i.e., is contained in) the Namespace. Any <code>memberNames</code> specify how the <code>memberElement</code> is identified in the <code>Namespace</code> and the <code>visibility</code> specifies whether or not the <code>memberElement</code> is publicly visible from outside the <code>Namespace</code>.</p> @@ -7291,17 +6999,58 @@ endif <p>Indicates that a <code>Membership</code> is publicly visible outside its owning <code>Namespace</code>.</p> - + + + + + <p>A <code>Dependency</code> is a <code>Relationship</code> that indicates that one or more <code>client</code> <code>Elements</code> require one more <code>supplier</code> <code>Elements</code> for their complete specification. In general, this means that a change to one of the <code>supplier</code> <code>Elements</code> may necessitate a change to, or re-specification of, the <code>client</code> <code>Elements</code>.</p> + +<p>Note that a <code>Dependency</code> is entirely a model-level <code>Relationship</code>, without instance-level semantics.</p> + + + + + <p>The <code>Element</code> or <code>Elements</code> dependent on the <code>supplier</code> <code>Elements</code>.</p> + + + + + + + <p>The <code>Element</code> or <code>Elements</code> on which the <code>client</code> <code>Elements</code> depend in some respect.</p> + + + + + + + + + <p>The <code>Dependencies</code> that have a certain <code>client</code> <code>Element</code>.</p> + + + + - - - - - - + + + + <p>The <code>Dependencies</code> that have a certain <code>supplier</code> <code>Element</code>.</p> + + + + + + + + + + + + <p>An <code>Element</code> is a constituent of a model that is uniquely identified relative to all other <code>Elements</code>. It can have <code>Relationships</code> with other <code>Elements</code>. Some of these <code>Relationships</code> might imply ownership of other <code>Elements</code>, which means that if an <code>Element</code> is deleted from a model, then so are all the <code>Elements</code> that it owns.</p> @@ -7400,9 +7149,9 @@ endif shortName = effectiveShortName() - + - <p>The <code>owningNamespace</code> of an <code>Element</code> is the <code>membershipOwningNamspace</code> of its <code>owningMembership</code> (if any).</p> + <p>The <code>owningNamespace</code> of an <code>Element</code> is the <code>membershipOwningNamespace</code> of its <code>owningMembership</code> (if any).</p> OCL2.0 @@ -7640,22 +7389,12 @@ endif endif - - - - - - - - - - - - + + + + - - <p>A <code>Relationship</code> is an <code>Element</code> that relates other <code>Element</code>. Some of its <code>relatedElements</code> may be owned, in which case those <code>ownedRelatedElements</code> will be deleted from a model if their <code>owningRelationship</code> is. A <code>Relationship</code> may also be owned by another <code>Element</code>, in which case the <code>ownedRelatedElements</code> of the <code>Relationship</code> are also considered to be transitively owned by the <code>owningRelatedElement</code> of the <code>Relationship</code>.</p> @@ -7757,3660 +7496,3543 @@ endif - - - - <p>The <code>Dependencies</code> that have a certain <code>client</code> <code>Element</code>.</p> - - - - - - - - - <p>The <code>Dependencies</code> that have a certain <code>supplier</code> <code>Element</code>.</p> - - - + + + + + + - - - <p>A <code>Dependency</code> is a <code>Relationship</code> that indicates that one or more <code>client</code> <code>Elements</code> require one more <code>supplier</code> <code>Elements</code> for their complete specification. In general, this means that a change to one of the <code>supplier</code> <code>Elements</code> may necessitate a change to, or re-specification of, the <code>client</code> <code>Elements</code>.</p> - -<p>Note that a <code>Dependency</code> is entirely a model-level <code>Relationship</code>, without instance-level semantics.</p> + + + <p>A <code>Comment</code> is an <code>AnnotatingElement</code> whose <code>body</code> in some way describes its <code>annotatedElements</code>.</p> + - - - - <p>The <code>Element</code> or <code>Elements</code> dependent on the <code>supplier</code> <code>Elements</code>.</p> + + + + <p>Identification of the language of the <code>body</code> text and, optionally, the region and/or encoding. The format shall be a POSIX locale conformant to ISO/IEC 15897, with the format <code>[language[_territory][.codeset][@modifier]]</code>.</p> - - + + + - - - <p>The <code>Element</code> or <code>Elements</code> on which the <code>client</code> <code>Elements</code> depend in some respect.</p> + + + <p>The annotation text for the <code>Comment</code>.</p> + - - + + + - - - <p>A <code>VerificationCaseUsage</code> is a </code>Usage</code> of a <code>VerificationCaseDefinition</code>.</p> + + + + + + <p>The Annotations associated with a certain <code>annotatedElement</code>.</p> + + + + + + + + + <p>An <code>AnnotatingElement</code> is an <code>Element</code> that provides additional description of or metadata on some other <code>Element</code>. An <code>AnnotatingElement</code> is either attached to its <code>annotatedElements</code> by <code>Annotation</code> <code>Relationships</code>, or it implicitly annotates its <code>owningNamespace</code>.</p> + - - - <p>The <code>verifiedRequirements</code> of a <code>VerificationCaseUsage</code> are the <code>verifiedRequirements</code> of its <code>RequirementVerificationMemberships</code>.</p> + + + <p>If an <code>AnnotatingElement</code> has <code>annotations</code>, then its <code>annotatedElements</code> are the <code>annotatedElements</code> of all its <code>annotations</code>. Otherwise, it's single <code>annotatedElement</code> is its <code>owningNamespace</code>.</p> - + OCL2.0 - verifiedRequirement = - if objectiveRequirement = null then OrderedSet{} - else - objectiveRequirement.featureMembership-> - selectByKind(RequirementVerificationMembership). - verifiedRequirement->asOrderedSet() - endif + annotatedElement = + if annotation->notEmpty() then annotation.annotatedElement + else Sequence{owningNamespace} endif - - - <p>A <code>VerificationCaseUsage</code> must subset, directly or indirectly, the base <code>VerificationCaseUsage</code> <code><em>VerificationCases::verificationCases</em></code> from the Systems Model Library.</p> + + + <p>The <code>ownedAnnotatingRelationships</code> of an <code>AnnotatingElement</code> are its <code>ownedRelationships</code> that are <code>Annotations</code>, for which the <code>AnnotatingElement</code> is not the <code>annotatedElement</code>.</p> - + OCL2.0 - specializesFromLibrary('VerificationCases::verificationCases') + ownedAnnotatingRelationship = ownedRelationship-> + selectByKind(Annotation)-> + select(a | a.annotatedElement <> self) - - - If it is composite and owned by a <code>VerificationCaseDefinition</code> or <code>VerificationCaseUsage</code>, then it must specialize <code>VerificationCaseUsage</code> <code><em>VerificationCases::VerificationCase::subVerificationCases</code>.</p> + + + <p>The <code>annotations</code> of an <code>AnnotatingElement</code> are its <code>owningAnnotatingRelationship</code> (if any) followed by all its <code>ownedAnnotatingRelationships</code>.</p> - + OCL2.0 - isComposite and owningType <> null and - (owningType.oclIsKindOf(VerificationCaseDefinition) or - owningType.oclIsKindOf(VerificationCaseUsage)) implies - specializesFromLibrary('VerificationCases::VerificationCase::subVerificationCases') + annotation = + if owningAnnotatingRelationship = null then ownedAnnotatingRelationship + else owningAnnotatingRelationship->prepend(owningAnnotatingRelationship) + endif - - - - <p>The <code>VerificationCase</code> that is the <code>definition</code> of this <code>VerificationCaseUsage</code>.</p> + + + + <p>The <code>Elements</code> that are annotated by this <code>AnnotatingElement</code>. If <code>annotation</code> is not empty, these are the <code>annotatedElements</code> of the <code>annotations</code>. If <code>annotation</code> is empty, then it is the <code>owningNamespace</code> of the <code>AnnotatingElement</code>.</p> + - - + + - - - <p>The <code>RequirementUsages</code> verified by this <code>VerificationCaseUsage</code>, which are the <code>verifiedRequirements</code> of all <code>RequirementVerificationMemberships</code> of the <code>objectiveRequirement</code>.</p> + + + <p>The <code>ownedRelationships</code> of this <code>AnnotatingElement</code> that are <code>Annotations</code>, for which this <code>AnnotatingElement</code> is the <code>annotatingElement</code>.</p> - - + + + + + + <p>The <code>owningRelationship</code> of this <code>AnnotatingRelationship</code>, if it is an <code>Annotation</code></p> + + + + + + + <p>The <code>Annotations</code> that relate this <code>AnnotatingElement</code> to its <code>annotatedElements</code>. This includes the <code>owningAnnotatingRelationship</code> (if any) followed by all the <code>ownedAnnotatingRelationshps</code>.</p> + + + + + + + + + <p>A <code>TextualRepresentation</code> is an <code>AnnotatingElement</code> whose <code>body</code> represents the <code>representedElement</code> in a given <code>language</code>. The <code>representedElement</code> must be the <code>owner</code> of the <code>TextualRepresentation</code>. The named <code>language</code> can be a natural language, in which case the <code>body</code> is an informal representation, or an artificial language, in which case the <code>body</code> is expected to be a formal, machine-parsable representation.</p> + +<p>If the named <code>language</code> of a <code>TextualRepresentation</code> is machine-parsable, then the <code>body</code> text should be legal input text as defined for that <code>language</code>. The interpretation of the named language string shall be case insensitive. The following <code>language</code> names are defined to correspond to the given standard languages:</p> + +<table border="1" cellpadding="1" cellspacing="1" width="498"> + <thead> + </thead> + <tbody> + <tr> + <td style="text-align: center; width: 154px;"><code>kerml</code></td> + <td style="width: 332px;">Kernel Modeling Language</td> + </tr> + <tr> + <td style="text-align: center; width: 154px;"><code>ocl</code></td> + <td style="width: 332px;">Object Constraint Language</td> + </tr> + <tr> + <td style="text-align: center; width: 154px;"><code>alf</code></td> + <td style="width: 332px;">Action Language for fUML</td> + </tr> + </tbody> +</table> + +<p>Other specifications may define specific <code>language</code> strings, other than those shown above, to be used to indicate the use of languages from those specifications in KerML <code>TextualRepresentation</code>.</p> + +<p>If the <code>language</code> of a <code>TextualRepresentation</code> is &quot;<code>kerml</code>&quot;, then the <code>body</code> text shall be a legal representation of the <code>representedElement</code> in the KerML textual concrete syntax. A conforming tool can use such a <code>TextualRepresentation</code> <code>Annotation</code> to record the original KerML concrete syntax text from which an <code>Element</code> was parsed. In this case, it is a tool responsibility to ensure that the <code>body</code> of the <code>TextualRepresentation</code> remains correct (or the Annotation is removed) if the annotated <code>Element</code> changes other than by re-parsing the <code>body</code> text.</p> + +<p>An <code>Element</code> with a <code>TextualRepresentation</code> in a language other than KerML is essentially a semantically &quot;opaque&quot; <code>Element</code> specified in the other language. However, a conforming KerML tool may interpret such an element consistently with the specification of the named language.</p> + + + + + + <p>The natural or artifical language in which the <code>body</code> text is written.</p> + + + + + + + + + <p>The <code>Element</code> that is represented by this <code>TextualRepresentation</code>.</p> + + + + - - - - - <p>The RequirementVerificationMembership that has a certain RequirementUsage as its <code>verifiedRequirement</code>.</p> + + + <p>The textual representation of the <code>representedElement</code> in the given <code>language</code>.</p> + - - - + + + + - - - - <p>The VerificationCaseDefinitions that verify a certain <code>verifiedRequirement</code>.</p> + + + + <p>The AnnotatingElements that have a certain Element as their <code>annotatedElement</code>.</p> - - + + - - - - <p>The VerificationUsages that are defined by a certain <code>verificationCaseDefinition</code>.</p> + + + <p><code>Documentation</code> is a <code>Comment</code> that specifically documents a <code>documentedElement</code>, which must be its <code>owner</code>.</p> + + + + + + <p>The <code>Element</code> that is documented by this <code>Documentation</code>.</p> + - - - + + + - - - <p>A <code>VerificationCaseDefinition</code> is a <code>CaseDefinition</code> for the purpose of verification of the subject of the case against its requirements.</p> + + + <p>An <code>Annotation</code> is a Relationship between an <code>AnnotatingElement</code> and the <code>Element</code> that is annotated by that <code>AnnotatingElement</code>.</p> + - - - <p>The <code>verifiedRequirements</code> of a <code>VerificationCaseDefinition</code> are the <code>verifiedRequirements</code> of its <code>RequirementVerificationMemberships</code>.</p> + + + <p>An <code>Annotation</code> owns its <code>annotatingElement</code> if and only if it is owned by its <code>annotatedElement</code>.</p> - + OCL2.0 - verifiedRequirement = - if objectiveRequirement = null then OrderedSet{} - else - objectiveRequirement.featureMembership-> - selectByKind(RequirementVerificationMembership). - verifiedRequirement->asOrderedSet() - endif + (owningAnnotatedElement <> null) = (ownedAnnotatingElement <> null) - - - <p>A <code>VerificationCaseDefinition</code> must directly or indirectly specialize the base <code>VerificationCaseDefinition</code> <em><code>VerificationCases::VerificationCase</code></em> from the Systems Model Library.</p> + + + <p>Either the <code>ownedAnnotatingElement</code> of an <code>Annotation</code> must be non-null, or the <code>owningAnnotatingElement</code> must be non-null, but not both.</p> - + OCL2.0 - specializesFromLibrary('VerificationCases::VerificationCase') + ownedAnnotatingElement <> null xor owningAnnotatingElement <> null - - - - <p>The <code>RequirementUsages</code> verified by this <code>VerificationCaseDefinition</code>, which are the <code>verifiedRequirements</code> of all <code>RequirementVerificationMemberships</code> of the <code>objectiveRequirement</code>.</p> - - - - - - - - - <p>The RequirementVerificationMembership that owns a certain RequirementUsage as its <code>ownedRequirement</code>.</p> - - - - - - - - - <p>The VerificationCaseUsages that verify a certain <code>verifiedRequirement</code>.</p> - - - - - - - - <p>A <code>RequirementVerificationMembership</code> is a <code>RequirementConstraintMembership </code> used in the objective of a <code>VerificationCase</code> to identify a <code>RequirementUsage</code> that is verified by the <code>VerificationCase</code>.</p> - - - - <p>A <code>RequirementVerificationMembership</code> must have <code>kind = requirement</code>.</p> + + + <p>The <code>ownedAnnotatingElement</code> of an <code>Annotation</code> is the first <code>ownedRelatedElement</code> that is an <code>AnnotatingElement</code>, if any.</p> - + OCL2.0 - kind = RequirementConstraintKind::requirement + ownedAnnotatingElement = + let ownedAnnotatingElements : Sequence(AnnotatingElement) = + ownedRelatedElement->selectByKind(AnnotatingElement) in + if ownedAnnotatingElements->isEmpty() then null + else ownedAnnotatingElements->first() + endif - - - <p>The <code>owningType</code> of a <code>RequirementVerificationMembership</code> must a <code>RequirementUsage</code> that is owned by an <code>ObjectiveMembership</code>.</p> + + + <p>The <code>annotatingElement</code> of an <code>Annotation</code> is either its <code>ownedAnnotatingElement</code> or its <code>owningAnnotatingElement</code>.</p> - + OCL2.0 - owningType.oclIsKindOf(RequirementUsage) and -owningType.owningFeatureMembership <> null and -owningType.owningFeatureMembership.oclIsKindOf(ObjectiveMembership) + annotatingElement = + if ownedAnnotatingElement <> null then ownedAnnotatingElement + else owningAnnotatingElement + endif - - - - <p>The owned <code>RequirementUsage</code> that acts as the <code>ownedConstraint</code> for this <code>RequirementVerificationMembership</code>. This will either be the <code>verifiedRequirement</code>, or it will subset the <code>verifiedRequirement</code>.</p> + + + + <p>The <code>AnnotatingElement</code> that annotates the <code>annotatedElement</code> of this <code>Annotation</code>. This is always either the <code>ownedAnnotatingElement</code> or the <code>owningAnnotatingElement</code>.</p> + - - + + - - - <p>The <code>kind</code> of a <code>RequirementVerificationMembership</code> must be <code>requirement</code>.</p> + + + <p>The <code>Element</code> that is annotated by the <code>annotatingElement</code> of this Annotation.</p> + - + + - - - <p> The <code>RequirementUsage</code> that is identified as being verified. It is the <code>referencedConstraint</code> of the <code>RequirementVerificationMembership</code> considered as a <code>RequirementConstraintMembership</code>, which must be a <code>RequirementUsage</code>.</p> + + + <p>The <code>annotatedElement</code> of this <code>Annotation</code>, when it is also the <code>owningRelatedElement</code>.</p> + - - + + - - - - - - - - - - <p>A <code>MetadataDefinition</code> is an <code>ItemDefinition</code> that is also a <code>Metaclass</code>.</p> - - - - <p>A <code>MetadataDefinition</code> must directly or indirectly specialize the base <code>MetadataDefinition</code> <code><em>Metadata::MetadataItem</em></code> from the Systems Model Library.</p> - - - OCL2.0 - specializesFromLibrary('Metadata::MetadataItem') - - - - - - - - <p>A <code>MetadataUsage</code> is a <code>Usage</code> and a <code>MetadataFeature</code>, used to annotate other <code>Elements</code> in a system model with metadata. As a <code>MetadataFeature</code>, its type must be a <code>Metaclass</code>, which will nominally be a <code>MetadataDefinition</code>. However, any kernel <code>Metaclass</code> is also allowed, to permit use of <code>Metaclasses</code> from the Kernel Model Libraries.</p> - - - - <p>A <code>MetadataUsage</code> must directly or indirectly specialize the base <code>MetadataUsage</code> <code><em>Metadata::metadataItems</em></code> from the Systems Model Library.</p> - - - OCL2.0 - specializesFromLibrary('Metadata::metadataItems') - - - - - - - <p>The <code>MetadataDefinition</code> that is the <code>definition</code> of this <code>MetadataUsage</code>.</p> + + + <p>The <code>annotatingElement</code> of this <code>Annotation</code>, when it is the <code>owningRelatedElement</code>.</p> - - + + - - - - <p><code>PortionKind</code> is an enumeration of the specific kinds of <code><em>Occurrence</em></code> portions that can be represented by an <code>OccurrenceUsage</code>.</p> - - - - <p>A time slice of an <code>Occurrence</code> (a portion over time).</p> - - - - - <p>A snapshot of an <code>Occurrence</code> (a time slice with zero duration).</p> + + + <p>The <code>annotatingElement</code> of this <code>Annotation</code>, when it is an <code>ownedRelatedElement</code>.</p> - + + + - - - <p>An <code>OccurrenceDefinition</code> is a <code>Definition</code> of a <code>Class</code> of individuals that have an independent life over time and potentially an extent over space. This includes both structural things and behaviors that act on such structures. If <code>isIndividual</code> is true, then the <code>OccurrenceDefinition</code> is constrained to have (at most) a single instance that is the entire life of a single individual.</p> - - - - <p>An <code>OccurrenceDefinition</code> with <code>isIndividual = true</code> must directly or indirectly specialize <em><code>Occurrences::Life</code></em> from the Kernel Semantic Library.</p> + + + <p>A <code>ViewRenderingMembership</code> is a <coed>FeatureMembership</code> that identifies the <code>viewRendering</code> of a <code>ViewDefinition</code> or <code>ViewUsage</code>.</p> + + + + <p>The <code>referencedRendering</code> of a <code>ViewRenderingMembership</code> is the the <code>featureTarget</code> of the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code> (which must be a <code>RenderingUsage</code>) of the <code>ownedRendering</code>, if there is one, and, otherwise, the <code>ownedRendering</code> itself.</p> - + OCL2.0 - isIndividual implies specializesFromLibrary('Occurrences::Life') + referencedRendering = + let referencedFeature : Feature = + ownedRendering.referencedFeatureTarget() in + if referencedFeature = null then ownedRendering + else if referencedFeature.oclIsKindOf(RenderingUsage) then + refrencedFeature.oclAsType(RenderingUsage) + else null + endif endif - - - <p>An <code>OccurrenceDefinition</code> with <code>isIndividual = true</code> must have a <code>multiplicity</code> that specializes <em><code>Base::zeroOrOne</code></em> from the Kernel Semantic Library.</p> + + + <p>The <code>owningType</code> of a <code>ViewRenderingMembership</code> must be a <code>ViewDefinition</code> or a <code>ViewUsage</code>.</p> - + OCL2.0 - isIndividual implies - multiplicity <> null and - multiplicity.specializesFromLibrary('Base::zeroOrOne') + owningType.oclIsKindOf(ViewDefinition) or +owningType.oclIsKindOf(ViewUsage) - - - - - <p>Whether this <code>OccurrenceDefinition</code> is constrained to represent at most one thing.</p> + + + + <p>The owned <code>RenderingUsage</code> that is either itself the <code>referencedRendering</code> or subsets the <code>referencedRendering</code>. - - + + + + + + <p> The <code>RenderingUsage</code> that is referenced through this <code>ViewRenderingMembership</code>. It is the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code> for the <code>ownedRendering</code>, if there is one, and, otherwise, the <code>ownedRendering</code> itself.</p> + + + - - - - <p>The <code>OccurrenceUsages</code> being typed by a certain <code>Class</code>.</p> + + + <p>A <code>MembershipExpose</code> is an <code>Expose</code> <code.Relationship</code> that exposes a specific <code>importedMembership</code> and, if <code>isRecursive = true</code>, additional <code>Memberships</code> recursively.</p> + + + + + + + + <p>The ViewUsage that owns a certain <code>rendering</code>.</p> - - + + - - - - <p>The <code>OccurrenceUsage</code> that has a certain <code>individualDefinition</code>.</p> + + + + <p>The ViewpointDefinition that has a certain <code>viewpointStakeholder</code>.</p> - - + + - - - <p>An <code>OccurrenceUsage</code> is a <code>Usage</code> whose <code>types</code> are all <code>Classes</code>. Nominally, if a <code>type</code> is an <code>OccurrenceDefinition</code>, an <code>OccurrenceUsage</code> is a <code>Usage</code> of that <code>OccurrenceDefinition</code> within a system. However, other types of Kernel <code>Classes</code> are also allowed, to permit use of <code>Classes</code> from the Kernel Model Libraries.</p> + + + + <p>A ViewUsage exposing a certain <code>exposedElement</code>.</p> + + + + + + + + + <p>The RenderingUsages defined by a certain <code>renderingDefinition</code>.</p> + + + + + + + + + <p>The RenderingDefinitions that feature a certain <code>rendering</code>.</p> + + + + + + + + + p>The ViewUsage that owns a certain <code>satisfiedViewpoint</code>.</p> + + + + + + + + + <p>The ViewDefinition that owns a certain <code>satisfiedViewpoint</code>.</p> + + + + + + + + + + + + + + <p>A <code>RenderingUsage</code> is the usage of a <code>RenderingDefinition</code> to specify the rendering of a specific model view to produce a physical view artifact.</p> + - - - <p>The <code>individualDefinition</code> of an <code>OccurrenceUsage</code> is the <code>occurrenceDefinition</code> that is an <code>OccurrenceDefinition</code> with <code>isIndividual = true</code>, if any.</p> + + + <p>A <code>RenderingUsage</code> must directly or indirectly specialize the base <code>RenderingUsage</code> <code><em>Views::renderings</em></code> from the Systems Model Library.</p> - + OCL2.0 - individualDefinition = - let individualDefinitions : OrderedSet(OccurrenceDefinition) = - occurrenceDefinition-> - selectByKind(OccurrenceDefinition)-> - select(isIndividual) in - if individualDefinitions->isEmpty() then null - else individualDefinitions->first() endif + specializesFromLibrary('Views::renderings') - - - <p>If an <code>OccurrenceUsage</code> has <code>isIndividual = true</code>, then it must have an <code>individualDefinition</code>.</p> + + + <p>A <code>RenderingUsage</code> whose <code>owningType</code> is a <code>RenderingDefinition</code> or <code>RenderingUsage</code> must directly or indirectly specialize the <code>RenderingUsage</code> <code><em>Views::Rendering::subrenderings</em></code> from the Systems Model Library.</p> - + OCL2.0 - isIndividual implies individualDefinition <> null + owningType <> null and +(owningType.oclIsKindOf(RenderingDefinition) or + owningType.oclIsKindOf(RenderingUsage)) implies + specializesFromLibrary('Views::Rendering::subrenderings') - - - <p>An <code>OccurrenceUsage</code> must directly or indirectly specialize <code><em>Occurrences::occurrences</em></code> from the Kernel Semantic Library.</p> + + + <p>A <code>RenderingUsage</code> whose <code>owningFeatureMembership</code> is a <code>ViewRenderingMembership</code> must redefine the <code>RenderingUsage</code> <code><em>Views::View::viewRendering</em></code>.</p> - + OCL2.0 - specializesFromLibrary('Occurrences::occurrences') + owningFeatureMembership <> null and +owningFeatureMembership.oclIsKindOf(ViewRenderingMembership) implies + redefinesFromLibrary('Views::View::viewRendering') - - - <p>A composite <code>OccurrenceUsage</code>, whose <code>ownedType</code> is a <code>Class</code>, another <code>OccurrenceUsage</code>, or any kind of <code>Feature</code> typed by a <code>Class</code>, must directly or indirectly specialize <em><code>Occurrences::Occurrence::suboccurrences</code></em>. + + + + <p>The <code>RenderingDefinition</code> that is the <code>definition</code> of this <code>RenderingUsage</code>.</p> - - OCL2.0 - isComposite and -owningType <> null and -(owningType.oclIsKindOf(Class) or - owningType.oclIsKindOf(OccurrenceUsage) or - owningType.oclIsKindOf(Feature) and - owningType.oclAsType(Feature).type-> - exists(oclIsKind(Class))) implies - specializesFromLibrary('Occurrences::Occurrence::suboccurrences') - - - - - <p>An <code>OccurrenceUsage</code> must have at most one <code>occurrenceDefinition</code> with <code>isIndividual = true</code>.</p> + + + + + + + <p>A <code>RenderingDefinition</code> is a <code>PartDefinition</code> that defines a specific rendering of the content of a model view (e.g., symbols, style, layout, etc.).</p> + + + + <p>The <code>renderings</code> of a <code>RenderingDefinition</code> are all its <code>usages</code> that are <code>RenderingUsages</code>.</p> - + OCL2.0 - occurrenceDefinition-> - selectByKind(OccurrenceDefinition)-> - select(isIndividual).size() <= 1 + rendering = usages->selectByKind(RenderingUsage) - - - <p>If an <code>OccurrenceUsage</code> has <code>portionKind = snapshot</code>, then it must directly or indirectly specialize <em><code>Occurrences::Occurrence::snapshots</code></em> from the Kernel Semantic Library.</p> + + + <p>A <code>RenderingDefinition</code> must directly or indirectly specialize the base <code>RenderingDefinition</code> <code><em>Views::Rendering</em></code> from the Systems Model Library.</p> - + OCL2.0 - portionKind = PortionKind::snapshot implies - specializesFromLibrary('Occurrences::Occurrence::snapshots') + specializesFromLibrary('Views::Rendering') - - - <p>If an <code>OccurrenceUsage</code> has <code>portionKind = timeslice</code>, then it must directly or indirectly specialize <em><code>Occurrences::Occurrence::timeSlices</code></em> from the Kernel Semantic Library.</p> + + + + <p>The <code>usages</code> of a <code>RenderingDefinition</code> that are <code>RenderingUsages</code>.</p> - + + + + + + + <p>A <code>ViewpointUsage</code> is a <code>Usage</code> of a <code>ViewpointDefinition</code>.</p> + + + + + + <p>The <code>viewpointStakeholders</code> of a <code>ViewpointUsage</code> are the <code>ownedStakeholderParameters</code> of all <code>featureMemberships</code> that are <code>StakeholderMemberships</code>.</p> + + OCL2.0 - portionKind = PortionKind::timeslice implies - specializesFromLibrary('Occurrences::Occurrence::timeSlices') + viewpointStakeholder = framedConcern.featureMemberhsip-> + selectByKind(StakeholderMembership). + ownedStakeholderParameter - - - <p>If an <code>OccurrenceUsage</code> has a non-null <code>portionKind</code>, then its <code>owningType</code> must be an <code>OccurrenceDefinition</code> or an <code>OccurrenceUsage</code>.</p> + + + <p>A <code>ViewpointUsage</code> must directly or indirectly specialize the base <code>ViewpointUsage</code> <code><em>Views::viewpointChecks</em></code> from the Systems Model Library.</p> - + OCL2.0 - portionKind <> null implies - owningType <> null and - (owningType.oclIsKindOf(OccurrenceDefinition) or - owningType.oclIsKindOf(OccurrenceUsage)) + specializesFromLibrary('Views::viewpointChecks') - - - <p>If an <code>OccurrenceUsage</code> has a non-null <code>portionKind</code>, then it must have <code>isPortion = true</code>.</p> + + + <p>A composite <code>ViewpointUsage</code> whose <code>owningType</code> is a <code>ViewDefinition</code> or <code>ViewUsage</code> must directly or indirectly specialize the <code>ViewpointUsage</code> <code><em>Views::View::viewpointSatisfactions</em></code> from the Systems Model Library.</p> - + OCL2.0 - portionKind <> null implies isPortion + isComposite and owningType <> null and +(owningType.oclIsKindOf(ViewDefinition) or + owningType.oclIsKindOf(ViewUsage)) implies + specializesFromLibrary('Views::View::viewpointSatisfactions') - - - - <p>The <code>Classes</code> that are the types of this <code>OccurrenceUsage</code>. Nominally, these are <code>OccurrenceDefinitions</code>, but other kinds of kernel <code>Classes</code> are also allowed, to permit use of <code>Classes</code> from the Kernel Model Libraries.</p> - - - - - - - <p>The at most one <code>occurrenceDefinition</code> that has <code>isIndividual = true</code>.</p> - - - - - - - <p>Whether this <code>OccurrenceUsage</code> represents the usage of the specific individual represented by its <code>individualDefinition</code>.</p> + + + + <p>The <code>ViewpointDefinition</code> that is the <code>definition</code> of this <code>ViewpointUsage<code>.</p> - - + + - - - <p>The kind of temporal portion (time slice or snapshot) is represented by this <code>OccurrenceUsage</code>. If <code>portionKind</code> is not null, then the <code>owningType</code> of the <code>OccurrenceUsage</code> must be non-null, and the <code>OccurrenceUsage</code> represents portions of the featuring instance of the <code>owningType</code>.</p> + + + <p>The <code>PartUsages</code> that identify the stakeholders with concerns framed by this <code>ViewpointUsage</code>, which are the owned and inherited <code>stakeholderParameters</code> of the <code>framedConcerns</code> of this <code>ViewpointUsage</code>.</p> - - + + - - - <p>An <code>EventOccurrenceUsage</code> is an <code>OccurrenceUsage</code> that represents another <code>OccurrenceUsage</code> occurring as a <code><em>suboccurrence</em></code> of the containing occurrence of the <code>EventOccurrenceUsage</code>. Unless it is the <code>EventOccurrenceUsage</code> itself, the referenced <code>OccurrenceUsage</code> is related to the <code>EventOccurrenceUsage</code> by a <code>ReferenceSubsetting</code> <code>Relationship</code>.</p> - -<p>If the <code>EventOccurrenceUsage</code> is owned by an <code>OccurrenceDefinition</code> or <code>OccurrenceUsage</code>, then it also subsets the <em><code>timeEnclosedOccurrences</code></em> property of the <code>Class</code> <em><code>Occurrence</code></em> from the Kernel Semantic Library model <em><code>Occurrences</code></em>.</p> + + + <p>A <code>ViewDefinition</code> is a <code>PartDefinition</code> that specifies how a view artifact is constructed to satisfy a <code>viewpoint</code>. It specifies a <code>viewConditions</code> to define the model content to be presented and a <code>viewRendering</code> to define how the model content is presented.</p> - - - <p>If an <code>EventOccurrenceUsage</code> has no <code>ownedReferenceSubsetting</code>, then its <code>eventOccurrence</code> is the <code>EventOccurrenceUsage</code> itself. Otherwise, the <code>eventOccurrence</code> is the <code>featureTarget</code> of the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code> (which must be an <code>OccurrenceUsage</code>).</p> + + + <p>The <code>views</code> of a <code>ViewDefinition</code> are all its <code>usages</code> that are <code>ViewUsages</code>.</p> - + OCL2.0 - eventOccurrence = - if referencedFeatureTarget() = null then self - else if referencedFeatureTarget().oclIsKindOf(OccurrenceUsage) then - referencedFeatureTarget().oclAsType(OccurrenceUsage) - else null - endif endif + view = usage->selectByKind(ViewUsage) - - - <p>If an <code>EventOccurrenceUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of the <code>referencedFeature</code> must be an <code>OccurrenceUsage</code>.</p> + + + <p>The <code>satisfiedViewpoints</code> of a <code>ViewDefinition</code> are its <code>ownedRequirements</code> that are composite <code>ViewpointUsages</code>. - + OCL2.0 - referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(OccurrenceUsage) + satisfiedViewpoint = ownedRequirement-> + selectByKind(ViewpointUsage)-> + select(isComposite) - - - <p>If an <code>EventOccurrenceUsage</code> has an <code>owningType</code> that is an <code>OccurrenceDefinition</code> or <code>OccurrenceUsage</code>, then it must directly or indirectly specialize the <code>Feature</code> <code><em>Occurrences::Occurrence::timeEnclosedOccurrences</em></code>.</p> + + + <p>The <code>viewRendering</code> of a <code>ViewDefinition</code> is the <code>referencedRendering</code> of its owned <code>ViewRenderingMembership<code>, if any.</p> - + OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(OccurrenceDefinition) or - owningType.oclIsKindOf(OccurrenceUsage)) implies - specializesFromLibrary('Occurrences::Occurrence::timeEnclosedOccurrences') + viewRendering = + let renderings: OrderedSet(ViewRenderingMembership) = + featureMembership->selectByKind(ViewRenderingMembership) in + if renderings->isEmpty() then null + else renderings->first().referencedRendering + endif - - - <p>An <code>EventOccurrenceUsage</code> must be referential.</p> + + + <p>The <code>viewConditions</code> of a <code>ViewDefinition</code> are the <code>conditions</code> of its owned <code>ElementFilterMemberships</code>.</p> - + OCL2.0 - isReference + viewCondition = ownedMembership-> + selectByKind(ElementFilterMembership). + condition - - - - <p>The <code>OccurrenceUsage</code> referenced as an event by this <code>EventOccurrenceUsage</code>. It is the <code>referenceFeature</code> of the <code>ownedReferenceSubsetting</code> for the <code>EventOccurrenceUsage</code>, if there is one, and, otherwise, the <code>EventOccurrenceUsage</code> itself.</p> + + + <p>A <code>ViewDefinition</code> must have at most one <code>ViewRenderingMembership</code>.</p> - - + + OCL2.0 + featureMembership-> + selectByKind(ViewRenderingMembership)-> + size() <= 1 + + + + + </p>A <code>ViewDefinition</code> must directly or indirectly specialize the base <code>ViewDefinition</code> <code><em>Views::View</em></code> from the Systems Model Library.</p> + + + OCL2.0 + specializesFromLibrary('Views::View') + + + + + + <p>The <code>usages</code> of this <code>ViewDefinition</code> that are <code>ViewUsages</code>.</p> + + + - - - <p>Always true for an <code>EventOccurrenceUsage</code>.</p> + + + <p>The composite <code>ownedRequirements</code> of this <code>ViewDefinition</code> that are <code>ViewpointUsages</code> for viewpoints satisfied by the <code>ViewDefinition</code>.</p> - - + + + + + + <p>The <code>RenderingUsage</code> to be used to render views defined by this <code>ViewDefinition</code>, which is the <code>referencedRendering</code> of the <code>ViewRenderingMembership</code> of the <code>ViewDefinition</code>.<p> + + + + + + + <p>The <code>Expressions</code> related to this <code>ViewDefinition</code> by <code>ElementFilterMemberships</code>, which specify conditions on <code>Elements</code> to be rendered in a view.</p> + + + - - - - <p>The EventOccurrenceUsages that reference a certain <code>eventOccurrence</code>.</p> + + + + <p>The ViewDefinition that owns a certain <code>viewCondition</code>.</p> - - + + - - - <p>An <code>AssignmentActionUsage</code> is an <code>ActionUsage</code> that is defined, directly or indirectly, by the <code>ActionDefinition</code> <em><code>AssignmentAction</code></em> from the Systems Model Library. It specifies that the value of the <code>referent</code> <code>Feature</code>, relative to the target given by the result of the <code>targetArgument</code> <code>Expression</code>, should be set to the result of the <code>valueExpression</code>.</p> - + + + <p>A <code>ViewUsage</code> is a usage of a <code>ViewDefinition</code> to specify the generation of a view of the <code>members</code> of a collection of <code>exposedNamespaces</code>. The <code>ViewUsage</code> can satisfy more <code>viewpoints</code> than its definition, and it can specialize the <code>viewRendering</code> specified by its definition.<p> - - - <p>An <code>AssignmentActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::assignmentActions</code></em> from the Systems Model Library.</p> + + + <p>The <code>exposedElements</code> of a <code>ViewUsage</code> are those <code>memberElements</code> of the imported <code>Memberships</code> from all the <code>Expose</code> <code>Relationships</code> for which the <code>includeAsExposed</code> operation returns true.</p> - + OCL2.0 - specializesFromLibrary('Actions::assignmentActions') + exposedElement = ownedImport->selectByKind(Expose). + importedMemberships(Set{}).memberElement-> + select(elm | includeAsExposed(elm))-> + asOrderedSet() - - - <p>The first <code>ownedFeature</code> of the first <code>parameter</code> of an <code>AssignmentActionUsage</code> must redefine <code><em>AssignmentAction::target::startingAt</em></code>.</p> + + + <p>The <code>satisfiedViewpoints</code> of a <code>ViewUsage</code> are its <code>ownedRequirements</code> that are composite <code>ViewpointUsages</code>. - + OCL2.0 - let targetParameter : Feature = inputParameter(1) in -targetParameter <> null and -targetParameter.ownedFeature->notEmpty() and -targetParameter.ownedFeature->first(). - redefines('AssignmentAction::target::startingAt') + satisfiedViewpoint = ownedRequirement-> + selectByKind(ViewpointUsage)-> + select(isComposite) - - - <p>The <code>valueExpression</code> of a <code>AssignmentActionUsage</code> is its second argument <code>Expression</code>.</p> + + + <p>The <code>viewConditions</code> of a <code>ViewUsage</code> are the <code>conditions</code> of its owned <code>ElementFilterMemberships</code>.</p> - + OCL2.0 - valueExpression = argument(2) + viewCondition = ownedMembership-> + selectByKind(ElementFilterMembership). + condition - - - <p>The <code>targetArgument</code> of a <code>AssignmentActionUsage</code> is its first argument <code>Expression</code>.</p> + + + <p>The <code>viewRendering</code> of a <code>ViewUsage</code> is the <code>referencedRendering</code> of its owned <code>ViewRenderingMembership<code>, if any.</p> - + OCL2.0 - targetArgument = argument(1) + viewRendering = + let renderings: OrderedSet(ViewRenderingMembership) = + featureMembership->selectByKind(ViewRenderingMembership) in + if renderings->isEmpty() then null + else renderings->first().referencedRendering + endif - - - <p>A composite <code>AssignmentActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::assignments</code></em> from the Systems Model Library.</p> + + + <p>A <code>ViewUsage</code> must have at most one <code>ViewRenderingMembership</code>.</p> - + OCL2.0 - isSubactionUsage() implies - specializesFromLibrary('Actions::Action::assignments') + featureMembership-> + selectByKind(ViewRenderingMembership)-> + size() <= 1 - - - <p>The first <code>ownedFeature</code> of the first <code>ownedFeature</code> of the first <code>parameter</code> of an <code>AssignmentActionUsage</code> must redefine <code><em>AssignmentAction::target::startingAt::accessedFeature</em></code>.</p> + + + <p>A <code>ViewUsage</code> must directly or indirectly specialize the base <code>ViewUsage</code> <code><em>Views::views</em></code> from the Systems Model Library.</p> - + OCL2.0 - let targetParameter : Feature = inputParameter(1) in -targetParameter <> null and -targetParameter.ownedFeature->notEmpty() and -targetParameter->first().ownedFeature->notEmpty() and -targetParameter->first().ownedFeature->first(). - redefines('AssigmentAction::target::startingAt::accessedFeature') + specializesFromLibrary('Views::views') - - - <p>The first <code>ownedFeature</code> of the first <code>ownedFeature</code> of the first <code>parameter</code> of an <code>AssignmentActionUsage</code> must redefine the <code>referent</code> of the <code>AssignmentActionUsage</code>.</p> + + + <p>A <code>ViewUsage</code> whose <code>owningType</code> is a <code>ViewDefinition</code> or <code>ViewUsage</code> must specialize the <code>ViewUsage</code> <code><em>Views::View::subviews</em></code> from the Systems Library Model.</p> - + OCL2.0 - let targetParameter : Feature = inputParameter(1) in -targetParameter <> null and -targetParameter.ownedFeature->notEmpty() and -targetParameter->first().ownedFeature->notEmpty() and -targetParameter->first().ownedFeature->first().redefines(referent) + owningType <> null and +(owningType.oclIsKindOf(ViewDefinition) or + owningType.oclIsKindOf(ViewUsage)) implies + specializesFromLibrary('Views::View::subviews') - - - <p>The <code>referent</code> of an <code>AssignmentActionUsage</code> is the first <code>Feature</code> that is the <code>memberElement</code> of a <code>ownedMembership</code> that is not a <code>FeatureMembership</code>.</p> + + + + <p>The <code>ViewDefinition</code> that is the <code>definition</code> of this <code>ViewUsage</code>.</p> - + + + + + + <p>The <code>nestedRequirements</code> of this <code>ViewUsage</code> that are <code>ViewpointUsages</code> for (additional) viewpoints satisfied by the <code>ViewUsage</code>.</p> + + + + + + + <p>The <code>Elements</code> that are exposed by this <code>ViewUsage</code>, which are those <code>memberElements</code> of the imported <code>Memberships</code> from all the <code>Expose</code> <code>Relationships</code> that meet all the owned and inherited <code>viewConditions</code>.</p> + + + + + + + <p>The <code>RenderingUsage</code> to be used to render views defined by this <code>ViewUsage</code>, which is the <code>referencedRendering</code> of the <code>ViewRenderingMembership</code> of the <code>ViewUsage</code>.<p> + + + + + + + <p>The <code>Expressions</code> related to this <code>ViewUsage</code> by <code>ElementFilterMemberships</code>, which specify conditions on <code>Elements</code> to be rendered in a view.</p> + + + + + + + <p>Determine whether the given <code>element</code> meets all the owned and inherited <code>viewConditions</code>.</p> + + + + OCL2.0 + let metadataFeatures: Sequence(AnnotatingElement) = + element.ownedAnnotation.annotatingElement-> + select(oclIsKindOf(MetadataFeature)) in +self.membership->selectByKind(ElementFilterMembership). + condition->forAll(cond | + metadataFeatures->exists(elem | + cond.checkCondition(elem))) + + + + + + + + + + + + <p>The ViewUsages that have a certain <code>ViewDefinition</code>.</p> + + + + + + + + <p>An <code>Expose</code> is an <code>Import</code> of <code>Memberships</code> into a <code>ViewUsage</code> that provide the <code>Elements</code> to be included in a view. Visibility is always ignored for an <code>Expose</code> (i.e., <code>isImportAll = true</code>).</p> + + + + <p>An <code>Expose</code> always imports all <code>Elements</code>, regardless of visibility.</p> + + OCL2.0 - referent = - let unownedFeatures : Sequence(Feature) = ownedMembership-> - reject(oclIsKindOf(FeatureMembership)).memberElement-> - selectByKind(Feature) in - if unownedFeatures->isEmpty() then null - else unownedFeatures->first().oclAsType(Feature) - endif + isImportAll - - - <p>An <code>AssignmentActionUsage</code> must have an <code>ownedMembership</code> that is not an <code>OwningMembership</code> and whose <code>memberElement</code> is a <code>Feature</code>.</p> + + + <p>The <code>importOwningNamespace</code> of an <code>Expose</code> must be a <code>ViewUsage</code>.</p> - + OCL2.0 - ownedMembership->exists( - not oclIsKindOf(OwningMembership) and - memberElement.oclIsKindOf(Feature)) + importOwningNamespace.oclIsType(ViewUsage) - - - <p>The <code>featureTarget</code> of the <code>referent</code> of an <code>AssignmentActionUsage</code> must be able to have time-varying values.</p> + + + <p>An <code>Expose</code> always has <code>protected</code> visibility.</p> - + OCL2.0 - referent <> null implies referent.featureTarget.mayTimeVary + visibility = VisibilityKind::protected - - - - <p>The <code>Expression</code> whose value is an occurrence in the domain of the <code>referent</code> <code>Feature</code>, for which the value of the <code>referent</code> will be set to the result of the <code>valueExpression</code> by this <code>AssignmentActionUsage</code>.</p> + + + + <p>An <code>Expose</code> always has <code>protected</code> visibility.</p> - - + - - - <p>The <code>Expression</code> whose result is to be assigned to the <code>referent</code> <code>Feature</code>.</p> + + + <p>An <code>Expose</code> always imports all <code>Elements</code>, regardless of visibility (<code>isImportAll = true</code>).</p> - - + + - - - <p>The <code>Feature</code> whose value is to be set.</p> + + + + + <p>The ViewDefinition that owns a certain <code>rendering</code>.</p> - - - + + + - - - <p>A <code>TriggerInvocationExpression</code> is an <code>InvocationExpression</code> that invokes one of the trigger <code>Functions</code> from the Kernel Semantic Library <code><em>Triggers<em></code> package, as indicated by its <code>kind</code>.</p> - - - - <p>If a <code>TriggerInvocationExpression</code> has <code>kind = after</code>, then it must have an argument <code>Expression</code> with a <code>result</code> that conforms to the type <em><code>Quantities::ScalarQuantityValue</code></em> and a <code>feature</code> that directly or indirectly redefines <em><code>Quantities::TensorQuantityValue::mRef</code></em> and directly or indirectly specializes <em><code>ISQBase::DurationUnit</code></em>.</p> + + + + <p>The ViewDefinitions that feature a certain ViewUsage.</p> - - OCL2.0 - kind = TriggerKind::after implies - argument->notEmpty() and - argument->at(1).result.specializesFromLibrary('Quantities::ScalarQuantityValue') and - let mRef : Element = - resolveGlobal('Quantities::TensorQuantityValue::mRef').ownedMemberElement in - argument->at(1).result.feature-> - select(ownedRedefinition.redefinedFeature-> - closure(ownedRedefinition.redefinedFeature)-> - includes(mRef))-> - exists(specializesFromLibrary('ISQBase::DurationUnit')) - - - - - <p>If a <code>TriggerInvocationExpression</code> has <code>kind = at</code>, then it must have an argument <code>Expression</code> with a <code>result</code> that conforms to the type <em><code>Time::TimeInstantValue</code></em>.</p> + + + + + + + + + + + + + + <p>The ViewpointUsage that has a certain <code>viewpointStakeholder</code>.</p> - + + + + + + + + <p>The ViewUsage that owns a certain <code>viewCondition</code>.</p> + + + + + + + + <p>A <code>NamespaceExpose</code> is an <code>Expose</code> <code>Relationship</code> that exposes the <code>Memberships</code> of a specific <code>importedNamespace</code> and, if <code>isRecursive = true</code>, additional <code>Memberships</code> recursively.</p> + + + + + + + <p>A <code>ViewpointDefinition</code> is a <code>RequirementDefinition</code> that specifies one or more stakeholder concerns that are to be satisfied by creating a view of a model.</p> + + + + <p>The <code>viewpointStakeholders</code> of a <code>ViewpointDefinition</code> are the <code>ownedStakeholderParameters</code> of all <code>featureMemberships</code> that are <code>StakeholderMemberships</code>.</p> + + OCL2.0 - kind = TriggerKind::at implies - argument->notEmpty() and - argument->at(1).result.specializesFromLibrary('Time::TimeInstantValue') + viewpointStakeholder = framedConcern.featureMemberhsip-> + selectByKind(StakeholderMembership). + ownedStakeholderParameter - - - <p>If a <code>TriggerInvocationExpression</code> has <code>kind = when</code>, then it must have an <code>argument</code> that is a <code>FeatureReferenceExpression</code> whose <code>referent</code> is an <code>Expression</code> with a <code>result</code> that conforms to the type <em><code>ScalarValues::Boolean</code></em>.</p> + + + <p>A <code>ViewpointDefinition</code> must directly or indirectly specialize the base <code>ViewpointDefinition</code> <code><em>Views::ViewpointCheck</em></code> from the Systems Model Library.</p> - + OCL2.0 - kind = TriggerKind::when implies - argument->notEmpty() and - argument->at(1).oclIsKindOf(FeatureReferenceExpression) and - let referent : Feature = - argument->at(1).oclAsType(FeatureReferenceExpression).referent in - referent.oclIsKindOf(Expression) and - referent.oclAsType(Expression).result.specializesFromLibrary('ScalarValues::Boolean') + specializesFromLibrary('Views::ViewpointCheck') - - - - <p>Indicates which of the <code>Functions</code> from the <code><em>Triggers</em></code> model in the Kernel Semantic Library is to be invoked by this <code>TriggerInvocationExpression</code>.</p> + + + + <p>The <code>PartUsages</code> that identify the stakeholders with concerns framed by this <code>ViewpointDefinition</code>, which are the owned and inherited <code>stakeholderParameters</code> of the <code>framedConcerns</code> of this <code>ViewpointDefinition</code>.</p> + + - - - <p>Return one of the <code>Functions</code> <em><code>TriggerWhen</code></em>, <em><code>TriggerAt</code></em> or <em><code>TriggerAfter</code></em>, from the Kernel Semantic Library <em><code>Triggers</code></em> package, depending on whether the <code>kind</code> of this <code>TriggerInvocationExpression</code> is <code>when</code>, <code>at</code> or <code>after</code>, respectively.</p> + + + + + + + + + + + <p>The CaseDefinitions that have a certain RequirementUsage as their <code>objectiveRequirement</code>.</p> - - - OCL2.0 - resolveGlobal( - if kind = TriggerKind::when then - 'Triggers::TriggerWhen' - else if kind = TriggerKind::at then - 'Triggers::TriggerAt' - else - 'Triggers::TriggerAfter' - endif endif -).memberElement.oclAsType(Type) - - - - + + + - - - <p>A <code>SendActionUsage</code> is an <code>ActionUsage</code> that specifies the sending of a payload given by the result of its <code>payloadArgument</code> <code>Expression</code> via a <em><code>MessageTransfer</code></em> whose <em><code>source</code></em> is given by the result of the <code>senderArgument</code> <code>Expression</code> and whose <code>target</code> is given by the result of the <code>receiverArgument</code> <code>Expression</code>. If no <code>senderArgument</code> is provided, the default is the <em><code>this</code></em> context for the action. If no <code>receiverArgument</code> is given, then the receiver is to be determined by, e.g., outgoing <em><code>Connections</code></em> from the sender.</p> - + + + + <p>The CaseUsages that have a certain PartUsage as an <code>actorParameter</code>.</p> + + + + + + + + <p>A <code>CaseDefinition</code> is a <code>CalculationDefinition</code> for a process, often involving collecting evidence or data, relative to a subject, possibly involving the collaboration of one or more other actors, producing a result that meets an objective.</p> - - - <p>The <code>senderArgument</code> of a <code>SendActionUsage</code> is its second argument <code>Expression</code>.</p> + + + <p>The <code>objectiveRequirement</code> of a <code>CaseDefinition</code> is the <code>ownedObjectiveRequirement</code> of its <case>ObjectiveMembership</code>, if any.</p> - + OCL2.0 - senderArgument = argument(2) + objectiveRequirement = + let objectives: OrderedSet(RequirementUsage) = + featureMembership-> + selectByKind(ObjectiveMembership). + ownedRequirement in + if objectives->isEmpty() then null + else objectives->first().ownedObjectiveRequirement + endif - - - <p>The <code>payloadArgument</code> of a <code>SendActionUsage</code> is its first argument <code>Expression</code>.</p> + + + <p>A <code>CaseDefinition</code> must have at most one <code>featureMembership</code> that is a <code>ObjectiveMembership</code>.</p> - + OCL2.0 - payloadArgument = argument(1) + featureMembership-> + selectByKind(ObjectiveMembership)-> + size() <= 1 - - - <p>A <code>SendActionUsage</code> must have at least three owned input <code>parameters</code>, corresponding to its <em><code>payload</code></em>, <em><code>sender</code></em> and <em><code>receiver</code></em>, respectively (whether or not they have <code>FeatureValues</code>).</p> + + + <p>The <code>subjectParameter</code> of a <code>CaseDefinition</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p> - + OCL2.0 - inputParameters()->size() >= 3 + subjectParameter = + let subjectMems : OrderedSet(SubjectMembership) = + featureMembership->selectByKind(SubjectMembership) in + if subjectMems->isEmpty() then null + else subjectMems->first().ownedSubjectParameter + endif - - - <p>The <code>receiverArgument</code> of a <code>SendActionUsage</code> is its third argument <code>Expression</code>.</p> + + + <p>The <code>actorParameters</code> of a <code>CaseDefinition</code> are the <code>ownedActorParameters</code> of the <code>ActorMemberships</code> of the <code>CaseDefinition</code>.</p> - + OCL2.0 - receiverArgument = argument(3) + actorParameter = featureMembership-> + selectByKind(ActorMembership). + ownedActorParameter - - - <p>A composite <code>SendActionUsage</code> that is a subaction must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::sendSubactions</code></em> from the Systems Model Library.</p> + + + <p>A <code>CaseDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> - + + English + featureMembership->selectByKind(SubjectMembership)->size() <= 1 + + + + + <p>The <code>subjectParameter</code> of a <code>CaaseDefinition</code> must be its first <code>input</code>.</p> + + OCL2.0 - isSubactionUsage() implies - specializesFromLibrary('Actions::Action::acceptSubactions') + input->notEmpty() and input->first() = subjectParameter - - - <p>A <code>SendActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::sendActions</code></em> from the Systems Model Library.</p> + + + <p>A <code>CaseDefinition</code> must directly or indirectly specialize the base <code>CaseDefinition</code> <em><code>Cases::Case></code></em> from the Systems Model Library.</p> - + OCL2.0 - specializesFromLibrary('Actions::sendActions') + specializesFromLibrary('Cases::Case') - - - - <p>An <code>Expression</code> whose result is bound to the <em><code>receiver</code></em> input parameter of this <code>SendActionUsage</code>.</p> + + + + <p>The <code>RequirementUsage</code> representing the objective of this <code>CaseDefinition</code>.</p> - - + + - - - <p>An <code>Expression</code> whose result is bound to the <code><em>payload</em></code> input parameter of this <code>SendActionUsage</code>.</p> - + + + <p>The <code>parameter</code> of this <code>CaseDefinition</code> that represents its subject.</p> - - + + - - - <p>An <code>Expression</code> whose result is bound to the <em><code>sender</code></em> input parameter of this <code>SendActionUsage</code>.</p> - + + + <p>The <code>parameters</code> of this <code>CaseDefinition</code> that represent actors involved in the case.</p> - - + + - - - <p>An <code>ActionDefinition</code> is a <code>Definition</code> that is also a <code>Behavior</code> that defines an <em><code>Action</code></em> performed by a system or part of a system.</p> + + + + <p>The CaseUsages being typed by a certain CaseDefinition.</p> + + + + + + + + <p>An <code>ObjectiveMembership</code> is a <code>FeatureMembership</code> that indicates that its <code>ownedObjectiveRequirement</code> is the objective <code>RequirementUsage</code> for its <code>owningType</code>, which must be a <code>CaseDefinition</code> or <code>CaseUsage</code>.</p> - - - <p>An <code>ActionDefinition</code> must directly or indirectly specialize the <code>ActionDefinition</code> <em><code>Actions::Action</code></em> from the Systems Model Library.</p> + + + <p>The <code>owningType</code> of an <code>ObjectiveMembership</code> must be a <code>CaseDefinition</code> or <code>CaseUsage</code>.</p> - + OCL2.0 - specializesFromLibrary('Actions::Action') + owningType.oclIsType(CaseDefinition) or +owningType.oclIsType(CaseUsage) + - - - <p> The <code>actions</code> of a <code>ActionDefinition</code> are those of its <code>usages</code> that are <code>ActionUsages</code>.</p> + + + <p>The <code>ownedObjectiveRequirement</code> of an <code>ObjectiveMembership</code> must be composite.</p> - + OCL2.0 - action = usage->selectByKind(ActionUsage) + ownedObjectiveRequirement.isComposite - - - - - <p>The <code>ActionUsages</code> that are <code>steps</code> in this <code>ActionDefinition</code>, which define the actions that specify the behavior of the <code>ActionDefinition</code>.</p> - - - - - - - - - - - - - - - - <p>The <code>WhileLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>untilArgument</code>.</p> - - - - - - - - - <p>The AssignmentActionUsage that has a certain Expression as its <code>targetArgument</code>.</p> + + + + <p>The RequirementUsage that is the <code>ownedMemberFeature</code> of this RequirementUsage.</p> + - - - + + + - - - - <p>The <code>IfActionUsage</code> that has a certain <code>ActionUsage</code> as its <code>thenAction</code>.</p> + + + + <p>The ObjectMembership that owns a particular RequirementUsage as its <code>ownedObjectiveRequirement</code>.</p> - - + + - - - <p>A <code>WhileLoopActionUsage</code> is a <code>LoopActionUsage</code> that specifies that the <code>bodyAction</code> <code>ActionUsage</code> should be performed repeatedly while the result of the <code>whileArgument</code> <code>Expression</code> is true or until the result of the <code>untilArgument</code> <code>Expression</code> (if provided) is true. The <code>whileArgument</code> <code>Expression</code> is evaluated before each (possible) performance of the <code>bodyAction</code>, and the <code>untilArgument</code> <code>Expression</code> is evaluated after each performance of the <code>bodyAction</code>.</p> + + + <p>A <code>CaseUsage</code> is a <code>Usage</code> of a <code>CaseDefinition</code>.</p> - - - <p>A composite <code>WhileLoopActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::whileLoops</code></em> from the Systems Model Library.</p> + + + <p>The <code>objectiveRequirement</code> of a <code>CaseUsage</code> is the <code>RequirementUsage</code> it owns via an <case>ObjectiveMembership</code>, if any.</p> - + OCL2.0 - isSubactionUsage() implies - specializesFromLibrary('Actions::Action::whileLoops') + objectiveRequirement = + let objectives: OrderedSet(RequirementUsage) = + featureMembership-> + selectByKind(ObjectiveMembership). + ownedRequirement in + if objectives->isEmpty() then null + else objectives->first().ownedObjectiveRequirement + endif - - - <p>The <code>whileArgument</code> of a <code>WhileLoopActionUsage</code> is its third input <code>parameter</code>, which, if it exists, must be an <code>Expression</code>.</p> + + + <p>A <code>CaseUsage</code> must have at most one <code>featureMembership</code> that is a <code>ObjectiveMembership</code>.</p> - + OCL2.0 - untilArgument = - let parameter : Feature = inputParameter(3) in - if parameter <> null and parameter.oclIsKindOf(Expression) then - parameter.oclAsType(Expression) - else - null - endif - + featureMembership-> + selectByKind(ObjectiveMembership)-> + size() <= 1 - - - <p>A <code>WhileLoopActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::whileLoopActions</code></em> from the Systems Model Library.</p> + + + <p>A <code>CaseUsage</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> - + OCL2.0 - specializesFromLibrary('Actions::whileLoopActions') + featureMembership-> + selectByKind(SubjectMembership)-> + size() <= 1 - - - <p>The <code>whileArgument</code> of a <code>WhileLoopActionUsage</code> is its first input <code>parameter</code>, which must be an <code>Expression</code>.</p> + + + <p>The <code>actorParameters</code> of a <code>CaseUsage</code> are the <code>ownedActorParameters</code> of the <code>ActorMemberships</code> of the <code>CaseUsage</code>.</p> - + OCL2.0 - whileArgument = - let parameter : Feature = inputParameter(1) in - if parameter <> null and parameter.oclIsKindOf(Expression) then - parameter.oclAsType(Expression) - else - null - endif - + actorParameter = featureMembership-> + selectByKind(ActorMembership). + ownedActorParameter - - - <p>A <code>WhileLoopActionUsage</code> must have at least two owned <code>input</code> <code>parameters</code>.</p> + + + <p>The <code>subjectParameter</code> of a <code>CaseUsage</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p> - + OCL2.0 - inputParameters()->size() >= 2 + subjectParameter = + let subjects : OrderedSet(SubjectMembership) = + featureMembership->selectByKind(SubjectMembership) in + if subjects->isEmpty() then null + else subjects->first().ownedSubjectParameter + endif - - - - <p>The <code>Expression</code> whose result, if true, determines that the <code>bodyAction</code> should continue to be performed. It is the first owned <code>parameter</code> of the <code>WhileLoopActionUsage</code>.</p> - - - - - - - - <p>The <code>Expression</code> whose result, if false, determines that the <code>bodyAction</code> should continue to be performed. It is the (optional) third owned <code>parameter</code> of the <code>WhileLoopActionUsage</code>.</p> - - - - - - - - - - <p>The <code>WhileLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>whileArgument</code>.</p> + + + <p>The <code>subjectParameter</code> of a <code>CaseUsage</code> must be its first <code>input</code>.</p> - - - - - - - <p>A <code>PerformActionUsage</code> is an <code>ActionUsage</code> that represents the performance of an <code>ActionUsage</code>. Unless it is the <code>PerformActionUsage</code> itself, the <code>ActionUsage</code> to be performed is related to the <code>PerformActionUsage</code> by a <code>ReferenceSubsetting</code> relationship. A <code>PerformActionUsage</code> is also an <code>EventOccurrenceUsage</code>, with its <code>performedAction</code> as the <code>eventOccurrence</code>.</p> - - - - <p>If a <code>PerformActionUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of the <code>referencedFeature</code> must be an <code>ActionUsage</code>.</p> + + OCL2.0 + input->notEmpty() and input->first() = subjectParameter + + + + + <p>A <code>CaseUsage</code> must directly or indirectly specialize the base <code>CaseUsage</code> <em><code>Cases::cases</code></em> from the Systems Model Library.</p> - + OCL2.0 - referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(ActionUsage) + specializesFromLibrary('Cases::cases') - - - <p>If a <code>PerformActionUsage</code> has an <code>owningType</code> that is a <code>PartDefinition</code> or <code>PartUsage</code>, then it must directly or indirectly specialize the <code>ActionUsage</code> <code><em>Parts::Part::performedActions</em></code>.</p> + + + <p>A composite <code>CaseUsage</code> whose <code>owningType</code> is a <code>CaseDefinition</code> or <code>CaseUsage</code> must directly or indirectly specialize the <code>CaseUsage</code> <em><code>Cases::Case::subcases</code></em>.</p> - + OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(PartDefinition) or - owningType.oclIsKindOf(PartUsage)) implies - specializesFromLibrary('Parts::Part::performedActions') + isComposite and owningType <> null and + (owningType.oclIsKindOf(CaseDefinition) or + owningType.oclIsKindOf(CaseUsage)) implies + specializesFromLibrary('Cases::Case::subcases') - - - - - <p>The <code>ActionUsage</code> to be performed by this <code>PerformedActionUsage</code>. It is the <code>eventOccurrence</code> of the <code>PerformActionUsage</code> considered as an <code>EventOccurrenceUsage</code>, which must be an <code>ActionUsage</code>.</p> + + + + <p>The <code>RequirementUsage</code> representing the objective of this <code>CaseUsage</code>.</p> - - + + - - - <p>The naming <code>Feature</code> of a <code>PerformActionUsage</code> is its <code>performedAction</code>, if this is different than the <code>PerformActionUsage</code>. If the <code>PerformActionUsage</code> is its own <code>performedAction</code>, then the naming <code>Feature</code> is the same as the usual default for a <code>Usage</code>.</p> + + + <p>The CaseDefinition that is the type of this CaseUsage.</p> - - - OCL2.0 - if performedAction <> self then performedAction -else self.oclAsType(Usage).namingFeature() -endif - - - - - - - + + + + + + <p>The <code>parameter</code> of this <code>CaseUsage</code> that represents its subject.</p> + + + + + + + + <p>The <code>parameters</code> of this <code>CaseUsage</code> that represent actors involved in the case.</p> + + + + + + + + + <p>The CaseUsages that have a certain Usage as their <code>subjectParameter</code>.</p> + + + + + + + + + + + + + + + <p>The Usage in which the <code>nestedCase</code> is nested.</p> + + + + + + + + + <p>The CaseDefinitions that have a certain Usage as their <code>subjectParameter</code>.</p> + + + + - - - - <p>The IfActionUsage that has a certain ActionUsage as its <code>elseAction</code>.</p> + + + + <p>The CaseDefinitions that have a certain PartUsage as an <code>actorParameter</code>.</p> - - + + - - - - The <code>ForLoopActionUsage</code> that has a certain <code>ReferenceUsage</code> as its <code>loopVariable</code>. + + + + <p>The UseCaseUsage that includes a certain <code>includedUseCase</code>.</p> - - + + - - - - <p>The <code>LoopActionUsage</code> that has a certain <code>ActionUsage</code> as its <code>bodyAction</code>.</p> + + + + <p>The IncludeUseCaseUsages that have a certain UseCaseUsage as their <code>includedUseCase</code>.</p> - - + + - - - - <p>The <code>TerminateActionUsage</code> that has a certain <code>Expression</code> as its <code>terminatedOccurrenceArgument</code>.</p> + + + + <p>The UseCaseUsages being typed by a certain UseCaseDefinition.</p> - - + + - - - <p>A <code>ForLoopActionUsage</code> is a <code>LoopActionUsage</code> that specifies that its <code>bodyAction</code> <code>ActionUsage</code> should be performed once for each value, in order, from the sequence of values obtained as the result of the <code>seqArgument</code> <code>Expression</code>, with the <code>loopVariable</code> set to the value for each iteration.</p> + + + <p>A <code>UseCaseUsage</code> is a <code>Usage</code> of a <code>UseCaseDefinition</code>.</p> - - - <p>The <code>seqArgument</code> of a <code>ForLoopActionUsage</code> is its first argument <code>Expression</code>.</p> + + + <p>The <code>includedUseCases<code> of a <code>UseCaseUsage</code> are the <code>useCaseIncludeds</code> of the <code>IncludeUseCaseUsages</code> owned by the <code>UseCaseUsage<code>.</p> - + OCL2.0 - seqArgument = argument(1) - + includedUseCase = ownedUseCase-> + selectByKind(IncludeUseCaseUsage). + useCaseIncluded - - - <p>A composite <code>ForLoopActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::forLoops</code></em> from the Systems Model Library.</p> + + + <p>A <code>UseCaseUsage</code> must directly or indirectly specializes the base <code>UseCaseUsage</code> <em><code>UseCases::useCases</code></em> from the Systems Model Library.</p> - + OCL2.0 - isSubactionUsage() implies - specializesFromLibrary('Actions::Action::forLoops') + specializesFromLibrary('UseCases::useCases') - - - <p>The <code>loopVariable</code> of a <code>ForLoopActionUsage</code> must redefine the <code>ActionUsage</code> <code><em>Actions::ForLoopAction::var</em></code>.</p> + + + <p>A composite <code>UseCaseUsage</code> whose <code>owningType</code> is a <code>UseCaseDefinition</code> or <code>UseCaseUsage</code> must specialize the <code>UseCaseUsage</code> <em><code>UseCases::UseCase::subUseCases</code></em> from the Systems Model Library.</p> - + OCL2.0 - loopVariable <> null and -loopVariable.redefinesFromLibrary('Actions::ForLoopAction::var') + isComposite and owningType <> null and +(owningType.oclIsKindOf(UseCaseDefinition) or + owningType.oclIsKindOf(UseCaseUsage)) implies + specializesFromLibrary('UseCases::UseCase::subUseCases') - - - <p>A <code>ForLoopActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::forLoopActions</code></em> from the Systems Model Library.</p> + + + + <p>The <code>UseCaseDefinition</code> that is the <code>definition</code> of this <code>UseCaseUsage</code>.</p> - + + + + + + <p>The <code>UseCaseUsages</code> that are included by this <code>UseCaseUse</code>, which are the <code>useCaseIncludeds</code> of the <code>IncludeUseCaseUsages</code> owned by this <code>UseCaseUsage<code>.</p> + + + + + + + + <p>An <code>IncludeUseCaseUsage</code> is a <code>UseCaseUsage</code> that represents the inclusion of a <code>UseCaseUsage</code> by a <code>UseCaseDefinition</code> or <code>UseCaseUsage</code>. Unless it is the <code>IncludeUseCaseUsage</code> itself, the <code>UseCaseUsage</code> to be included is related to the <code>includedUseCase</code> by a <code>ReferenceSubsetting</code> <code>Relationship</code>. An <code>IncludeUseCaseUsage</code> is also a PerformActionUsage, with its <code>useCaseIncluded</code> as the <code>performedAction</code>.</p> + + + + + <p>A <code>IncludeUseCaseUsage</code> whose <code>owningType</code> is a <code>UseCaseDefinition</code> or <code>UseCaseUsage</code> must directly or indirectly specialize the <code>UseCaseUsage</code> <em><code>UseCases::UseCase::includedUseCases</code></em> from the Systems Model Library.</p> + + OCL2.0 - specializesFromLibrary('Actions::forLoopActions') + owningType <> null and +(owningType.oclIsKindOf(UseCaseDefinition) or + owningType.oclIsKindOf(UseCaseUsage) implies + specializesFromLibrary('UseCases::UseCase::includedUseCases') - - - <p>The <code>loopVariable</code> of a <code>ForLoopActionUsage</code> is its first <code>ownedFeature</code>, which must be a <code>ReferenceUsage</code>.</p> + + + <p>If an <code>IncludeUseCaseUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of the <code>referencedFeature</code> must be a <code>UseCaseUsage</code>.</p> - + OCL2.0 - loopVariable = - if ownedFeature->isEmpty() or - not ownedFeature->first().oclIsKindOf(ReferenceUsage) then - null - else - ownedFeature->first().oclAsType(ReferenceUsage) - endif + referencedFeatureTarget() <> null implies + referencedFeatureTarget().oclIsKindOf(UseCaseUsage) - - - <p>The first <code>ownedFeature</code> of a <code>ForLoopActionUsage</code> must be a <code>ReferenceUsage</code>.</p> + + + + + <p>The <code>UseCaseUsage</code> to be included by this <code>IncludeUseCaseUsage</code>. It is the <code>performedAction</code> of the <code>IncludeUseCaseUsage</code> considered as a <code>PerformActionUsage</code>, which must be a <code>UseCaseUsage</code>.</p> + - - OCL2.0 - ownedFeature->notEmpty() and -ownedFeature->at(1).oclIsKindOf(ReferenceUsage) + + + + + + + <p>A <code>UseCaseDefinition</code> is a <code>CaseDefinition</code> that specifies a set of actions performed by its subject, in interaction with one or more actors external to the subject. The objective is to yield an observable result that is of value to one or more of the actors.</p> + + + + <p>The <code>includedUseCases<code> of a <code>UseCaseDefinition</code> are the <code>useCaseIncludeds</code> of the <code>IncludeUseCaseUsages</code> owned by the <code>UseCaseDefinition<code>.</p> + + + OCL2.0 + includedUseCase = ownedUseCase-> + selectByKind(IncludeUseCaseUsage). + useCaseIncluded - - - <p>A <code>ForLoopActionUsage</code> must have two owned <code>input</code> <code>parameters</code>.</p> + + + <p>A <code>UseCaseDefinition</code> must directly or indirectly specializes the base <code>UseCaseDefinition</code> <code><em>UseCases::UseCase</em></code> from the Systems Model Library.</p> - + + + + OCL2.0 - inputParameters()->size() = 2 + specializesFromLibrary('UseCases::UseCase') - - - - <p>The <code>Expression</code> whose result provides the sequence of values to which the <code>loopVariable</code> is set for each iterative performance of the <code>bodyAction</code>. It is the <code>Expression</code> whose <code>result</code> is bound to the <em><code>seq</code></em> <code>input</code> <code>parameter</code> of this <code>ForLoopActionUsage</code>.</p> - + + + + <p>The <code>UseCaseUsages</code> that are included by this <code>UseCaseDefinition</code>, which are the <code>useCaseIncludeds</code> of the <code>IncludeUseCaseUsages</code> owned by this <code>UseCaseDefinition<code>.</p> - - + + - - - <p>The <code>ownedFeature</code> of this <co>ForLoopActionUsage</code> that acts as the loop variable, which is assigned the successive values of the input sequence on each iteration. It is the <code>ownedFeature</code> that redefines <em><code>ForLoopAction::var</code></em>.</p> + + + + + <p>The UseCaseDefinition that includes a certain <code>includedUseCase</code>.</p> - - - + + + - - - <p>An <code>ActionUsage</code> is a <code>Usage</code> that is also a <code>Step</code>, and, so, is typed by a <code>Behavior</code>. Nominally, if the type is an <code>ActionDefinition</code>, an <code>ActionUsage</code> is a <code>Usage</code> of that <code>ActionDefinition</code> within a system. However, other kinds of kernel <code>Behaviors</code> are also allowed, to permit use of <code>Behaviors</code> from the Kernel Model Libraries.</p> - + + + + <p>The AnalysisCaseUsages that have a certain Expression as their <code>resultExpression</code>.</p> + + + + + + + + + <p>The AnalysisCaseDefinitions that have a certain Expression as their <code>resultExpression</code>.</p> + + + + + + + + + <p>The AnalysisCaseUsages being typed by a certain AnalysisCaseDefinition.</p> + + + + + + + + <p>An <code>AnalysisCaseUsage</code> is a <code>Usage</code> of an <code>AnalysisCaseDefinition</code>.</p> - - - <p>A composite <code>ActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::subactions</code></em> from the Systems Model Library.</p> + + + <p>The <code>resultExpression</code> of a <code>AnalysisCaseUsage</code> is the <code>ownedResultExpression</code> of its <code>ResultExpressionMembership</code>, if any.</p> - + OCL2.0 - isSubactionUsage() implies - specializesFromLibrary('Actions::Action::subactions') + resultExpression = + let results : OrderedSet(ResultExpressionMembership) = + featureMembersip-> + selectByKind(ResultExpressionMembership) in + if results->isEmpty() then null + else results->first().ownedResultExpression + endif - - - <p>An <code>ActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::actions</code></em> from the Systems Model Library.</p> + + + <p>An <code>AnalysisCaseUsage</code> must directly or indirectly specialize the base <code>AnalysisCaseUsage</code> <code><em>AnalysisCases::analysisCases</em></code> from the Systems Model Library.</p> - + OCL2.0 - specializesFromLibrary('Actions::actions') + specializesFromLibrary('AnalysisCases::analysisCases') - - - <p>A composite <code>ActionUsage</code> whose <code>owningType</code> is <code>PartDefinition</code> or <code>PartUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Parts::Part::ownedActions</code></em> from the Systems Model Library.</p> + + + <p>A composite <code>AnalysisCaseUsage</code> whose <code>owningType</code> is an <code>AnalysisCaseDefinition</code> or <code>AnalysisCaseUsage</code> must specialize the <code>AnalysisCaseUsage</code> <code><em>AnalysisCases::AnalysisCase::subAnalysisCases</code> from the Systems Model Library.</p> - + OCL2.0 isComposite and owningType <> null and -(owningType.oclIsKindOf(PartDefinition) or - owningType.oclIsKindOf(PartUsage)) implies - specializesFromLibrary('Parts::Part::ownedActions') + (owningType.oclIsKindOf(AnalysisCaseDefinition) or + owningType.oclIsKindOf(AnalysisCaseUsage)) implies + specializesFromLibrary('AnalysisCases::AnalysisCase::subAnalysisCases') - - - <p>An <code>ActionUsage</code> that is the <code><em>entry</em></code>, <code><em>do</em></code>, or <code><em>exit</em></code> <code><em>Action</em></code> of a <code>StateDefinition</code> or <code>StateUsage</code> must redefine the <code>entryAction</code>, <code>doAction</code>, or <code>exitAction</code> <code>feature</code>, respectively, of the <code>StateDefinition</code> <code><em>States::StateAction</em></code> from the Systems Model Library.</p> + + + + <p>The <code>AnalysisCaseDefinition</code> that is the <code>definition</code> of this <code>AnalysisCaseUsage</code>.</p> - + + + + + + <p>An <code>Expression</code> used to compute the <code>result</code> of the <code>AnalysisCaseUsage</code>, owned via a <code>ResultExpressionMembership</code>.</p> + + + + + + + + <p>An <code>AnalysisCaseDefinition</code> is a <code>CaseDefinition</code> for the case of carrying out an analysis.</p> + + + + <p>The <code>resultExpression</code> of a <code>AnalysisCaseDefinition</code> is the <code>ownedResultExpression</code> of its <code>ResultExpressionMembership</code>, if any.</p> + + OCL2.0 - owningFeatureMembership <> null and -owningFeatureMembership.oclIsKindOf(StateSubactionMembership) implies - let kind : StateSubactionKind = - owningFeatureMembership.oclAsType(StateSubactionMembership).kind in - if kind = StateSubactionKind::entry then - redefinesFromLibrary('States::StateAction::entryAction') - else if kind = StateSubactionKind::do then - redefinesFromLibrary('States::StateAction::doAction') - else - redefinesFromLibrary('States::StateAction::exitAction') - endif endif + resultExpression = + let results : OrderedSet(ResultExpressionMembership) = + featureMembersip-> + selectByKind(ResultExpressionMembership) in + if results->isEmpty() then null + else results->first().ownedResultExpression + endif - - - - - <p>The <code>Behaviors</code> that are the <code>types</code> of this <code>ActionUsage</code>. Nominally, these would be <code>ActionDefinitions</code>, but other kinds of Kernel <code>Behaviors</code> are also allowed, to permit use of <code>Behaviors</code> from the Kernel Model Libraries.</p> + + + <p>An <code>AnalysisCaseDefinition</code> must directly or indirectly specialize the base <code>AnalysisCaseDefinition</code> <code><em>AnalysisCases::AnalysisCase</em></code> from the Systems Model Library.</p> + + + OCL2.0 + specializesFromLibrary('AnalysisCases::AnalysisCase') + + + + + + <p>An <code>Expression</code> used to compute the <code>result</code> of the <code>AnalysisCaseDefinition</code>, owned via a <code>ResultExpressionMembership</code>.</p> - - + + - - - <p>Return the owned input <code>parameters</code> of this <code>ActionUsage</code>.</p> - - - - OCL2.0 - input->select(f | f.owner = self) - - - - - - - - - - <p>Return the <code>i</code>-th owned input <code>parameter</code> of the <code>ActionUsage</code>. Return null if the <code>ActionUsage</code> has less than <code>i</code> owned input <code>parameters</code>.</p> - - - - OCL2.0 - if inputParameters()->size() < i then null -else inputParameters()->at(i) -endif - - - - - - - - - - - - - <p>Return the <code>i</code>-th argument <code>Expression</code> of an <code>ActionUsage</code>, defined as the <code>value</code> <code>Expression</code> of the <code>FeatureValue</code> of the <code>i</code>-th owned input <code>parameter</code> of the <code>ActionUsage</code>. Return null if the <code>ActionUsage</code> has less than <code>i</code> owned input <code>parameters</code> or the <code>i</code>-th owned input <code>parameter</code> has no <code>FeatureValue</code>.</p> - - - - OCL2.0 - if inputParameter(i) = null then null -else - let featureValue : Sequence(FeatureValue) = inputParameter(i). - ownedMembership->select(oclIsKindOf(FeatureValue)) in - if featureValue->isEmpty() then null - else featureValue->at(1).value - endif -endif - - - - - - - - - - - - - <p>Check if this <code>ActionUsage</code> is composite and has an <code>owningType</code> that is an <code>ActionDefinition</code> or <code>ActionUsage</code> but is <em>not</em> the <code>entryAction</code> or <code>exitAction</em></code> of a <code>StateDefinition</code> or <code>StateUsage</code>. If so, then it represents an <code><em>Action</em></code> that is a <code><em>subaction</em></code> of another <code><em>Action</em></code>.</p> - - - - OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(ActionDefinition) or - owningType.oclIsKindOf(ActionUsage)) and -(owningFeatureMembership.oclIsKindOf(StateSubactionMembership) implies - owningFeatureMembership.oclAsType(StateSubactionMembership).kind = - StateSubactionKind::do) - - - - - - - - - - - <p>The <code>ForLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>seqArgument</code>.</p> - - - - - - - - <p>The <code>SendActionUsage</code> that has a certain <code>Expression</code> as its <code>senderArgument</code>.</p> + + + + <p>The Definition that owns the <code>ownedState</code>.</p> - - + + - - - <p>A <code>TerminateActionUsage</code> is an <code>ActionUsage</code> that directly or indirectly specializes the <code>ActionDefinition</code> <em><code>TerminateAction</code></em> from the Systems Model Library, which causes a given <em><code>terminatedOccurrence</code></em> to end during its performance. By default, the <code>terminatedOccurrence</code> is the featuring instance (<em><code>that</code></em>) of the performance of the <code>TerminateActionUsage</code>, generally the performance of its immediately containing <code>ActionDefinition</code> or <code>ActionUsage</code>.</p> + + + <p>A <code>VariantMembership</code> is a <code>Membership</code> between a variation point <code>Definition</code> or <code>Usage</code> and a <code>Usage</code> that represents a variant in the context of that variation. The <code>membershipOwningNamespace</code> for the <code>VariantMembership</code> must be either a Definition or a <code>Usage</code> with <code>isVariation = true</code>.</p> - - - <p>A <code>TerminateActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::terminateActions</code></em> from the Systems Modeling Library.</p> + + + <p>The <code>membershipOwningNamespace</code> of a <code>VariantMembership</code> must be a variation-point <code>Definition</code> or <code>Usage</code>.</p> - + OCL2.0 - specializesFromLibrary('Actions::terminateActions') + membershipOwningNamespace.oclIsKindOf(Definition) and + membershipOwningNamespace.oclAsType(Definition).isVariation or +membershipOwningNamespace.oclIsKindOf(Usage) and + membershipOwningNamespace.oclAsType(Usage).isVariation + - - - <p>The <code>terminatedOccurrenceArgument</code> of a <code>TerminateActionUsage</code> is its first argument.</p> + + + + <p>The <code>Usage</code> that represents a variant in the context of the <code>owningVariationDefinition</code> or <code>owningVariationUsage</code>.</p> - - OCL2.0 - terminatedOccurrenceArgument = argument(1) - - - - - <p>A composite <code>TerminateActionUsage</code> that is a subaction must must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::terminateSubactions</code></em> from the Systems Modeling Library.</p> + + + + + + + + <p>The Definition that owns the <code>ownedConcern</code>.</p> + + + + + + + + + <p>The Usage that owns the <code>nestedAllocation</code>.</p> + + + + + + + + + + <p>The Definition that owns the <code>ownedUseCase</code>.</p> - - OCL2.0 - isSubactionUsage() implies - specializesFromLibrary('Actions::Action::terminateSubactions') - - - - - - <p>The <code>Expression</code> that is the <code>featureValue</code> of the <em><code>terminateOccurrence</code></em> <code>parameter</code> of this <code>TerminateActionUsage</code>. + + + + + + + + <p>The Definition that owns the <code>ownedMetadata</code>.</p> - - - + + + - - - - <p>The Activities that feature a certain ActionUsage.</p> + + + + <p>The Usage in which the <code>nestedPart</code> is nested.</p> - - + + - - - <p>An <code>AcceptActionUsage</code> is an <code>ActionUsage</code> that specifies the acceptance of an <em><code>incomingTransfer</code></em> from the <code><em>Occurrence</em></code> given by the result of its <code>receiverArgument</code> Expression. (If no <code>receiverArgument</code> is provided, the default is the <em><code>this</code></em> context of the AcceptActionUsage.) The payload of the accepted <em><code>Transfer</em></code> is output on its <code>payloadParameter</code>. Which <em><code>Transfers</em></code> may be accepted is determined by conformance to the typing and (potentially) binding of the <code>payloadParameter</code>.</p> - - - - - <p>An <code>AcceptUsageAction</code> must have at least two input <code>parameters</code>, corresponding to its <em><code>payload</code></em> and <em><code>receiver</code>, respectively (even if they have no <code>FeatureValue</code>). (Note that the <code>payloadParameter</code> is an input as well as an output.)</p> + + + + <p>The Definition that owns the <code>ownedAllocation</code>.</p> - - OCL2.0 - inputParameters()->size() >= 2 - - - - - <p>The <code>receiverArgument</code> of an <code>AcceptUsageAction</code> is its second argument <code>Expression</code>.</p> + + + + + + + + <p>The Definitions that feature a certain Usage.</p> - - OCL2.0 - receiverArgument = argument(2) - - - - - <p>The <code>payloadArgument</code> of an <code>AcceptUsageAction</code> is its first argument <code>Expression</code>.</p> + + + + + + + + <p>The Usage in which the <code>nestedItem</code> is nested.</p> - - OCL2.0 - payloadArgument = argument(1) - - - - - <p>The <code>payloadParameter</code> of an <code>AcceptActionUsage<code> is its first <code>parameter</code>.</p> + + + + + + + + <p>The Definitions that have a certain Usage as a <code>flow</code>.</p> - - OCL2.0 - payloadParameter = - if parameter->isEmpty() then null - else parameter->first() endif - - - - - <p>An <code>AcceptActionUsage</code> that is not the <code>triggerAction</code> of a <code>TransitionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::acceptActions</code></em> from the Systems Model Library.</p> + + + + + + + + <p>The Definition that owns the <code>ownedTransition</code>.</p> - - OCL2.0 - not isTriggerAction() implies - specializesFromLibrary('Actions::acceptActions') - - - - - <p>A composite <code>AcceptActionUsage</code> that is a subaction usage, but is <em>not</em> the <code>triggerAction</code> of a <code>TransitionUsage</code>, must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::acceptSubactions</code></em> from the Systems Model Library.</p> + + + + + + + + <p>The Usage that owns a certain <code>nestedVerificationCase</code>.</p> - - OCL2.0 - isSubactionUsage() and not isTriggerAction() implies - specializesFromLibrary('Actions::Action::acceptSubactions') - - - - - <p>An <code>AcceptActionUsage</code> that is the <code>triggerAction</code> of <code>TransitionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::TransitionAction::accepter</code></em> from the Systems Model Library.</p> + + + + + + + + <p>The Definition that owns a certain <code>ownedVerificationCase</code>.</p> - - OCL2.0 - isTriggerAction() implies - specializesFromLibrary('Actions::TransitionAction::accepter') - - - - - <p>If the <code>payloadArgument</code> of an <code>AcceptActionUsage</code> is a <code>TriggerInvocationExpression</code>, then the <code>AcceptActionusage</code> must have an <code>ownedFeature</code> that is a <code>BindingConnector</code> between its <code><em>receiver</em></code> <code>parameter</code> and the <code><em>receiver</em></code> <code>parameter</code> of the <code>TriggerInvocationExpression</code>.</p> + + + + + + + + <p>The Usage that owns a certain <code>nestedViewpoint</code>.</p> - - OCL2.0 - payloadArgument <> null and -payloadArgument.oclIsKindOf(TriggerInvocationExpression) implies - let invocation : Expression = - payloadArgument.oclAsType(Expression) in - parameter->size() >= 2 and - invocation.parameter->size() >= 2 and - ownedFeature->selectByKind(BindingConnector)->exists(b | - b.relatedFeatures->includes(parameter->at(2)) and - b.relatedFeatures->includes(invocation.parameter->at(2))) - - - - - - <p>An <code>Expression</code> whose <code>result</code> is bound to the <em><code>receiver</code></em> input <code>parameter</code> of this <code>AcceptActionUsage</code>.</p> - + + + + + + + + <p>The Definition that owns the <code>ownedAnalysisCase</code>.</p> - - - - - - <p>The <code>nestedReference</code> of this <code>AcceptActionUsage</code> that redefines the <code>payload</code> output <code>parameter</code> of the base <code>AcceptActionUsage</code> <em><code>AcceptAction</code></em> from the Systems Model Library.</p> + + + + + + + + <p>The Usage in which the <code>nestedAnalysisCase</code> is nested.</p> - - - - - - <p>An <code>Expression</code> whose <code>result</code> is bound to the <code><em>payload</em></code> <code>parameter</code> of this <code>AcceptActionUsage</code>. If provided, the <code>AcceptActionUsage</code> will only accept a <code><em>Transfer</em></code> with exactly this <code><em>payload</em></code>.</p> - + + + + + + + + <p>The owning Definition of this VariantMembership, which must have <code>isVariation</code> = true.</p> - - - - - - <p>Check if this <code>AcceptActionUsage</code> is the <code>triggerAction</code> of a <code>TransitionUsage</code>.</p> + + + + + + + + <p>The Usage in which the <code>nestedPort</code> is nested (if any).</p> - - - OCL2.0 - owningType <> null and -owningType.oclIsKindOf(TransitionUsage) and -owningType.oclAsType(TransitionUsage).triggerAction->includes(self) - - - - - - + + + - - - - <p>The AcceptActionUsage that has a certain Expression as its <code>receiverArgument</code>.</p> + + + + <p>The Usages that have a certain Classifier as a <code>definition</code>.</p> - - + + - - - - <p>The AssignmentActionUsages that gave a certain <code>referent</code> Expression.</p> + + + + <p>The owning Definition of this VariantMembership, which must have <code>isVariation</code> = true.</p> - - + + - - - <p>A <code>DecisionNode</code> is a <code>ControlNode</code> that makes a selection from its outgoing <code>Successions</code>.</p> + + + + <p>The variation point Definition that for which this Usage represents a variant, derived as the <code>owningVariationDefinition</code> of the <code>owningVariantMembership</code> of the Usage.</p> + + + + + + + + <p>A <code>Definition</code> is a <code>Classifier</code> of <code>Usages</code>. The actual kinds of <code>Definition</code> that may appear in a model are given by the subclasses of <code>Definition</code> (possibly as extended with user-defined <em><code>SemanticMetadata</code></em>).</p> + +<p>Normally, a <code>Definition</code> has owned Usages that model <code>features</code> of the thing being defined. A <code>Definition</code> may also have other <code>Definitions</code> nested in it, but this has no semantic significance, other than the nested scoping resulting from the <code>Definition</code> being considered as a <code>Namespace</code> for any nested <code>Definitions</code>.</p> + +<p>However, if a <code>Definition</code> has <code>isVariation</code> = <code>true</code>, then it represents a <em>variation point</em> <code>Definition</code>. In this case, all of its <code>members</code> must be <code>variant</code> <code>Usages</code>, related to the <code>Definition</code> by <code>VariantMembership</code> <code>Relationships</code>. Rather than being <code>features</code> of the <code>Definition</code>, <code>variant</code> <code>Usages</code> model different concrete alternatives that can be chosen to fill in for an abstract <code>Usage</code> of the variation point <code>Definition</code>.</p> + - - - <p>A <code>DecisionNode</code> may have at most one incoming <code>Succession</code>.</p> + + + <p>If a <code>Definition</code> is a variation, then all it must not have any <code>ownedFeatureMemberships</code>.</p> - + OCL2.0 - targetConnector->selectByKind(Succession)->size() <= 1 + isVariation implies ownedFeatureMembership->isEmpty() - - - <p>All outgoing <code>Successions</code> from a <code>DecisionNode</code> must have a target <code>multiplicity</code> of <code>0..1</code>.</p> + + + <p>The <code>variants</code> of a <code>Definition</code> are the <code>ownedVariantUsages</code> of its <code>variantMemberships</code>.</p> - + OCL2.0 - sourceConnector->selectAsKind(Succession)-> - collect(connectorEnd->at(2))-> - forAll(targetMult | - multiplicityHasBounds(targetMult, 0, 1)) + variant = variantMembership.ownedVariantUsage - - - <p>A <code>DecisionNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::decisions</code></em> from the Systems Model Library.</p> + + + <p>The <code>variantMemberships</code> of a <code>Definition</code> are those <code>ownedMemberships</code> that are <code>VariantMemberships</code>.</p> - + OCL2.0 - specializesFromLibrary('Actions::Action::decisions') + variantMembership = ownedMembership->selectByKind(VariantMembership) - - - <p>All outgoing <code>Successions</code> from a <code>DecisionNode</code> must subset the inherited <em><code>outgoingHBLink</code></em> <code>feature</code> of the <code>DecisionNode</code>.</p> + + + <p>A variation <code>Definition</code> may not specialize any other variation <code>Definition</code>.</p> - + OCL2.0 - sourceConnector->selectByKind(Succession)-> - forAll(subsetsChain(self, - resolveGlobal('ControlPerformances::MergePerformance::outgoingHBLink'))) + isVariation implies + not ownedSpecialization.specific->exists( + oclIsKindOf(Definition) and + oclAsType(Definition).isVariation) - - - - - - <p>The AssignmentActionUsage that has a certain Expression as its <code>valueArgument</code>.</p> - - - - - - - - <p><code>TriggerKind</code> enumerates the kinds of triggers that can be represented by a <code>TriggerInvocationExpression</code>.</p> - - - - <p>Indicates a <em>change trigger</em>, corresponding to the <em><code>TriggerWhen</code></em> <code>Function</code> from the <em><code>Triggers</code></em> model in the Kernel Semantic Library.</p> - - - - - <p>Indicates an <em>absolute time trigger</em>, corresponding to the <em><code>TriggerAt</code></em> <code>Function</code> from the <em><code>Triggers</code></em> model in the Kernel Semantic Library.</p> - - - - - <p>Indicates a <em>relative time trigger</em>, corresponding to the <em><code>TriggerAfter</code></em> <code>Function</code> from the <em><code>Triggers</code></em> model in the <code>Kernel Semantic Library.</p> - - - - - - <p>An <code>IfActionUsage</code> is an <code>ActionUsage</code> that specifies that the <code>thenAction</code> <code>ActionUsage</code> should be performed if the result of the <code>ifArgument</code> <code>Expression</code> is true. It may also optionally specify an <code>elseAction</code> <code>ActionUsage</code> that is performed if the result of the <code>ifArgument</code> is false.</p> - - - - <p>The <code>thenAction</code> of an <code>ifActionUsage</code> is its second <code>parameter</code>, which must be an <code>ActionUsage</code>.</p> + + + <p>The <code>usages</code> of a <code>Definition</code> are all its <code>features</code> that are <code>Usages</code>.</p> - + OCL2.0 - thenAction = - let parameter : Feature = inputParameter(2) in - if parameter <> null and parameter.oclIsKindOf(ActionUsage) then - parameter.oclAsType(ActionUsage) - else - null - endif + usage = feature->selectByKind(Usage) - - - <p>A composite <code>IfActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::ifSubactions</code></em> from the Systems Model Library.</p> + + + <p>The <code>directedUsages</code> of a <code>Definition</code> are all its <code>directedFeatures</code> that are <code>Usages</code>.</p> - + OCL2.0 - isSubactionUsage() implies - specializesFromLibrary('Actions::Action::ifSubactions') + directedUsage = directedFeature->selectByKind(Usage) - - - <p>A <code>IfActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::ifThenActions</code></em> from the Systems Model Library. If it has an <code>elseAction</code>, then it must directly or indirectly specialize <em><code>Actions::ifThenElseActions</code></em>. + + + <p>The <code>ownedUsages</code> of a <code>Definition</code> are all its <code>ownedFeatures</code> that are <code>Usages</code>.</p> - + OCL2.0 - if elseAction = null then - specializesFromLibrary('Actions::ifThenActions') -else - specializesFromLibrary('Actions::ifThenElseActions') -endif + ownedUsage = ownedFeature->selectByKind(Usage) - - - <p>The <code>ifArgument</code> of an <code>ifActionUsage</code> is its first <code>parameter</code>, which must be an <code>Expression</code>.</p> + + + <p>The <code>ownedAttributes</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>AttributeUsages</code>.</p> - + OCL2.0 - ifArgument = - let parameter : Feature = inputParameter(1) in - if parameter <> null and parameter.oclIsKindOf(Expression) then - parameter.oclAsType(Expression) - else - null - endif + ownedAttribute = ownedUsage->selectByKind(AttributeUsage) - - - <p>The <code>elseAction</code> of an <code>ifActionUsage</code> is its third <code>parameter</code>, if there is one, which must then be an <code>ActionUsage</code>.</p> + + + <p>The <code>ownedReferences</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ReferenceUsages</code>.</p> - + OCL2.0 - elseAction = - let parameter : Feature = inputParameter(3) in - if parameter <> null and parameter.oclIsKindOf(ActionUsage) then - parameter.oclAsType(ActionUsage) - else - null - endif + ownedReference = ownedUsage->selectByKind(ReferenceUsage) - - - <p>An <code>IfActionUsage</code> must have at least two owned <code>input</code> <code>parameters</code>.</p> + + + <p>The <code>ownedEnumerations</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>EnumerationUsages</code>.</p> - + OCL2.0 - inputParameters()->size() >= 2 + ownedEnumeration = ownedUsage->selectByKind(EnumerationUsage) - - - - <p>The <code>ActionUsage</code> that is to be performed if the result of the <code>ifArgument</code> is false. It is the (optional) third <code>parameter</code> of the <code>IfActionUsage</code>.</p> - - - - - - - - <p>The <code>ActionUsage</code> that is to be performed if the result of the <code>ifArgument</code> is true. It is the second <code>parameter<code> of the <code>IfActionUsage</code>.</p> - + + + <p>The <code>ownedOccurrences</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>OccurrenceUsages</code>.</p> - - - - - - <p>The <code>Expression</code> whose result determines whether the <code>thenAction</code> or (optionally) the <code>elseAction</code> is performed. It is the first <code>parameter<code> of the <code>IfActionUsage</code>.</p> - + + OCL2.0 + ownedOccurrence = ownedUsage->selectByKind(OccurrenceUsage) + + + + + <p>The <code>ownedItems</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ItemUsages</code>.</p> - - - - - - - - <p>The AcceptActionUsage that owns the <code>payloadParameter</code>.</p> + + OCL2.0 + ownedItem = ownedUsage->selectByKind(ItemUsage) + + + + + <p>The <code>ownedParts</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>PartUsages</code>.</p> - - - - - - - - <p>The <code>SendActionUsage</code> that has a certain <code>Expression<code> as its <code>receiverArgument</code>.</p> + + OCL2.0 + ownedPart = ownedUsage->selectByKind(PartUsage) + + + + + <p>The <code>ownedPorts</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>PortUsages</code>.</p> - - - - - - - <p>A <code>MergeNode</code> is a <code>ControlNode</code> that asserts the merging of its incoming <code>Successions</code>. A <code>MergeNode</code> may have at most one outgoing <code>Successions</code>.</p> - - - - <p>A <code>MergeNode</code> may have at most one outgoing <code>Succession</code>.</p> + + OCL2.0 + ownedPort = ownedUsage->selectByKind(PortUsage) + + + + + <p>The <code>ownedConnections</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ConnectorAsUsages</code>.</p> - + OCL2.0 - sourceConnector->selectAsKind(Succession)->size() <= 1 + ownedConnection = ownedUsage->selectByKind(ConnectorAsUsage) - - - <p>All incoming <code>Successions</code> to a <code>MergeNode</code> must have a source <code>multiplicity</code> of <code>0..1</code>.</p> + + + <p>The <code>ownedFlows</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>FlowUsages</code>.</p> - + OCL2.0 - targetConnector->selectByKind(Succession)-> - collect(connectorEnd->at(1))-> - forAll(sourceMult | - multiplicityHasBounds(sourceMult, 0, 1)) + ownedFlow = ownedUsage->selectByKind(FlowUsage) - - - <p>All incoming <code>Successions</code> to a <code>MergeNode</code> must subset the inherited <em><code>incomingHBLink</code></em> <code>feature</code> of the <code>MergeNode</code>.</p> + + + <p>The <code>ownedInterfaces</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>InterfaceUsages</code>.</p> - + OCL2.0 - targetConnector->selectByKind(Succession)-> - forAll(subsetsChain(self, - resolveGlobal('ControlPerformances::MergePerformance::incomingHBLink'))) + ownedInterface = ownedUsage->selectByKind(ReferenceUsage) - - - <p>A <code>MergeNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::merges</code></em> from the Systems Model Library.</p> + + + <p>The <code>ownedAllocations</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>AllocationUsages</code>.</p> - + OCL2.0 - specializesFromLibrary('Actions::Action::merges') + ownedAllocation = ownedUsage->selectByKind(AllocationUsage) - - - - - - <p>The ActionUsages being typed by a certain Behavior.</p> + + + <p>The <code>ownedActions</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ActionUsages</code>.</p> - - - - - - - - <p>The <code>SendActionUsage</code> that has a certain <code>Expression</code> as its <code>itemsArgument</code>.</p> + + OCL2.0 + ownedAction = ownedUsage->selectByKind(ActionUsage) + + + + + <p>The <code>ownedStates</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>StateUsages</code>.</p> - - - - - - - - <p>The <code>IfActionUsage</code> that has a certain <code>Expression</code> as its <code>ifArgument</code>.</p> + + OCL2.0 + ownedState = ownedUsage->selectByKind(StateUsage) + + + + + <p>The <code>ownedTransitions</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>TransitionUsages</code>.</p> - - - - - - - <p>A <code>JoinNode</code> is a <code>ControlNode</code> that waits for the completion of all the predecessor <code>Actions</code> given by incoming <code>Successions</code>.</p> - - - - <p>A <code>JoinNode</code> may have at most one outgoing <code>Succession</code>.</p> + + OCL2.0 + ownedTransition = ownedUsage->selectByKind(TransitionUsage) + + + + + <p>The <code>ownedCalculations</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>CalculationUsages</code>.</p> - + OCL2.0 - sourceConnector->selectByKind(Succession)->size() <= 1 + ownedCalculation = ownedUsage->selectByKind(CalculationUsage) - - - <p>A <code>JoinNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::joins</code></em> from the Systems Model Library.</p> + + + <p>The <code>ownedConstraints</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ConstraintUsages</code>.</p> - + OCL2.0 - specializesFromLibrary('Actions::Action::join') + ownedConstraint = ownedUsage->selectByKind(ConstraintUsage) - - - - - <p>A <code>LoopActionUsage</code> is an <code>ActionUsage</code> that specifies that its <code>bodyAction</code> should be performed repeatedly. Its subclasses <code>WhileLoopActionUsage</code> and <code>ForLoopActionUsage</code> provide different ways to determine how many times the <code>bodyAction</code> should be performed.</p> - - - - <p>The <code>bodyAction</code> of a <code>LoopActionUsage</code> is its second input <code>parameter</code>, which must be an <code>Action</code>.</p> + + + <p>The <code>ownedRequirements</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>RequirementUsages</code>.</p> - + OCL2.0 - bodyAction = - let parameter : Feature = inputParameter(2) in - if parameter <> null and parameter.oclIsKindOf(Action) then - parameter.oclAsType(Action) - else - null - endif - + ownedRequirement = ownedUsage->selectByKind(RequirementUsage) - - - - <p>The <code>ActionUsage</code> to be performed repeatedly by the <code>LoopActionUsage</code>. It is the second <code>parameter</code> of the <code>LoopActionUsage</code>.</p> - + + + <p>The <code>ownedConcerns</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ConcernUsages</code>.</p> - - - - - - - <p>A <code>ForkNode</code> is a <code>ControlNode</code> that must be followed by successor <code>Actions</code> as given by all its outgoing <code>Successions</code>.</p> - - - - <p>A <code>ForkNode</code> may have at most one incoming <code>Succession</code>.</p> + + OCL2.0 + ownedConcern = ownedUsage->selectByKind(ConcernUsage) + + + + + <p>The <code>ownedCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>CaseUsages</code>.</p> - + OCL2.0 - targetConnector->selectByKind(Succession)->size() <= 1 + ownedCase = ownedUsage->selectByKind(CaseUsage) - - - <p>A <code>ForkNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::forks</code></em> from the Systems Model Library.</p> + + + <p>The <code>ownedAnalysisCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>AnalysisCaseUsages</code>.</p> - + OCL2.0 - specializesFromLibrary('Actions::Action::forks') + ownedAnalysisCase = ownedUsage->selectByKind(AnalysisCaseUsage) - - - - - - <p>The PerformActionUsages that have a certain ActionUsage as their <code>performedAction</code>.</p> + + + <p>The <code>ownedValidationCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ValidationCaseUsages</code>.</p> - - - - - - - <p>A <code>ControlNode</code> is an <code>ActionUsage</code> that does not have any inherent behavior but provides constraints on incoming and outgoing <code>Successions</code> that are used to control other <code>Actions</code>. A <code>ControlNode</code> must be a composite owned <code>usage</code> of an <code>ActionDefinition</code> or <code>ActionUsage</code>.</p> - - - - - <p>All outgoing <code>Successions</code> from a <code>ControlNode</code> must have a source <code>multiplicity</code> of <code>1..1</code>.</p> + + OCL2.0 + ownedVerificationCase = ownedUsage->selectByKind(VerificationCaseUsage) + + + + + <p>The <code>ownedUseCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>UseCaseUsages</code>.</p> - + OCL2.0 - sourceConnector->selectByKind(Succession)-> - collect(connectorEnd->at(1).multiplicity)-> - forAll(sourceMult | - multiplicityHasBounds(sourceMult, 1, 1)) + ownedUseCase = ownedUsage->selectByKind(UseCaseUsage) - - - <p>The <code>owningType</code> of a <code>ControlNode</code> must be an <code>ActionDefinition</code> or <code>ActionUsage</code>.</p> + + + <p>The <code>ownedViews</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ViewUsages</code>.</p> - + OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(ActionDefinition) or - owningType.oclIsKindOf(ActionUsage)) + ownedView = ownedUsage->selectByKind(ViewUsage) - - - <p>All incoming <code>Successions</code> to a <code>ControlNode</code> must have a target <code>multiplicity</code> of <code>1..1</code>.</p> + + + <p>The <code>ownedViewpoints</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ViewpointUsages</code>.</p> - + OCL2.0 - targetConnector->selectByKind(Succession)-> - collect(connectorEnd->at(2).multiplicity)-> - forAll(targetMult | - multiplicityHasBounds(targetMult, 1, 1)) + ownedViewpoint = ownedUsage->selectByKind(ViewpointUsage) - - - <p>A <code>ControlNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::control</code></em> from the Systems Model Library.</p> + + + <p>The <code>ownedRenderings</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>RenderingUsages</code>.</p> - + OCL2.0 - specializesFromLibrary('Action::Action::controls') + ownedRendering = ownedUsage->selectByKind(RenderingUsage) - - - <p>A <code>ControlNode</code> must be composite.</p> + + + <p>The <code>ownedMetadata</code> of a <code>Definition</code> are all its <code>ownedMembers</code> that are <code>MetadataUsages</code>.</p> - + OCL2.0 - isComposite + ownedMetadata = ownedMember->selectByKind(MetadataUsage) - - - - <p>Check that the given <code>Multiplicity</code> has <code>lowerBound</code> and <code>upperBound</code> expressions that are model-level evaluable to the given <code>lower</code> and <code>upper</code> values.</p> - - - - OCL2.0 - mult <> null and -if mult.oclIsKindOf(MultiplicityRange) then - mult.oclAsType(MultiplicityRange).hasBounds(lower, upper) -else - mult.allSuperTypes()->exists( - oclisKindOf(MultiplicityRange) and - oclAsType(MultiplicityRange).hasBounds(lower, upper) -endif - - - - - - - - - - - - - - - - - - <p>The TransitionUsage incoming to a certain target <tt>ActionUsage</tt>.</p> - - - - - - - - - <p>The StateUsages with a certain <tt>entryAction</tt>.</p> - - - - - - - - - <p>The TransitionUsage that is triggered by a certain AcceptActionUsage.</p> - - - - - - - - <p>A <code>StateSubactionMembership</code> is a <code>FeatureMembership</code> for an entry, do or exit <code>ActionUsage<code> of a <code>StateDefinition</code> or <code>StateUsage</code>.</p> - - - - <p>The <code>owningType</code> of a <code>StateSubactionMembership</code> must be a <code>StateDefinition</code> or a <code>StateUsage</code>.</p> + + + <p>If a <code>Definition</code> is a variation, then it must be abstract.</p> - + OCL2.0 - owningType.oclIsKindOf(StateDefinition) or -owningType.oclIsKindOf(StateUsage) + isVariation implies isAbstract - - - - <p>Whether this <code>StateSubactionMembership</code> is for an <code>entry<code>, <code>do</code> or <code>exit</code> <code>ActionUsage</code>.</p> + + + + <p>Whether this <code>Definition</code> is for a variation point or not. If true, then all the <code>memberships</code> of the <code>Definition</code> must be <code>VariantMemberships</code>.</p> + - - - <p>The <code>ActionUsage</code> that is the <code>ownedMemberFeature</code> of this <code>StateSubactionMembership</code>.</p> + + + <p>The <code>Usages</code> which represent the variants of this <code>Definition</code> as a variation point <code>Definition</code>, if <code>isVariation</code> = true. If <code>isVariation = false</code>, the there must be no <code>variants</code>.</p> - - + + - - - - - <p>The ExhibitStateUsages that have a certain StateUsage as their <tt>exhibitedState</tt>.</p> - - - - - - - - - <p>The TransitionUsage outgoing from a certain source <tt>ActionUsage</tt>.</p> - - - - - - - - - <p>The StateSubactionMembership that is the owner of a certain ActionUsage (if any).</p> - - - - - - - - - <p>The StateDefinitions featuring a certain StateUsage.</p> + + + <p>The <code>ownedMemberships</code> of this <code>Definition</code> that are <code>VariantMemberships</code>. If <code>isVariation</code> = true, then this must be all <code>ownedMemberships</code> of the <code>Definition</code>. If <code>isVariation</code> = false, then <code>variantMembership</code>must be empty.</p> - - - - - - - <p>A <code>TransitionActionKind</code> indicates whether the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is a trigger, guard or effect.</p> - - - - <p>Indicates that the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is a <code>triggerAction</code>.</p> + + + + + + <p>The <code>Usages</code> that are <code>features</code> of this <code>Definition</code> (not necessarily owned).</p> - - - - <p>Indicates that the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is a <code>guardExpression</code>.</p> + + + + + + <p>The <code>usages</code> of this <code>Definition</code> that are <code>directedFeatures</code>.</p> + - - - - <p>Indicates that the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is an <code>effectAction</code>.</p> + + + + + + <p>The <code>Usages</code> that are <code>ownedFeatures</code> of this <code>Definition</code>.</p> - - - - - <p>A <code>StateUsage</code> is an <code>ActionUsage</code> that is nominally the <code>Usage</code> of a <code>StateDefinition</code>. However, other kinds of kernel <code>Behaviors</code> are also allowed as <code>types</code>, to permit use of <code>Behaviors</code from the Kernel Model Libraries.</p> - -<p>A <code>StateUsage</code> may be related to up to three of its <code>ownedFeatures</code> by <code>StateSubactionMembership</code> <code>Relationships</code>, all of different <code>kinds</code>, corresponding to the entry, do and exit actions of the <code>StateUsage</code>.</p> - - - - - <p>The <code>doAction</code> of a <code>StateUsage</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = do</code>.</p> + + + + + + <p>The <code>ReferenceUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - OCL2.0 - doAction = - let doMemberships : Sequence(StateSubactionMembership) = - ownedMembership-> - selectByKind(StateSubactionMembership)-> - select(kind = StateSubactionKind::do) in - if doMemberships->isEmpty() then null - else doMemberships->at(1) - endif - - - - - <p>The <code>entryAction</code> of a <code>StateUsage</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = entry</code>.</p> + + + + + + <p>The <code>AttributeUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.<p> - - OCL2.0 - entryAction = - let entryMemberships : Sequence(StateSubactionMembership) = - ownedMembership-> - selectByKind(StateSubactionMembership)-> - select(kind = StateSubactionKind::entry) in - if entryMemberships->isEmpty() then null - else entryMemberships->at(1) - endif - - - - - <p>If a <code>StateUsage</code> is parallel, then its <code>nestedActions</code> (which includes <code>nestedStates</code>) must not have any <code>incomingTransitions</code> or <code>outgoingTransitions</code>.</p> + + + + + + <p>The <code>EnumerationUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.<p> - - OCL2.0 - isParallel implies - nestedAction.incomingTransition->isEmpty() and - nestedAction.outgoingTransition->isEmpty() - - - - - <p>A <code>StateUsage</code> that is a substate usage with a non-parallel owning <code>StateDefinition</code> or <code>StateUsage</code> must directly or indirectly specialize the <code>StateUsage</code> <em><code>States::StateAction::exclusiveStates</code></em> from the Systems Model Library.</p> + + + + + + <p>The <code>OccurrenceUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - OCL2.0 - isSubstateUsage(false) implies - specializesFromLibrary('States::StateAction::exclusiveStates') - - - - - <p>The <code>exitAction</code> of a <code>StateUsage</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = exit -</code>.</p> + + + + + + <p>The <code>ItemUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - OCL2.0 - exitAction = - let exitMemberships : Sequence(StateSubactionMembership) = - ownedMembership-> - selectByKind(StateSubactionMembership)-> - select(kind = StateSubactionKind::exit) in - if exitMemberships->isEmpty() then null - else exitMemberships->at(1) - endif - - - - - <p>A <code>StateUsage</code> must directly or indirectly specialize the <code>StateUsage</code> <em><code>States::stateActions</code></em> from the Systems Model Library.</p> + + + + + + <p>The <code>PartUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - OCL2.0 - specializesFromLibrary('States::stateActions') - - - - - <p>A <code>StateUsage</code> must not have more than one owned <code>StateSubactionMembership</code> of each <code>kind</code>.</p> + + + + + + <p>The <code>PortUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - OCL2.0 - ownedMembership-> - selectByKind(StateSubactionMembership)-> - isUnique(kind) - - - - - <p>A <code>StateUsage</code> that is a substate usage with a owning <code>StateDefinition</code> or <code>StateUsage</code> that is parallel must directly or indirectly specialize the <code>StateUsage</code> <em><code>States::StateAction::substates</code></em> from the Systems Model Library.</p> + + + + + + <p>The <code>ConnectorAsUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>. Note that this list includes <code>BindingConnectorAsUsages</code>, <code>SuccessionAsUsages</code>, and <code>FlowUsages</code> because these are <code>ConnectorAsUsages</code> even though they are not <code>ConnectionUsages</code>.</p> - - OCL2.0 - isSubstateUsage(true) implies - specializesFromLibrary('States::StateAction::substates') - - - - - <p>A composite <code>StateUsage</code> whose <code>owningType</code> is a <code>PartDefinition</code> or <code>PartUsage</code> must directly or indirectly specialize the <code>StateUsage</code> <em><code>Parts::Part::ownedStates</code></em> from the Systems Model Library.</p> + + + + + + <p>The <code>FlowUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(PartDefinition) or - owningType.oclIsKindOf(PartUsage)) implies - specializesFromLibrary('Parts::Part::ownedStates') - - - - - - <p>The <code>Behaviors</code> that are the <code>types</code> of this <code>StateUsage</code>. Nominally, these would be <code>StateDefinitions</code>, but kernel <code>Behaviors</code> are also allowed, to permit use of <code>Behaviors</code> from the Kernel Model Libraries.</p> + + + + + + <p>The <code>InterfaceUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - + + - - - <p>The <code>ActionUsage</code> of this <code>StateUsage</code> to be performed on entry to the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateUsage</code> by a <code>StateSubactionMembership</code> with <code>kind = entry</code>.</p> + + + <p>The <code>AllocationUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - + + - - - <p>The <code>ActionUsage</code> of this <code>StateUsage</code> to be performed while in the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateUsage</code> by a <code>StateSubactionMembership</code> with <code>kind = do</code>.</p> + + + <p>The <code>ActionUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - + + - - - <p>The <code>ActionUsage</code> of this <code>StateUsage</code> to be performed on exit to the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateUsage</code> by a <code>StateSubactionMembership</code> with <code>kind = exit</code>.</p> + + + <p>The <code>StateUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - + + - - - <p>Whether the <code>nestedStates</code> of this <code>StateUsage</code> are to all be performed in parallel. If true, none of the <code>nestedActions</code> (which include <code>nestedStates</code>) may have any incoming or outgoing <code>Transitions</code>. If false, only one <code>nestedState</code> may be performed at a time.</p> + + + <p>The <code>TransitionUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + + + <p>The <code>CalculationUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + + + <p>The <code>ConstraintUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - + + - - - <p>Check if this <code>StateUsage</code> is composite and has an <code>owningType</code> that is a <code>StateDefinition</code> or <code>StateUsage</code> with the given value of <code>isParallel</code>, but is <em>not</em> an <code>entryAction</code>, <code>doAction</code>, or <code>exitAction</code>. If so, then it represents a <code><em>StateAction</em></code> that is a <code><em>substate</em></code> or <code><em>exclusiveState</em></code> (for <code>isParallel = false</code>) of another <code><em>StateAction</em></code>.</p> + + + <p>The <code>RequirementUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - - OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(StateDefinition) and - owningType.oclAsType(StateDefinition).isParallel = isParallel or - owningType.oclIsKindOf(StateUsage) and - owningType.oclAsType(StateUsage).isParallel = isParallel) and -not owningFeatureMembership.oclIsKindOf(StateSubactionMembership) - - - - - - - - - - - - - - <p>The StateDefinitions with a certain <tt>doAction</tt>.</p> + + + + + + <p>The <code>ConcernUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - - - - - - <p>A <code>TransitionFeatureMembership</code> is a <code>FeatureMembership</code> for a trigger, guard or effect of a <code>TransitionUsage</code>, whose <code>transitionFeature</code> is a <code>AcceptActionUsage</code>, <em><code>Boolean</code></em>-valued <code>Expression</code> or <code>ActionUsage</code>, depending on its <code>kind</code>. </p> - - - - <p>If the <code>kind</code> of a <code>TransitionUsage</code> is <code>trigger</code>, then its <code>transitionFeature</code> must be a kind of <code>AcceptActionUsage</code>.</p> + + + + + + <p>The code>CaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - OCL2.0 - kind = TransitionFeatureKind::trigger implies - transitionFeature.oclIsKindOf(AcceptActionUsage) - - - - - <p>The <code>owningType</code> of a <code>TransitionFeatureMembership</code> must be a <code>TransitionUsage</code>.</p> + + + + + + <p>The <code>AnalysisCaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + + + <p>The <code>VerificationCaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + + + <p>The <code>UseCaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - OCL2.0 - owningType.oclIsKindOf(TransitionUsage) - - - - - <p>If the <code>kind</code> of a <code>TransitionUsage</code> is <code>guard</code>, then its <code>transitionFeature</code> must be a kind of <code>Expression</code> whose result is a <em><code>Boolean</code></em> value.</p> + + + + + + <p>The <code>ViewUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - OCL2.0 - kind = TransitionFeatureKind::guard implies - transitionFeature.oclIsKindOf(Expression) and - let guard : Expression = transitionFeature.oclIsKindOf(Expression) in - guard.result.specializesFromLibrary('ScalarValues::Boolean') and - guard.result.multiplicity <> null and - guard.result.multiplicity.hasBounds(1,1) - - - - - <p>If the <code>kind</code> of a <code>TransitionUsage</code> is <code>effect</code>, then its <code>transitionFeature</code> must be a kind of <code>ActionUsage</code>.</p> + + + + + + <p>The <code>ViewpointUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - OCL2.0 - kind = TransitionFeatureKind::effect implies - transitionFeature.oclIsKindOf(ActionUsage) - - - - - - <p>Whether this <code>TransitionFeatureMembership </code> is for a <code>trigger</code>, <code>guard</code> or <code>effect</code>.</p> + + + + + + <p>The <code>RenderingUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + - - - <p>The <code>Step</code> that is the <code>ownedMemberFeature</code> of this <code>TransitionFeatureMembership</code>.</p> + + + <p>The <code>MetadataUsages</code> that are <code>ownedMembers</code> of this <code>Definition</code>.</p> - - + + - - - <p>A <code>StateDefinition</code> is the <code>Definition</code> of the </code>Behavior</code> of a system or part of a system in a certain state condition.</p> - -<p>A <code>StateDefinition</code> may be related to up to three of its <code>ownedFeatures</code> by <code>StateBehaviorMembership</code> <code>Relationships</code>, all of different <code>kinds</code>, corresponding to the entry, do and exit actions of the <code>StateDefinition</code>.</p> - - - - <p>A <code>StateDefinition</code> must directly or indirectly specialize the <code>StateDefinition</code> <em><code>States::StateAction</code></em> from the Systems Model Library.</p> + + + + <p>The variation point Usage that for which this Usage represents a variant, derived as the <code>owningVariationUsage</code> of the <code>owningVariantMembership</code> of the Usage.</p> - - OCL2.0 - specializesFromLibrary('States::StateAction') - - - - - <p>A <code>StateDefinition</code> must not have more than one owned <code>StateSubactionMembership</code> of each <code>kind</code>.</p> + + + + + + + + <p>The Definition that owns the <code>ownedConnection</code>.</p> - - OCL2.0 - ownedMembership-> - selectByKind(StateSubactionMembership)-> - isUnique(kind) - - - - - <p>The <code>states</code> of a <code>StateDefinition</code> are those of its <code>actions</code> that are <code>StateUsages</code>.</p> + + + + + + + <p>A <code>Usage</code> is a usage of a <code>Definition</code>.</p> + +<p>A <code>Usage</code> may have <code>nestedUsages</code> that model <code>features</code> that apply in the context of the <code>owningUsage</code>. A <code>Usage</code> may also have <code>Definitions</code> nested in it, but this has no semantic significance, other than the nested scoping resulting from the <code>Usage</code> being considered as a <code>Namespace</code> for any nested <code>Definitions</code>.</p> + +<p>However, if a <code>Usage</code> has <code>isVariation = true</code>, then it represents a <em>variation point</em> <code>Usage</code>. In this case, all of its <code>members</code> must be <code>variant</code> <code>Usages</code>, related to the <code>Usage</code> by <code>VariantMembership</code> <code>Relationships</code>. Rather than being <code>features</code> of the <code>Usage</code>, <code>variant</code> <code>Usages</code> model different concrete alternatives that can be chosen to fill in for the variation point <code>Usage</code>.</p> + + + + <p>The <code>variants</code> of a <code>Usage</code> are the <code>ownedVariantUsages</code> of its <code>variantMemberships</code>.</p> - + OCL2.0 - state = action->selectByKind(StateUsage) + variant = variantMembership.ownedVariantUsage - - - <p>The <code>doAction</code> of a <code>StateDefinition</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = do</code>.</p> + + + <p>The <code>variantMemberships</code> of a <code>Usage</code> are those <code>ownedMemberships</code> that are <code>VariantMemberships</code>.</p> - + OCL2.0 - doAction = - let doMemberships : Sequence(StateSubactionMembership) = - ownedMembership-> - selectByKind(StateSubactionMembership)-> - select(kind = StateSubactionKind::do) in - if doMemberships->isEmpty() then null - else doMemberships->at(1) - endif + variantMembership = ownedMembership->selectByKind(VariantMembership) - - - <p>The <code>entryAction</code> of a <code>StateDefinition</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = entry</code>.</p> + + + <p>If a <code>Usage</code> is a variation, then it must not have any <code>ownedFeatureMemberships</code>.</p> - + OCL2.0 - entryAction = - let entryMemberships : Sequence(StateSubactionMembership) = - ownedMembership-> - selectByKind(StateSubactionMembership)-> - select(kind = StateSubactionKind::entry) in - if entryMemberships->isEmpty() then null - else entryMemberships->at(1) - endif + isVariation implies ownedFeatureMembership->isEmpty() - - - <p>If a <code>StateDefinition</code> is parallel, then its <code>ownedActions</code> (which includes its <code>ownedStates</code>) must not have any <code>incomingTransitions</code> or <code>outgoingTransitions</code>.</p> + + + <p>A <code>Usage</code> is referential if it is not composite.</p> - + OCL2.0 - isParallel implies - ownedAction.incomingTransition->isEmpty() and - ownedAction.outgoingTransition->isEmpty() + isReference = not isComposite - - - <p>The <code>exitAction</code> of a <code>StateDefinition</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = exit -</code>.</p> + + + <p>If a <code>Usage</code> has an <code>owningVariationUsage</code>, then it must directly or indirectly specialize that <code>Usage</code>.</p> - + OCL2.0 - exitAction = - let exitMemberships : Sequence(StateSubactionMembership) = - ownedMembership-> - selectByKind(StateSubactionMembership)-> - select(kind = StateSubactionKind::exit) in - if exitMemberships->isEmpty() then null - else exitMemberships->at(1) - endif + owningVariationUsage <> null implies + specializes(owningVariationUsage) - - - - <p>The <code>StateUsages</code>, which are <code>actions</code> in the <code>StateDefinition</code>, that specify the discrete states in the behavior defined by the <code>StateDefinition</code>.</p> - - - - - - - <p>The <code>ActionUsage</code> of this <code>StateDefinition</code> to be performed on entry to the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateDefinition</code> by a <code>StateSubactionMembership</code> with <code>kind = entry</code>.</p> - - - - - - - <p>The <code>ActionUsage</code> of this <code>StateDefinition</code> to be performed while in the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateDefinition</code> by a <code>StateSubactionMembership</code> with <code>kind = do</code>.</p> - - - - - - - <p>The <code>ActionUsage</code> of this <code>StateDefinition</code> to be performed on exit to the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateDefinition</code> by a <code>StateSubactionMembership</code> with <code>kind = exit</code>.</p> - - - - - - - <p>Whether the <code>ownedStates</code> of this <code>StateDefinition</code> are to all be performed in parallel. If true, none of the <code>ownedActions</code> (which includes <code>ownedStates</code>) may have any incoming or outgoing <code>Transitions</code>. If false, only one <code>ownedState</code> may be performed at a time.</p> - - - - - - - - - - <p>The TransitionFeatureMembership that owns a certain Step (if any).</p> - - - - - - - - <p>A <code>StateSubactionKind</code> indicates whether the <code>action</code> of a StateSubactionMembership is an entry, do or exit action.</p> - - - - <p>Indicates that the <code>action</code> of a <code>StateSubactionMembership</code> is an <code>entryAction</code>.</p> - - - - - <p>Indicates that the <code>action</code> of a <code>StateSubactionMembership</code> is a <code>doAction</code>.</p> - - - - - <p>Indicates that the <code>action</code> of a <code>StateSubactionMembership</code> is an <code>exitAction</code>.</p> - - - - - - - <p>The TransitionUsage that has a certain <tt>effectAction</tt>.</p> + + + <p>A variation <code>Usage</code> may not specialize any variation <code>Definition</code> or <code>Usage</code>.</p> - - - - - - - - <p>The StateDefinitions with a certain <tt>entryAction</tt>.</p> + + OCL2.0 + isVariation implies + not ownedSpecialization.specific->exists( + oclIsKindOf(Definition) and + oclAsType(Definition).isVariation or + oclIsKindOf(Usage) and + oclAsType(Usage).isVariation) + + + + + <p>If a <code>Usage</code> has an <code>owningVariationDefinition</code>, then it must directly or indirectly specialize that <code>Definition</code>.</p> - - - - - - - - <p>The StateUsages with a certain <tt>doAction</tt>.</p> + + OCL2.0 + owningVariationDefinition <> null implies + specializes(owningVariationDefinition) + + + + + <p>The <code>directedUsages</code> of a <code>Usage</code> are all its <code>directedFeatures</code> that are <code>Usages</code>.</p> - - - - - - - <p>An <code>ExhibitStateUsage</code> is a <code>StateUsage</code> that represents the exhibiting of a <code>StateUsage</code>. Unless it is the <code>StateUsage</code> itself, the <code>StateUsage</code> to be exhibited is related to the <code>ExhibitStateUsage</code> by a <code>ReferenceSubsetting</code> <code>Relationship</code>. An <code>ExhibitStateUsage</code> is also a <code>PerformActionUsage</code>, with its <code>exhibitedState</code> as the <code>performedAction</code>.</p> - - - - - <p>If an <code>ExhibitStateUsage</code> has an <code>owningType</code> that is a <code>PartDefinition</code> or <code>PartUsage</code>, then it must directly or indirectly specialize the <code>StateUsage</code> <code><em>Parts::Part::exhibitedStates</em></code>.</p> + + OCL2.0 + directedUsage = directedFeature->selectByKind(Usage) + + + + + <p>The <code>ownedActions</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ActionUsages</code>.</p> - + OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(PartDefinition) or - owningType.oclIsKindOf(PartUsage)) implies - specializesFromLibrary('Parts::Part::exhibitedStates') + nestedAction = nestedUsage->selectByKind(ActionUsage) - - - <p>If an <code>ExhibitStateUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of the <code>referencedFeature</code> must be a <code>StateUsage</code>.</p> + + + <p>The <code>ownedAllocations</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>AllocationUsages</code>.</p> - + OCL2.0 - referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(StateUsage) + nestedAllocation = nestedUsage->selectByKind(AllocationUsage) - - - - - <p>The <code>StateUsage</code> to be exhibited by the <code>ExhibitStateUsage</code>. It is the <code>performedAction</code> of the <code>ExhibitStateUsage</code> considered as a <code>PerformActionUsage</code>, which must be a <code>StateUsage</code>.</p> + + + <p>The <code>ownedAnalysisCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>AnalysisCaseUsages</code>.</p> - - - - - - - - <p>The StateDefinitions with a certain <tt>exitAction</tt>.</p> + + OCL2.0 + nestedAnalysisCase = nestedUsage->selectByKind(AnalysisCaseUsage) + + + + + <p>The <code>ownedAttributes</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>AttributeUsages</code>.</p> - - - - - - - - <p>The StateUsages with a certain <tt>exitAction</tt>.</p> + + OCL2.0 + nestedAttribute = nestedUsage->selectByKind(AttributeUsage) + + + + + <p>The <code>ownedCalculations</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>CalculationUsages</code>.</p> - - - - - - - - <p>The Transition that owns a certain Succession.</p> + + OCL2.0 + nestedCalculation = nestedUsage->selectByKind(CalculationUsage) + + + + + <p>The <code>ownedCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>CaseUsages</code>.</p> - - - - - - - - <p>The TransitionUsage that is guarded by a certain Expression.</p> + + OCL2.0 + nestedCase = nestedUsage->selectByKind(CaseUsage) + + + + + <p>The <code>ownedConcerns</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ConcernUsages</code>.</p> - - - - - - - <p>A <code>TransitionUsage</code> is an <code>ActionUsage</code> representing a triggered transition between <code>ActionUsages</code> or <code>StateUsages</code>. When triggered by a <code>triggerAction</code>, when its <code>guardExpression</code> is true, the <code>TransitionUsage</code> asserts that its <code>source</code> is exited, then its <code>effectAction</code> (if any) is performed, and then its <code>target</code> is entered.</p> - -<p>A <code>TransitionUsage</code> can be related to some of its <code>ownedFeatures</code> using <code>TransitionFeatureMembership</code> <code>Relationships</code>, corresponding to the <code>triggerAction</code>, <code>guardExpression</code> and <code>effectAction</code> of the <code>TransitionUsage</code>.</p> - - - - <p>A composite <code>TransitionUsage</code> whose <code>owningType</code> is an <code>ActionDefinition</code> or <code>ActionUsage</code> and whose <code>source</code> is <em>not</em> a <code>StateUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::decisionTransitions</code></em> from the Systems Model Library.</p> + + OCL2.0 + nestedConcern = nestedUsage->selectByKind(ConcernUsage) + + + + + <p>The <code>ownedConnections</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ConnectorAsUsages</code>.</p> - + OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(ActionDefinition) or - owningType.oclIsKindOf(ActionUsage)) and -source <> null and not source.oclIsKindOf(StateUsage) implies - specializesFromLibrary('Actions::Action::decisionTransitions') + nestedConnection = nestedUsage->selectByKind(ConnectorAsUsage) - - - <p>A composite <code>TransitionUsage</code> whose <code>owningType</code> is a <code>StateDefinition</code> or <code>StateUsage</code> and whose <code>source</code> is a <code>StateUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>States::StateAction::stateTransitions</code></em> from the Systems Model Library</p> + + + <p>The <code>ownedConstraints</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ConstraintUsages</code>.</p> - + OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(StateDefinition) or - owningType.oclIsKindOf(StateUsage)) and -source <> null and source.oclIsKindOf(StateUsage) implies - specializesFromLibrary('States::StateAction::stateTransitions') - + nestedConstraint = nestedUsage->selectByKind(ConstraintUsage) - - - <p>A <code>TransitionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::transitionActions</code></em> from the Systems Model Library.</p> + + + <p>The <code>ownedEnumerations</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>EnumerationUsages</code>.</p> - + OCL2.0 - specializesFromLibrary('Actions::transitionActions') + ownedNested = nestedUsage->selectByKind(EnumerationUsage) - - - <p>The <code>source</code> of a <code>TransitionUsage</code> is <code>featureTarget</code> of the result of <code>sourceFeature()</code>, which must be an <code>ActionUsage</code>.</p> + + + <p>The <code>ownedFlows</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>FlowConnectionUsages</code>.</p> - + OCL2.0 - source = - let sourceFeature : Feature = sourceFeature() in - if sourceFeature = null then null - else sourceFeature.featureTarget.oclAsType(ActionUsage) + nestedFlow = nestedUsage->selectByKind(FlowUsage) - - - <p>The <code>target</code> of a <code>TransitionUsage</code> is given by the <code>featureTarget</code> of the <code>targetFeature</code> of its <code>succession</code>, which must be an <code>ActionUsage</code>.</p> + + + <p>The <code>ownedInterfaces</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>InterfaceUsages</code>.</p> - + OCL2.0 - target = - if succession.targetFeature->isEmpty() then null - else - let targetFeature : Feature = - succession.targetFeature->first().featureTarget in - if not targetFeature.oclIsKindOf(ActionUsage) then null - else targetFeature.oclAsType(ActionUsage) - endif - endif - + nestedInterface = nestedUsage->selectByKind(ReferenceUsage) - - - <p>The <code>triggerActions</code> of a <code>TransitionUsage</code> are the <code>transitionFeatures</code> of the <code>ownedFeatureMemberships</code> of the <code>TransitionUsage</code> with <code>kind = trigger</code>, which must all be <code>AcceptActionUsages</code>.</p> + + + <p>The <code>ownedItems</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ItemUsages</code>.</p> - + OCL2.0 - triggerAction = ownedFeatureMembership-> - selectByKind(TransitionFeatureMembership)-> - select(kind = TransitionFeatureKind::trigger).transitionFeature-> - selectByKind(AcceptActionUsage) + nestedItem = nestedUsage->selectByKind(ItemUsage) + + + + + <p>The <code>ownedMetadata</code> of a <code>Usage</code> are all its <code>ownedMembers</code> that are <code>MetadataUsages</code>.</p> + + + OCL2.0 + nestedMetadata = nestedUsage->selectByKind(MetadataUsage) - - - <p>A <code>TransitionUsage</code> must have an <code>ownedMember</code> that is a <code>Succession</code> with an <code>ActionUsage</code> as the <code>featureTarget</code> of its <code>targetFeature</code>.</p> + + + <p>The <code>ownedOccurrences</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>OccurrenceUsages</code>.</p> - + OCL2.0 - let successions : Sequence(Successions) = - ownedMember->selectByKind(Succession) in -successions->notEmpty() and -successions->at(1).targetFeature.featureTarget-> - forAll(oclIsKindOf(ActionUsage)) + nestedOccurrence = nestedUsage->selectByKind(OccurrenceUsage) - - - <p>The <code>triggerActions</code> of a <code>TransitionUsage</code> are the <code>transitionFeatures</code> of the <code>ownedFeatureMemberships</code> of the <code>TransitionUsage</code> with <code>kind = trigger</code>, which must all be <code>Expressions</code>.</p> + + + <p>The <code>ownedParts</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>PartUsages</code>.</p> - + OCL2.0 - guardExpression = ownedFeatureMembership-> - selectByKind(TransitionFeatureMembership)-> - select(kind = TransitionFeatureKind::trigger).transitionFeature-> - selectByKind(Expression) + nestedPart = nestedUsage->selectByKind(PartUsage) - - - <p>The <code>triggerActions</code>, <code>guardExpressions</code>, and <code>effectActions</code> of a <code>TransitionUsage</code> must specialize, respectively, the <em><code>accepter</code></em>, <em><code>guard</code></em>, and <em><code>effect</code></em> <code>features</code> of the <code>ActionUsage</code> <em><code>Actions::TransitionActions</code></em> from the Systems Model Library.</p> + + + <p>The <code>ownedPorts</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>PortUsages</code>.</p> - + OCL2.0 - triggerAction->forAll(specializesFromLibrary('Actions::TransitionAction::accepter') and -guardExpression->forAll(specializesFromLibrary('Actions::TransitionAction::guard') and -effectAction->forAll(specializesFromLibrary('Actions::TransitionAction::effect')) + nestedPort = nestedUsage->selectByKind(PortUsage) - - - <p>The <code>effectActions</code> of a <code>TransitionUsage</code> are the <code>transitionFeatures</code> of the <code>ownedFeatureMemberships</code> of the <code>TransitionUsage</code> with <code>kind = effect</code>, which must all be <code>ActionUsages</code>.</p> + + + <p>The <code>ownedReferences</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ReferenceUsages</code>.</p> - + OCL2.0 - triggerAction = ownedFeatureMembership-> - selectByKind(TransitionFeatureMembership)-> - select(kind = TransitionFeatureKind::trigger).transitionFeatures-> - selectByKind(AcceptActionUsage) + nestedReference = nestedUsage->selectByKind(ReferenceUsage) - - - <p>The <code>sourceFeature</code> of the <code>succession</code> of a <code>TransitionUsage</code> must be the <code>source</code> of the <code>TransitionUsage</code> (i.e., the first <code>connectorEnd</code> of the <code>succession</code> must have a <code>ReferenceSubsetting</code> <code>Relationship</code> with the <code>source</code>).</p> + + + <p>The <code>ownedRenderings</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>RenderingUsages</code>.</p> - + OCL2.0 - succession.sourceFeature = source + nestedRendering = nestedUsage->selectByKind(RenderingUsage) - - - <p>A <code>TransitionUsage</code> must have an <code>ownedMember</code> that is a <code>BindingConnector</code> between its <code>source</code> and its first input <code>parameter</code> (which redefines <code><em>Actions::TransitionAction::transitionLinkSource</em></code>).</p> + + + <p>The <code>ownedRequirements</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>RequirementUsages</code>.</p> - + OCL2.0 - ownedMember->selectByKind(BindingConnector)->exists(b | - b.relatedFeatures->includes(source) and - b.relatedFeatures->includes(inputParameter(1))) + nestedRequirement = nestedUsage->selectByKind(RequirementUsage) - - - <p>If a <code>TransitionUsage</code> has a <code>triggerAction</code>, then the <em><code>payload</code></em> <code>parameter</code> of the <code>TransitionUsage</code> subsets the <code>Feature</code> chain of the <code>triggerAction</code> and its <code>payloadParameter</code>.</p> + + + <p>The <code>ownedStates</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>StateUsages</code>.</p> - + OCL2.0 - triggerAction->notEmpty() implies - let payloadParameter : Feature = inputParameter(2) in - payloadParameter <> null and - payloadParameter.subsetsChain(triggerAction->at(1), triggerPayloadParameter()) + nestedState = nestedUsage->selectByKind(StateUsage) - - - <p>A <code>TransitionUsage</code> must have an <code>ownedMember</code> that is a <code>BindingConnector</code> between its <code>succession</code> and the inherited <code>Feature</code> <code><em>TransitionPerformances::TransitionPerformance::transitionLink</em></code>.</p> + + + <p>The <code>ownedTransitions</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>TransitionUsages</code>.</p> - + OCL2.0 - ownedMember->selectByKind(BindingConnector)->exists(b | - b.relatedFeatures->includes(succession) and - b.relatedFeatures->includes(resolveGlobal( - 'TransitionPerformances::TransitionPerformance::transitionLink'))) + nestedTransition = nestedUsage->selectByKind(TransitionUsage) - - - <p>A <code>TransitionUsage</code> must have at least one owned input <code>parameter</code> and, if it has a <code>triggerAction</code>, it must have at least two.</p> + + + <p>The <code>ownedUsages</code> of a <code>Usage</code> are all its <code>ownedFeatures</code> that are <code>Usages</code>.</p> - + OCL2.0 - if triggerAction->isEmpty() then - inputParameters()->size() >= 1 -else - inputParameters()->size() >= 2 -endif - + nestedUsage = ownedFeature->selectByKind(Usage) - - - <p>The <code>succession</code> of a <code>TransitionUsage</code> is its first <code>ownedMember</code> that is a <code>Succession</code>.</p> + + + <p>The <code>ownedUseCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>UseCaseUsages</code>.</p> - + OCL2.0 - succession = ownedMember->selectByKind(Succession)->at(1) + nestedUseCase = nestedUsage->selectByKind(UseCaseUsage) - - - <p>If the <code>source</code> of a <code>TransitionUsage</code> is <em>not</em> a <code>StateUsage</code>, then the <code>TransitionUsage</code> must not have any <code>triggerActions</code>.</p> + + + <p>The <code>ownedValidationCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ValidationCaseUsages</code>.</p> - + OCL2.0 - source <> null and not source.oclIsKindOf(StateUsage) implies - triggerAction->isEmpty() + nestedVerificationCase = nestedUsage->selectByKind(VerificationCaseUsage) - - - - <p>The source <code>ActionUsage</code> of this <code>TransitionUsage</code>, which becomes the <code>source</code> of the <code>succession</code> for the <code>TransitionUsage</code>.</p> - - - - - - - <p>The target <code>ActionUsage</code> of this <code>TransitionUsage<code>, which is the <code>targetFeature</code> of the <code>succession</code> for the <code>TransitionUsage</code>.</p> - - - - - - - <p>The <code>AcceptActionUsages</code> that define the triggers of this <code>TransitionUsage</code>, which are the <code>ownedFeatures</code> of the <code>TransitionUsage</code> related to it by <code>TransitionFeatureMemberships</code> with <code>kind = trigger</code>, which must all be <code>AcceptActionUsages</code>.</p> - - - - - - - <p>The <code>Expressions</code> that define the guards of this <code>TransitionUsage</code>, which are the <code>ownedFeatures</code> of the <code>TransitionUsage</code> related to it by <code>TransitionFeatureMemberships</code> with <code>kind = guard</code>, which must all be <code>Expressions</code>.</p> - - - - - - - <p>The <code>ActionUsages</code> that define the effects of this <code>TransitionUsage</code>, which are the <code>ownedFeatures</code> of the <code>TransitionUsage</code> related to it by <code>TransitionFeatureMemberships</code> with <code>kind = effect</code>, which must all be <code>ActionUsages</code>.</p> - - - - - - - <p>The <code>Succession</code> that is the <code>ownedFeature</code> of this <code>TransitionUsage</code>, which, if the <code>TransitionUsage</code> is triggered, asserts the temporal ordering of the <code>source</code> and <code>target</code>.</p> - - - - - - - <p>Return the <code>payloadParameter</code> of the <code>triggerAction</code> of this <code>TransitionUsage</code>, if it has one.</p> - - - - OCL2.0 - if triggerAction->isEmpty() then null -else triggerAction->first().payloadParameter -endif - - - - - - - - - - <p>Return the <code>Feature</code> to be used as the <code>source</code> of the <code>succession</code> of this <code>TransitionUsage</code>, which is the first <code>member</code> of the <code>TransitionUsage</code> that is a <code>Feature</code>, that is owned by the <code>TransitionUsage</code> via a <code>Membership</code> that is <em>not</em> a <code>FeatureMembership</code>, and whose <code>featureTarget</code> is an <code>ActionUsage</code>.</p> - - - - OCL2.0 - let features : Sequence(Feature) = ownedMembership-> - reject(oclIsKindOf(FeatureMembership)).memberElement-> - selectByKind(Feature)-> - select(featureTarget.oclIsKindOf(ActionUsage)) in -if features->isEmpty() then null -else features->first() -endif - - - - - - - - - - - - <p>The Behaviors that are the types of this StateUsage. Nominally, these would be StateDefinition, but non-StateDefinition Behaviors are also allowed, to permit use of Behaviors from the Kernel Library.</p> - - - - - - - - - <p>The ObjectMembership that owns a particular RequirementUsage as its <code>ownedObjectiveRequirement</code>.</p> - - - - - - - - - <p>The CaseDefinitions that have a certain PartUsage as an <code>actorParameter</code>.</p> - - - - - - - - <p>A <code>CaseDefinition</code> is a <code>CalculationDefinition</code> for a process, often involving collecting evidence or data, relative to a subject, possibly involving the collaboration of one or more other actors, producing a result that meets an objective.</p> - - - - <p>The <code>objectiveRequirement</code> of a <code>CaseDefinition</code> is the <code>ownedObjectiveRequirement</code> of its <case>ObjectiveMembership</code>, if any.</p> + + + <p>The <code>ownedViews</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ViewUsages</code>.</p> - + OCL2.0 - objectiveRequirement = - let objectives: OrderedSet(RequirementUsage) = - featureMembership-> - selectByKind(ObjectiveMembership). - ownedRequirement in - if objectives->isEmpty() then null - else objectives->first().ownedObjectiveRequirement - endif + nestedView = nestedUsage->selectByKind(ViewUsage) - - - <p>A <code>CaseDefinition</code> must have at most one <code>featureMembership</code> that is a <code>ObjectiveMembership</code>.</p> + + + <p>The <code>ownedViewpoints</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ViewpointUsages</code>.</p> - + OCL2.0 - featureMembership-> - selectByKind(ObjectiveMembership)-> - size() <= 1 + nestedViewpoint = nestedUsage->selectByKind(ViewpointUsage) - - - <p>The <code>subjectParameter</code> of a <code>CaseDefinition</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p> + + + <p>The <code>usages</code> of a <code>Usage</code> are all its <code>features</code> that are <code>Usages</code>.</p> - + OCL2.0 - subjectParameter = - let subjectMems : OrderedSet(SubjectMembership) = - featureMembership->selectByKind(SubjectMembership) in - if subjectMems->isEmpty() then null - else subjectMems->first().ownedSubjectParameter - endif + usage = feature->selectByKind(Usage) - - - <p>The <code>actorParameters</code> of a <code>CaseDefinition</code> are the <code>ownedActorParameters</code> of the <code>ActorMemberships</code> of the <code>CaseDefinition</code>.</p> + + + <p>A <code>Usage</code> that is directed, an end feature or has no <code>featuringTypes</code> must be referential.</p> - + OCL2.0 - actorParameter = featureMembership-> - selectByKind(ActorMembership). - ownedActorParameter + direction <> null or isEnd or featuringType->isEmpty() implies + isReference - - - <p>A <code>CaseDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> + + + <p>If a <code>Usage</code> is a variation, then it must be abstract.</p> - - English - featureMembership->selectByKind(SubjectMembership)->size() <= 1 + + OCL2.0 + isVariation implies isAbstract - - - <p>The <code>subjectParameter</code> of a <code>CaaseDefinition</code> must be its first <code>input</code>.</p> + + + <p>A <code>Usage</code> <code>mayTimeVary</code> if and only if all of the following are true</p> +<ul> + <li>It has an <code>owningType</code> that specializes <em><code>Occurrences::Occurrence</code></em> (from the Kernel Semantic Library).</li> + <li>It is not a portion.</li> + <li>It does not specialize <em><code>Links::SelfLink</code></em> or <em><code>Occurrences::HappensLink</code></em> (from the Kernel Semantic Library).</li> + <li>If <code>isComposite = true</code>, it does not specialize <em><code>Actions::Action</code></em> (from the Systems Model Library). +</li></ul> - + OCL2.0 - input->notEmpty() and input->first() = subjectParameter + mayTimeVary = + owningType <> null and + owningType.specializesFromLibrary('Occurrences::Occurrence') and + not ( + isPortion or + specializesFromLibrary('Links::SelfLink') or + specializesFromLibrary('Occurrences::HappensLink') or + isComposite and specializesFromLibrary('Actions::Action') + ) - - - <p>A <code>CaseDefinition</code> must directly or indirectly specialize the base <code>CaseDefinition</code> <em><code>Cases::Case></code></em> from the Systems Model Library.</p> + + + <p>If a <code>Usage</code> has an <code>owningVariationUsage</code>, then it must have the same <code>featuringTypes</code> as that <code>Usage</code>.</p> - + OCL2.0 - specializesFromLibrary('Cases::Case') + owningVariationUsage <> null implies + featuringType->asSet() = owningVariationUsage.featuringType->asSet() - - - - <p>The <code>RequirementUsage</code> representing the objective of this <code>CaseDefinition</code>.</p> + + + + <p>Whether this <code>Usage</code> may be time varying (that is, whether it is featured by the snapshots of its <code>owningType</code>, rather than being featured by the <code>owningType</code> itself). However, if <code>isConstant</code> is also true, then the value of the <code>Usage</code> is nevertheless constant over the entire duration of an instance of its <code>owningType</code> (that is, it has the same value on all snapshots).</p> + +<p>The property <code>mayTimeVary</code> redefines the KerML property <code>Feature::isVariable</code>, making it derived. The property <code>isConstant</code> is inherited from <code>Feature</code>.</p> + + + + + + <p>Whether this <code>Usage</code> is a referential <code>Usage</code>, that is, it has <code>isComposite = false</code>.<p> + + + + + + <p>The <code>Usages</code> which represent the variants of this <code>Usage</code> as a variation point <code>Usage</code>, if <code>isVariation = true</code>. If <code>isVariation = false</code>, then there must be no <code>variants</code>.</p> + + + + + + + <p>The <code>ownedMemberships</code> of this <code>Usage</code> that are <code>VariantMemberships</code>. If <code>isVariation = true</code>, then this must be all <code>memberships</code> of the <code>Usage</code>. If <code>isVariation = false</code>, then <code>variantMembership</code>must be empty.</p> + + + + + + + <p>The <code>Definition</code> that owns this <code>Usage</code> (if any).</p> + + + + + + + <p>The <code>Usage</code> in which this <code>Usage</code> is nested (if any).</p> + + + + + + + <p>The <code>Classifiers</code> that are the types of this <code>Usage</code>. Nominally, these are <code>Definitions</code>, but other kinds of Kernel <code>Classifiers</code> are also allowed, to permit use of <code>Classifiers</code> from the Kernel Model Libraries.</p> + + + + + + + <p>The <code>Usages</code> that are <code>features</code> of this <code>Usage</code> (not necessarily owned).</p> + + + + + + + + + + <p>The <code>usages</code> of this <code>Usage</code> that are <code>directedFeatures</code>.</p> + + + + + + + + <p>The <code>Usages</code> that are <code>ownedFeatures</code> of this <code>Usage</code>.</p> + + + + + + + <p>The <code>ReferenceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + + + + + + + <p>The code>AttributeUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + + + + + + + <p>The code>EnumerationUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.<p> + + + + + + + <p>The <code>OccurrenceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + + + + + + <p>The <code>ItemUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + + + + + + <p>The <code>PartUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + + + + + + <p>The <code>PortUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + + + + + + <p>The <code>ConnectorAsUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>. Note that this list includes <code>BindingConnectorAsUsages</code>, <code>SuccessionAsUsages</code>, and <code>FlowUsages</code> because these are <code>ConnectorAsUsages</code> even though they are not <code>ConnectionUsages</code>.</p> + + + + + + + <p>The code>FlowUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + + + + + + <p>The <code>InterfaceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + + + + + + <p>The <code>AllocationUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + + + + + + <p>The <code>ActionUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - + + - - - <p>The <code>parameter</code> of this <code>CaseDefinition</code> that represents its subject.</p> + + + <p>The <code>StateUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - + + - - - <p>The <code>parameters</code> of this <code>CaseDefinition</code> that represent actors involved in the case.</p> + + + <p>The <code>TransitionUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - + + - - - - - - - - - - - <p>The CaseDefinitions that have a certain RequirementUsage as their <code>objectiveRequirement</code>.</p> + + + <p>The <code>CalculationUsage</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - - - - - - <p>A <code>CaseUsage</code> is a <code>Usage</code> of a <code>CaseDefinition</code>.</p> - - - - <p>The <code>objectiveRequirement</code> of a <code>CaseUsage</code> is the <code>RequirementUsage</code> it owns via an <case>ObjectiveMembership</code>, if any.</p> + + + + + + <p>The <code>ConstraintUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - OCL2.0 - objectiveRequirement = - let objectives: OrderedSet(RequirementUsage) = - featureMembership-> - selectByKind(ObjectiveMembership). - ownedRequirement in - if objectives->isEmpty() then null - else objectives->first().ownedObjectiveRequirement - endif - - - - - <p>A <code>CaseUsage</code> must have at most one <code>featureMembership</code> that is a <code>ObjectiveMembership</code>.</p> + + + + + + <p>The <code>RequirementUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - OCL2.0 - featureMembership-> - selectByKind(ObjectiveMembership)-> - size() <= 1 - - - - - <p>A <code>CaseUsage</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> + + + + + + <p>The <code>ConcernUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - OCL2.0 - featureMembership-> - selectByKind(SubjectMembership)-> - size() <= 1 - - - - - <p>The <code>actorParameters</code> of a <code>CaseUsage</code> are the <code>ownedActorParameters</code> of the <code>ActorMemberships</code> of the <code>CaseUsage</code>.</p> + + + + + + <p>The <code>CaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - OCL2.0 - actorParameter = featureMembership-> - selectByKind(ActorMembership). - ownedActorParameter - - - - - <p>The <code>subjectParameter</code> of a <code>CaseUsage</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p> + + + + + + <p>The <code>AnalysisCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - OCL2.0 - subjectParameter = - let subjects : OrderedSet(SubjectMembership) = - featureMembership->selectByKind(SubjectMembership) in - if subjects->isEmpty() then null - else subjects->first().ownedSubjectParameter - endif - - - - - <p>The <code>subjectParameter</code> of a <code>CaseUsage</code> must be its first <code>input</code>.</p> + + + + + + <p>The <code>VerificationCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - OCL2.0 - input->notEmpty() and input->first() = subjectParameter - - - - - <p>A <code>CaseUsage</code> must directly or indirectly specialize the base <code>CaseUsage</code> <em><code>Cases::cases</code></em> from the Systems Model Library.</p> + + + + + + <p>The <code>UseCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - OCL2.0 - specializesFromLibrary('Cases::cases') - - - - - <p>A composite <code>CaseUsage</code> whose <code>owningType</code> is a <code>CaseDefinition</code> or <code>CaseUsage</code> must directly or indirectly specialize the <code>CaseUsage</code> <em><code>Cases::Case::subcases</code></em>.</p> + + + + + + <p>The <code>ViewUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - OCL2.0 - isComposite and owningType <> null and - (owningType.oclIsKindOf(CaseDefinition) or - owningType.oclIsKindOf(CaseUsage)) implies - specializesFromLibrary('Cases::Case::subcases') - - - - - - <p>The <code>RequirementUsage</code> representing the objective of this <code>CaseUsage</code>.</p> + + + + + + <p>The <code>ViewpointUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - + + - - - <p>The CaseDefinition that is the type of this CaseUsage.</p> + + + <p>The <code>RenderingUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + + + + + + + <p>The <code>MetadataUsages</code> that are <code>ownedMembers</code> of this of this <code>Usage</code>.</p> + + + + + + + <p>Whether this <code>Usage</code> is for a variation point or not. If true, then all the <code>memberships</code> of the <code>Usage</code> must be <code>VariantMemberships</code>.</p> + + + + + + <p>If this <code>Usage</code> is a variant, then its naming <code>Feature</code> is the <code>referencedFeature</code> of its <code>ownedReferenceSubsetting</code>.</p> + + + + OCL2.0 + if not owningMembership.oclIsKindOf(VariantMembership) then + self.oclAsType(Feature).namingFeature() +else if ownedReferenceSubsetting = null then null +else ownedReferenceSubsetting.referencedFeature +endif endif + + + + + + + + + + <p>If <code>ownedReferenceSubsetting</code> is not null, return the <code>featureTarget</code> of the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code>.</p> + + + + OCL2.0 + if ownedReferenceSubsetting = null then null +else ownedReferenceSubsetting.referencedFeature.featureTarget +endif + + + + + + + + + <p>The Definition that owns the <code>ownedAction</code>.</p> - - - - - - <p>The <code>parameter</code> of this <code>CaseUsage</code> that represents its subject.</p> - + + + + + + + + <p>The <code>Usage</code> that owns the <code>nestedFlow</code>.</p> - - - - - - <p>The <code>parameters</code> of this <code>CaseUsage</code> that represent actors involved in the case.</p> + + + + + + + + <p>The Usage that owns the <code>nestedEnumeration</code>.</p> - - - + + + - - - - <p>The CaseUsages that have a certain Usage as their <code>subjectParameter</code>.</p> + + + + <p>The Definition that owns the <code>ownedEnumeration</code>.</p> - - + + - - - - <p>The CaseDefinitions that have a certain Usage as their <code>subjectParameter</code>.</p> + + + + <p>The Definition that owns the <code>ownedReference</code>.</p> - - + + - - - <p>An <code>ObjectiveMembership</code> is a <code>FeatureMembership</code> that indicates that its <code>ownedObjectiveRequirement</code> is the objective <code>RequirementUsage</code> for its <code>owningType</code>, which must be a <code>CaseDefinition</code> or <code>CaseUsage</code>.</p> - - - - <p>The <code>owningType</code> of an <code>ObjectiveMembership</code> must be a <code>CaseDefinition</code> or <code>CaseUsage</code>.</p> + + + + <p>The Usages that feature a certain Usage.</p> - - OCL2.0 - owningType.oclIsType(CaseDefinition) or -owningType.oclIsType(CaseUsage) - - - - - - <p>The <code>ownedObjectiveRequirement</code> of an <code>ObjectiveMembership</code> must be composite.</p> + + + + + + + + <p>The Definition that owns the <code>ownedOccurrence</code>.</p> - - OCL2.0 - ownedObjectiveRequirement.isComposite - - - - - - <p>The RequirementUsage that is the <code>ownedMemberFeature</code> of this RequirementUsage.</p> - + + + + + + + + <p>The Usage in which the <code>nestedUsage</code> is nested.</p> - - - + + + - - - - <p>The CaseUsages being typed by a certain CaseDefinition.</p> + + + + <p>The Usage that owns a certain <code>nestedRendering</code>.</p> - - + + - - - - <p>The Usage in which the <code>nestedCase</code> is nested.</p> + + + + <p>The Usage in which the <code>nestedAction</code> is nested.</p> - - + + - - - - <p>The CaseUsages that have a certain PartUsage as an <code>actorParameter</code>.</p> + + + + <p>The Usage in which the <code>nestedRequirement</code> is nested.</p> - - + + - - - - <p>The RequirementDefinition that has a certain ConstraintUsage as an <code>assumedConstraint</code> (if any).</p> + + + + <p>The Usage in which the <code>nestedState</code> is nested.</p> - - + + - - - <p>A <code>ConcernDefinition</code> is a <code>RequirementDefinition</code> that one or more stakeholders may be interested in having addressed. These stakeholders are identified by the <code>ownedStakeholders</code>of the <code>ConcernDefinition</code>.</p> - - - - - <p>A <code>ConcernDefinition</code> must directly or indirectly specialize the base <code>ConcernDefinition</code> <em><code>Requirements::ConcernCheck</code></em> from the Systems Model Library.</p> + + + + + <p>The Usage in which the <code>nestedInterface</code> is nested.</p> - - OCL2.0 - specializesFromLibrary('Requirements::ConcernCheck') - - - + + + - - - <p>An <code>ActorMembership</code> is a <code>ParameterMembership</code> that identifies a <code>PartUsage</code> as an <em>actor</em> <code>parameter</code>, which specifies a role played by an external entity in interaction with the <code>owningType</code> of the <code>ActorMembership</code>.</p> - - - - <p>The <code>owningType</code> of an <code>ActorMembership</code> must be a <code>RequirementDefinition</code>, <code>RequirementUsage</code>, <code>CaseDefinition</code>, or <code>CaseUsage</code>.</p> + + + + <p>The Definition that owns the <code>ownedInterface</code>.</p> - - OCL2.0 - owningType.oclIsKindOf(RequirementUsage) or -owningType.oclIsKindOf(RequirementDefinition) or -owningType.oclIsKindOf(CaseDefinition) or -owningType.oclIsKindOf(CaseUsage) - - - - - - - <p>The <code>PartUsage</code> specifying the actor.</p> + + + + + + + + <p>The Definition that owns the <code>ownedAttribute</code>.</p> - - - + + + - - - <p>A <code>SubjectMembership</code> is a <code>ParameterMembership</code> that indicates that its <code>ownedSubjectParameter</code> is the subject of its <code>owningType</code>. The <code>owningType</code> of a <code>SubjectMembership</code> must be a <code>RequirementDefinition</code>, <code>RequirementUsage</code>, <code>CaseDefinition</code>, or <code>CaseUsage</code>.</p> - - - - <p>The <code>owningType</code> of a <code>SubjectMembership</code> must be a <code>RequirementDefinition</code>, <code>RequirementUsage</code>, <code>CaseDefinition</code>, or <code>CaseUsage</code>.</p> + + + + <p>The Usage in which the <code>nestedConstraint</code> is nested.</p> - - OCL2.0 - owningType.oclIsType(RequirementDefinition) or -owningType.oclIsType(RequiremenCaseRequirementDefinition) or -owningType.oclIsType(CaseDefinition) or -owningType.oclIsType(CaseUsage) - - - - - - - <p>The <code>Usage</code< that is the <code>ownedMemberParameter</code> of this <code>SubjectMembership</code>.</p> + + + + + + + + <p>The Definition that owns the <code>ownedItem</code>.</p> - - - + + + - - - - <p>The RequirementConstraintMembership that has a certain ConstraintUsage as its <code>referencedConstraint</code>.</p> + + + + <p>The Usage in which the <code>nestedAttribute</code> is nested.</p> - - + + - - - - <p>The RequirementUsage that has a certain ConstraintUsage as a <code>requiredConstraint</code> (if any).</p> + + + + <p>The Usage in which the <code>nestedTransition</code> is nested.</p> - - + + - - - - <p>The RequirementUsage that addresses a certain <code>addressedConcern</code>.</p> + + + + <p>The <code>Definition</code> that owns the <code>ownedFlow</code>.</p> - - + + - - - <p>A <code>RequirementUsage</code> is a <code>Usage</code> of a <code>RequirementDefinition</code>.</p> - - - - <p>The <code>actorParameters</code> of a <code>RequirementUsage</code> are the <code>ownedActorParameters</code> of the <code>ActorMemberships</code> of the <code>RequirementUsage</code>.</p> + + + + <p>The Usage that owns the <code>nestedReference</code>.</p> - - OCL2.0 - actorParameter = featureMembership-> - selectByKind(ActorMembership). - ownedActorParameter - - - - - <p>The <code>assumedConstraints</code> of a <code>RequirementUsage</code> are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind = assumption</code>.</p> + + + + + + + + <p>The VariantMembership that owns this Usage, if the Usage represents a variant in the context of some variation point Definition or Usage.</p> - - OCL2.0 - assumedConstraint = ownedFeatureMembership-> - selectByKind(RequirementConstraintMembership)-> - select(kind = RequirementConstraintKind::assumption). - ownedConstraint - - - - - <p>The <code>framedConcerns</code> of a <code>RequirementUsage</code> are the <code>ownedConcerns</code> of the <code>FramedConcernMemberships</code> of the <code>RequirementUsage</code>.</p> + + + + + + + + <p>The Definition that owns the <code>ownedPort</code>.</p> - - OCL2.0 - framedConcern = featureMembership-> - selectByKind(FramedConcernMembership). - ownedConcern - - - - - <p>The <code>requiredConstraints</code> of a <code>RequirementUsage</code> are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementUsage</code> with <code>kind = requirement</code>.</p> + + + + + + + <p>The Definition that owns this CaseUsage (if any).</p> + + + + <p>The Definition that owns the <code>ownedCase</code>.</p> - - OCL2.0 - requiredConstraint = ownedFeatureMembership-> - selectByKind(RequirementConstraintMembership)-> - select(kind = RequirementConstraintKind::requirement). - ownedConstraint - - - - - <p>The <code>stakeHolderParameters</code> of a <code>RequirementUsage</code> are the <code>ownedStakeholderParameters</code> of the <code>StakeholderMemberships</code> of the <code>RequirementUsage</code>.</p> + + + + + + + + <p>The Definition that owns a certain <code>ownedRendering</code>.</p> - - OCL2.0 - stakeholderParameter = featureMembership-> - selectByKind(AStakholderMembership). - ownedStakeholderParameter - - - - - <p>The <code>subjectParameter</code> of a <code>RequirementUsage</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p> + + + + + + + + <p>The Definition that owns the <code>ownedRequirement</code>.</p> - - OCL2.0 - subjectParameter = - let subjects : OrderedSet(SubjectMembership) = - featureMembership->selectByKind(SubjectMembership) in - if subjects->isEmpty() then null - else subjects->first().ownedSubjectParameter - endif - - - - - <p>The <code>texts</code> of a<code>RequirementUsage</code> are the <code>bodies</code> of the <code>documentation</code> of the <code>RequirementUsage</code>.</p> + + + + + + + + <p>The Usage that owns the <code>nestedConcern</code>.</p> - - OCL2.0 - text = documentation.body - - - - - <p>A <code>RequirementDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> + + + + + + + + <p>The Usage in which the <code>nestedMetadata</code> is nested.</p> - - OCL2.0 - featureMembership-> - selectByKind(SubjectMembership)-> - size() <= 1 - - - - - <p>The <code>subjectParameter</code> of a <code>RequirementUsage</code> must be its first <code>input</code>.</p> + + + + + + + + <p>The Usage in which the <code>nestedOccurrence</code> is nested.</p> - - OCL2.0 - input->notEmpty() and input->first() = subjectParameter - - - - - <p>A <code>RequirementUsage</code> must directly or indirectly specialize the base <code>RequirementUsage</code> <em><code>Requirements::requirementChecks</code></em> from the Systems Model Library.</p> + + + + + + + + <p>The Definition that owns a certain <code>ownedViewpoint</code>.</p> - - OCL2.0 - specializesFromLibrary('Requirements::requirementChecks') - - - - - <p>A composite <code>RequirementUsage</code> whose <code>owningType</code> is a <code>RequirementDefinition</code> or ,code>RequirementUsage</code> must directly or indirectly specialize the <code>RequirementUsage</code> <em><code>Requirements::RequirementCheck::subrequirements</code></em> from the Systems Model Library.</p> + + + + + + + + <p>The Definition that owns the <code>ownedConstraint</code>.</p> - - OCL2.0 - isComposite and owningType <> null and - (owningType.oclIsKindOf(RequirementDefinition) or - owningType.oclIsKindOf(RequirementUsage)) implies - specializesFromLibrary('Requirements::RequirementCheck::subrequirements') - - - - - <p>A <code>RequirementUsage</code> whose <code>owningFeatureMembership</code> is a <code>ObjectiveMembership</code> must redefine the <code>objectiveRequirement</code> of each <code>CaseDefinition</code> or <code>CaseUsage</code> that is specialized by the <code>owningType</code> of the <code>RequirementUsage</code>.</p> + + + + + + + + <p>The Usage that owns a certain <code>nestedView</code>.</p> - - OCL2.0 - owningfeatureMembership <> null and -owningfeatureMembership.oclIsKindOf(ObjectiveMembership) implies - owningType.ownedSpecialization.general->forAll(gen | - (gen.oclIsKindOf(CaseDefinition) implies - redefines(gen.oclAsType(CaseDefinition).objectiveRequirement)) and - (gen.oclIsKindOf(CaseUsage) implies - redefines(gen.oclAsType(CaseUsage).objectiveRequirement)) - - - - - <p>A <code>RequirementUsage</code> whose <code>owningFeatureMembership</code> is a <code>RequirementVerificationMembership</code> must directly or indirectly specialize the <code>RequirementUsage</code> <code><em>VerificationCases::VerificationCase::obj::requirementVerifications</em></code>.</p> + + + + + + + <p>A <code>ReferenceUsage</code> is a <code>Usage</code> that specifies a non-compositional (<code>isComposite = false</code>) reference to something. The <code>definition</code> of a <code>ReferenceUsage</code> can be any kind of <code>Classifier</code>, with the default being the top-level <code>Classifier</code> <code><em>Base::Anything</em></code> from the Kernel Semantic Library. This allows the specification of a generic reference without distinguishing if the thing referenced is an attribute value, item, action, etc.</p> + + + + <p>A <code>ReferenceUsage</code> is always referential.</p> - + OCL2.0 - owningFeatureMembership <> null and -owningFeatureMembership.oclIsKindOf(RequirementVerificationMembership) implies - specializesFromLibrary('VerificationCases::VerificationCase::obj::requirementVerifications') + isReference - - - - <p>The <code>RequirementDefinition</code> that is the single <code>definition</code> of this <code>RequirementUsage</code>.</p> + + + + <p>Always <code>true</code> for a <code>ReferenceUsage</code>.</code> - - + + - - - <p>An optional modeler-specified identifier for this <code>RequirementUsage</code> (used, e.g., to link it to an original requirement text in some source document), which is the <code>declaredShortName</code> for the <code>RequirementUsage</code>.</p> + + + <p>If this <code>ReferenceUsage</code> is the <em><code>payload</code></em> <code>parameter</code> of a <code>TransitionUsage</code>, then its naming <code>Feature</code> is the <code>payloadParameter</code> of the <code>triggerAction</code> of that <code>TransitionUsage</code> (if any).</p> - - - - - - - <p>An optional textual statement of the requirement represented by this <code>RequirementUsage</code>, derived from the <code>bodies<code> of the <code>documentation</code> of the <code>RequirementUsage</code>.</p> + + + OCL2.0 + if owningType <> null and owningType.oclIsKindOf(TransitionUsage) and + owningType.oclAsType(TransitionUsage).inputParameter(2) = self then + owningType.oclAsType(TransitionUsage).triggerPayloadParameter() +else self.oclAsType(Usage).namingFeature() +endif + + + + + + + + + + + + <p>The Usages that have a certain Usage as a <code>flow</code>.</p> - - - - - - - <p>The owned <code>ConstraintUsages</code> that represent requirements of this <code>RequirementUsage</code>, which are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementUsage</code> with <code>kind</code> = <code>requirement</code>.</p> + + - - - - - - <p>The owned <code>ConstraintUsages</code> that represent assumptions of this <code>RequirementUsage</code>, derived as the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementUsage</code> with <code>kind</code> = <code>assumption</code>.</p> + + + + + + + + <p>The Usage in which the <code>nestedUseCase</code> is nested.</p> - - - - - - <p>The <code>parameter</code> of this <code>RequirementUsage</code> that represents its subject.</p> + + + + + + + + <p>The Definition that owns the <code>ownedPart</code>.</p> - - - - - - <p>The <code>ConcernUsages</code> framed by this <code>RequirementUsage</code>, which are the <code>ownedConcerns</code> of all <code>FramedConcernMemberships</code> of the <code>RequirementUsage</code>.</p> + + + + + + + + <p>The ItemUsages being typed by a certain Structure.</p> - - - - - - <p>The <code>parameters</code> of this <code>RequirementUsage</code> that represent actors involved in the requirement.</p> + + + + + + + + <p>The Definition that owns a certain <code>ownedView</code>.</p> - - - - - - <p>The <code>parameters</code> of this <code>RequirementUsage</code> that represent stakeholders for the requirement.</p> + + + + + + + <p>A <code>RequirementConstraintKind</code> indicates whether a <code>ConstraintUsage</code> is an assumption or a requirement in a <code>RequirementDefinition</code> or <code>RequirementUsage</code>.</p> + + + + <p>Indicates that a member <code>ConstraintUsage</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage</code> represents an assumption.</p> - - - + + + + <p>Indicates that a member <code>ConstraintUsage</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage</code>represents an requirement.</p> + + - - - - <p>The RequirementUsages that have a certain PartUsage as an <code>actorParameter</code>.</p> + + + + <p>The RequirementDefinitions that have a certain Usage as their <code>subjectParameter</code>.</p> - - + + - - - - <p>The ActorMembership that has a certain PartUsage as its <code>ownedActorParameter</code>.</p> + + + + <p>The SatisfyRequirementUsages that have a certain Feature as their <tt>satisfyingFeature</tt>.</p> - - + + - - - <p>A <code>StakeholderMembership</code> is a <code>ParameterMembership</code> that identifies a <code>PartUsage</code> as a <code>stakeholderParameter</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage</code>, which specifies a role played by an entity with concerns framed by the <code>owningType</code>.</p> + + + <p>An <code>ActorMembership</code> is a <code>ParameterMembership</code> that identifies a <code>PartUsage</code> as an <em>actor</em> <code>parameter</code>, which specifies a role played by an external entity in interaction with the <code>owningType</code> of the <code>ActorMembership</code>.</p> - - - <p>The <code>owningType</code> of a <code>StakeholderMembership</code> must be a <code>RequirementDefinition</code> or <code>RequirementUsage</code>.</p> + + + <p>The <code>owningType</code> of an <code>ActorMembership</code> must be a <code>RequirementDefinition</code>, <code>RequirementUsage</code>, <code>CaseDefinition</code>, or <code>CaseUsage</code>.</p> - + OCL2.0 owningType.oclIsKindOf(RequirementUsage) or -owningType.oclIsKindOf(RequirementDefinition) +owningType.oclIsKindOf(RequirementDefinition) or +owningType.oclIsKindOf(CaseDefinition) or +owningType.oclIsKindOf(CaseUsage) + - - - - <p>The <code>PartUsage</code> specifying the stakeholder.</p> + + + + <p>The <code>PartUsage</code> specifying the actor.</p> - - + + - - - <p>A <code>RequirementDefinition</code> is a <code>ConstraintDefinition</code> that defines a requirement used in the context of a specification as a constraint that a valid solution must satisfy. The specification is relative to a specified subject, possibly in collaboration with one or more external actors.</p> + + + + <p>The RequirementDefinition that has a certain ConstraintUsage as an <code>assumedConstraint</code> (if any).</p> + + + + + + + + + <p>The RequirementDefinition that has a certain ConstraintUsage as a <code>requiredConstraint</code> (if any).</p> + + + + + + + + + <p>The RequirementUsages that have a certain PartUsage as an <code>actorParameter</code>.</p> + + + + + + + + <p>A <code>RequirementUsage</code> is a <code>Usage</code> of a <code>RequirementDefinition</code>.</p> - - - <p>The <code>texts</code> of a<code>RequirementDefinition</code> are the <code>bodies</code> of the <code>documentation</code> of the <code>RequirementDefinition</code>.</p> + + + <p>The <code>actorParameters</code> of a <code>RequirementUsage</code> are the <code>ownedActorParameters</code> of the <code>ActorMemberships</code> of the <code>RequirementUsage</code>.</p> - + OCL2.0 - text = documentation.body + actorParameter = featureMembership-> + selectByKind(ActorMembership). + ownedActorParameter - - - <p>The <code>assumedConstraints</code> of a <code>RequirementDefinition</code> are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind = assumption</code>.</p> + + + <p>The <code>assumedConstraints</code> of a <code>RequirementUsage</code> are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind = assumption</code>.</p> - + OCL2.0 assumedConstraint = ownedFeatureMembership-> selectByKind(RequirementConstraintMembership)-> @@ -11418,436 +11040,224 @@ owningType.oclIsKindOf(RequirementDefinition) ownedConstraint - - - <p>The <code>requiredConstraints</code> of a <code>RequirementDefinition</code> are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind = requirement</code>.</p> - - - OCL2.0 - requiredConstraint = ownedFeatureMembership-> - selectByKind(RequirementConstraintMembership)-> - select(kind = RequirementConstraintKind::requirement). - ownedConstraint - - - - - <p>The <code>subjectParameter</code> of a <code>RequirementDefinition</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p> - - - OCL2.0 - subjectParameter = - let subjects : OrderedSet(SubjectMembership) = - featureMembership->selectByKind(SubjectMembership) in - if subjects->isEmpty() then null - else subjects->first().ownedSubjectParameter - endif - - - - - <p>The <code>framedConcerns</code> of a <code>RequirementDefinition</code> are the <code>ownedConcerns</code> of the <code>FramedConcernMemberships</code> of the <code>RequirementDefinition</code>.</p> + + + <p>The <code>framedConcerns</code> of a <code>RequirementUsage</code> are the <code>ownedConcerns</code> of the <code>FramedConcernMemberships</code> of the <code>RequirementUsage</code>.</p> - + OCL2.0 framedConcern = featureMembership-> selectByKind(FramedConcernMembership). ownedConcern - - - <p>The <code>actorParameters</code> of a <code>RequirementDefinition</code> are the <code>ownedActorParameters</code> of the <code>ActorMemberships</code> of the <code>RequirementDefinition</code>.</p> + + + <p>The <code>requiredConstraints</code> of a <code>RequirementUsage</code> are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementUsage</code> with <code>kind = requirement</code>.</p> - + OCL2.0 - actorParameter = featureMembership-> - selectByKind(ActorMembership). - ownedActorParameter + requiredConstraint = ownedFeatureMembership-> + selectByKind(RequirementConstraintMembership)-> + select(kind = RequirementConstraintKind::requirement). + ownedConstraint - - - <p>The <code>stakeHolderParameters</code> of a <code>RequirementDefinition</code> are the <code>ownedStakeholderParameters</code> of the <code>StakeholderMemberships</code> of the <code>RequirementDefinition</code>.</p> + + + <p>The <code>stakeHolderParameters</code> of a <code>RequirementUsage</code> are the <code>ownedStakeholderParameters</code> of the <code>StakeholderMemberships</code> of the <code>RequirementUsage</code>.</p> - + OCL2.0 stakeholderParameter = featureMembership-> - selectByKind(StakholderMembership). + selectByKind(AStakholderMembership). ownedStakeholderParameter - - - <p>A <code>RequirementDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> + + + <p>The <code>subjectParameter</code> of a <code>RequirementUsage</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p> - + OCL2.0 - featureMembership-> - selectByKind(SubjectMembership)-> - size() <= 1 + subjectParameter = + let subjects : OrderedSet(SubjectMembership) = + featureMembership->selectByKind(SubjectMembership) in + if subjects->isEmpty() then null + else subjects->first().ownedSubjectParameter + endif - - - <p>The <code>subjectParameter</code> of a <code>RequirementDefinition</code> must be its first <code>input</code>.</p> + + + <p>The <code>texts</code> of a<code>RequirementUsage</code> are the <code>bodies</code> of the <code>documentation</code> of the <code>RequirementUsage</code>.</p> - + OCL2.0 - input->notEmpty() and input->first() = subjectParameter + text = documentation.body - - - <p>A <code>RequirementDefinition</code> must directly or indirectly specialize the base <code>RequirementDefinition</code> <code><em>Requirements::RequirementCheck</em></code> from the Systems Model Library.</p> + + + <p>A <code>RequirementDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> - + OCL2.0 - specializesFromLibrary('Requirements::RequirementCheck') + featureMembership-> + selectByKind(SubjectMembership)-> + size() <= 1 - - - - - <p>An optional modeler-specified identifier for this <code>RequirementDefinition</code> (used, e.g., to link it to an original requirement text in some source document), which is the <code>declaredShortName</code> for the <code>RequirementDefinition</code>.</p> - - - - - - - - <p>An optional textual statement of the requirement represented by this <code>RequirementDefinition</code>, derived from the <code>bodies</code> of the <code>documentation</code> of the <code>RequirementDefinition</code>.</p> - - - - - - - - - <p>The <code>parameter</code> of this <code>RequirementDefinition</code> that represents its subject.</p> - - - - - - - <p>The <code>parameters</code> of this <code>RequirementDefinition</code> that represent actors involved in the requirement.</p> - - - - - - - <p>The <code>parameters</code> of this <code>RequirementDefinition</code> that represent stakeholders for th requirement.</p> - - - - - - - <p>The owned <code>ConstraintUsages</code> that represent assumptions of this <code>RequirementDefinition</code>, which are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind = assumption</code>.</p> - - - - - - - <p>The owned <code>ConstraintUsages</code> that represent requirements of this <code>RequirementDefinition</code>, derived as the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind</code> = <code>requirement</code>.</p> - - - - - - - <p>The <code>ConcernUsages</code> framed by this <code>RequirementDefinition</code>, which are the <code>ownedConcerns</code> of all <code>FramedConcernMemberships</code> of the <code>RequirementDefinition</code>.</p> - - - - - - - - - - - - - - - <p>The RequirementDefinitions that have a certain Usage as their <code>subjectParameter</code>.</p> - - - - - - - - - <p>The RequirementConstraintMembership that owns a certain ConstraintUsage as its <code>ownedConstraint</code>.</p> - - - - - - - - - <p>The RequirementUsages typed by a certain RequirementDefinition.</p> - - - - - - - - - <p>The RequirementDefinition that addresses a certain <code>addressedConcern</code>.</p> - - - - - - - - - <p>The AddressedConcernMembership that owns a certain ConcernUsage as its <code>ownedConcern</code>.</p> - - - - - - - - - <p>The RequirementDefinitions that have a certain PartUsage as an <code>actorParameter</code>.</p> - - - - - - - - - <p>The SubjectMembership that owns a particular Parameter as its <code>ownedSubjectParameter</code>.</p> - - - - - - - - <p>A <code>FramedConcernMembership</code> is a <code>RequirementConstraintMembership</code> for a framed <code>ConcernUsage</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage</code>.</p> - - - - <p>A <code>FramedConcernMembership</code> must have <code>kind = requirement</code>.</p> + + + + <p>The <code>subjectParameter</code> of a <code>RequirementUsage</code> must be its first <code>input</code>.</p> - + OCL2.0 - kind = RequirementConstraintKind::requirement + input->notEmpty() and input->first() = subjectParameter - - - - <p>The <code>kind</code> of an <code>FramedConcernMembership</code> must be <code>requirement</code>.</p> - - - - - - <p>The <code>ConcernUsage</code> that is the <code>ownedConstraint</code> of this <code>FramedConcernMembership</code>.</p> - - - - - - - <p> The <code>ConcernUsage</code> that is referenced through this <code>FramedConcernMembership</code>. It is the <code>referencedConstraint</code> of the <code>FramedConcernMembership</code> considered as a <code>RequirementConstraintMembership</code>, which must be a <code>ConcernUsage</code>.</p> - - - - - - - - <p>A <code>SatisfyRequirementUsage</code> is an <code>AssertConstraintUsage</code> that asserts, by default, that a satisfied <code>RequirementUsage</code> is true for a specific <code>satisfyingFeature</code>, or, if <code>isNegated = true</code>, that the <code>RequirementUsage</code> is false. The satisfied <code>RequirementUsage</code> is related to the <code>SatisfyRequirementUsage</code> by a <code>ReferenceSubsetting</code> <code>Relationship</code>.</p> - - - - <p>The <code>satisfyingFeature</code> of a <code>SatisfyRequirementUsage</code> is the <code>Feature</code> to which the <code>subjectParameter</code> is bound.</p> + + + <p>A <code>RequirementUsage</code> must directly or indirectly specialize the base <code>RequirementUsage</code> <em><code>Requirements::requirementChecks</code></em> from the Systems Model Library.</p> - + OCL2.0 - satisfyingFeature = - let bindings: BindingConnector = ownedMember-> - selectByKind(BindingConnector)-> - select(b | b.relatedElement->includes(subjectParameter)) in - if bindings->isEmpty() or - bindings->first().relatedElement->exits(r | r <> subjectParameter) - then null - else bindings->first().relatedElement->any(r | r <> subjectParameter) - endif + specializesFromLibrary('Requirements::requirementChecks') - - - <p>A <code>SatisfyRequirementUsage</code> must have exactly one <code>ownedMember</code> that is a <code>BindingConnector</code> between its <code>subjectParameter</code> and some <code>Feature</code> other than the <code>subjectParameter</code>.</p> + + + <p>A composite <code>RequirementUsage</code> whose <code>owningType</code> is a <code>RequirementDefinition</code> or <code>RequirementUsage</code> must directly or indirectly specialize the <code>RequirementUsage</code> <em><code>Requirements::RequirementCheck::subrequirements</code></em> from the Systems Model Library.</p> - + OCL2.0 - ownedMember->selectByKind(BindingConnector)-> - select(b | - b.relatedElement->includes(subjectParameter) and - b.relatedElement->exists(r | r <> subjectParameter))-> - size() = 1 + isComposite and owningType <> null and + (owningType.oclIsKindOf(RequirementDefinition) or + owningType.oclIsKindOf(RequirementUsage)) implies + specializesFromLibrary('Requirements::RequirementCheck::subrequirements') - - - <p>If a <code>SatisfyRequirementUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of its <code>referencedFeature</code> must be a <code>RequirementUsage</code>.</p> + + + <p>A <code>RequirementUsage</code> whose <code>owningFeatureMembership</code> is a <code>ObjectiveMembership</code> must redefine the <code>objectiveRequirement</code> of each <code>CaseDefinition</code> or <code>CaseUsage</code> that is specialized by the <code>owningType</code> of the <code>RequirementUsage</code>.</p> - + OCL2.0 - referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(RequirementUsage) + owningfeatureMembership <> null and +owningfeatureMembership.oclIsKindOf(ObjectiveMembership) implies + owningType.ownedSpecialization.general->forAll(gen | + (gen.oclIsKindOf(CaseDefinition) implies + redefines(gen.oclAsType(CaseDefinition).objectiveRequirement)) and + (gen.oclIsKindOf(Feature) and + gen.oclAsType(Feature).featureTarget.oclIsKindOf(CaseUsage) implies + redefines(gen.oclAsType(Feature).featureTarget. + oclAsType(CaseUsage).objectiveRequirement)) - - - <p>If a <code>SatisfyRequirementUsage</code> is negated, then it must directly or indirectly specialize the <code>RequirementUsage</code> <em><code>Requirements::notSatisfiedRequirementChecks</code></em>. Otherwise, it must directly or indirectly specialize the <code>RequirementUsage</code> <em><code>Requirements::satisfiedRequirementChecks</code></em>.</p> + + + <p>A <code>RequirementUsage</code> whose <code>owningFeatureMembership</code> is a <code>RequirementVerificationMembership</code> must directly or indirectly specialize the <code>RequirementUsage</code> <code><em>VerificationCases::VerificationCase::obj::requirementVerifications</em></code>.</p> - + OCL2.0 - if isNegated then - specializesFromLibrary('Requirements::notSatisfiedRequirementChecks') -else - specializesFromLibrary('Requirements::satisfiedRequirementChecks') -endif + owningFeatureMembership <> null and +owningFeatureMembership.oclIsKindOf(RequirementVerificationMembership) implies + specializesFromLibrary('VerificationCases::VerificationCase::obj::requirementVerifications') - - - - - <p>The <code>RequirementUsage</code> that is satisfied by the <code>satisfyingSubject</code> of this <code>SatisfyRequirementUsage</code>. It is the <code>assertedConstraint</code> of the <code>SatisfyRequirementUsage</code> considered as an <code>AssertConstraintUsage</code>, which must be a <code>RequirementUsage</code>.</p> + + + + <p>The <code>RequirementDefinition</code> that is the single <code>definition</code> of this <code>RequirementUsage</code>.</p> - - + + - - - <p>The <code>Feature</code> that represents the actual subject that is asserted to satisfy the <code>satisfiedRequirement</code>. The <code>satisfyingFeature</code> is bound to the <code>subjectParameter</code> of the <code>SatisfyRequirementUsage</code>.</p> + + + <p>An optional modeler-specified identifier for this <code>RequirementUsage</code> (used, e.g., to link it to an original requirement text in some source document), which is the <code>declaredShortName</code> for the <code>RequirementUsage</code>.</p> - - + + + - - - - - - - - - - - <p>The ConcernUsages that are typed by a certain <code>concernDefinition</code>.</p> + + + <p>An optional textual statement of the requirement represented by this <code>RequirementUsage</code>, derived from the <code>bodies<code> of the <code>documentation</code> of the <code>RequirementUsage</code>.</p> - - - - - - - - <p>The RequirementUsages that have a certain Usage as their <code>subjectParameter</code>.</p> + + + + + + + <p>The owned <code>ConstraintUsages</code> that represent requirements of this <code>RequirementUsage</code>, which are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementUsage</code> with <code>kind</code> = <code>requirement</code>.</p> - - - - - - - - <p>The AddressedConcernMembership that has a certain ConcernUsage as its <code>addressedConcern</code>.</p> + + + + + + <p>The owned <code>ConstraintUsages</code> that represent assumptions of this <code>RequirementUsage</code>, derived as the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementUsage</code> with <code>kind</code> = <code>assumption</code>.</p> - - - - - - - - <p>The RequirementUsage that has a certain ConstraintUsage as an <cod>assumedConstraint</code> (if any).</p> + + + + + + <p>The <code>parameter</code> of this <code>RequirementUsage</code> that represents its subject.</p> - - - - - - - - <p>TheStakehplderMembership that has a certain PartUsage as its <code>ownedStakeholderParameter</code>.</p> + + + + + + <p>The <code>ConcernUsages</code> framed by this <code>RequirementUsage</code>, which are the <code>ownedConcerns</code> of all <code>FramedConcernMemberships</code> of the <code>RequirementUsage</code>.</p> - - - - - - - - <p>The SatifyRequirementUsages that have a certain RequirementUsage as their <tt>satisfiedRequirement</tt>.</p> + + + + + + <p>The <code>parameters</code> of this <code>RequirementUsage</code> that represent actors involved in the requirement.</p> - - - - - - - <p>A <code>ConcernUsage</code> is a <code>Usage</code> of a <code>ConcernDefinition</code>.</p> - - The <code>ownedStakeholder</code> features of the ConcernUsage shall all subset the <em><code>ConcernCheck::concernedStakeholders</code> </em>feature. If the ConcernUsage is an <code>ownedFeature</code> of a StakeholderDefinition or StakeholderUsage, then the ConcernUsage shall have an <code>ownedStakeholder</code> feature that is bound to the <em><code>self</code></em> feature of its owner.</p> - - - - - <p>A <code>ConcernUsage</code> must directly or indirectly specialize the base <code>ConcernUsage</code> <em><code>Requirements::concernChecks</code></em> from the Systems Model Library.</p> + + + + + + <p>The <code>parameters</code> of this <code>RequirementUsage</code> that represent stakeholders for the requirement.</p> - - OCL2.0 - specializesFromLibrary('Requirements::concernChecks') - - - - - <p>If a <code>ConcernUsage</code> is owned via a <code>FramedConcernMembership</code>, then it must directly or indirectly specialize the <code>ConcernUsage</code> <code><em>Requirements::RequirementCheck::concerns</em></code> from the Systems Model Library.</p> + + + + + + + + <p>The RequirementConstraintMembership that owns a certain ConstraintUsage as its <code>ownedConstraint</code>.</p> - - OCL2.0 - owningFeatureMembership <> null and -owningFeatureMembership.oclIsKindOf(FramedConcernMembership) implies - specializesFromLibrary('Requirements::RequirementCheck::concerns') - - - - - - <p>The ConcernDefinition that is the single type of this ConcernUsage.</p> + + + + + + + + <p>The RequirementUsage that has a certain ConstraintUsage as an <cod>assumedConstraint</code> (if any).</p> - - - + + + - - - - <p>The SatisfyRequirementUsages that have a certain Feature as their <tt>satisfyingFeature</tt>.</p> + + + + <p>The RequirementUsage that has a certain ConstraintUsage as a <code>requiredConstraint</code> (if any).</p> - - + + @@ -11910,945 +11320,933 @@ owningType.oclIsKindOf(RequirementUsage) - - - <p>A <code>RequirementConstraintKind</code> indicates whether a <code>ConstraintUsage</code> is an assumption or a requirement in a <code>RequirementDefinition</code> or <code>RequirementUsage</code>.</p> + + + <p>A <code>SubjectMembership</code> is a <code>ParameterMembership</code> that indicates that its <code>ownedSubjectParameter</code> is the subject of its <code>owningType</code>. The <code>owningType</code> of a <code>SubjectMembership</code> must be a <code>RequirementDefinition</code>, <code>RequirementUsage</code>, <code>CaseDefinition</code>, or <code>CaseUsage</code>.</p> - - - <p>Indicates that a member <code>ConstraintUsage</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage</code> represents an assumption.</p> + + + <p>The <code>owningType</code> of a <code>SubjectMembership</code> must be a <code>RequirementDefinition</code>, <code>RequirementUsage</code>, <code>CaseDefinition</code>, or <code>CaseUsage</code>.</p> - - - - <p>Indicates that a member <code>ConstraintUsage</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage</code>represents an requirement.</p> + + OCL2.0 + owningType.oclIsType(RequirementDefinition) or +owningType.oclIsType(RequiremenCaseRequirementDefinition) or +owningType.oclIsType(CaseDefinition) or +owningType.oclIsType(CaseUsage) + + + + + + + <p>The <code>Usage</code< that is the <code>ownedMemberParameter</code> of this <code>SubjectMembership</code>.</p> - + + + - - - - <p>The RequirementDefinition that has a certain ConstraintUsage as a <code>requiredConstraint</code> (if any).</p> + + + + <p>The RequirementUsages typed by a certain RequirementDefinition.</p> - - + + - - - <p>An <code>AttributeDefinition</code> is a <code>Definition</code> and a <code>DataType</code> of information about a quality or characteristic of a system or part of a system that has no independent identity other than its value. All <code>features</code> of an <code>AttributeDefinition</code> must be referential (non-composite).</p> - -<p>As a <code>DataType</code>, an <code>AttributeDefinition</code> must specialize, directly or indirectly, the base <code>DataType</code> <code><em>Base::DataValue</em></code> from the Kernel Semantic Library.</p> + + + + + + + + + <p>A <code>SatisfyRequirementUsage</code> is an <code>AssertConstraintUsage</code> that asserts, by default, that a satisfied <code>RequirementUsage</code> is true for a specific <code>satisfyingFeature</code>, or, if <code>isNegated = true</code>, that the <code>RequirementUsage</code> is false. The satisfied <code>RequirementUsage</code> is related to the <code>SatisfyRequirementUsage</code> by a <code>ReferenceSubsetting</code> <code>Relationship</code>.</p> - - - <p>All <code>features</code> of an <code>AttributeDefinition</code> must be non-composite.</p> + + + <p>The <code>satisfyingFeature</code> of a <code>SatisfyRequirementUsage</code> is the <code>Feature</code> to which the <code>subjectParameter</code> is bound.</p> - + OCL2.0 - feature->forAll(not isComposite) + satisfyingFeature = + let bindings: BindingConnector = ownedMember-> + selectByKind(BindingConnector)-> + select(b | b.relatedElement->includes(subjectParameter)) in + if bindings->isEmpty() or + not bindings->first().relatedElement->exits(r | r <> subjectParameter) + then null + else bindings->first().relatedElement->any(r | r <> subjectParameter) + endif - - - - - - - <p>The AttributeUsages that are typed by a certain DataType.</p> - - - - - - - - <p>An <code>AttributeUsage</code> is a <code>Usage</code> whose type is a <code>DataType</code>. Nominally, if the type is an <code>AttributeDefinition</code>, an <code>AttributeUsage</code> is a usage of a <code>AttributeDefinition</code> to represent the value of some system quality or characteristic. However, other kinds of kernel <code>DataTypes</code> are also allowed, to permit use of <code>DataTypes</code> from the Kernel Model Libraries. An <code>AttributeUsage</code> itself as well as all its nested <code>features</code> must be referential (non-composite).</p> - -<p>An <code>AttributeUsage</code> must specialize, directly or indirectly, the base <code>Feature</code> <code><em>Base::dataValues</em></code> from the Kernel Semantic Library.</p> - - - - <p>An <code>AttributeUsage</code> is always referential.</p> + + + <p>A <code>SatisfyRequirementUsage</code> must have exactly one <code>ownedMember</code> that is a <code>BindingConnector</code> between its <code>subjectParameter</code> and some <code>Feature</code> other than the <code>subjectParameter</code>.</p> - + OCL2.0 - isReference + ownedMember->selectByKind(BindingConnector)-> + select(b | + b.relatedElement->includes(subjectParameter) and + b.relatedElement->exists(r | r <> subjectParameter))-> + size() = 1 - - - <p>All <code>features</code> of an <code>AttributeUsage</code> must be non-composite.</p> + + + <p>If a <code>SatisfyRequirementUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of its <code>referencedFeature</code> must be a <code>RequirementUsage</code>.</p> - + OCL2.0 - feature->forAll(not isComposite) + referencedFeatureTarget() <> null implies + referencedFeatureTarget().oclIsKindOf(RequirementUsage) - - - <p>An <code>AttributeUsage</code> must directly or indirectly specialize <code><em>Base::dataValues</em></code> from the Kernel Semantic Library.</p> + + + <p>If a <code>SatisfyRequirementUsage</code> is negated, then it must directly or indirectly specialize the <code>RequirementUsage</code> <em><code>Requirements::notSatisfiedRequirementChecks</code></em>. Otherwise, it must directly or indirectly specialize the <code>RequirementUsage</code> <em><code>Requirements::satisfiedRequirementChecks</code></em>.</p> - + OCL2.0 - specializesFromLibrary('Base::dataValues') + if isNegated then + specializesFromLibrary('Requirements::notSatisfiedRequirementChecks') +else + specializesFromLibrary('Requirements::satisfiedRequirementChecks') +endif - - - - <p>The <code>DataTypes</code> that are the types of this <code>AttributeUsage</code>. Nominally, these are <code>AttributeDefinitions</code>, but other kinds of kernel <code>DataTypes</code> are also allowed, to permit use of <code>DataTypes</code> from the Kernel Model Libraries.</p> + + + + + <p>The <code>RequirementUsage</code> that is satisfied by the <code>satisfyingSubject</code> of this <code>SatisfyRequirementUsage</code>. It is the <code>assertedConstraint</code> of the <code>SatisfyRequirementUsage</code> considered as an <code>AssertConstraintUsage</code>, which must be a <code>RequirementUsage</code>.</p> - - + + - - - <p>Always true for an <code>AttributeUsage</code>.</p> + + + <p>The <code>Feature</code> that represents the actual subject that is asserted to satisfy the <code>satisfiedRequirement</code>. The <code>satisfyingFeature</code> is bound to the <code>subjectParameter</code> of the <code>SatisfyRequirementUsage</code>.</p> - - + + - - - - <p>The ViewDefinition that owns a certain <code>viewCondition</code>.</p> - - - - - - - - - <p>The ViewpointDefinition that has a certain <code>viewpointStakeholder</code>.</p> - - - - - - - - - <p>The ViewpointUsage that has a certain <code>viewpointStakeholder</code>.</p> - - - - - - - - - p>The ViewUsage that owns a certain <code>satisfiedViewpoint</code>.</p> + + + + <p>The ConcernUsages that are typed by a certain <code>concernDefinition</code>.</p> - - + + - - - - <p>The ViewDefinition that owns a certain <code>rendering</code>.</p> + + + <p>A <code>ConcernDefinition</code> is a <code>RequirementDefinition</code> that one or more stakeholders may be interested in having addressed. These stakeholders are identified by the <code>ownedStakeholders</code>of the <code>ConcernDefinition</code>.</p> + + + + + <p>A <code>ConcernDefinition</code> must directly or indirectly specialize the base <code>ConcernDefinition</code> <em><code>Requirements::ConcernCheck</code></em> from the Systems Model Library.</p> - - - + + OCL2.0 + specializesFromLibrary('Requirements::ConcernCheck') + + + - - - - <p>The ViewDefinitions that feature a certain ViewUsage.</p> + + + + <p>TheStakehplderMembership that has a certain PartUsage as its <code>ownedStakeholderParameter</code>.</p> - - + + - - - - <p>A <code>ViewpointDefinition</code> is a <code>RequirementDefinition</code> that specifies one or more stakeholder concerns that are to be satisfied by creating a view of a model.</p> + + + + <p>A <code>ConcernUsage</code> is a <code>Usage</code> of a <code>ConcernDefinition</code>.</p> + + The <code>ownedStakeholder</code> features of the ConcernUsage shall all subset the <em><code>ConcernCheck::concernedStakeholders</code> </em>feature. If the ConcernUsage is an <code>ownedFeature</code> of a StakeholderDefinition or StakeholderUsage, then the ConcernUsage shall have an <code>ownedStakeholder</code> feature that is bound to the <em><code>self</code></em> feature of its owner.</p> + - - - <p>The <code>viewpointStakeholders</code> of a <code>ViewpointDefinition</code> are the <code>ownedStakeholderParameters</code> of all <code>featureMemberships</code> that are <code>StakeholderMemberships</code>.</p> + + + <p>A <code>ConcernUsage</code> must directly or indirectly specialize the base <code>ConcernUsage</code> <em><code>Requirements::concernChecks</code></em> from the Systems Model Library.</p> - + OCL2.0 - viewpointStakeholder = framedConcern.featureMemberhsip-> - selectByKind(StakeholderMembership). - ownedStakeholderParameter + specializesFromLibrary('Requirements::concernChecks') - - - <p>A <code>ViewpointDefinition</code> must directly or indirectly specialize the base <code>ViewpointDefinition</code> <code><em>Views::Viewpoint</em></code> from the Systems Model Library.</p> + + + <p>If a <code>ConcernUsage</code> is owned via a <code>FramedConcernMembership</code>, then it must directly or indirectly specialize the <code>ConcernUsage</code> <code><em>Requirements::RequirementCheck::concerns</em></code> from the Systems Model Library.</p> - + OCL2.0 - specializesFromLibrary('Views::Viewpoint') + owningFeatureMembership <> null and +owningFeatureMembership.oclIsKindOf(FramedConcernMembership) implies + specializesFromLibrary('Requirements::RequirementCheck::concerns') - - - - <p>The <code>PartUsages</code> that identify the stakeholders with concerns framed by this <code>ViewpointDefinition</code>, which are the owned and inherited <code>stakeholderParameters</code> of the <code>framedConcerns</code> of this <code>ViewpointDefinition</code>.</p> + + + + <p>The ConcernDefinition that is the single type of this ConcernUsage.</p> - - + + - - - - <p>The ViewUsage that owns a certain <code>rendering</code>.</p> + + + + <p>The SubjectMembership that owns a particular Parameter as its <code>ownedSubjectParameter</code>.</p> - - + + - - - - + + + + <p>The RequirementDefinition that addresses a certain <code>addressedConcern</code>.</p> + + + - - - - <p>The ViewDefinition that owns a certain <code>satisfiedViewpoint</code>.</p> - - - + + + + - - - <p>A <code>MembershipExpose</code> is an <code>Expose</code> <code.Relationship</code> that exposes a specific <code>importedMembership</code> and, if <code>isRecursive = true</code>, additional <code>Memberships</code> recursively.</p> - - - + + + + <p>The RequirementUsage that addresses a certain <code>addressedConcern</code>.</p> + + + + - - - <p>A <code>ViewUsage</code> is a usage of a <code>ViewDefinition</code> to specify the generation of a view of the <code>members</code> of a collection of <code>exposedNamespaces</code>. The <code>ViewUsage</code> can satisfy more <code>viewpoints</code> than its definition, and it can specialize the <code>viewRendering</code> specified by its definition.<p> + + + <p>A <code>RequirementDefinition</code> is a <code>ConstraintDefinition</code> that defines a requirement used in the context of a specification as a constraint that a valid solution must satisfy. The specification is relative to a specified subject, possibly in collaboration with one or more external actors.</p> - - - <p>The <code>exposedElements</code> of a <code>ViewUsage</code> are those <code>memberElements</code> of the imported <code>Memberships</code> from all the <code>Expose</code> <code>Relationships</code> for which the <code>includeAsExposed</code> operation returns true.</p> + + + <p>The <code>texts</code> of a<code>RequirementDefinition</code> are the <code>bodies</code> of the <code>documentation</code> of the <code>RequirementDefinition</code>.</p> - + OCL2.0 - exposedElement = ownedImport->selectByKind(Expose). - importedMemberships(Set{}).memberElement-> - select(elm | includeAsExposed(elm))-> - asOrderedSet() + text = documentation.body - - - <p>The <code>satisfiedViewpoints</code> of a <code>ViewUsage</code> are its <code>ownedRequirements</code> that are composite <code>ViewpointUsages</code>. + + + <p>The <code>assumedConstraints</code> of a <code>RequirementDefinition</code> are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind = assumption</code>.</p> - + OCL2.0 - satisfiedViewpoint = ownedRequirement-> - selectByKind(ViewpointUsage)-> - select(isComposite) + assumedConstraint = ownedFeatureMembership-> + selectByKind(RequirementConstraintMembership)-> + select(kind = RequirementConstraintKind::assumption). + ownedConstraint - - - <p>The <code>viewConditions</code> of a <code>ViewUsage</code> are the <code>conditions</code> of its owned <code>ElementFilterMemberships</code>.</p> + + + <p>The <code>requiredConstraints</code> of a <code>RequirementDefinition</code> are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind = requirement</code>.</p> - + OCL2.0 - viewCondition = ownedMembership-> - selectByKind(ElementFilterMembership). - condition + requiredConstraint = ownedFeatureMembership-> + selectByKind(RequirementConstraintMembership)-> + select(kind = RequirementConstraintKind::requirement). + ownedConstraint - - - <p>The <code>viewRendering</code> of a <code>ViewUsage</code> is the <code>referencedRendering</code> of its owned <code>ViewRenderingMembership<code>, if any.</p> + + + <p>The <code>subjectParameter</code> of a <code>RequirementDefinition</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p> - + OCL2.0 - viewRendering = - let renderings: OrderedSet(ViewRenderingMembership) = - featureMembership->selectByKind(ViewRenderingMembership) in - if renderings->isEmpty() then null - else renderings->first().referencedRendering + subjectParameter = + let subjects : OrderedSet(SubjectMembership) = + featureMembership->selectByKind(SubjectMembership) in + if subjects->isEmpty() then null + else subjects->first().ownedSubjectParameter endif - - - <p>A <code>ViewUsage</code> must have at most one <code>ViewRenderingMembership</code>.</p> + + + <p>The <code>framedConcerns</code> of a <code>RequirementDefinition</code> are the <code>ownedConcerns</code> of the <code>FramedConcernMemberships</code> of the <code>RequirementDefinition</code>.</p> - + OCL2.0 - featureMembership-> - selectByKind(ViewRenderingMembership)-> + framedConcern = featureMembership-> + selectByKind(FramedConcernMembership). + ownedConcern + + + + + <p>The <code>actorParameters</code> of a <code>RequirementDefinition</code> are the <code>ownedActorParameters</code> of the <code>ActorMemberships</code> of the <code>RequirementDefinition</code>.</p> + + + OCL2.0 + actorParameter = featureMembership-> + selectByKind(ActorMembership). + ownedActorParameter + + + + + <p>The <code>stakeHolderParameters</code> of a <code>RequirementDefinition</code> are the <code>ownedStakeholderParameters</code> of the <code>StakeholderMemberships</code> of the <code>RequirementDefinition</code>.</p> + + + OCL2.0 + stakeholderParameter = featureMembership-> + selectByKind(StakholderMembership). + ownedStakeholderParameter + + + + + <p>A <code>RequirementDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> + + + OCL2.0 + featureMembership-> + selectByKind(SubjectMembership)-> size() <= 1 - - - <p>A <code>ViewUsage</code> must directly or indirectly specialize the base <code>ViewUsage</code> <code><em>Views::views</em></code> from the Systems Model Library.</p> + + + <p>The <code>subjectParameter</code> of a <code>RequirementDefinition</code> must be its first <code>input</code>.</p> - + OCL2.0 - specializesFromLibrary('Views::views') + input->notEmpty() and input->first() = subjectParameter - - - <p>A <code>ViewUsage</code> whose <code>owningType</code> is a <code>ViewDefinition</code> or <code>ViewUsage</code> must specialize the <code>ViewUsage</code> <code><em>Views::View::subviews</em></code> from the Systems Library Model.</p> + + + <p>A <code>RequirementDefinition</code> must directly or indirectly specialize the base <code>RequirementDefinition</code> <code><em>Requirements::RequirementCheck</em></code> from the Systems Model Library.</p> - + OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(ViewDefinition) or - owningType.oclIsKindOf(ViewUsage)) implies - specializesFromLibrary('Views::View::subviews') + specializesFromLibrary('Requirements::RequirementCheck') - - - - <p>The <code>ViewDefinition</code> that is the <code>definition</code> of this <code>ViewUsage</code>.</p> + + + + <p>An optional modeler-specified identifier for this <code>RequirementDefinition</code> (used, e.g., to link it to an original requirement text in some source document), which is the <code>declaredShortName</code> for the <code>RequirementDefinition</code>.</p> + + + + + + + + <p>An optional textual statement of the requirement represented by this <code>RequirementDefinition</code>, derived from the <code>bodies</code> of the <code>documentation</code> of the <code>RequirementDefinition</code>.</p> + + + + + + + + + <p>The <code>parameter</code> of this <code>RequirementDefinition</code> that represents its subject.</p> + + + + + + + <p>The <code>parameters</code> of this <code>RequirementDefinition</code> that represent actors involved in the requirement.</p> - - + + - - - <p>The <code>nestedRequirements</code> of this <code>ViewUsage</code> that are <code>ViewpointUsages</code> for (additional) viewpoints satisfied by the <code>ViewUsage</code>.</p> + + + <p>The <code>parameters</code> of this <code>RequirementDefinition</code> that represent stakeholders for the requirement.</p> - - + + - - - <p>The <code>Elements</code> that are exposed by this <code>ViewUsage</code>, which are those <code>memberElements</code> of the imported <code>Memberships</code> from all the <code>Expose</code> <code>Relationships</code> that meet all the owned and inherited <code>viewConditions</code>.</p> + + + <p>The owned <code>ConstraintUsages</code> that represent assumptions of this <code>RequirementDefinition</code>, which are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind = assumption</code>.</p> - - + + - - - <p>The <code>RenderingUsage</code> to be used to render views defined by this <code>ViewUsage</code>, which is the <code>referencedRendering</code> of the <code>ViewRenderingMembership</code> of the <code>ViewUsage</code>.<p> + + + <p>The owned <code>ConstraintUsages</code> that represent requirements of this <code>RequirementDefinition</code>, derived as the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind</code> = <code>requirement</code>.</p> - - + + - - - <p>The <code>Expressions</code> related to this <code>ViewUsage</code> by <code>ElementFilterMemberships</code>, which specify conditions on <code>Elements</code> to be rendered in a view.</p> + + + <p>The <code>ConcernUsages</code> framed by this <code>RequirementDefinition</code>, which are the <code>ownedConcerns</code> of all <code>FramedConcernMemberships</code> of the <code>RequirementDefinition</code>.</p> - - + + - - - <p>Determine whether the given <code>element</code> meets all the owned and inherited <code>viewConditions</code>.</p> - - - - OCL2.0 - let metadataFeatures: Sequence(AnnotatingElement) = - element.ownedAnnotation.annotatingElement-> - select(oclIsKindOf(MetadataFeature)) in -self.membership->selectByKind(ElementFilterMembership). - condition->forAll(cond | - metadataFeatures->exists(elem | - cond.checkCondition(elem))) - - - - - - - - - - <p>A <code>RenderingDefinition</code> is a <code>PartDefinition</code> that defines a specific rendering of the content of a model view (e.g., symbols, style, layout, etc.).</p> + + + <p>A <code>StakeholderMembership</code> is a <code>ParameterMembership</code> that identifies a <code>PartUsage</code> as a <code>stakeholderParameter</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage</code>, which specifies a role played by an entity with concerns framed by the <code>owningType</code>.</p> - - - <p>The <code>renderings</code> of a <code>RenderingDefinition</code> are all its <code>usages</code> that are <code>RenderingUsages</code>.</p> - - - OCL2.0 - rendering = usages->selectByKind(RenderingUsage) - - - - - <p>A <code>RenderingDefinition</code> must directly or indirectly specialize the base <code>RenderingDefinition</code> <code><em>Views::Rendering</em></code> from the Systems Model Library.</p> + + + <p>The <code>owningType</code> of a <code>StakeholderMembership</code> must be a <code>RequirementDefinition</code> or <code>RequirementUsage</code>.</p> - + OCL2.0 - specializesFromLibrary('Views::Rendering') + owningType.oclIsKindOf(RequirementUsage) or +owningType.oclIsKindOf(RequirementDefinition) - - - - <p>The <code>usages</code> of a <code>RenderingDefinition</code> that are <code>RenderingUsages</code>.</p> + + + + <p>The <code>PartUsage</code> specifying the stakeholder.</p> - - + + - - - <p>A <code>RenderingUsage</code> is the usage of a <code>RenderingDefinition</code> to specify the rendering of a specific model view to produce a physical view artifact.</p> - - + + + + <p>The ActorMembership that has a certain PartUsage as its <code>ownedActorParameter</code>.</p> + + + + + + + + + <p>The SatifyRequirementUsages that have a certain RequirementUsage as their <tt>satisfiedRequirement</tt>.</p> + + + + + + + + + <p>The RequirementConstraintMembership that has a certain ConstraintUsage as its <code>referencedConstraint</code>.</p> + + + + + + + + + <p>The AddressedConcernMembership that owns a certain ConcernUsage as its <code>ownedConcern</code>.</p> + + + + + + + + + <p>The AddressedConcernMembership that has a certain ConcernUsage as its <code>addressedConcern</code>.</p> + + + + + + + + <p>A <code>FramedConcernMembership</code> is a <code>RequirementConstraintMembership</code> for a framed <code>ConcernUsage</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage</code>.</p> - - - <p>A <code>RenderingUsage</code> must directly or indirectly specialize the base <code>RenderingUsage</code> <code><em>Views::renderings</em></code> from the Systems Model Library.</p> + + + <p>A <code>FramedConcernMembership</code> must have <code>kind = requirement</code>.</p> - + OCL2.0 - specializesFromLibrary('Views::renderings') + kind = RequirementConstraintKind::requirement - - - <p>A <code>RenderingUsage</code> whose <code>owningType</code> is a <code>RenderingDefinition</code> or <code>RenderingUsage</code> must directly or indirectly specialize the <code>RenderingUsage</code> <code><em>Views::Rendering::subrenderings</em></code> from the Systems Model Library.</p> + + + + <p>The <code>kind</code> of an <code>FramedConcernMembership</code> must be <code>requirement</code>.</p> - - OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(RenderingDefinition) or - owningType.oclIsKindOf(RenderingUsage)) implies - specializesFromLibrary('Views::Rendering::subrenderings') - - - - - <p>A <code>RenderingUsage</code> whose <code>owningFeatureMembership</code> is a <code>ViewRenderingMembership</code> must redefine the <code>RenderingUsage</code> <code><em>Views::View::viewRendering</em></code>.</p> + + + + + <p>The <code>ConcernUsage</code> that is the <code>ownedConstraint</code> of this <code>FramedConcernMembership</code>.</p> - - OCL2.0 - owningFeatureMembership <> null and -owningFeatureMembership.oclIsKindOf(ViewRenderingMembership) implies - redefinesFromLibrary('Views::View::viewRendering') - - - - - - <p>The <code>RenderingDefinition</code> that is the <code>definition</code> of this <code>RenderingUsage</code>.</p> + + + + + + <p> The <code>ConcernUsage</code> that is referenced through this <code>FramedConcernMembership</code>. It is the <code>referencedConstraint</code> of the <code>FramedConcernMembership</code> considered as a <code>RequirementConstraintMembership</code>, which must be a <code>ConcernUsage</code>.</p> - - + + - - - <p>An <code>Expose</code> is an <code>Import</code> of <code>Memberships</code> into a <code>ViewUsage</code> that provide the <code>Elements</code> to be included in a view. Visibility is always ignored for an <code>Expose</code> (i.e., <code>isImportAll = true</code>).</p> + + + + <p>The RequirementUsages that have a certain Usage as their <code>subjectParameter</code>.</p> + + + + + + + + + <p>The RequirementDefinitions that have a certain PartUsage as an <code>actorParameter</code>.</p> + + + + + + + + <p>An <code>OccurrenceUsage</code> is a <code>Usage</code> whose <code>types</code> are all <code>Classes</code>. Nominally, if a <code>type</code> is an <code>OccurrenceDefinition</code>, an <code>OccurrenceUsage</code> is a <code>Usage</code> of that <code>OccurrenceDefinition</code> within a system. However, other types of Kernel <code>Classes</code> are also allowed, to permit use of <code>Classes</code> from the Kernel Model Libraries.</p> + - - - <p>An <code>Expose</code> always imports all <code>Elements</code>, regardless of visibility.</p> + + + <p>The <code>individualDefinition</code> of an <code>OccurrenceUsage</code> is the <code>occurrenceDefinition</code> that is an <code>OccurrenceDefinition</code> with <code>isIndividual = true</code>, if any.</p> - + + OCL2.0 + individualDefinition = + let individualDefinitions : OrderedSet(OccurrenceDefinition) = + occurrenceDefinition-> + selectByKind(OccurrenceDefinition)-> + select(isIndividual) in + if individualDefinitions->isEmpty() then null + else individualDefinitions->first() endif + + + + + <p>If an <code>OccurrenceUsage</code> has <code>isIndividual = true</code>, then it must have an <code>individualDefinition</code>.</p> + + OCL2.0 - isImportAll + isIndividual implies individualDefinition <> null - - - <p>The <code>importOwningNamespace</code> of an <code>Expose</code> must be a <code>ViewUsage</code>.</p> + + + <p>An <code>OccurrenceUsage</code> must directly or indirectly specialize <code><em>Occurrences::occurrences</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - importOwningNamespace.oclIsType(ViewUsage) + specializesFromLibrary('Occurrences::occurrences') - - - <p>An <code>Expose</code> always has <code>protected</code> visibility.</p> + + + <p>A composite <code>OccurrenceUsage</code>, whose <code>ownedType</code> is a <code>Class</code>, another <code>OccurrenceUsage</code>, or any kind of <code>Feature</code> typed by a <code>Class</code>, must directly or indirectly specialize <em><code>Occurrences::Occurrence::suboccurrences</code></em>. - + OCL2.0 - visibility = VisibilityKind::protected + isComposite and +owningType <> null and +(owningType.oclIsKindOf(Class) or + owningType.oclIsKindOf(OccurrenceUsage) or + owningType.oclIsKindOf(Feature) and + owningType.oclAsType(Feature).type-> + exists(oclIsKind(Class))) implies + specializesFromLibrary('Occurrences::Occurrence::suboccurrences') - - - - <p>An <code>Expose</code> always has <code>protected</code> visibility.</p> - - - - - - <p>An <code>Expose</code> always imports all <code>Elements</code>, regardless of visibility (<code>isImportAll = true</code>).</p> - - - - - - - - - <p>A ViewUsage exposing a certain <code>exposedElement</code>.</p> - - - - - - - - <p>A <code>NamespaceExpose</code> is an <code>Expose</code> <code>Relationship</code> that exposes the <code>Memberships</code> of a specific <code>importedNamespace</code> and, if <code>isRecursive = true</code>, additional <code>Memberships</code> recursively.</p> - - - - - - - - - - - - - - <p>The RenderingDefinitions that feature a certain <code>rendering</code>.</p> - - - - - - - - <p>A <code>ViewRenderingMembership</code> is a <coed>FeatureMembership</code> that identifies the <code>viewRendering</code> of a <code>ViewDefinition</code> or <code>ViewUsage</code>.</p> - - - - <p>The <code>referencedRendering</code> of a <code>ViewRenderingMembership</code> is the the <code>featureTarget</code> of the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code> (which must be a <code>RenderingUsage</code>) of the <code>ownedRendering</code>, if there is one, and, otherwise, the <code>ownedRendering</code> itself.</p> + + + <p>An <code>OccurrenceUsage</code> must have at most one <code>occurrenceDefinition</code> with <code>isIndividual = true</code>.</p> - + OCL2.0 - referencedRendering = - let referencedFeature : Feature = - ownedRendering.referencedFeatureTarget() in - if referencedFeature = null then ownedRendering - else if referencedFeature.oclIsKindOf(RenderingUsage) then - refrencedFeature.oclAsType(RenderingUsage) - else null - endif endif + occurrenceDefinition-> + selectByKind(OccurrenceDefinition)-> + select(isIndividual).size() <= 1 - - - <p>The <code>owningType</code> of a <code>ViewRenderingMembership</code> must be a <code>ViewDefinition</code> or a <code>ViewUsage</code>.</p> + + + <p>If an <code>OccurrenceUsage</code> has <code>portionKind = snapshot</code>, then it must directly or indirectly specialize <em><code>Occurrences::Occurrence::snapshots</code></em> from the Kernel Semantic Library.</p> - + OCL2.0 - owningType.oclIsKindOf(ViewDefinition) or -owningType.oclIsKindOf(ViewUsage) + portionKind = PortionKind::snapshot implies + specializesFromLibrary('Occurrences::Occurrence::snapshots') - - - - <p>The owned <code>RenderingUsage</code> that is either itself the <code>referencedRendering</code> or subsets the <code>referencedRendering</code>. - - - - - - - <p> The <code>RenderingUsage</code> that is referenced through this <code>ViewRenderingMembership</code>. It is the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code> for the <code>ownedRendering</code>, if there is one, and, otherwise, the <code>ownedRendering</code> itself.</p> - - - - - - - - <p>A <code>ViewpointUsage</code> is a <code>Usage</code> of a <code>ViewpointDefinition</code>.</p> - - - - - - <p>The <code>viewpointStakeholders</code> of a <code>ViewpointUsage</code> are the <code>ownedStakeholderParameters</code> of all <code>featureMemberships</code> that are <code>StakeholderMemberships</code>.</p> + + + <p>If an <code>OccurrenceUsage</code> has <code>portionKind = timeslice</code>, then it must directly or indirectly specialize <em><code>Occurrences::Occurrence::timeSlices</code></em> from the Kernel Semantic Library.</p> - + OCL2.0 - viewpointStakeholder = framedConcern.featureMemberhsip-> - selectByKind(StakeholderMembership). - ownedStakeholderParameter + portionKind = PortionKind::timeslice implies + specializesFromLibrary('Occurrences::Occurrence::timeSlices') - - - <p>A <code>ViewpointUsage</code> must directly or indirectly specialize the base <code>ViewpointUsage</code> <code><em>Views::viewpoints</em></code> from the Systems Model Library.</p> + + + <p>If an <code>OccurrenceUsage</code> has a non-null <code>portionKind</code>, then its <code>owningType</code> must be an <code>OccurrenceDefinition</code> or an <code>OccurrenceUsage</code>.</p> - + OCL2.0 - specializesFromLibrary('Views::viewpoints') + portionKind <> null implies + owningType <> null and + (owningType.oclIsKindOf(OccurrenceDefinition) or + owningType.oclIsKindOf(OccurrenceUsage)) - - - <p>A composite <code>ViewpointUsage</code> whose <code>owningType</code> is a <code>ViewDefinition</code> or <code>ViewUsage</code> must directly or indirectly specialize the <code>ViewpointUsage</code> <code><em>Views::View::viewpointSatisfactions</em></code> from the Systems Model Library.</p> + + + <p>If an <code>OccurrenceUsage</code> has a non-null <code>portionKind</code>, then it must have <code>isPortion = true</code>.</p> - + OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(ViewDefinition) or - owningType.oclIsKindOf(ViewUsage)) implies - specializesFromLibrary('Views::View::viewpointSatisfactions') + portionKind <> null implies isPortion - - - - <p>The <code>ViewpointDefinition</code> that is the <code>definition</code> of this <code>ViewpointUsage<code>.</p> + + + + <p>The <code>Classes</code> that are the types of this <code>OccurrenceUsage</code>. Nominally, these are <code>OccurrenceDefinitions</code>, but other kinds of kernel <code>Classes</code> are also allowed, to permit use of <code>Classes</code> from the Kernel Model Libraries.</p> - - + + - - - <p>The <code>PartUsages</code> that identify the stakeholders with concerns framed by this <code>ViewpointUsage</code>, which are the owned and inherited <code>stakeholderParameters</code> of the <code>framedConcerns</code> of this <code>ViewpointUsage</code>.</p> + + + <p>The at most one <code>occurrenceDefinition</code> that has <code>isIndividual = true</code>.</p> - - + + + + + + <p>Whether this <code>OccurrenceUsage</code> represents the usage of the specific individual represented by its <code>individualDefinition</code>.</p> + + + + + + + <p>The kind of temporal portion (time slice or snapshot) is represented by this <code>OccurrenceUsage</code>. If <code>portionKind</code> is not null, then the <code>owningType</code> of the <code>OccurrenceUsage</code> must be non-null, and the <code>OccurrenceUsage</code> represents portions of the featuring instance of the <code>owningType</code>.</p> + + + - - - <p>A <code>ViewDefinition</code> is a <code>PartDefinition</code> that specifies how a view artifact is constructed to satisfy a <code>viewpoint</code>. It specifies a <code>viewConditions</code> to define the model content to be presented and a <code>viewRendering</code> to define how the model content is presented.</p> + + + + <p>The EventOccurrenceUsages that reference a certain <code>eventOccurrence</code>.</p> + + + + + + + + <p><code>PortionKind</code> is an enumeration of the specific kinds of <code><em>Occurrence</em></code> portions that can be represented by an <code>OccurrenceUsage</code>.</p> - - - <p>The <code>views</code> of a <code>ViewDefinition</code> are all its <code>usages</code> that are <code>ViewUsages</code>.</p> + + + <p>A time slice of an <code>Occurrence</code> (a portion over time).</p> - - OCL2.0 - view = usage->selectByKind(ViewUsage) - - - - - <p>The <code>satisfiedViewpoints</code> of a <code>ViewDefinition</code> are its <code>ownedRequirements</code> that are composite <code>ViewpointUsages</code>. + + + + <p>A snapshot of an <code>Occurrence</code> (a time slice with zero duration).</p> - - OCL2.0 - satisfiedViewpoint = ownedRequirement-> - selectByKind(ViewpointUsage)-> - select(isComposite) - - - - - <p>The <code>viewRendering</code> of a <code>ViewDefinition</code> is the <code>referencedRendering</code> of its owned <code>ViewRenderingMembership<code>, if any.</p> + + + + + <p>An <code>EventOccurrenceUsage</code> is an <code>OccurrenceUsage</code> that represents another <code>OccurrenceUsage</code> occurring as a <code><em>suboccurrence</em></code> of the containing occurrence of the <code>EventOccurrenceUsage</code>. Unless it is the <code>EventOccurrenceUsage</code> itself, the referenced <code>OccurrenceUsage</code> is related to the <code>EventOccurrenceUsage</code> by a <code>ReferenceSubsetting</code> <code>Relationship</code>.</p> + +<p>If the <code>EventOccurrenceUsage</code> is owned by an <code>OccurrenceDefinition</code> or <code>OccurrenceUsage</code>, then it also subsets the <em><code>timeEnclosedOccurrences</code></em> property of the <code>Class</code> <em><code>Occurrence</code></em> from the Kernel Semantic Library model <em><code>Occurrences</code></em>.</p> + + + + <p>If an <code>EventOccurrenceUsage</code> has no <code>ownedReferenceSubsetting</code>, then its <code>eventOccurrence</code> is the <code>EventOccurrenceUsage</code> itself. Otherwise, the <code>eventOccurrence</code> is the <code>featureTarget</code> of the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code> (which must be an <code>OccurrenceUsage</code>).</p> - + OCL2.0 - viewRendering = - let renderings: OrderedSet(ViewRenderingMembership) = - featureMembership->selectByKind(ViewRenderingMembership) in - if renderings->isEmpty() then null - else renderings->first().referencedRendering - endif + eventOccurrence = + if referencedFeatureTarget() = null then self + else if referencedFeatureTarget().oclIsKindOf(OccurrenceUsage) then + referencedFeatureTarget().oclAsType(OccurrenceUsage) + else null + endif endif - - - <p>The <code>viewConditions</code> of a <code>ViewDefinition</code> are the <code>conditions</code> of its owned <code>ElementFilterMemberships</code>.</p> + + + <p>If an <code>EventOccurrenceUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of the <code>referencedFeature</code> must be an <code>OccurrenceUsage</code>.</p> - + OCL2.0 - viewCondition = ownedMembership-> - selectByKind(ElementFilterMembership). - condition + referencedFeatureTarget() <> null implies + referencedFeatureTarget().oclIsKindOf(OccurrenceUsage) - - - <p>A <code>ViewDefinition</code> must have at most one <code>ViewRenderingMembership</code>.</p> + + + <p>If an <code>EventOccurrenceUsage</code> has an <code>owningType</code> that is an <code>OccurrenceDefinition</code> or <code>OccurrenceUsage</code>, then it must directly or indirectly specialize the <code>Feature</code> <code><em>Occurrences::Occurrence::timeEnclosedOccurrences</em></code>.</p> - + OCL2.0 - featureMembership-> - selectByKind(ViewRenderingMembership)-> - size() <= 1 + owningType <> null and +(owningType.oclIsKindOf(OccurrenceDefinition) or + owningType.oclIsKindOf(OccurrenceUsage)) implies + specializesFromLibrary('Occurrences::Occurrence::timeEnclosedOccurrences') - - - </p>A <code>ViewDefinition</code> must directly or indirectly specialize the base <code>ViewDefinition</code> <code><em>Views::View</em></code> from the Systems Model Library.</p> + + + <p>An <code>EventOccurrenceUsage</code> must be referential.</p> - + OCL2.0 - specializesFromLibrary('Views::View') + isReference - - - - <p>The <code>usages</code> of this <code>ViewDefinition</code> that are <code>ViewUsages</code>.</p> + + + + <p>The <code>OccurrenceUsage</code> referenced as an event by this <code>EventOccurrenceUsage</code>. It is the <code>referenceFeature</code> of the <code>ownedReferenceSubsetting</code> for the <code>EventOccurrenceUsage</code>, if there is one, and, otherwise, the <code>EventOccurrenceUsage</code> itself.</p> - - + + - - - <p>The composite <code>ownedRequirements</code> of this <code>ViewDefinition</code> that are <code>ViewpointUsages</code> for viewpoints satisfied by the <code>ViewDefinition</code>.</p> + + + <p>Always true for an <code>EventOccurrenceUsage</code>.</p> - - + + - - - <p>The <code>RenderingUsage</code> to be used to render views defined by this <code>ViewDefinition</code>, which is the <code>referencedRendering</code> of the <code>ViewRenderingMembership</code> of the <code>ViewDefinition</code>.<p> + + + + + <p>The <code>OccurrenceUsage</code> that has a certain <code>individualDefinition</code>.</p> - - - - - - <p>The <code>Expressions</code> related to this <code>ViewDefinition</code> by <code>ElementFilterMemberships</code>, which specify conditions on <code>Elements</code> to be rendered in a view.</p> + + + + + + + <p>An <code>OccurrenceDefinition</code> is a <code>Definition</code> of a <code>Class</code> of individuals that have an independent life over time and potentially an extent over space. This includes both structural things and behaviors that act on such structures. If <code>isIndividual</code> is true, then the <code>OccurrenceDefinition</code> is constrained to have (at most) a single instance that is the entire life of a single individual.</p> + + + + <p>An <code>OccurrenceDefinition</code> with <code>isIndividual = true</code> must directly or indirectly specialize <em><code>Occurrences::Life</code></em> from the Kernel Semantic Library.</p> - - + + OCL2.0 + isIndividual implies specializesFromLibrary('Occurrences::Life') + + + + + <p>An <code>OccurrenceDefinition</code> with <code>isIndividual = true</code> must have a <code>multiplicity</code> that specializes <em><code>Base::zeroOrOne</code></em> from the Kernel Semantic Library.</p> + + + OCL2.0 + isIndividual implies + multiplicity <> null and + multiplicity.specializesFromLibrary('Base::zeroOrOne') + + + + + + + <p>Whether this <code>OccurrenceDefinition</code> is constrained to represent at most one thing.</p> + + + - - - - <p>The RenderingUsages defined by a certain <code>renderingDefinition</code>.</p> + + + + <p>The <code>OccurrenceUsages</code> being typed by a certain <code>Class</code>.</p> - - + + - - - - <p>The ViewUsages that have a certain <code>ViewDefinition</code>.</p> + + + + <p>The AllocationUsages that have a certain AllocationDefinition as their <code>allocationDefinition</code>.</p> - - + + - - - - <p>The ViewUsage that owns a certain <code>viewCondition</code>.</p> + + + + <p>The AllocationDefinitions that feature a certain <code>allocation</code>.</p> - - - - - - - - + + - - - <p>An <code>AssertConstraintUsage</code> is a <code>ConstraintUsage</code> that is also an <code>Invariant</code> and, so, is asserted to be true (by default). Unless it is the <code>AssertConstraintUsage</code> itself, the asserted <code>ConstraintUsage</code> is related to the <code>AssertConstraintUsage</code> by a ReferenceSubsetting <code>Relationship</code>.</p> + + + <p>An <code>AllocationDefinition</code> is a <code>ConnectionDefinition</code> that specifies that some or all of the responsibility to realize the intent of the <code>source</code> is allocated to the <code>target</code> instances. Such allocations define mappings across the various structures and hierarchies of a system model, perhaps as a precursor to more rigorous specifications and implementations. An <code>AllocationDefinition</code> can itself be refined using nested <code>allocations</code> that give a finer-grained decomposition of the containing allocation mapping.</p> - - - <p>If an <code>AssertConstraintUsage</code> has no <code>ownedReferenceSubsetting</code>, then its <code>assertedConstraint</code> is the <code>AssertConstraintUsage</code> itself. Otherwise, the <code>assertedConstraint</code> is the <code>featureTarget</code> of the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code>, which must be a <code>ConstraintUsage</code>.</p> - - - OCL2.0 - assertedConstraint = - if referencedFeatureTarget() = null then self - else if referencedFeatureTarget().oclIsKindOf(ConstraintUsage) then - referencedFeatureTarget().oclAsType(ConstraintUsage) - else null - endif endif - - - - - <p>If a <code>AssertConstraintUsage</code> is negated, then it must directly or indirectly specialize the <code>ConstraintUsage</code> <code><em>Constraints::negatedConstraintChecks</em></code>. Otherwise, it must directly or indirectly specialize the <code>ConstraintUsage</code> <code><em>Constraints::assertedConstraintChecks</em></code>.</p> + + + <p> The <code>allocations</code> of an <code>AllocationDefinition</code> are all its <code>usages</code> that are <code>AllocationUsages</code>.</p> - + OCL2.0 - if isNegated then - specializesFromLibrary('Constraints::negatedConstraintChecks') -else - specializesFromLibrary('Constraints::assertedConstraintChecks') -endif + allocation = usage->selectAsKind(AllocationUsage) - - - <p>If an <code>AssertConstraintUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of its <code>referencedFeature</code> must be a </code>ConstraintUsage</code>.</p> + + + <p>An <code>AllocationDefinition</code> must directly or indirectly specialize the <code>AllocationDefinition</code> <em><code>Allocations::Allocation</code></em> from the Systems Model Library.</p> - + OCL2.0 - referencedFeaureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(ConstraintUsage) + specializesFromLibrary('Allocations::Allocation') - - - - - <p>The <code>ConstraintUsage</code> to be performed by the <code>AssertConstraintUsage</code>. It is the <code>referenceFeature</code> of the <code>ownedReferenceSubsetting</code> for the <code>AssertConstraintUsage</code>, if there is one, and, otherwise, the <code>AssertConstraintUsage</code> itself.</p> + + + + <p>The <code>AllocationUsages</code> that refine the allocation mapping defined by this <code>AllocationDefinition</code>.</p> - - + + - - - <p>A <code>ConstraintDefinition</code> is an <code>OccurrenceDefinition</code> that is also a <code>Predicate</code> that defines a constraint that may be asserted to hold on a system or part of a system.</p> - - + + + <p>An <code>AllocationUsage</code> is a usage of an <code>AllocationDefinition</code> asserting the allocation of the <code>source</code> feature to the <code>target</code> feature.</p> - - - <p>A <code>ConstraintDefinition</code> must directly or indirectly specialize the base <code>ConstraintDefinition</code> <em><code>Constraints::ConstraintCheck</code></em> from the Systems Model Library.</p> + + + <p>An <code>AllocationUsage</code> must directly or indirectly specialize the <code>AllocationUsage</code> <em><code>Allocations::allocations</code></em> from the Systems Model Library.</p> - + OCL2.0 - specializesFromLibrary('Constraints::ConstraintCheck') + specializesFromLibrary('Allocations::allocations') - - + + + + <p>The <code>AllocationDefinitions</code> that are the types of this <code>AllocationUsage</code>.</p> + + + + - - - - <p>The AssertConstraintUsages that have a certain ConstraintUsage as their <tt>assertedConstraint</tt>.</p> + + + + <p>The ConnectionUsages that have a certain AssociationStructure as their <code>connectionDefinition</code>.</p> - - + + - - - <p>A <code>ConstraintUsage</code> is an <code>OccurrenceUsage</code> that is also a <code>BooleanExpression</code>, and, so, is typed by a <code>Predicate</code>. Nominally, if the type is a <code>ConstraintDefinition</code>, a <code>ConstraintUsage</code> is a <code>Usage</code> of that <code>ConstraintDefinition</code>. However, other kinds of kernel <code>Predicates</code> are also allowed, to permit use of <code>Predicates</code> from the Kernel Model Libraries.</p> + + + <p>A <code>ConnectionUsage</code> is a <code>ConnectorAsUsage</code> that is also a <code>PartUsage</code>. Nominally, if its type is a <code>ConnectionDefinition</code>, then a <code>ConnectionUsage</code> is a Usage of that <code>ConnectionDefinition</code>, representing a connection between parts of a system. However, other kinds of kernel <code>AssociationStructures</code> are also allowed, to permit use of <code>AssociationStructures</code> from the Kernel Model Libraries.</p> - - - <p>A <code>ConstraintUsage</code> whose <code>owningFeatureMembership</code> is a <code>RequirementConstraintMembership</code> must directly or indirectly specialize on the <code>ConstraintUsages</code> <code><em>assumptions</em></code> or <code><em>constraints</em></code> from the <code>ConstraintDefinition</code> <code><em>Requirements::RequirementCheck</em></code> in the Systems Model Library, depending on whether the <code>kind</code> of the <code>RequirementConstraintMembership</code> is <code>assumption</code> or <code>requirement</code>, respectively.</p> - - - OCL2.0 - owningFeatureMembership <> null and -owningFeatureMembership.oclIsKindOf(RequirementConstraintMembership) implies - if owningFeatureMembership.oclAsType(RequirementConstraintMembership).kind = - RequirementConstraintKind::assumption then - specializesFromLibrary('Requirements::RequirementCheck::assumptions') - else - specializesFromLibrary('Requirements::RequirementCheck::constraints') - endif - - - - - <p>A <code>ConstraintUsage</code> must directly or indirectly specialize the base <code>ConstraintUsage</code> <em><code>Constraints::constraintChecks</code></em> from the Systems Model Library.</p> + + + <p>A <code>ConnectionUsage</code> must directly or indirectly specialize the <code>ConnectionUsage</code> <em><code>Connections::connections</code></em> from the Systems Model Library.</p> - + OCL2.0 - specializesFromLibrary('Constraints::constraintChecks') + specializesFromLibrary('Connections::connections') - - - <p>A <code>ConstraintUsage</code> whose <code>owningType</code> is an <code>ItemDefinition</code> or <code>ItemUsage</code> must directly or indirectly specialize the <code>ConstraintUsage</code> <em><code>Items::Item::checkedConstraints</code></em>.</p> + + + <p>A binary <code>ConnectionUsage</code> must directly or indirectly specialize the <code>ConnectionUsage</code> <em><code>Connections::binaryConnections</code></em> from the Systems Model Library.</p> - + OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(ItemDefinition) or - owningType.oclIsKindOf(ItemUsage)) implies - specializesFromLibrary('Items::Item::checkedConstraints') + ownedEndFeature->size() = 2 implies + specializesFromLibrary('Connections::binaryConnections') - - - - - <p>The (single) <code>Predicate</code> that is the type of this <code>ConstraintUsage</code>. Nominally, this will be a <code>ConstraintDefinition</code>, but other kinds of <code>Predicates</code> are also allowed, to permit use of <code>Predicates</code> from the Kernel Model Libraries.</p> + + + + + <p>The <code>AssociationStructures</code> that are the types of this <code>ConnectionUsage</code>. Nominally, these are , but other kinds of Kernel <code>AssociationStructures</code> are also allowed, to permit use of <code>AssociationStructures</code> from the Kernel Model Libraries</p> - - + + - - - <p>The naming <code>Feature</code> of a <code>ConstraintUsage</code> that is owned by a <code>RequirementConstraintMembership</code> and has an <code>ownedReferenceSubsetting</code> is the <code>featureTarget</code> of the <code>referencedFeature</code> of that <code>ownedReferenceSubsetting</code>.</p> - - - - OCL2.0 - if owningFeatureMembership <> null and -owningFeatureMembership.oclIsKindOf(RequirementConstraintMembership) and -ownedReferenceSubsetting <> null then - ownedReferenceSubsetting.referencedFeature.featureTarget -else - self.oclAsType(OccurrenceUsage).namingFeature() -endif - - - - - - - - - - <p>A <code>ConstraintUsage</code> is not model-level evaluable.</p> - - - - OCL2.0 - false - - - - - - - - - - - - - - <p>The ConstraintUsages typed by a certain Predicate.</p> - - - - + + + <p>A <code>ConnectorAsUsage</code> is both a <code>Connector</code> and a <code>Usage</code>. <code>ConnectorAsUsage</code> cannot itself be instantiated in a SysML model, but it is a base class for the concrete classes <code>BindingConnectorAsUsage</code>, <code>SuccessionAsUsage</code>, <code>ConnectionUsage</code> and <code>FlowUsage</code>.</p> + + + - - - - <p>The ConnectionUsages that have a certain AssociationStructure as their <code>connectionDefinition</code>.</p> + + + + <p>The ConnectionDefinitions that have a certain Usage as an <code>connectionEnd</code>.</p> - - + + - - - <p>A <code>BindingConnectorAsUsage</code> is both a <code>BindingConnector</code> and a <code>ConnectorAsUsage</code>.</p> + + + <p>A <code>SuccessionAsUsage</code> is both a <code>ConnectorAsUsage</code> and a <code>Succession</code>.<p> - - + + @@ -12870,7 +12268,7 @@ endif OCL2.0 ownedEndFeature->size() = 2 implies - specializesFromLibrary('Connections::BinaryConnections') + specializesFromLibrary('Connections::BinaryConnection') @@ -12895,3094 +12293,3694 @@ endif <p>A <code>ConnectionDefinition</code> always has <code>isSufficient = true</code>.</p> - - - + + + + + + + <p>A <code>BindingConnectorAsUsage</code> is both a <code>BindingConnector</code> and a <code>ConnectorAsUsage</code>.</p> + + + + + + + <p>A <code>FlowDefinition</code> is an <code>ActionDefinition</code> that is also an <code>Interaction</code> (which is both a KerML <code>Behavior</code> and <code>Association</code>), representing flows between <code>Usages</code>.</p> + + + + <p>A <code>FlowDefinition</code> must directly or indirectly specialize the base <code>FlowDefinition</code> <em><code>Flows::MessageAction</code></em> from the Systems Model Library.</p> + + + OCL2.0 + specializesFromLibrary('Flows::MessageAction') + + + + + <p>A binary <code>FlowDefinition</code> must directly or indirectly specialize the base <code>FlowDefinition<code> <em><code>Flows::Message</code></em> from the Systems Model Library.</p> + + + OCL2.0 + flowEnd->size() = 2 implies + specializesFromLibrary('Flows::Message') + + + + + <p>A <code>FlowDefinition</code> may not have more than two <code>flowEnds</code>.</p> + + + OCL2.0 + flowEnd->size() <= 2 + + + + + + + <p>The <code>Usages</code> that define the things related by the <code>FlowDefinition</code>.</p> + + + + + + + + + <p>The <code>FlowUsages<code> that have a certain <code>Interaction</code> as their <code>flowDefinition</code>.</p> + + + + + + + + <p>A <code>FlowUsage</code> is an <code>ActionUsage</code> that is also a <code>ConnectorAsUsage</code> and a KerML <code>Flow</code>.</p> + + + + <p>A <code>FlowUsage</code> must directly or indirectly specialize the base <code>FlowUsage</code> <em><code>Flows::messages</code></em> from the Systems Library model.</p> + + + OCL2.0 + specializesFromLibrary('Flows::messages') + + + + + <p>If a <code>FlowUsage</code> has <code>ownedEndFeatures</code>, it must directly or indirectly specialize the <code>FlowUsage</code> <em><code>Flows::flows</code></em> from the Systems Model Library.</p> + + + OCL2.0 + ownedEndFeatures->notEmpty() implies + specializesFromLibrary('Flows::flows') + + + + + + + + <p>The <code>Interactions</code> that are the <code>types</code> of this <code>FlowUsage</code>. Nominally, these are <code>FlowDefinitions</code>, but other kinds of Kernel <code>Interactions</code> are also allowed, to permit use of Interactions from the Kernel Model Libraries.</p> + + + + + + + + <p>A <code>SuccessionFlowUsage</code> is a <code>FlowUsage</code> that is also a KerML <code>SuccessionFlow</code>.</p> + + + + <p>A <code>SuccessionFlowUsage</code> must directly or indirectly specialize the base <code>FlowUsage</code> <em><code>Flows::successionFlows</code></em> from the Systems Library model.</p> + + + OCL2.0 + specializesFromLibrary('Flows::successionFlows') + + + + + + + + + <p>The <code>FlowDefinitions<code> that have a certain Usage as <code>flowEnd</code>.</p> + + + + - - - <p>A <code>ConnectionUsage</code> is a <code>ConnectorAsUsage</code> that is also a <code>PartUsage</code>. Nominally, if its type is a <code>ConnectionDefinition</code>, then a <code>ConnectionUsage</code> is a Usage of that <code>ConnectionDefinition</code>, representing a connection between parts of a system. However, other kinds of kernel <code>AssociationStructures</code> are also allowed, to permit use of <code>AssociationStructures</code> from the Kernel Model Libraries.</p> + + + <p>An <code>InterfaceUsage</code> is a Usage of an <code>InterfaceDefinition</code> to represent an interface connecting parts of a system through specific ports.</p> - - - <p>A <code>ConnectionUsage</code> must directly or indirectly specialize the <code>ConnectionUsage</code> <em><code>Connections::connections</code></em> from the Systems Model Library.</p> + + + <p>A binary <code>InterfaceUsage</code> must directly or indirectly specialize the <code>InterfaceUsage</code> <em><code>Interfaces::binaryInterfaces</code></em> from the Systems Model Library.</p> - + OCL2.0 - specializesFromLibrary('Connections::connections') + ownedEndFeature->size() = 2 implies + specializesFromLibrary('Interfaces::binaryInterfaces') - - - <p>A binary <code>ConnectionUsage</code> must directly or indirectly specialize the <code>ConnectionUsage</code> <em><code>Connections::binaryConnections</code></em> from the Systems Model Library.</p> + + + <p>An <code>InterfaceUsage</code> must directly or indirectly specialize the <code>InterfaceUsage</code> <em><code>Interfaces::interfaces</code></em> from the Systems Model Library.</p> - + OCL2.0 - ownedEndFeature->size() = 2 implies - specializesFromLibrary('Connections::binaryConnections') + specializesFromLibrary('Interfaces::interfaces') - - - - - <p>The <code>AssociationStructures</code> that are the types of this <code>ConnectionUsage</code>. Nominally, these are , but other kinds of Kernel <code>AssociationStructures</code> are also allowed, to permit use of <code>AssociationStructures</code> from the Kernel Model Libraries</p> + + + + <p>The <code>InterfaceDefinitions</code> that type this <code>InterfaceUsage</code>.</p> - - + + - - - <p>A <code>ConnectorAsUsage</code> is both a <code>Connector</code> and a <code>Usage</code>. <code>ConnectorAsUsage</code> cannot itself be instantiated in a SysML model, but it is a base class for the concrete classes <code>BindingConnectorAsUsage</code>, <code>SuccessionAsUsage</code>, <code>ConnectionUsage</code> and <code>FlowConnectionUsage</code>.</p> - - - - - - - - <p>The ConnectionDefinitions that have a certain Usage as an <code>connectionEnd</code>.</p> - - - - - - - - <p>A <code>SuccessionAsUsage</code> is both a <code>ConnectorAsUsage</code> and a <code>Succession</code>.<p> - - - - - - - - <p>The PortUsages that are typed by a certain PortDefinition.</p> + + + + <p>The InterfaceDefinitions that have a certain PortUsage as an <code>interfaceEnd</code>.</p> - - + + - - - - <p>The PortConjugation that relates a certain PortDefinition to its ConjugatedPortDefinition (if any).</p> + + + + <p>The InterfaceUsages typed by a certain InterfaceDefinition.</p> - - + + - - - - <p>A <code>PortConjugation</code> is a <code>Conjugation</code> <code>Relationship</code> between a <code>PortDefinition</code> and its corresponding <code>ConjugatedPortDefinition</code>. As a result of this <code>Relationship</code>, the <code>ConjugatedPortDefinition</code> inherits all the <code>features</code> of the original <code>PortDefinition</code>, but input <code>flows</code> of the original <code>PortDefinition</code> become outputs on the <code>ConjugatedPortDefinition</code> and output <code>flows</code> of the original <code>PortDefinition</code> become inputs on the <code>ConjugatedPortDefinition</code>.</code></p> - - - - - - <p>The <code>PortDefinition</code> being conjugated.</p> - - - - - - - <p>The <code>ConjugatedPortDefinition</code> that is conjugate to the <code>originalPortDefinition</code>.</p> - - - - - - - - <p>A <code>ConjugatedPortTyping</code> is a <code>FeatureTyping</code> whose <code>type</code> is a <code>ConjugatedPortDefinition</code>. (This relationship is intended to be an abstract-syntax marker for a special surface notation for conjugated typing of ports.)</p> + + + <p>An <code>InterfaceDefinition</code> is a <code>ConnectionDefinition</code> all of whose ends are <code>PortUsages</code>, defining an interface between elements that interact through such ports.</p> - - - <p>The <code>portDefinition</code> of a <code>ConjugatedPortTyping</code> is the <code>originalPortDefinition</code> of the <code>conjugatedPortDefinition</code> of the <code>ConjugatedPortTyping</code>.</p> + + + <p>An <code>InterfaceDefinition</code> must directly or indirectly specialize the <code>InterfaceDefinition</code> <em><code>Interfaces::Interface</code></em> from the Systems Model Library.</p> - + OCL2.0 - portDefinition = conjugatedPortDefinition.originalPortDefinition + specializesFromLibrary('Interfaces::Interface') - - - - <p>The <code>originalPortDefinition</code> of the <code>conjugatedPortDefinition</code> of this <code>ConjugatedPortTyping</code>.</p> + + + <p>A binary <code>InterfaceDefinition</code> must directly or indirectly specialize the <code>InterfaceDefinition</code> <em><code>Interfaces::BinaryInterface</code></em> from the Systems Model Library.</p> - - - - - - <p>The <code>type</code> of this <code>ConjugatedPortTyping</code> considered as a <code>FeatureTyping</code>, which must be a <code>ConjugatedPortDefinition</code>.</p> + + OCL2.0 + ownedEndFeature->size() = 2 implies + specializesFromLibrary('Interfaces::BinaryInterface') + + + + + + <p>The <code>PortUsages</code> that are the <code>connectionEnds</code> of this <code>InterfaceDefinition</code>. + - - + + - - - <p>A <code>ConjugatedPortDefinition</code> is a <code>PortDefinition</code> that is a <code>PortDefinition</code> of its original <code>PortDefinition</code>. That is, a <code>ConjugatedPortDefinition</code> inherits all the <code>features</code> of the original <code>PortDefinition</code>, but input <code>flows</code> of the original <code>PortDefinition</code> become outputs on the <code>ConjugatedPortDefinition</code> and output <code>flows</code> of the original <code>PortDefinition</code> become inputs on the <code>ConjugatedPortDefinition</code>. Every <code>PortDefinition</code> (that is not itself a <code><code>ConjugatedPortDefinition</code></code>) has exactly one corresponding <code>ConjugatedPortDefinition</code>, whose effective name is the name of the <code>originalPortDefinition</code>, with the character <code>~</code> prepended.</p> - - - - <p>The <code>originalPortDefinition</code> of the <code>ownedPortConjugator</code> of a <code>ConjugatedPortDefinition</code> must be the <code>originalPortDefinition</code> of the <code>ConjugatedPortDefinition</code>.</p> + + + + <p>The ConstraintUsages typed by a certain Predicate.</p> - - OCL2.0 - ownedPortConjugator.originalPortDefinition = originalPortDefinition - - - - - <p>A <code>ConjugatedPortDefinition</code> must not itself have a <code>conjugatedPortDefinition</code>. + + + + + + + + <p>The AssertConstraintUsages that have a certain ConstraintUsage as their <tt>assertedConstraint</tt>.</p> - + + + + + + + <p>A <code>ConstraintDefinition</code> is an <code>OccurrenceDefinition</code> that is also a <code>Predicate</code> that defines a constraint that may be asserted to hold on a system or part of a system.</p> + + + + + + <p>A <code>ConstraintDefinition</code> must directly or indirectly specialize the base <code>ConstraintDefinition</code> <em><code>Constraints::ConstraintCheck</code></em> from the Systems Model Library.</p> + + OCL2.0 - conjugatedPortDefinition = null + specializesFromLibrary('Constraints::ConstraintCheck') - - - - <p>The original <code>PortDefinition</code> for this <code>ConjugatedPortDefinition</code>, which is the <code>owningNamespace</code> of the <code>ConjugatedPortDefinition</code>.</p> - - - - - - - <p>The <code>PortConjugation</code> that is the <code>ownedConjugator</code> of this <code>ConjugatedPortDefinition</code>, linking it to its <code>originalPortDefinition</code>.</p> - - - - - - - <p>If the <code>name</code> of the <code>originalPortDefinition</code> is non-empty, then return that with the character <code>~</code> prepended.</p> - - - - OCL2.0 - let originalName : String = originalPortDefinition.name in -if originalName = null then null -else '~' + originalName -endif - - - - - - - - + + - - - <p>A <code>PortUsage</code> is a usage of a <code>PortDefinition</code>. A <code>PortUsage</code> itself as well as all its <code>nestedUsages</code> must be referential (non-composite).</p> + + + <p>An <code>AssertConstraintUsage</code> is a <code>ConstraintUsage</code> that is also an <code>Invariant</code> and, so, is asserted to be true (by default). Unless it is the <code>AssertConstraintUsage</code> itself, the asserted <code>ConstraintUsage</code> is related to the <code>AssertConstraintUsage</code> by a ReferenceSubsetting <code>Relationship</code>.</p> - - - <p>The <code>nestedUsages</code> of a <code>PortUsage</code> that are not themselves <code>PortUsages</code> must not be composite.</p> + + + <p>If an <code>AssertConstraintUsage</code> has no <code>ownedReferenceSubsetting</code>, then its <code>assertedConstraint</code> is the <code>AssertConstraintUsage</code> itself. Otherwise, the <code>assertedConstraint</code> is the <code>featureTarget</code> of the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code>, which must be a <code>ConstraintUsage</code>.</p> - + OCL2.0 - nestedUsage-> - reject(oclIsKindOf(PortUsage))-> - forAll(not isComposite) + assertedConstraint = + if referencedFeatureTarget() = null then self + else if referencedFeatureTarget().oclIsKindOf(ConstraintUsage) then + referencedFeatureTarget().oclAsType(ConstraintUsage) + else null + endif endif - - - <p>A <code>PortUsage</code> must directly or indirectly specialize the <code>PortUsage</code> <em><code>Ports::ports</code></em> from the Systems Model Library.</p> + + + <p>If a <code>AssertConstraintUsage</code> is negated, then it must directly or indirectly specialize the <code>ConstraintUsage</code> <code><em>Constraints::negatedConstraintChecks</em></code>. Otherwise, it must directly or indirectly specialize the <code>ConstraintUsage</code> <code><em>Constraints::assertedConstraintChecks</em></code>.</p> - + OCL2.0 - specializesFromLibrary('Ports::ports') + if isNegated then + specializesFromLibrary('Constraints::negatedConstraintChecks') +else + specializesFromLibrary('Constraints::assertedConstraintChecks') +endif - - - <p>A composite <code>PortUsage</code> with an <code>owningType</code> that is a <code>PortDefinition</code> or <code>PortUsage</code> must directly or indirectly specialize the <code>PortUsage</code> <em><code>Ports::Port::subports</code></em> from the Systems Model Library.</p> + + + <p>If an <code>AssertConstraintUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of its <code>referencedFeature</code> must be a </code>ConstraintUsage</code>.</p> - + OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(PortDefinition) or - owningType.oclIsKindOf(PortUsage)) implies - specializesFromLibrary('Ports::Port::subports') + referencedFeatureTarget() <> null implies + referencedFeatureTarget().oclIsKindOf(ConstraintUsage) - - - <p>Unless a <code>PortUsage</code> has an <code>owningType</code> that is a <code>PortDefinition</code> or a <code>PortUsage</code>, it must be referential (non-composite).</p> + + + + + <p>The <code>ConstraintUsage</code> to be performed by the <code>AssertConstraintUsage</code>. It is the <code>referenceFeature</code> of the <code>ownedReferenceSubsetting</code> for the <code>AssertConstraintUsage</code>, if there is one, and, otherwise, the <code>AssertConstraintUsage</code> itself.</p> - + + + + + + + <p>A <code>ConstraintUsage</code> is an <code>OccurrenceUsage</code> that is also a <code>BooleanExpression</code>, and, so, is typed by a <code>Predicate</code>. Nominally, if the type is a <code>ConstraintDefinition</code>, a <code>ConstraintUsage</code> is a <code>Usage</code> of that <code>ConstraintDefinition</code>. However, other kinds of kernel <code>Predicates</code> are also allowed, to permit use of <code>Predicates</code> from the Kernel Model Libraries.</p> + + + + <p>A composite <code>ConstraintUsage</code> whose <code>owningFeatureMembership</code> is a <code>RequirementConstraintMembership</code> must directly or indirectly specialize on the <code>ConstraintUsages</code> <code><em>assumptions</em></code> or <code><em>constraints</em></code> from the <code>ConstraintDefinition</code> <code><em>Requirements::RequirementCheck</em></code> in the Systems Model Library, depending on whether the <code>kind</code> of the <code>RequirementConstraintMembership</code> is <code>assumption</code> or <code>requirement</code>, respectively.</p> + + OCL2.0 - owningType = null or -not owningType.oclIsKindOf(PortDefinition) and -not owningType.oclIsKindOf(PortUsage) implies - isReference + isComposite and +owningFeatureMembership <> null and +owningFeatureMembership.oclIsKindOf(RequirementConstraintMembership) implies + if owningFeatureMembership.oclAsType(RequirementConstraintMembership).kind = + RequirementConstraintKind::assumption then + specializesFromLibrary('Requirements::RequirementCheck::assumptions') + else + specializesFromLibrary('Requirements::RequirementCheck::constraints') + endif - - - <p>A <code>PortUsage</code> whose <code>owningType</code> is a <code>PartDefinition</code> or <code>PartUsage</code> must directly or indirectly specialize the <code>PortUsage</code> <em><code>Parts::Part::ownedPorts</code></em> from the Systems Model Library.</p> + + + <p>A <code>ConstraintUsage</code> must directly or indirectly specialize the base <code>ConstraintUsage</code> <em><code>Constraints::constraintChecks</code></em> from the Systems Model Library.</p> - + + OCL2.0 + specializesFromLibrary('Constraints::constraintChecks') + + + + + <p>A <code>ConstraintUsage</code> whose <code>owningType</code> is an <code>ItemDefinition</code> or <code>ItemUsage</code> must directly or indirectly specialize the <code>ConstraintUsage</code> <em><code>Items::Item::checkedConstraints</code></em>.</p> + + OCL2.0 owningType <> null and -(owningType.oclIsKindOf(PartDefinition) or - owningType.oclIsKindOf(PartUsage)) implies - specializesFromLibrary('Parts::Part::ownedPorts') +(owningType.oclIsKindOf(ItemDefinition) or + owningType.oclIsKindOf(ItemUsage)) implies + specializesFromLibrary('Items::Item::checkedConstraints') - - - - <p>The <code>occurrenceDefinitions</code> of this <code>PortUsage</code>, which must all be <code>PortDefinitions<code>.</p> + + + + + <p>The (single) <code>Predicate</code> that is the type of this <code>ConstraintUsage</code>. Nominally, this will be a <code>ConstraintDefinition</code>, but other kinds of <code>Predicates</code> are also allowed, to permit use of <code>Predicates</code> from the Kernel Model Libraries.</p> - - + + + + + <p>The naming <code>Feature</code> of a <code>ConstraintUsage</code> that is owned by a <code>RequirementConstraintMembership</code> and has an <code>ownedReferenceSubsetting</code> is the <code>featureTarget</code> of the <code>referencedFeature</code> of that <code>ownedReferenceSubsetting</code>.</p> + + + + OCL2.0 + if owningFeatureMembership <> null and +owningFeatureMembership.oclIsKindOf(RequirementConstraintMembership) and +ownedReferenceSubsetting <> null then + ownedReferenceSubsetting.referencedFeature.featureTarget +else + self.oclAsType(OccurrenceUsage).namingFeature() +endif + + + + + + + + + + <p>A <code>ConstraintUsage</code> is not model-level evaluable.</p> + + + + OCL2.0 + false + + + + + + + + + + - - - <p>A <code>PortDefinition</code> defines a point at which external entities can connect to and interact with a system or part of a system. Any <code>ownedUsages</code> of a <code>PortDefinition</code>, other than <code>PortUsages</code>, must not be composite.</p> - + + + + <p>The AttributeUsages that are typed by a certain DataType.</p> + + + + + + + + <p>An <code>AttributeDefinition</code> is a <code>Definition</code> and a <code>DataType</code> of information about a quality or characteristic of a system or part of a system that has no independent identity other than its value. All <code>features</code> of an <code>AttributeDefinition</code> must be referential (non-composite).</p> - +<p>As a <code>DataType</code>, an <code>AttributeDefinition</code> must specialize, directly or indirectly, the base <code>DataType</code> <code><em>Base::DataValue</em></code> from the Kernel Semantic Library.</p> - - - <p>The <code>conjugatedPortDefinition</code> of a <code>PortDefinition</code> is the <code>ownedMember</code> that is a <code>ConjugatedPortDefinition</code>.</p> + + + <p>All <code>features</code> of an <code>AttributeDefinition</code> must be non-composite.</p> - + OCL2.0 - conjugatedPortDefinition = -let conjugatedPortDefinitions : OrderedSet(ConjugatedPortDefinition) = - ownedMember->selectByKind(ConjugatedPortDefinition) in -if conjugatedPortDefinitions->isEmpty() then null -else conjugatedPortDefinitions->first() -endif + feature->forAll(not isComposite) - - - <p>The <code>ownedUsages</code> of a <code>PortDefinition</code> that are not <code>PortUsages</code> must not be composite.</p> + + + + + + <p>An <code>AttributeUsage</code> is a <code>Usage</code> whose type is a <code>DataType</code>. Nominally, if the type is an <code>AttributeDefinition</code>, an <code>AttributeUsage</code> is a usage of a <code>AttributeDefinition</code> to represent the value of some system quality or characteristic. However, other kinds of kernel <code>DataTypes</code> are also allowed, to permit use of <code>DataTypes</code> from the Kernel Model Libraries. An <code>AttributeUsage</code> itself as well as all its nested <code>features</code> must be referential (non-composite).</p> + +<p>An <code>AttributeUsage</code> must specialize, directly or indirectly, the base <code>Feature</code> <code><em>Base::dataValues</em></code> from the Kernel Semantic Library.</p> + + + + <p>An <code>AttributeUsage</code> is always referential.</p> - + OCL2.0 - ownedUsage-> - reject(oclIsKindOf(PortUsage))-> - forAll(not isComposite) + isReference - - - <p>Unless it is a <code>ConjugatedPortDefinition</code>, a <code>PortDefinition</code> must have exactly one <code>ownedMember</code> that is a <code>ConjugatedPortDefinition</code>.</p> + + + <p>All <code>features</code> of an <code>AttributeUsage</code> must be non-composite.</p> - + OCL2.0 - not oclIsKindOf(ConjugatedPortDefinition) implies - ownedMember-> - selectByKind(ConjugatedPortDefinition)-> - size() = 1 + feature->forAll(not isComposite) - - - <p>A <code>PortDefinition</code> must directly or indirectly specialize the <code>PortDefinition</code> <em><code>Ports::Port</code></em> from the Systems Model Library.</p> + + + <p>An <code>AttributeUsage</code> must directly or indirectly specialize <code><em>Base::dataValues</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - specializesFromLibrary('Ports::Port') + specializesFromLibrary('Base::dataValues') - - - - - <p>The <codeConjugatedPortDefinition</code> that is conjugate to this <code>PortDefinition</code>.</p> + + + + <p>The <code>DataTypes</code> that are the types of this <code>AttributeUsage</code>. Nominally, these are <code>AttributeDefinitions</code>, but other kinds of kernel <code>DataTypes</code> are also allowed, to permit use of <code>DataTypes</code> from the Kernel Model Libraries.</p> - - + + + + + + <p>Always true for an <code>AttributeUsage</code>.</p> + + + - - - - <p>The ConjugatedPortTypings whose <code>conjugatedPortDefinition</code> a certain ConjugatedPortDefinition.</p> + + + + <p>The VerificationUsages that are defined by a certain <code>verificationCaseDefinition</code>.</p> - - + + - - - - - <p>The ConjugatedPortTypings whose <code>portDefinition</code> is a certain PortDefinition.</p> + + + + <p>The RequirementVerificationMembership that has a certain RequirementUsage as its <code>verifiedRequirement</code>.</p> - - + + - - - <p>A <code>PartUsage</code> is a usage of a <code>PartDefinition</code> to represent a system or a part of a system. At least one of the <code>itemDefinitions</code> of the <code>PartUsage</code> must be a <code>PartDefinition</code>.</p> - -<p>A <code>PartUsage</code> must subset, directly or indirectly, the base <code>PartUsage</code> <em><code>parts</code></em> from the Systems Model Library.</p> + + + <p>A <code>VerificationCaseUsage</code> is a </code>Usage</code> of a <code>VerificationCaseDefinition</code>.</p> - - - <p>The <code>partDefinitions</code> of an <code>PartUsage</code> are those <code>itemDefinitions</code> that are <code>PartDefinitions</code>.</p> - - - OCL2.0 - itemDefinition->selectByKind(PartDefinition) - - - - - <p>At least one of the <code>itemDefinitions</code> of a <code>PartUsage</code> must be a <code>PartDefinition</code>.</p> + + + <p>The <code>verifiedRequirements</code> of a <code>VerificationCaseUsage</code> are the <code>verifiedRequirements</code> of its <code>RequirementVerificationMemberships</code>.</p> - + OCL2.0 - partDefinition->notEmpty() + verifiedRequirement = + if objectiveRequirement = null then OrderedSet{} + else + objectiveRequirement.featureMembership-> + selectByKind(RequirementVerificationMembership). + verifiedRequirement->asOrderedSet() + endif - - - <p>A <code>PartUsage</code> must directly or indirectly specialize the <code>PartUsage</code> <em><code>Parts::parts</code></em> from the Systems Model Library.</p> + + + <p>A <code>VerificationCaseUsage</code> must subset, directly or indirectly, the base <code>VerificationCaseUsage</code> <code><em>VerificationCases::verificationCases</em></code> from the Systems Model Library.</p> - + OCL2.0 - specializesFromLibrary('Parts::parts') + specializesFromLibrary('VerificationCases::verificationCases') - - - <p>A composite <code>PartUsage</code> whose <code>owningType</code> is a <code>ItemDefinition</code> or <code>ItemUsage</code> must directly or indirectly specialize the <code>PartUsage</code> <em><code>Items::Item::subparts</code></em> from the Systems Model Library.</p> + + + If it is composite and owned by a <code>VerificationCaseDefinition</code> or <code>VerificationCaseUsage</code>, then it must specialize <code>VerificationCaseUsage</code> <code><em>VerificationCases::VerificationCase::subVerificationCases</code>.</p> - + OCL2.0 isComposite and owningType <> null and -(owningType.oclIsKindOf(ItemDefinition) or - owningType.oclIsKindOf(ItemUsage)) implies - specializesFromLibrary('Items::Item::subparts') - - - - - <p>If a <code>PartUsage</code> is owned via an <code>ActorMembership</code>, then it must directly or indirectly specialize either <code><em>Requirements::RequirementCheck::actors</em></code> (if its <code>owningType</code> is a <code>RequirementDefinition</code> or <code>RequirementUsage</code> or <code><em>Cases::Case::actors</em></code> (otherwise).</p> - - - OCL2.0 - owningFeatureMembership <> null and -owningFeatureMembership.oclIsKindOf(ActorMembership) implies - if owningType.oclIsKindOf(RequirementDefinition) or - owningType.oclIsKindOf(RequirementUsage) - then specializesFromLibrary('Requirements::RequirementCheck::actors') - else specializesFromLibrary('Cases::Case::actors') + (owningType.oclIsKindOf(VerificationCaseDefinition) or + owningType.oclIsKindOf(VerificationCaseUsage)) implies + specializesFromLibrary('VerificationCases::VerificationCase::subVerificationCases') - - - <p>If a <code>PartUsage</code> is owned via a <code>StakeholderMembership</code>, then it must directly or indirectly specialize either <code><em>Requirements::RequirementCheck::stakeholders</em></code>.</p> + + + + <p>The <code>VerificationCase</code> that is the <code>definition</code> of this <code>VerificationCaseUsage</code>.</p> - - OCL2.0 - owningFeatureMembership <> null and -owningFeatureMembership.oclIsKindOf(StakeholderMembership) implies - specializesFromLibrary('Requirements::RequirementCheck::stakeholders') - - - - - - <p>The <code>itemDefinitions</code> of this PartUsage that are PartDefinitions.</p> + + + + + + <p>The <code>RequirementUsages</code> verified by this <code>VerificationCaseUsage</code>, which are the <code>verifiedRequirements</code> of all <code>RequirementVerificationMemberships</code> of the <code>objectiveRequirement</code>.</p> - - + + - - - - <p>The PartUsages typed by a certain PartDefinition.</p> + + + + <p>The VerificationCaseUsages that verify a certain <code>verifiedRequirement</code>.</p> - - + + - - - <p>A <code>PartDefinition</code> is an <code>ItemDefinition</code> of a <code>Class</code> of systems or parts of systems. Note that all parts may be considered items for certain purposes, but not all items are parts that can perform actions within a system.</p> - + + + <p>A <code>VerificationCaseDefinition</code> is a <code>CaseDefinition</code> for the purpose of verification of the subject of the case against its requirements.</p> - - - </p>A <code>PartDefinition</code> must directly or indirectly specialize the base <code>PartDefinition</code> <em><code>Parts::Part</code></em> from the Systems Model Library.</p> + + + <p>The <code>verifiedRequirements</code> of a <code>VerificationCaseDefinition</code> are the <code>verifiedRequirements</code> of its <code>RequirementVerificationMemberships</code>.</p> - + OCL2.0 - specializesFromLibrary('Parts::Part') + verifiedRequirement = + if objectiveRequirement = null then OrderedSet{} + else + objectiveRequirement.featureMembership-> + selectByKind(RequirementVerificationMembership). + verifiedRequirement->asOrderedSet() + endif - + + + <p>A <code>VerificationCaseDefinition</code> must directly or indirectly specialize the base <code>VerificationCaseDefinition</code> <em><code>VerificationCases::VerificationCase</code></em> from the Systems Model Library.</p> + + + OCL2.0 + specializesFromLibrary('VerificationCases::VerificationCase') + + + + + + <p>The <code>RequirementUsages</code> verified by this <code>VerificationCaseDefinition</code>, which are the <code>verifiedRequirements</code> of all <code>RequirementVerificationMemberships</code> of the <code>objectiveRequirement</code>.</p> + + + + - - - <p>A <code>FlowUsage</code> is an <code>ActionUsage</code> that is also a <code>ConnectorAsUsage</code> and a KerML <code>Flow</code>.</p> + + + <p>A <code>RequirementVerificationMembership</code> is a <code>RequirementConstraintMembership </code> used in the objective of a <code>VerificationCase</code> to identify a <code>RequirementUsage</code> that is verified by the <code>VerificationCase</code>.</p> - - - <p>A <code>FlowUsage</code> must directly or indirectly specialize the base <code>FlowUsage</code> <em><code>Flows::messages</code></em> from the Systems Library model.</p> + + + <p>A <code>RequirementVerificationMembership</code> must have <code>kind = requirement</code>.</p> - + OCL2.0 - specializesFromLibrary('Flows::messages') + kind = RequirementConstraintKind::requirement - - - <p>If a <code>FlowUsage</code> has <code>ownedEndFeatures</code>, it must directly or indirectly specialize the <code>FlowUsage</code> <em><code>Flows::flows</code></em> from the Systems Model Library.</p> + + + <p>The <code>owningType</code> of a <code>RequirementVerificationMembership</code> must a <code>RequirementUsage</code> that is owned by an <code>ObjectiveMembership</code>.</p> - + OCL2.0 - ownedEndFeatures->notEmpty() implies - specializesFromLibrary('Flows::flows') + owningType.oclIsKindOf(RequirementUsage) and +owningType.owningFeatureMembership <> null and +owningType.owningFeatureMembership.oclIsKindOf(ObjectiveMembership) - - - - - - <p>The <code>Interactions</code> that are the <code>types</code> of this <code>FlowUsage</code>. Nominally, these are <code>FlowDefinitions</code>, but other kinds of Kernel <code>Interactions</code> are also allowed, to permit use of Interactions from the Kernel Model Libraries.</p> + + + + <p>The owned <code>RequirementUsage</code> that acts as the <code>ownedConstraint</code> for this <code>RequirementVerificationMembership</code>. This will either be the <code>verifiedRequirement</code>, or it will subset the <code>verifiedRequirement</code>.</p> - - + + + + + + <p>The <code>kind</code> of a <code>RequirementVerificationMembership</code> must be <code>requirement</code>.</p> + + + + + + <p> The <code>RequirementUsage</code> that is identified as being verified. It is the <code>referencedConstraint</code> of the <code>RequirementVerificationMembership</code> considered as a <code>RequirementConstraintMembership</code>, which must be a <code>RequirementUsage</code>.</p> + + + - - - - <p>The <code>FlowUsages<code> that have a certain <code>Interaction</code> as their <code>flowDefinition</code>.</p> + + + + <p>The VerificationCaseDefinitions that verify a certain <code>verifiedRequirement</code>.</p> - - + + - - - - <p>The <code>FlowDefinitions<code> that have a certain Usage as <code>flowEnd</code>.</p> + + + + <p>The RequirementVerificationMembership that owns a certain RequirementUsage as its <code>ownedRequirement</code>.</p> - - + + - - - <p>A <code>SuccessionFlowUsage</code> is a <code>FlowUsage</code> that is also a KerML <code>SuccessionFlow</code>.</p> + + + <p>A <code>PartDefinition</code> is an <code>ItemDefinition</code> of a <code>Class</code> of systems or parts of systems. Note that all parts may be considered items for certain purposes, but not all items are parts that can perform actions within a system.</p> + - - - <p>A <code>SuccessionFlowUsage</code> must directly or indirectly specialize the base <code>FlowUsage</code> <em><code>Flows::successionFlows</code></em> from the Systems Library model.</p> + + + </p>A <code>PartDefinition</code> must directly or indirectly specialize the base <code>PartDefinition</code> <em><code>Parts::Part</code></em> from the Systems Model Library.</p> - + OCL2.0 - specializesFromLibrary('Flows::successionFlows') + specializesFromLibrary('Parts::Part') - - + - - - <p>A <code>FlowDefinition</code> is an <code>ActionDefinition</code> that is also an <code>Interaction</code> (which is both a KerML <code>Behavior</code> and <code>Association</code>), representing flows between <code>Usages</code>.</p> + + + <p>A <code>PartUsage</code> is a usage of a <code>PartDefinition</code> to represent a system or a part of a system. At least one of the <code>itemDefinitions</code> of the <code>PartUsage</code> must be a <code>PartDefinition</code>.</p> + +<p>A <code>PartUsage</code> must subset, directly or indirectly, the base <code>PartUsage</code> <em><code>parts</code></em> from the Systems Model Library.</p> - - - <p>A <code>FlowDefinition</code> must directly or indirectly specialize the base <code>FlowDefinition</code> <em><code>Flows::MessageAction</code></em> from the Systems Model Library.</p> + + + <p>The <code>partDefinitions</code> of an <code>PartUsage</code> are those <code>itemDefinitions</code> that are <code>PartDefinitions</code>.</p> - + OCL2.0 - specializesFromLibrary('Flows::MessageAction') + itemDefinition->selectByKind(PartDefinition) - - - <p>A binary <code>FlowDefinition</code> must directly or indirectly specialize the base <code>FlowDefinition<code> <em><code>Flows::Message</code></em> from the Systems Model Library.</p> + + + <p>At least one of the <code>itemDefinitions</code> of a <code>PartUsage</code> must be a <code>PartDefinition</code>.</p> - + OCL2.0 - flowEnd->size() = 2 implies - specializesFromLibrary('Flows::Message') + partDefinition->notEmpty() - - - <p>A <code>FlowDefinition</code> may not have more than two <code>flowEnds</code>.</p> + + + <p>A <code>PartUsage</code> must directly or indirectly specialize the <code>PartUsage</code> <em><code>Parts::parts</code></em> from the Systems Model Library.</p> - + OCL2.0 - flowEnd->size() <= 2 + specializesFromLibrary('Parts::parts') - - - - - <p>The <code>Usages</code> that define the things related by the <code>FlowDefinition</code>.</p> + + + <p>A composite <code>PartUsage</code> whose <code>owningType</code> is a <code>ItemDefinition</code> or <code>ItemUsage</code> must directly or indirectly specialize the <code>PartUsage</code> <em><code>Items::Item::subparts</code></em> from the Systems Model Library.</p> - - - - - - - <p>A <code>CalculationDefinition</code> is an <coed>ActionDefinition</code> that also defines a <code>Function</code> producing a <code>result</code>.</p> - - - - <p>A <code>CalculationDefinition</code> must directly or indirectly specialize the <code>CalculationDefinition</code> <em><code>Calculations::Calculation</code></em> from the Systems Model Library.</p> + + OCL2.0 + isComposite and owningType <> null and +(owningType.oclIsKindOf(ItemDefinition) or + owningType.oclIsKindOf(ItemUsage)) implies + specializesFromLibrary('Items::Item::subparts') + + + + + <p>If a <code>PartUsage</code> is owned via an <code>ActorMembership</code>, then it must directly or indirectly specialize either <code><em>Requirements::RequirementCheck::actors</em></code> (if its <code>owningType</code> is a <code>RequirementDefinition</code> or <code>RequirementUsage</code> or <code><em>Cases::Case::actors</em></code> (otherwise).</p> - + OCL2.0 - specializesFromLibrary('Calculations::Calculation') + owningFeatureMembership <> null and +owningFeatureMembership.oclIsKindOf(ActorMembership) implies + if owningType.oclIsKindOf(RequirementDefinition) or + owningType.oclIsKindOf(RequirementUsage) + then specializesFromLibrary('Requirements::RequirementCheck::actors') + else specializesFromLibrary('Cases::Case::actors') - - - <p>The <code>calculations</code> of a <code>CalculationDefinition</code> are those of its <code>actions</code> that are <code>CalculationUsages</code>.</p> + + + <p>If a <code>PartUsage</code> is owned via a <code>StakeholderMembership</code>, then it must directly or indirectly specialize <code><em>Requirements::RequirementCheck::stakeholders</em></code>.</p> - + OCL2.0 - calculation = action->selectByKind(CalculationUsage) + owningFeatureMembership <> null and +owningFeatureMembership.oclIsKindOf(StakeholderMembership) implies + specializesFromLibrary('Requirements::RequirementCheck::stakeholders') - - - - - <p>The <code>actions</code> of this <code>CalculationDefinition</code> that are <code>CalculationUsages</code>.</p> + + + + <p>The <code>itemDefinitions</code> of this PartUsage that are PartDefinitions.</p> - - + + - - - - <p>The Definition that owns the <code>ownedCalculation</code>.</p> - - - - - - - - - <p>The CalculationDefinitions that feature a certain CalculationUsage.</p> + + + + <p>The PartUsages typed by a certain PartDefinition.</p> - - + + - - - - <p>The CalculationUsage being typed by a certain Function.</p> - - - + + + + - - - <p>A <code>CalculationUsage</code> is an <code>ActionUsage</code> that is also an <code>Expression</code>, and, so, is typed by a <code>Function</code>. Nominally, if the <code>type</code> is a <code>CalculationDefinition</code>, a <code>CalculationUsage</code> is a <code>Usage</code> of that <code>CalculationDefinition</code> within a system. However, other kinds of kernel <code>Functions</code> are also allowed, to permit use of <code>Functions</code> from the Kernel Model Libraries.</p> + + + <p>A <code>MetadataDefinition</code> is an <code>ItemDefinition</code> that is also a <code>Metaclass</code>.</p> - - - <p>A <code>CalculationUsage</code> must specialize directly or indirectly the <code>CalculationUsage</code> <em><code>Calculations::calculations</code></em> from the Systems Model Library.</p> + + + <p>A <code>MetadataDefinition</code> must directly or indirectly specialize the base <code>MetadataDefinition</code> <code><em>Metadata::MetadataItem</em></code> from the Systems Model Library.</p> - + OCL2.0 - specializesFromLibrary('Calculations::calculations') + specializesFromLibrary('Metadata::MetadataItem') - - + + + + + + <p>A <code>MetadataUsage</code> is a <code>Usage</code> and a <code>MetadataFeature</code>, used to annotate other <code>Elements</code> in a system model with metadata. As a <code>MetadataFeature</code>, its type must be a <code>Metaclass</code>, which will nominally be a <code>MetadataDefinition</code>. However, any kernel <code>Metaclass</code> is also allowed, to permit use of <code>Metaclasses</code> from the Kernel Model Libraries.</p> + + + + <p>A <code>MetadataUsage</code> must directly or indirectly specialize the base <code>MetadataUsage</code> <code><em>Metadata::metadataItems</em></code> from the Systems Model Library.</p> + + OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(CalculationDefinition) or - owningType.oclIsKindOf(CalculationUsage)) implies - specializesFromLibrary('Calculations::Calculation::subcalculations') + specializesFromLibrary('Metadata::metadataItems') - - - - - <p>The <ode>Function</code> that is the <code>type</code> of this <code>CalculationUsage</code>. Nominally, this would be a <code>CalculationDefinition</code>, but a kernel <code>Function</code> is also allowed, to permit use of <code>Functions</code> from the Kernel Model Libraries.</p> + + + + + <p>The <code>MetadataDefinition</code> that is the <code>definition</code> of this <code>MetadataUsage</code>.</p> - - + + - - - <p>A <code>CalculationUsage</code> is not model-level evaluable.</p> - - - - OCL2.0 - false - - - - - - - - - - - - - - - <p>The Usage in which the <code>nestedCalculation<code> is nested.</p> - - - - - - - - - <p>The InterfaceUsages typed by a certain InterfaceDefinition.</p> - - - - - - - - - <p>The InterfaceDefinitions that have a certain PortUsage as an <code>interfaceEnd</code>.</p> - - - - - - - <p>An <code>InterfaceUsage</code> is a Usage of an <code>InterfaceDefinition</code> to represent an interface connecting parts of a system through specific ports.</p> + + + <p>A <code>StateUsage</code> is an <code>ActionUsage</code> that is nominally the <code>Usage</code> of a <code>StateDefinition</code>. However, other kinds of kernel <code>Behaviors</code> are also allowed as <code>types</code>, to permit use of <code>Behaviors</code from the Kernel Model Libraries.</p> + +<p>A <code>StateUsage</code> may be related to up to three of its <code>ownedFeatures</code> by <code>StateSubactionMembership</code> <code>Relationships</code>, all of different <code>kinds</code>, corresponding to the entry, do and exit actions of the <code>StateUsage</code>.</p> + - - - <p>A binary <code>InterfaceUsage</code> must directly or indirectly specialize the <code>InterfaceUsage</code> <em><code>Interfaces::binaryInterfaces</code></em> from the Systems Model Library.</p> + + + <p>The <code>doAction</code> of a <code>StateUsage</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = do</code>.</p> - + OCL2.0 - ownedEndFeature->size() = 2 implies - specializesFromLibrary('Interfaces::binaryInterfaces') + doAction = + let doMemberships : Sequence(StateSubactionMembership) = + ownedMembership-> + selectByKind(StateSubactionMembership)-> + select(kind = StateSubactionKind::do) in + if doMemberships->isEmpty() then null + else doMemberships->at(1) + endif - - - <p>An <code>InterfaceUsage</code> must directly or indirectly specialize the <code>InterfaceUsage</code> <em><code>Interfaces::interfaces</code></em> from the Systems Model Library.</p> + + + <p>The <code>entryAction</code> of a <code>StateUsage</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = entry</code>.</p> - + OCL2.0 - specializesFromLibrary('Interfaces::interfaces') + entryAction = + let entryMemberships : Sequence(StateSubactionMembership) = + ownedMembership-> + selectByKind(StateSubactionMembership)-> + select(kind = StateSubactionKind::entry) in + if entryMemberships->isEmpty() then null + else entryMemberships->at(1) + endif - - - - <p>The <code>InterfaceDefinitions</code> that type this <code>InterfaceUsage</code>.</p> - - - - - - - - <p>An <code>InterfaceDefinition</code> is a <code>ConnectionDefinition</code> all of whose ends are <code>PortUsages</code>, defining an interface between elements that interact through such ports.</p> - - - - <p>An <code>InterfaceDefinition</code> must directly or indirectly specialize the <code>InterfaceDefinition</code> <em><code>Interfaces::Interface</code></em> from the Systems Model Library.</p> + + + <p>If a <code>StateUsage</code> is parallel, then its <code>nestedActions</code> (which includes <code>nestedStates</code>) must not have any <code>incomingTransitions</code> or <code>outgoingTransitions</code>.</p> - + OCL2.0 - specializesFromLibrary('Interfaces::Interface') + isParallel implies + nestedAction.incomingTransition->isEmpty() and + nestedAction.outgoingTransition->isEmpty() - - - <p>A binary <code>InterfaceDefinition</code> must directly or indirectly specialize the <code>InterfaceDefinition</code> <em><code>Interfaces::BinaryInterface</code></em> from the Systems Model Library.</p> + + + <p>A <code>StateUsage</code> that is a substate usage with a non-parallel owning <code>StateDefinition</code> or <code>StateUsage</code> must directly or indirectly specialize the <code>StateUsage</code> <em><code>States::StateAction::exclusiveStates</code></em> from the Systems Model Library.</p> - + OCL2.0 - ownedEndFeature->size() = 2 implies - specializesFromLibrary('Interfaces::BinaryInterface') + isSubstateUsage(false) implies + specializesFromLibrary('States::StateAction::exclusiveStates') - - - - <p>The <code>PortUsages</code> that are the <code>connectionEnds</code> of this <code>InterfaceDefinition</code>. - - - - - - - - - - <p>An <code>AnalysisCaseDefinition</code> is a <code>CaseDefinition</code> for the case of carrying out an analysis.</p> - - - - <p>The <code>resultExpression</code> of a <code>AnalysisCaseDefinition</code> is the <code>ownedResultExpression</code> of its <code>ResultExpressionMembership</code>, if any.</p> + + + <p>The <code>exitAction</code> of a <code>StateUsage</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = exit +</code>.</p> - + OCL2.0 - resultExpression = - let results : OrderedSet(ResultExpressionMembership) = - featureMembersip-> - selectByKind(ResultExpressionMembership) in - if results->isEmpty() then null - else results->first().ownedResultExpression + exitAction = + let exitMemberships : Sequence(StateSubactionMembership) = + ownedMembership-> + selectByKind(StateSubactionMembership)-> + select(kind = StateSubactionKind::exit) in + if exitMemberships->isEmpty() then null + else exitMemberships->at(1) endif - - - <p>An <code>AnalysisCaseDefinition</code> must directly or indirectly specialize the base <code>AnalysisCaseDefinition</code> <code><em>AnalysisCases::AnalysisCase</em></code> from the Systems Model Library.</p> + + + <p>A <code>StateUsage</code> must directly or indirectly specialize the <code>StateUsage</code> <em><code>States::stateActions</code></em> from the Systems Model Library.</p> - + OCL2.0 - specializesFromLibrary('AnalysisCases::AnalysisCase') + specializesFromLibrary('States::stateActions') - - - - <p>An <code>Expression</code> used to compute the <code>result</code> of the <code>AnalysisCaseDefinition</code>, owned via a <code>ResultExpressionMembership</code>.</p> - - - - - - - - - <p>An <code>AnalysisCaseUsage</code> is a <code>Usage</code> of an <code>AnalysisCaseDefinition</code>.</p> - - - - <p>The <code>resultExpression</code> of a <code>AnalysisCaseUsage</code> is the <code>ownedResultExpression</code> of its <code>ResultExpressionMembership</code>, if any.</p> + + + <p>A <code>StateUsage</code> must not have more than one owned <code>StateSubactionMembership</code> of each <code>kind</code>.</p> - + OCL2.0 - resultExpression = - let results : OrderedSet(ResultExpressionMembership) = - featureMembersip-> - selectByKind(ResultExpressionMembership) in - if results->isEmpty() then null - else results->first().ownedResultExpression - endif + ownedMembership-> + selectByKind(StateSubactionMembership)-> + isUnique(kind) - - - <p>An <code>AnalysisCaseUsage</code> must directly or indirectly specialize the base <code>AnalysisCaseUsage</code> <code><em>AnalysisCases::analysisCases</em></code> from the Systems Model Library.</p> + + + <p>A <code>StateUsage</code> that is a substate usage with a owning <code>StateDefinition</code> or <code>StateUsage</code> that is parallel must directly or indirectly specialize the <code>StateUsage</code> <em><code>States::StateAction::substates</code></em> from the Systems Model Library.</p> - + OCL2.0 - specializesFromLibrary('AnalysisCases::analysisCases') + isSubstateUsage(true) implies + specializesFromLibrary('States::StateAction::substates') - - - <p>A composite <code>AnalysisCaseUsage</code> whose <code>owningType</code> is an <code>AnalysisCaseDefinition</code> or <code>AnalysisCaseUsage</code> must specialize the <code>AnalysisCaseUsage</code> <code><em>AnalysisCases::AnalysisCase::subAnalysisCases</code> from the Systems Model Library.</p> + + + <p>A composite <code>StateUsage</code> whose <code>owningType</code> is a <code>PartDefinition</code> or <code>PartUsage</code> must directly or indirectly specialize the <code>StateUsage</code> <em><code>Parts::Part::ownedStates</code></em> from the Systems Model Library.</p> - + OCL2.0 isComposite and owningType <> null and - (owningType.oclIsKindOf(AnalysisCaseDefinition) or - owningType.oclIsKindOf(AnalysisCaseUsage)) implies - specializesFromLibrary('AnalysisCases::AnalysisCase::subAnalysisCases') +(owningType.oclIsKindOf(PartDefinition) or + owningType.oclIsKindOf(PartUsage)) implies + specializesFromLibrary('Parts::Part::ownedStates') - - - - <p>The <code>AnalysisCaseDefinition</code> that is the <code>definition</code> of this <code>AnalysisCaseUsage</code>.</p> + + + + <p>The <code>Behaviors</code> that are the <code>types</code> of this <code>StateUsage</code>. Nominally, these would be <code>StateDefinitions</code>, but kernel <code>Behaviors</code> are also allowed, to permit use of <code>Behaviors</code> from the Kernel Model Libraries.</p> - - + + - - - <p>An <code>Expression</code> used to compute the <code>result</code> of the <code>AnalysisCaseUsage</code>, owned via a <code>ResultExpressionMembership</code>.</p> + + + <p>The <code>ActionUsage</code> of this <code>StateUsage</code> to be performed on entry to the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateUsage</code> by a <code>StateSubactionMembership</code> with <code>kind = entry</code>.</p> - - + + - - - - - <p>The AnalysisCaseDefinitions that have a certain Expression as their <code>resultExpression</code>.</p> + + + <p>The <code>ActionUsage</code> of this <code>StateUsage</code> to be performed while in the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateUsage</code> by a <code>StateSubactionMembership</code> with <code>kind = do</code>.</p> - - - - - - - - <p>The AnalysisCaseUsages being typed by a certain AnalysisCaseDefinition.</p> + + + + + + <p>The <code>ActionUsage</code> of this <code>StateUsage</code> to be performed on exit to the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateUsage</code> by a <code>StateSubactionMembership</code> with <code>kind = exit</code>.</p> - - - - - - - - <p>The AnalysisCaseUsages that have a certain Expression as their <code>resultExpression</code>.</p> + + + + + + <p>Whether the <code>nestedStates</code> of this <code>StateUsage</code> are to all be performed in parallel. If true, none of the <code>nestedActions</code> (which include <code>nestedStates</code>) may have any incoming or outgoing <code>Transitions</code>. If false, only one <code>nestedState</code> may be performed at a time.</p> + - - - - - - - - <p>The AllocationUsages that have a certain AllocationDefinition as their <code>allocationDefinition</code>.</p> + + + + + + <p>Check if this <code>StateUsage</code> is composite and has an <code>owningType</code> that is a <code>StateDefinition</code> or <code>StateUsage</code> with the given value of <code>isParallel</code>, but is <em>not</em> an <code>entryAction</code>, <code>doAction</code>, or <code>exitAction</code>. If so, then it represents a <code><em>StateAction</em></code> that is a <code><em>substate</em></code> or <code><em>exclusiveState</em></code> (for <code>isParallel = false</code>) of another <code><em>StateAction</em></code>.</p> + + + + OCL2.0 + isComposite and owningType <> null and +(owningType.oclIsKindOf(StateDefinition) and + owningType.oclAsType(StateDefinition).isParallel = isParallel or + owningType.oclIsKindOf(StateUsage) and + owningType.oclAsType(StateUsage).isParallel = isParallel) and +not owningFeatureMembership.oclIsKindOf(StateSubactionMembership) + + + + + + + + + + + + + + <p>The TransitionUsage outgoing from a certain source <tt>ActionUsage</tt>.</p> - - + + - - - <p>An <code>AllocationDefinition</code> is a <code>ConnectionDefinition</code> that specifies that some or all of the responsibility to realize the intent of the <code>source</code> is allocated to the <code>target</code> instances. Such allocations define mappings across the various structures and hierarchies of a system model, perhaps as a precursor to more rigorous specifications and implementations. An <code>AllocationDefinition</code> can itself be refined using nested <code>allocations</code> that give a finer-grained decomposition of the containing allocation mapping.</p> + + + <p>An <code>ExhibitStateUsage</code> is a <code>StateUsage</code> that represents the exhibiting of a <code>StateUsage</code>. Unless it is the <code>StateUsage</code> itself, the <code>StateUsage</code> to be exhibited is related to the <code>ExhibitStateUsage</code> by a <code>ReferenceSubsetting</code> <code>Relationship</code>. An <code>ExhibitStateUsage</code> is also a <code>PerformActionUsage</code>, with its <code>exhibitedState</code> as the <code>performedAction</code>.</p> + - - - <p> The <code>allocations</code> of an <code>AllocationDefinition</code> are all its <code>usages</code> that are <code>AllocationUsages</code>.</p> + + + <p>If an <code>ExhibitStateUsage</code> has an <code>owningType</code> that is a <code>PartDefinition</code> or <code>PartUsage</code>, then it must directly or indirectly specialize the <code>StateUsage</code> <code><em>Parts::Part::exhibitedStates</em></code>.</p> - + OCL2.0 - allocation = usage->selectAsKind(AllocationUsage) + owningType <> null and +(owningType.oclIsKindOf(PartDefinition) or + owningType.oclIsKindOf(PartUsage)) implies + specializesFromLibrary('Parts::Part::exhibitedStates') - - - <p>An <code>AllocationDefinition</code> must directly or indirectly specialize the <code>AllocationDefinition</code> <em><code>Allocations::Allocation</code></em> from the Systems Model Library.</p> + + + <p>If an <code>ExhibitStateUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of the <code>referencedFeature</code> must be a <code>StateUsage</code>.</p> - + OCL2.0 - specializesFromLibrary('Allocations::Allocation') + referencedFeatureTarget() <> null implies + referencedFeatureTarget().oclIsKindOf(StateUsage) - - - - <p>The <code>AllocationUsages</code> that refine the allocation mapping defined by this <code>AllocationDefinition</code>.</p> + + + + + <p>The <code>StateUsage</code> to be exhibited by the <code>ExhibitStateUsage</code>. It is the <code>performedAction</code> of the <code>ExhibitStateUsage</code> considered as a <code>PerformActionUsage</code>, which must be a <code>StateUsage</code>.</p> - - + + - - - - <p>The AllocationDefinitions that feature a certain <code>allocation</code>.</p> + + + + <p>The TransitionUsage incoming to a certain target <tt>ActionUsage</tt>.</p> - - + + - - - <p>An <code>AllocationUsage</code> is a usage of an <code>AllocationDefinition</code> asserting the allocation of the <code>source</code> feature to the <code>target</code> feature.</p> + + + <p>A <code>TransitionActionKind</code> indicates whether the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is a trigger, guard or effect.</p> - - - <p>An <code>AllocationUsage</code> must directly or indirectly specialize the <code>AllocationUsage</code> <em><code>Allocations::allocations</code></em> from the Systems Model Library.</p> + + + <p>Indicates that the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is a <code>triggerAction</code>.</p> - - OCL2.0 - specializesFromLibrary('Allocations::allocations') - - - - - - <p>The <code>AllocationDefinitions</code> that are the types of this <code>AllocationUsage</code>.</p> + + + + <p>Indicates that the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is a <code>guardExpression</code>.</p> - - - + + + + <p>Indicates that the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is an <code>effectAction</code>.</p> + + - - - <p>A <code>VariantMembership</code> is a <code>Membership</code> between a variation point <code>Definition</code> or <code>Usage</code> and a <code>Usage</code> that represents a variant in the context of that variation. The <code>membershipOwningNamespace</code> for the <code>VariantMembership</code> must be either a Definition or a <code>Usage</code> with <code>isVariation = true</code>.</p> + + + + <p>The StateDefinitions with a certain <tt>exitAction</tt>.</p> + + + + + + + + <p>A <code>TransitionFeatureMembership</code> is a <code>FeatureMembership</code> for a trigger, guard or effect of a <code>TransitionUsage</code>, whose <code>transitionFeature</code> is a <code>AcceptActionUsage</code>, <em><code>Boolean</code></em>-valued <code>Expression</code> or <code>ActionUsage</code>, depending on its <code>kind</code>. </p> - - - <p>The <code>membershipOwningNamespace</code> of a <code>VariantMembership</code> must be a variation-point <code>Definition</code> or <code>Usage</code>.</p> + + + <p>If the <code>kind</code> of a <code>TransitionUsage</code> is <code>trigger</code>, then its <code>transitionFeature</code> must be a kind of <code>AcceptActionUsage</code>.</p> - + OCL2.0 - membershipOwningNamespace.oclIsKindOf(Definition) and - membershipOwningNamespace.oclAsType(Definition).isVariation or -membershipOwningNamespace.oclIsKindOf(Usage) and - membershipOwningNamespace.oclAsType(Usage).isVariation - + kind = TransitionFeatureKind::trigger implies + transitionFeature.oclIsKindOf(AcceptActionUsage) - - - - <p>The <code>Usage</code> that represents a variant in the context of the <code>owningVariationDefinition</code> or <code>owningVariationUsage</code>.</p> - - - - - - - - - <p>The Usage that owns a certain <code>nestedView</code>.</p> + + + <p>The <code>owningType</code> of a <code>TransitionFeatureMembership</code> must be a <code>TransitionUsage</code>.</p> - - - - - - - - <p>The Usage in which the <code>nestedItem</code> is nested.</p> + + OCL2.0 + owningType.oclIsKindOf(TransitionUsage) + + + + + <p>If the <code>kind</code> of a <code>TransitionUsage</code> is <code>guard</code>, then its <code>transitionFeature</code> must be a kind of <code>Expression</code> whose result is a <em><code>Boolean</code></em> value.</p> - - - - - - - - <p>The Usage in which the <code>nestedOccurrence</code> is nested.</p> + + OCL2.0 + kind = TransitionFeatureKind::guard implies + transitionFeature.oclIsKindOf(Expression) and + let guard : Expression = transitionFeature.oclIsKindOf(Expression) in + guard.result.specializesFromLibrary('ScalarValues::Boolean') and + guard.result.multiplicity <> null and + guard.result.multiplicity.hasBounds(1,1) + + + + + <p>If the <code>kind</code> of a <code>TransitionUsage</code> is <code>effect</code>, then its <code>transitionFeature</code> must be a kind of <code>ActionUsage</code>.</p> - - - - - - - - <p>The Definition that owns the <code>ownedAction</code>.</p> + + OCL2.0 + kind = TransitionFeatureKind::effect implies + transitionFeature.oclIsKindOf(ActionUsage) + + + + + + <p>Whether this <code>TransitionFeatureMembership </code> is for a <code>trigger</code>, <code>guard</code> or <code>effect</code>.</p> - - - - - - - - <p>The Usage in which the <code>nestedUsage</code> is nested.</p> + + + + <p>The <code>Step</code> that is the <code>ownedMemberFeature</code> of this <code>TransitionFeatureMembership</code>.</p> - - - + + + - - - - <p>The Usage that owns the <code>nestedAllocation</code>.</p> + + + + <p>The StateDefinitions with a certain <tt>entryAction</tt>.</p> - - + + - - - - <p>The Usage in which the <code>nestedAction</code> is nested.</p> + + + + <p>The StateDefinitions with a certain <tt>doAction</tt>.</p> - - + + - - - - <p>The Usages that feature a certain Usage.</p> + + + + <p>The Transition that owns a certain Succession.</p> - - + + - - - - <p>The Definition that owns the <code>ownedPort</code>.</p> + + + + <p>The TransitionUsage that has a certain <tt>effectAction</tt>.</p> - - + + - - - - <p>The Definition that owns the <code>ownedTransition</code>.</p> + + + + <p>The TransitionFeatureMembership that owns a certain Step (if any).</p> - - + + - - - - <p>The Usage in which the <code>nestedInterface</code> is nested.</p> + + + + <p>The StateDefinitions featuring a certain StateUsage.</p> - - + + - - - - <p>The Definition that owns the <code>ownedMetadata</code>.</p> + + + + <p>The StateUsages with a certain <tt>exitAction</tt>.</p> - - + + - - - - <p>The variation point Definition that for which this Usage represents a variant, derived as the <code>owningVariationDefinition</code> of the <code>owningVariantMembership</code> of the Usage.</p> + + + + <p>The Behaviors that are the types of this StateUsage. Nominally, these would be StateDefinition, but non-StateDefinition Behaviors are also allowed, to permit use of Behaviors from the Kernel Library.</p> - - + + - - - - - <p>The Definition that owns the <code>ownedState</code>.</p> + + + + <p>The StateUsages with a certain <tt>doAction</tt>.</p> - - + + - - - <p>The Definition that owns this CaseUsage (if any).</p> + + + <p>A <code>StateSubactionKind</code> indicates whether the <code>action</code> of a StateSubactionMembership is an entry, do or exit action.</p> - - - <p>The Definition that owns the <code>ownedCase</code>.</p> + + + <p>Indicates that the <code>action</code> of a <code>StateSubactionMembership</code> is an <code>entryAction</code>.</p> - - + + + + <p>Indicates that the <code>action</code> of a <code>StateSubactionMembership</code> is a <code>doAction</code>.</p> + + + + + <p>Indicates that the <code>action</code> of a <code>StateSubactionMembership</code> is an <code>exitAction</code>.</p> + + + + + + + <p>The TransitionUsage that is triggered by a certain AcceptActionUsage.</p> + + + - - - - <p>The owning Definition of this VariantMembership, which must have <code>isVariation</code> = true.</p> + + + + <p>The TransitionUsage that is guarded by a certain Expression.</p> - - + + - - - - <p>The Definition that owns the <code>ownedAllocation</code>.</p> + + + + <p>The ExhibitStateUsages that have a certain StateUsage as their <tt>exhibitedState</tt>.</p> - - + + - - - - <p>The Usage in which the <code>nestedAttribute</code> is nested.</p> + + + + <p>The StateSubactionMembership that is the owner of a certain ActionUsage (if any).</p> - - + + - - - - <p>The Definition that owns a certain <code>ownedViewpoint</code>.</p> + + + + <p>The StateUsages with a certain <tt>entryAction</tt>.</p> - - + + - - - <p>A <code>Definition</code> is a <code>Classifier</code> of <code>Usages</code>. The actual kinds of <code>Definition</code> that may appear in a model are given by the subclasses of <code>Definition</code> (possibly as extended with user-defined <em><code>SemanticMetadata</code></em>).</p> - -<p>Normally, a <code>Definition</code> has owned Usages that model <code>features</code> of the thing being defined. A <code>Definition</code> may also have other <code>Definitions</code> nested in it, but this has no semantic significance, other than the nested scoping resulting from the <code>Definition</code> being considered as a <code>Namespace</code> for any nested <code>Definitions</code>.</p> + + + <p>A <code>TransitionUsage</code> is an <code>ActionUsage</code> representing a triggered transition between <code>ActionUsages</code> or <code>StateUsages</code>. When triggered by a <code>triggerAction</code>, when its <code>guardExpression</code> is true, the <code>TransitionUsage</code> asserts that its <code>source</code> is exited, then its <code>effectAction</code> (if any) is performed, and then its <code>target</code> is entered.</p> -<p>However, if a <code>Definition</code> has <code>isVariation</code> = <code>true</code>, then it represents a <em>variation point</em> <code>Definition</code>. In this case, all of its <code>members</code> must be <code>variant</code> <code>Usages</code>, related to the <code>Definition</code> by <code>VariantMembership</code> <code>Relationships</code>. Rather than being <code>features</code> of the <code>Definition</code>, <code>variant</code> <code>Usages</code> model different concrete alternatives that can be chosen to fill in for an abstract <code>Usage</code> of the variation point <code>Definition</code>.</p> - +<p>A <code>TransitionUsage</code> can be related to some of its <code>ownedFeatures</code> using <code>TransitionFeatureMembership</code> <code>Relationships</code>, corresponding to the <code>triggerAction</code>, <code>guardExpression</code> and <code>effectAction</code> of the <code>TransitionUsage</code>.</p> - - - <p>If a <code>Definition</code> is a variation, then all it must not have any <code>ownedFeatureMemberships</code>.</p> + + + <p>A composite <code>TransitionUsage</code> whose <code>owningType</code> is an <code>ActionDefinition</code> or <code>ActionUsage</code> and whose <code>source</code> is <em>not</em> a <code>StateUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::decisionTransitions</code></em> from the Systems Model Library.</p> - + OCL2.0 - isVariation implies ownedFeatureMembership->isEmpty() + isComposite and owningType <> null and +(owningType.oclIsKindOf(ActionDefinition) or + owningType.oclIsKindOf(ActionUsage)) and +source <> null and not source.oclIsKindOf(StateUsage) implies + specializesFromLibrary('Actions::Action::decisionTransitions') - - - <p>The <code>variants</code> of a <code>Definition</code> are the <code>ownedVariantUsages</code> of its <code>variantMemberships</code>.</p> + + + <p>A composite <code>TransitionUsage</code> whose <code>owningType</code> is a <code>StateDefinition</code> or <code>StateUsage</code> and whose <code>source</code> is a <code>StateUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>States::StateAction::stateTransitions</code></em> from the Systems Model Library</p> - + OCL2.0 - variant = variantMembership.ownedVariantUsage + isComposite and owningType <> null and +(owningType.oclIsKindOf(StateDefinition) or + owningType.oclIsKindOf(StateUsage)) and +source <> null and source.oclIsKindOf(StateUsage) implies + specializesFromLibrary('States::StateAction::stateTransitions') + - - - <p>The <code>variantMemberships</code> of a <code>Definition</code> are those <code>ownedMemberships</code> that are <code>VariantMemberships</code>.</p> + + + <p>A <code>TransitionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::transitionActions</code></em> from the Systems Model Library.</p> - + OCL2.0 - variantMembership = ownedMembership->selectByKind(VariantMembership) + specializesFromLibrary('Actions::transitionActions') - - - <p>A variation <code>Definition</code> may not specialize any other variation <code>Definition</code>.</p> + + + <p>The <code>source</code> of a <code>TransitionUsage</code> is <code>featureTarget</code> of the result of <code>sourceFeature()</code>, which must be an <code>ActionUsage</code>.</p> - + OCL2.0 - isVariation implies - not ownedSpecialization.specific->exists( - oclIsKindOf(Definition) and - oclAsType(Definition).isVariation) + source = + let sourceFeature : Feature = sourceFeature() in + if sourceFeature = null then null + else sourceFeature.featureTarget.oclAsType(ActionUsage) - - - <p>The <code>usages</code> of a <code>Definition</code> are all its <code>features</code> that are <code>Usages</code>.</p> + + + <p>The <code>target</code> of a <code>TransitionUsage</code> is given by the <code>featureTarget</code> of the <code>targetFeature</code> of its <code>succession</code>, which must be an <code>ActionUsage</code>.</p> + + + OCL2.0 + target = + if succession.targetFeature->isEmpty() then null + else + let targetFeature : Feature = + succession.targetFeature->first().featureTarget in + if not targetFeature.oclIsKindOf(ActionUsage) then null + else targetFeature.oclAsType(ActionUsage) + endif + endif + + + + + + <p>The <code>triggerActions</code> of a <code>TransitionUsage</code> are the <code>transitionFeatures</code> of the <code>ownedFeatureMemberships</code> of the <code>TransitionUsage</code> with <code>kind = trigger</code>, which must all be <code>AcceptActionUsages</code>.</p> + + + OCL2.0 + triggerAction = ownedFeatureMembership-> + selectByKind(TransitionFeatureMembership)-> + select(kind = TransitionFeatureKind::trigger).transitionFeature-> + selectByKind(AcceptActionUsage) + + + + + <p>A <code>TransitionUsage</code> must have an <code>ownedMember</code> that is a <code>Succession</code> with an <code>ActionUsage</code> as the <code>featureTarget</code> of its <code>targetFeature</code>.</p> - + OCL2.0 - usage = feature->selectByKind(Usage) + let successions : Sequence(Successions) = + ownedMember->selectByKind(Succession) in +successions->notEmpty() and +successions->at(1).targetFeature.featureTarget-> + forAll(oclIsKindOf(ActionUsage)) - - - <p>The <code>directedUsages</code> of a <code>Definition</code> are all its <code>directedFeatures</code> that are <code>Usages</code>.</p> + + + <p>The <code>triggerActions</code> of a <code>TransitionUsage</code> are the <code>transitionFeatures</code> of the <code>ownedFeatureMemberships</code> of the <code>TransitionUsage</code> with <code>kind = trigger</code>, which must all be <code>Expressions</code>.</p> - + OCL2.0 - directedUsage = directedFeature->selectByKind(Usage) + guardExpression = ownedFeatureMembership-> + selectByKind(TransitionFeatureMembership)-> + select(kind = TransitionFeatureKind::trigger).transitionFeature-> + selectByKind(Expression) - - - <p>The <code>ownedUsages</code> of a <code>Definition</code> are all its <code>ownedFeatures</code> that are <code>Usages</code>.</p> + + + <p>The <code>triggerActions</code>, <code>guardExpressions</code>, and <code>effectActions</code> of a <code>TransitionUsage</code> must specialize, respectively, the <em><code>accepter</code></em>, <em><code>guard</code></em>, and <em><code>effect</code></em> <code>features</code> of the <code>ActionUsage</code> <em><code>Actions::TransitionActions</code></em> from the Systems Model Library.</p> - + OCL2.0 - ownedUsage = ownedFeature->selectByKind(Usage) + triggerAction->forAll(specializesFromLibrary('Actions::TransitionAction::accepter') and +guardExpression->forAll(specializesFromLibrary('Actions::TransitionAction::guard') and +effectAction->forAll(specializesFromLibrary('Actions::TransitionAction::effect')) - - - <p>The <code>ownedAttributes</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>AttributeUsages</code>.</p> + + + <p>The <code>effectActions</code> of a <code>TransitionUsage</code> are the <code>transitionFeatures</code> of the <code>ownedFeatureMemberships</code> of the <code>TransitionUsage</code> with <code>kind = effect</code>, which must all be <code>ActionUsages</code>.</p> - + OCL2.0 - ownedAttribute = ownedUsage->selectByKind(AttributeUsage) + triggerAction = ownedFeatureMembership-> + selectByKind(TransitionFeatureMembership)-> + select(kind = TransitionFeatureKind::trigger).transitionFeatures-> + selectByKind(AcceptActionUsage) - - - <p>The <code>ownedReferences</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ReferenceUsages</code>.</p> + + + <p>The <code>sourceFeature</code> of the <code>succession</code> of a <code>TransitionUsage</code> must be the <code>source</code> of the <code>TransitionUsage</code> (i.e., the first <code>connectorEnd</code> of the <code>succession</code> must have a <code>ReferenceSubsetting</code> <code>Relationship</code> with the <code>source</code>).</p> - + OCL2.0 - ownedReference = ownedUsage->selectByKind(ReferenceUsage) + succession.sourceFeature = source - - - <p>The <code>ownedEnumerations</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>EnumerationUsages</code>.</p> + + + <p>A <code>TransitionUsage</code> must have an <code>ownedMember</code> that is a <code>BindingConnector</code> between its <code>source</code> and its first input <code>parameter</code> (which redefines <code><em>Actions::TransitionAction::transitionLinkSource</em></code>).</p> - + OCL2.0 - ownedEnumeration = ownedUsage->selectByKind(EnumerationUsage) + ownedMember->selectByKind(BindingConnector)->exists(b | + b.relatedFeatures->includes(source) and + b.relatedFeatures->includes(inputParameter(1))) - - - <p>The <code>ownedOccurrences</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>OccurrenceUsages</code>.</p> + + + <p>If a <code>TransitionUsage</code> has a <code>triggerAction</code>, then the <em><code>payload</code></em> <code>parameter</code> of the <code>TransitionUsage</code> subsets the <code>Feature</code> chain of the <code>triggerAction</code> and its <code>payloadParameter</code>.</p> - + OCL2.0 - ownedOccurrence = ownedUsage->selectByKind(OccurrenceUsage) + triggerAction->notEmpty() implies + let payloadParameter : Feature = inputParameter(2) in + payloadParameter <> null and + payloadParameter.subsetsChain(triggerAction->at(1), triggerPayloadParameter()) - - - <p>The <code>ownedItems</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ItemUsages</code>.</p> + + + <p>A <code>TransitionUsage</code> must have an <code>ownedMember</code> that is a <code>BindingConnector</code> between its <code>succession</code> and the inherited <code>Feature</code> <code><em>TransitionPerformances::TransitionPerformance::transitionLink</em></code>.</p> - + OCL2.0 - ownedItem = ownedUsage->selectByKind(ItemUsage) + ownedMember->selectByKind(BindingConnector)->exists(b | + b.relatedFeatures->includes(succession) and + b.relatedFeatures->includes(resolveGlobal( + 'TransitionPerformances::TransitionPerformance::transitionLink'))) - - - <p>The <code>ownedParts</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>PartUsages</code>.</p> + + + <p>A <code>TransitionUsage</code> must have at least one owned input <code>parameter</code> and, if it has a <code>triggerAction</code>, it must have at least two.</p> - + OCL2.0 - ownedPart = ownedUsage->selectByKind(PartUsage) + if triggerAction->isEmpty() then + inputParameters()->size() >= 1 +else + inputParameters()->size() >= 2 +endif + - - - <p>The <code>ownedPorts</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>PortUsages</code>.</p> + + + <p>The <code>succession</code> of a <code>TransitionUsage</code> is its first <code>ownedMember</code> that is a <code>Succession</code>.</p> - + OCL2.0 - ownedPort = ownedUsage->selectByKind(PortUsage) + succession = ownedMember->selectByKind(Succession)->at(1) - - - <p>The <code>ownedConnections</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ConnectorAsUsages</code>.</p> + + + <p>If the <code>source</code> of a <code>TransitionUsage</code> is <em>not</em> a <code>StateUsage</code>, then the <code>TransitionUsage</code> must not have any <code>triggerActions</code>.</p> - + OCL2.0 - ownedConnection = ownedUsage->selectByKind(ConnectorAsUsage) + source <> null and not source.oclIsKindOf(StateUsage) implies + triggerAction->isEmpty() - - - <p>The <code>ownedFlows</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>FlowUsages</code>.</p> + + + + <p>The source <code>ActionUsage</code> of this <code>TransitionUsage</code>, which becomes the <code>source</code> of the <code>succession</code> for the <code>TransitionUsage</code>.</p> - + + + + + + <p>The target <code>ActionUsage</code> of this <code>TransitionUsage<code>, which is the <code>targetFeature</code> of the <code>succession</code> for the <code>TransitionUsage</code>.</p> + + + + + + + <p>The <code>AcceptActionUsages</code> that define the triggers of this <code>TransitionUsage</code>, which are the <code>ownedFeatures</code> of the <code>TransitionUsage</code> related to it by <code>TransitionFeatureMemberships</code> with <code>kind = trigger</code>, which must all be <code>AcceptActionUsages</code>.</p> + + + + + + + <p>The <code>Expressions</code> that define the guards of this <code>TransitionUsage</code>, which are the <code>ownedFeatures</code> of the <code>TransitionUsage</code> related to it by <code>TransitionFeatureMemberships</code> with <code>kind = guard</code>, which must all be <code>Expressions</code>.</p> + + + + + + + <p>The <code>ActionUsages</code> that define the effects of this <code>TransitionUsage</code>, which are the <code>ownedFeatures</code> of the <code>TransitionUsage</code> related to it by <code>TransitionFeatureMemberships</code> with <code>kind = effect</code>, which must all be <code>ActionUsages</code>.</p> + + + + + + + <p>The <code>Succession</code> that is the <code>ownedFeature</code> of this <code>TransitionUsage</code>, which, if the <code>TransitionUsage</code> is triggered, asserts the temporal ordering of the <code>source</code> and <code>target</code>.</p> + + + + + + + <p>Return the <code>payloadParameter</code> of the <code>triggerAction</code> of this <code>TransitionUsage</code>, if it has one.</p> + + + + OCL2.0 + if triggerAction->isEmpty() then null +else triggerAction->first().payloadParameter +endif + + + + + + + + + + <p>Return the <code>Feature</code> to be used as the <code>source</code> of the <code>succession</code> of this <code>TransitionUsage</code>, which is the first <code>member</code> of the <code>TransitionUsage</code> that is a <code>Feature</code>, that is owned by the <code>TransitionUsage</code> via a <code>Membership</code> that is <em>not</em> a <code>FeatureMembership</code>, and whose <code>featureTarget</code> is an <code>ActionUsage</code>.</p> + + + + OCL2.0 + let features : Sequence(Feature) = ownedMembership-> + reject(oclIsKindOf(FeatureMembership)).memberElement-> + selectByKind(Feature)-> + select(featureTarget.oclIsKindOf(ActionUsage)) in +if features->isEmpty() then null +else features->first() +endif + + + + + + + + + + + <p>A <code>StateSubactionMembership</code> is a <code>FeatureMembership</code> for an entry, do or exit <code>ActionUsage<code> of a <code>StateDefinition</code> or <code>StateUsage</code>.</p> + + + + <p>The <code>owningType</code> of a <code>StateSubactionMembership</code> must be a <code>StateDefinition</code> or a <code>StateUsage</code>.</p> + + OCL2.0 - ownedFlow = ownedUsage->selectByKind(FlowConnectionUsage) + owningType.oclIsKindOf(StateDefinition) or +owningType.oclIsKindOf(StateUsage) - - - <p>The <code>ownedInterfaces</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>InterfaceUsages</code>.</p> + + + + <p>Whether this <code>StateSubactionMembership</code> is for an <code>entry<code>, <code>do</code> or <code>exit</code> <code>ActionUsage</code>.</p> - + + + + <p>The <code>ActionUsage</code> that is the <code>ownedMemberFeature</code> of this <code>StateSubactionMembership</code>.</p> + + + + + + + + <p>A <code>StateDefinition</code> is the <code>Definition</code> of the </code>Behavior</code> of a system or part of a system in a certain state condition.</p> + +<p>A <code>StateDefinition</code> may be related to up to three of its <code>ownedFeatures</code> by <code>StateBehaviorMembership</code> <code>Relationships</code>, all of different <code>kinds</code>, corresponding to the entry, do and exit actions of the <code>StateDefinition</code>.</p> + + + + <p>A <code>StateDefinition</code> must directly or indirectly specialize the <code>StateDefinition</code> <em><code>States::StateAction</code></em> from the Systems Model Library.</p> + + OCL2.0 - ownedInterface = ownedUsage->selectByKind(ReferenceUsage) + specializesFromLibrary('States::StateAction') - - - <p>The <code>ownedAllocations</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>AllocationUsages</code>.</p> + + + <p>A <code>StateDefinition</code> must not have more than one owned <code>StateSubactionMembership</code> of each <code>kind</code>.</p> - + OCL2.0 - ownedAllocation = ownedUsage->selectByKind(AllocationUsage) + ownedMembership-> + selectByKind(StateSubactionMembership)-> + isUnique(kind) - - - <p>The <code>ownedActions</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ActionUsages</code>.</p> + + + <p>The <code>states</code> of a <code>StateDefinition</code> are those of its <code>actions</code> that are <code>StateUsages</code>.</p> - + OCL2.0 - ownedAction = ownedUsage->selectByKind(ActionUsage) + state = action->selectByKind(StateUsage) - - - <p>The <code>ownedStates</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>StateUsages</code>.</p> + + + <p>The <code>doAction</code> of a <code>StateDefinition</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = do</code>.</p> - + OCL2.0 - ownedState = ownedUsage->selectByKind(StateUsage) + doAction = + let doMemberships : Sequence(StateSubactionMembership) = + ownedMembership-> + selectByKind(StateSubactionMembership)-> + select(kind = StateSubactionKind::do) in + if doMemberships->isEmpty() then null + else doMemberships->at(1) + endif - - - <p>The <code>ownedTransitions</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>TransitionUsages</code>.</p> + + + <p>The <code>entryAction</code> of a <code>StateDefinition</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = entry</code>.</p> - + OCL2.0 - ownedTransition = ownedUsage->selectByKind(TransitionUsage) + entryAction = + let entryMemberships : Sequence(StateSubactionMembership) = + ownedMembership-> + selectByKind(StateSubactionMembership)-> + select(kind = StateSubactionKind::entry) in + if entryMemberships->isEmpty() then null + else entryMemberships->at(1) + endif - - - <p>The <code>ownedCalculations</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>CalculationUsages</code>.</p> + + + <p>If a <code>StateDefinition</code> is parallel, then its <code>ownedActions</code> (which includes its <code>ownedStates</code>) must not have any <code>incomingTransitions</code> or <code>outgoingTransitions</code>.</p> - + OCL2.0 - ownedCalculation = ownedUsage->selectByKind(CalculationUsage) + isParallel implies + ownedAction.incomingTransition->isEmpty() and + ownedAction.outgoingTransition->isEmpty() - - - <p>The <code>ownedConstraints</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ConstraintUsages</code>.</p> + + + <p>The <code>exitAction</code> of a <code>StateDefinition</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = exit +</code>.</p> - + OCL2.0 - ownedConstraint = ownedUsage->selectByKind(ConstraintUsage) + exitAction = + let exitMemberships : Sequence(StateSubactionMembership) = + ownedMembership-> + selectByKind(StateSubactionMembership)-> + select(kind = StateSubactionKind::exit) in + if exitMemberships->isEmpty() then null + else exitMemberships->at(1) + endif - - - <p>The <code>ownedRequirements</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>RequirementUsages</code>.</p> + + + + <p>The <code>StateUsages</code>, which are <code>actions</code> in the <code>StateDefinition</code>, that specify the discrete states in the behavior defined by the <code>StateDefinition</code>.</p> - + + + + + + <p>The <code>ActionUsage</code> of this <code>StateDefinition</code> to be performed on entry to the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateDefinition</code> by a <code>StateSubactionMembership</code> with <code>kind = entry</code>.</p> + + + + + + + <p>The <code>ActionUsage</code> of this <code>StateDefinition</code> to be performed while in the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateDefinition</code> by a <code>StateSubactionMembership</code> with <code>kind = do</code>.</p> + + + + + + + <p>The <code>ActionUsage</code> of this <code>StateDefinition</code> to be performed on exit to the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateDefinition</code> by a <code>StateSubactionMembership</code> with <code>kind = exit</code>.</p> + + + + + + + <p>Whether the <code>ownedStates</code> of this <code>StateDefinition</code> are to all be performed in parallel. If true, none of the <code>ownedActions</code> (which includes <code>ownedStates</code>) may have any incoming or outgoing <code>Transitions</code>. If false, only one <code>ownedState</code> may be performed at a time.</p> + + + + + + + + + <p>An <code>ItemDefinition</code> is an <code>OccurrenceDefinition</code> of the <code>Structure</code> of things that may themselves be systems or parts of systems, but may also be things that are acted on by a system or parts of a system, but which do not necessarily perform actions themselves. This includes items that can be exchanged between parts of a system, such as water or electrical signals.</p> + + + + + <p>An <code>ItemDefinition</code> must directly or indirectly specialize the Systems Library Model <code>ItemDefinition</code> <em><code>Items::Item</code>.</p> + + OCL2.0 - ownedRequirement = ownedUsage->selectByKind(RequirementUsage) + specializesFromLibrary('Items::Item') - - - <p>The <code>ownedConcerns</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ConcernUsages</code>.</p> + + + + + + <p>An <code>ItemUsage</code> is an <code>OccurrenceUsage</code> whose <code>definition</code> is a <code>Structure</code>. Nominally, if the <code>definition</code> is an <code>ItemDefinition</code>, an <code>ItemUsage</code> is a <code>ItemUsage</code> of that <code>ItemDefinition</code> within a system. However, other kinds of Kernel <code>Structures</code> are also allowed, to permit use of <code>Structures</code> from the Kernel Model Libraries.</p> + + + + <p>The <code>itemDefinitions</code> of an <code>ItemUsage</code> are those <code>occurrenceDefinitions</code> that are <code>Structures</code>.</p> - + OCL2.0 - ownedConcern = ownedUsage->selectByKind(ConcernUsage) + itemDefinition = occurrenceDefinition->selectByKind(Structure) - - - <p>The <code>ownedCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>CaseUsages</code>.</p> + + + <p>An <code>ItemUsage</code> must directly or indirectly specialize the Systems Model Library <code>ItemUsage</code> <em><code>items</code></em>.</p> - + OCL2.0 - ownedCase = ownedUsage->selectByKind(CaseUsage) + specializesFromLibrary('Items::items') - - - <p>The <code>ownedAnalysisCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>AnalysisCaseUsages</code>.</p> + + + <p>A composite <code>ItemUsage</code> whose <code>owningType</code> is an <code>ItemDefinition</code> or <code>ItemUsage</code> must directly or indirectly specialize the Systems Model Library <code>ItemUsage</code> <em><code>Items::Item::subitems</code></em>.</p> - + OCL2.0 - ownedAnalysisCase = ownedUsage->selectByKind(AnalysisCaseUsage) + isComposite and owningType <> null and +(owningType.oclIsKindOf(ItemDefinition) or + owningType.oclIsKindOf(ItemUsage)) implies + specializesFromLibrary('Items::Item::subitem') - - - <p>The <code>ownedValidationCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ValidationCaseUsages</code>.</p> + + + + <p>The Structures that are the <code>definitions</code> of this ItemUsage. Nominally, these are ItemDefinitions, but other kinds of Kernel Structures are also allowed, to permit use of Structures from the Kernel Library.</p> - + + + + + + + + <p>The EnumerationDefinition that owns a certain <code>enumeratedValue</code>.</p> + + + + + + + + + <p>The EnumerationUsages that are typed by a certain EnumerationDefinition.</p> + + + + + + + + <p>An <code>EnumerationUsage</code> is an <code>AttributeUsage</code> whose <code>attributeDefinition</code> is an <code>EnumerationDefinition</code>.</p> + + + + + <p>The single EnumerationDefinition that is the type of this EnumerationUsage.</p> + + + + + + + + <p>An <code>EnumerationDefinition</code> is an <code>AttributeDefinition</code> all of whose instances are given by an explicit list of <code>enumeratedValues</code>. This is realized by requiring that the <code>EnumerationDefinition</code> have <code>isVariation = true</code>, with the <code>enumeratedValues</code> being its <code>variants</code>.</p> + + + + <p>An <code>EnumerationDefinition</code> must be a variation.</p> + + OCL2.0 - ownedVerificationCase = ownedUsage->selectByKind(VerificationCaseUsage) + isVariation - - - <p>The <code>ownedUseCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>UseCaseUsages</code>.</p> + + + + <p><code>EnumerationUsages</code> of this <code>EnumerationDefinition</code>that have distinct, fixed values. Each <code>enumeratedValue</code> specifies one of the allowed instances of the <code>EnumerationDefinition</code>.</p> + + + + + + + <p>An EnumerationDefinition is considered semantically to be a variation whose allowed variants are its <code>enumerationValues</code>.</p> + + + + + + + + <p>A <code>ForkNode</code> is a <code>ControlNode</code> that must be followed by successor <code>Actions</code> as given by all its outgoing <code>Successions</code>.</p> + + + + <p>A <code>ForkNode</code> may have at most one incoming <code>Succession</code>.</p> - + OCL2.0 - ownedUseCase = ownedUsage->selectByKind(UseCaseUsage) + targetConnector->selectByKind(Succession)->size() <= 1 - - - <p>The <code>ownedViews</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ViewUsages</code>.</p> + + + <p>A <code>ForkNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::forks</code></em> from the Systems Model Library.</p> - + OCL2.0 - ownedView = ownedUsage->selectByKind(ViewUsage) + specializesFromLibrary('Actions::Action::forks') - - - <p>The <code>ownedViewpoints</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ViewpointUsages</code>.</p> + + + + + + <p>The <code>IfActionUsage</code> that has a certain <code>ActionUsage</code> as its <code>thenAction</code>.</p> - + + + + + + + <p>A <code>DecisionNode</code> is a <code>ControlNode</code> that makes a selection from its outgoing <code>Successions</code>.</p> + + + + <p>A <code>DecisionNode</code> may have at most one incoming <code>Succession</code>.</p> + + OCL2.0 - ownedViewpoint = ownedUsage->selectByKind(ViewpointUsage) + targetConnector->selectByKind(Succession)->size() <= 1 - - - <p>The <code>ownedRenderings</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>RenderingUsages</code>.</p> + + + <p>All outgoing <code>Successions</code> from a <code>DecisionNode</code> must have a target <code>multiplicity</code> of <code>0..1</code>.</p> - + OCL2.0 - ownedRendering = ownedUsage->selectByKind(RenderingUsage) + sourceConnector->selectAsKind(Succession)-> + collect(connectorEnd->at(2))-> + forAll(targetMult | + multiplicityHasBounds(targetMult, 0, 1)) - - - <p>The <code>ownedMetadata</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>MetadataUsages</code>.</p> + + + <p>A <code>DecisionNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::decisions</code></em> from the Systems Model Library.</p> - + OCL2.0 - ownedMetadata = ownedUsage->selectByKind(MetadataUsage) + specializesFromLibrary('Actions::Action::decisions') - - - <p>If a <code>Definition</code> is a variation, then it must be abstract.</p> + + + <p>All outgoing <code>Successions</code> from a <code>DecisionNode</code> must subset the inherited <em><code>outgoingHBLink</code></em> <code>feature</code> of the <code>DecisionNode</code>.</p> - + OCL2.0 - isVariation implies isAbstract + sourceConnector->selectByKind(Succession)-> + forAll(subsetsChain(self, + resolveGlobal('ControlPerformances::DecisionPerformance::outgoingHBLink'))) - - - - <p>Whether this <code>Definition</code> is for a variation point or not. If true, then all the <code>memberships</code> of the <code>Definition</code> must be <code>VariantMemberships</code>.</p> - - - - - - <p>The <code>Usages</code> which represent the variants of this <code>Definition</code> as a variation point <code>Definition</code>, if <code>isVariation</code> = true. If <code>isVariation = false</code>, the there must be no <code>variants</code>.</p> - - - - - - - <p>The <code>ownedMemberships</code> of this <code>Definition</code> that are <code>VariantMemberships</code>. If <code>isVariation</code> = true, then this must be all <code>ownedMemberships</code> of the <code>Definition</code>. If <code>isVariation</code> = false, then <code>variantMembership</code>must be empty.</p> - - - - - - - <p>The <code>Usages</code> that are <code>features</code> of this <code>Definition</code> (not necessarily owned).</p> - - - - - - - <p>The <code>usages</code> of this <code>Definition</code> that are <code>directedFeatures</code>.</p> - - - - - - - - <p>The <code>Usages</code> that are <code>ownedFeatures</code> of this <code>Definition</code>.</p> - - - - - - - <p>The <code>ReferenceUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - - - - - - <p>The <code>AttributeUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.<p> - - - - - - - <p>The <code>EnumerationUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.<p> - - - - - - - <p>The <code>OccurrenceUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - - - - - - <p>The <code>ItemUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - - - - - - <p>The <code>PartUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - - - - - - <p>The <code>PortUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - - - - - - <p>The <code>ConnectorAsUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>. Note that this list includes <code>BindingConnectorAsUsages</code>, <code>SuccessionAsUsages</code>, and <code>FlowUsages</code> because these are <code>ConnectorAsUsages</code> even though they are not <code>ConnectionUsages</code>.</p> - - - - - - - <p>The <code>FlowUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - - - - - - <p>The <code>InterfaceUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - - - - - - <p>The <code>AllocationUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - - - - - - <p>The <code>ActionUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - - - - - - <p>The <code>StateUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - - - - - - <p>The <code>TransitionUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - - - - - - <p>The <code>CalculationUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + + + + + + + + The <code>ForLoopActionUsage</code> that has a certain <code>ReferenceUsage</code> as its <code>loopVariable</code>. - - - - - - <p>The <code>ConstraintUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - + + + + + + + + <p>The AcceptActionUsage that has a certain Expression as its <code>receiverArgument</code>.</p> - - - - - - <p>The <code>RequirementUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + + + + <p>The <code>WhileLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>untilArgument</code>.</p> - - - - - - <p>The <code>ConcernUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + + + + <p>The IfActionUsage that has a certain ActionUsage as its <code>elseAction</code>.</p> - - - - - - <p>The code>CaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + + + <p>An <code>IfActionUsage</code> is an <code>ActionUsage</code> that specifies that the <code>thenAction</code> <code>ActionUsage</code> should be performed if the result of the <code>ifArgument</code> <code>Expression</code> is true. It may also optionally specify an <code>elseAction</code> <code>ActionUsage</code> that is performed if the result of the <code>ifArgument</code> is false.</p> + + + + <p>The <code>thenAction</code> of an <code>ifActionUsage</code> is its second <code>parameter</code>, which must be an <code>ActionUsage</code>.</p> - - - - - - <p>The <code>AnalysisCaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + OCL2.0 + thenAction = + let parameter : Feature = inputParameter(2) in + if parameter <> null and parameter.oclIsKindOf(ActionUsage) then + parameter.oclAsType(ActionUsage) + else + null + endif + + + + + <p>A composite <code>IfActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::ifSubactions</code></em> from the Systems Model Library.</p> - - - - - - <p>The <code>VerificationCaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + OCL2.0 + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::ifSubactions') + + + + + <p>A <code>IfActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::ifThenActions</code></em> from the Systems Model Library. If it has an <code>elseAction</code>, then it must directly or indirectly specialize <em><code>Actions::ifThenElseActions</code></em>. - - - - - - <p>The <code>UseCaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + OCL2.0 + if elseAction = null then + specializesFromLibrary('Actions::ifThenActions') +else + specializesFromLibrary('Actions::ifThenElseActions') +endif + + + + + <p>The <code>ifArgument</code> of an <code>ifActionUsage</code> is its first <code>parameter</code>, which must be an <code>Expression</code>.</p> - - - - - - <p>The <code>ViewUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + OCL2.0 + ifArgument = + let parameter : Feature = inputParameter(1) in + if parameter <> null and parameter.oclIsKindOf(Expression) then + parameter.oclAsType(Expression) + else + null + endif + + + + + <p>The <code>elseAction</code> of an <code>ifActionUsage</code> is its third <code>parameter</code>, if there is one, which must then be an <code>ActionUsage</code>.</p> - - - - - - <p>The <code>ViewpointUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + OCL2.0 + elseAction = + let parameter : Feature = inputParameter(3) in + if parameter <> null and parameter.oclIsKindOf(ActionUsage) then + parameter.oclAsType(ActionUsage) + else + null + endif + + + + + <p>An <code>IfActionUsage</code> must have at least two owned <code>input</code> <code>parameters</code>.</p> - - + + OCL2.0 + inputParameters()->size() >= 2 + + + + + + <p>The <code>ActionUsage</code> that is to be performed if the result of the <code>ifArgument</code> is false. It is the (optional) third <code>parameter</code> of the <code>IfActionUsage</code>.</p> + + + + - - - <p>The <code>RenderingUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + <p>The <code>ActionUsage</code> that is to be performed if the result of the <code>ifArgument</code> is true. It is the second <code>parameter<code> of the <code>IfActionUsage</code>.</p> + - - + + - - - <p>The <code>MetadataUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + <p>The <code>Expression</code> whose result determines whether the <code>thenAction</code> or (optionally) the <code>elseAction</code> is performed. It is the first <code>parameter<code> of the <code>IfActionUsage</code>.</p> + - - + + - - - <p>A <code>ReferenceUsage</code> is a <code>Usage</code> that specifies a non-compositional (<code>isComposite = false</code>) reference to something. The <code>definition</code> of a <code>ReferenceUsage</code> can be any kind of <code>Classifier</code>, with the default being the top-level <code>Classifier</code> <code><em>Base::Anything</em></code> from the Kernel Semantic Library. This allows the specification of a generic reference without distinguishing if the thing referenced is an attribute value, item, action, etc.</p> + + + <p>A <code>MergeNode</code> is a <code>ControlNode</code> that asserts the merging of its incoming <code>Successions</code>. A <code>MergeNode</code> may have at most one outgoing <code>Successions</code>.</p> - - - <p>A <code>ReferenceUsage</code> is always referential.</p> + + + <p>A <code>MergeNode</code> may have at most one outgoing <code>Succession</code>.</p> - + OCL2.0 - isReference + sourceConnector->selectAsKind(Succession)->size() <= 1 - - - - <p>Always <code>true</code> for a <code>ReferenceUsage</code>.</code> - - - - - - - <p>If this <code>ReferenceUsage</code> is the <em><code>payload</code></em> <code>parameter</code> of a <code>TransitionUsage</code>, then its naming <code>Feature</code> is the <code>payloadParameter</code> of the <code>triggerAction</code> of that <code>TransitionUsage</code> (if any).</p> - - - - OCL2.0 - if owningType <> null and owningType.oclIsKindOf(TransitionUsage) and - owningType.oclAsType(TransitionUsage).inputParameter(2) = self then - owningType.oclAsType(TransitionUsage).triggerPayloadParameter() -else self.oclAsType(Usage).namingFeature() -endif - - - - - - - - - - - - <p>The Usage in which the <code>nestedPort</code> is nested (if any).</p> - - - - - - - - - <p>The Usages that have a certain Usage as a <code>flow</code>.</p> - - - + + + <p>All incoming <code>Successions</code> to a <code>MergeNode</code> must have a source <code>multiplicity</code> of <code>0..1</code>.</p> - - - - - - - - <p>The Usage in which the <code>nestedRequirement</code> is nested.</p> + + OCL2.0 + targetConnector->selectByKind(Succession)-> + collect(connectorEnd->at(1))-> + forAll(sourceMult | + multiplicityHasBounds(sourceMult, 0, 1)) + + + + + <p>All incoming <code>Successions</code> to a <code>MergeNode</code> must subset the inherited <em><code>incomingHBLink</code></em> <code>feature</code> of the <code>MergeNode</code>.</p> - - - - - - - - <p>The Usage in which the <code>nestedMetadata</code> is nested.</p> + + OCL2.0 + targetConnector->selectByKind(Succession)-> + forAll(subsetsChain(self, + resolveGlobal('ControlPerformances::MergePerformance::incomingHBLink'))) + + + + + <p>A <code>MergeNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::merges</code></em> from the Systems Model Library.</p> - - - + + OCL2.0 + specializesFromLibrary('Actions::Action::merges') + + + - - - - <p>The Usage in which the <code>nestedUseCase</code> is nested.</p> + + + <p><code>TriggerKind</code> enumerates the kinds of triggers that can be represented by a <code>TriggerInvocationExpression</code>.</p> + + + + <p>Indicates a <em>change trigger</em>, corresponding to the <em><code>TriggerWhen</code></em> <code>Function</code> from the <em><code>Triggers</code></em> model in the Kernel Semantic Library.</p> - - - - - - - - <p>The Definition that owns a certain <code>ownedView</code>.</p> + + + + <p>Indicates an <em>absolute time trigger</em>, corresponding to the <em><code>TriggerAt</code></em> <code>Function</code> from the <em><code>Triggers</code></em> model in the Kernel Semantic Library.</p> - - - - - - - - <p>The Usage that owns the <code>nestedReference</code>.</p> + + + + <p>Indicates a <em>relative time trigger</em>, corresponding to the <em><code>TriggerAfter</code></em> <code>Function</code> from the <em><code>Triggers</code></em> model in the <code>Kernel Semantic Library.</p> - - - + - - - - <p>The Definition that owns a certain <code>ownedRendering</code>.</p> + + + <p>A <code>SendActionUsage</code> is an <code>ActionUsage</code> that specifies the sending of a payload given by the result of its <code>payloadArgument</code> <code>Expression</code> via a <em><code>MessageTransfer</code></em> whose <em><code>source</code></em> is given by the result of the <code>senderArgument</code> <code>Expression</code> and whose <code>target</code> is given by the result of the <code>receiverArgument</code> <code>Expression</code>. If no <code>senderArgument</code> is provided, the default is the <em><code>this</code></em> context for the action. If no <code>receiverArgument</code> is given, then the receiver is to be determined by, e.g., outgoing <em><code>Connections</code></em> from the sender.</p> + + + + + <p>The <code>senderArgument</code> of a <code>SendActionUsage</code> is its second argument <code>Expression</code>.</p> - - - - - - - - <p>The Definition that owns the <code>ownedInterface</code>.</p> + + OCL2.0 + senderArgument = argument(2) + + + + + <p>The <code>payloadArgument</code> of a <code>SendActionUsage</code> is its first argument <code>Expression</code>.</p> - - - - - - - - <p>The Definition that owns the <code>ownedEnumeration</code>.</p> + + OCL2.0 + payloadArgument = argument(1) + + + + + <p>If a <code>SendActionUsage</code> is owned via a <code>StateSubactionMembership</code> or a <code>TransitionFeatureMembership</code>, then it must have a <code>payloadArgument</code>.</p> - - - - - - - - <p>The Definition that owns the <code>ownedPart</code>.</p> + + OCL2.0 + owningFeatureMembership <> null and +(owningFeatureMembership.oclIsKindOf(StateSubactionMembership) or + owningFeatureMembership.oclIsKindOf(TransitionFeatureMembership)) implies + payloadArgument <> null + + + + + <p>The <code>receiverArgument</code> of a <code>SendActionUsage</code> is its third argument <code>Expression</code>.</p> - - - - - - - - <p>The Usage that owns a certain <code>nestedVerificationCase</code>.</p> + + OCL2.0 + receiverArgument = argument(3) + + + + + <p>A composite <code>SendActionUsage</code> that is a subaction must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::sendSubactions</code></em> from the Systems Model Library.</p> - - - - - - - - <p>The Definitions that feature a certain Usage.</p> + + OCL2.0 + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::acceptSubactions') + + + + + <p>A <code>SendActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::sendActions</code></em> from the Systems Model Library.</p> - - - - - - - - <p>The Definition that owns the <code>ownedReference</code>.</p> + + OCL2.0 + specializesFromLibrary('Actions::sendActions') + + + + + + <p>An <code>Expression</code> whose result is bound to the <em><code>receiver</code></em> input parameter of this <code>SendActionUsage</code>.</p> + - - - - - - - - <p>The VariantMembership that owns this Usage, if the Usage represents a variant in the context of some variation point Definition or Usage.</p> + + + + + + <p>An <code>Expression</code> whose result is bound to the <code><em>payload</em></code> input parameter of this <code>SendActionUsage</code>.</p> + - - - - - - - - <p>The Usage in which the <code>nestedTransition</code> is nested.</p> + + + + + + <p>An <code>Expression</code> whose result is bound to the <em><code>sender</code></em> input parameter of this <code>SendActionUsage</code>.</p> + - - - + + + - - - - <p>The <code>Usage</code> that owns the <code>nestedFlow</code>.</p> + + + <p>A <code>TriggerInvocationExpression</code> is an <code>InvocationExpression</code> that invokes one of the trigger <code>Functions</code> from the Kernel Semantic Library <code><em>Triggers<em></code> package, as indicated by its <code>kind</code>.</p> + + + + <p>If a <code>TriggerInvocationExpression</code> has <code>kind = after</code>, then it must have an argument <code>Expression</code> with a <code>result</code> that conforms to the type <em><code>Quantities::ScalarQuantityValue</code></em> and a <code>feature</code> that directly or indirectly redefines <em><code>Quantities::TensorQuantityValue::mRef</code></em> and directly or indirectly specializes <em><code>ISQBase::DurationUnit</code></em>.</p> - - - - - - - - <p>The Usage that owns the <code>nestedEnumeration</code>.</p> + + OCL2.0 + kind = TriggerKind::after implies + argument->notEmpty() and + argument->at(1).result.specializesFromLibrary('Quantities::ScalarQuantityValue') and + let mRef : Element = + resolveGlobal('Quantities::TensorQuantityValue::mRef').ownedMemberElement in + argument->at(1).result.feature-> + select(ownedRedefinition.redefinedFeature-> + closure(ownedRedefinition.redefinedFeature)-> + includes(mRef))-> + exists(specializesFromLibrary('ISQBase::DurationUnit')) + + + + + <p>If a <code>TriggerInvocationExpression</code> has <code>kind = at</code>, then it must have an argument <code>Expression</code> with a <code>result</code> that conforms to the type <em><code>Time::TimeInstantValue</code></em>.</p> - - - - - - - - <p>The Definition that owns the <code>ownedConstraint</code>.</p> + + OCL2.0 + kind = TriggerKind::at implies + argument->notEmpty() and + argument->at(1).result.specializesFromLibrary('Time::TimeInstantValue') + + + + + <p>If a <code>TriggerInvocationExpression</code> has <code>kind = when</code>, then it must have an <code>argument</code> that is a <code>FeatureReferenceExpression</code> whose <code>referent</code> is an <code>Expression</code> with a <code>result</code> that conforms to the type <em><code>ScalarValues::Boolean</code></em>.</p> + + + OCL2.0 + kind = TriggerKind::when implies + argument->notEmpty() and + argument->at(1).oclIsKindOf(FeatureReferenceExpression) and + let referent : Feature = + argument->at(1).oclAsType(FeatureReferenceExpression).referent in + referent.oclIsKindOf(Expression) and + referent.oclAsType(Expression).result.specializesFromLibrary('ScalarValues::Boolean') + + + + + + <p>Indicates which of the <code>Functions</code> from the <code><em>Triggers</em></code> model in the Kernel Semantic Library is to be invoked by this <code>TriggerInvocationExpression</code>.</p> - - - - - - - - <p>The Usages that have a certain Classifier as a <code>definition</code>.</p> + + + + <p>Return one of the <code>Functions</code> <em><code>TriggerWhen</code></em>, <em><code>TriggerAt</code></em> or <em><code>TriggerAfter</code></em>, from the Kernel Semantic Library <em><code>Triggers</code></em> package, depending on whether the <code>kind</code> of this <code>TriggerInvocationExpression</code> is <code>when</code>, <code>at</code> or <code>after</code>, respectively.</p> - - - + + + OCL2.0 + resolveGlobal( + if kind = TriggerKind::when then + 'Triggers::TriggerWhen' + else if kind = TriggerKind::at then + 'Triggers::TriggerAt' + else + 'Triggers::TriggerAfter' + endif endif +).memberElement.oclAsType(Type) + + + + - - - - <p>The Usage in which the <code>nestedPart</code> is nested.</p> + + + <p>An <code>AcceptActionUsage</code> is an <code>ActionUsage</code> that specifies the acceptance of an <em><code>incomingTransfer</code></em> from the <code><em>Occurrence</em></code> given by the result of its <code>receiverArgument</code> Expression. (If no <code>receiverArgument</code> is provided, the default is the <em><code>this</code></em> context of the AcceptActionUsage.) The payload of the accepted <em><code>Transfer</em></code> is output on its <code>payloadParameter</code>. Which <em><code>Transfers</em></code> may be accepted is determined by conformance to the typing and (potentially) binding of the <code>payloadParameter</code>.</p> + + + + + <p>An <code>AcceptUsageAction</code> must have at least on input <code>parameter</code>, corresponding to its <em><code>payload</code></em> (even if it has no <code>FeatureValue</code>). (Note that the <code>payloadParameter</code> is an input as well as an output.)</p> - - - - - - - - <p>The Definition that owns the <code>ownedAnalysisCase</code>.</p> + + OCL2.0 + inputParameters()->notEmpty() + + + + + <p>The <code>receiverArgument</code> of an <code>AcceptUsageAction</code> is its second argument <code>Expression</code>.</p> - - - - - - - - <p>The owning Definition of this VariantMembership, which must have <code>isVariation</code> = true.</p> + + OCL2.0 + receiverArgument = argument(2) + + + + + <p>The <code>payloadArgument</code> of an <code>AcceptUsageAction</code> is its first argument <code>Expression</code>.</p> - - - - - - - - <p>The Definition that owns the <code>ownedUseCase</code>.</p> + + OCL2.0 + payloadArgument = argument(1) + + + + + <p>The <code>payloadParameter</code> of an <code>AcceptActionUsage<code> is its first <code>parameter</code>.</p> - - - - - - - - <p>The Definitions that have a certain Usage as a <code>flow</code>.</p> + + OCL2.0 + payloadParameter = + if parameter->isEmpty() then null + else parameter->first() endif + + + + + <p>An <code>AcceptActionUsage</code> that is not the <code>triggerAction</code> of a <code>TransitionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::acceptActions</code></em> from the Systems Model Library.</p> - - - - - - - - <p>The Usage that owns a certain <code>nestedRendering</code>.</p> + + OCL2.0 + not isTriggerAction() implies + specializesFromLibrary('Actions::acceptActions') + + + + + <p>A composite <code>AcceptActionUsage</code> that is a subaction usage, but is <em>not</em> the <code>triggerAction</code> of a <code>TransitionUsage</code>, must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::acceptSubactions</code></em> from the Systems Model Library.</p> - - - - - - - - <p>The Usage that owns the <code>nestedConcern</code>.</p> + + OCL2.0 + isSubactionUsage() and not isTriggerAction() implies + specializesFromLibrary('Actions::Action::acceptSubactions') + + + + + <p>An <code>AcceptActionUsage</code> that is the <code>triggerAction</code> of <code>TransitionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::TransitionAction::accepter</code></em> from the Systems Model Library.</p> - - - - - - - - <p>The ItemUsages being typed by a certain Structure.</p> + + OCL2.0 + isTriggerAction() implies + specializesFromLibrary('Actions::TransitionAction::accepter') + + + + + <p>If the <code>payloadArgument</code> of an <code>AcceptActionUsage</code> is a <code>TriggerInvocationExpression</code>, then the <code>AcceptActionusage</code> must have an <code>ownedFeature</code> that is a <code>BindingConnector</code> between its <code><em>receiver</em></code> <code>parameter</code> and the <code><em>receiver</em></code> <code>parameter</code> of the <code>TriggerInvocationExpression</code>.</p> - - - - - - - - <p>The Definition that owns the <code>ownedRequirement</code>.</p> + + OCL2.0 + payloadArgument <> null and +payloadArgument.oclIsKindOf(TriggerInvocationExpression) implies + let invocation : Expression = + payloadArgument.oclAsType(Expression) in + parameter->size() >= 2 and + invocation.parameter->size() >= 2 and + ownedFeature->selectByKind(BindingConnector)->exists(b | + b.relatedFeatures->includes(parameter->at(2)) and + b.relatedFeatures->includes(invocation.parameter->at(2))) + + + + + + <p>An <code>Expression</code> whose <code>result</code> is bound to the <em><code>receiver</code></em> input <code>parameter</code> of this <code>AcceptActionUsage</code>.</p> + - - - - - - - - <p>The Definition that owns the <code>ownedConnection</code>.</p> + + + + + + <p>The <code>nestedReference</code> of this <code>AcceptActionUsage</code> that redefines the <code>payload</code> output <code>parameter</code> of the base <code>AcceptActionUsage</code> <em><code>AcceptAction</code></em> from the Systems Model Library.</p> - - - - - - - - <p>The Definition that owns a certain <code>ownedVerificationCase</code>.</p> + + + + + + <p>An <code>Expression</code> whose <code>result</code> is bound to the <code><em>payload</em></code> <code>parameter</code> of this <code>AcceptActionUsage</code>. If provided, the <code>AcceptActionUsage</code> will only accept a <code><em>Transfer</em></code> with exactly this <code><em>payload</em></code>.</p> + - - - - - - - - <p>The Usage in which the <code>nestedState</code> is nested.</p> + + + + + + <p>Check if this <code>AcceptActionUsage</code> is the <code>triggerAction</code> of a <code>TransitionUsage</code>.</p> - - - - - - - - - <p>The Usage in which the <code>nestedConstraint</code> is nested.</p> + + + OCL2.0 + owningType <> null and +owningType.oclIsKindOf(TransitionUsage) and +owningType.oclAsType(TransitionUsage).triggerAction->includes(self) + + + + + + + + + + + <p>The AssignmentActionUsage that has a certain Expression as its <code>valueArgument</code>.</p> - - + + - - - - <p>The Definition that owns the <code>ownedItem</code>.</p> + + + + <p>The <code>ForLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>seqArgument</code>.</p> - - + + - - - - <p>The Usage that owns a certain <code>nestedViewpoint</code>.</p> + + + <p>An <code>ActionDefinition</code> is a <code>Definition</code> that is also a <code>Behavior</code> that defines an <em><code>Action</code></em> performed by a system or part of a system.</p> + + + + <p>An <code>ActionDefinition</code> must directly or indirectly specialize the <code>ActionDefinition</code> <em><code>Actions::Action</code></em> from the Systems Model Library.</p> - - - + + OCL2.0 + specializesFromLibrary('Actions::Action') + + + + + <p> The <code>actions</code> of a <code>ActionDefinition</code> are those of its <code>usages</code> that are <code>ActionUsages</code>.</p> + + + OCL2.0 + action = usage->selectByKind(ActionUsage) + + + + + + + <p>The <code>ActionUsages</code> that are <code>steps</code> in this <code>ActionDefinition</code>, which define the actions that specify the behavior of the <code>ActionDefinition</code>.</p> + + + + + - - - - <p>The Definition that owns the <code>ownedOccurrence</code>.</p> + + + + <p>The <code>WhileLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>whileArgument</code>.</p> - - + + - - - - <p>The Usage in which the <code>nestedAnalysisCase</code> is nested.</p> + + + + <p>The AcceptActionUsage that owns the <code>payloadParameter</code>.</p> - - + + - - - <p>A <code>Usage</code> is a usage of a <code>Definition</code>.</p> - -<p>A <code>Usage</code> may have <code>nestedUsages</code> that model <code>features</code> that apply in the context of the <code>owningUsage</code>. A <code>Usage</code> may also have <code>Definitions</code> nested in it, but this has no semantic significance, other than the nested scoping resulting from the <code>Usage</code> being considered as a <code>Namespace</code> for any nested <code>Definitions</code>.</p> - -<p>However, if a <code>Usage</code> has <code>isVariation = true</code>, then it represents a <em>variation point</em> <code>Usage</code>. In this case, all of its <code>members</code> must be <code>variant</code> <code>Usages</code>, related to the <code>Usage</code> by <code>VariantMembership</code> <code>Relationships</code>. Rather than being <code>features</code> of the <code>Usage</code>, <code>variant</code> <code>Usages</code> model different concrete alternatives that can be chosen to fill in for the variation point <code>Usage</code>.</p> + + + <p>An <code>AssignmentActionUsage</code> is an <code>ActionUsage</code> that is defined, directly or indirectly, by the <code>ActionDefinition</code> <em><code>AssignmentAction</code></em> from the Systems Model Library. It specifies that the value of the <code>referent</code> <code>Feature</code>, relative to the target given by the result of the <code>targetArgument</code> <code>Expression</code>, should be set to the result of the <code>valueExpression</code>.</p> + - - - <p>The <code>variants</code> of a <code>Usage</code> are the <code>ownedVariantUsages</code> of its <code>variantMemberships</code>.</p> + + + <p>An <code>AssignmentActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::assignmentActions</code></em> from the Systems Model Library.</p> - + OCL2.0 - variant = variantMembership.ownedVariantUsage + specializesFromLibrary('Actions::assignmentActions') - - - <p>The <code>variantMemberships</code> of a <code>Usage</code> are those <code>ownedMemberships</code> that are <code>VariantMemberships</code>.</p> + + + <p>The first <code>ownedFeature</code> of the first <code>parameter</code> of an <code>AssignmentActionUsage</code> must redefine <code><em>AssignmentAction::target::startingAt</em></code>.</p> - + OCL2.0 - variantMembership = ownedMembership->selectByKind(VariantMembership) + let targetParameter : Feature = inputParameter(1) in +targetParameter <> null and +targetParameter.ownedFeature->notEmpty() and +targetParameter.ownedFeature->first(). + redefinesFromLibrary('AssignmentAction::target::startingAt') - - - <p>If a <code>Usage</code> is a variation, then it must not have any <code>ownedFeatureMemberships</code>.</p> + + + <p>The <code>valueExpression</code> of a <code>AssignmentActionUsage</code> is its second argument <code>Expression</code>.</p> - + OCL2.0 - isVariation implies ownedFeatureMembership->isEmpty() + valueExpression = argument(2) - - - <p>A <code>Usage</code> is referential if it is not composite.</p> + + + <p>The <code>targetArgument</code> of a <code>AssignmentActionUsage</code> is its first argument <code>Expression</code>.</p> - + OCL2.0 - isReference = not isComposite + targetArgument = argument(1) - - - <p>If a <code>Usage</code> has an <code>owningVariationUsage</code>, then it must directly or indirectly specialize that <code>Usage</code>.</p> + + + <p>A composite <code>AssignmentActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::assignments</code></em> from the Systems Model Library.</p> - + OCL2.0 - owningVariationUsage <> null implies - specializes(owningVariationUsage) + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::assignments') - - - <p>A variation <code>Usage</code> may not specialize any variation <code>Definition</code> or <code>Usage</code>.</p> + + + <p>The first <code>ownedFeature</code> of the first <code>ownedFeature</code> of the first <code>parameter</code> of an <code>AssignmentActionUsage</code> must redefine <code><em>AssignmentAction::target::startingAt::accessedFeature</em></code>.</p> - + OCL2.0 - isVariation implies - not ownedSpecialization.specific->exists( - oclIsKindOf(Definition) and - oclAsType(Definition).isVariation or - oclIsKindOf(Usage) and - oclAsType(Usage).isVariation) + let targetParameter : Feature = inputParameter(1) in +targetParameter <> null and +targetParameter.ownedFeature->notEmpty() and +targetParameter.ownedFeature->first().ownedFeature->notEmpty() and +targetParameter.ownedFeature->first().ownedFeature->first(). + redefinesFromLibrary('AssigmentAction::target::startingAt::accessedFeature') - - - <p>If a <code>Usage</code> has an <code>owningVariationDefinition</code>, then it must directly or indirectly specialize that <code>Definition</code>.</p> + + + <p>The first <code>ownedFeature</code> of the first <code>ownedFeature</code> of the first <code>parameter</code> of an <code>AssignmentActionUsage</code> must redefine the <code>referent</code> of the <code>AssignmentActionUsage</code>.</p> - + OCL2.0 - owningVariationDefinition <> null implies - specializes(owningVariationDefinition) + let targetParameter : Feature = inputParameter(1) in +targetParameter <> null and +targetParameter.ownedFeature->notEmpty() and +targetParameter.ownedFeature->first().ownedFeature->notEmpty() and +targetParameter.ownedFeature->first().ownedFeature->first().redefines(referent) - - - <p>The <code>directedUsages</code> of a <code>Usage</code> are all its <code>directedFeatures</code> that are <code>Usages</code>.</p> + + + <p>The <code>referent</code> of an <code>AssignmentActionUsage</code> is the first <code>Feature</code> that is not a <code>MetadataFeature</code> and is the <code>memberElement</code> of a <code>ownedMembership</code> that is not a <code>FeatureMembership</code>.</p> - + OCL2.0 - directedUsage = directedFeature->selectByKind(Usage) + referent = + let unownedFeatures : Sequence(Feature) = ownedMembership-> + reject(oclIsKindOf(FeatureMembership)).memberElement-> + select(oclIsKindOf(Feature) and + not oclIsKindOf(MetadataFeature)) in + if unownedFeatures->isEmpty() then null + else unownedFeatures->first().oclAsType(Feature) + endif - - - <p>The <code>ownedActions</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ActionUsages</code>.</p> + + + <p>An <code>AssignmentActionUsage</code> must have an <code>ownedMembership</code> that is not an <code>OwningMembership</code> and whose <code>memberElement</code> is a <code>Feature</code> but not a <code>MetadataFeature</code>.</p> + + + OCL2.0 + ownedMembership->exists( + not oclIsKindOf(OwningMembership) and + memberElement.oclIsKindOf(Feature) and + not memberElement.oclIsKindOf(MetadataFeature)) + + + + + <p>The <code>featureTarget</code> of the <code>referent</code> of an <code>AssignmentActionUsage</code> must be able to have time-varying values.</p> + + + OCL2.0 + referent <> null implies referent.featureTarget.isVariable + + + + + + <p>The <code>Expression</code> whose value is an occurrence in the domain of the <code>referent</code> <code>Feature</code>, for which the value of the <code>referent</code> will be set to the result of the <code>valueExpression</code> by this <code>AssignmentActionUsage</code>.</p> + + + + + + + <p>The <code>Expression</code> whose result is to be assigned to the <code>referent</code> <code>Feature</code>.</p> + + + + + + + <p>The <code>Feature</code> whose value is to be set.</p> + + + + + + + + + <p>The <code>SendActionUsage</code> that has a certain <code>Expression</code> as its <code>itemsArgument</code>.</p> + + + + + + + + + <p>The <code>SendActionUsage</code> that has a certain <code>Expression<code> as its <code>receiverArgument</code>.</p> + + + + + + + + <p>A <code>PerformActionUsage</code> is an <code>ActionUsage</code> that represents the performance of an <code>ActionUsage</code>. Unless it is the <code>PerformActionUsage</code> itself, the <code>ActionUsage</code> to be performed is related to the <code>PerformActionUsage</code> by a <code>ReferenceSubsetting</code> relationship. A <code>PerformActionUsage</code> is also an <code>EventOccurrenceUsage</code>, with its <code>performedAction</code> as the <code>eventOccurrence</code>.</p> + + + + <p>If a <code>PerformActionUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of the <code>referencedFeature</code> must be an <code>ActionUsage</code>.</p> - + OCL2.0 - nestedAction = nestedUsage->selectByKind(ActionUsage) + referencedFeatureTarget() <> null implies + referencedFeatureTarget().oclIsKindOf(ActionUsage) - - - <p>The <code>ownedAllocations</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>AllocationUsages</code>.</p> + + + <p>If a <code>PerformActionUsage</code> has an <code>owningType</code> that is a <code>PartDefinition</code> or <code>PartUsage</code>, then it must directly or indirectly specialize the <code>ActionUsage</code> <code><em>Parts::Part::performedActions</em></code>.</p> - + OCL2.0 - nestedAllocation = nestedUsage->selectByKind(AllocationUsage) + owningType <> null and +(owningType.oclIsKindOf(PartDefinition) or + owningType.oclIsKindOf(PartUsage)) implies + specializesFromLibrary('Parts::Part::performedActions') - - - <p>The <code>ownedAnalysisCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>AnalysisCaseUsages</code>.</p> + + + + + <p>The <code>ActionUsage</code> to be performed by this <code>PerformedActionUsage</code>. It is the <code>eventOccurrence</code> of the <code>PerformActionUsage</code> considered as an <code>EventOccurrenceUsage</code>, which must be an <code>ActionUsage</code>.</p> + - - OCL2.0 - nestedAnalysisCase = nestedUsage->selectByKind(AnalysisCaseUsage) - - - - - <p>The <code>ownedAttributes</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>AttributeUsages</code>.</p> + + + + + + <p>The naming <code>Feature</code> of a <code>PerformActionUsage</code> is its <code>performedAction</code>, if this is different than the <code>PerformActionUsage</code>. If the <code>PerformActionUsage</code> is its own <code>performedAction</code>, then the naming <code>Feature</code> is the same as the usual default for a <code>Usage</code>.</p> - - OCL2.0 - nestedAttribute = nestedUsage->selectByKind(AttributeUsage) - - - - - <p>The <code>ownedCalculations</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>CalculationUsages</code>.</p> + + + OCL2.0 + if performedAction <> self then performedAction +else self.oclAsType(Usage).namingFeature() +endif + + + + + + + + + + + <p>A <code>LoopActionUsage</code> is an <code>ActionUsage</code> that specifies that its <code>bodyAction</code> should be performed repeatedly. Its subclasses <code>WhileLoopActionUsage</code> and <code>ForLoopActionUsage</code> provide different ways to determine how many times the <code>bodyAction</code> should be performed.</p> + + + + <p>The <code>bodyAction</code> of a <code>LoopActionUsage</code> is its second input <code>parameter</code>, which must be an <code>Action</code>.</p> - + OCL2.0 - nestedCalculation = nestedUsage->selectByKind(CalculationUsage) + bodyAction = + let parameter : Feature = inputParameter(2) in + if parameter <> null and parameter.oclIsKindOf(Action) then + parameter.oclAsType(Action) + else + null + endif + - - - <p>The <code>ownedCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>CaseUsages</code>.</p> + + + + <p>The <code>ActionUsage</code> to be performed repeatedly by the <code>LoopActionUsage</code>. It is the second <code>parameter</code> of the <code>LoopActionUsage</code>.</p> + - - OCL2.0 - nestedCase = nestedUsage->selectByKind(CaseUsage) - - - - - <p>The <code>ownedConcerns</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ConcernUsages</code>.</p> + + + + + + + <p>A <code>ForLoopActionUsage</code> is a <code>LoopActionUsage</code> that specifies that its <code>bodyAction</code> <code>ActionUsage</code> should be performed once for each value, in order, from the sequence of values obtained as the result of the <code>seqArgument</code> <code>Expression</code>, with the <code>loopVariable</code> set to the value for each iteration.</p> + + + + <p>The <code>seqArgument</code> of a <code>ForLoopActionUsage</code> is its first argument <code>Expression</code>.</p> - + OCL2.0 - nestedConcern = nestedUsage->selectByKind(ConcernUsage) + seqArgument = argument(1) + - - - <p>The <code>ownedConnections</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ConnectorAsUsages</code>.</p> + + + <p>A composite <code>ForLoopActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::forLoops</code></em> from the Systems Model Library.</p> - + OCL2.0 - nestedConnection = nestedUsage->selectByKind(ConnectorAsUsage) + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::forLoops') - - - <p>The <code>ownedConstraints</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ConstraintUsages</code>.</p> + + + <p>The <code>loopVariable</code> of a <code>ForLoopActionUsage</code> must redefine the <code>ActionUsage</code> <code><em>Actions::ForLoopAction::var</em></code>.</p> - + OCL2.0 - nestedConstraint = nestedUsage->selectByKind(ConstraintUsage) + loopVariable <> null and +loopVariable.redefinesFromLibrary('Actions::ForLoopAction::var') - - - <p>The <code>ownedEnumerations</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>EnumerationUsages</code>.</p> + + + <p>A <code>ForLoopActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::forLoopActions</code></em> from the Systems Model Library.</p> - + OCL2.0 - ownedNested = nestedUsage->selectByKind(EnumerationUsage) + specializesFromLibrary('Actions::forLoopActions') - - - <p>The <code>ownedFlows</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>FlowConnectionUsages</code>.</p> + + + <p>The <code>loopVariable</code> of a <code>ForLoopActionUsage</code> is its first <code>ownedFeature</code>, which must be a <code>ReferenceUsage</code>.</p> - + OCL2.0 - nestedFlow = nestedUsage->selectByKind(FlowConnectionUsage) + loopVariable = + if ownedFeature->isEmpty() or + not ownedFeature->first().oclIsKindOf(ReferenceUsage) then + null + else + ownedFeature->first().oclAsType(ReferenceUsage) + endif - - - <p>The <code>ownedInterfaces</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>InterfaceUsages</code>.</p> + + + <p>The first <code>ownedFeature</code> of a <code>ForLoopActionUsage</code> must be a <code>ReferenceUsage</code>.</p> - + OCL2.0 - nestedInterface = nestedUsage->selectByKind(ReferenceUsage) + ownedFeature->notEmpty() and +ownedFeature->at(1).oclIsKindOf(ReferenceUsage) + - - - <p>The <code>ownedItems</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ItemUsages</code>.</p> + + + <p>A <code>ForLoopActionUsage</code> must have two owned <code>input</code> <code>parameters</code>.</p> - + OCL2.0 - nestedItem = nestedUsage->selectByKind(ItemUsage) + inputParameters()->size() = 2 - - - <p>The <code>ownedMetadata</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>MetadataUsages</code>.</p> + + + + <p>The <code>Expression</code> whose result provides the sequence of values to which the <code>loopVariable</code> is set for each iterative performance of the <code>bodyAction</code>. It is the <code>Expression</code> whose <code>result</code> is bound to the <em><code>seq</code></em> <code>input</code> <code>parameter</code> of this <code>ForLoopActionUsage</code>.</p> + - - OCL2.0 - nestedMetadata = nestedUsage->selectByKind(MetadataUsage) - - - - - <p>The <code>ownedOccurrences</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>OccurrenceUsages</code>.</p> + + + + + + <p>The <code>ownedFeature</code> of this <co>ForLoopActionUsage</code> that acts as the loop variable, which is assigned the successive values of the input sequence on each iteration. It is the <code>ownedFeature</code> that redefines <em><code>ForLoopAction::var</code></em>.</p> - - OCL2.0 - nestedOccurrence = nestedUsage->selectByKind(OccurrenceUsage) - - - - - <p>The <code>ownedParts</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>PartUsages</code>.</p> + + + + + + + + <p>The PerformActionUsages that have a certain ActionUsage as their <code>performedAction</code>.</p> + + + + + + + + + <p>The AssignmentActionUsage that has a certain Expression as its <code>targetArgument</code>.</p> + + + + + + + + + <p>The <code>SendActionUsage</code> that has a certain <code>Expression</code> as its <code>senderArgument</code>.</p> + + + + + + + + <p>An <code>ActionUsage</code> is a <code>Usage</code> that is also a <code>Step</code>, and, so, is typed by a <code>Behavior</code>. Nominally, if the type is an <code>ActionDefinition</code>, an <code>ActionUsage</code> is a <code>Usage</code> of that <code>ActionDefinition</code> within a system. However, other kinds of kernel <code>Behaviors</code> are also allowed, to permit use of <code>Behaviors</code> from the Kernel Model Libraries.</p> + + + + + <p>A composite <code>ActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::subactions</code></em> from the Systems Model Library.</p> - + OCL2.0 - nestedPart = nestedUsage->selectByKind(PartUsage) + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::subactions') - - - <p>The <code>ownedPorts</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>PortUsages</code>.</p> + + + <p>An <code>ActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::actions</code></em> from the Systems Model Library.</p> - + OCL2.0 - nestedPort = nestedUsage->selectByKind(PortUsage) + specializesFromLibrary('Actions::actions') - - - <p>The <code>ownedReferences</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ReferenceUsages</code>.</p> + + + <p>A composite <code>ActionUsage</code> whose <code>owningType</code> is <code>PartDefinition</code> or <code>PartUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Parts::Part::ownedActions</code></em> from the Systems Model Library.</p> - + OCL2.0 - nestedReference = nestedUsage->selectByKind(ReferenceUsage) + isComposite and owningType <> null and +(owningType.oclIsKindOf(PartDefinition) or + owningType.oclIsKindOf(PartUsage)) implies + specializesFromLibrary('Parts::Part::ownedActions') - - - <p>The <code>ownedRenderings</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>RenderingUsages</code>.</p> + + + <p>An <code>ActionUsage</code> that is the <code><em>entry</em></code>, <code><em>do</em></code>, or <code><em>exit</em></code> <code><em>Action</em></code> of a <code>StateDefinition</code> or <code>StateUsage</code> must redefine the <code>entryAction</code>, <code>doAction</code>, or <code>exitAction</code> <code>feature</code>, respectively, of the <code>StateDefinition</code> <code><em>States::StateAction</em></code> from the Systems Model Library.</p> - + OCL2.0 - nestedRendering = nestedUsage->selectByKind(RenderingUsage) + owningFeatureMembership <> null and +owningFeatureMembership.oclIsKindOf(StateSubactionMembership) implies + let kind : StateSubactionKind = + owningFeatureMembership.oclAsType(StateSubactionMembership).kind in + if kind = StateSubactionKind::entry then + redefinesFromLibrary('States::StateAction::entryAction') + else if kind = StateSubactionKind::do then + redefinesFromLibrary('States::StateAction::doAction') + else + redefinesFromLibrary('States::StateAction::exitAction') + endif endif - - - <p>The <code>ownedRequirements</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>RequirementUsages</code>.</p> + + + + + <p>The <code>Behaviors</code> that are the <code>types</code> of this <code>ActionUsage</code>. Nominally, these would be <code>ActionDefinitions</code>, but other kinds of Kernel <code>Behaviors</code> are also allowed, to permit use of <code>Behaviors</code> from the Kernel Model Libraries.</p> + - - OCL2.0 - nestedRequirement = nestedUsage->selectByKind(RequirementUsage) - - - - - <p>The <code>ownedStates</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>StateUsages</code>.</p> + + + + + + <p>Return the owned input <code>parameters</code> of this <code>ActionUsage</code>.</p> - - OCL2.0 - nestedState = nestedUsage->selectByKind(StateUsage) - - - - - <p>The <code>ownedTransitions</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>TransitionUsages</code>.</p> + + + OCL2.0 + input->select(f | f.owner = self) + + + + + + + + + + <p>Return the <code>i</code>-th owned input <code>parameter</code> of the <code>ActionUsage</code>. Return null if the <code>ActionUsage</code> has less than <code>i</code> owned input <code>parameters</code>.</p> - - OCL2.0 - nestedTransition = nestedUsage->selectByKind(TransitionUsage) - - - - - <p>The <code>ownedUsages</code> of a <code>Usage</code> are all its <code>ownedFeatures</code> that are <code>Usages</code>.</p> + + + OCL2.0 + if inputParameters()->size() < i then null +else inputParameters()->at(i) +endif + + + + + + + + + + + + + <p>Return the <code>i</code>-th argument <code>Expression</code> of an <code>ActionUsage</code>, defined as the <code>value</code> <code>Expression</code> of the <code>FeatureValue</code> of the <code>i</code>-th owned input <code>parameter</code> of the <code>ActionUsage</code>. Return null if the <code>ActionUsage</code> has less than <code>i</code> owned input <code>parameters</code> or the <code>i</code>-th owned input <code>parameter</code> has no <code>FeatureValue</code>.</p> - - OCL2.0 - nestedUsage = ownedFeature->selectByKind(Usage) - - - - - <p>The <code>ownedUseCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>UseCaseUsages</code>.</p> + + + OCL2.0 + if inputParameter(i) = null then null +else + let featureValue : Sequence(FeatureValue) = inputParameter(i). + ownedMembership->select(oclIsKindOf(FeatureValue)) in + if featureValue->isEmpty() then null + else featureValue->at(1).value + endif +endif + + + + + + + + + + + + + <p>Check if this <code>ActionUsage</code> is composite and has an <code>owningType</code> that is an <code>ActionDefinition</code> or <code>ActionUsage</code> but is <em>not</em> the <code>entryAction</code> or <code>exitAction</em></code> of a <code>StateDefinition</code> or <code>StateUsage</code>. If so, then it represents an <code><em>Action</em></code> that is a <code><em>subaction</em></code> of another <code><em>Action</em></code>.</p> - - OCL2.0 - nestedUseCase = nestedUsage->selectByKind(UseCaseUsage) - - - - - <p>The <code>ownedValidationCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ValidationCaseUsages</code>.</p> + + + OCL2.0 + isComposite and owningType <> null and +(owningType.oclIsKindOf(ActionDefinition) or + owningType.oclIsKindOf(ActionUsage)) and +(owningFeatureMembership.oclIsKindOf(StateSubactionMembership) implies + owningFeatureMembership.oclAsType(StateSubactionMembership).kind = + StateSubactionKind::do) + + + + + + + + + + <p>A <code>JoinNode</code> is a <code>ControlNode</code> that waits for the completion of all the predecessor <code>Actions</code> given by incoming <code>Successions</code>.</p> + + + + <p>A <code>JoinNode</code> may have at most one outgoing <code>Succession</code>.</p> - + OCL2.0 - nestedVerificationCase = nestedUsage->selectByKind(VerificationCaseUsage) + sourceConnector->selectByKind(Succession)->size() <= 1 - - - <p>The <code>ownedViews</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ViewUsages</code>.</p> + + + <p>A <code>JoinNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::joins</code></em> from the Systems Model Library.</p> - + OCL2.0 - nestedView = nestedUsage->selectByKind(ViewUsage) + specializesFromLibrary('Actions::Action::join') - - - <p>The <code>ownedViewpoints</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ViewpointUsages</code>.</p> + + + + + + <p>The <code>LoopActionUsage</code> that has a certain <code>ActionUsage</code> as its <code>bodyAction</code>.</p> - - OCL2.0 - nestedViewpoint = nestedUsage->selectByKind(ViewpointUsage) - - - - - <p>The <code>usages</code> of a <code>Usage</code> are all its <code>features</code> that are <code>Usages</code>.</p> + + + + + + + + <p>The AssignmentActionUsages that gave a certain <code>referent</code> Expression.</p> - + + + + + + + + <p>The <code>IfActionUsage</code> that has a certain <code>Expression</code> as its <code>ifArgument</code>.</p> + + + + + + + + <p>A <code>ControlNode</code> is an <code>ActionUsage</code> that does not have any inherent behavior but provides constraints on incoming and outgoing <code>Successions</code> that are used to control other <code>Actions</code>. A <code>ControlNode</code> must be a composite owned <code>usage</code> of an <code>ActionDefinition</code> or <code>ActionUsage</code>.</p> + + + + + <p>All outgoing <code>Successions</code> from a <code>ControlNode</code> must have a source <code>multiplicity</code> of <code>1..1</code>.</p> + + OCL2.0 - usage = feature->selectByKind(Usage) - - - - - <p>A <code>Usage</code> that is directed, an end feature or has no <code>featuringTypes</code> must be referential.</p> + sourceConnector->selectByKind(Succession)-> + collect(connectorEnd->at(1).multiplicity)-> + forAll(sourceMult | + multiplicityHasBounds(sourceMult, 1, 1)) + + + + + <p>The <code>owningType</code> of a <code>ControlNode</code> must be an <code>ActionDefinition</code> or <code>ActionUsage</code>.</p> - + OCL2.0 - direction <> null or isEnd or featuringType->isEmpty() implies - isReference + owningType <> null and +(owningType.oclIsKindOf(ActionDefinition) or + owningType.oclIsKindOf(ActionUsage)) - - - <p>If a <code>Usage</code> is a variation, then it must be abstract.</p> + + + <p>All incoming <code>Successions</code> to a <code>ControlNode</code> must have a target <code>multiplicity</code> of <code>1..1</code>.</p> - + OCL2.0 - isVariation implies isAbstract + targetConnector->selectByKind(Succession)-> + collect(connectorEnd->at(2).multiplicity)-> + forAll(targetMult | + multiplicityHasBounds(targetMult, 1, 1)) - - - <p>A <code>Usage</code> <code>mayTimeVary</code> if and only if all of the following are true</p> -<ul> - <li>It has an <code>owningType</code> that specializes <em><code>Occurrences::Occurrence</code></em> (from the Kernel Semantic Library).</li> - <li>It is not a portion.</li> - <li>It does not specialize <em><code>Links::SelfLink</code></em> or <em><code>Occurrences::HappensLink</code></em> (from the Kernel Semantic Library).</li> - <li>If <code>isComposite = true</code>, it does not specialize <em><code>Actions::Action</code></em> (from the Systems Model Library). -</li></ul> + + + <p>A <code>ControlNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::control</code></em> from the Systems Model Library.</p> - + OCL2.0 - mayTimeVary = - owningType <> null and - owningType.specializesFromLibrary('Occurrences::Occurrence') and - not ( - isPortion or - specializesFromLibrary('Links::SelfLink') or - specializesFromLibrary('Occurrences::HappensLink') or - isComposite and specializesFromLibrary('Actions::Action') - ) + specializesFromLibrary('Action::Action::controls') - - - <p>If a <code>Usage</code> has an <code>owningVariationUsage</code>, then it must have the same <code>featuringTypes</code> as that <code>Usage</code>.</p> + + + <p>A <code>ControlNode</code> must be composite.</p> - + OCL2.0 - owningVariationUsage <> null implies - featuringType->asSet() = owningVariationUsage.featuringType->asSet() + isComposite - - - - <p>Whether this <code>Usage</code> may be time varying (that is, whether it is featured by the snapshots of its <code>owningType</code>, rather than being featured by the <code>owningType</code> itself). However, if <code>isConstant</code> is also true, then the value of the <code>Usage</code> is nevertheless constant over the entire duration of an instance of its <code>owningType</code> (that is, it has the same value on all snapshots).</p> - -<p>The property <code>mayTimeVary</code> redefines the KerML property <code>Feature::isVariable</code>, making it derived. The property <code>isConstant</code> is inherited from <code>Feature</code>.</p> - - - - - - <p>Whether this <code>Usage</code> is a referential <code>Usage</code>, that is, it has <code>isComposite = false</code>.<p> - - - - - - <p>The <code>Usages</code> which represent the variants of this <code>Usage</code> as a variation point <code>Usage</code>, if <code>isVariation = true</code>. If <code>isVariation = false</code>, then there must be no <code>variants</code>.</p> - - - - - - - <p>The <code>ownedMemberships</code> of this <code>Usage</code> that are <code>VariantMemberships</code>. If <code>isVariation = true</code>, then this must be all <code>memberships</code> of the <code>Usage</code>. If <code>isVariation = false</code>, then <code>variantMembership</code>must be empty.</p> - - - - - - - <p>The <code>Definition</code> that owns this <code>Usage</code> (if any).</p> - - - - - - - <p>The <code>Usage</code> in which this <code>Usage</code> is nested (if any).</p> - - - - - - - <p>The <code>Classifiers</code> that are the types of this <code>Usage</code>. Nominally, these are <code>Definitions</code>, but other kinds of Kernel <code>Classifiers</code> are also allowed, to permit use of <code>Classifiers</code> from the Kernel Model Libraries.</p> - - - - - - - <p>The <code>Usages</code> that are <code>features</code> of this <code>Usage</code> (not necessarily owned).</p> - - - - - - - - - - <p>The <code>usages</code> of this <code>Usage</code> that are <code>directedFeatures</code>.</p> - - - - - - - - <p>The <code>Usages</code> that are <code>ownedFeatures</code> of this <code>Usage</code>.</p> - - - - - - - <p>The <code>ReferenceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - - - - - - <p>The code>AttributeUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - - - - - - <p>The code>EnumerationUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.<p> - - - - - - - <p>The <code>OccurrenceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - - - - - <p>The <code>ItemUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - - - - - <p>The <code>PartUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - - - - - <p>The <code>PortUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - - - - - <p>The <code>ConnectorAsUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>. Note that this list includes <code>BindingConnectorAsUsages</code>, <code>SuccessionAsUsages</code>, and <code>FlowConnectionUsages</code> because these are <code>ConnectorAsUsages</code> even though they are not <code>ConnectionUsages</code>.</p> - - - - - - - <p>The code>FlowUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - - - - - <p>The <code>InterfaceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - - - - - <p>The <code>AllocationUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - - - - - <p>The <code>ActionUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + + + <p>Check that the given <code>Multiplicity</code> has <code>lowerBound</code> and <code>upperBound</code> expressions that are model-level evaluable to the given <code>lower</code> and <code>upper</code> values.</p> - - - - - - <p>The <code>StateUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + + OCL2.0 + mult <> null and +if mult.oclIsKindOf(MultiplicityRange) then + mult.oclAsType(MultiplicityRange).hasBounds(lower, upper) +else + mult.allSuperTypes()->exists( + oclisKindOf(MultiplicityRange) and + oclAsType(MultiplicityRange).hasBounds(lower, upper) +endif + + + + + + + + + + + + + + + + + <p>A <code>TerminateActionUsage</code> is an <code>ActionUsage</code> that directly or indirectly specializes the <code>ActionDefinition</code> <em><code>TerminateAction</code></em> from the Systems Model Library, which causes a given <em><code>terminatedOccurrence</code></em> to end during its performance. By default, the <code>terminatedOccurrence</code> is the featuring instance (<em><code>that</code></em>) of the performance of the <code>TerminateActionUsage</code>, generally the performance of its immediately containing <code>ActionDefinition</code> or <code>ActionUsage</code>.</p> + + + + <p>A <code>TerminateActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::terminateActions</code></em> from the Systems Modeling Library.</p> - - - - - - <p>The <code>TransitionUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + OCL2.0 + specializesFromLibrary('Actions::terminateActions') + + + + + <p>The <code>terminatedOccurrenceArgument</code> of a <code>TerminateActionUsage</code> is its first argument.</p> - - - - - - <p>The <code>CalculationUsage</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + OCL2.0 + terminatedOccurrenceArgument = argument(1) + + + + + <p>A composite <code>TerminateActionUsage</code> that is a subaction must must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::terminateSubactions</code></em> from the Systems Modeling Library.</p> - - - - - - <p>The <code>ConstraintUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + OCL2.0 + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::terminateSubactions') + + + + + + <p>The <code>Expression</code> that is the <code>featureValue</code> of the <em><code>terminateOccurrence</code></em> <code>parameter</code> of this <code>TerminateActionUsage</code>. - - + + - - - <p>The <code>RequirementUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + + + + <p>The ActionUsages being typed by a certain Behavior.</p> - - - - - - <p>The <code>ConcernUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + + + + + + + <p>The <code>TerminateActionUsage</code> that has a certain <code>Expression</code> as its <code>terminatedOccurrenceArgument</code>.</p> - - - - - - <p>The <code>CaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + + + + + + <p>A <code>WhileLoopActionUsage</code> is a <code>LoopActionUsage</code> that specifies that the <code>bodyAction</code> <code>ActionUsage</code> should be performed repeatedly while the result of the <code>whileArgument</code> <code>Expression</code> is true or until the result of the <code>untilArgument</code> <code>Expression</code> (if provided) is true. The <code>whileArgument</code> <code>Expression</code> is evaluated before each (possible) performance of the <code>bodyAction</code>, and the <code>untilArgument</code> <code>Expression</code> is evaluated after each performance of the <code>bodyAction</code>.</p> + + + + <p>A composite <code>WhileLoopActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::whileLoops</code></em> from the Systems Model Library.</p> - - - - - - <p>The <code>AnalysisCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + OCL2.0 + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::whileLoops') + + + + + <p>The <code>whileArgument</code> of a <code>WhileLoopActionUsage</code> is its third input <code>parameter</code>, which, if it exists, must be an <code>Expression</code>.</p> - - - - - - <p>The <code>VerificationCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + OCL2.0 + untilArgument = + let parameter : Feature = inputParameter(3) in + if parameter <> null and parameter.oclIsKindOf(Expression) then + parameter.oclAsType(Expression) + else + null + endif + + + + + <p>A <code>WhileLoopActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::whileLoopActions</code></em> from the Systems Model Library.</p> - - - - - - <p>The <code>UseCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + OCL2.0 + specializesFromLibrary('Actions::whileLoopActions') + + + + + <p>The <code>whileArgument</code> of a <code>WhileLoopActionUsage</code> is its first input <code>parameter</code>, which must be an <code>Expression</code>.</p> - - - - - - <p>The <code>ViewUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + OCL2.0 + whileArgument = + let parameter : Feature = inputParameter(1) in + if parameter <> null and parameter.oclIsKindOf(Expression) then + parameter.oclAsType(Expression) + else + null + endif + + + + + <p>A <code>WhileLoopActionUsage</code> must have at least two owned <code>input</code> <code>parameters</code>.</p> - - - - - - <p>The <code>ViewpointUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + OCL2.0 + inputParameters()->size() >= 2 + + + + + + <p>The <code>Expression</code> whose result, if true, determines that the <code>bodyAction</code> should continue to be performed. It is the first owned <code>parameter</code> of the <code>WhileLoopActionUsage</code>.</p> - - + + - - - <p>The <code>RenderingUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + + <p>The <code>Expression</code> whose result, if false, determines that the <code>bodyAction</code> should continue to be performed. It is the (optional) third owned <code>parameter</code> of the <code>WhileLoopActionUsage</code>.</p> - - - - - - <p>The <code>MetadataUsages</code> that are <code>nestedUsages</code> of this of this <code>Usage</code>.</p> - - - + + - - - <p>Whether this <code>Usage</code> is for a variation point or not. If true, then all the <code>memberships</code> of the <code>Usage</code> must be <code>VariantMemberships</code>.</p> + + + + + <p>The Activities that feature a certain ActionUsage.</p> - - - - - <p>If this <code>Usage</code> is a variant, then its naming <code>Feature</code> is the <code>referencedFeature</code> of its <code>ownedReferenceSubsetting</code>.</p> + + + + + + + <p>A <code>CalculationUsage</code> is an <code>ActionUsage</code> that is also an <code>Expression</code>, and, so, is typed by a <code>Function</code>. Nominally, if the <code>type</code> is a <code>CalculationDefinition</code>, a <code>CalculationUsage</code> is a <code>Usage</code> of that <code>CalculationDefinition</code> within a system. However, other kinds of kernel <code>Functions</code> are also allowed, to permit use of <code>Functions</code> from the Kernel Model Libraries.</p> + + + + <p>A <code>CalculationUsage</code> must specialize directly or indirectly the <code>CalculationUsage</code> <em><code>Calculations::calculations</code></em> from the Systems Model Library.</p> - - - OCL2.0 - if not owningMembership.oclIsKindOf(VariantMembership) then - self.oclAsType(Feature).namingFeature() -else if ownedReferenceSubsetting = null then null -else ownedReferenceSubsetting.referencedFeature -endif endif - - - - - - - - - - <p>If <code>ownedReferenceSubsetting</code> is not null, return the <code>featureTarget</code> of the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code>.</p> + + OCL2.0 + specializesFromLibrary('Calculations::calculations') + + + + + OCL2.0 + owningType <> null and +(owningType.oclIsKindOf(CalculationDefinition) or + owningType.oclIsKindOf(CalculationUsage)) implies + specializesFromLibrary('Calculations::Calculation::subcalculations') + + + + + + + <p>The <ode>Function</code> that is the <code>type</code> of this <code>CalculationUsage</code>. Nominally, this would be a <code>CalculationDefinition</code>, but a kernel <code>Function</code> is also allowed, to permit use of <code>Functions</code> from the Kernel Model Libraries.</p> - - + + + + + + <p>A <code>CalculationUsage</code> is not model-level evaluable.</p> + + + OCL2.0 - if ownedReferenceSubsetting = null then null -else ownedReferenceSubsetting.referencedFeature.featureTarget -endif + false - + + + + + + + - - - - <p>The variation point Usage that for which this Usage represents a variant, derived as the <code>owningVariationUsage</code> of the <code>owningVariantMembership</code> of the Usage.</p> - - - - - - - - - <p>The Definition that owns the <code>ownedConcern</code>.</p> + + + + <p>The CalculationDefinitions that feature a certain CalculationUsage.</p> - - + + - - - - <p>The Definition that owns the <code>ownedAttribute</code>.</p> + + + + <p>The Definition that owns the <code>ownedCalculation</code>.</p> - - + + - - - - <p>The <code>Definition</code> that owns the <code>ownedFlow</code>.</p> + + + + <p>The CalculationUsage being typed by a certain Function.</p> - - + + - - - - <p>The EnumerationDefinition that owns a certain <code>enumeratedValue</code>.</p> + + + + <p>The Usage in which the <code>nestedCalculation<code> is nested.</p> - - + + - - - <p>An <code>EnumerationUsage</code> is an <code>AttributeUsage</code> whose <code>attributeDefinition</code> is an <code>EnumerationDefinition</code>.</p> + + + <p>A <code>CalculationDefinition</code> is an <coed>ActionDefinition</code> that also defines a <code>Function</code> producing a <code>result</code>.</p> - - - - <p>The single EnumerationDefinition that is the type of this EnumerationUsage.</p> + + + <p>A <code>CalculationDefinition</code> must directly or indirectly specialize the <code>CalculationDefinition</code> <em><code>Calculations::Calculation</code></em> from the Systems Model Library.</p> - - + + OCL2.0 + specializesFromLibrary('Calculations::Calculation') + + + + + <p>The <code>calculations</code> of a <code>CalculationDefinition</code> are those of its <code>actions</code> that are <code>CalculationUsages</code>.</p> + + + OCL2.0 + calculation = action->selectByKind(CalculationUsage) + + + + + + + <p>The <code>actions</code> of this <code>CalculationDefinition</code> that are <code>CalculationUsages</code>.</p> + + + - - - <p>An <code>EnumerationDefinition</code> is an <code>AttributeDefinition</code> all of whose instances are given by an explicit list of <code>enumeratedValues</code>. This is realized by requiring that the <code>EnumerationDefinition</code> have <code>isVariation = true</code>, with the <code>enumeratedValues</code> being its <code>variants</code>.</p> + + + <p>A <code>ConjugatedPortDefinition</code> is a <code>PortDefinition</code> that is a <code>PortDefinition</code> of its original <code>PortDefinition</code>. That is, a <code>ConjugatedPortDefinition</code> inherits all the <code>features</code> of the original <code>PortDefinition</code>, but input <code>flows</code> of the original <code>PortDefinition</code> become outputs on the <code>ConjugatedPortDefinition</code> and output <code>flows</code> of the original <code>PortDefinition</code> become inputs on the <code>ConjugatedPortDefinition</code>. Every <code>PortDefinition</code> (that is not itself a <code><code>ConjugatedPortDefinition</code></code>) has exactly one corresponding <code>ConjugatedPortDefinition</code>, whose effective name is the name of the <code>originalPortDefinition</code>, with the character <code>~</code> prepended.</p> - - - <p>An <code>EnumerationDefinition</code> must be a variation.</p> + + + <p>The <code>originalPortDefinition</code> of the <code>ownedPortConjugator</code> of a <code>ConjugatedPortDefinition</code> must be the <code>originalPortDefinition</code> of the <code>ConjugatedPortDefinition</code>.</p> - + OCL2.0 - isVariation + ownedPortConjugator.originalPortDefinition = originalPortDefinition - - - - <p><code>EnumerationUsages</code> of this <code>EnumerationDefinition</code>that have distinct, fixed values. Each <code>enumeratedValue</code> specifies one of the allowed instances of the <code>EnumerationDefinition</code>.</p> + + + <p>A <code>ConjugatedPortDefinition</code> must not itself have a <code>conjugatedPortDefinition</code>. - - + + OCL2.0 + conjugatedPortDefinition = null + + + + + + <p>The original <code>PortDefinition</code> for this <code>ConjugatedPortDefinition</code>, which is the <code>owningNamespace</code> of the <code>ConjugatedPortDefinition</code>.</p> + + + - - - <p>An EnumerationDefinition is considered semantically to be a variation whose allowed variants are its <code>enumerationValues</code>.</p> + + + <p>The <code>PortConjugation</code> that is the <code>ownedConjugator</code> of this <code>ConjugatedPortDefinition</code>, linking it to its <code>originalPortDefinition</code>.</p> - - + + + + + <p>If the <code>name</code> of the <code>originalPortDefinition</code> is non-empty, then return that with the character <code>~</code> prepended.</p> + + + + OCL2.0 + let originalName : String = originalPortDefinition.name in +if originalName = null then null +else '~' + originalName +endif + + + + + + + + - - - - <p>The EnumerationUsages that are typed by a certain EnumerationDefinition.</p> + + + + <p>The PortUsages that are typed by a certain PortDefinition.</p> - - + + - - - <p>An <code>ItemDefinition</code> is an <code>OccurrenceDefinition</code> of the <code>Structure</code> of things that may themselves be systems or parts of systems, but may also be things that are acted on by a system or parts of a system, but which do not necessarily perform actions themselves. This includes items that can be exchanged between parts of a system, such as water or electrical signals.</p> + + + <p>A <code>PortConjugation</code> is a <code>Conjugation</code> <code>Relationship</code> between a <code>PortDefinition</code> and its corresponding <code>ConjugatedPortDefinition</code>. As a result of this <code>Relationship</code>, the <code>ConjugatedPortDefinition</code> inherits all the <code>features</code> of the original <code>PortDefinition</code>, but input <code>flows</code> of the original <code>PortDefinition</code> become outputs on the <code>ConjugatedPortDefinition</code> and output <code>flows</code> of the original <code>PortDefinition</code> become inputs on the <code>ConjugatedPortDefinition</code>.</code></p> - - - <p>An <code>ItemDefinition</code> must directly or indirectly specialize the Systems Library Model <code>ItemDefinition</code> <em><code>Items::Item</code>.</p> + + + + <p>The <code>PortDefinition</code> being conjugated.</p> - - OCL2.0 - specializesFromLibrary('Items::Item') - - - - + + + + + + <p>The <code>ConjugatedPortDefinition</code> that is conjugate to the <code>originalPortDefinition</code>.</p> + + + + - - - <p>An <code>ItemUsage</code> is a <code>ItemUsage</code> whose <code>definition</code> is a <code>Structure</code>. Nominally, if the <code>definition</code> is an <code>ItemDefinition</code>, an <code>ItemUsage</code> is a <code>ItemUsage</code> of that <code>ItemDefinition</code> within a system. However, other kinds of Kernel <code>Structures</code> are also allowed, to permit use of <code>Structures</code> from the Kernel Model Libraries.</p> + + + <p>A <code>PortDefinition</code> defines a point at which external entities can connect to and interact with a system or part of a system. Any <code>ownedUsages</code> of a <code>PortDefinition</code>, other than <code>PortUsages</code>, must not be composite.</p> + + + - - - <p>The <code>itemDefinitions</code> of an <code>ItemUsage</code> are those <code>occurrenceDefinitions</code> that are <code>Structures</code>.</p> + + + <p>The <code>conjugatedPortDefinition</code> of a <code>PortDefinition</code> is the <code>ownedMember</code> that is a <code>ConjugatedPortDefinition</code>.</p> + + + OCL2.0 + conjugatedPortDefinition = +let conjugatedPortDefinitions : OrderedSet(ConjugatedPortDefinition) = + ownedMember->selectByKind(ConjugatedPortDefinition) in +if conjugatedPortDefinitions->isEmpty() then null +else conjugatedPortDefinitions->first() +endif + + + + + <p>The <code>ownedUsages</code> of a <code>PortDefinition</code> that are not <code>PortUsages</code> must not be composite.</p> - + OCL2.0 - itemDefinition = occurrenceDefinition->selectByKind(Structure) + ownedUsage-> + reject(oclIsKindOf(PortUsage))-> + forAll(not isComposite) - - - <p>An <code>ItemUsage</code> must directly or indirectly specialize the Systems Model Library <code>ItemUsage</code> <em><code>items</code></em>.</p> + + + <p>Unless it is a <code>ConjugatedPortDefinition</code>, a <code>PortDefinition</code> must have exactly one <code>ownedMember</code> that is a <code>ConjugatedPortDefinition</code>.</p> - + OCL2.0 - specializesFromLibrary('Items::items') + not oclIsKindOf(ConjugatedPortDefinition) implies + ownedMember-> + selectByKind(ConjugatedPortDefinition)-> + size() = 1 - - + + + <p>A <code>PortDefinition</code> must directly or indirectly specialize the <code>PortDefinition</code> <em><code>Ports::Port</code></em> from the Systems Model Library.</p> + + OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(ItemDefinition) or - owningType.oclIsKindOf(ItemUsage)) implies - specializesFromLibrary('Items::Item::subitem') + specializesFromLibrary('Ports::Port') - - - - <p>The Structures that are the <code>definitions</code> of this ItemUsage. Nominally, these are ItemDefinitions, but other kinds of Kernel Structures are also allowed, to permit use of Structures from the Kernel Library.</p> + + + + + <p>The <code>ConjugatedPortDefinition</code> that is conjugate to this <code>PortDefinition</code>.</p> - - + + - - - <p>An <code>IncludeUseCaseUsage</code> is a <code>UseCaseUsage</code> that represents the inclusion of a <code>UseCaseUsage</code> by a <code>UseCaseDefinition</code> or <code>UseCaseUsage</code>. Unless it is the <code>IncludeUseCaseUsage</code> itself, the <code>UseCaseUsage</code> to be included is related to the <code>includedUseCase</code> by a <code>ReferenceSubsetting</code> <code>Relationship</code>. An <code>IncludeUseCaseUsage</code> is also a PerformActionUsage, with its <code>useCaseIncluded</code> as the <code>performedAction</code>.</p> - + + + <p>A <code>ConjugatedPortTyping</code> is a <code>FeatureTyping</code> whose <code>type</code> is a <code>ConjugatedPortDefinition</code>. (This relationship is intended to be an abstract-syntax marker for a special surface notation for conjugated typing of ports.)</p> - - - <p>A <code>IncludeUseCaseUsage</code> whose <code>owningType</code> is a <code>UseCaseDefinition</code> or <code>UseCaseUsage</code> must directly or indirectly specialize the <code>UseCaseUsage</code> <em><code>UseCases::UseCase::includedUseCases</code></em> from the Systems Model Library.</p> + + + <p>The <code>portDefinition</code> of a <code>ConjugatedPortTyping</code> is the <code>originalPortDefinition</code> of the <code>conjugatedPortDefinition</code> of the <code>ConjugatedPortTyping</code>.</p> - + OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(UseCaseDefinition) or - owningType.oclIsKindOf(UseCaseUsage) implies - specializesFromLibrary('UseCases::UseCase::includedUseCases') + portDefinition = conjugatedPortDefinition.originalPortDefinition - - - <p>If an <code>IncludeUseCaseUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of the <code>referencedFeature</code> must be a <code>UseCaseUsage</code>.</p> + + + + <p>The <code>originalPortDefinition</code> of the <code>conjugatedPortDefinition</code> of this <code>ConjugatedPortTyping</code>.</p> - - OCL2.0 - referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(UseCaseUsage) - - - - - - - <p>The <code>UseCaseUsage</code> to be included by this <code>IncludeUseCaseUsage</code>. It is the <code>performedAction</code> of the <code>IncludeUseCaseUsage</code> considered as a <code>PerformActionUsage</code>, which must be a <code>UseCaseUsage</code>.</p> + + + + + + <p>The <code>type</code> of this <code>ConjugatedPortTyping</code> considered as a <code>FeatureTyping</code>, which must be a <code>ConjugatedPortDefinition</code>.</p> - - + + - - - - <p>The UseCaseUsage that includes a certain <code>includedUseCase</code>.</p> - - - - - - - - - <p>The UseCaseUsages being typed by a certain UseCaseDefinition.</p> + + + + <p>The PortConjugation that relates a certain PortDefinition to its ConjugatedPortDefinition (if any).</p> - - + + - - - <p>A <code>UseCaseDefinition</code> is a <code>CaseDefinition</code> that specifies a set of actions performed by its subject, in interaction with one or more actors external to the subject. The objective is to yield an observable result that is of value to one or more of the actors.</p> - + + + <p>A <code>PortUsage</code> is a usage of a <code>PortDefinition</code>. A <code>PortUsage</code> itself as well as all its <code>nestedUsages</code> must be referential (non-composite).</p> - - - <p>The <code>includedUseCases<code> of a <code>UseCaseDefinition</code> are the <code>useCaseIncludeds</code> of the <code>IncludeUseCaseUsages</code> owned by the <code>UseCaseDefinition<code>.</p> + + + <p>The <code>nestedUsages</code> of a <code>PortUsage</code> that are not themselves <code>PortUsages</code> must not be composite.</p> - + OCL2.0 - includedUseCase = ownedUseCase-> - selectByKind(IncludeUseCaseUsage). - useCaseIncluded + nestedUsage-> + reject(oclIsKindOf(PortUsage))-> + forAll(not isComposite) - - - <p>A <code>UseCaseDefinition</code> must directly or indirectly specializes the base <code>UseCaseDefinition</code> <code><em>UseCases::UseCase</em></code> from the Systems Model Library.</p> - - - + + + <p>A <code>PortUsage</code> must directly or indirectly specialize the <code>PortUsage</code> <em><code>Ports::ports</code></em> from the Systems Model Library.</p> - + OCL2.0 - specializesFromLibrary('UseCases::UseCase') + specializesFromLibrary('Ports::ports') - - - - <p>The <code>UseCaseUsages</code> that are included by this <code>UseCaseDefinition</code>, which are the <code>useCaseIncludeds</code> of the <code>IncludeUseCaseUsages</code> owned by this <code>UseCaseDefinition<code>.</p> - - - - - - - - - <p>The UseCaseDefinition that includes a certain <code>includedUseCase</code>.</p> - - - - - - - - <p>A <code>UseCaseUsage</code> is a <code>Usage</code> of a <code>UseCaseDefinition</code>.</p> - - - - <p>The <code>includedUseCases<code> of a <code>UseCaseUsage</code> are the <code>useCaseIncludeds</code> of the <code>IncludeUseCaseUsages</code> owned by the <code>UseCaseUsage<code>.</p> + + + <p>A composite <code>PortUsage</code> with an <code>owningType</code> that is a <code>PortDefinition</code> or <code>PortUsage</code> must directly or indirectly specialize the <code>PortUsage</code> <em><code>Ports::Port::subports</code></em> from the Systems Model Library.</p> - + OCL2.0 - includedUseCase = ownedUseCase-> - selectByKind(IncludeUseCaseUsage). - useCaseIncluded + isComposite and owningType <> null and +(owningType.oclIsKindOf(PortDefinition) or + owningType.oclIsKindOf(PortUsage)) implies + specializesFromLibrary('Ports::Port::subports') - - - <p>A <code>UseCaseUsage</code> must directly or indirectly specializes the base <code>UseCaseUsage</code> <em><code>UseCases::useCases</code></em> from the Systems Model Library.</p> + + + <p>Unless a <code>PortUsage</code> has an <code>owningType</code> that is a <code>PortDefinition</code> or a <code>PortUsage</code>, it must be referential (non-composite).</p> - + OCL2.0 - specializesFromLibrary('UseCases::useCases') + owningType = null or +not owningType.oclIsKindOf(PortDefinition) and +not owningType.oclIsKindOf(PortUsage) implies + isReference - - - <p>A composite <code>UseCaseUsage</code> whose <code>owningType</code> is a <code>UseCaseDefinition</code> or <code>UseCaseUsage</code> must specialize the <code>UseCaseUsage</code> <em><code>UseCases::UseCase::subUseCases</code></em> from the Systems Model Library.</p> + + + <p>A <code>PortUsage</code> whose <code>owningType</code> is a <code>PartDefinition</code> or <code>PartUsage</code> must directly or indirectly specialize the <code>PortUsage</code> <em><code>Parts::Part::ownedPorts</code></em> from the Systems Model Library.</p> - + OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(UseCaseDefinition) or - owningType.oclIsKindOf(UseCaseUsage)) implies - specializesFromLibrary('UseCases::UseCase::subUseCases') + owningType <> null and +(owningType.oclIsKindOf(PartDefinition) or + owningType.oclIsKindOf(PartUsage)) implies + specializesFromLibrary('Parts::Part::ownedPorts') - - - - <p>The <code>UseCaseDefinition</code> that is the <code>definition</code> of this <code>UseCaseUsage</code>.</p> + + + + <p>The <code>occurrenceDefinitions</code> of this <code>PortUsage</code>, which must all be <code>PortDefinitions<code>.</p> - - + + - - - <p>The <code>UseCaseUsages</code> that are included by this <code>UseCaseUse</code>, which are the <code>useCaseIncludeds</code> of the <code>IncludeUseCaseUsages</code> owned by this <code>UseCaseUsage<code>.</p> + + + + + + + <p>The ConjugatedPortTypings whose <code>conjugatedPortDefinition</code> a certain ConjugatedPortDefinition.</p> - - - + + + - - - - <p>The IncludeUseCaseUsages that have a certain UseCaseUsage as their <code>includedUseCase</code>.</p> + + + + <p>The ConjugatedPortTypings whose <code>portDefinition</code> is a certain PortDefinition.</p> - - + + diff --git a/org.omg.sysml/model/SysML_only.uml b/org.omg.sysml/model/SysML_only.uml index f731bd829..3aab1b0f1 100644 --- a/org.omg.sysml/model/SysML_only.uml +++ b/org.omg.sysml/model/SysML_only.uml @@ -1,8489 +1,8500 @@ - - - - <p>A <code>RequirementConstraintKind</code> indicates whether a <code>ConstraintUsage</code> is an assumption or a requirement in a <code>RequirementDefinition</code> or <code>RequirementUsage</code>.</p> - - - - <p>Indicates that a member <code>ConstraintUsage</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage</code> represents an assumption.</p> - - - - - <p>Indicates that a member <code>ConstraintUsage</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage</code>represents an requirement.</p> - - - - - - - <p>The ActorMembership that has a certain PartUsage as its <code>ownedActorParameter</code>.</p> - - - - - - - - - - <p>The RequirementDefinition that has a certain ConstraintUsage as an <code>assumedConstraint</code> (if any).</p> - - - - - - - - - <p>A <code>SatisfyRequirementUsage</code> is an <code>AssertConstraintUsage</code> that asserts, by default, that a satisfied <code>RequirementUsage</code> is true for a specific <code>satisfyingFeature</code>, or, if <code>isNegated = true</code>, that the <code>RequirementUsage</code> is false. The satisfied <code>RequirementUsage</code> is related to the <code>SatisfyRequirementUsage</code> by a <code>ReferenceSubsetting</code> <code>Relationship</code>.</p> + + + + <p>A <code>MergeNode</code> is a <code>ControlNode</code> that asserts the merging of its incoming <code>Successions</code>. A <code>MergeNode</code> may have at most one outgoing <code>Successions</code>.</p> - - - <p>The <code>satisfyingFeature</code> of a <code>SatisfyRequirementUsage</code> is the <code>Feature</code> to which the <code>subjectParameter</code> is bound.</p> + + + <p>A <code>MergeNode</code> may have at most one outgoing <code>Succession</code>.</p> - + OCL2.0 - satisfyingFeature = - let bindings: BindingConnector = ownedMember-> - selectByKind(BindingConnector)-> - select(b | b.relatedElement->includes(subjectParameter)) in - if bindings->isEmpty() or - bindings->first().relatedElement->exits(r | r <> subjectParameter) - then null - else bindings->first().relatedElement->any(r | r <> subjectParameter) - endif + sourceConnector->selectAsKind(Succession)->size() <= 1 - - - <p>A <code>SatisfyRequirementUsage</code> must have exactly one <code>ownedMember</code> that is a <code>BindingConnector</code> between its <code>subjectParameter</code> and some <code>Feature</code> other than the <code>subjectParameter</code>.</p> + + + <p>All incoming <code>Successions</code> to a <code>MergeNode</code> must have a source <code>multiplicity</code> of <code>0..1</code>.</p> - + OCL2.0 - ownedMember->selectByKind(BindingConnector)-> - select(b | - b.relatedElement->includes(subjectParameter) and - b.relatedElement->exists(r | r <> subjectParameter))-> - size() = 1 + targetConnector->selectByKind(Succession)-> + collect(connectorEnd->at(1))-> + forAll(sourceMult | + multiplicityHasBounds(sourceMult, 0, 1)) - - - <p>If a <code>SatisfyRequirementUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of its <code>referencedFeature</code> must be a <code>RequirementUsage</code>.</p> + + + <p>All incoming <code>Successions</code> to a <code>MergeNode</code> must subset the inherited <em><code>incomingHBLink</code></em> <code>feature</code> of the <code>MergeNode</code>.</p> - + OCL2.0 - referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(RequirementUsage) + targetConnector->selectByKind(Succession)-> + forAll(subsetsChain(self, + resolveGlobal('ControlPerformances::MergePerformance::incomingHBLink'))) - - - <p>If a <code>SatisfyRequirementUsage</code> is negated, then it must directly or indirectly specialize the <code>RequirementUsage</code> <em><code>Requirements::notSatisfiedRequirementChecks</code></em>. Otherwise, it must directly or indirectly specialize the <code>RequirementUsage</code> <em><code>Requirements::satisfiedRequirementChecks</code></em>.</p> + + + <p>A <code>MergeNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::merges</code></em> from the Systems Model Library.</p> - + OCL2.0 - if isNegated then - specializesFromLibrary('Requirements::notSatisfiedRequirementChecks') -else - specializesFromLibrary('Requirements::satisfiedRequirementChecks') -endif + specializesFromLibrary('Actions::Action::merges') - - - - - <p>The <code>RequirementUsage</code> that is satisfied by the <code>satisfyingSubject</code> of this <code>SatisfyRequirementUsage</code>. It is the <code>assertedConstraint</code> of the <code>SatisfyRequirementUsage</code> considered as an <code>AssertConstraintUsage</code>, which must be a <code>RequirementUsage</code>.</p> - - - - - - - <p>The <code>Feature</code> that represents the actual subject that is asserted to satisfy the <code>satisfiedRequirement</code>. The <code>satisfyingFeature</code> is bound to the <code>subjectParameter</code> of the <code>SatisfyRequirementUsage</code>.</p> - - - - - - - - - - <p>The RequirementUsages that have a certain Usage as their <code>subjectParameter</code>.</p> - - - - - - + - - - - <p>The RequirementUsage that addresses a certain <code>addressedConcern</code>.</p> + + + + <p>The AcceptActionUsage that has a certain Expression as its <code>receiverArgument</code>.</p> - - + + - - - - <p>The AddressedConcernMembership that owns a certain ConcernUsage as its <code>ownedConcern</code>.</p> + + + + <p>The <code>LoopActionUsage</code> that has a certain <code>ActionUsage</code> as its <code>bodyAction</code>.</p> - - + + - - - - <p>The RequirementDefinition that addresses a certain <code>addressedConcern</code>.</p> + + + + <p>The <code>SendActionUsage</code> that has a certain <code>Expression</code> as its <code>senderArgument</code>.</p> - - + + - - - <p>A <code>RequirementDefinition</code> is a <code>ConstraintDefinition</code> that defines a requirement used in the context of a specification as a constraint that a valid solution must satisfy. The specification is relative to a specified subject, possibly in collaboration with one or more external actors.</p> + + + <p>A <code>WhileLoopActionUsage</code> is a <code>LoopActionUsage</code> that specifies that the <code>bodyAction</code> <code>ActionUsage</code> should be performed repeatedly while the result of the <code>whileArgument</code> <code>Expression</code> is true or until the result of the <code>untilArgument</code> <code>Expression</code> (if provided) is true. The <code>whileArgument</code> <code>Expression</code> is evaluated before each (possible) performance of the <code>bodyAction</code>, and the <code>untilArgument</code> <code>Expression</code> is evaluated after each performance of the <code>bodyAction</code>.</p> - - - <p>The <code>texts</code> of a<code>RequirementDefinition</code> are the <code>bodies</code> of the <code>documentation</code> of the <code>RequirementDefinition</code>.</p> + + + <p>A composite <code>WhileLoopActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::whileLoops</code></em> from the Systems Model Library.</p> - + OCL2.0 - text = documentation.body + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::whileLoops') - - - <p>The <code>assumedConstraints</code> of a <code>RequirementDefinition</code> are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind = assumption</code>.</p> + + + <p>The <code>whileArgument</code> of a <code>WhileLoopActionUsage</code> is its third input <code>parameter</code>, which, if it exists, must be an <code>Expression</code>.</p> - + OCL2.0 - assumedConstraint = ownedFeatureMembership-> - selectByKind(RequirementConstraintMembership)-> - select(kind = RequirementConstraintKind::assumption). - ownedConstraint + untilArgument = + let parameter : Feature = inputParameter(3) in + if parameter <> null and parameter.oclIsKindOf(Expression) then + parameter.oclAsType(Expression) + else + null + endif + - - - <p>The <code>requiredConstraints</code> of a <code>RequirementDefinition</code> are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind = requirement</code>.</p> + + + <p>A <code>WhileLoopActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::whileLoopActions</code></em> from the Systems Model Library.</p> - + OCL2.0 - requiredConstraint = ownedFeatureMembership-> - selectByKind(RequirementConstraintMembership)-> - select(kind = RequirementConstraintKind::requirement). - ownedConstraint + specializesFromLibrary('Actions::whileLoopActions') - - - <p>The <code>subjectParameter</code> of a <code>RequirementDefinition</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p> + + + <p>The <code>whileArgument</code> of a <code>WhileLoopActionUsage</code> is its first input <code>parameter</code>, which must be an <code>Expression</code>.</p> - + OCL2.0 - subjectParameter = - let subjects : OrderedSet(SubjectMembership) = - featureMembership->selectByKind(SubjectMembership) in - if subjects->isEmpty() then null - else subjects->first().ownedSubjectParameter - endif + whileArgument = + let parameter : Feature = inputParameter(1) in + if parameter <> null and parameter.oclIsKindOf(Expression) then + parameter.oclAsType(Expression) + else + null + endif + - - - <p>The <code>framedConcerns</code> of a <code>RequirementDefinition</code> are the <code>ownedConcerns</code> of the <code>FramedConcernMemberships</code> of the <code>RequirementDefinition</code>.</p> + + + <p>A <code>WhileLoopActionUsage</code> must have at least two owned <code>input</code> <code>parameters</code>.</p> - + OCL2.0 - framedConcern = featureMembership-> - selectByKind(FramedConcernMembership). - ownedConcern + inputParameters()->size() >= 2 - - - <p>The <code>actorParameters</code> of a <code>RequirementDefinition</code> are the <code>ownedActorParameters</code> of the <code>ActorMemberships</code> of the <code>RequirementDefinition</code>.</p> - - - OCL2.0 - actorParameter = featureMembership-> - selectByKind(ActorMembership). - ownedActorParameter - - - - - <p>The <code>stakeHolderParameters</code> of a <code>RequirementDefinition</code> are the <code>ownedStakeholderParameters</code> of the <code>StakeholderMemberships</code> of the <code>RequirementDefinition</code>.</p> + + + + <p>The <code>Expression</code> whose result, if true, determines that the <code>bodyAction</code> should continue to be performed. It is the first owned <code>parameter</code> of the <code>WhileLoopActionUsage</code>.</p> + - - OCL2.0 - stakeholderParameter = featureMembership-> - selectByKind(StakholderMembership). - ownedStakeholderParameter - - - - - <p>A <code>RequirementDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> + + + + + + + <p>The <code>Expression</code> whose result, if false, determines that the <code>bodyAction</code> should continue to be performed. It is the (optional) third owned <code>parameter</code> of the <code>WhileLoopActionUsage</code>.</p> + - + + + + + + + + + <p>The <code>WhileLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>whileArgument</code>.</p> + + + + + + + + + <p>The <code>SendActionUsage</code> that has a certain <code>Expression</code> as its <code>itemsArgument</code>.</p> + + + + + + + + <p>A <code>TriggerInvocationExpression</code> is an <code>InvocationExpression</code> that invokes one of the trigger <code>Functions</code> from the Kernel Semantic Library <code><em>Triggers<em></code> package, as indicated by its <code>kind</code>.</p> + + + + <p>If a <code>TriggerInvocationExpression</code> has <code>kind = after</code>, then it must have an argument <code>Expression</code> with a <code>result</code> that conforms to the type <em><code>Quantities::ScalarQuantityValue</code></em> and a <code>feature</code> that directly or indirectly redefines <em><code>Quantities::TensorQuantityValue::mRef</code></em> and directly or indirectly specializes <em><code>ISQBase::DurationUnit</code></em>.</p> + + OCL2.0 - featureMembership-> - selectByKind(SubjectMembership)-> - size() <= 1 + kind = TriggerKind::after implies + argument->notEmpty() and + argument->at(1).result.specializesFromLibrary('Quantities::ScalarQuantityValue') and + let mRef : Element = + resolveGlobal('Quantities::TensorQuantityValue::mRef').ownedMemberElement in + argument->at(1).result.feature-> + select(ownedRedefinition.redefinedFeature-> + closure(ownedRedefinition.redefinedFeature)-> + includes(mRef))-> + exists(specializesFromLibrary('ISQBase::DurationUnit')) - - - <p>The <code>subjectParameter</code> of a <code>RequirementDefinition</code> must be its first <code>input</code>.</p> + + + <p>If a <code>TriggerInvocationExpression</code> has <code>kind = at</code>, then it must have an argument <code>Expression</code> with a <code>result</code> that conforms to the type <em><code>Time::TimeInstantValue</code></em>.</p> - + OCL2.0 - input->notEmpty() and input->first() = subjectParameter + kind = TriggerKind::at implies + argument->notEmpty() and + argument->at(1).result.specializesFromLibrary('Time::TimeInstantValue') - - - <p>A <code>RequirementDefinition</code> must directly or indirectly specialize the base <code>RequirementDefinition</code> <code><em>Requirements::RequirementCheck</em></code> from the Systems Model Library.</p> + + + <p>If a <code>TriggerInvocationExpression</code> has <code>kind = when</code>, then it must have an <code>argument</code> that is a <code>FeatureReferenceExpression</code> whose <code>referent</code> is an <code>Expression</code> with a <code>result</code> that conforms to the type <em><code>ScalarValues::Boolean</code></em>.</p> - + OCL2.0 - specializesFromLibrary('Requirements::RequirementCheck') + kind = TriggerKind::when implies + argument->notEmpty() and + argument->at(1).oclIsKindOf(FeatureReferenceExpression) and + let referent : Feature = + argument->at(1).oclAsType(FeatureReferenceExpression).referent in + referent.oclIsKindOf(Expression) and + referent.oclAsType(Expression).result.specializesFromLibrary('ScalarValues::Boolean') - - - - <p>An optional modeler-specified identifier for this <code>RequirementDefinition</code> (used, e.g., to link it to an original requirement text in some source document), which is the <code>declaredShortName</code> for the <code>RequirementDefinition</code>.</p> - - - - - - - - - <p>An optional textual statement of the requirement represented by this <code>RequirementDefinition</code>, derived from the <code>bodies</code> of the <code>documentation</code> of the <code>RequirementDefinition</code>.</p> - - - - - - - - - <p>The <code>parameter</code> of this <code>RequirementDefinition</code> that represents its subject.</p> - - - - - - - - - <p>The <code>parameters</code> of this <code>RequirementDefinition</code> that represent actors involved in the requirement.</p> - - - - - - - - - <p>The <code>parameters</code> of this <code>RequirementDefinition</code> that represent stakeholders for th requirement.</p> - - - - - - - - - <p>The owned <code>ConstraintUsages</code> that represent assumptions of this <code>RequirementDefinition</code>, which are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind = assumption</code>.</p> - - - - - - - - <p>The owned <code>ConstraintUsages</code> that represent requirements of this <code>RequirementDefinition</code>, derived as the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind</code> = <code>requirement</code>.</p> + + + + + + <p>Indicates which of the <code>Functions</code> from the <code><em>Triggers</em></code> model in the Kernel Semantic Library is to be invoked by this <code>TriggerInvocationExpression</code>.</p> - - - - - - <p>The <code>ConcernUsages</code> framed by this <code>RequirementDefinition</code>, which are the <code>ownedConcerns</code> of all <code>FramedConcernMemberships</code> of the <code>RequirementDefinition</code>.</p> + + + <p>Return one of the <code>Functions</code> <em><code>TriggerWhen</code></em>, <em><code>TriggerAt</code></em> or <em><code>TriggerAfter</code></em>, from the Kernel Semantic Library <em><code>Triggers</code></em> package, depending on whether the <code>kind</code> of this <code>TriggerInvocationExpression</code> is <code>when</code>, <code>at</code> or <code>after</code>, respectively.</p> - - - + + + OCL2.0 + resolveGlobal( + if kind = TriggerKind::when then + 'Triggers::TriggerWhen' + else if kind = TriggerKind::at then + 'Triggers::TriggerAt' + else + 'Triggers::TriggerAfter' + endif endif +).memberElement.oclAsType(Type) + + + + + + + - - - - <p>The RequirementUsages typed by a certain RequirementDefinition.</p> + + + + <p>The <code>IfActionUsage</code> that has a certain <code>Expression</code> as its <code>ifArgument</code>.</p> - - + + - - - - <p>The RequirementUsage that has a certain ConstraintUsage as an <cod>assumedConstraint</code> (if any).</p> + + + + <p>The AssignmentActionUsages that gave a certain <code>referent</code> Expression.</p> - - - + + + - - - - <p>TheStakehplderMembership that has a certain PartUsage as its <code>ownedStakeholderParameter</code>.</p> + + + + <p>The <code>SendActionUsage</code> that has a certain <code>Expression<code> as its <code>receiverArgument</code>.</p> - - - + + - - - <p>An <code>ActorMembership</code> is a <code>ParameterMembership</code> that identifies a <code>PartUsage</code> as an <em>actor</em> <code>parameter</code>, which specifies a role played by an external entity in interaction with the <code>owningType</code> of the <code>ActorMembership</code>.</p> + + + <p>A <code>DecisionNode</code> is a <code>ControlNode</code> that makes a selection from its outgoing <code>Successions</code>.</p> - - - <p>The <code>owningType</code> of an <code>ActorMembership</code> must be a <code>RequirementDefinition</code>, <code>RequirementUsage</code>, <code>CaseDefinition</code>, or <code>CaseUsage</code>.</p> + + + <p>A <code>DecisionNode</code> may have at most one incoming <code>Succession</code>.</p> - + OCL2.0 - owningType.oclIsKindOf(RequirementUsage) or -owningType.oclIsKindOf(RequirementDefinition) or -owningType.oclIsKindOf(CaseDefinition) or -owningType.oclIsKindOf(CaseUsage) - + targetConnector->selectByKind(Succession)->size() <= 1 - - - - - - <p>The <code>PartUsage</code> specifying the actor.</p> - - - - - - - - - - <p>The ConcernUsages that are typed by a certain <code>concernDefinition</code>.</p> - - - - - - - - - - - - - - - - - <p>The RequirementConstraintMembership that has a certain ConstraintUsage as its <code>referencedConstraint</code>.</p> - - - - - - - - - <p>The SatisfyRequirementUsages that have a certain Feature as their <tt>satisfyingFeature</tt>.</p> + + + <p>All outgoing <code>Successions</code> from a <code>DecisionNode</code> must have a target <code>multiplicity</code> of <code>0..1</code>.</p> - - - - - - - - <p>The RequirementConstraintMembership that owns a certain ConstraintUsage as its <code>ownedConstraint</code>.</p> + + OCL2.0 + sourceConnector->selectAsKind(Succession)-> + collect(connectorEnd->at(2))-> + forAll(targetMult | + multiplicityHasBounds(targetMult, 0, 1)) + + + + + <p>A <code>DecisionNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::decisions</code></em> from the Systems Model Library.</p> - - - - - - - - - <p>The RequirementDefinitions that have a certain Usage as their <code>subjectParameter</code>.</p> + + OCL2.0 + specializesFromLibrary('Actions::Action::decisions') + + + + + <p>All outgoing <code>Successions</code> from a <code>DecisionNode</code> must subset the inherited <em><code>outgoingHBLink</code></em> <code>feature</code> of the <code>DecisionNode</code>.</p> - - - - - + + OCL2.0 + sourceConnector->selectByKind(Succession)-> + forAll(subsetsChain(self, + resolveGlobal('ControlPerformances::DecisionPerformance::outgoingHBLink'))) + + + - - - <p>A <code>ConcernDefinition</code> is a <code>RequirementDefinition</code> that one or more stakeholders may be interested in having addressed. These stakeholders are identified by the <code>ownedStakeholders</code>of the <code>ConcernDefinition</code>.</p> + + + <p>A <code>SendActionUsage</code> is an <code>ActionUsage</code> that specifies the sending of a payload given by the result of its <code>payloadArgument</code> <code>Expression</code> via a <em><code>MessageTransfer</code></em> whose <em><code>source</code></em> is given by the result of the <code>senderArgument</code> <code>Expression</code> and whose <code>target</code> is given by the result of the <code>receiverArgument</code> <code>Expression</code>. If no <code>senderArgument</code> is provided, the default is the <em><code>this</code></em> context for the action. If no <code>receiverArgument</code> is given, then the receiver is to be determined by, e.g., outgoing <em><code>Connections</code></em> from the sender.</p> - - - <p>A <code>ConcernDefinition</code> must directly or indirectly specialize the base <code>ConcernDefinition</code> <em><code>Requirements::ConcernCheck</code></em> from the Systems Model Library.</p> + + + <p>The <code>senderArgument</code> of a <code>SendActionUsage</code> is its second argument <code>Expression</code>.</p> - + OCL2.0 - specializesFromLibrary('Requirements::ConcernCheck') + senderArgument = argument(2) - - - - - <p>A <code>RequirementConstraintMembership</code> is a <code>FeatureMembership</code> for an assumed or required <code>ConstraintUsage</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage<code>.</p> - - - - <p>The <code>referencedConstraint</code> of a <code>RequirementConstraintMembership</code> is the <code>featureTarget</code> of the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code> of the <code>ownedConstraint</code>, if there is one, and, otherwise, the <code>ownedConstraint</code> itself.</p> + + + <p>The <code>payloadArgument</code> of a <code>SendActionUsage</code> is its first argument <code>Expression</code>.</p> - + OCL2.0 - referencedConstraint = - let referencedFeature : Feature = - ownedConstraint.referencedFeatureTarget() in - if referencedFeature = null then ownedConstraint - else if referencedFeature.oclIsKindOf(ConstraintUsage) then - refrencedFeature.oclAsType(ConstraintUsage) - else null - endif endif + payloadArgument = argument(1) - - - <p>The <code>owningType</code> of a <code>RequirementConstraintMembership</code> must be a <code>RequirementDefinition</code> or a <code>RequirementUsage</code>.</p> + + + <p>If a <code>SendActionUsage</code> is owned via a <code>StateSubactionMembership</code> or a <code>TransitionFeatureMembership</code>, then it must have a <code>payloadArgument</code>.</p> - + OCL2.0 - owningType.oclIsKindOf(RequirementDefinition) or -owningType.oclIsKindOf(RequirementUsage) + owningFeatureMembership <> null and +(owningFeatureMembership.oclIsKindOf(StateSubactionMembership) or + owningFeatureMembership.oclIsKindOf(TransitionFeatureMembership)) implies + payloadArgument <> null - - - <p>The <code>ownedConstraint</code> of a <code>RequirementConstraintMembership</code> must be composite.</p> + + + <p>The <code>receiverArgument</code> of a <code>SendActionUsage</code> is its third argument <code>Expression</code>.</p> - + OCL2.0 - ownedConstraint.isComposite + receiverArgument = argument(3) - - - - - - <p>Whether the <code>RequirementConstraintMembership</code> is for an assumed or required <code>ConstraintUsage</code>.</p> + + + <p>A composite <code>SendActionUsage</code> that is a subaction must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::sendSubactions</code></em> from the Systems Model Library.</p> - - - - <p>The <code>ConstraintUsage</code> that is the <code>ownedMemberFeature</code> of this <code>RequirementConstraintMembership</code>.</p> + + OCL2.0 + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::acceptSubactions') + + + + + <p>A <code>SendActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::sendActions</code></em> from the Systems Model Library.</p> - - - + + OCL2.0 + specializesFromLibrary('Actions::sendActions') + + + + + + <p>An <code>Expression</code> whose result is bound to the <em><code>receiver</code></em> input parameter of this <code>SendActionUsage</code>.</p> + + + + + - - - <p> The <code>ConstraintUsage</code> that is referenced through this <code>RequirementConstraintMembership</code>. It is the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code> of the <code>ownedConstraint</code>, if there is one, and, otherwise, the <code>ownedConstraint</code> itself.</p> + + + <p>An <code>Expression</code> whose result is bound to the <code><em>payload</em></code> input parameter of this <code>SendActionUsage</code>.</p> + - - + + + - - - - - <p>The RequirementDefinition that has a certain ConstraintUsage as a <code>requiredConstraint</code> (if any).</p> + + + <p>An <code>Expression</code> whose result is bound to the <em><code>sender</code></em> input parameter of this <code>SendActionUsage</code>.</p> + - - - - - - - - - - - - + + + + - - - <p>A <code>StakeholderMembership</code> is a <code>ParameterMembership</code> that identifies a <code>PartUsage</code> as a <code>stakeholderParameter</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage</code>, which specifies a role played by an entity with concerns framed by the <code>owningType</code>.</p> + + + <p>An <code>IfActionUsage</code> is an <code>ActionUsage</code> that specifies that the <code>thenAction</code> <code>ActionUsage</code> should be performed if the result of the <code>ifArgument</code> <code>Expression</code> is true. It may also optionally specify an <code>elseAction</code> <code>ActionUsage</code> that is performed if the result of the <code>ifArgument</code> is false.</p> - - - <p>The <code>owningType</code> of a <code>StakeholderMembership</code> must be a <code>RequirementDefinition</code> or <code>RequirementUsage</code>.</p> + + + <p>The <code>thenAction</code> of an <code>ifActionUsage</code> is its second <code>parameter</code>, which must be an <code>ActionUsage</code>.</p> - + OCL2.0 - owningType.oclIsKindOf(RequirementUsage) or -owningType.oclIsKindOf(RequirementDefinition) + thenAction = + let parameter : Feature = inputParameter(2) in + if parameter <> null and parameter.oclIsKindOf(ActionUsage) then + parameter.oclAsType(ActionUsage) + else + null + endif - - - - - - <p>The <code>PartUsage</code> specifying the stakeholder.</p> + + + <p>A composite <code>IfActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::ifSubactions</code></em> from the Systems Model Library.</p> - - - - - - - - <p>A <code>FramedConcernMembership</code> is a <code>RequirementConstraintMembership</code> for a framed <code>ConcernUsage</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage</code>.</p> - - - - <p>A <code>FramedConcernMembership</code> must have <code>kind = requirement</code>.</p> + + OCL2.0 + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::ifSubactions') + + + + + <p>A <code>IfActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::ifThenActions</code></em> from the Systems Model Library. If it has an <code>elseAction</code>, then it must directly or indirectly specialize <em><code>Actions::ifThenElseActions</code></em>. - + OCL2.0 - kind = RequirementConstraintKind::requirement + if elseAction = null then + specializesFromLibrary('Actions::ifThenActions') +else + specializesFromLibrary('Actions::ifThenElseActions') +endif - - - - <p>The <code>kind</code> of an <code>FramedConcernMembership</code> must be <code>requirement</code>.</p> + + + <p>The <code>ifArgument</code> of an <code>ifActionUsage</code> is its first <code>parameter</code>, which must be an <code>Expression</code>.</p> - - - - - <p>The <code>ConcernUsage</code> that is the <code>ownedConstraint</code> of this <code>FramedConcernMembership</code>.</p> + + OCL2.0 + ifArgument = + let parameter : Feature = inputParameter(1) in + if parameter <> null and parameter.oclIsKindOf(Expression) then + parameter.oclAsType(Expression) + else + null + endif + + + + + <p>The <code>elseAction</code> of an <code>ifActionUsage</code> is its third <code>parameter</code>, if there is one, which must then be an <code>ActionUsage</code>.</p> - - + + OCL2.0 + elseAction = + let parameter : Feature = inputParameter(3) in + if parameter <> null and parameter.oclIsKindOf(ActionUsage) then + parameter.oclAsType(ActionUsage) + else + null + endif + + + + + <p>An <code>IfActionUsage</code> must have at least two owned <code>input</code> <code>parameters</code>.</p> + + + OCL2.0 + inputParameters()->size() >= 2 + + + + + + <p>The <code>ActionUsage</code> that is to be performed if the result of the <code>ifArgument</code> is false. It is the (optional) third <code>parameter</code> of the <code>IfActionUsage</code>.</p> + + + + - - - <p> The <code>ConcernUsage</code> that is referenced through this <code>FramedConcernMembership</code>. It is the <code>referencedConstraint</code> of the <code>FramedConcernMembership</code> considered as a <code>RequirementConstraintMembership</code>, which must be a <code>ConcernUsage</code>.</p> + + + <p>The <code>ActionUsage</code> that is to be performed if the result of the <code>ifArgument</code> is true. It is the second <code>parameter<code> of the <code>IfActionUsage</code>.</p> + - - + + - - - - - <p>The SubjectMembership that owns a particular Parameter as its <code>ownedSubjectParameter</code>.</p> + + + <p>The <code>Expression</code> whose result determines whether the <code>thenAction</code> or (optionally) the <code>elseAction</code> is performed. It is the first <code>parameter<code> of the <code>IfActionUsage</code>.</p> + - - - - + + + + - - - - <p>The RequirementUsage that has a certain ConstraintUsage as a <code>requiredConstraint</code> (if any).</p> + + + + <p>The IfActionUsage that has a certain ActionUsage as its <code>elseAction</code>.</p> - - - + + - - - <p>A <code>RequirementUsage</code> is a <code>Usage</code> of a <code>RequirementDefinition</code>.</p> + + + <p>A <code>LoopActionUsage</code> is an <code>ActionUsage</code> that specifies that its <code>bodyAction</code> should be performed repeatedly. Its subclasses <code>WhileLoopActionUsage</code> and <code>ForLoopActionUsage</code> provide different ways to determine how many times the <code>bodyAction</code> should be performed.</p> - - - <p>The <code>actorParameters</code> of a <code>RequirementUsage</code> are the <code>ownedActorParameters</code> of the <code>ActorMemberships</code> of the <code>RequirementUsage</code>.</p> + + + <p>The <code>bodyAction</code> of a <code>LoopActionUsage</code> is its second input <code>parameter</code>, which must be an <code>Action</code>.</p> - + OCL2.0 - actorParameter = featureMembership-> - selectByKind(ActorMembership). - ownedActorParameter + bodyAction = + let parameter : Feature = inputParameter(2) in + if parameter <> null and parameter.oclIsKindOf(Action) then + parameter.oclAsType(Action) + else + null + endif + - - - <p>The <code>assumedConstraints</code> of a <code>RequirementUsage</code> are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind = assumption</code>.</p> + + + + <p>The <code>ActionUsage</code> to be performed repeatedly by the <code>LoopActionUsage</code>. It is the second <code>parameter</code> of the <code>LoopActionUsage</code>.</p> + - + + + + + + + <p>A <code>ForLoopActionUsage</code> is a <code>LoopActionUsage</code> that specifies that its <code>bodyAction</code> <code>ActionUsage</code> should be performed once for each value, in order, from the sequence of values obtained as the result of the <code>seqArgument</code> <code>Expression</code>, with the <code>loopVariable</code> set to the value for each iteration.</p> + + + + <p>The <code>seqArgument</code> of a <code>ForLoopActionUsage</code> is its first argument <code>Expression</code>.</p> + + OCL2.0 - assumedConstraint = ownedFeatureMembership-> - selectByKind(RequirementConstraintMembership)-> - select(kind = RequirementConstraintKind::assumption). - ownedConstraint + seqArgument = argument(1) + - - - <p>The <code>framedConcerns</code> of a <code>RequirementUsage</code> are the <code>ownedConcerns</code> of the <code>FramedConcernMemberships</code> of the <code>RequirementUsage</code>.</p> + + + <p>A composite <code>ForLoopActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::forLoops</code></em> from the Systems Model Library.</p> - + OCL2.0 - framedConcern = featureMembership-> - selectByKind(FramedConcernMembership). - ownedConcern + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::forLoops') - - - <p>The <code>requiredConstraints</code> of a <code>RequirementUsage</code> are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementUsage</code> with <code>kind = requirement</code>.</p> + + + <p>The <code>loopVariable</code> of a <code>ForLoopActionUsage</code> must redefine the <code>ActionUsage</code> <code><em>Actions::ForLoopAction::var</em></code>.</p> - + OCL2.0 - requiredConstraint = ownedFeatureMembership-> - selectByKind(RequirementConstraintMembership)-> - select(kind = RequirementConstraintKind::requirement). - ownedConstraint + loopVariable <> null and +loopVariable.redefinesFromLibrary('Actions::ForLoopAction::var') - - - <p>The <code>stakeHolderParameters</code> of a <code>RequirementUsage</code> are the <code>ownedStakeholderParameters</code> of the <code>StakeholderMemberships</code> of the <code>RequirementUsage</code>.</p> + + + <p>A <code>ForLoopActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::forLoopActions</code></em> from the Systems Model Library.</p> - + OCL2.0 - stakeholderParameter = featureMembership-> - selectByKind(AStakholderMembership). - ownedStakeholderParameter + specializesFromLibrary('Actions::forLoopActions') - - - <p>The <code>subjectParameter</code> of a <code>RequirementUsage</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p> + + + <p>The <code>loopVariable</code> of a <code>ForLoopActionUsage</code> is its first <code>ownedFeature</code>, which must be a <code>ReferenceUsage</code>.</p> - + OCL2.0 - subjectParameter = - let subjects : OrderedSet(SubjectMembership) = - featureMembership->selectByKind(SubjectMembership) in - if subjects->isEmpty() then null - else subjects->first().ownedSubjectParameter + loopVariable = + if ownedFeature->isEmpty() or + not ownedFeature->first().oclIsKindOf(ReferenceUsage) then + null + else + ownedFeature->first().oclAsType(ReferenceUsage) endif - - - <p>The <code>texts</code> of a<code>RequirementUsage</code> are the <code>bodies</code> of the <code>documentation</code> of the <code>RequirementUsage</code>.</p> + + + <p>The first <code>ownedFeature</code> of a <code>ForLoopActionUsage</code> must be a <code>ReferenceUsage</code>.</p> - + OCL2.0 - text = documentation.body + ownedFeature->notEmpty() and +ownedFeature->at(1).oclIsKindOf(ReferenceUsage) + - - - <p>A <code>RequirementDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> + + + <p>A <code>ForLoopActionUsage</code> must have two owned <code>input</code> <code>parameters</code>.</p> - + OCL2.0 - featureMembership-> - selectByKind(SubjectMembership)-> - size() <= 1 + inputParameters()->size() = 2 - - - <p>The <code>subjectParameter</code> of a <code>RequirementUsage</code> must be its first <code>input</code>.</p> + + + + <p>The <code>Expression</code> whose result provides the sequence of values to which the <code>loopVariable</code> is set for each iterative performance of the <code>bodyAction</code>. It is the <code>Expression</code> whose <code>result</code> is bound to the <em><code>seq</code></em> <code>input</code> <code>parameter</code> of this <code>ForLoopActionUsage</code>.</p> + - + + + + + + + <p>The <code>ownedFeature</code> of this <co>ForLoopActionUsage</code> that acts as the loop variable, which is assigned the successive values of the input sequence on each iteration. It is the <code>ownedFeature</code> that redefines <em><code>ForLoopAction::var</code></em>.</p> + + + + + + + + <p>A <code>JoinNode</code> is a <code>ControlNode</code> that waits for the completion of all the predecessor <code>Actions</code> given by incoming <code>Successions</code>.</p> + + + + <p>A <code>JoinNode</code> may have at most one outgoing <code>Succession</code>.</p> + + OCL2.0 - input->notEmpty() and input->first() = subjectParameter + sourceConnector->selectByKind(Succession)->size() <= 1 - - - <p>A <code>RequirementUsage</code> must directly or indirectly specialize the base <code>RequirementUsage</code> <em><code>Requirements::requirementChecks</code></em> from the Systems Model Library.</p> + + + <p>A <code>JoinNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::joins</code></em> from the Systems Model Library.</p> - + OCL2.0 - specializesFromLibrary('Requirements::requirementChecks') + specializesFromLibrary('Actions::Action::join') - - - <p>A composite <code>RequirementUsage</code> whose <code>owningType</code> is a <code>RequirementDefinition</code> or ,code>RequirementUsage</code> must directly or indirectly specialize the <code>RequirementUsage</code> <em><code>Requirements::RequirementCheck::subrequirements</code></em> from the Systems Model Library.</p> + + + + + + The <code>ForLoopActionUsage</code> that has a certain <code>ReferenceUsage</code> as its <code>loopVariable</code>. - + + + + + + + + <p>The <code>TerminateActionUsage</code> that has a certain <code>Expression</code> as its <code>terminatedOccurrenceArgument</code>.</p> + + + + + + + + + <p>The Activities that feature a certain ActionUsage.</p> + + + + + + + + + + + <p>The AssignmentActionUsage that has a certain Expression as its <code>valueArgument</code>.</p> + + + + + + + + + <p>The PerformActionUsages that have a certain ActionUsage as their <code>performedAction</code>.</p> + + + + + + + + + + + + + + <p>A <code>TerminateActionUsage</code> is an <code>ActionUsage</code> that directly or indirectly specializes the <code>ActionDefinition</code> <em><code>TerminateAction</code></em> from the Systems Model Library, which causes a given <em><code>terminatedOccurrence</code></em> to end during its performance. By default, the <code>terminatedOccurrence</code> is the featuring instance (<em><code>that</code></em>) of the performance of the <code>TerminateActionUsage</code>, generally the performance of its immediately containing <code>ActionDefinition</code> or <code>ActionUsage</code>.</p> + + + + <p>A <code>TerminateActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::terminateActions</code></em> from the Systems Modeling Library.</p> + + OCL2.0 - isComposite and owningType <> null and - (owningType.oclIsKindOf(RequirementDefinition) or - owningType.oclIsKindOf(RequirementUsage)) implies - specializesFromLibrary('Requirements::RequirementCheck::subrequirements') + specializesFromLibrary('Actions::terminateActions') - - - <p>A <code>RequirementUsage</code> whose <code>owningFeatureMembership</code> is a <code>ObjectiveMembership</code> must redefine the <code>objectiveRequirement</code> of each <code>CaseDefinition</code> or <code>CaseUsage</code> that is specialized by the <code>owningType</code> of the <code>RequirementUsage</code>.</p> + + + <p>The <code>terminatedOccurrenceArgument</code> of a <code>TerminateActionUsage</code> is its first argument.</p> - + OCL2.0 - owningfeatureMembership <> null and -owningfeatureMembership.oclIsKindOf(ObjectiveMembership) implies - owningType.ownedSpecialization.general->forAll(gen | - (gen.oclIsKindOf(CaseDefinition) implies - redefines(gen.oclAsType(CaseDefinition).objectiveRequirement)) and - (gen.oclIsKindOf(CaseUsage) implies - redefines(gen.oclAsType(CaseUsage).objectiveRequirement)) + terminatedOccurrenceArgument = argument(1) - - - <p>A <code>RequirementUsage</code> whose <code>owningFeatureMembership</code> is a <code>RequirementVerificationMembership</code> must directly or indirectly specialize the <code>RequirementUsage</code> <code><em>VerificationCases::VerificationCase::obj::requirementVerifications</em></code>.</p> + + + <p>A composite <code>TerminateActionUsage</code> that is a subaction must must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::terminateSubactions</code></em> from the Systems Modeling Library.</p> - + OCL2.0 - owningFeatureMembership <> null and -owningFeatureMembership.oclIsKindOf(RequirementVerificationMembership) implies - specializesFromLibrary('VerificationCases::VerificationCase::obj::requirementVerifications') + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::terminateSubactions') - - - - <p>The <code>RequirementDefinition</code> that is the single <code>definition</code> of this <code>RequirementUsage</code>.</p> - - - - - - - <p>An optional modeler-specified identifier for this <code>RequirementUsage</code> (used, e.g., to link it to an original requirement text in some source document), which is the <code>declaredShortName</code> for the <code>RequirementUsage</code>.</p> - - - - - - - - - <p>An optional textual statement of the requirement represented by this <code>RequirementUsage</code>, derived from the <code>bodies<code> of the <code>documentation</code> of the <code>RequirementUsage</code>.</p> - - - - - - - - <p>The owned <code>ConstraintUsages</code> that represent requirements of this <code>RequirementUsage</code>, which are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementUsage</code> with <code>kind</code> = <code>requirement</code>.</p> - - - - - - - - <p>The owned <code>ConstraintUsages</code> that represent assumptions of this <code>RequirementUsage</code>, derived as the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementUsage</code> with <code>kind</code> = <code>assumption</code>.</p> - - - - - - - - <p>The <code>parameter</code> of this <code>RequirementUsage</code> that represents its subject.</p> - - - - - - - - - <p>The <code>ConcernUsages</code> framed by this <code>RequirementUsage</code>, which are the <code>ownedConcerns</code> of all <code>FramedConcernMemberships</code> of the <code>RequirementUsage</code>.</p> - - - - - - - <p>The <code>parameters</code> of this <code>RequirementUsage</code> that represent actors involved in the requirement.</p> - - - - - - - - - <p>The <code>parameters</code> of this <code>RequirementUsage</code> that represent stakeholders for the requirement.</p> + + + + <p>The <code>Expression</code> that is the <code>featureValue</code> of the <em><code>terminateOccurrence</code></em> <code>parameter</code> of this <code>TerminateActionUsage</code>. - - - - + + + - - - <p>A <code>ConcernUsage</code> is a <code>Usage</code> of a <code>ConcernDefinition</code>.</p> - - The <code>ownedStakeholder</code> features of the ConcernUsage shall all subset the <em><code>ConcernCheck::concernedStakeholders</code> </em>feature. If the ConcernUsage is an <code>ownedFeature</code> of a StakeholderDefinition or StakeholderUsage, then the ConcernUsage shall have an <code>ownedStakeholder</code> feature that is bound to the <em><code>self</code></em> feature of its owner.</p> - + + + <p>A <code>ForkNode</code> is a <code>ControlNode</code> that must be followed by successor <code>Actions</code> as given by all its outgoing <code>Successions</code>.</p> - - - <p>A <code>ConcernUsage</code> must directly or indirectly specialize the base <code>ConcernUsage</code> <em><code>Requirements::concernChecks</code></em> from the Systems Model Library.</p> + + + <p>A <code>ForkNode</code> may have at most one incoming <code>Succession</code>.</p> - + OCL2.0 - specializesFromLibrary('Requirements::concernChecks') + targetConnector->selectByKind(Succession)->size() <= 1 - - - <p>If a <code>ConcernUsage</code> is owned via a <code>FramedConcernMembership</code>, then it must directly or indirectly specialize the <code>ConcernUsage</code> <code><em>Requirements::RequirementCheck::concerns</em></code> from the Systems Model Library.</p> + + + <p>A <code>ForkNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::forks</code></em> from the Systems Model Library.</p> - + OCL2.0 - owningFeatureMembership <> null and -owningFeatureMembership.oclIsKindOf(FramedConcernMembership) implies - specializesFromLibrary('Requirements::RequirementCheck::concerns') + specializesFromLibrary('Actions::Action::forks') - - - - <p>The ConcernDefinition that is the single type of this ConcernUsage.</p> - - - - - - - - - <p>The RequirementUsages that have a certain PartUsage as an <code>actorParameter</code>.</p> - - - - - - + - - - <p>A <code>SubjectMembership</code> is a <code>ParameterMembership</code> that indicates that its <code>ownedSubjectParameter</code> is the subject of its <code>owningType</code>. The <code>owningType</code> of a <code>SubjectMembership</code> must be a <code>RequirementDefinition</code>, <code>RequirementUsage</code>, <code>CaseDefinition</code>, or <code>CaseUsage</code>.</p> + + + <p>An <code>ActionUsage</code> is a <code>Usage</code> that is also a <code>Step</code>, and, so, is typed by a <code>Behavior</code>. Nominally, if the type is an <code>ActionDefinition</code>, an <code>ActionUsage</code> is a <code>Usage</code> of that <code>ActionDefinition</code> within a system. However, other kinds of kernel <code>Behaviors</code> are also allowed, to permit use of <code>Behaviors</code> from the Kernel Model Libraries.</p> + - - - <p>The <code>owningType</code> of a <code>SubjectMembership</code> must be a <code>RequirementDefinition</code>, <code>RequirementUsage</code>, <code>CaseDefinition</code>, or <code>CaseUsage</code>.</p> + + + <p>A composite <code>ActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::subactions</code></em> from the Systems Model Library.</p> - + OCL2.0 - owningType.oclIsType(RequirementDefinition) or -owningType.oclIsType(RequiremenCaseRequirementDefinition) or -owningType.oclIsType(CaseDefinition) or -owningType.oclIsType(CaseUsage) - + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::subactions') - - + + + <p>An <code>ActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::actions</code></em> from the Systems Model Library.</p> + + + OCL2.0 + specializesFromLibrary('Actions::actions') + + + + + <p>A composite <code>ActionUsage</code> whose <code>owningType</code> is <code>PartDefinition</code> or <code>PartUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Parts::Part::ownedActions</code></em> from the Systems Model Library.</p> + + + OCL2.0 + isComposite and owningType <> null and +(owningType.oclIsKindOf(PartDefinition) or + owningType.oclIsKindOf(PartUsage)) implies + specializesFromLibrary('Parts::Part::ownedActions') + + + + + <p>An <code>ActionUsage</code> that is the <code><em>entry</em></code>, <code><em>do</em></code>, or <code><em>exit</em></code> <code><em>Action</em></code> of a <code>StateDefinition</code> or <code>StateUsage</code> must redefine the <code>entryAction</code>, <code>doAction</code>, or <code>exitAction</code> <code>feature</code>, respectively, of the <code>StateDefinition</code> <code><em>States::StateAction</em></code> from the Systems Model Library.</p> + + + OCL2.0 + owningFeatureMembership <> null and +owningFeatureMembership.oclIsKindOf(StateSubactionMembership) implies + let kind : StateSubactionKind = + owningFeatureMembership.oclAsType(StateSubactionMembership).kind in + if kind = StateSubactionKind::entry then + redefinesFromLibrary('States::StateAction::entryAction') + else if kind = StateSubactionKind::do then + redefinesFromLibrary('States::StateAction::doAction') + else + redefinesFromLibrary('States::StateAction::exitAction') + endif endif + + + + - - - <p>The <code>Usage</code< that is the <code>ownedMemberParameter</code> of this <code>SubjectMembership</code>.</p> + + + + <p>The <code>Behaviors</code> that are the <code>types</code> of this <code>ActionUsage</code>. Nominally, these would be <code>ActionDefinitions</code>, but other kinds of Kernel <code>Behaviors</code> are also allowed, to permit use of <code>Behaviors</code> from the Kernel Model Libraries.</p> + - - - + + + + + - - - - - <p>The AddressedConcernMembership that has a certain ConcernUsage as its <code>addressedConcern</code>.</p> + + + <p>Return the owned input <code>parameters</code> of this <code>ActionUsage</code>.</p> - - - - - - - - <p>The SatifyRequirementUsages that have a certain RequirementUsage as their <tt>satisfiedRequirement</tt>.</p> + + + OCL2.0 + input->select(f | f.owner = self) + + + + + + + + + + + <p>Return the <code>i</code>-th owned input <code>parameter</code> of the <code>ActionUsage</code>. Return null if the <code>ActionUsage</code> has less than <code>i</code> owned input <code>parameters</code>.</p> - - - + + + OCL2.0 + if inputParameters()->size() < i then null +else inputParameters()->at(i) +endif + + + + + + + + + + + + + + <p>Return the <code>i</code>-th argument <code>Expression</code> of an <code>ActionUsage</code>, defined as the <code>value</code> <code>Expression</code> of the <code>FeatureValue</code> of the <code>i</code>-th owned input <code>parameter</code> of the <code>ActionUsage</code>. Return null if the <code>ActionUsage</code> has less than <code>i</code> owned input <code>parameters</code> or the <code>i</code>-th owned input <code>parameter</code> has no <code>FeatureValue</code>.</p> + + + + OCL2.0 + if inputParameter(i) = null then null +else + let featureValue : Sequence(FeatureValue) = inputParameter(i). + ownedMembership->select(oclIsKindOf(FeatureValue)) in + if featureValue->isEmpty() then null + else featureValue->at(1).value + endif +endif + + + + + + + + + + + + + + <p>Check if this <code>ActionUsage</code> is composite and has an <code>owningType</code> that is an <code>ActionDefinition</code> or <code>ActionUsage</code> but is <em>not</em> the <code>entryAction</code> or <code>exitAction</em></code> of a <code>StateDefinition</code> or <code>StateUsage</code>. If so, then it represents an <code><em>Action</em></code> that is a <code><em>subaction</em></code> of another <code><em>Action</em></code>.</p> + + + + OCL2.0 + isComposite and owningType <> null and +(owningType.oclIsKindOf(ActionDefinition) or + owningType.oclIsKindOf(ActionUsage)) and +(owningFeatureMembership.oclIsKindOf(StateSubactionMembership) implies + owningFeatureMembership.oclAsType(StateSubactionMembership).kind = + StateSubactionKind::do) + + + + + + - - - - <p>The RequirementDefinitions that have a certain PartUsage as an <code>actorParameter</code>.</p> + + + + <p>The <code>WhileLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>untilArgument</code>.</p> - - - - + + - - - <p>A <code>FlowDefinition</code> is an <code>ActionDefinition</code> that is also an <code>Interaction</code> (which is both a KerML <code>Behavior</code> and <code>Association</code>), representing flows between <code>Usages</code>.</p> + + + <p>An <code>AcceptActionUsage</code> is an <code>ActionUsage</code> that specifies the acceptance of an <em><code>incomingTransfer</code></em> from the <code><em>Occurrence</em></code> given by the result of its <code>receiverArgument</code> Expression. (If no <code>receiverArgument</code> is provided, the default is the <em><code>this</code></em> context of the AcceptActionUsage.) The payload of the accepted <em><code>Transfer</em></code> is output on its <code>payloadParameter</code>. Which <em><code>Transfers</em></code> may be accepted is determined by conformance to the typing and (potentially) binding of the <code>payloadParameter</code>.</p> + - - - <p>A <code>FlowDefinition</code> must directly or indirectly specialize the base <code>FlowDefinition</code> <em><code>Flows::MessageAction</code></em> from the Systems Model Library.</p> + + + <p>An <code>AcceptUsageAction</code> must have at least on input <code>parameter</code>, corresponding to its <em><code>payload</code></em> (even if it has no <code>FeatureValue</code>). (Note that the <code>payloadParameter</code> is an input as well as an output.)</p> - + OCL2.0 - specializesFromLibrary('Flows::MessageAction') + inputParameters()->notEmpty() - - - <p>A binary <code>FlowDefinition</code> must directly or indirectly specialize the base <code>FlowDefinition<code> <em><code>Flows::Message</code></em> from the Systems Model Library.</p> + + + <p>The <code>receiverArgument</code> of an <code>AcceptUsageAction</code> is its second argument <code>Expression</code>.</p> - + OCL2.0 - flowEnd->size() = 2 implies - specializesFromLibrary('Flows::Message') + receiverArgument = argument(2) - - - <p>A <code>FlowDefinition</code> may not have more than two <code>flowEnds</code>.</p> + + + <p>The <code>payloadArgument</code> of an <code>AcceptUsageAction</code> is its first argument <code>Expression</code>.</p> - + OCL2.0 - flowEnd->size() <= 2 + payloadArgument = argument(1) - - - - - - - <p>The <code>Usages</code> that define the things related by the <code>FlowDefinition</code>.</p> - - - - - - - - - - <p>The <code>FlowUsages<code> that have a certain <code>Interaction</code> as their <code>flowDefinition</code>.</p> + + + <p>The <code>payloadParameter</code> of an <code>AcceptActionUsage<code> is its first <code>parameter</code>.</p> - - - - - - - <p>A <code>SuccessionFlowUsage</code> is a <code>FlowUsage</code> that is also a KerML <code>SuccessionFlow</code>.</p> - - - - <p>A <code>SuccessionFlowUsage</code> must directly or indirectly specialize the base <code>FlowUsage</code> <em><code>Flows::successionFlows</code></em> from the Systems Library model.</p> + + OCL2.0 + payloadParameter = + if parameter->isEmpty() then null + else parameter->first() endif + + + + + <p>An <code>AcceptActionUsage</code> that is not the <code>triggerAction</code> of a <code>TransitionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::acceptActions</code></em> from the Systems Model Library.</p> - + OCL2.0 - specializesFromLibrary('Flows::successionFlows') + not isTriggerAction() implies + specializesFromLibrary('Actions::acceptActions') - - - - - - - - - <p>The <code>FlowDefinitions<code> that have a certain Usage as <code>flowEnd</code>.</p> + + + <p>A composite <code>AcceptActionUsage</code> that is a subaction usage, but is <em>not</em> the <code>triggerAction</code> of a <code>TransitionUsage</code>, must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::acceptSubactions</code></em> from the Systems Model Library.</p> - - - - - - - - <p>A <code>FlowUsage</code> is an <code>ActionUsage</code> that is also a <code>ConnectorAsUsage</code> and a KerML <code>Flow</code>.</p> - - - - <p>A <code>FlowUsage</code> must directly or indirectly specialize the base <code>FlowUsage</code> <em><code>Flows::messages</code></em> from the Systems Library model.</p> + + OCL2.0 + isSubactionUsage() and not isTriggerAction() implies + specializesFromLibrary('Actions::Action::acceptSubactions') + + + + + <p>An <code>AcceptActionUsage</code> that is the <code>triggerAction</code> of <code>TransitionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::TransitionAction::accepter</code></em> from the Systems Model Library.</p> - + OCL2.0 - specializesFromLibrary('Flows::messages') + isTriggerAction() implies + specializesFromLibrary('Actions::TransitionAction::accepter') - - - <p>If a <code>FlowUsage</code> has <code>ownedEndFeatures</code>, it must directly or indirectly specialize the <code>FlowUsage</code> <em><code>Flows::flows</code></em> from the Systems Model Library.</p> + + + <p>If the <code>payloadArgument</code> of an <code>AcceptActionUsage</code> is a <code>TriggerInvocationExpression</code>, then the <code>AcceptActionusage</code> must have an <code>ownedFeature</code> that is a <code>BindingConnector</code> between its <code><em>receiver</em></code> <code>parameter</code> and the <code><em>receiver</em></code> <code>parameter</code> of the <code>TriggerInvocationExpression</code>.</p> - + OCL2.0 - ownedEndFeatures->notEmpty() implies - specializesFromLibrary('Flows::flows') + payloadArgument <> null and +payloadArgument.oclIsKindOf(TriggerInvocationExpression) implies + let invocation : Expression = + payloadArgument.oclAsType(Expression) in + parameter->size() >= 2 and + invocation.parameter->size() >= 2 and + ownedFeature->selectByKind(BindingConnector)->exists(b | + b.relatedFeatures->includes(parameter->at(2)) and + b.relatedFeatures->includes(invocation.parameter->at(2))) - - - - - - - - <p>The <code>Interactions</code> that are the <code>types</code> of this <code>FlowUsage</code>. Nominally, these are <code>FlowDefinitions</code>, but other kinds of Kernel <code>Interactions</code> are also allowed, to permit use of Interactions from the Kernel Model Libraries.</p> + + + + <p>An <code>Expression</code> whose <code>result</code> is bound to the <em><code>receiver</code></em> input <code>parameter</code> of this <code>AcceptActionUsage</code>.</p> + - - - - - + + + + + + + <p>The <code>nestedReference</code> of this <code>AcceptActionUsage</code> that redefines the <code>payload</code> output <code>parameter</code> of the base <code>AcceptActionUsage</code> <em><code>AcceptAction</code></em> from the Systems Model Library.</p> + + + + + + + + + <p>An <code>Expression</code> whose <code>result</code> is bound to the <code><em>payload</em></code> <code>parameter</code> of this <code>AcceptActionUsage</code>. If provided, the <code>AcceptActionUsage</code> will only accept a <code><em>Transfer</em></code> with exactly this <code><em>payload</em></code>.</p> + + + + + + + + <p>Check if this <code>AcceptActionUsage</code> is the <code>triggerAction</code> of a <code>TransitionUsage</code>.</p> + + + + OCL2.0 + owningType <> null and +owningType.oclIsKindOf(TransitionUsage) and +owningType.oclAsType(TransitionUsage).triggerAction->includes(self) + + + + + + - - - - <p>The ConnectionDefinitions that have a certain Usage as an <code>connectionEnd</code>.</p> + + + + <p>The <code>IfActionUsage</code> that has a certain <code>ActionUsage</code> as its <code>thenAction</code>.</p> - - - + + - - - <p>A <code>ConnectionUsage</code> is a <code>ConnectorAsUsage</code> that is also a <code>PartUsage</code>. Nominally, if its type is a <code>ConnectionDefinition</code>, then a <code>ConnectionUsage</code> is a Usage of that <code>ConnectionDefinition</code>, representing a connection between parts of a system. However, other kinds of kernel <code>AssociationStructures</code> are also allowed, to permit use of <code>AssociationStructures</code> from the Kernel Model Libraries.</p> + + + + <p>The ActionUsages being typed by a certain Behavior.</p> + + + + + + + + + + + <p>The AssignmentActionUsage that has a certain Expression as its <code>targetArgument</code>.</p> + + + + + + + + + <p>The AcceptActionUsage that owns the <code>payloadParameter</code>.</p> + + + + + + + + + <p>The <code>ForLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>seqArgument</code>.</p> + + + + + + + + <p>A <code>PerformActionUsage</code> is an <code>ActionUsage</code> that represents the performance of an <code>ActionUsage</code>. Unless it is the <code>PerformActionUsage</code> itself, the <code>ActionUsage</code> to be performed is related to the <code>PerformActionUsage</code> by a <code>ReferenceSubsetting</code> relationship. A <code>PerformActionUsage</code> is also an <code>EventOccurrenceUsage</code>, with its <code>performedAction</code> as the <code>eventOccurrence</code>.</p> - - - <p>A <code>ConnectionUsage</code> must directly or indirectly specialize the <code>ConnectionUsage</code> <em><code>Connections::connections</code></em> from the Systems Model Library.</p> + + + <p>If a <code>PerformActionUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of the <code>referencedFeature</code> must be an <code>ActionUsage</code>.</p> - + OCL2.0 - specializesFromLibrary('Connections::connections') + referencedFeatureTarget() <> null implies + referencedFeatureTarget().oclIsKindOf(ActionUsage) - - - <p>A binary <code>ConnectionUsage</code> must directly or indirectly specialize the <code>ConnectionUsage</code> <em><code>Connections::binaryConnections</code></em> from the Systems Model Library.</p> + + + <p>If a <code>PerformActionUsage</code> has an <code>owningType</code> that is a <code>PartDefinition</code> or <code>PartUsage</code>, then it must directly or indirectly specialize the <code>ActionUsage</code> <code><em>Parts::Part::performedActions</em></code>.</p> - + OCL2.0 - ownedEndFeature->size() = 2 implies - specializesFromLibrary('Connections::binaryConnections') + owningType <> null and +(owningType.oclIsKindOf(PartDefinition) or + owningType.oclIsKindOf(PartUsage)) implies + specializesFromLibrary('Parts::Part::performedActions') - - - - - <p>The <code>AssociationStructures</code> that are the types of this <code>ConnectionUsage</code>. Nominally, these are , but other kinds of Kernel <code>AssociationStructures</code> are also allowed, to permit use of <code>AssociationStructures</code> from the Kernel Model Libraries</p> + + + + + <p>The <code>ActionUsage</code> to be performed by this <code>PerformedActionUsage</code>. It is the <code>eventOccurrence</code> of the <code>PerformActionUsage</code> considered as an <code>EventOccurrenceUsage</code>, which must be an <code>ActionUsage</code>.</p> + - - - - + + - - - - - <p>The ConnectionUsages that have a certain AssociationStructure as their <code>connectionDefinition</code>.</p> + + + <p>The naming <code>Feature</code> of a <code>PerformActionUsage</code> is its <code>performedAction</code>, if this is different than the <code>PerformActionUsage</code>. If the <code>PerformActionUsage</code> is its own <code>performedAction</code>, then the naming <code>Feature</code> is the same as the usual default for a <code>Usage</code>.</p> - - - - - - - - <p>A <code>ConnectorAsUsage</code> is both a <code>Connector</code> and a <code>Usage</code>. <code>ConnectorAsUsage</code> cannot itself be instantiated in a SysML model, but it is a base class for the concrete classes <code>BindingConnectorAsUsage</code>, <code>SuccessionAsUsage</code>, <code>ConnectionUsage</code> and <code>FlowConnectionUsage</code>.</p> - - - - - - - - - <p>A <code>SuccessionAsUsage</code> is both a <code>ConnectorAsUsage</code> and a <code>Succession</code>.<p> - - - - - + + + OCL2.0 + if performedAction <> self then performedAction +else self.oclAsType(Usage).namingFeature() +endif + + + + + + + + - - - <p>A <code>BindingConnectorAsUsage</code> is both a <code>BindingConnector</code> and a <code>ConnectorAsUsage</code>.</p> + + + <p><code>TriggerKind</code> enumerates the kinds of triggers that can be represented by a <code>TriggerInvocationExpression</code>.</p> - - - - + + + <p>Indicates a <em>change trigger</em>, corresponding to the <em><code>TriggerWhen</code></em> <code>Function</code> from the <em><code>Triggers</code></em> model in the Kernel Semantic Library.</p> + + + + + <p>Indicates an <em>absolute time trigger</em>, corresponding to the <em><code>TriggerAt</code></em> <code>Function</code> from the <em><code>Triggers</code></em> model in the Kernel Semantic Library.</p> + + + + + <p>Indicates a <em>relative time trigger</em>, corresponding to the <em><code>TriggerAfter</code></em> <code>Function</code> from the <em><code>Triggers</code></em> model in the <code>Kernel Semantic Library.</p> + + - - - <p>A <code>ConnectionDefinition</code> is a <code>PartDefinition</code> that is also an <code>AssociationStructure</code>. The end <code>Features</code> of a <code>ConnectionDefinition</code> must be <code>Usages</code>.</p> + + + <p>A <code>ControlNode</code> is an <code>ActionUsage</code> that does not have any inherent behavior but provides constraints on incoming and outgoing <code>Successions</code> that are used to control other <code>Actions</code>. A <code>ControlNode</code> must be a composite owned <code>usage</code> of an <code>ActionDefinition</code> or <code>ActionUsage</code>.</p> + - - - <p>A <code>ConnectionDefinition</code> must directly or indirectly specialize the <code>ConnectionDefinition</code> <em><code>Connections::Connection</code></em> from the Systems Model Library.</p> + + + <p>All outgoing <code>Successions</code> from a <code>ControlNode</code> must have a source <code>multiplicity</code> of <code>1..1</code>.</p> - + OCL2.0 - specializesFromLibrary('Connections::Connection') + sourceConnector->selectByKind(Succession)-> + collect(connectorEnd->at(1).multiplicity)-> + forAll(sourceMult | + multiplicityHasBounds(sourceMult, 1, 1)) - - - <p>A binary <code>ConnectionDefinition</code> must directly or indirectly specialize the <code>ConnectionDefinition</code> <em><code>Connections::BinaryConnection</code></em> from the Systems Model Library.</p> + + + <p>The <code>owningType</code> of a <code>ControlNode</code> must be an <code>ActionDefinition</code> or <code>ActionUsage</code>.</p> - + OCL2.0 - ownedEndFeature->size() = 2 implies - specializesFromLibrary('Connections::BinaryConnections') + owningType <> null and +(owningType.oclIsKindOf(ActionDefinition) or + owningType.oclIsKindOf(ActionUsage)) - - - <p>A <code>ConnectionDefinition</code> must have <code>isSufficient = true</code>.</p> + + + <p>All incoming <code>Successions</code> to a <code>ControlNode</code> must have a target <code>multiplicity</code> of <code>1..1</code>.</p> - + OCL2.0 - isSufficient + targetConnector->selectByKind(Succession)-> + collect(connectorEnd->at(2).multiplicity)-> + forAll(targetMult | + multiplicityHasBounds(targetMult, 1, 1)) - - - - - - - <p>The <code>Usages</code> that define the things related by the <code>ConnectionDefinition</code>.</p> - - - - - - - - <p>A <code>ConnectionDefinition</code> always has <code>isSufficient = true</code>.</p> + + + <p>A <code>ControlNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::control</code></em> from the Systems Model Library.</p> - - - - - - - - - <p>The AnalysisCaseDefinitions that have a certain Expression as their <code>resultExpression</code>.</p> + + OCL2.0 + specializesFromLibrary('Action::Action::controls') + + + + + <p>A <code>ControlNode</code> must be composite.</p> - - - - - - - - - - <p>The AnalysisCaseUsages that have a certain Expression as their <code>resultExpression</code>.</p> + + OCL2.0 + isComposite + + + + + + <p>Check that the given <code>Multiplicity</code> has <code>lowerBound</code> and <code>upperBound</code> expressions that are model-level evaluable to the given <code>lower</code> and <code>upper</code> values.</p> - - - - + + + OCL2.0 + mult <> null and +if mult.oclIsKindOf(MultiplicityRange) then + mult.oclAsType(MultiplicityRange).hasBounds(lower, upper) +else + mult.allSuperTypes()->exists( + oclisKindOf(MultiplicityRange) and + oclAsType(MultiplicityRange).hasBounds(lower, upper) +endif + + + + + + + + + + + + + + + - - - <p>An <code>AnalysisCaseDefinition</code> is a <code>CaseDefinition</code> for the case of carrying out an analysis.</p> + + + <p>An <code>ActionDefinition</code> is a <code>Definition</code> that is also a <code>Behavior</code> that defines an <em><code>Action</code></em> performed by a system or part of a system.</p> - - - <p>The <code>resultExpression</code> of a <code>AnalysisCaseDefinition</code> is the <code>ownedResultExpression</code> of its <code>ResultExpressionMembership</code>, if any.</p> + + + <p>An <code>ActionDefinition</code> must directly or indirectly specialize the <code>ActionDefinition</code> <em><code>Actions::Action</code></em> from the Systems Model Library.</p> - + OCL2.0 - resultExpression = - let results : OrderedSet(ResultExpressionMembership) = - featureMembersip-> - selectByKind(ResultExpressionMembership) in - if results->isEmpty() then null - else results->first().ownedResultExpression - endif + specializesFromLibrary('Actions::Action') - - - <p>An <code>AnalysisCaseDefinition</code> must directly or indirectly specialize the base <code>AnalysisCaseDefinition</code> <code><em>AnalysisCases::AnalysisCase</em></code> from the Systems Model Library.</p> + + + <p> The <code>actions</code> of a <code>ActionDefinition</code> are those of its <code>usages</code> that are <code>ActionUsages</code>.</p> - + OCL2.0 - specializesFromLibrary('AnalysisCases::AnalysisCase') + action = usage->selectByKind(ActionUsage) - - - - <p>An <code>Expression</code> used to compute the <code>result</code> of the <code>AnalysisCaseDefinition</code>, owned via a <code>ResultExpressionMembership</code>.</p> + + + + + + + <p>The <code>ActionUsages</code> that are <code>steps</code> in this <code>ActionDefinition</code>, which define the actions that specify the behavior of the <code>ActionDefinition</code>.</p> - - - - - + + + + - - - - <p>The AnalysisCaseUsages being typed by a certain AnalysisCaseDefinition.</p> - - - - - - - - <p>An <code>AnalysisCaseUsage</code> is a <code>Usage</code> of an <code>AnalysisCaseDefinition</code>.</p> + + + <p>An <code>AssignmentActionUsage</code> is an <code>ActionUsage</code> that is defined, directly or indirectly, by the <code>ActionDefinition</code> <em><code>AssignmentAction</code></em> from the Systems Model Library. It specifies that the value of the <code>referent</code> <code>Feature</code>, relative to the target given by the result of the <code>targetArgument</code> <code>Expression</code>, should be set to the result of the <code>valueExpression</code>.</p> + - - - <p>The <code>resultExpression</code> of a <code>AnalysisCaseUsage</code> is the <code>ownedResultExpression</code> of its <code>ResultExpressionMembership</code>, if any.</p> + + + <p>An <code>AssignmentActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::assignmentActions</code></em> from the Systems Model Library.</p> - + OCL2.0 - resultExpression = - let results : OrderedSet(ResultExpressionMembership) = - featureMembersip-> - selectByKind(ResultExpressionMembership) in - if results->isEmpty() then null - else results->first().ownedResultExpression - endif + specializesFromLibrary('Actions::assignmentActions') - - - <p>An <code>AnalysisCaseUsage</code> must directly or indirectly specialize the base <code>AnalysisCaseUsage</code> <code><em>AnalysisCases::analysisCases</em></code> from the Systems Model Library.</p> + + + <p>The first <code>ownedFeature</code> of the first <code>parameter</code> of an <code>AssignmentActionUsage</code> must redefine <code><em>AssignmentAction::target::startingAt</em></code>.</p> - + OCL2.0 - specializesFromLibrary('AnalysisCases::analysisCases') + let targetParameter : Feature = inputParameter(1) in +targetParameter <> null and +targetParameter.ownedFeature->notEmpty() and +targetParameter.ownedFeature->first(). + redefinesFromLibrary('AssignmentAction::target::startingAt') - - - <p>A composite <code>AnalysisCaseUsage</code> whose <code>owningType</code> is an <code>AnalysisCaseDefinition</code> or <code>AnalysisCaseUsage</code> must specialize the <code>AnalysisCaseUsage</code> <code><em>AnalysisCases::AnalysisCase::subAnalysisCases</code> from the Systems Model Library.</p> + + + <p>The <code>valueExpression</code> of a <code>AssignmentActionUsage</code> is its second argument <code>Expression</code>.</p> - + OCL2.0 - isComposite and owningType <> null and - (owningType.oclIsKindOf(AnalysisCaseDefinition) or - owningType.oclIsKindOf(AnalysisCaseUsage)) implies - specializesFromLibrary('AnalysisCases::AnalysisCase::subAnalysisCases') + valueExpression = argument(2) - - - - <p>The <code>AnalysisCaseDefinition</code> that is the <code>definition</code> of this <code>AnalysisCaseUsage</code>.</p> - - - - - - - <p>An <code>Expression</code> used to compute the <code>result</code> of the <code>AnalysisCaseUsage</code>, owned via a <code>ResultExpressionMembership</code>.</p> - - - - - - - - - - - <p>The AllocationDefinitions that feature a certain <code>allocation</code>.</p> - - - - - - - - <p>An <code>AllocationDefinition</code> is a <code>ConnectionDefinition</code> that specifies that some or all of the responsibility to realize the intent of the <code>source</code> is allocated to the <code>target</code> instances. Such allocations define mappings across the various structures and hierarchies of a system model, perhaps as a precursor to more rigorous specifications and implementations. An <code>AllocationDefinition</code> can itself be refined using nested <code>allocations</code> that give a finer-grained decomposition of the containing allocation mapping.</p> - - - - <p> The <code>allocations</code> of an <code>AllocationDefinition</code> are all its <code>usages</code> that are <code>AllocationUsages</code>.</p> + + + <p>The <code>targetArgument</code> of a <code>AssignmentActionUsage</code> is its first argument <code>Expression</code>.</p> - + OCL2.0 - allocation = usage->selectAsKind(AllocationUsage) + targetArgument = argument(1) - - - <p>An <code>AllocationDefinition</code> must directly or indirectly specialize the <code>AllocationDefinition</code> <em><code>Allocations::Allocation</code></em> from the Systems Model Library.</p> + + + <p>A composite <code>AssignmentActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::assignments</code></em> from the Systems Model Library.</p> - + OCL2.0 - specializesFromLibrary('Allocations::Allocation') + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::assignments') - - - - <p>The <code>AllocationUsages</code> that refine the allocation mapping defined by this <code>AllocationDefinition</code>.</p> - - - - - - - - <p>An <code>AllocationUsage</code> is a usage of an <code>AllocationDefinition</code> asserting the allocation of the <code>source</code> feature to the <code>target</code> feature.</p> - - - - <p>An <code>AllocationUsage</code> must directly or indirectly specialize the <code>AllocationUsage</code> <em><code>Allocations::allocations</code></em> from the Systems Model Library.</p> + + + <p>The first <code>ownedFeature</code> of the first <code>ownedFeature</code> of the first <code>parameter</code> of an <code>AssignmentActionUsage</code> must redefine <code><em>AssignmentAction::target::startingAt::accessedFeature</em></code>.</p> - + OCL2.0 - specializesFromLibrary('Allocations::allocations') + let targetParameter : Feature = inputParameter(1) in +targetParameter <> null and +targetParameter.ownedFeature->notEmpty() and +targetParameter.ownedFeature->first().ownedFeature->notEmpty() and +targetParameter.ownedFeature->first().ownedFeature->first(). + redefinesFromLibrary('AssigmentAction::target::startingAt::accessedFeature') - - - - <p>The <code>AllocationDefinitions</code> that are the types of this <code>AllocationUsage</code>.</p> - - - - - - - - - <p>The AllocationUsages that have a certain AllocationDefinition as their <code>allocationDefinition</code>.</p> + + + <p>The first <code>ownedFeature</code> of the first <code>ownedFeature</code> of the first <code>parameter</code> of an <code>AssignmentActionUsage</code> must redefine the <code>referent</code> of the <code>AssignmentActionUsage</code>.</p> - - - - - - - - <p>The InterfaceDefinitions that have a certain PortUsage as an <code>interfaceEnd</code>.</p> + + OCL2.0 + let targetParameter : Feature = inputParameter(1) in +targetParameter <> null and +targetParameter.ownedFeature->notEmpty() and +targetParameter.ownedFeature->first().ownedFeature->notEmpty() and +targetParameter.ownedFeature->first().ownedFeature->first().redefines(referent) + + + + + <p>The <code>referent</code> of an <code>AssignmentActionUsage</code> is the first <code>Feature</code> that is not a <code>MetadataFeature</code> and is the <code>memberElement</code> of a <code>ownedMembership</code> that is not a <code>FeatureMembership</code>.</p> - - - - - - - <p>An <code>InterfaceDefinition</code> is a <code>ConnectionDefinition</code> all of whose ends are <code>PortUsages</code>, defining an interface between elements that interact through such ports.</p> - - - - <p>An <code>InterfaceDefinition</code> must directly or indirectly specialize the <code>InterfaceDefinition</code> <em><code>Interfaces::Interface</code></em> from the Systems Model Library.</p> + + OCL2.0 + referent = + let unownedFeatures : Sequence(Feature) = ownedMembership-> + reject(oclIsKindOf(FeatureMembership)).memberElement-> + select(oclIsKindOf(Feature) and + not oclIsKindOf(MetadataFeature)) in + if unownedFeatures->isEmpty() then null + else unownedFeatures->first().oclAsType(Feature) + endif + + + + + <p>An <code>AssignmentActionUsage</code> must have an <code>ownedMembership</code> that is not an <code>OwningMembership</code> and whose <code>memberElement</code> is a <code>Feature</code> but not a <code>MetadataFeature</code>.</p> - + OCL2.0 - specializesFromLibrary('Interfaces::Interface') + ownedMembership->exists( + not oclIsKindOf(OwningMembership) and + memberElement.oclIsKindOf(Feature) and + not memberElement.oclIsKindOf(MetadataFeature)) - - - <p>A binary <code>InterfaceDefinition</code> must directly or indirectly specialize the <code>InterfaceDefinition</code> <em><code>Interfaces::BinaryInterface</code></em> from the Systems Model Library.</p> + + + <p>The <code>featureTarget</code> of the <code>referent</code> of an <code>AssignmentActionUsage</code> must be able to have time-varying values.</p> - + OCL2.0 - ownedEndFeature->size() = 2 implies - specializesFromLibrary('Interfaces::BinaryInterface') + referent <> null implies referent.featureTarget.isVariable - - - - <p>The <code>PortUsages</code> that are the <code>connectionEnds</code> of this <code>InterfaceDefinition</code>. - - + + + + <p>The <code>Expression</code> whose value is an occurrence in the domain of the <code>referent</code> <code>Feature</code>, for which the value of the <code>referent</code> will be set to the result of the <code>valueExpression</code> by this <code>AssignmentActionUsage</code>.</p> - - + + + + + + + <p>The <code>Expression</code> whose result is to be assigned to the <code>referent</code> <code>Feature</code>.</p> + + + + + + + + <p>The <code>Feature</code> whose value is to be set.</p> + + + + + - - - <p>An <code>InterfaceUsage</code> is a Usage of an <code>InterfaceDefinition</code> to represent an interface connecting parts of a system through specific ports.</p> + + + <p>A <code>ViewpointUsage</code> is a <code>Usage</code> of a <code>ViewpointDefinition</code>.</p> + + - - - <p>A binary <code>InterfaceUsage</code> must directly or indirectly specialize the <code>InterfaceUsage</code> <em><code>Interfaces::binaryInterfaces</code></em> from the Systems Model Library.</p> + + + <p>The <code>viewpointStakeholders</code> of a <code>ViewpointUsage</code> are the <code>ownedStakeholderParameters</code> of all <code>featureMemberships</code> that are <code>StakeholderMemberships</code>.</p> - + OCL2.0 - ownedEndFeature->size() = 2 implies - specializesFromLibrary('Interfaces::binaryInterfaces') + viewpointStakeholder = framedConcern.featureMemberhsip-> + selectByKind(StakeholderMembership). + ownedStakeholderParameter - - - <p>An <code>InterfaceUsage</code> must directly or indirectly specialize the <code>InterfaceUsage</code> <em><code>Interfaces::interfaces</code></em> from the Systems Model Library.</p> + + + <p>A <code>ViewpointUsage</code> must directly or indirectly specialize the base <code>ViewpointUsage</code> <code><em>Views::viewpointChecks</em></code> from the Systems Model Library.</p> - + OCL2.0 - specializesFromLibrary('Interfaces::interfaces') + specializesFromLibrary('Views::viewpointChecks') - - - - <p>The <code>InterfaceDefinitions</code> that type this <code>InterfaceUsage</code>.</p> - - - - - - - - - <p>The InterfaceUsages typed by a certain InterfaceDefinition.</p> - - - - - - - - - <p>The VerificationUsages that are defined by a certain <code>verificationCaseDefinition</code>.</p> + + + <p>A composite <code>ViewpointUsage</code> whose <code>owningType</code> is a <code>ViewDefinition</code> or <code>ViewUsage</code> must directly or indirectly specialize the <code>ViewpointUsage</code> <code><em>Views::View::viewpointSatisfactions</em></code> from the Systems Model Library.</p> - - - - - - - - <p>The VerificationCaseUsages that verify a certain <code>verifiedRequirement</code>.</p> + + OCL2.0 + isComposite and owningType <> null and +(owningType.oclIsKindOf(ViewDefinition) or + owningType.oclIsKindOf(ViewUsage)) implies + specializesFromLibrary('Views::View::viewpointSatisfactions') + + + + + + <p>The <code>ViewpointDefinition</code> that is the <code>definition</code> of this <code>ViewpointUsage<code>.</p> - - - - - - - - <p>The VerificationCaseDefinitions that verify a certain <code>verifiedRequirement</code>.</p> + + + + + + <p>The <code>PartUsages</code> that identify the stakeholders with concerns framed by this <code>ViewpointUsage</code>, which are the owned and inherited <code>stakeholderParameters</code> of the <code>framedConcerns</code> of this <code>ViewpointUsage</code>.</p> - - - + + + - - - <p>A <code>VerificationCaseDefinition</code> is a <code>CaseDefinition</code> for the purpose of verification of the subject of the case against its requirements.</p> + + + <p>A <code>ViewDefinition</code> is a <code>PartDefinition</code> that specifies how a view artifact is constructed to satisfy a <code>viewpoint</code>. It specifies a <code>viewConditions</code> to define the model content to be presented and a <code>viewRendering</code> to define how the model content is presented.</p> - - - <p>The <code>verifiedRequirements</code> of a <code>VerificationCaseDefinition</code> are the <code>verifiedRequirements</code> of its <code>RequirementVerificationMemberships</code>.</p> + + + <p>The <code>views</code> of a <code>ViewDefinition</code> are all its <code>usages</code> that are <code>ViewUsages</code>.</p> - + OCL2.0 - verifiedRequirement = - if objectiveRequirement = null then OrderedSet{} - else - objectiveRequirement.featureMembership-> - selectByKind(RequirementVerificationMembership). - verifiedRequirement->asOrderedSet() - endif + view = usage->selectByKind(ViewUsage) - - - <p>A <code>VerificationCaseDefinition</code> must directly or indirectly specialize the base <code>VerificationCaseDefinition</code> <em><code>VerificationCases::VerificationCase</code></em> from the Systems Model Library.</p> + + + <p>The <code>satisfiedViewpoints</code> of a <code>ViewDefinition</code> are its <code>ownedRequirements</code> that are composite <code>ViewpointUsages</code>. - + OCL2.0 - specializesFromLibrary('VerificationCases::VerificationCase') + satisfiedViewpoint = ownedRequirement-> + selectByKind(ViewpointUsage)-> + select(isComposite) - - - - <p>The <code>RequirementUsages</code> verified by this <code>VerificationCaseDefinition</code>, which are the <code>verifiedRequirements</code> of all <code>RequirementVerificationMemberships</code> of the <code>objectiveRequirement</code>.</p> - - - - - - - - <p>A <code>VerificationCaseUsage</code> is a </code>Usage</code> of a <code>VerificationCaseDefinition</code>.</p> - - - - <p>The <code>verifiedRequirements</code> of a <code>VerificationCaseUsage</code> are the <code>verifiedRequirements</code> of its <code>RequirementVerificationMemberships</code>.</p> + + + <p>The <code>viewRendering</code> of a <code>ViewDefinition</code> is the <code>referencedRendering</code> of its owned <code>ViewRenderingMembership<code>, if any.</p> - + OCL2.0 - verifiedRequirement = - if objectiveRequirement = null then OrderedSet{} - else - objectiveRequirement.featureMembership-> - selectByKind(RequirementVerificationMembership). - verifiedRequirement->asOrderedSet() + viewRendering = + let renderings: OrderedSet(ViewRenderingMembership) = + featureMembership->selectByKind(ViewRenderingMembership) in + if renderings->isEmpty() then null + else renderings->first().referencedRendering endif - - - <p>A <code>VerificationCaseUsage</code> must subset, directly or indirectly, the base <code>VerificationCaseUsage</code> <code><em>VerificationCases::verificationCases</em></code> from the Systems Model Library.</p> + + + <p>The <code>viewConditions</code> of a <code>ViewDefinition</code> are the <code>conditions</code> of its owned <code>ElementFilterMemberships</code>.</p> - + OCL2.0 - specializesFromLibrary('VerificationCases::verificationCases') + viewCondition = ownedMembership-> + selectByKind(ElementFilterMembership). + condition - - - If it is composite and owned by a <code>VerificationCaseDefinition</code> or <code>VerificationCaseUsage</code>, then it must specialize <code>VerificationCaseUsage</code> <code><em>VerificationCases::VerificationCase::subVerificationCases</code>.</p> + + + <p>A <code>ViewDefinition</code> must have at most one <code>ViewRenderingMembership</code>.</p> - + OCL2.0 - isComposite and owningType <> null and - (owningType.oclIsKindOf(VerificationCaseDefinition) or - owningType.oclIsKindOf(VerificationCaseUsage)) implies - specializesFromLibrary('VerificationCases::VerificationCase::subVerificationCases') + featureMembership-> + selectByKind(ViewRenderingMembership)-> + size() <= 1 - - - - <p>The <code>VerificationCase</code> that is the <code>definition</code> of this <code>VerificationCaseUsage</code>.</p> + + + </p>A <code>ViewDefinition</code> must directly or indirectly specialize the base <code>ViewDefinition</code> <code><em>Views::View</em></code> from the Systems Model Library.</p> - - + + OCL2.0 + specializesFromLibrary('Views::View') + + + + + + <p>The <code>usages</code> of this <code>ViewDefinition</code> that are <code>ViewUsages</code>.</p> + + + - - - <p>The <code>RequirementUsages</code> verified by this <code>VerificationCaseUsage</code>, which are the <code>verifiedRequirements</code> of all <code>RequirementVerificationMemberships</code> of the <code>objectiveRequirement</code>.</p> + + + <p>The composite <code>ownedRequirements</code> of this <code>ViewDefinition</code> that are <code>ViewpointUsages</code> for viewpoints satisfied by the <code>ViewDefinition</code>.</p> - - + + - - - - - <p>The RequirementVerificationMembership that owns a certain RequirementUsage as its <code>ownedRequirement</code>.</p> + + + <p>The <code>RenderingUsage</code> to be used to render views defined by this <code>ViewDefinition</code>, which is the <code>referencedRendering</code> of the <code>ViewRenderingMembership</code> of the <code>ViewDefinition</code>.<p> - - - - - - - - <p>The RequirementVerificationMembership that has a certain RequirementUsage as its <code>verifiedRequirement</code>.</p> + + + + + + <p>The <code>Expressions</code> related to this <code>ViewDefinition</code> by <code>ElementFilterMemberships</code>, which specify conditions on <code>Elements</code> to be rendered in a view.</p> - - - + + + + + - - - <p>A <code>RequirementVerificationMembership</code> is a <code>RequirementConstraintMembership </code> used in the objective of a <code>VerificationCase</code> to identify a <code>RequirementUsage</code> that is verified by the <code>VerificationCase</code>.</p> + + + <p>A <code>ViewUsage</code> is a usage of a <code>ViewDefinition</code> to specify the generation of a view of the <code>members</code> of a collection of <code>exposedNamespaces</code>. The <code>ViewUsage</code> can satisfy more <code>viewpoints</code> than its definition, and it can specialize the <code>viewRendering</code> specified by its definition.<p> - - - <p>A <code>RequirementVerificationMembership</code> must have <code>kind = requirement</code>.</p> + + + <p>The <code>exposedElements</code> of a <code>ViewUsage</code> are those <code>memberElements</code> of the imported <code>Memberships</code> from all the <code>Expose</code> <code>Relationships</code> for which the <code>includeAsExposed</code> operation returns true.</p> - + OCL2.0 - kind = RequirementConstraintKind::requirement + exposedElement = ownedImport->selectByKind(Expose). + importedMemberships(Set{}).memberElement-> + select(elm | includeAsExposed(elm))-> + asOrderedSet() - - - <p>The <code>owningType</code> of a <code>RequirementVerificationMembership</code> must a <code>RequirementUsage</code> that is owned by an <code>ObjectiveMembership</code>.</p> + + + <p>The <code>satisfiedViewpoints</code> of a <code>ViewUsage</code> are its <code>ownedRequirements</code> that are composite <code>ViewpointUsages</code>. - + OCL2.0 - owningType.oclIsKindOf(RequirementUsage) and -owningType.owningFeatureMembership <> null and -owningType.owningFeatureMembership.oclIsKindOf(ObjectiveMembership) + satisfiedViewpoint = ownedRequirement-> + selectByKind(ViewpointUsage)-> + select(isComposite) - - - - <p>The owned <code>RequirementUsage</code> that acts as the <code>ownedConstraint</code> for this <code>RequirementVerificationMembership</code>. This will either be the <code>verifiedRequirement</code>, or it will subset the <code>verifiedRequirement</code>.</p> + + + <p>The <code>viewConditions</code> of a <code>ViewUsage</code> are the <code>conditions</code> of its owned <code>ElementFilterMemberships</code>.</p> - - - - - - <p>The <code>kind</code> of a <code>RequirementVerificationMembership</code> must be <code>requirement</code>.</p> + + OCL2.0 + viewCondition = ownedMembership-> + selectByKind(ElementFilterMembership). + condition + + + + + <p>The <code>viewRendering</code> of a <code>ViewUsage</code> is the <code>referencedRendering</code> of its owned <code>ViewRenderingMembership<code>, if any.</p> - - - - - <p> The <code>RequirementUsage</code> that is identified as being verified. It is the <code>referencedConstraint</code> of the <code>RequirementVerificationMembership</code> considered as a <code>RequirementConstraintMembership</code>, which must be a <code>RequirementUsage</code>.</p> + + OCL2.0 + viewRendering = + let renderings: OrderedSet(ViewRenderingMembership) = + featureMembership->selectByKind(ViewRenderingMembership) in + if renderings->isEmpty() then null + else renderings->first().referencedRendering + endif + + + + + <p>A <code>ViewUsage</code> must have at most one <code>ViewRenderingMembership</code>.</p> - - + + OCL2.0 + featureMembership-> + selectByKind(ViewRenderingMembership)-> + size() <= 1 + + + + + <p>A <code>ViewUsage</code> must directly or indirectly specialize the base <code>ViewUsage</code> <code><em>Views::views</em></code> from the Systems Model Library.</p> + + + OCL2.0 + specializesFromLibrary('Views::views') + + + + + <p>A <code>ViewUsage</code> whose <code>owningType</code> is a <code>ViewDefinition</code> or <code>ViewUsage</code> must specialize the <code>ViewUsage</code> <code><em>Views::View::subviews</em></code> from the Systems Library Model.</p> + + + OCL2.0 + owningType <> null and +(owningType.oclIsKindOf(ViewDefinition) or + owningType.oclIsKindOf(ViewUsage)) implies + specializesFromLibrary('Views::View::subviews') + + + + + + <p>The <code>ViewDefinition</code> that is the <code>definition</code> of this <code>ViewUsage</code>.</p> + + + - - - - - <p>The StateUsages with a certain <tt>doAction</tt>.</p> + + + <p>The <code>nestedRequirements</code> of this <code>ViewUsage</code> that are <code>ViewpointUsages</code> for (additional) viewpoints satisfied by the <code>ViewUsage</code>.</p> - - - - - - - - <p>The StateDefinitions with a certain <tt>doAction</tt>.</p> + + + + + + <p>The <code>Elements</code> that are exposed by this <code>ViewUsage</code>, which are those <code>memberElements</code> of the imported <code>Memberships</code> from all the <code>Expose</code> <code>Relationships</code> that meet all the owned and inherited <code>viewConditions</code>.</p> - - - - - - - <p>A <code>StateSubactionKind</code> indicates whether the <code>action</code> of a StateSubactionMembership is an entry, do or exit action.</p> - - - - <p>Indicates that the <code>action</code> of a <code>StateSubactionMembership</code> is an <code>entryAction</code>.</p> + + + + + + + + <p>The <code>RenderingUsage</code> to be used to render views defined by this <code>ViewUsage</code>, which is the <code>referencedRendering</code> of the <code>ViewRenderingMembership</code> of the <code>ViewUsage</code>.<p> - - - - <p>Indicates that the <code>action</code> of a <code>StateSubactionMembership</code> is a <code>doAction</code>.</p> + + + + + + <p>The <code>Expressions</code> related to this <code>ViewUsage</code> by <code>ElementFilterMemberships</code>, which specify conditions on <code>Elements</code> to be rendered in a view.</p> - - - - <p>Indicates that the <code>action</code> of a <code>StateSubactionMembership</code> is an <code>exitAction</code>.</p> + + + + + + + + <p>Determine whether the given <code>element</code> meets all the owned and inherited <code>viewConditions</code>.</p> - + + + OCL2.0 + let metadataFeatures: Sequence(AnnotatingElement) = + element.ownedAnnotation.annotatingElement-> + select(oclIsKindOf(MetadataFeature)) in +self.membership->selectByKind(ElementFilterMembership). + condition->forAll(cond | + metadataFeatures->exists(elem | + cond.checkCondition(elem))) + + + + + + + + + - - - <p>An <code>ExhibitStateUsage</code> is a <code>StateUsage</code> that represents the exhibiting of a <code>StateUsage</code>. Unless it is the <code>StateUsage</code> itself, the <code>StateUsage</code> to be exhibited is related to the <code>ExhibitStateUsage</code> by a <code>ReferenceSubsetting</code> <code>Relationship</code>. An <code>ExhibitStateUsage</code> is also a <code>PerformActionUsage</code>, with its <code>exhibitedState</code> as the <code>performedAction</code>.</p> + + + <p>A <code>RenderingUsage</code> is the usage of a <code>RenderingDefinition</code> to specify the rendering of a specific model view to produce a physical view artifact.</p> + - - - <p>If an <code>ExhibitStateUsage</code> has an <code>owningType</code> that is a <code>PartDefinition</code> or <code>PartUsage</code>, then it must directly or indirectly specialize the <code>StateUsage</code> <code><em>Parts::Part::exhibitedStates</em></code>.</p> + + + <p>A <code>RenderingUsage</code> must directly or indirectly specialize the base <code>RenderingUsage</code> <code><em>Views::renderings</em></code> from the Systems Model Library.</p> - + + OCL2.0 + specializesFromLibrary('Views::renderings') + + + + + <p>A <code>RenderingUsage</code> whose <code>owningType</code> is a <code>RenderingDefinition</code> or <code>RenderingUsage</code> must directly or indirectly specialize the <code>RenderingUsage</code> <code><em>Views::Rendering::subrenderings</em></code> from the Systems Model Library.</p> + + OCL2.0 owningType <> null and -(owningType.oclIsKindOf(PartDefinition) or - owningType.oclIsKindOf(PartUsage)) implies - specializesFromLibrary('Parts::Part::exhibitedStates') +(owningType.oclIsKindOf(RenderingDefinition) or + owningType.oclIsKindOf(RenderingUsage)) implies + specializesFromLibrary('Views::Rendering::subrenderings') - - - <p>If an <code>ExhibitStateUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of the <code>referencedFeature</code> must be a <code>StateUsage</code>.</p> + + + <p>A <code>RenderingUsage</code> whose <code>owningFeatureMembership</code> is a <code>ViewRenderingMembership</code> must redefine the <code>RenderingUsage</code> <code><em>Views::View::viewRendering</em></code>.</p> - + OCL2.0 - referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(StateUsage) + owningFeatureMembership <> null and +owningFeatureMembership.oclIsKindOf(ViewRenderingMembership) implies + redefinesFromLibrary('Views::View::viewRendering') - - - - - <p>The <code>StateUsage</code> to be exhibited by the <code>ExhibitStateUsage</code>. It is the <code>performedAction</code> of the <code>ExhibitStateUsage</code> considered as a <code>PerformActionUsage</code>, which must be a <code>StateUsage</code>.</p> + + + + <p>The <code>RenderingDefinition</code> that is the <code>definition</code> of this <code>RenderingUsage</code>.</p> - - + + - - - - <p>The StateDefinitions with a certain <tt>entryAction</tt>.</p> + + + + <p>The ViewDefinition that owns a certain <code>rendering</code>.</p> - - + + - - - - <p>The StateDefinitions with a certain <tt>exitAction</tt>.</p> + + + + <p>The ViewpointUsage that has a certain <code>viewpointStakeholder</code>.</p> - - + + - - - <p>A <code>StateSubactionMembership</code> is a <code>FeatureMembership</code> for an entry, do or exit <code>ActionUsage<code> of a <code>StateDefinition</code> or <code>StateUsage</code>.</p> + + + <p>A <code>ViewpointDefinition</code> is a <code>RequirementDefinition</code> that specifies one or more stakeholder concerns that are to be satisfied by creating a view of a model.</p> - - - <p>The <code>owningType</code> of a <code>StateSubactionMembership</code> must be a <code>StateDefinition</code> or a <code>StateUsage</code>.</p> + + + <p>The <code>viewpointStakeholders</code> of a <code>ViewpointDefinition</code> are the <code>ownedStakeholderParameters</code> of all <code>featureMemberships</code> that are <code>StakeholderMemberships</code>.</p> - + OCL2.0 - owningType.oclIsKindOf(StateDefinition) or -owningType.oclIsKindOf(StateUsage) + viewpointStakeholder = framedConcern.featureMemberhsip-> + selectByKind(StakeholderMembership). + ownedStakeholderParameter - - - - - - <p>Whether this <code>StateSubactionMembership</code> is for an <code>entry<code>, <code>do</code> or <code>exit</code> <code>ActionUsage</code>.</p> + + + <p>A <code>ViewpointDefinition</code> must directly or indirectly specialize the base <code>ViewpointDefinition</code> <code><em>Views::ViewpointCheck</em></code> from the Systems Model Library.</p> - - - - <p>The <code>ActionUsage</code> that is the <code>ownedMemberFeature</code> of this <code>StateSubactionMembership</code>.</p> + + OCL2.0 + specializesFromLibrary('Views::ViewpointCheck') + + + + + + <p>The <code>PartUsages</code> that identify the stakeholders with concerns framed by this <code>ViewpointDefinition</code>, which are the owned and inherited <code>stakeholderParameters</code> of the <code>framedConcerns</code> of this <code>ViewpointDefinition</code>.</p> - - - + + - - - <p>A <code>TransitionUsage</code> is an <code>ActionUsage</code> representing a triggered transition between <code>ActionUsages</code> or <code>StateUsages</code>. When triggered by a <code>triggerAction</code>, when its <code>guardExpression</code> is true, the <code>TransitionUsage</code> asserts that its <code>source</code> is exited, then its <code>effectAction</code> (if any) is performed, and then its <code>target</code> is entered.</p> - -<p>A <code>TransitionUsage</code> can be related to some of its <code>ownedFeatures</code> using <code>TransitionFeatureMembership</code> <code>Relationships</code>, corresponding to the <code>triggerAction</code>, <code>guardExpression</code> and <code>effectAction</code> of the <code>TransitionUsage</code>.</p> + + + <p>A <code>NamespaceExpose</code> is an <code>Expose</code> <code>Relationship</code> that exposes the <code>Memberships</code> of a specific <code>importedNamespace</code> and, if <code>isRecursive = true</code>, additional <code>Memberships</code> recursively.</p> - - - <p>A composite <code>TransitionUsage</code> whose <code>owningType</code> is an <code>ActionDefinition</code> or <code>ActionUsage</code> and whose <code>source</code> is <em>not</em> a <code>StateUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::decisionTransitions</code></em> from the Systems Model Library.</p> + + + + + + + + + <p>A ViewUsage exposing a certain <code>exposedElement</code>.</p> - + + + + + + + + + <p>The RenderingUsages defined by a certain <code>renderingDefinition</code>.</p> + + + + + + + + <p>A <code>MembershipExpose</code> is an <code>Expose</code> <code.Relationship</code> that exposes a specific <code>importedMembership</code> and, if <code>isRecursive = true</code>, additional <code>Memberships</code> recursively.</p> + + + + + + + + + + <p>The ViewDefinitions that feature a certain ViewUsage.</p> + + + + + + + + + <p>The ViewUsage that owns a certain <code>viewCondition</code>.</p> + + + + + + + + + + <p>The RenderingDefinitions that feature a certain <code>rendering</code>.</p> + + + + + + + + <p>A <code>ViewRenderingMembership</code> is a <coed>FeatureMembership</code> that identifies the <code>viewRendering</code> of a <code>ViewDefinition</code> or <code>ViewUsage</code>.</p> + + + + <p>The <code>referencedRendering</code> of a <code>ViewRenderingMembership</code> is the the <code>featureTarget</code> of the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code> (which must be a <code>RenderingUsage</code>) of the <code>ownedRendering</code>, if there is one, and, otherwise, the <code>ownedRendering</code> itself.</p> + + OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(ActionDefinition) or - owningType.oclIsKindOf(ActionUsage)) and -source <> null and not source.oclIsKindOf(StateUsage) implies - specializesFromLibrary('Actions::Action::decisionTransitions') + referencedRendering = + let referencedFeature : Feature = + ownedRendering.referencedFeatureTarget() in + if referencedFeature = null then ownedRendering + else if referencedFeature.oclIsKindOf(RenderingUsage) then + refrencedFeature.oclAsType(RenderingUsage) + else null + endif endif - - - <p>A composite <code>TransitionUsage</code> whose <code>owningType</code> is a <code>StateDefinition</code> or <code>StateUsage</code> and whose <code>source</code> is a <code>StateUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>States::StateAction::stateTransitions</code></em> from the Systems Model Library</p> + + + <p>The <code>owningType</code> of a <code>ViewRenderingMembership</code> must be a <code>ViewDefinition</code> or a <code>ViewUsage</code>.</p> - + OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(StateDefinition) or - owningType.oclIsKindOf(StateUsage)) and -source <> null and source.oclIsKindOf(StateUsage) implies - specializesFromLibrary('States::StateAction::stateTransitions') - + owningType.oclIsKindOf(ViewDefinition) or +owningType.oclIsKindOf(ViewUsage) - - - <p>A <code>TransitionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::transitionActions</code></em> from the Systems Model Library.</p> + + + + + + <p>The owned <code>RenderingUsage</code> that is either itself the <code>referencedRendering</code> or subsets the <code>referencedRendering</code>. - + + + + + + + <p> The <code>RenderingUsage</code> that is referenced through this <code>ViewRenderingMembership</code>. It is the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code> for the <code>ownedRendering</code>, if there is one, and, otherwise, the <code>ownedRendering</code> itself.</p> + + + + + + + + + + + + + + + <p>The ViewDefinition that owns a certain <code>viewCondition</code>.</p> + + + + + + + + + + <p>The ViewUsages that have a certain <code>ViewDefinition</code>.</p> + + + + + + + + + + + + + + + p>The ViewUsage that owns a certain <code>satisfiedViewpoint</code>.</p> + + + + + + + + + <p>The ViewpointDefinition that has a certain <code>viewpointStakeholder</code>.</p> + + + + + + + + + <p>The ViewUsage that owns a certain <code>rendering</code>.</p> + + + + + + + + + + + + + + <p>An <code>Expose</code> is an <code>Import</code> of <code>Memberships</code> into a <code>ViewUsage</code> that provide the <code>Elements</code> to be included in a view. Visibility is always ignored for an <code>Expose</code> (i.e., <code>isImportAll = true</code>).</p> + + + + <p>An <code>Expose</code> always imports all <code>Elements</code>, regardless of visibility.</p> + + OCL2.0 - specializesFromLibrary('Actions::transitionActions') + isImportAll - - - <p>The <code>source</code> of a <code>TransitionUsage</code> is <code>featureTarget</code> of the result of <code>sourceFeature()</code>, which must be an <code>ActionUsage</code>.</p> + + + <p>The <code>importOwningNamespace</code> of an <code>Expose</code> must be a <code>ViewUsage</code>.</p> - + OCL2.0 - source = - let sourceFeature : Feature = sourceFeature() in - if sourceFeature = null then null - else sourceFeature.featureTarget.oclAsType(ActionUsage) + importOwningNamespace.oclIsType(ViewUsage) - - - <p>The <code>target</code> of a <code>TransitionUsage</code> is given by the <code>featureTarget</code> of the <code>targetFeature</code> of its <code>succession</code>, which must be an <code>ActionUsage</code>.</p> + + + <p>An <code>Expose</code> always has <code>protected</code> visibility.</p> - + OCL2.0 - target = - if succession.targetFeature->isEmpty() then null - else - let targetFeature : Feature = - succession.targetFeature->first().featureTarget in - if not targetFeature.oclIsKindOf(ActionUsage) then null - else targetFeature.oclAsType(ActionUsage) - endif - endif - + visibility = VisibilityKind::protected - - - <p>The <code>triggerActions</code> of a <code>TransitionUsage</code> are the <code>transitionFeatures</code> of the <code>ownedFeatureMemberships</code> of the <code>TransitionUsage</code> with <code>kind = trigger</code>, which must all be <code>AcceptActionUsages</code>.</p> + + + + + + <p>An <code>Expose</code> always has <code>protected</code> visibility.</p> - - OCL2.0 - triggerAction = ownedFeatureMembership-> - selectByKind(TransitionFeatureMembership)-> - select(kind = TransitionFeatureKind::trigger).transitionFeature-> - selectByKind(AcceptActionUsage) - - - - - <p>A <code>TransitionUsage</code> must have an <code>ownedMember</code> that is a <code>Succession</code> with an <code>ActionUsage</code> as the <code>featureTarget</code> of its <code>targetFeature</code>.</p> + + + + + + + + + <p>An <code>Expose</code> always imports all <code>Elements</code>, regardless of visibility (<code>isImportAll = true</code>).</p> - + + + + + + + + + <p>The ViewDefinition that owns a certain <code>satisfiedViewpoint</code>.</p> + + + + + + + + <p>A <code>RenderingDefinition</code> is a <code>PartDefinition</code> that defines a specific rendering of the content of a model view (e.g., symbols, style, layout, etc.).</p> + + + + <p>The <code>renderings</code> of a <code>RenderingDefinition</code> are all its <code>usages</code> that are <code>RenderingUsages</code>.</p> + + OCL2.0 - let successions : Sequence(Successions) = - ownedMember->selectByKind(Succession) in -successions->notEmpty() and -successions->at(1).targetFeature.featureTarget-> - forAll(oclIsKindOf(ActionUsage)) + rendering = usages->selectByKind(RenderingUsage) - - - <p>The <code>triggerActions</code> of a <code>TransitionUsage</code> are the <code>transitionFeatures</code> of the <code>ownedFeatureMemberships</code> of the <code>TransitionUsage</code> with <code>kind = trigger</code>, which must all be <code>Expressions</code>.</p> + + + <p>A <code>RenderingDefinition</code> must directly or indirectly specialize the base <code>RenderingDefinition</code> <code><em>Views::Rendering</em></code> from the Systems Model Library.</p> - + OCL2.0 - guardExpression = ownedFeatureMembership-> - selectByKind(TransitionFeatureMembership)-> - select(kind = TransitionFeatureKind::trigger).transitionFeature-> - selectByKind(Expression) + specializesFromLibrary('Views::Rendering') - - - <p>The <code>triggerActions</code>, <code>guardExpressions</code>, and <code>effectActions</code> of a <code>TransitionUsage</code> must specialize, respectively, the <em><code>accepter</code></em>, <em><code>guard</code></em>, and <em><code>effect</code></em> <code>features</code> of the <code>ActionUsage</code> <em><code>Actions::TransitionActions</code></em> from the Systems Model Library.</p> + + + + <p>The <code>usages</code> of a <code>RenderingDefinition</code> that are <code>RenderingUsages</code>.</p> - + + + + + + + <p>An <code>InterfaceUsage</code> is a Usage of an <code>InterfaceDefinition</code> to represent an interface connecting parts of a system through specific ports.</p> + + + + <p>A binary <code>InterfaceUsage</code> must directly or indirectly specialize the <code>InterfaceUsage</code> <em><code>Interfaces::binaryInterfaces</code></em> from the Systems Model Library.</p> + + OCL2.0 - triggerAction->forAll(specializesFromLibrary('Actions::TransitionAction::accepter') and -guardExpression->forAll(specializesFromLibrary('Actions::TransitionAction::guard') and -effectAction->forAll(specializesFromLibrary('Actions::TransitionAction::effect')) + ownedEndFeature->size() = 2 implies + specializesFromLibrary('Interfaces::binaryInterfaces') - - - <p>The <code>effectActions</code> of a <code>TransitionUsage</code> are the <code>transitionFeatures</code> of the <code>ownedFeatureMemberships</code> of the <code>TransitionUsage</code> with <code>kind = effect</code>, which must all be <code>ActionUsages</code>.</p> + + + <p>An <code>InterfaceUsage</code> must directly or indirectly specialize the <code>InterfaceUsage</code> <em><code>Interfaces::interfaces</code></em> from the Systems Model Library.</p> - + OCL2.0 - triggerAction = ownedFeatureMembership-> - selectByKind(TransitionFeatureMembership)-> - select(kind = TransitionFeatureKind::trigger).transitionFeatures-> - selectByKind(AcceptActionUsage) + specializesFromLibrary('Interfaces::interfaces') - - - <p>The <code>sourceFeature</code> of the <code>succession</code> of a <code>TransitionUsage</code> must be the <code>source</code> of the <code>TransitionUsage</code> (i.e., the first <code>connectorEnd</code> of the <code>succession</code> must have a <code>ReferenceSubsetting</code> <code>Relationship</code> with the <code>source</code>).</p> + + + + <p>The <code>InterfaceDefinitions</code> that type this <code>InterfaceUsage</code>.</p> - + + + + + + + + <p>The InterfaceDefinitions that have a certain PortUsage as an <code>interfaceEnd</code>.</p> + + + + + + + + + <p>The InterfaceUsages typed by a certain InterfaceDefinition.</p> + + + + + + + + <p>An <code>InterfaceDefinition</code> is a <code>ConnectionDefinition</code> all of whose ends are <code>PortUsages</code>, defining an interface between elements that interact through such ports.</p> + + + + <p>An <code>InterfaceDefinition</code> must directly or indirectly specialize the <code>InterfaceDefinition</code> <em><code>Interfaces::Interface</code></em> from the Systems Model Library.</p> + + OCL2.0 - succession.sourceFeature = source + specializesFromLibrary('Interfaces::Interface') - - - <p>A <code>TransitionUsage</code> must have an <code>ownedMember</code> that is a <code>BindingConnector</code> between its <code>source</code> and its first input <code>parameter</code> (which redefines <code><em>Actions::TransitionAction::transitionLinkSource</em></code>).</p> + + + <p>A binary <code>InterfaceDefinition</code> must directly or indirectly specialize the <code>InterfaceDefinition</code> <em><code>Interfaces::BinaryInterface</code></em> from the Systems Model Library.</p> - + OCL2.0 - ownedMember->selectByKind(BindingConnector)->exists(b | - b.relatedFeatures->includes(source) and - b.relatedFeatures->includes(inputParameter(1))) + ownedEndFeature->size() = 2 implies + specializesFromLibrary('Interfaces::BinaryInterface') - - - <p>If a <code>TransitionUsage</code> has a <code>triggerAction</code>, then the <em><code>payload</code></em> <code>parameter</code> of the <code>TransitionUsage</code> subsets the <code>Feature</code> chain of the <code>triggerAction</code> and its <code>payloadParameter</code>.</p> + + + + <p>The <code>PortUsages</code> that are the <code>connectionEnds</code> of this <code>InterfaceDefinition</code>. + + - + + + + + + + <p>A <code>ConstraintDefinition</code> is an <code>OccurrenceDefinition</code> that is also a <code>Predicate</code> that defines a constraint that may be asserted to hold on a system or part of a system.</p> + + + + + + <p>A <code>ConstraintDefinition</code> must directly or indirectly specialize the base <code>ConstraintDefinition</code> <em><code>Constraints::ConstraintCheck</code></em> from the Systems Model Library.</p> + + OCL2.0 - triggerAction->notEmpty() implies - let payloadParameter : Feature = inputParameter(2) in - payloadParameter <> null and - payloadParameter.subsetsChain(triggerAction->at(1), triggerPayloadParameter()) + specializesFromLibrary('Constraints::ConstraintCheck') - - - <p>A <code>TransitionUsage</code> must have an <code>ownedMember</code> that is a <code>BindingConnector</code> between its <code>succession</code> and the inherited <code>Feature</code> <code><em>TransitionPerformances::TransitionPerformance::transitionLink</em></code>.</p> + + + + + + + + <p>An <code>AssertConstraintUsage</code> is a <code>ConstraintUsage</code> that is also an <code>Invariant</code> and, so, is asserted to be true (by default). Unless it is the <code>AssertConstraintUsage</code> itself, the asserted <code>ConstraintUsage</code> is related to the <code>AssertConstraintUsage</code> by a ReferenceSubsetting <code>Relationship</code>.</p> + + + + <p>If an <code>AssertConstraintUsage</code> has no <code>ownedReferenceSubsetting</code>, then its <code>assertedConstraint</code> is the <code>AssertConstraintUsage</code> itself. Otherwise, the <code>assertedConstraint</code> is the <code>featureTarget</code> of the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code>, which must be a <code>ConstraintUsage</code>.</p> - + OCL2.0 - ownedMember->selectByKind(BindingConnector)->exists(b | - b.relatedFeatures->includes(succession) and - b.relatedFeatures->includes(resolveGlobal( - 'TransitionPerformances::TransitionPerformance::transitionLink'))) + assertedConstraint = + if referencedFeatureTarget() = null then self + else if referencedFeatureTarget().oclIsKindOf(ConstraintUsage) then + referencedFeatureTarget().oclAsType(ConstraintUsage) + else null + endif endif - - - <p>A <code>TransitionUsage</code> must have at least one owned input <code>parameter</code> and, if it has a <code>triggerAction</code>, it must have at least two.</p> + + + <p>If a <code>AssertConstraintUsage</code> is negated, then it must directly or indirectly specialize the <code>ConstraintUsage</code> <code><em>Constraints::negatedConstraintChecks</em></code>. Otherwise, it must directly or indirectly specialize the <code>ConstraintUsage</code> <code><em>Constraints::assertedConstraintChecks</em></code>.</p> - + OCL2.0 - if triggerAction->isEmpty() then - inputParameters()->size() >= 1 + if isNegated then + specializesFromLibrary('Constraints::negatedConstraintChecks') else - inputParameters()->size() >= 2 -endif - + specializesFromLibrary('Constraints::assertedConstraintChecks') +endif - - - <p>The <code>succession</code> of a <code>TransitionUsage</code> is its first <code>ownedMember</code> that is a <code>Succession</code>.</p> + + + <p>If an <code>AssertConstraintUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of its <code>referencedFeature</code> must be a </code>ConstraintUsage</code>.</p> - + OCL2.0 - succession = ownedMember->selectByKind(Succession)->at(1) - - - - - <p>If the <code>source</code> of a <code>TransitionUsage</code> is <em>not</em> a <code>StateUsage</code>, then the <code>TransitionUsage</code> must not have any <code>triggerActions</code>.</p> - - - OCL2.0 - source <> null and not source.oclIsKindOf(StateUsage) implies - triggerAction->isEmpty() + referencedFeatureTarget() <> null implies + referencedFeatureTarget().oclIsKindOf(ConstraintUsage) - - - - <p>The source <code>ActionUsage</code> of this <code>TransitionUsage</code>, which becomes the <code>source</code> of the <code>succession</code> for the <code>TransitionUsage</code>.</p> + + + + + + + <p>The <code>ConstraintUsage</code> to be performed by the <code>AssertConstraintUsage</code>. It is the <code>referenceFeature</code> of the <code>ownedReferenceSubsetting</code> for the <code>AssertConstraintUsage</code>, if there is one, and, otherwise, the <code>AssertConstraintUsage</code> itself.</p> - - + + - - - <p>The target <code>ActionUsage</code> of this <code>TransitionUsage<code>, which is the <code>targetFeature</code> of the <code>succession</code> for the <code>TransitionUsage</code>.</p> + + + + + <p>The ConstraintUsages typed by a certain Predicate.</p> - - - - - - <p>The <code>AcceptActionUsages</code> that define the triggers of this <code>TransitionUsage</code>, which are the <code>ownedFeatures</code> of the <code>TransitionUsage</code> related to it by <code>TransitionFeatureMemberships</code> with <code>kind = trigger</code>, which must all be <code>AcceptActionUsages</code>.</p> + + + + + + + + <p>A <code>ConstraintUsage</code> is an <code>OccurrenceUsage</code> that is also a <code>BooleanExpression</code>, and, so, is typed by a <code>Predicate</code>. Nominally, if the type is a <code>ConstraintDefinition</code>, a <code>ConstraintUsage</code> is a <code>Usage</code> of that <code>ConstraintDefinition</code>. However, other kinds of kernel <code>Predicates</code> are also allowed, to permit use of <code>Predicates</code> from the Kernel Model Libraries.</p> + + + + <p>A composite <code>ConstraintUsage</code> whose <code>owningFeatureMembership</code> is a <code>RequirementConstraintMembership</code> must directly or indirectly specialize on the <code>ConstraintUsages</code> <code><em>assumptions</em></code> or <code><em>constraints</em></code> from the <code>ConstraintDefinition</code> <code><em>Requirements::RequirementCheck</em></code> in the Systems Model Library, depending on whether the <code>kind</code> of the <code>RequirementConstraintMembership</code> is <code>assumption</code> or <code>requirement</code>, respectively.</p> - - - - - - - <p>The <code>Expressions</code> that define the guards of this <code>TransitionUsage</code>, which are the <code>ownedFeatures</code> of the <code>TransitionUsage</code> related to it by <code>TransitionFeatureMemberships</code> with <code>kind = guard</code>, which must all be <code>Expressions</code>.</p> + + OCL2.0 + isComposite and +owningFeatureMembership <> null and +owningFeatureMembership.oclIsKindOf(RequirementConstraintMembership) implies + if owningFeatureMembership.oclAsType(RequirementConstraintMembership).kind = + RequirementConstraintKind::assumption then + specializesFromLibrary('Requirements::RequirementCheck::assumptions') + else + specializesFromLibrary('Requirements::RequirementCheck::constraints') + endif + + + + + <p>A <code>ConstraintUsage</code> must directly or indirectly specialize the base <code>ConstraintUsage</code> <em><code>Constraints::constraintChecks</code></em> from the Systems Model Library.</p> - - - - - - - - <p>The <code>ActionUsages</code> that define the effects of this <code>TransitionUsage</code>, which are the <code>ownedFeatures</code> of the <code>TransitionUsage</code> related to it by <code>TransitionFeatureMemberships</code> with <code>kind = effect</code>, which must all be <code>ActionUsages</code>.</p> + + OCL2.0 + specializesFromLibrary('Constraints::constraintChecks') + + + + + <p>A <code>ConstraintUsage</code> whose <code>owningType</code> is an <code>ItemDefinition</code> or <code>ItemUsage</code> must directly or indirectly specialize the <code>ConstraintUsage</code> <em><code>Items::Item::checkedConstraints</code></em>.</p> - - - - - - - <p>The <code>Succession</code> that is the <code>ownedFeature</code> of this <code>TransitionUsage</code>, which, if the <code>TransitionUsage</code> is triggered, asserts the temporal ordering of the <code>source</code> and <code>target</code>.</p> + + OCL2.0 + owningType <> null and +(owningType.oclIsKindOf(ItemDefinition) or + owningType.oclIsKindOf(ItemUsage)) implies + specializesFromLibrary('Items::Item::checkedConstraints') + + + + + + + + + <p>The (single) <code>Predicate</code> that is the type of this <code>ConstraintUsage</code>. Nominally, this will be a <code>ConstraintDefinition</code>, but other kinds of <code>Predicates</code> are also allowed, to permit use of <code>Predicates</code> from the Kernel Model Libraries.</p> - - - - + + + + - - - <p>Return the <code>payloadParameter</code> of the <code>triggerAction</code> of this <code>TransitionUsage</code>, if it has one.</p> + + + <p>The naming <code>Feature</code> of a <code>ConstraintUsage</code> that is owned by a <code>RequirementConstraintMembership</code> and has an <code>ownedReferenceSubsetting</code> is the <code>featureTarget</code> of the <code>referencedFeature</code> of that <code>ownedReferenceSubsetting</code>.</p> - - + + OCL2.0 - if triggerAction->isEmpty() then null -else triggerAction->first().payloadParameter + if owningFeatureMembership <> null and +owningFeatureMembership.oclIsKindOf(RequirementConstraintMembership) and +ownedReferenceSubsetting <> null then + ownedReferenceSubsetting.referencedFeature.featureTarget +else + self.oclAsType(OccurrenceUsage).namingFeature() endif - - - + + + + - - - <p>Return the <code>Feature</code> to be used as the <code>source</code> of the <code>succession</code> of this <code>TransitionUsage</code>, which is the first <code>member</code> of the <code>TransitionUsage</code> that is a <code>Feature</code>, that is owned by the <code>TransitionUsage</code> via a <code>Membership</code> that is <em>not</em> a <code>FeatureMembership</code>, and whose <code>featureTarget</code> is an <code>ActionUsage</code>.</p> + + + <p>A <code>ConstraintUsage</code> is not model-level evaluable.</p> - - + + OCL2.0 - let features : Sequence(Feature) = ownedMembership-> - reject(oclIsKindOf(FeatureMembership)).memberElement-> - selectByKind(Feature)-> - select(featureTarget.oclIsKindOf(ActionUsage)) in -if features->isEmpty() then null -else features->first() -endif + false - + - - + + + + + + - - - <p>A <code>StateDefinition</code> is the <code>Definition</code> of the </code>Behavior</code> of a system or part of a system in a certain state condition.</p> - -<p>A <code>StateDefinition</code> may be related to up to three of its <code>ownedFeatures</code> by <code>StateBehaviorMembership</code> <code>Relationships</code>, all of different <code>kinds</code>, corresponding to the entry, do and exit actions of the <code>StateDefinition</code>.</p> - - - - <p>A <code>StateDefinition</code> must directly or indirectly specialize the <code>StateDefinition</code> <em><code>States::StateAction</code></em> from the Systems Model Library.</p> + + + + <p>The AssertConstraintUsages that have a certain ConstraintUsage as their <tt>assertedConstraint</tt>.</p> - - OCL2.0 - specializesFromLibrary('States::StateAction') - - - - - <p>A <code>StateDefinition</code> must not have more than one owned <code>StateSubactionMembership</code> of each <code>kind</code>.</p> + + + + + + + <p>An <code>EnumerationDefinition</code> is an <code>AttributeDefinition</code> all of whose instances are given by an explicit list of <code>enumeratedValues</code>. This is realized by requiring that the <code>EnumerationDefinition</code> have <code>isVariation = true</code>, with the <code>enumeratedValues</code> being its <code>variants</code>.</p> + + + + <p>An <code>EnumerationDefinition</code> must be a variation.</p> - + OCL2.0 - ownedMembership-> - selectByKind(StateSubactionMembership)-> - isUnique(kind) + isVariation - - - <p>The <code>states</code> of a <code>StateDefinition</code> are those of its <code>actions</code> that are <code>StateUsages</code>.</p> + + + + <p><code>EnumerationUsages</code> of this <code>EnumerationDefinition</code>that have distinct, fixed values. Each <code>enumeratedValue</code> specifies one of the allowed instances of the <code>EnumerationDefinition</code>.</p> - - OCL2.0 - state = action->selectByKind(StateUsage) - - - - - <p>The <code>doAction</code> of a <code>StateDefinition</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = do</code>.</p> + + + + + + <p>An EnumerationDefinition is considered semantically to be a variation whose allowed variants are its <code>enumerationValues</code>.</p> - - OCL2.0 - doAction = - let doMemberships : Sequence(StateSubactionMembership) = - ownedMembership-> - selectByKind(StateSubactionMembership)-> - select(kind = StateSubactionKind::do) in - if doMemberships->isEmpty() then null - else doMemberships->at(1) - endif - - - - - <p>The <code>entryAction</code> of a <code>StateDefinition</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = entry</code>.</p> + + + + + + + + <p>The EnumerationUsages that are typed by a certain EnumerationDefinition.</p> - + + + + + + + <p>An <code>EnumerationUsage</code> is an <code>AttributeUsage</code> whose <code>attributeDefinition</code> is an <code>EnumerationDefinition</code>.</p> + + + + + <p>The single EnumerationDefinition that is the type of this EnumerationUsage.</p> + + + + + + + + + <p>The EnumerationDefinition that owns a certain <code>enumeratedValue</code>.</p> + + + + + + + + + <p>The AttributeUsages that are typed by a certain DataType.</p> + + + + + + + + <p>An <code>AttributeDefinition</code> is a <code>Definition</code> and a <code>DataType</code> of information about a quality or characteristic of a system or part of a system that has no independent identity other than its value. All <code>features</code> of an <code>AttributeDefinition</code> must be referential (non-composite).</p> + +<p>As a <code>DataType</code>, an <code>AttributeDefinition</code> must specialize, directly or indirectly, the base <code>DataType</code> <code><em>Base::DataValue</em></code> from the Kernel Semantic Library.</p> + + + + <p>All <code>features</code> of an <code>AttributeDefinition</code> must be non-composite.</p> + + OCL2.0 - entryAction = - let entryMemberships : Sequence(StateSubactionMembership) = - ownedMembership-> - selectByKind(StateSubactionMembership)-> - select(kind = StateSubactionKind::entry) in - if entryMemberships->isEmpty() then null - else entryMemberships->at(1) - endif + feature->forAll(not isComposite) - - - <p>If a <code>StateDefinition</code> is parallel, then its <code>ownedActions</code> (which includes its <code>ownedStates</code>) must not have any <code>incomingTransitions</code> or <code>outgoingTransitions</code>.</p> + + + + + + + + <p>An <code>AttributeUsage</code> is a <code>Usage</code> whose type is a <code>DataType</code>. Nominally, if the type is an <code>AttributeDefinition</code>, an <code>AttributeUsage</code> is a usage of a <code>AttributeDefinition</code> to represent the value of some system quality or characteristic. However, other kinds of kernel <code>DataTypes</code> are also allowed, to permit use of <code>DataTypes</code> from the Kernel Model Libraries. An <code>AttributeUsage</code> itself as well as all its nested <code>features</code> must be referential (non-composite).</p> + +<p>An <code>AttributeUsage</code> must specialize, directly or indirectly, the base <code>Feature</code> <code><em>Base::dataValues</em></code> from the Kernel Semantic Library.</p> + + + + <p>An <code>AttributeUsage</code> is always referential.</p> - + OCL2.0 - isParallel implies - ownedAction.incomingTransition->isEmpty() and - ownedAction.outgoingTransition->isEmpty() + isReference - - - <p>The <code>exitAction</code> of a <code>StateDefinition</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = exit -</code>.</p> + + + <p>All <code>features</code> of an <code>AttributeUsage</code> must be non-composite.</p> - + OCL2.0 - exitAction = - let exitMemberships : Sequence(StateSubactionMembership) = - ownedMembership-> - selectByKind(StateSubactionMembership)-> - select(kind = StateSubactionKind::exit) in - if exitMemberships->isEmpty() then null - else exitMemberships->at(1) - endif + feature->forAll(not isComposite) - - - - <p>The <code>StateUsages</code>, which are <code>actions</code> in the <code>StateDefinition</code>, that specify the discrete states in the behavior defined by the <code>StateDefinition</code>.</p> - - - - - - - <p>The <code>ActionUsage</code> of this <code>StateDefinition</code> to be performed on entry to the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateDefinition</code> by a <code>StateSubactionMembership</code> with <code>kind = entry</code>.</p> - - - - - - - <p>The <code>ActionUsage</code> of this <code>StateDefinition</code> to be performed while in the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateDefinition</code> by a <code>StateSubactionMembership</code> with <code>kind = do</code>.</p> + + + <p>An <code>AttributeUsage</code> must directly or indirectly specialize <code><em>Base::dataValues</em></code> from the Kernel Semantic Library.</p> - - - - - - <p>The <code>ActionUsage</code> of this <code>StateDefinition</code> to be performed on exit to the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateDefinition</code> by a <code>StateSubactionMembership</code> with <code>kind = exit</code>.</p> + + OCL2.0 + specializesFromLibrary('Base::dataValues') + + + + + + <p>The <code>DataTypes</code> that are the types of this <code>AttributeUsage</code>. Nominally, these are <code>AttributeDefinitions</code>, but other kinds of kernel <code>DataTypes</code> are also allowed, to permit use of <code>DataTypes</code> from the Kernel Model Libraries.</p> - - + + + - - - <p>Whether the <code>ownedStates</code> of this <code>StateDefinition</code> are to all be performed in parallel. If true, none of the <code>ownedActions</code> (which includes <code>ownedStates</code>) may have any incoming or outgoing <code>Transitions</code>. If false, only one <code>ownedState</code> may be performed at a time.</p> - + + + <p>Always true for an <code>AttributeUsage</code>.</p> - + - - - - <p>The TransitionUsage outgoing from a certain source <tt>ActionUsage</tt>.</p> - - - - - - - - - <p>The StateUsages with a certain <tt>entryAction</tt>.</p> - - - - - - - - - <p>The ExhibitStateUsages that have a certain StateUsage as their <tt>exhibitedState</tt>.</p> - - - - - - - - - <p>The TransitionUsage incoming to a certain target <tt>ActionUsage</tt>.</p> - - - - - - - - <p>A <code>TransitionFeatureMembership</code> is a <code>FeatureMembership</code> for a trigger, guard or effect of a <code>TransitionUsage</code>, whose <code>transitionFeature</code> is a <code>AcceptActionUsage</code>, <em><code>Boolean</code></em>-valued <code>Expression</code> or <code>ActionUsage</code>, depending on its <code>kind</code>. </p> + + + <p>An <code>ItemUsage</code> is an <code>OccurrenceUsage</code> whose <code>definition</code> is a <code>Structure</code>. Nominally, if the <code>definition</code> is an <code>ItemDefinition</code>, an <code>ItemUsage</code> is a <code>ItemUsage</code> of that <code>ItemDefinition</code> within a system. However, other kinds of Kernel <code>Structures</code> are also allowed, to permit use of <code>Structures</code> from the Kernel Model Libraries.</p> - - - <p>If the <code>kind</code> of a <code>TransitionUsage</code> is <code>trigger</code>, then its <code>transitionFeature</code> must be a kind of <code>AcceptActionUsage</code>.</p> + + + <p>The <code>itemDefinitions</code> of an <code>ItemUsage</code> are those <code>occurrenceDefinitions</code> that are <code>Structures</code>.</p> - + OCL2.0 - kind = TransitionFeatureKind::trigger implies - transitionFeature.oclIsKindOf(AcceptActionUsage) + itemDefinition = occurrenceDefinition->selectByKind(Structure) - - - <p>The <code>owningType</code> of a <code>TransitionFeatureMembership</code> must be a <code>TransitionUsage</code>.</p> + + + <p>An <code>ItemUsage</code> must directly or indirectly specialize the Systems Model Library <code>ItemUsage</code> <em><code>items</code></em>.</p> - + OCL2.0 - owningType.oclIsKindOf(TransitionUsage) + specializesFromLibrary('Items::items') - - - <p>If the <code>kind</code> of a <code>TransitionUsage</code> is <code>guard</code>, then its <code>transitionFeature</code> must be a kind of <code>Expression</code> whose result is a <em><code>Boolean</code></em> value.</p> + + + <p>A composite <code>ItemUsage</code> whose <code>owningType</code> is an <code>ItemDefinition</code> or <code>ItemUsage</code> must directly or indirectly specialize the Systems Model Library <code>ItemUsage</code> <em><code>Items::Item::subitems</code></em>.</p> - + OCL2.0 - kind = TransitionFeatureKind::guard implies - transitionFeature.oclIsKindOf(Expression) and - let guard : Expression = transitionFeature.oclIsKindOf(Expression) in - guard.result.specializesFromLibrary('ScalarValues::Boolean') and - guard.result.multiplicity <> null and - guard.result.multiplicity.hasBounds(1,1) + isComposite and owningType <> null and +(owningType.oclIsKindOf(ItemDefinition) or + owningType.oclIsKindOf(ItemUsage)) implies + specializesFromLibrary('Items::Item::subitem') - - - <p>If the <code>kind</code> of a <code>TransitionUsage</code> is <code>effect</code>, then its <code>transitionFeature</code> must be a kind of <code>ActionUsage</code>.</p> + + + + <p>The Structures that are the <code>definitions</code> of this ItemUsage. Nominally, these are ItemDefinitions, but other kinds of Kernel Structures are also allowed, to permit use of Structures from the Kernel Library.</p> - + + + + + + + + <p>An <code>ItemDefinition</code> is an <code>OccurrenceDefinition</code> of the <code>Structure</code> of things that may themselves be systems or parts of systems, but may also be things that are acted on by a system or parts of a system, but which do not necessarily perform actions themselves. This includes items that can be exchanged between parts of a system, such as water or electrical signals.</p> + + + + + <p>An <code>ItemDefinition</code> must directly or indirectly specialize the Systems Library Model <code>ItemDefinition</code> <em><code>Items::Item</code>.</p> + + OCL2.0 - kind = TransitionFeatureKind::effect implies - transitionFeature.oclIsKindOf(ActionUsage) + specializesFromLibrary('Items::Item') - - + + - - - <p>Whether this <code>TransitionFeatureMembership </code> is for a <code>trigger</code>, <code>guard</code> or <code>effect</code>.</p> + + + + + + <p>The Definitions that feature a certain Usage.</p> - - - - <p>The <code>Step</code> that is the <code>ownedMemberFeature</code> of this <code>TransitionFeatureMembership</code>.</p> + + + + + + + + + <p>The Definition that owns the <code>ownedAllocation</code>.</p> - - - - - + + + - - - - <p>The Transition that owns a certain Succession.</p> + + + + <p>The Usages that have a certain Classifier as a <code>definition</code>.</p> - - - + + + - - - - <p>The StateUsages with a certain <tt>exitAction</tt>.</p> + + + + <p>The Definition that owns a certain <code>ownedViewpoint</code>.</p> - - + + - - - - <p>The TransitionUsage that has a certain <tt>effectAction</tt>.</p> + + + + <p>The owning Definition of this VariantMembership, which must have <code>isVariation</code> = true.</p> - - - + + + - - - - <p>The StateSubactionMembership that is the owner of a certain ActionUsage (if any).</p> + + + + <p>The Usage in which the <code>nestedInterface</code> is nested.</p> - - - + + - - - - <p>The TransitionUsage that is guarded by a certain Expression.</p> + + + + <p>The <code>Definition</code> that owns the <code>ownedFlow</code>.</p> - - - + + - - - - <p>The TransitionFeatureMembership that owns a certain Step (if any).</p> + + + + <p>The Usage in which the <code>nestedUseCase</code> is nested.</p> - - - + + - - - - <p>The StateDefinitions featuring a certain StateUsage.</p> + + + + <p>The ItemUsages being typed by a certain Structure.</p> - - - + + - - - - <p>The Behaviors that are the types of this StateUsage. Nominally, these would be StateDefinition, but non-StateDefinition Behaviors are also allowed, to permit use of Behaviors from the Kernel Library.</p> + + + + <p>The Definition that owns the <code>ownedConnection</code>.</p> - - + + - - - <p>A <code>TransitionActionKind</code> indicates whether the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is a trigger, guard or effect.</p> - - - - <p>Indicates that the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is a <code>triggerAction</code>.</p> + + + + + <p>The Definition that owns the <code>ownedItem</code>.</p> - - - - <p>Indicates that the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is a <code>guardExpression</code>.</p> + + + + + + + + <p>The Usages that have a certain Usage as a <code>flow</code>.</p> - - - - <p>Indicates that the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is an <code>effectAction</code>.</p> + + - + + + + + - - - <p>A <code>StateUsage</code> is an <code>ActionUsage</code> that is nominally the <code>Usage</code> of a <code>StateDefinition</code>. However, other kinds of kernel <code>Behaviors</code> are also allowed as <code>types</code>, to permit use of <code>Behaviors</code from the Kernel Model Libraries.</p> - -<p>A <code>StateUsage</code> may be related to up to three of its <code>ownedFeatures</code> by <code>StateSubactionMembership</code> <code>Relationships</code>, all of different <code>kinds</code>, corresponding to the entry, do and exit actions of the <code>StateUsage</code>.</p> - - - - - <p>The <code>doAction</code> of a <code>StateUsage</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = do</code>.</p> + + + + <p>The VariantMembership that owns this Usage, if the Usage represents a variant in the context of some variation point Definition or Usage.</p> - - OCL2.0 - doAction = - let doMemberships : Sequence(StateSubactionMembership) = - ownedMembership-> - selectByKind(StateSubactionMembership)-> - select(kind = StateSubactionKind::do) in - if doMemberships->isEmpty() then null - else doMemberships->at(1) - endif - - - - - <p>The <code>entryAction</code> of a <code>StateUsage</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = entry</code>.</p> + + + + + + + + + <p>The Usage in which the <code>nestedState</code> is nested.</p> - - OCL2.0 - entryAction = - let entryMemberships : Sequence(StateSubactionMembership) = - ownedMembership-> - selectByKind(StateSubactionMembership)-> - select(kind = StateSubactionKind::entry) in - if entryMemberships->isEmpty() then null - else entryMemberships->at(1) - endif - - - - - <p>If a <code>StateUsage</code> is parallel, then its <code>nestedActions</code> (which includes <code>nestedStates</code>) must not have any <code>incomingTransitions</code> or <code>outgoingTransitions</code>.</p> + + + + + + + + <p>The Definition that owns the <code>ownedConstraint</code>.</p> - - OCL2.0 - isParallel implies - nestedAction.incomingTransition->isEmpty() and - nestedAction.outgoingTransition->isEmpty() - - - - - <p>A <code>StateUsage</code> that is a substate usage with a non-parallel owning <code>StateDefinition</code> or <code>StateUsage</code> must directly or indirectly specialize the <code>StateUsage</code> <em><code>States::StateAction::exclusiveStates</code></em> from the Systems Model Library.</p> + + + + + + + + <p>The Usage that owns the <code>nestedConcern</code>.</p> - - OCL2.0 - isSubstateUsage(false) implies - specializesFromLibrary('States::StateAction::exclusiveStates') - - - - - <p>The <code>exitAction</code> of a <code>StateUsage</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = exit -</code>.</p> - - - OCL2.0 - exitAction = - let exitMemberships : Sequence(StateSubactionMembership) = - ownedMembership-> - selectByKind(StateSubactionMembership)-> - select(kind = StateSubactionKind::exit) in - if exitMemberships->isEmpty() then null - else exitMemberships->at(1) - endif - - - - - <p>A <code>StateUsage</code> must directly or indirectly specialize the <code>StateUsage</code> <em><code>States::stateActions</code></em> from the Systems Model Library.</p> - - - OCL2.0 - specializesFromLibrary('States::stateActions') - - - - - <p>A <code>StateUsage</code> must not have more than one owned <code>StateSubactionMembership</code> of each <code>kind</code>.</p> - - - OCL2.0 - ownedMembership-> - selectByKind(StateSubactionMembership)-> - isUnique(kind) - - - - - <p>A <code>StateUsage</code> that is a substate usage with a owning <code>StateDefinition</code> or <code>StateUsage</code> that is parallel must directly or indirectly specialize the <code>StateUsage</code> <em><code>States::StateAction::substates</code></em> from the Systems Model Library.</p> - - - OCL2.0 - isSubstateUsage(true) implies - specializesFromLibrary('States::StateAction::substates') - - - - - <p>A composite <code>StateUsage</code> whose <code>owningType</code> is a <code>PartDefinition</code> or <code>PartUsage</code> must directly or indirectly specialize the <code>StateUsage</code> <em><code>Parts::Part::ownedStates</code></em> from the Systems Model Library.</p> + + + + + + + + <p>The owning Definition of this VariantMembership, which must have <code>isVariation</code> = true.</p> - - OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(PartDefinition) or - owningType.oclIsKindOf(PartUsage)) implies - specializesFromLibrary('Parts::Part::ownedStates') - - - - - - <p>The <code>Behaviors</code> that are the <code>types</code> of this <code>StateUsage</code>. Nominally, these would be <code>StateDefinitions</code>, but kernel <code>Behaviors</code> are also allowed, to permit use of <code>Behaviors</code> from the Kernel Model Libraries.</p> + + + + + + + + + <p>The Usages that feature a certain Usage.</p> - - - - - - - <p>The <code>ActionUsage</code> of this <code>StateUsage</code> to be performed on entry to the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateUsage</code> by a <code>StateSubactionMembership</code> with <code>kind = entry</code>.</p> + + + + + + + + + <p>The Usage that owns a certain <code>nestedView</code>.</p> - - - - - - <p>The <code>ActionUsage</code> of this <code>StateUsage</code> to be performed while in the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateUsage</code> by a <code>StateSubactionMembership</code> with <code>kind = do</code>.</p> + + + + + + + + <p>The Definition that owns the <code>ownedConcern</code>.</p> - - - - - - <p>The <code>ActionUsage</code> of this <code>StateUsage</code> to be performed on exit to the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateUsage</code> by a <code>StateSubactionMembership</code> with <code>kind = exit</code>.</p> + + + + + + + + <p>The Usage that owns the <code>nestedReference</code>.</p> - - - - - - <p>Whether the <code>nestedStates</code> of this <code>StateUsage</code> are to all be performed in parallel. If true, none of the <code>nestedActions</code> (which include <code>nestedStates</code>) may have any incoming or outgoing <code>Transitions</code>. If false, only one <code>nestedState</code> may be performed at a time.</p> - + + + + + + + + <p>The Definition that owns the <code>ownedTransition</code>.</p> - - - - - - <p>Check if this <code>StateUsage</code> is composite and has an <code>owningType</code> that is a <code>StateDefinition</code> or <code>StateUsage</code> with the given value of <code>isParallel</code>, but is <em>not</em> an <code>entryAction</code>, <code>doAction</code>, or <code>exitAction</code>. If so, then it represents a <code><em>StateAction</em></code> that is a <code><em>substate</em></code> or <code><em>exclusiveState</em></code> (for <code>isParallel = false</code>) of another <code><em>StateAction</em></code>.</p> + + + + + + + + <p>The Definitions that have a certain Usage as a <code>flow</code>.</p> - - - OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(StateDefinition) and - owningType.oclAsType(StateDefinition).isParallel = isParallel or - owningType.oclIsKindOf(StateUsage) and - owningType.oclAsType(StateUsage).isParallel = isParallel) and -not owningFeatureMembership.oclIsKindOf(StateSubactionMembership) - - - - - - - - - + + + + + - - - - <p>The TransitionUsage that is triggered by a certain AcceptActionUsage.</p> + + + + <p>The Usage in which the <code>nestedTransition</code> is nested.</p> - - - + + - - - <p>A <code>ConstraintDefinition</code> is an <code>OccurrenceDefinition</code> that is also a <code>Predicate</code> that defines a constraint that may be asserted to hold on a system or part of a system.</p> + + + <p>A <code>Definition</code> is a <code>Classifier</code> of <code>Usages</code>. The actual kinds of <code>Definition</code> that may appear in a model are given by the subclasses of <code>Definition</code> (possibly as extended with user-defined <em><code>SemanticMetadata</code></em>).</p> + +<p>Normally, a <code>Definition</code> has owned Usages that model <code>features</code> of the thing being defined. A <code>Definition</code> may also have other <code>Definitions</code> nested in it, but this has no semantic significance, other than the nested scoping resulting from the <code>Definition</code> being considered as a <code>Namespace</code> for any nested <code>Definitions</code>.</p> +<p>However, if a <code>Definition</code> has <code>isVariation</code> = <code>true</code>, then it represents a <em>variation point</em> <code>Definition</code>. In this case, all of its <code>members</code> must be <code>variant</code> <code>Usages</code>, related to the <code>Definition</code> by <code>VariantMembership</code> <code>Relationships</code>. Rather than being <code>features</code> of the <code>Definition</code>, <code>variant</code> <code>Usages</code> model different concrete alternatives that can be chosen to fill in for an abstract <code>Usage</code> of the variation point <code>Definition</code>.</p> - - - <p>A <code>ConstraintDefinition</code> must directly or indirectly specialize the base <code>ConstraintDefinition</code> <em><code>Constraints::ConstraintCheck</code></em> from the Systems Model Library.</p> + + + <p>If a <code>Definition</code> is a variation, then all it must not have any <code>ownedFeatureMemberships</code>.</p> - + OCL2.0 - specializesFromLibrary('Constraints::ConstraintCheck') + isVariation implies ownedFeatureMembership->isEmpty() - - - - - - - - - <p>The ConstraintUsages typed by a certain Predicate.</p> - - - - - - - - - <p>An <code>AssertConstraintUsage</code> is a <code>ConstraintUsage</code> that is also an <code>Invariant</code> and, so, is asserted to be true (by default). Unless it is the <code>AssertConstraintUsage</code> itself, the asserted <code>ConstraintUsage</code> is related to the <code>AssertConstraintUsage</code> by a ReferenceSubsetting <code>Relationship</code>.</p> - - - - <p>If an <code>AssertConstraintUsage</code> has no <code>ownedReferenceSubsetting</code>, then its <code>assertedConstraint</code> is the <code>AssertConstraintUsage</code> itself. Otherwise, the <code>assertedConstraint</code> is the <code>featureTarget</code> of the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code>, which must be a <code>ConstraintUsage</code>.</p> + + + <p>The <code>variants</code> of a <code>Definition</code> are the <code>ownedVariantUsages</code> of its <code>variantMemberships</code>.</p> - + OCL2.0 - assertedConstraint = - if referencedFeatureTarget() = null then self - else if referencedFeatureTarget().oclIsKindOf(ConstraintUsage) then - referencedFeatureTarget().oclAsType(ConstraintUsage) - else null - endif endif + variant = variantMembership.ownedVariantUsage - - - <p>If a <code>AssertConstraintUsage</code> is negated, then it must directly or indirectly specialize the <code>ConstraintUsage</code> <code><em>Constraints::negatedConstraintChecks</em></code>. Otherwise, it must directly or indirectly specialize the <code>ConstraintUsage</code> <code><em>Constraints::assertedConstraintChecks</em></code>.</p> + + + <p>The <code>variantMemberships</code> of a <code>Definition</code> are those <code>ownedMemberships</code> that are <code>VariantMemberships</code>.</p> - + OCL2.0 - if isNegated then - specializesFromLibrary('Constraints::negatedConstraintChecks') -else - specializesFromLibrary('Constraints::assertedConstraintChecks') -endif + variantMembership = ownedMembership->selectByKind(VariantMembership) - - - <p>If an <code>AssertConstraintUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of its <code>referencedFeature</code> must be a </code>ConstraintUsage</code>.</p> - - + + + <p>A variation <code>Definition</code> may not specialize any other variation <code>Definition</code>.</p> + + OCL2.0 - referencedFeaureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(ConstraintUsage) + isVariation implies + not ownedSpecialization.specific->exists( + oclIsKindOf(Definition) and + oclAsType(Definition).isVariation) - - - - - - - <p>The <code>ConstraintUsage</code> to be performed by the <code>AssertConstraintUsage</code>. It is the <code>referenceFeature</code> of the <code>ownedReferenceSubsetting</code> for the <code>AssertConstraintUsage</code>, if there is one, and, otherwise, the <code>AssertConstraintUsage</code> itself.</p> - - - - - - - - <p>A <code>ConstraintUsage</code> is an <code>OccurrenceUsage</code> that is also a <code>BooleanExpression</code>, and, so, is typed by a <code>Predicate</code>. Nominally, if the type is a <code>ConstraintDefinition</code>, a <code>ConstraintUsage</code> is a <code>Usage</code> of that <code>ConstraintDefinition</code>. However, other kinds of kernel <code>Predicates</code> are also allowed, to permit use of <code>Predicates</code> from the Kernel Model Libraries.</p> - - - - <p>A <code>ConstraintUsage</code> whose <code>owningFeatureMembership</code> is a <code>RequirementConstraintMembership</code> must directly or indirectly specialize on the <code>ConstraintUsages</code> <code><em>assumptions</em></code> or <code><em>constraints</em></code> from the <code>ConstraintDefinition</code> <code><em>Requirements::RequirementCheck</em></code> in the Systems Model Library, depending on whether the <code>kind</code> of the <code>RequirementConstraintMembership</code> is <code>assumption</code> or <code>requirement</code>, respectively.</p> + + + <p>The <code>usages</code> of a <code>Definition</code> are all its <code>features</code> that are <code>Usages</code>.</p> - + OCL2.0 - owningFeatureMembership <> null and -owningFeatureMembership.oclIsKindOf(RequirementConstraintMembership) implies - if owningFeatureMembership.oclAsType(RequirementConstraintMembership).kind = - RequirementConstraintKind::assumption then - specializesFromLibrary('Requirements::RequirementCheck::assumptions') - else - specializesFromLibrary('Requirements::RequirementCheck::constraints') - endif + usage = feature->selectByKind(Usage) - - - <p>A <code>ConstraintUsage</code> must directly or indirectly specialize the base <code>ConstraintUsage</code> <em><code>Constraints::constraintChecks</code></em> from the Systems Model Library.</p> + + + <p>The <code>directedUsages</code> of a <code>Definition</code> are all its <code>directedFeatures</code> that are <code>Usages</code>.</p> - + OCL2.0 - specializesFromLibrary('Constraints::constraintChecks') + directedUsage = directedFeature->selectByKind(Usage) - - - <p>A <code>ConstraintUsage</code> whose <code>owningType</code> is an <code>ItemDefinition</code> or <code>ItemUsage</code> must directly or indirectly specialize the <code>ConstraintUsage</code> <em><code>Items::Item::checkedConstraints</code></em>.</p> + + + <p>The <code>ownedUsages</code> of a <code>Definition</code> are all its <code>ownedFeatures</code> that are <code>Usages</code>.</p> - + OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(ItemDefinition) or - owningType.oclIsKindOf(ItemUsage)) implies - specializesFromLibrary('Items::Item::checkedConstraints') + ownedUsage = ownedFeature->selectByKind(Usage) - - - - - - - <p>The (single) <code>Predicate</code> that is the type of this <code>ConstraintUsage</code>. Nominally, this will be a <code>ConstraintDefinition</code>, but other kinds of <code>Predicates</code> are also allowed, to permit use of <code>Predicates</code> from the Kernel Model Libraries.</p> - - - - - - - - - <p>The naming <code>Feature</code> of a <code>ConstraintUsage</code> that is owned by a <code>RequirementConstraintMembership</code> and has an <code>ownedReferenceSubsetting</code> is the <code>featureTarget</code> of the <code>referencedFeature</code> of that <code>ownedReferenceSubsetting</code>.</p> + + + <p>The <code>ownedAttributes</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>AttributeUsages</code>.</p> - - - OCL2.0 - if owningFeatureMembership <> null and -owningFeatureMembership.oclIsKindOf(RequirementConstraintMembership) and -ownedReferenceSubsetting <> null then - ownedReferenceSubsetting.referencedFeature.featureTarget -else - self.oclAsType(OccurrenceUsage).namingFeature() -endif - - - - - - - - - - - <p>A <code>ConstraintUsage</code> is not model-level evaluable.</p> + + OCL2.0 + ownedAttribute = ownedUsage->selectByKind(AttributeUsage) + + + + + <p>The <code>ownedReferences</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ReferenceUsages</code>.</p> - - - OCL2.0 - false - - - - - - - - - - - - - - - - - <p>The AssertConstraintUsages that have a certain ConstraintUsage as their <tt>assertedConstraint</tt>.</p> + + OCL2.0 + ownedReference = ownedUsage->selectByKind(ReferenceUsage) + + + + + <p>The <code>ownedEnumerations</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>EnumerationUsages</code>.</p> - - - - - - - <p>A <code>CaseUsage</code> is a <code>Usage</code> of a <code>CaseDefinition</code>.</p> - - - - <p>The <code>objectiveRequirement</code> of a <code>CaseUsage</code> is the <code>RequirementUsage</code> it owns via an <case>ObjectiveMembership</code>, if any.</p> + + OCL2.0 + ownedEnumeration = ownedUsage->selectByKind(EnumerationUsage) + + + + + <p>The <code>ownedOccurrences</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>OccurrenceUsages</code>.</p> - + OCL2.0 - objectiveRequirement = - let objectives: OrderedSet(RequirementUsage) = - featureMembership-> - selectByKind(ObjectiveMembership). - ownedRequirement in - if objectives->isEmpty() then null - else objectives->first().ownedObjectiveRequirement - endif + ownedOccurrence = ownedUsage->selectByKind(OccurrenceUsage) - - - <p>A <code>CaseUsage</code> must have at most one <code>featureMembership</code> that is a <code>ObjectiveMembership</code>.</p> + + + <p>The <code>ownedItems</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ItemUsages</code>.</p> - + OCL2.0 - featureMembership-> - selectByKind(ObjectiveMembership)-> - size() <= 1 + ownedItem = ownedUsage->selectByKind(ItemUsage) - - - <p>A <code>CaseUsage</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> + + + <p>The <code>ownedParts</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>PartUsages</code>.</p> - + OCL2.0 - featureMembership-> - selectByKind(SubjectMembership)-> - size() <= 1 + ownedPart = ownedUsage->selectByKind(PartUsage) - - - <p>The <code>actorParameters</code> of a <code>CaseUsage</code> are the <code>ownedActorParameters</code> of the <code>ActorMemberships</code> of the <code>CaseUsage</code>.</p> + + + <p>The <code>ownedPorts</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>PortUsages</code>.</p> - + OCL2.0 - actorParameter = featureMembership-> - selectByKind(ActorMembership). - ownedActorParameter + ownedPort = ownedUsage->selectByKind(PortUsage) - - - <p>The <code>subjectParameter</code> of a <code>CaseUsage</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p> + + + <p>The <code>ownedConnections</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ConnectorAsUsages</code>.</p> - + OCL2.0 - subjectParameter = - let subjects : OrderedSet(SubjectMembership) = - featureMembership->selectByKind(SubjectMembership) in - if subjects->isEmpty() then null - else subjects->first().ownedSubjectParameter - endif + ownedConnection = ownedUsage->selectByKind(ConnectorAsUsage) - - - <p>The <code>subjectParameter</code> of a <code>CaseUsage</code> must be its first <code>input</code>.</p> + + + <p>The <code>ownedFlows</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>FlowUsages</code>.</p> - + OCL2.0 - input->notEmpty() and input->first() = subjectParameter + ownedFlow = ownedUsage->selectByKind(FlowUsage) - - - <p>A <code>CaseUsage</code> must directly or indirectly specialize the base <code>CaseUsage</code> <em><code>Cases::cases</code></em> from the Systems Model Library.</p> + + + <p>The <code>ownedInterfaces</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>InterfaceUsages</code>.</p> - + OCL2.0 - specializesFromLibrary('Cases::cases') + ownedInterface = ownedUsage->selectByKind(ReferenceUsage) - - - <p>A composite <code>CaseUsage</code> whose <code>owningType</code> is a <code>CaseDefinition</code> or <code>CaseUsage</code> must directly or indirectly specialize the <code>CaseUsage</code> <em><code>Cases::Case::subcases</code></em>.</p> + + + <p>The <code>ownedAllocations</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>AllocationUsages</code>.</p> - + OCL2.0 - isComposite and owningType <> null and - (owningType.oclIsKindOf(CaseDefinition) or - owningType.oclIsKindOf(CaseUsage)) implies - specializesFromLibrary('Cases::Case::subcases') + ownedAllocation = ownedUsage->selectByKind(AllocationUsage) - - - - <p>The <code>RequirementUsage</code> representing the objective of this <code>CaseUsage</code>.</p> - - - - - - - - <p>The CaseDefinition that is the type of this CaseUsage.</p> - - - - - - - <p>The <code>parameter</code> of this <code>CaseUsage</code> that represents its subject.</p> - - - - - - - - - - <p>The <code>parameters</code> of this <code>CaseUsage</code> that represent actors involved in the case.</p> - - - - - - - - - - <p>An <code>ObjectiveMembership</code> is a <code>FeatureMembership</code> that indicates that its <code>ownedObjectiveRequirement</code> is the objective <code>RequirementUsage</code> for its <code>owningType</code>, which must be a <code>CaseDefinition</code> or <code>CaseUsage</code>.</p> - - - - <p>The <code>owningType</code> of an <code>ObjectiveMembership</code> must be a <code>CaseDefinition</code> or <code>CaseUsage</code>.</p> + + + <p>The <code>ownedActions</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ActionUsages</code>.</p> - + OCL2.0 - owningType.oclIsType(CaseDefinition) or -owningType.oclIsType(CaseUsage) - + ownedAction = ownedUsage->selectByKind(ActionUsage) - - - <p>The <code>ownedObjectiveRequirement</code> of an <code>ObjectiveMembership</code> must be composite.</p> + + + <p>The <code>ownedStates</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>StateUsages</code>.</p> - + OCL2.0 - ownedObjectiveRequirement.isComposite + ownedState = ownedUsage->selectByKind(StateUsage) - - - - - - <p>The RequirementUsage that is the <code>ownedMemberFeature</code> of this RequirementUsage.</p> - - - - - - - - - - - <p>The CaseUsages that have a certain Usage as their <code>subjectParameter</code>.</p> - - - - - - - - - - - - - - - - - <p>The CaseDefinitions that have a certain PartUsage as an <code>actorParameter</code>.</p> - - - - - - - - - - - <p>The ObjectMembership that owns a particular RequirementUsage as its <code>ownedObjectiveRequirement</code>.</p> - - - - - - - - - - <p>The CaseDefinitions that have a certain RequirementUsage as their <code>objectiveRequirement</code>.</p> + + + <p>The <code>ownedTransitions</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>TransitionUsages</code>.</p> - - - - - - - - - <p>The CaseUsages that have a certain PartUsage as an <code>actorParameter</code>.</p> + + OCL2.0 + ownedTransition = ownedUsage->selectByKind(TransitionUsage) + + + + + <p>The <code>ownedCalculations</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>CalculationUsages</code>.</p> - - - - - - - - - - <p>The CaseUsages being typed by a certain CaseDefinition.</p> + + OCL2.0 + ownedCalculation = ownedUsage->selectByKind(CalculationUsage) + + + + + <p>The <code>ownedConstraints</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ConstraintUsages</code>.</p> - - - - - - - <p>A <code>CaseDefinition</code> is a <code>CalculationDefinition</code> for a process, often involving collecting evidence or data, relative to a subject, possibly involving the collaboration of one or more other actors, producing a result that meets an objective.</p> - - - - <p>The <code>objectiveRequirement</code> of a <code>CaseDefinition</code> is the <code>ownedObjectiveRequirement</code> of its <case>ObjectiveMembership</code>, if any.</p> + + OCL2.0 + ownedConstraint = ownedUsage->selectByKind(ConstraintUsage) + + + + + <p>The <code>ownedRequirements</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>RequirementUsages</code>.</p> - + OCL2.0 - objectiveRequirement = - let objectives: OrderedSet(RequirementUsage) = - featureMembership-> - selectByKind(ObjectiveMembership). - ownedRequirement in - if objectives->isEmpty() then null - else objectives->first().ownedObjectiveRequirement - endif + ownedRequirement = ownedUsage->selectByKind(RequirementUsage) - - - <p>A <code>CaseDefinition</code> must have at most one <code>featureMembership</code> that is a <code>ObjectiveMembership</code>.</p> + + + <p>The <code>ownedConcerns</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ConcernUsages</code>.</p> - + OCL2.0 - featureMembership-> - selectByKind(ObjectiveMembership)-> - size() <= 1 + ownedConcern = ownedUsage->selectByKind(ConcernUsage) - - - <p>The <code>subjectParameter</code> of a <code>CaseDefinition</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p> + + + <p>The <code>ownedCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>CaseUsages</code>.</p> - + OCL2.0 - subjectParameter = - let subjectMems : OrderedSet(SubjectMembership) = - featureMembership->selectByKind(SubjectMembership) in - if subjectMems->isEmpty() then null - else subjectMems->first().ownedSubjectParameter - endif + ownedCase = ownedUsage->selectByKind(CaseUsage) - - - <p>The <code>actorParameters</code> of a <code>CaseDefinition</code> are the <code>ownedActorParameters</code> of the <code>ActorMemberships</code> of the <code>CaseDefinition</code>.</p> + + + <p>The <code>ownedAnalysisCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>AnalysisCaseUsages</code>.</p> - + OCL2.0 - actorParameter = featureMembership-> - selectByKind(ActorMembership). - ownedActorParameter + ownedAnalysisCase = ownedUsage->selectByKind(AnalysisCaseUsage) - - - <p>A <code>CaseDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> + + + <p>The <code>ownedValidationCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ValidationCaseUsages</code>.</p> - - English - featureMembership->selectByKind(SubjectMembership)->size() <= 1 + + OCL2.0 + ownedVerificationCase = ownedUsage->selectByKind(VerificationCaseUsage) - - - <p>The <code>subjectParameter</code> of a <code>CaaseDefinition</code> must be its first <code>input</code>.</p> + + + <p>The <code>ownedUseCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>UseCaseUsages</code>.</p> - + OCL2.0 - input->notEmpty() and input->first() = subjectParameter + ownedUseCase = ownedUsage->selectByKind(UseCaseUsage) - - - <p>A <code>CaseDefinition</code> must directly or indirectly specialize the base <code>CaseDefinition</code> <em><code>Cases::Case></code></em> from the Systems Model Library.</p> + + + <p>The <code>ownedViews</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ViewUsages</code>.</p> - + OCL2.0 - specializesFromLibrary('Cases::Case') + ownedView = ownedUsage->selectByKind(ViewUsage) - - - - <p>The <code>RequirementUsage</code> representing the objective of this <code>CaseDefinition</code>.</p> - + + + <p>The <code>ownedViewpoints</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ViewpointUsages</code>.</p> - - + + OCL2.0 + ownedViewpoint = ownedUsage->selectByKind(ViewpointUsage) + + + + + <p>The <code>ownedRenderings</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>RenderingUsages</code>.</p> + + + OCL2.0 + ownedRendering = ownedUsage->selectByKind(RenderingUsage) + + + + + <p>The <code>ownedMetadata</code> of a <code>Definition</code> are all its <code>ownedMembers</code> that are <code>MetadataUsages</code>.</p> + + + OCL2.0 + ownedMetadata = ownedMember->selectByKind(MetadataUsage) + + + + + <p>If a <code>Definition</code> is a variation, then it must be abstract.</p> + + + OCL2.0 + isVariation implies isAbstract + + + + + + + + <p>Whether this <code>Definition</code> is for a variation point or not. If true, then all the <code>memberships</code> of the <code>Definition</code> must be <code>VariantMemberships</code>.</p> + + - - - <p>The <code>parameter</code> of this <code>CaseDefinition</code> that represents its subject.</p> + + + <p>The <code>Usages</code> which represent the variants of this <code>Definition</code> as a variation point <code>Definition</code>, if <code>isVariation</code> = true. If <code>isVariation = false</code>, the there must be no <code>variants</code>.</p> - - - - + + + - - - <p>The <code>parameters</code> of this <code>CaseDefinition</code> that represent actors involved in the case.</p> + + + <p>The <code>ownedMemberships</code> of this <code>Definition</code> that are <code>VariantMemberships</code>. If <code>isVariation</code> = true, then this must be all <code>ownedMemberships</code> of the <code>Definition</code>. If <code>isVariation</code> = false, then <code>variantMembership</code>must be empty.</p> - - - + + + + + + + <p>The <code>Usages</code> that are <code>features</code> of this <code>Definition</code> (not necessarily owned).</p> + + + + + + + + <p>The <code>usages</code> of this <code>Definition</code> that are <code>directedFeatures</code>.</p> + + + + + - - - - - <p>The CaseDefinitions that have a certain Usage as their <code>subjectParameter</code>.</p> + + + <p>The <code>Usages</code> that are <code>ownedFeatures</code> of this <code>Definition</code>.</p> - - - - - - - - - - <p>The Usage in which the <code>nestedCase</code> is nested.</p> + + + + + + + + <p>The <code>ReferenceUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - - - - - - <p>An <code>EnumerationDefinition</code> is an <code>AttributeDefinition</code> all of whose instances are given by an explicit list of <code>enumeratedValues</code>. This is realized by requiring that the <code>EnumerationDefinition</code> have <code>isVariation = true</code>, with the <code>enumeratedValues</code> being its <code>variants</code>.</p> - - - - <p>An <code>EnumerationDefinition</code> must be a variation.</p> + + + + + + <p>The <code>AttributeUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.<p> - - OCL2.0 - isVariation - - - - - - <p><code>EnumerationUsages</code> of this <code>EnumerationDefinition</code>that have distinct, fixed values. Each <code>enumeratedValue</code> specifies one of the allowed instances of the <code>EnumerationDefinition</code>.</p> + + + + + + <p>The <code>EnumerationUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.<p> - - + + - - - <p>An EnumerationDefinition is considered semantically to be a variation whose allowed variants are its <code>enumerationValues</code>.</p> + + + <p>The <code>OccurrenceUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - + + - - - - <p>An <code>EnumerationUsage</code> is an <code>AttributeUsage</code> whose <code>attributeDefinition</code> is an <code>EnumerationDefinition</code>.</p> - - - - - <p>The single EnumerationDefinition that is the type of this EnumerationUsage.</p> + + + <p>The <code>ItemUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - + + - - - - - <p>The EnumerationDefinition that owns a certain <code>enumeratedValue</code>.</p> + + + <p>The <code>PartUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - - - - - - - <p>The EnumerationUsages that are typed by a certain EnumerationDefinition.</p> + + + + + + <p>The <code>PortUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - - - - - - - <p>The ViewUsage that owns a certain <code>rendering</code>.</p> + + + + + + <p>The <code>ConnectorAsUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>. Note that this list includes <code>BindingConnectorAsUsages</code>, <code>SuccessionAsUsages</code>, and <code>FlowUsages</code> because these are <code>ConnectorAsUsages</code> even though they are not <code>ConnectionUsages</code>.</p> - - - - - - - - <p>The ViewDefinition that owns a certain <code>rendering</code>.</p> + + + + + + <p>The <code>FlowUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - - - - - - - <p>The ViewUsages that have a certain <code>ViewDefinition</code>.</p> + + + + + + <p>The <code>InterfaceUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - - - - - - - <p>The ViewDefinitions that feature a certain ViewUsage.</p> + + + + + + <p>The <code>AllocationUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - - - - - - - - - - - - <p>A <code>RenderingUsage</code> is the usage of a <code>RenderingDefinition</code> to specify the rendering of a specific model view to produce a physical view artifact.</p> - + + + + + + <p>The <code>ActionUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + + + <p>The <code>StateUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + + + <p>The <code>TransitionUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + + + <p>The <code>CalculationUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + + + <p>The <code>ConstraintUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - - - <p>A <code>RenderingUsage</code> must directly or indirectly specialize the base <code>RenderingUsage</code> <code><em>Views::renderings</em></code> from the Systems Model Library.</p> - - OCL2.0 - specializesFromLibrary('Views::renderings') - - - - - <p>A <code>RenderingUsage</code> whose <code>owningType</code> is a <code>RenderingDefinition</code> or <code>RenderingUsage</code> must directly or indirectly specialize the <code>RenderingUsage</code> <code><em>Views::Rendering::subrenderings</em></code> from the Systems Model Library.</p> + + + + + + <p>The <code>RequirementUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(RenderingDefinition) or - owningType.oclIsKindOf(RenderingUsage)) implies - specializesFromLibrary('Views::Rendering::subrenderings') - - - - - <p>A <code>RenderingUsage</code> whose <code>owningFeatureMembership</code> is a <code>ViewRenderingMembership</code> must redefine the <code>RenderingUsage</code> <code><em>Views::View::viewRendering</em></code>.</p> + + + + + + <p>The <code>ConcernUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - OCL2.0 - owningFeatureMembership <> null and -owningFeatureMembership.oclIsKindOf(ViewRenderingMembership) implies - redefinesFromLibrary('Views::View::viewRendering') - - - - - - <p>The <code>RenderingDefinition</code> that is the <code>definition</code> of this <code>RenderingUsage</code>.</p> + + + + + + <p>The code>CaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - + + + + + + <p>The <code>AnalysisCaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + + + <p>The <code>VerificationCaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + + + <p>The <code>UseCaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + + + <p>The <code>ViewUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + + + <p>The <code>ViewpointUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + + + <p>The <code>RenderingUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + + + <p>The <code>MetadataUsages</code> that are <code>ownedMembers</code> of this <code>Definition</code>.</p> + + + - - - <p>A <code>NamespaceExpose</code> is an <code>Expose</code> <code>Relationship</code> that exposes the <code>Memberships</code> of a specific <code>importedNamespace</code> and, if <code>isRecursive = true</code>, additional <code>Memberships</code> recursively.</p> - - - - - + + + + <p>The Definition that owns the <code>ownedAttribute</code>.</p> + + + + - - - - + + + + <p>The Definition that owns the <code>ownedEnumeration</code>.</p> + + + - - - - <p>The RenderingDefinitions that feature a certain <code>rendering</code>.</p> + + + + <p>The Definition that owns the <code>ownedReference</code>.</p> - - + + - - - <p>A <code>ViewUsage</code> is a usage of a <code>ViewDefinition</code> to specify the generation of a view of the <code>members</code> of a collection of <code>exposedNamespaces</code>. The <code>ViewUsage</code> can satisfy more <code>viewpoints</code> than its definition, and it can specialize the <code>viewRendering</code> specified by its definition.<p> - - - - <p>The <code>exposedElements</code> of a <code>ViewUsage</code> are those <code>memberElements</code> of the imported <code>Memberships</code> from all the <code>Expose</code> <code>Relationships</code> for which the <code>includeAsExposed</code> operation returns true.</p> + + + + <p>The Definition that owns the <code>ownedPort</code>.</p> - - OCL2.0 - exposedElement = ownedImport->selectByKind(Expose). - importedMemberships(Set{}).memberElement-> - select(elm | includeAsExposed(elm))-> - asOrderedSet() - - - - - <p>The <code>satisfiedViewpoints</code> of a <code>ViewUsage</code> are its <code>ownedRequirements</code> that are composite <code>ViewpointUsages</code>. + + + + + + + + <p>The Definition that owns the <code>ownedPart</code>.</p> - + + + + + + + + <p>The <code>Usage</code> that owns the <code>nestedFlow</code>.</p> + + + + + + + + <p>A <code>ReferenceUsage</code> is a <code>Usage</code> that specifies a non-compositional (<code>isComposite = false</code>) reference to something. The <code>definition</code> of a <code>ReferenceUsage</code> can be any kind of <code>Classifier</code>, with the default being the top-level <code>Classifier</code> <code><em>Base::Anything</em></code> from the Kernel Semantic Library. This allows the specification of a generic reference without distinguishing if the thing referenced is an attribute value, item, action, etc.</p> + + + + <p>A <code>ReferenceUsage</code> is always referential.</p> + + OCL2.0 - satisfiedViewpoint = ownedRequirement-> - selectByKind(ViewpointUsage)-> - select(isComposite) + isReference - - - <p>The <code>viewConditions</code> of a <code>ViewUsage</code> are the <code>conditions</code> of its owned <code>ElementFilterMemberships</code>.</p> + + + + <p>Always <code>true</code> for a <code>ReferenceUsage</code>.</code> - - OCL2.0 - viewCondition = ownedMembership-> - selectByKind(ElementFilterMembership). - condition - - - - - <p>The <code>viewRendering</code> of a <code>ViewUsage</code> is the <code>referencedRendering</code> of its owned <code>ViewRenderingMembership<code>, if any.</p> - - - OCL2.0 - viewRendering = - let renderings: OrderedSet(ViewRenderingMembership) = - featureMembership->selectByKind(ViewRenderingMembership) in - if renderings->isEmpty() then null - else renderings->first().referencedRendering - endif - - - - - <p>A <code>ViewUsage</code> must have at most one <code>ViewRenderingMembership</code>.</p> - - - OCL2.0 - featureMembership-> - selectByKind(ViewRenderingMembership)-> - size() <= 1 - - - - - <p>A <code>ViewUsage</code> must directly or indirectly specialize the base <code>ViewUsage</code> <code><em>Views::views</em></code> from the Systems Model Library.</p> + + + + + + <p>If this <code>ReferenceUsage</code> is the <em><code>payload</code></em> <code>parameter</code> of a <code>TransitionUsage</code>, then its naming <code>Feature</code> is the <code>payloadParameter</code> of the <code>triggerAction</code> of that <code>TransitionUsage</code> (if any).</p> - - OCL2.0 - specializesFromLibrary('Views::views') - - - - - <p>A <code>ViewUsage</code> whose <code>owningType</code> is a <code>ViewDefinition</code> or <code>ViewUsage</code> must specialize the <code>ViewUsage</code> <code><em>Views::View::subviews</em></code> from the Systems Library Model.</p> + + + OCL2.0 + if owningType <> null and owningType.oclIsKindOf(TransitionUsage) and + owningType.oclAsType(TransitionUsage).inputParameter(2) = self then + owningType.oclAsType(TransitionUsage).triggerPayloadParameter() +else self.oclAsType(Usage).namingFeature() +endif + + + + + + + + + + + + + <p>The Definition that owns a certain <code>ownedVerificationCase</code>.</p> - - OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(ViewDefinition) or - owningType.oclIsKindOf(ViewUsage)) implies - specializesFromLibrary('Views::View::subviews') - - - - - - <p>The <code>ViewDefinition</code> that is the <code>definition</code> of this <code>ViewUsage</code>.</p> + + + + + + + + <p>The Definition that owns the <code>ownedMetadata</code>.</p> - - - - - - <p>The <code>nestedRequirements</code> of this <code>ViewUsage</code> that are <code>ViewpointUsages</code> for (additional) viewpoints satisfied by the <code>ViewUsage</code>.</p> + + + + + + + + <p>The Usage in which the <code>nestedRequirement</code> is nested.</p> - - - - - - <p>The <code>Elements</code> that are exposed by this <code>ViewUsage</code>, which are those <code>memberElements</code> of the imported <code>Memberships</code> from all the <code>Expose</code> <code>Relationships</code> that meet all the owned and inherited <code>viewConditions</code>.</p> + + + + + + + + + <p>The Usage that owns a certain <code>nestedRendering</code>.</p> - - - - - - - - <p>The <code>RenderingUsage</code> to be used to render views defined by this <code>ViewUsage</code>, which is the <code>referencedRendering</code> of the <code>ViewRenderingMembership</code> of the <code>ViewUsage</code>.<p> + + + + + + + + <p>The Definition that owns the <code>ownedInterface</code>.</p> - - - - - - <p>The <code>Expressions</code> related to this <code>ViewUsage</code> by <code>ElementFilterMemberships</code>, which specify conditions on <code>Elements</code> to be rendered in a view.</p> + + + + + + + + <p>The Usage in which the <code>nestedItem</code> is nested.</p> - - - - - - - - <p>Determine whether the given <code>element</code> meets all the owned and inherited <code>viewConditions</code>.</p> + + + + + + + + <p>The Usage in which the <code>nestedAttribute</code> is nested.</p> - - - OCL2.0 - let metadataFeatures: Sequence(AnnotatingElement) = - element.ownedAnnotation.annotatingElement-> - select(oclIsKindOf(MetadataFeature)) in -self.membership->selectByKind(ElementFilterMembership). - condition->forAll(cond | - metadataFeatures->exists(elem | - cond.checkCondition(elem))) - - - - - - - - - + + + - - - - <p>A ViewUsage exposing a certain <code>exposedElement</code>.</p> + + + + <p>The Definition that owns the <code>ownedOccurrence</code>.</p> - - - + + - - - - <p>The ViewDefinition that owns a certain <code>viewCondition</code>.</p> + + + + <p>The Usage in which the <code>nestedUsage</code> is nested.</p> - - - + + - - - <p>A <code>ViewpointUsage</code> is a <code>Usage</code> of a <code>ViewpointDefinition</code>.</p> + + + <p>A <code>Usage</code> is a usage of a <code>Definition</code>.</p> - +<p>A <code>Usage</code> may have <code>nestedUsages</code> that model <code>features</code> that apply in the context of the <code>owningUsage</code>. A <code>Usage</code> may also have <code>Definitions</code> nested in it, but this has no semantic significance, other than the nested scoping resulting from the <code>Usage</code> being considered as a <code>Namespace</code> for any nested <code>Definitions</code>.</p> + +<p>However, if a <code>Usage</code> has <code>isVariation = true</code>, then it represents a <em>variation point</em> <code>Usage</code>. In this case, all of its <code>members</code> must be <code>variant</code> <code>Usages</code>, related to the <code>Usage</code> by <code>VariantMembership</code> <code>Relationships</code>. Rather than being <code>features</code> of the <code>Usage</code>, <code>variant</code> <code>Usages</code> model different concrete alternatives that can be chosen to fill in for the variation point <code>Usage</code>.</p> - - - <p>The <code>viewpointStakeholders</code> of a <code>ViewpointUsage</code> are the <code>ownedStakeholderParameters</code> of all <code>featureMemberships</code> that are <code>StakeholderMemberships</code>.</p> + + + <p>The <code>variants</code> of a <code>Usage</code> are the <code>ownedVariantUsages</code> of its <code>variantMemberships</code>.</p> - + OCL2.0 - viewpointStakeholder = framedConcern.featureMemberhsip-> - selectByKind(StakeholderMembership). - ownedStakeholderParameter + variant = variantMembership.ownedVariantUsage - - - <p>A <code>ViewpointUsage</code> must directly or indirectly specialize the base <code>ViewpointUsage</code> <code><em>Views::viewpoints</em></code> from the Systems Model Library.</p> + + + <p>The <code>variantMemberships</code> of a <code>Usage</code> are those <code>ownedMemberships</code> that are <code>VariantMemberships</code>.</p> - + OCL2.0 - specializesFromLibrary('Views::viewpoints') + variantMembership = ownedMembership->selectByKind(VariantMembership) - - - <p>A composite <code>ViewpointUsage</code> whose <code>owningType</code> is a <code>ViewDefinition</code> or <code>ViewUsage</code> must directly or indirectly specialize the <code>ViewpointUsage</code> <code><em>Views::View::viewpointSatisfactions</em></code> from the Systems Model Library.</p> + + + <p>If a <code>Usage</code> is a variation, then it must not have any <code>ownedFeatureMemberships</code>.</p> - + OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(ViewDefinition) or - owningType.oclIsKindOf(ViewUsage)) implies - specializesFromLibrary('Views::View::viewpointSatisfactions') + isVariation implies ownedFeatureMembership->isEmpty() - - - - <p>The <code>ViewpointDefinition</code> that is the <code>definition</code> of this <code>ViewpointUsage<code>.</p> + + + <p>A <code>Usage</code> is referential if it is not composite.</p> - - - - - - <p>The <code>PartUsages</code> that identify the stakeholders with concerns framed by this <code>ViewpointUsage</code>, which are the owned and inherited <code>stakeholderParameters</code> of the <code>framedConcerns</code> of this <code>ViewpointUsage</code>.</p> + + OCL2.0 + isReference = not isComposite + + + + + <p>If a <code>Usage</code> has an <code>owningVariationUsage</code>, then it must directly or indirectly specialize that <code>Usage</code>.</p> - - - - - - - <p>A <code>MembershipExpose</code> is an <code>Expose</code> <code.Relationship</code> that exposes a specific <code>importedMembership</code> and, if <code>isRecursive = true</code>, additional <code>Memberships</code> recursively.</p> - - - - - - - - - - <p>The ViewDefinition that owns a certain <code>satisfiedViewpoint</code>.</p> + + OCL2.0 + owningVariationUsage <> null implies + specializes(owningVariationUsage) + + + + + <p>A variation <code>Usage</code> may not specialize any variation <code>Definition</code> or <code>Usage</code>.</p> - - - - - - - <p>A <code>RenderingDefinition</code> is a <code>PartDefinition</code> that defines a specific rendering of the content of a model view (e.g., symbols, style, layout, etc.).</p> - - - - <p>The <code>renderings</code> of a <code>RenderingDefinition</code> are all its <code>usages</code> that are <code>RenderingUsages</code>.</p> + + OCL2.0 + isVariation implies + not ownedSpecialization.specific->exists( + oclIsKindOf(Definition) and + oclAsType(Definition).isVariation or + oclIsKindOf(Usage) and + oclAsType(Usage).isVariation) + + + + + <p>If a <code>Usage</code> has an <code>owningVariationDefinition</code>, then it must directly or indirectly specialize that <code>Definition</code>.</p> - + OCL2.0 - rendering = usages->selectByKind(RenderingUsage) + owningVariationDefinition <> null implies + specializes(owningVariationDefinition) - - - <p>A <code>RenderingDefinition</code> must directly or indirectly specialize the base <code>RenderingDefinition</code> <code><em>Views::Rendering</em></code> from the Systems Model Library.</p> + + + <p>The <code>directedUsages</code> of a <code>Usage</code> are all its <code>directedFeatures</code> that are <code>Usages</code>.</p> - + OCL2.0 - specializesFromLibrary('Views::Rendering') + directedUsage = directedFeature->selectByKind(Usage) - - - - <p>The <code>usages</code> of a <code>RenderingDefinition</code> that are <code>RenderingUsages</code>.</p> + + + <p>The <code>ownedActions</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ActionUsages</code>.</p> - - - - - - - <p>An <code>Expose</code> is an <code>Import</code> of <code>Memberships</code> into a <code>ViewUsage</code> that provide the <code>Elements</code> to be included in a view. Visibility is always ignored for an <code>Expose</code> (i.e., <code>isImportAll = true</code>).</p> - - - - <p>An <code>Expose</code> always imports all <code>Elements</code>, regardless of visibility.</p> + + OCL2.0 + nestedAction = nestedUsage->selectByKind(ActionUsage) + + + + + <p>The <code>ownedAllocations</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>AllocationUsages</code>.</p> - + OCL2.0 - isImportAll + nestedAllocation = nestedUsage->selectByKind(AllocationUsage) - - - <p>The <code>importOwningNamespace</code> of an <code>Expose</code> must be a <code>ViewUsage</code>.</p> + + + <p>The <code>ownedAnalysisCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>AnalysisCaseUsages</code>.</p> - + OCL2.0 - importOwningNamespace.oclIsType(ViewUsage) + nestedAnalysisCase = nestedUsage->selectByKind(AnalysisCaseUsage) - - - <p>An <code>Expose</code> always has <code>protected</code> visibility.</p> + + + <p>The <code>ownedAttributes</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>AttributeUsages</code>.</p> - + OCL2.0 - visibility = VisibilityKind::protected + nestedAttribute = nestedUsage->selectByKind(AttributeUsage) - - - - - - <p>An <code>Expose</code> always has <code>protected</code> visibility.</p> + + + <p>The <code>ownedCalculations</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>CalculationUsages</code>.</p> - - - - - - - - - <p>An <code>Expose</code> always imports all <code>Elements</code>, regardless of visibility (<code>isImportAll = true</code>).</p> + + OCL2.0 + nestedCalculation = nestedUsage->selectByKind(CalculationUsage) + + + + + <p>The <code>ownedCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>CaseUsages</code>.</p> - - - - - - - - <p>A <code>ViewDefinition</code> is a <code>PartDefinition</code> that specifies how a view artifact is constructed to satisfy a <code>viewpoint</code>. It specifies a <code>viewConditions</code> to define the model content to be presented and a <code>viewRendering</code> to define how the model content is presented.</p> - - - - <p>The <code>views</code> of a <code>ViewDefinition</code> are all its <code>usages</code> that are <code>ViewUsages</code>.</p> + + OCL2.0 + nestedCase = nestedUsage->selectByKind(CaseUsage) + + + + + <p>The <code>ownedConcerns</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ConcernUsages</code>.</p> - + OCL2.0 - view = usage->selectByKind(ViewUsage) + nestedConcern = nestedUsage->selectByKind(ConcernUsage) - - - <p>The <code>satisfiedViewpoints</code> of a <code>ViewDefinition</code> are its <code>ownedRequirements</code> that are composite <code>ViewpointUsages</code>. + + + <p>The <code>ownedConnections</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ConnectorAsUsages</code>.</p> - + OCL2.0 - satisfiedViewpoint = ownedRequirement-> - selectByKind(ViewpointUsage)-> - select(isComposite) + nestedConnection = nestedUsage->selectByKind(ConnectorAsUsage) - - - <p>The <code>viewRendering</code> of a <code>ViewDefinition</code> is the <code>referencedRendering</code> of its owned <code>ViewRenderingMembership<code>, if any.</p> + + + <p>The <code>ownedConstraints</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ConstraintUsages</code>.</p> - + OCL2.0 - viewRendering = - let renderings: OrderedSet(ViewRenderingMembership) = - featureMembership->selectByKind(ViewRenderingMembership) in - if renderings->isEmpty() then null - else renderings->first().referencedRendering - endif + nestedConstraint = nestedUsage->selectByKind(ConstraintUsage) - - - <p>The <code>viewConditions</code> of a <code>ViewDefinition</code> are the <code>conditions</code> of its owned <code>ElementFilterMemberships</code>.</p> + + + <p>The <code>ownedEnumerations</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>EnumerationUsages</code>.</p> - + OCL2.0 - viewCondition = ownedMembership-> - selectByKind(ElementFilterMembership). - condition + ownedNested = nestedUsage->selectByKind(EnumerationUsage) - - - <p>A <code>ViewDefinition</code> must have at most one <code>ViewRenderingMembership</code>.</p> + + + <p>The <code>ownedFlows</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>FlowConnectionUsages</code>.</p> - + OCL2.0 - featureMembership-> - selectByKind(ViewRenderingMembership)-> - size() <= 1 + nestedFlow = nestedUsage->selectByKind(FlowUsage) - - - </p>A <code>ViewDefinition</code> must directly or indirectly specialize the base <code>ViewDefinition</code> <code><em>Views::View</em></code> from the Systems Model Library.</p> + + + <p>The <code>ownedInterfaces</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>InterfaceUsages</code>.</p> - + OCL2.0 - specializesFromLibrary('Views::View') + nestedInterface = nestedUsage->selectByKind(ReferenceUsage) - - - - <p>The <code>usages</code> of this <code>ViewDefinition</code> that are <code>ViewUsages</code>.</p> + + + <p>The <code>ownedItems</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ItemUsages</code>.</p> - - - - - - <p>The composite <code>ownedRequirements</code> of this <code>ViewDefinition</code> that are <code>ViewpointUsages</code> for viewpoints satisfied by the <code>ViewDefinition</code>.</p> - - - - - - - <p>The <code>RenderingUsage</code> to be used to render views defined by this <code>ViewDefinition</code>, which is the <code>referencedRendering</code> of the <code>ViewRenderingMembership</code> of the <code>ViewDefinition</code>.<p> - - - - - - - <p>The <code>Expressions</code> related to this <code>ViewDefinition</code> by <code>ElementFilterMemberships</code>, which specify conditions on <code>Elements</code> to be rendered in a view.</p> - - - - - - - - - - - p>The ViewUsage that owns a certain <code>satisfiedViewpoint</code>.</p> - - - - - - - - - <p>The ViewUsage that owns a certain <code>viewCondition</code>.</p> + + OCL2.0 + nestedItem = nestedUsage->selectByKind(ItemUsage) + + + + + <p>The <code>ownedMetadata</code> of a <code>Usage</code> are all its <code>ownedMembers</code> that are <code>MetadataUsages</code>.</p> - - - - - - - - - <p>The ViewpointDefinition that has a certain <code>viewpointStakeholder</code>.</p> + + OCL2.0 + nestedMetadata = nestedUsage->selectByKind(MetadataUsage) + + + + + <p>The <code>ownedOccurrences</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>OccurrenceUsages</code>.</p> - - - - - - - <p>A <code>ViewRenderingMembership</code> is a <coed>FeatureMembership</code> that identifies the <code>viewRendering</code> of a <code>ViewDefinition</code> or <code>ViewUsage</code>.</p> - - - - <p>The <code>referencedRendering</code> of a <code>ViewRenderingMembership</code> is the the <code>featureTarget</code> of the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code> (which must be a <code>RenderingUsage</code>) of the <code>ownedRendering</code>, if there is one, and, otherwise, the <code>ownedRendering</code> itself.</p> + + OCL2.0 + nestedOccurrence = nestedUsage->selectByKind(OccurrenceUsage) + + + + + <p>The <code>ownedParts</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>PartUsages</code>.</p> - + OCL2.0 - referencedRendering = - let referencedFeature : Feature = - ownedRendering.referencedFeatureTarget() in - if referencedFeature = null then ownedRendering - else if referencedFeature.oclIsKindOf(RenderingUsage) then - refrencedFeature.oclAsType(RenderingUsage) - else null - endif endif + nestedPart = nestedUsage->selectByKind(PartUsage) - - - <p>The <code>owningType</code> of a <code>ViewRenderingMembership</code> must be a <code>ViewDefinition</code> or a <code>ViewUsage</code>.</p> + + + <p>The <code>ownedPorts</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>PortUsages</code>.</p> - + OCL2.0 - owningType.oclIsKindOf(ViewDefinition) or -owningType.oclIsKindOf(ViewUsage) + nestedPort = nestedUsage->selectByKind(PortUsage) - - - - - - <p>The owned <code>RenderingUsage</code> that is either itself the <code>referencedRendering</code> or subsets the <code>referencedRendering</code>. + + + <p>The <code>ownedReferences</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ReferenceUsages</code>.</p> - - - - - - - <p> The <code>RenderingUsage</code> that is referenced through this <code>ViewRenderingMembership</code>. It is the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code> for the <code>ownedRendering</code>, if there is one, and, otherwise, the <code>ownedRendering</code> itself.</p> + + OCL2.0 + nestedReference = nestedUsage->selectByKind(ReferenceUsage) + + + + + <p>The <code>ownedRenderings</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>RenderingUsages</code>.</p> - - - - - - - - <p>The ViewpointUsage that has a certain <code>viewpointStakeholder</code>.</p> + + OCL2.0 + nestedRendering = nestedUsage->selectByKind(RenderingUsage) + + + + + <p>The <code>ownedRequirements</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>RequirementUsages</code>.</p> - - - - - - - - <p>The RenderingUsages defined by a certain <code>renderingDefinition</code>.</p> + + OCL2.0 + nestedRequirement = nestedUsage->selectByKind(RequirementUsage) + + + + + <p>The <code>ownedStates</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>StateUsages</code>.</p> - - - - - - - <p>A <code>ViewpointDefinition</code> is a <code>RequirementDefinition</code> that specifies one or more stakeholder concerns that are to be satisfied by creating a view of a model.</p> - - - - <p>The <code>viewpointStakeholders</code> of a <code>ViewpointDefinition</code> are the <code>ownedStakeholderParameters</code> of all <code>featureMemberships</code> that are <code>StakeholderMemberships</code>.</p> + + OCL2.0 + nestedState = nestedUsage->selectByKind(StateUsage) + + + + + <p>The <code>ownedTransitions</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>TransitionUsages</code>.</p> - + OCL2.0 - viewpointStakeholder = framedConcern.featureMemberhsip-> - selectByKind(StakeholderMembership). - ownedStakeholderParameter + nestedTransition = nestedUsage->selectByKind(TransitionUsage) - - - <p>A <code>ViewpointDefinition</code> must directly or indirectly specialize the base <code>ViewpointDefinition</code> <code><em>Views::Viewpoint</em></code> from the Systems Model Library.</p> + + + <p>The <code>ownedUsages</code> of a <code>Usage</code> are all its <code>ownedFeatures</code> that are <code>Usages</code>.</p> - + OCL2.0 - specializesFromLibrary('Views::Viewpoint') + nestedUsage = ownedFeature->selectByKind(Usage) - - - - <p>The <code>PartUsages</code> that identify the stakeholders with concerns framed by this <code>ViewpointDefinition</code>, which are the owned and inherited <code>stakeholderParameters</code> of the <code>framedConcerns</code> of this <code>ViewpointDefinition</code>.</p> + + + <p>The <code>ownedUseCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>UseCaseUsages</code>.</p> - - - - - - - - - - - - - <p>An <code>AttributeUsage</code> is a <code>Usage</code> whose type is a <code>DataType</code>. Nominally, if the type is an <code>AttributeDefinition</code>, an <code>AttributeUsage</code> is a usage of a <code>AttributeDefinition</code> to represent the value of some system quality or characteristic. However, other kinds of kernel <code>DataTypes</code> are also allowed, to permit use of <code>DataTypes</code> from the Kernel Model Libraries. An <code>AttributeUsage</code> itself as well as all its nested <code>features</code> must be referential (non-composite).</p> - -<p>An <code>AttributeUsage</code> must specialize, directly or indirectly, the base <code>Feature</code> <code><em>Base::dataValues</em></code> from the Kernel Semantic Library.</p> - - - - <p>An <code>AttributeUsage</code> is always referential.</p> + + OCL2.0 + nestedUseCase = nestedUsage->selectByKind(UseCaseUsage) + + + + + <p>The <code>ownedValidationCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ValidationCaseUsages</code>.</p> - + OCL2.0 - isReference + nestedVerificationCase = nestedUsage->selectByKind(VerificationCaseUsage) - - - <p>All <code>features</code> of an <code>AttributeUsage</code> must be non-composite.</p> + + + <p>The <code>ownedViews</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ViewUsages</code>.</p> - + OCL2.0 - feature->forAll(not isComposite) + nestedView = nestedUsage->selectByKind(ViewUsage) - - - <p>An <code>AttributeUsage</code> must directly or indirectly specialize <code><em>Base::dataValues</em></code> from the Kernel Semantic Library.</p> + + + <p>The <code>ownedViewpoints</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ViewpointUsages</code>.</p> - + OCL2.0 - specializesFromLibrary('Base::dataValues') + nestedViewpoint = nestedUsage->selectByKind(ViewpointUsage) - - - - <p>The <code>DataTypes</code> that are the types of this <code>AttributeUsage</code>. Nominally, these are <code>AttributeDefinitions</code>, but other kinds of kernel <code>DataTypes</code> are also allowed, to permit use of <code>DataTypes</code> from the Kernel Model Libraries.</p> + + + <p>The <code>usages</code> of a <code>Usage</code> are all its <code>features</code> that are <code>Usages</code>.</p> - - - - - - - <p>Always true for an <code>AttributeUsage</code>.</p> - - - - - - - - - <p>The AttributeUsages that are typed by a certain DataType.</p> - - - - - - - - <p>An <code>AttributeDefinition</code> is a <code>Definition</code> and a <code>DataType</code> of information about a quality or characteristic of a system or part of a system that has no independent identity other than its value. All <code>features</code> of an <code>AttributeDefinition</code> must be referential (non-composite).</p> - -<p>As a <code>DataType</code>, an <code>AttributeDefinition</code> must specialize, directly or indirectly, the base <code>DataType</code> <code><em>Base::DataValue</em></code> from the Kernel Semantic Library.</p> - - - - <p>All <code>features</code> of an <code>AttributeDefinition</code> must be non-composite.</p> - - + OCL2.0 - feature->forAll(not isComposite) + usage = feature->selectByKind(Usage) - - - - - - - - <p>An <code>ItemDefinition</code> is an <code>OccurrenceDefinition</code> of the <code>Structure</code> of things that may themselves be systems or parts of systems, but may also be things that are acted on by a system or parts of a system, but which do not necessarily perform actions themselves. This includes items that can be exchanged between parts of a system, such as water or electrical signals.</p> - - - - - <p>An <code>ItemDefinition</code> must directly or indirectly specialize the Systems Library Model <code>ItemDefinition</code> <em><code>Items::Item</code>.</p> + + + <p>A <code>Usage</code> that is directed, an end feature or has no <code>featuringTypes</code> must be referential.</p> - + OCL2.0 - specializesFromLibrary('Items::Item') + direction <> null or isEnd or featuringType->isEmpty() implies + isReference - - - - - - - - <p>An <code>ItemUsage</code> is a <code>ItemUsage</code> whose <code>definition</code> is a <code>Structure</code>. Nominally, if the <code>definition</code> is an <code>ItemDefinition</code>, an <code>ItemUsage</code> is a <code>ItemUsage</code> of that <code>ItemDefinition</code> within a system. However, other kinds of Kernel <code>Structures</code> are also allowed, to permit use of <code>Structures</code> from the Kernel Model Libraries.</p> - - - - <p>The <code>itemDefinitions</code> of an <code>ItemUsage</code> are those <code>occurrenceDefinitions</code> that are <code>Structures</code>.</p> + + + <p>If a <code>Usage</code> is a variation, then it must be abstract.</p> - + OCL2.0 - itemDefinition = occurrenceDefinition->selectByKind(Structure) + isVariation implies isAbstract - - - <p>An <code>ItemUsage</code> must directly or indirectly specialize the Systems Model Library <code>ItemUsage</code> <em><code>items</code></em>.</p> + + + <p>A <code>Usage</code> <code>mayTimeVary</code> if and only if all of the following are true</p> +<ul> + <li>It has an <code>owningType</code> that specializes <em><code>Occurrences::Occurrence</code></em> (from the Kernel Semantic Library).</li> + <li>It is not a portion.</li> + <li>It does not specialize <em><code>Links::SelfLink</code></em> or <em><code>Occurrences::HappensLink</code></em> (from the Kernel Semantic Library).</li> + <li>If <code>isComposite = true</code>, it does not specialize <em><code>Actions::Action</code></em> (from the Systems Model Library). +</li></ul> - + OCL2.0 - specializesFromLibrary('Items::items') + mayTimeVary = + owningType <> null and + owningType.specializesFromLibrary('Occurrences::Occurrence') and + not ( + isPortion or + specializesFromLibrary('Links::SelfLink') or + specializesFromLibrary('Occurrences::HappensLink') or + isComposite and specializesFromLibrary('Actions::Action') + ) - - + + + <p>If a <code>Usage</code> has an <code>owningVariationUsage</code>, then it must have the same <code>featuringTypes</code> as that <code>Usage</code>.</p> + + OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(ItemDefinition) or - owningType.oclIsKindOf(ItemUsage)) implies - specializesFromLibrary('Items::Item::subitem') + owningVariationUsage <> null implies + featuringType->asSet() = owningVariationUsage.featuringType->asSet() - - - - <p>The Structures that are the <code>definitions</code> of this ItemUsage. Nominally, these are ItemDefinitions, but other kinds of Kernel Structures are also allowed, to permit use of Structures from the Kernel Library.</p> + + + + + + <p>Whether this <code>Usage</code> may be time varying (that is, whether it is featured by the snapshots of its <code>owningType</code>, rather than being featured by the <code>owningType</code> itself). However, if <code>isConstant</code> is also true, then the value of the <code>Usage</code> is nevertheless constant over the entire duration of an instance of its <code>owningType</code> (that is, it has the same value on all snapshots).</p> + +<p>The property <code>mayTimeVary</code> redefines the KerML property <code>Feature::isVariable</code>, making it derived. The property <code>isConstant</code> is inherited from <code>Feature</code>.</p> - - - + + - - - - - - <p>The ConjugatedPortTypings whose <code>conjugatedPortDefinition</code> a certain ConjugatedPortDefinition.</p> + + + <p>Whether this <code>Usage</code> is a referential <code>Usage</code>, that is, it has <code>isComposite = false</code>.<p> - - - - - - - - - <p>The ConjugatedPortTypings whose <code>portDefinition</code> is a certain PortDefinition.</p> + + + + + <p>The <code>Usages</code> which represent the variants of this <code>Usage</code> as a variation point <code>Usage</code>, if <code>isVariation = true</code>. If <code>isVariation = false</code>, then there must be no <code>variants</code>.</p> - - - - - - - - - <p>The PortConjugation that relates a certain PortDefinition to its ConjugatedPortDefinition (if any).</p> + + + + + + + <p>The <code>ownedMemberships</code> of this <code>Usage</code> that are <code>VariantMemberships</code>. If <code>isVariation = true</code>, then this must be all <code>memberships</code> of the <code>Usage</code>. If <code>isVariation = false</code>, then <code>variantMembership</code>must be empty.</p> - - - - - - - - <p>A <code>ConjugatedPortDefinition</code> is a <code>PortDefinition</code> that is a <code>PortDefinition</code> of its original <code>PortDefinition</code>. That is, a <code>ConjugatedPortDefinition</code> inherits all the <code>features</code> of the original <code>PortDefinition</code>, but input <code>flows</code> of the original <code>PortDefinition</code> become outputs on the <code>ConjugatedPortDefinition</code> and output <code>flows</code> of the original <code>PortDefinition</code> become inputs on the <code>ConjugatedPortDefinition</code>. Every <code>PortDefinition</code> (that is not itself a <code><code>ConjugatedPortDefinition</code></code>) has exactly one corresponding <code>ConjugatedPortDefinition</code>, whose effective name is the name of the <code>originalPortDefinition</code>, with the character <code>~</code> prepended.</p> - - - - <p>The <code>originalPortDefinition</code> of the <code>ownedPortConjugator</code> of a <code>ConjugatedPortDefinition</code> must be the <code>originalPortDefinition</code> of the <code>ConjugatedPortDefinition</code>.</p> + + + + + + + <p>The <code>Definition</code> that owns this <code>Usage</code> (if any).</p> - - OCL2.0 - ownedPortConjugator.originalPortDefinition = originalPortDefinition - - - - - <p>A <code>ConjugatedPortDefinition</code> must not itself have a <code>conjugatedPortDefinition</code>. + + + + + + + + <p>The <code>Usage</code> in which this <code>Usage</code> is nested (if any).</p> - - OCL2.0 - conjugatedPortDefinition = null - - - - - - <p>The original <code>PortDefinition</code> for this <code>ConjugatedPortDefinition</code>, which is the <code>owningNamespace</code> of the <code>ConjugatedPortDefinition</code>.</p> + + + + + + + <p>The <code>Classifiers</code> that are the types of this <code>Usage</code>. Nominally, these are <code>Definitions</code>, but other kinds of Kernel <code>Classifiers</code> are also allowed, to permit use of <code>Classifiers</code> from the Kernel Model Libraries.</p> - - - + + + + - - - <p>The <code>PortConjugation</code> that is the <code>ownedConjugator</code> of this <code>ConjugatedPortDefinition</code>, linking it to its <code>originalPortDefinition</code>.</p> + + + <p>The <code>Usages</code> that are <code>features</code> of this <code>Usage</code> (not necessarily owned).</p> - - - + + + + + + - - - <p>If the <code>name</code> of the <code>originalPortDefinition</code> is non-empty, then return that with the character <code>~</code> prepended.</p> + + + <p>The <code>usages</code> of this <code>Usage</code> that are <code>directedFeatures</code>.</p> + - - - OCL2.0 - let originalName : String = originalPortDefinition.name in -if originalName = null then null -else '~' + originalName -endif - - - - - - - - - - - - - <p>A <code>ConjugatedPortTyping</code> is a <code>FeatureTyping</code> whose <code>type</code> is a <code>ConjugatedPortDefinition</code>. (This relationship is intended to be an abstract-syntax marker for a special surface notation for conjugated typing of ports.)</p> - - - - <p>The <code>portDefinition</code> of a <code>ConjugatedPortTyping</code> is the <code>originalPortDefinition</code> of the <code>conjugatedPortDefinition</code> of the <code>ConjugatedPortTyping</code>.</p> + + + + + + + + <p>The <code>Usages</code> that are <code>ownedFeatures</code> of this <code>Usage</code>.</p> - - OCL2.0 - portDefinition = conjugatedPortDefinition.originalPortDefinition - - - - - - - - <p>The <code>originalPortDefinition</code> of the <code>conjugatedPortDefinition</code> of this <code>ConjugatedPortTyping</code>.</p> + + + + + + + + <p>The <code>ReferenceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - + + - - - <p>The <code>type</code> of this <code>ConjugatedPortTyping</code> considered as a <code>FeatureTyping</code>, which must be a <code>ConjugatedPortDefinition</code>.</p> + + + <p>The code>AttributeUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - + + - - - - <p>A <code>PortUsage</code> is a usage of a <code>PortDefinition</code>. A <code>PortUsage</code> itself as well as all its <code>nestedUsages</code> must be referential (non-composite).</p> - - - - <p>The <code>nestedUsages</code> of a <code>PortUsage</code> that are not themselves <code>PortUsages</code> must not be composite.</p> + + + <p>The code>EnumerationUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.<p> - - OCL2.0 - nestedUsage-> - reject(oclIsKindOf(PortUsage))-> - forAll(not isComposite) - - - - - <p>A <code>PortUsage</code> must directly or indirectly specialize the <code>PortUsage</code> <em><code>Ports::ports</code></em> from the Systems Model Library.</p> + + + + + + <p>The <code>OccurrenceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - OCL2.0 - specializesFromLibrary('Ports::ports') - - - - - <p>A composite <code>PortUsage</code> with an <code>owningType</code> that is a <code>PortDefinition</code> or <code>PortUsage</code> must directly or indirectly specialize the <code>PortUsage</code> <em><code>Ports::Port::subports</code></em> from the Systems Model Library.</p> + + + + + + <p>The <code>ItemUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(PortDefinition) or - owningType.oclIsKindOf(PortUsage)) implies - specializesFromLibrary('Ports::Port::subports') - - - - - <p>Unless a <code>PortUsage</code> has an <code>owningType</code> that is a <code>PortDefinition</code> or a <code>PortUsage</code>, it must be referential (non-composite).</p> + + + + + + <p>The <code>PartUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - OCL2.0 - owningType = null or -not owningType.oclIsKindOf(PortDefinition) and -not owningType.oclIsKindOf(PortUsage) implies - isReference - - - - - <p>A <code>PortUsage</code> whose <code>owningType</code> is a <code>PartDefinition</code> or <code>PartUsage</code> must directly or indirectly specialize the <code>PortUsage</code> <em><code>Parts::Part::ownedPorts</code></em> from the Systems Model Library.</p> + + + + + + <p>The <code>PortUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(PartDefinition) or - owningType.oclIsKindOf(PartUsage)) implies - specializesFromLibrary('Parts::Part::ownedPorts') - - - - - - <p>The <code>occurrenceDefinitions</code> of this <code>PortUsage</code>, which must all be <code>PortDefinitions<code>.</p> + + + + + + <p>The <code>ConnectorAsUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>. Note that this list includes <code>BindingConnectorAsUsages</code>, <code>SuccessionAsUsages</code>, and <code>FlowUsages</code> because these are <code>ConnectorAsUsages</code> even though they are not <code>ConnectionUsages</code>.</p> - - + + - - - - <p>A <code>PortDefinition</code> defines a point at which external entities can connect to and interact with a system or part of a system. Any <code>ownedUsages</code> of a <code>PortDefinition</code>, other than <code>PortUsages</code>, must not be composite.</p> - - - - - - - <p>The <code>conjugatedPortDefinition</code> of a <code>PortDefinition</code> is the <code>ownedMember</code> that is a <code>ConjugatedPortDefinition</code>.</p> + + + <p>The code>FlowUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - OCL2.0 - conjugatedPortDefinition = -let conjugatedPortDefinitions : OrderedSet(ConjugatedPortDefinition) = - ownedMember->selectByKind(ConjugatedPortDefinition) in -if conjugatedPortDefinitions->isEmpty() then null -else conjugatedPortDefinitions->first() -endif - - - - - <p>The <code>ownedUsages</code> of a <code>PortDefinition</code> that are not <code>PortUsages</code> must not be composite.</p> + + + + + + <p>The <code>InterfaceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - OCL2.0 - ownedUsage-> - reject(oclIsKindOf(PortUsage))-> - forAll(not isComposite) - - - - - <p>Unless it is a <code>ConjugatedPortDefinition</code>, a <code>PortDefinition</code> must have exactly one <code>ownedMember</code> that is a <code>ConjugatedPortDefinition</code>.</p> + + + + + + <p>The <code>AllocationUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - OCL2.0 - not oclIsKindOf(ConjugatedPortDefinition) implies - ownedMember-> - selectByKind(ConjugatedPortDefinition)-> - size() = 1 - - - - - <p>A <code>PortDefinition</code> must directly or indirectly specialize the <code>PortDefinition</code> <em><code>Ports::Port</code></em> from the Systems Model Library.</p> + + + + + + <p>The <code>ActionUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - OCL2.0 - specializesFromLibrary('Ports::Port') - - - - - - - - - <p>The <codeConjugatedPortDefinition</code> that is conjugate to this <code>PortDefinition</code>.</p> + + + + + + <p>The <code>StateUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - - + + - - - - - <p>The PortUsages that are typed by a certain PortDefinition.</p> + + + <p>The <code>TransitionUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - - - - - - - <p>A <code>PortConjugation</code> is a <code>Conjugation</code> <code>Relationship</code> between a <code>PortDefinition</code> and its corresponding <code>ConjugatedPortDefinition</code>. As a result of this <code>Relationship</code>, the <code>ConjugatedPortDefinition</code> inherits all the <code>features</code> of the original <code>PortDefinition</code>, but input <code>flows</code> of the original <code>PortDefinition</code> become outputs on the <code>ConjugatedPortDefinition</code> and output <code>flows</code> of the original <code>PortDefinition</code> become inputs on the <code>ConjugatedPortDefinition</code>.</code></p> + + + + + + <p>The <code>CalculationUsage</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - - - - - <p>The <code>PortDefinition</code> being conjugated.</p> - - - + + - - - <p>The <code>ConjugatedPortDefinition</code> that is conjugate to the <code>originalPortDefinition</code>.</p> + + + <p>The <code>ConstraintUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - - + + - - - - - The <code>ForLoopActionUsage</code> that has a certain <code>ReferenceUsage</code> as its <code>loopVariable</code>. + + + <p>The <code>RequirementUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - - - - - - - <p>The <code>SendActionUsage</code> that has a certain <code>Expression<code> as its <code>receiverArgument</code>.</p> + + + + + + <p>The <code>ConcernUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - - - - - - <p>A <code>ControlNode</code> is an <code>ActionUsage</code> that does not have any inherent behavior but provides constraints on incoming and outgoing <code>Successions</code> that are used to control other <code>Actions</code>. A <code>ControlNode</code> must be a composite owned <code>usage</code> of an <code>ActionDefinition</code> or <code>ActionUsage</code>.</p> + + + + + + <p>The <code>CaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - - <p>All outgoing <code>Successions</code> from a <code>ControlNode</code> must have a source <code>multiplicity</code> of <code>1..1</code>.</p> - - OCL2.0 - sourceConnector->selectByKind(Succession)-> - collect(connectorEnd->at(1).multiplicity)-> - forAll(sourceMult | - multiplicityHasBounds(sourceMult, 1, 1)) - - - - - <p>The <code>owningType</code> of a <code>ControlNode</code> must be an <code>ActionDefinition</code> or <code>ActionUsage</code>.</p> + + + + + + <p>The <code>AnalysisCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(ActionDefinition) or - owningType.oclIsKindOf(ActionUsage)) - - - - - <p>All incoming <code>Successions</code> to a <code>ControlNode</code> must have a target <code>multiplicity</code> of <code>1..1</code>.</p> + + + + + + <p>The <code>VerificationCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - OCL2.0 - targetConnector->selectByKind(Succession)-> - collect(connectorEnd->at(2).multiplicity)-> - forAll(targetMult | - multiplicityHasBounds(targetMult, 1, 1)) - - - - - <p>A <code>ControlNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::control</code></em> from the Systems Model Library.</p> + + + + + + <p>The <code>UseCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - OCL2.0 - specializesFromLibrary('Action::Action::controls') - - - - - <p>A <code>ControlNode</code> must be composite.</p> + + + + + + <p>The <code>ViewUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - OCL2.0 - isComposite - - - - - - <p>Check that the given <code>Multiplicity</code> has <code>lowerBound</code> and <code>upperBound</code> expressions that are model-level evaluable to the given <code>lower</code> and <code>upper</code> values.</p> + + + + + + <p>The <code>ViewpointUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - + + + + + + <p>The <code>RenderingUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + + + + + + + <p>The <code>MetadataUsages</code> that are <code>ownedMembers</code> of this of this <code>Usage</code>.</p> + + + + + + + <p>Whether this <code>Usage</code> is for a variation point or not. If true, then all the <code>memberships</code> of the <code>Usage</code> must be <code>VariantMemberships</code>.</p> + + + + + + <p>If this <code>Usage</code> is a variant, then its naming <code>Feature</code> is the <code>referencedFeature</code> of its <code>ownedReferenceSubsetting</code>.</p> + + + OCL2.0 - mult <> null and -if mult.oclIsKindOf(MultiplicityRange) then - mult.oclAsType(MultiplicityRange).hasBounds(lower, upper) -else - mult.allSuperTypes()->exists( - oclisKindOf(MultiplicityRange) and - oclAsType(MultiplicityRange).hasBounds(lower, upper) -endif + if not owningMembership.oclIsKindOf(VariantMembership) then + self.oclAsType(Feature).namingFeature() +else if ownedReferenceSubsetting = null then null +else ownedReferenceSubsetting.referencedFeature +endif endif - - - - - - - - + + + + - - + + + + + <p>If <code>ownedReferenceSubsetting</code> is not null, return the <code>featureTarget</code> of the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code>.</p> + + + + OCL2.0 + if ownedReferenceSubsetting = null then null +else ownedReferenceSubsetting.referencedFeature.featureTarget +endif + + + + - - - - <p>The IfActionUsage that has a certain ActionUsage as its <code>elseAction</code>.</p> + + + + <p>The Definition that owns the <code>ownedState</code>.</p> - - + + - - - <p>A <code>ForLoopActionUsage</code> is a <code>LoopActionUsage</code> that specifies that its <code>bodyAction</code> <code>ActionUsage</code> should be performed once for each value, in order, from the sequence of values obtained as the result of the <code>seqArgument</code> <code>Expression</code>, with the <code>loopVariable</code> set to the value for each iteration.</p> - - - - <p>The <code>seqArgument</code> of a <code>ForLoopActionUsage</code> is its first argument <code>Expression</code>.</p> + + + + <p>The Usage in which the <code>nestedAction</code> is nested.</p> - - OCL2.0 - seqArgument = argument(1) - - - - - - <p>A composite <code>ForLoopActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::forLoops</code></em> from the Systems Model Library.</p> - - - OCL2.0 - isSubactionUsage() implies - specializesFromLibrary('Actions::Action::forLoops') - - - - - <p>The <code>loopVariable</code> of a <code>ForLoopActionUsage</code> must redefine the <code>ActionUsage</code> <code><em>Actions::ForLoopAction::var</em></code>.</p> - - - OCL2.0 - loopVariable <> null and -loopVariable.redefinesFromLibrary('Actions::ForLoopAction::var') - - - - - <p>A <code>ForLoopActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::forLoopActions</code></em> from the Systems Model Library.</p> - - - OCL2.0 - specializesFromLibrary('Actions::forLoopActions') - - - - - <p>The <code>loopVariable</code> of a <code>ForLoopActionUsage</code> is its first <code>ownedFeature</code>, which must be a <code>ReferenceUsage</code>.</p> - - - OCL2.0 - loopVariable = - if ownedFeature->isEmpty() or - not ownedFeature->first().oclIsKindOf(ReferenceUsage) then - null - else - ownedFeature->first().oclAsType(ReferenceUsage) - endif - - - - - <p>The first <code>ownedFeature</code> of a <code>ForLoopActionUsage</code> must be a <code>ReferenceUsage</code>.</p> - - - OCL2.0 - ownedFeature->notEmpty() and -ownedFeature->at(1).oclIsKindOf(ReferenceUsage) - - - - - - <p>A <code>ForLoopActionUsage</code> must have two owned <code>input</code> <code>parameters</code>.</p> - - - OCL2.0 - inputParameters()->size() = 2 - - - - - - <p>The <code>Expression</code> whose result provides the sequence of values to which the <code>loopVariable</code> is set for each iterative performance of the <code>bodyAction</code>. It is the <code>Expression</code> whose <code>result</code> is bound to the <em><code>seq</code></em> <code>input</code> <code>parameter</code> of this <code>ForLoopActionUsage</code>.</p> - - - - - - - - - <p>The <code>ownedFeature</code> of this <co>ForLoopActionUsage</code> that acts as the loop variable, which is assigned the successive values of the input sequence on each iteration. It is the <code>ownedFeature</code> that redefines <em><code>ForLoopAction::var</code></em>.</p> - - - - - - - - <p>A <code>PerformActionUsage</code> is an <code>ActionUsage</code> that represents the performance of an <code>ActionUsage</code>. Unless it is the <code>PerformActionUsage</code> itself, the <code>ActionUsage</code> to be performed is related to the <code>PerformActionUsage</code> by a <code>ReferenceSubsetting</code> relationship. A <code>PerformActionUsage</code> is also an <code>EventOccurrenceUsage</code>, with its <code>performedAction</code> as the <code>eventOccurrence</code>.</p> - - - - <p>If a <code>PerformActionUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of the <code>referencedFeature</code> must be an <code>ActionUsage</code>.</p> - - - OCL2.0 - referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(ActionUsage) - - - - - <p>If a <code>PerformActionUsage</code> has an <code>owningType</code> that is a <code>PartDefinition</code> or <code>PartUsage</code>, then it must directly or indirectly specialize the <code>ActionUsage</code> <code><em>Parts::Part::performedActions</em></code>.</p> - - - OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(PartDefinition) or - owningType.oclIsKindOf(PartUsage)) implies - specializesFromLibrary('Parts::Part::performedActions') - - - - - - - <p>The <code>ActionUsage</code> to be performed by this <code>PerformedActionUsage</code>. It is the <code>eventOccurrence</code> of the <code>PerformActionUsage</code> considered as an <code>EventOccurrenceUsage</code>, which must be an <code>ActionUsage</code>.</p> - - - - - - - - <p>The naming <code>Feature</code> of a <code>PerformActionUsage</code> is its <code>performedAction</code>, if this is different than the <code>PerformActionUsage</code>. If the <code>PerformActionUsage</code> is its own <code>performedAction</code>, then the naming <code>Feature</code> is the same as the usual default for a <code>Usage</code>.</p> - - - - OCL2.0 - if performedAction <> self then performedAction -else self.oclAsType(Usage).namingFeature() -endif - - - - - - - - - - - - <p>An <code>AssignmentActionUsage</code> is an <code>ActionUsage</code> that is defined, directly or indirectly, by the <code>ActionDefinition</code> <em><code>AssignmentAction</code></em> from the Systems Model Library. It specifies that the value of the <code>referent</code> <code>Feature</code>, relative to the target given by the result of the <code>targetArgument</code> <code>Expression</code>, should be set to the result of the <code>valueExpression</code>.</p> - - - - - <p>An <code>AssignmentActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::assignmentActions</code></em> from the Systems Model Library.</p> - - - OCL2.0 - specializesFromLibrary('Actions::assignmentActions') - - - - - <p>The first <code>ownedFeature</code> of the first <code>parameter</code> of an <code>AssignmentActionUsage</code> must redefine <code><em>AssignmentAction::target::startingAt</em></code>.</p> - - - OCL2.0 - let targetParameter : Feature = inputParameter(1) in -targetParameter <> null and -targetParameter.ownedFeature->notEmpty() and -targetParameter.ownedFeature->first(). - redefines('AssignmentAction::target::startingAt') - - - - - <p>The <code>valueExpression</code> of a <code>AssignmentActionUsage</code> is its second argument <code>Expression</code>.</p> - - - OCL2.0 - valueExpression = argument(2) - - - - - <p>The <code>targetArgument</code> of a <code>AssignmentActionUsage</code> is its first argument <code>Expression</code>.</p> - - - OCL2.0 - targetArgument = argument(1) - - - - - <p>A composite <code>AssignmentActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::assignments</code></em> from the Systems Model Library.</p> - - - OCL2.0 - isSubactionUsage() implies - specializesFromLibrary('Actions::Action::assignments') - - - - - <p>The first <code>ownedFeature</code> of the first <code>ownedFeature</code> of the first <code>parameter</code> of an <code>AssignmentActionUsage</code> must redefine <code><em>AssignmentAction::target::startingAt::accessedFeature</em></code>.</p> - - - OCL2.0 - let targetParameter : Feature = inputParameter(1) in -targetParameter <> null and -targetParameter.ownedFeature->notEmpty() and -targetParameter->first().ownedFeature->notEmpty() and -targetParameter->first().ownedFeature->first(). - redefines('AssigmentAction::target::startingAt::accessedFeature') - - - - - <p>The first <code>ownedFeature</code> of the first <code>ownedFeature</code> of the first <code>parameter</code> of an <code>AssignmentActionUsage</code> must redefine the <code>referent</code> of the <code>AssignmentActionUsage</code>.</p> - - - OCL2.0 - let targetParameter : Feature = inputParameter(1) in -targetParameter <> null and -targetParameter.ownedFeature->notEmpty() and -targetParameter->first().ownedFeature->notEmpty() and -targetParameter->first().ownedFeature->first().redefines(referent) - - - - - <p>The <code>referent</code> of an <code>AssignmentActionUsage</code> is the first <code>Feature</code> that is the <code>memberElement</code> of a <code>ownedMembership</code> that is not a <code>FeatureMembership</code>.</p> - - - OCL2.0 - referent = - let unownedFeatures : Sequence(Feature) = ownedMembership-> - reject(oclIsKindOf(FeatureMembership)).memberElement-> - selectByKind(Feature) in - if unownedFeatures->isEmpty() then null - else unownedFeatures->first().oclAsType(Feature) - endif - - - - - <p>An <code>AssignmentActionUsage</code> must have an <code>ownedMembership</code> that is not an <code>OwningMembership</code> and whose <code>memberElement</code> is a <code>Feature</code>.</p> - - - OCL2.0 - ownedMembership->exists( - not oclIsKindOf(OwningMembership) and - memberElement.oclIsKindOf(Feature)) - - - - - <p>The <code>featureTarget</code> of the <code>referent</code> of an <code>AssignmentActionUsage</code> must be able to have time-varying values.</p> - - - OCL2.0 - referent <> null implies referent.featureTarget.mayTimeVary - - - - - - <p>The <code>Expression</code> whose value is an occurrence in the domain of the <code>referent</code> <code>Feature</code>, for which the value of the <code>referent</code> will be set to the result of the <code>valueExpression</code> by this <code>AssignmentActionUsage</code>.</p> - - - - - - - - <p>The <code>Expression</code> whose result is to be assigned to the <code>referent</code> <code>Feature</code>.</p> - - - - - - - - <p>The <code>Feature</code> whose value is to be set.</p> - - - - - - - - - - <p>A <code>SendActionUsage</code> is an <code>ActionUsage</code> that specifies the sending of a payload given by the result of its <code>payloadArgument</code> <code>Expression</code> via a <em><code>MessageTransfer</code></em> whose <em><code>source</code></em> is given by the result of the <code>senderArgument</code> <code>Expression</code> and whose <code>target</code> is given by the result of the <code>receiverArgument</code> <code>Expression</code>. If no <code>senderArgument</code> is provided, the default is the <em><code>this</code></em> context for the action. If no <code>receiverArgument</code> is given, then the receiver is to be determined by, e.g., outgoing <em><code>Connections</code></em> from the sender.</p> - - - - - <p>The <code>senderArgument</code> of a <code>SendActionUsage</code> is its second argument <code>Expression</code>.</p> - - - OCL2.0 - senderArgument = argument(2) - - - - - <p>The <code>payloadArgument</code> of a <code>SendActionUsage</code> is its first argument <code>Expression</code>.</p> - - - OCL2.0 - payloadArgument = argument(1) - - - - - <p>A <code>SendActionUsage</code> must have at least three owned input <code>parameters</code>, corresponding to its <em><code>payload</code></em>, <em><code>sender</code></em> and <em><code>receiver</code></em>, respectively (whether or not they have <code>FeatureValues</code>).</p> - - - OCL2.0 - inputParameters()->size() >= 3 - - - - - <p>The <code>receiverArgument</code> of a <code>SendActionUsage</code> is its third argument <code>Expression</code>.</p> - - - OCL2.0 - receiverArgument = argument(3) - - - - - <p>A composite <code>SendActionUsage</code> that is a subaction must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::sendSubactions</code></em> from the Systems Model Library.</p> - - - OCL2.0 - isSubactionUsage() implies - specializesFromLibrary('Actions::Action::acceptSubactions') - - - - - <p>A <code>SendActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::sendActions</code></em> from the Systems Model Library.</p> - - - OCL2.0 - specializesFromLibrary('Actions::sendActions') - - - - - - <p>An <code>Expression</code> whose result is bound to the <em><code>receiver</code></em> input parameter of this <code>SendActionUsage</code>.</p> - - - - - - - - - <p>An <code>Expression</code> whose result is bound to the <code><em>payload</em></code> input parameter of this <code>SendActionUsage</code>.</p> - - - - - - - - - <p>An <code>Expression</code> whose result is bound to the <em><code>sender</code></em> input parameter of this <code>SendActionUsage</code>.</p> - - - - - - - - - - - - - - - - - <p>The ActionUsages being typed by a certain Behavior.</p> - - - - - - - - - - <p>A <code>DecisionNode</code> is a <code>ControlNode</code> that makes a selection from its outgoing <code>Successions</code>.</p> - - - - <p>A <code>DecisionNode</code> may have at most one incoming <code>Succession</code>.</p> - - - OCL2.0 - targetConnector->selectByKind(Succession)->size() <= 1 - - - - - <p>All outgoing <code>Successions</code> from a <code>DecisionNode</code> must have a target <code>multiplicity</code> of <code>0..1</code>.</p> - - - OCL2.0 - sourceConnector->selectAsKind(Succession)-> - collect(connectorEnd->at(2))-> - forAll(targetMult | - multiplicityHasBounds(targetMult, 0, 1)) - - - - - <p>A <code>DecisionNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::decisions</code></em> from the Systems Model Library.</p> - - - OCL2.0 - specializesFromLibrary('Actions::Action::decisions') - - - - - <p>All outgoing <code>Successions</code> from a <code>DecisionNode</code> must subset the inherited <em><code>outgoingHBLink</code></em> <code>feature</code> of the <code>DecisionNode</code>.</p> - - - OCL2.0 - sourceConnector->selectByKind(Succession)-> - forAll(subsetsChain(self, - resolveGlobal('ControlPerformances::MergePerformance::outgoingHBLink'))) - - - - - - - <p>A <code>TriggerInvocationExpression</code> is an <code>InvocationExpression</code> that invokes one of the trigger <code>Functions</code> from the Kernel Semantic Library <code><em>Triggers<em></code> package, as indicated by its <code>kind</code>.</p> - - - - <p>If a <code>TriggerInvocationExpression</code> has <code>kind = after</code>, then it must have an argument <code>Expression</code> with a <code>result</code> that conforms to the type <em><code>Quantities::ScalarQuantityValue</code></em> and a <code>feature</code> that directly or indirectly redefines <em><code>Quantities::TensorQuantityValue::mRef</code></em> and directly or indirectly specializes <em><code>ISQBase::DurationUnit</code></em>.</p> - - - OCL2.0 - kind = TriggerKind::after implies - argument->notEmpty() and - argument->at(1).result.specializesFromLibrary('Quantities::ScalarQuantityValue') and - let mRef : Element = - resolveGlobal('Quantities::TensorQuantityValue::mRef').ownedMemberElement in - argument->at(1).result.feature-> - select(ownedRedefinition.redefinedFeature-> - closure(ownedRedefinition.redefinedFeature)-> - includes(mRef))-> - exists(specializesFromLibrary('ISQBase::DurationUnit')) - - - - - <p>If a <code>TriggerInvocationExpression</code> has <code>kind = at</code>, then it must have an argument <code>Expression</code> with a <code>result</code> that conforms to the type <em><code>Time::TimeInstantValue</code></em>.</p> - - - OCL2.0 - kind = TriggerKind::at implies - argument->notEmpty() and - argument->at(1).result.specializesFromLibrary('Time::TimeInstantValue') - - - - - <p>If a <code>TriggerInvocationExpression</code> has <code>kind = when</code>, then it must have an <code>argument</code> that is a <code>FeatureReferenceExpression</code> whose <code>referent</code> is an <code>Expression</code> with a <code>result</code> that conforms to the type <em><code>ScalarValues::Boolean</code></em>.</p> - - - OCL2.0 - kind = TriggerKind::when implies - argument->notEmpty() and - argument->at(1).oclIsKindOf(FeatureReferenceExpression) and - let referent : Feature = - argument->at(1).oclAsType(FeatureReferenceExpression).referent in - referent.oclIsKindOf(Expression) and - referent.oclAsType(Expression).result.specializesFromLibrary('ScalarValues::Boolean') - - - - - - - - <p>Indicates which of the <code>Functions</code> from the <code><em>Triggers</em></code> model in the Kernel Semantic Library is to be invoked by this <code>TriggerInvocationExpression</code>.</p> - - - - - <p>Return one of the <code>Functions</code> <em><code>TriggerWhen</code></em>, <em><code>TriggerAt</code></em> or <em><code>TriggerAfter</code></em>, from the Kernel Semantic Library <em><code>Triggers</code></em> package, depending on whether the <code>kind</code> of this <code>TriggerInvocationExpression</code> is <code>when</code>, <code>at</code> or <code>after</code>, respectively.</p> - - - - OCL2.0 - resolveGlobal( - if kind = TriggerKind::when then - 'Triggers::TriggerWhen' - else if kind = TriggerKind::at then - 'Triggers::TriggerAt' - else - 'Triggers::TriggerAfter' - endif endif -).memberElement.oclAsType(Type) - - - - - - - - - - - - <p>The <code>LoopActionUsage</code> that has a certain <code>ActionUsage</code> as its <code>bodyAction</code>.</p> - - - - - - - - <p>A <code>ForkNode</code> is a <code>ControlNode</code> that must be followed by successor <code>Actions</code> as given by all its outgoing <code>Successions</code>.</p> - - - - <p>A <code>ForkNode</code> may have at most one incoming <code>Succession</code>.</p> - - - OCL2.0 - targetConnector->selectByKind(Succession)->size() <= 1 - - - - - <p>A <code>ForkNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::forks</code></em> from the Systems Model Library.</p> - - - OCL2.0 - specializesFromLibrary('Actions::Action::forks') - - - - - - - <p>A <code>TerminateActionUsage</code> is an <code>ActionUsage</code> that directly or indirectly specializes the <code>ActionDefinition</code> <em><code>TerminateAction</code></em> from the Systems Model Library, which causes a given <em><code>terminatedOccurrence</code></em> to end during its performance. By default, the <code>terminatedOccurrence</code> is the featuring instance (<em><code>that</code></em>) of the performance of the <code>TerminateActionUsage</code>, generally the performance of its immediately containing <code>ActionDefinition</code> or <code>ActionUsage</code>.</p> - - - - <p>A <code>TerminateActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::terminateActions</code></em> from the Systems Modeling Library.</p> - - - OCL2.0 - specializesFromLibrary('Actions::terminateActions') - - - - - <p>The <code>terminatedOccurrenceArgument</code> of a <code>TerminateActionUsage</code> is its first argument.</p> - - - OCL2.0 - terminatedOccurrenceArgument = argument(1) - - - - - <p>A composite <code>TerminateActionUsage</code> that is a subaction must must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::terminateSubactions</code></em> from the Systems Modeling Library.</p> - - - OCL2.0 - isSubactionUsage() implies - specializesFromLibrary('Actions::Action::terminateSubactions') - - - - - - <p>The <code>Expression</code> that is the <code>featureValue</code> of the <em><code>terminateOccurrence</code></em> <code>parameter</code> of this <code>TerminateActionUsage</code>. - - - - - - - - - - <p>The <code>IfActionUsage</code> that has a certain <code>Expression</code> as its <code>ifArgument</code>.</p> - - - - - - - - - <p>The AssignmentActionUsage that has a certain Expression as its <code>targetArgument</code>.</p> - - - - - - - - <p>A <code>MergeNode</code> is a <code>ControlNode</code> that asserts the merging of its incoming <code>Successions</code>. A <code>MergeNode</code> may have at most one outgoing <code>Successions</code>.</p> - - - - <p>A <code>MergeNode</code> may have at most one outgoing <code>Succession</code>.</p> - - - OCL2.0 - sourceConnector->selectAsKind(Succession)->size() <= 1 - - - - - <p>All incoming <code>Successions</code> to a <code>MergeNode</code> must have a source <code>multiplicity</code> of <code>0..1</code>.</p> - - - OCL2.0 - targetConnector->selectByKind(Succession)-> - collect(connectorEnd->at(1))-> - forAll(sourceMult | - multiplicityHasBounds(sourceMult, 0, 1)) - - - - - <p>All incoming <code>Successions</code> to a <code>MergeNode</code> must subset the inherited <em><code>incomingHBLink</code></em> <code>feature</code> of the <code>MergeNode</code>.</p> - - - OCL2.0 - targetConnector->selectByKind(Succession)-> - forAll(subsetsChain(self, - resolveGlobal('ControlPerformances::MergePerformance::incomingHBLink'))) - - - - - <p>A <code>MergeNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::merges</code></em> from the Systems Model Library.</p> - - - OCL2.0 - specializesFromLibrary('Actions::Action::merges') - - - - - - - - <p>The <code>IfActionUsage</code> that has a certain <code>ActionUsage</code> as its <code>thenAction</code>.</p> - - - - - - - - - <p>The <code>WhileLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>whileArgument</code>.</p> - - - - - - - - - <p>The AssignmentActionUsage that has a certain Expression as its <code>valueArgument</code>.</p> - - - - - - - - - <p>The AcceptActionUsage that owns the <code>payloadParameter</code>.</p> - - - - - - - - <p>An <code>ActionUsage</code> is a <code>Usage</code> that is also a <code>Step</code>, and, so, is typed by a <code>Behavior</code>. Nominally, if the type is an <code>ActionDefinition</code>, an <code>ActionUsage</code> is a <code>Usage</code> of that <code>ActionDefinition</code> within a system. However, other kinds of kernel <code>Behaviors</code> are also allowed, to permit use of <code>Behaviors</code> from the Kernel Model Libraries.</p> - - - - - <p>A composite <code>ActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::subactions</code></em> from the Systems Model Library.</p> - - - OCL2.0 - isSubactionUsage() implies - specializesFromLibrary('Actions::Action::subactions') - - - - - <p>An <code>ActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::actions</code></em> from the Systems Model Library.</p> - - - OCL2.0 - specializesFromLibrary('Actions::actions') - - - - - <p>A composite <code>ActionUsage</code> whose <code>owningType</code> is <code>PartDefinition</code> or <code>PartUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Parts::Part::ownedActions</code></em> from the Systems Model Library.</p> - - - OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(PartDefinition) or - owningType.oclIsKindOf(PartUsage)) implies - specializesFromLibrary('Parts::Part::ownedActions') - - - - - <p>An <code>ActionUsage</code> that is the <code><em>entry</em></code>, <code><em>do</em></code>, or <code><em>exit</em></code> <code><em>Action</em></code> of a <code>StateDefinition</code> or <code>StateUsage</code> must redefine the <code>entryAction</code>, <code>doAction</code>, or <code>exitAction</code> <code>feature</code>, respectively, of the <code>StateDefinition</code> <code><em>States::StateAction</em></code> from the Systems Model Library.</p> - - - OCL2.0 - owningFeatureMembership <> null and -owningFeatureMembership.oclIsKindOf(StateSubactionMembership) implies - let kind : StateSubactionKind = - owningFeatureMembership.oclAsType(StateSubactionMembership).kind in - if kind = StateSubactionKind::entry then - redefinesFromLibrary('States::StateAction::entryAction') - else if kind = StateSubactionKind::do then - redefinesFromLibrary('States::StateAction::doAction') - else - redefinesFromLibrary('States::StateAction::exitAction') - endif endif - - - - - - - - - <p>The <code>Behaviors</code> that are the <code>types</code> of this <code>ActionUsage</code>. Nominally, these would be <code>ActionDefinitions</code>, but other kinds of Kernel <code>Behaviors</code> are also allowed, to permit use of <code>Behaviors</code> from the Kernel Model Libraries.</p> - - - - - - - - - - - <p>Return the owned input <code>parameters</code> of this <code>ActionUsage</code>.</p> + + + + + + + + <p>The variation point Definition that for which this Usage represents a variant, derived as the <code>owningVariationDefinition</code> of the <code>owningVariantMembership</code> of the Usage.</p> - - - OCL2.0 - input->select(f | f.owner = self) - - - - - - - - - - - <p>Return the <code>i</code>-th owned input <code>parameter</code> of the <code>ActionUsage</code>. Return null if the <code>ActionUsage</code> has less than <code>i</code> owned input <code>parameters</code>.</p> + + + + + + + + + <p>The Definition that owns the <code>ownedAction</code>.</p> - - - OCL2.0 - if inputParameters()->size() < i then null -else inputParameters()->at(i) -endif - - - - - - - - - - - - - - <p>Return the <code>i</code>-th argument <code>Expression</code> of an <code>ActionUsage</code>, defined as the <code>value</code> <code>Expression</code> of the <code>FeatureValue</code> of the <code>i</code>-th owned input <code>parameter</code> of the <code>ActionUsage</code>. Return null if the <code>ActionUsage</code> has less than <code>i</code> owned input <code>parameters</code> or the <code>i</code>-th owned input <code>parameter</code> has no <code>FeatureValue</code>.</p> + + + + + + + + <p>The Usage in which the <code>nestedAnalysisCase</code> is nested.</p> - - - OCL2.0 - if inputParameter(i) = null then null -else - let featureValue : Sequence(FeatureValue) = inputParameter(i). - ownedMembership->select(oclIsKindOf(FeatureValue)) in - if featureValue->isEmpty() then null - else featureValue->at(1).value - endif -endif - - - - - - - - - - - - - - <p>Check if this <code>ActionUsage</code> is composite and has an <code>owningType</code> that is an <code>ActionDefinition</code> or <code>ActionUsage</code> but is <em>not</em> the <code>entryAction</code> or <code>exitAction</em></code> of a <code>StateDefinition</code> or <code>StateUsage</code>. If so, then it represents an <code><em>Action</em></code> that is a <code><em>subaction</em></code> of another <code><em>Action</em></code>.</p> + + + + + + + + <p>The variation point Usage that for which this Usage represents a variant, derived as the <code>owningVariationUsage</code> of the <code>owningVariantMembership</code> of the Usage.</p> - - - OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(ActionDefinition) or - owningType.oclIsKindOf(ActionUsage)) and -(owningFeatureMembership.oclIsKindOf(StateSubactionMembership) implies - owningFeatureMembership.oclAsType(StateSubactionMembership).kind = - StateSubactionKind::do) - - - - - - + + + + - - - - <p>The AcceptActionUsage that has a certain Expression as its <code>receiverArgument</code>.</p> + + + + <p>The Definition that owns the <code>ownedAnalysisCase</code>.</p> - - + + - - - - <p>The <code>TerminateActionUsage</code> that has a certain <code>Expression</code> as its <code>terminatedOccurrenceArgument</code>.</p> + + + + <p>The Definition that owns the <code>ownedUseCase</code>.</p> - - + + - - - - <p>The <code>WhileLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>untilArgument</code>.</p> + + + + <p>The Usage in which the <code>nestedConstraint</code> is nested.</p> - - + + - - - <p>An <code>IfActionUsage</code> is an <code>ActionUsage</code> that specifies that the <code>thenAction</code> <code>ActionUsage</code> should be performed if the result of the <code>ifArgument</code> <code>Expression</code> is true. It may also optionally specify an <code>elseAction</code> <code>ActionUsage</code> that is performed if the result of the <code>ifArgument</code> is false.</p> + + + <p>The Definition that owns this CaseUsage (if any).</p> - - - <p>The <code>thenAction</code> of an <code>ifActionUsage</code> is its second <code>parameter</code>, which must be an <code>ActionUsage</code>.</p> + + + <p>The Definition that owns the <code>ownedCase</code>.</p> - - OCL2.0 - thenAction = - let parameter : Feature = inputParameter(2) in - if parameter <> null and parameter.oclIsKindOf(ActionUsage) then - parameter.oclAsType(ActionUsage) - else - null - endif - - - - - <p>A composite <code>IfActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::ifSubactions</code></em> from the Systems Model Library.</p> + + + + + + + + <p>The Usage in which the <code>nestedPart</code> is nested.</p> - - OCL2.0 - isSubactionUsage() implies - specializesFromLibrary('Actions::Action::ifSubactions') - - - - - <p>A <code>IfActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::ifThenActions</code></em> from the Systems Model Library. If it has an <code>elseAction</code>, then it must directly or indirectly specialize <em><code>Actions::ifThenElseActions</code></em>. + + + + + + + + <p>The Usage in which the <code>nestedOccurrence</code> is nested.</p> - - OCL2.0 - if elseAction = null then - specializesFromLibrary('Actions::ifThenActions') -else - specializesFromLibrary('Actions::ifThenElseActions') -endif - - - - - <p>The <code>ifArgument</code> of an <code>ifActionUsage</code> is its first <code>parameter</code>, which must be an <code>Expression</code>.</p> + + + + + + + + <p>The Definition that owns the <code>ownedRequirement</code>.</p> - - OCL2.0 - ifArgument = - let parameter : Feature = inputParameter(1) in - if parameter <> null and parameter.oclIsKindOf(Expression) then - parameter.oclAsType(Expression) - else - null - endif - - - - - <p>The <code>elseAction</code> of an <code>ifActionUsage</code> is its third <code>parameter</code>, if there is one, which must then be an <code>ActionUsage</code>.</p> + + + + + + + + <p>The Usage that owns a certain <code>nestedVerificationCase</code>.</p> - - OCL2.0 - elseAction = - let parameter : Feature = inputParameter(3) in - if parameter <> null and parameter.oclIsKindOf(ActionUsage) then - parameter.oclAsType(ActionUsage) - else - null - endif - - - - - <p>An <code>IfActionUsage</code> must have at least two owned <code>input</code> <code>parameters</code>.</p> + + + + + + + + <p>The Usage in which the <code>nestedPort</code> is nested (if any).</p> - + + + + + + + <p>A <code>VariantMembership</code> is a <code>Membership</code> between a variation point <code>Definition</code> or <code>Usage</code> and a <code>Usage</code> that represents a variant in the context of that variation. The <code>membershipOwningNamespace</code> for the <code>VariantMembership</code> must be either a Definition or a <code>Usage</code> with <code>isVariation = true</code>.</p> + + + + <p>The <code>membershipOwningNamespace</code> of a <code>VariantMembership</code> must be a variation-point <code>Definition</code> or <code>Usage</code>.</p> + + OCL2.0 - inputParameters()->size() >= 2 + membershipOwningNamespace.oclIsKindOf(Definition) and + membershipOwningNamespace.oclAsType(Definition).isVariation or +membershipOwningNamespace.oclIsKindOf(Usage) and + membershipOwningNamespace.oclAsType(Usage).isVariation + - - - - <p>The <code>ActionUsage</code> that is to be performed if the result of the <code>ifArgument</code> is false. It is the (optional) third <code>parameter</code> of the <code>IfActionUsage</code>.</p> - + + + + + + <p>The <code>Usage</code> that represents a variant in the context of the <code>owningVariationDefinition</code> or <code>owningVariationUsage</code>.</p> - - + + + - - - <p>The <code>ActionUsage</code> that is to be performed if the result of the <code>ifArgument</code> is true. It is the second <code>parameter<code> of the <code>IfActionUsage</code>.</p> - + + + + + <p>The Usage that owns a certain <code>nestedViewpoint</code>.</p> - - - - - - <p>The <code>Expression</code> whose result determines whether the <code>thenAction</code> or (optionally) the <code>elseAction</code> is performed. It is the first <code>parameter<code> of the <code>IfActionUsage</code>.</p> - + + + + + + + + <p>The Usage that owns the <code>nestedEnumeration</code>.</p> - - - - + + + - - - <p>An <code>AcceptActionUsage</code> is an <code>ActionUsage</code> that specifies the acceptance of an <em><code>incomingTransfer</code></em> from the <code><em>Occurrence</em></code> given by the result of its <code>receiverArgument</code> Expression. (If no <code>receiverArgument</code> is provided, the default is the <em><code>this</code></em> context of the AcceptActionUsage.) The payload of the accepted <em><code>Transfer</em></code> is output on its <code>payloadParameter</code>. Which <em><code>Transfers</em></code> may be accepted is determined by conformance to the typing and (potentially) binding of the <code>payloadParameter</code>.</p> - - - - - <p>An <code>AcceptUsageAction</code> must have at least two input <code>parameters</code>, corresponding to its <em><code>payload</code></em> and <em><code>receiver</code>, respectively (even if they have no <code>FeatureValue</code>). (Note that the <code>payloadParameter</code> is an input as well as an output.)</p> + + + + <p>The Usage in which the <code>nestedMetadata</code> is nested.</p> - - OCL2.0 - inputParameters()->size() >= 2 - - - - - <p>The <code>receiverArgument</code> of an <code>AcceptUsageAction</code> is its second argument <code>Expression</code>.</p> + + + + + + + + <p>The Definition that owns a certain <code>ownedRendering</code>.</p> - - OCL2.0 - receiverArgument = argument(2) - - - - - <p>The <code>payloadArgument</code> of an <code>AcceptUsageAction</code> is its first argument <code>Expression</code>.</p> + + + + + + + + <p>The Definition that owns a certain <code>ownedView</code>.</p> - - OCL2.0 - payloadArgument = argument(1) - - - - - <p>The <code>payloadParameter</code> of an <code>AcceptActionUsage<code> is its first <code>parameter</code>.</p> + + + + + + + + <p>The Usage that owns the <code>nestedAllocation</code>.</p> - - OCL2.0 - payloadParameter = - if parameter->isEmpty() then null - else parameter->first() endif - - - - - <p>An <code>AcceptActionUsage</code> that is not the <code>triggerAction</code> of a <code>TransitionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::acceptActions</code></em> from the Systems Model Library.</p> + + + + + + + <p>A <code>PartDefinition</code> is an <code>ItemDefinition</code> of a <code>Class</code> of systems or parts of systems. Note that all parts may be considered items for certain purposes, but not all items are parts that can perform actions within a system.</p> + + + + + </p>A <code>PartDefinition</code> must directly or indirectly specialize the base <code>PartDefinition</code> <em><code>Parts::Part</code></em> from the Systems Model Library.</p> - + OCL2.0 - not isTriggerAction() implies - specializesFromLibrary('Actions::acceptActions') + specializesFromLibrary('Parts::Part') - - - <p>A composite <code>AcceptActionUsage</code> that is a subaction usage, but is <em>not</em> the <code>triggerAction</code> of a <code>TransitionUsage</code>, must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::acceptSubactions</code></em> from the Systems Model Library.</p> + + + + + + <p>The PartUsages typed by a certain PartDefinition.</p> - + + + + + + + <p>A <code>PartUsage</code> is a usage of a <code>PartDefinition</code> to represent a system or a part of a system. At least one of the <code>itemDefinitions</code> of the <code>PartUsage</code> must be a <code>PartDefinition</code>.</p> + +<p>A <code>PartUsage</code> must subset, directly or indirectly, the base <code>PartUsage</code> <em><code>parts</code></em> from the Systems Model Library.</p> + + + + <p>The <code>partDefinitions</code> of an <code>PartUsage</code> are those <code>itemDefinitions</code> that are <code>PartDefinitions</code>.</p> + + OCL2.0 - isSubactionUsage() and not isTriggerAction() implies - specializesFromLibrary('Actions::Action::acceptSubactions') + itemDefinition->selectByKind(PartDefinition) - - - <p>An <code>AcceptActionUsage</code> that is the <code>triggerAction</code> of <code>TransitionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::TransitionAction::accepter</code></em> from the Systems Model Library.</p> + + + <p>At least one of the <code>itemDefinitions</code> of a <code>PartUsage</code> must be a <code>PartDefinition</code>.</p> - + OCL2.0 - isTriggerAction() implies - specializesFromLibrary('Actions::TransitionAction::accepter') + partDefinition->notEmpty() - - - <p>If the <code>payloadArgument</code> of an <code>AcceptActionUsage</code> is a <code>TriggerInvocationExpression</code>, then the <code>AcceptActionusage</code> must have an <code>ownedFeature</code> that is a <code>BindingConnector</code> between its <code><em>receiver</em></code> <code>parameter</code> and the <code><em>receiver</em></code> <code>parameter</code> of the <code>TriggerInvocationExpression</code>.</p> + + + <p>A <code>PartUsage</code> must directly or indirectly specialize the <code>PartUsage</code> <em><code>Parts::parts</code></em> from the Systems Model Library.</p> - + OCL2.0 - payloadArgument <> null and -payloadArgument.oclIsKindOf(TriggerInvocationExpression) implies - let invocation : Expression = - payloadArgument.oclAsType(Expression) in - parameter->size() >= 2 and - invocation.parameter->size() >= 2 and - ownedFeature->selectByKind(BindingConnector)->exists(b | - b.relatedFeatures->includes(parameter->at(2)) and - b.relatedFeatures->includes(invocation.parameter->at(2))) + specializesFromLibrary('Parts::parts') - - - - <p>An <code>Expression</code> whose <code>result</code> is bound to the <em><code>receiver</code></em> input <code>parameter</code> of this <code>AcceptActionUsage</code>.</p> - - - - - - - - - <p>The <code>nestedReference</code> of this <code>AcceptActionUsage</code> that redefines the <code>payload</code> output <code>parameter</code> of the base <code>AcceptActionUsage</code> <em><code>AcceptAction</code></em> from the Systems Model Library.</p> - - - - - - - - - <p>An <code>Expression</code> whose <code>result</code> is bound to the <code><em>payload</em></code> <code>parameter</code> of this <code>AcceptActionUsage</code>. If provided, the <code>AcceptActionUsage</code> will only accept a <code><em>Transfer</em></code> with exactly this <code><em>payload</em></code>.</p> - + + + <p>A composite <code>PartUsage</code> whose <code>owningType</code> is a <code>ItemDefinition</code> or <code>ItemUsage</code> must directly or indirectly specialize the <code>PartUsage</code> <em><code>Items::Item::subparts</code></em> from the Systems Model Library.</p> - - - - - - - <p>Check if this <code>AcceptActionUsage</code> is the <code>triggerAction</code> of a <code>TransitionUsage</code>.</p> + + OCL2.0 + isComposite and owningType <> null and +(owningType.oclIsKindOf(ItemDefinition) or + owningType.oclIsKindOf(ItemUsage)) implies + specializesFromLibrary('Items::Item::subparts') + + + + + <p>If a <code>PartUsage</code> is owned via an <code>ActorMembership</code>, then it must directly or indirectly specialize either <code><em>Requirements::RequirementCheck::actors</em></code> (if its <code>owningType</code> is a <code>RequirementDefinition</code> or <code>RequirementUsage</code> or <code><em>Cases::Case::actors</em></code> (otherwise).</p> - - - OCL2.0 - owningType <> null and -owningType.oclIsKindOf(TransitionUsage) and -owningType.oclAsType(TransitionUsage).triggerAction->includes(self) - - - - - - - - - - <p>A <code>LoopActionUsage</code> is an <code>ActionUsage</code> that specifies that its <code>bodyAction</code> should be performed repeatedly. Its subclasses <code>WhileLoopActionUsage</code> and <code>ForLoopActionUsage</code> provide different ways to determine how many times the <code>bodyAction</code> should be performed.</p> - - - - <p>The <code>bodyAction</code> of a <code>LoopActionUsage</code> is its second input <code>parameter</code>, which must be an <code>Action</code>.</p> + + OCL2.0 + owningFeatureMembership <> null and +owningFeatureMembership.oclIsKindOf(ActorMembership) implies + if owningType.oclIsKindOf(RequirementDefinition) or + owningType.oclIsKindOf(RequirementUsage) + then specializesFromLibrary('Requirements::RequirementCheck::actors') + else specializesFromLibrary('Cases::Case::actors') + + + + + <p>If a <code>PartUsage</code> is owned via a <code>StakeholderMembership</code>, then it must directly or indirectly specialize <code><em>Requirements::RequirementCheck::stakeholders</em></code>.</p> - + OCL2.0 - bodyAction = - let parameter : Feature = inputParameter(2) in - if parameter <> null and parameter.oclIsKindOf(Action) then - parameter.oclAsType(Action) - else - null - endif - + owningFeatureMembership <> null and +owningFeatureMembership.oclIsKindOf(StakeholderMembership) implies + specializesFromLibrary('Requirements::RequirementCheck::stakeholders') - - - - <p>The <code>ActionUsage</code> to be performed repeatedly by the <code>LoopActionUsage</code>. It is the second <code>parameter</code> of the <code>LoopActionUsage</code>.</p> - + + + + <p>The <code>itemDefinitions</code> of this PartUsage that are PartDefinitions.</p> - - + + - - - - <p>The <code>SendActionUsage</code> that has a certain <code>Expression</code> as its <code>senderArgument</code>.</p> + + + + <p>The CalculationDefinitions that feature a certain CalculationUsage.</p> - - + + + + - - - <p>An <code>ActionDefinition</code> is a <code>Definition</code> that is also a <code>Behavior</code> that defines an <em><code>Action</code></em> performed by a system or part of a system.</p> + + + + <p>The Definition that owns the <code>ownedCalculation</code>.</p> + + + + + + + + <p>A <code>CalculationDefinition</code> is an <coed>ActionDefinition</code> that also defines a <code>Function</code> producing a <code>result</code>.</p> - - - <p>An <code>ActionDefinition</code> must directly or indirectly specialize the <code>ActionDefinition</code> <em><code>Actions::Action</code></em> from the Systems Model Library.</p> + + + <p>A <code>CalculationDefinition</code> must directly or indirectly specialize the <code>CalculationDefinition</code> <em><code>Calculations::Calculation</code></em> from the Systems Model Library.</p> - + OCL2.0 - specializesFromLibrary('Actions::Action') + specializesFromLibrary('Calculations::Calculation') - - - <p> The <code>actions</code> of a <code>ActionDefinition</code> are those of its <code>usages</code> that are <code>ActionUsages</code>.</p> + + + <p>The <code>calculations</code> of a <code>CalculationDefinition</code> are those of its <code>actions</code> that are <code>CalculationUsages</code>.</p> - + OCL2.0 - action = usage->selectByKind(ActionUsage) + calculation = action->selectByKind(CalculationUsage) - - + + - - - - <p>The <code>ActionUsages</code> that are <code>steps</code> in this <code>ActionDefinition</code>, which define the actions that specify the behavior of the <code>ActionDefinition</code>.</p> - + + + + <p>The <code>actions</code> of this <code>CalculationDefinition</code> that are <code>CalculationUsages</code>.</p> - - - - + + + + - - - <p><code>TriggerKind</code> enumerates the kinds of triggers that can be represented by a <code>TriggerInvocationExpression</code>.</p> - - - - <p>Indicates a <em>change trigger</em>, corresponding to the <em><code>TriggerWhen</code></em> <code>Function</code> from the <em><code>Triggers</code></em> model in the Kernel Semantic Library.</p> - - - - - <p>Indicates an <em>absolute time trigger</em>, corresponding to the <em><code>TriggerAt</code></em> <code>Function</code> from the <em><code>Triggers</code></em> model in the Kernel Semantic Library.</p> + + + + <p>The Usage in which the <code>nestedCalculation<code> is nested.</p> - - - - <p>Indicates a <em>relative time trigger</em>, corresponding to the <em><code>TriggerAfter</code></em> <code>Function</code> from the <em><code>Triggers</code></em> model in the <code>Kernel Semantic Library.</p> + + + + + + + + <p>The CalculationUsage being typed by a certain Function.</p> - + + + + + - - - <p>A <code>JoinNode</code> is a <code>ControlNode</code> that waits for the completion of all the predecessor <code>Actions</code> given by incoming <code>Successions</code>.</p> + + + <p>A <code>CalculationUsage</code> is an <code>ActionUsage</code> that is also an <code>Expression</code>, and, so, is typed by a <code>Function</code>. Nominally, if the <code>type</code> is a <code>CalculationDefinition</code>, a <code>CalculationUsage</code> is a <code>Usage</code> of that <code>CalculationDefinition</code> within a system. However, other kinds of kernel <code>Functions</code> are also allowed, to permit use of <code>Functions</code> from the Kernel Model Libraries.</p> - - - <p>A <code>JoinNode</code> may have at most one outgoing <code>Succession</code>.</p> + + + <p>A <code>CalculationUsage</code> must specialize directly or indirectly the <code>CalculationUsage</code> <em><code>Calculations::calculations</code></em> from the Systems Model Library.</p> - + OCL2.0 - sourceConnector->selectByKind(Succession)->size() <= 1 + specializesFromLibrary('Calculations::calculations') - - - <p>A <code>JoinNode</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::joins</code></em> from the Systems Model Library.</p> - - + + OCL2.0 - specializesFromLibrary('Actions::Action::join') + owningType <> null and +(owningType.oclIsKindOf(CalculationDefinition) or + owningType.oclIsKindOf(CalculationUsage)) implies + specializesFromLibrary('Calculations::Calculation::subcalculations') - + + + + + + + <p>The <ode>Function</code> that is the <code>type</code> of this <code>CalculationUsage</code>. Nominally, this would be a <code>CalculationDefinition</code>, but a kernel <code>Function</code> is also allowed, to permit use of <code>Functions</code> from the Kernel Model Libraries.</p> + + + + + + + + + + <p>A <code>CalculationUsage</code> is not model-level evaluable.</p> + + + + OCL2.0 + false + + + + + + + + + + + + - - - <p>A <code>WhileLoopActionUsage</code> is a <code>LoopActionUsage</code> that specifies that the <code>bodyAction</code> <code>ActionUsage</code> should be performed repeatedly while the result of the <code>whileArgument</code> <code>Expression</code> is true or until the result of the <code>untilArgument</code> <code>Expression</code> (if provided) is true. The <code>whileArgument</code> <code>Expression</code> is evaluated before each (possible) performance of the <code>bodyAction</code>, and the <code>untilArgument</code> <code>Expression</code> is evaluated after each performance of the <code>bodyAction</code>.</p> - - - - <p>A composite <code>WhileLoopActionUsage</code> that is a subaction usage must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::whileLoops</code></em> from the Systems Model Library.</p> + + + <p>A <code>MetadataDefinition</code> is an <code>ItemDefinition</code> that is also a <code>Metaclass</code>.</p> + + + + <p>A <code>MetadataDefinition</code> must directly or indirectly specialize the base <code>MetadataDefinition</code> <code><em>Metadata::MetadataItem</em></code> from the Systems Model Library.</p> - + OCL2.0 - isSubactionUsage() implies - specializesFromLibrary('Actions::Action::whileLoops') + specializesFromLibrary('Metadata::MetadataItem') - - - <p>The <code>whileArgument</code> of a <code>WhileLoopActionUsage</code> is its third input <code>parameter</code>, which, if it exists, must be an <code>Expression</code>.</p> + + + + + + + + + + + + + + + + <p>A <code>MetadataUsage</code> is a <code>Usage</code> and a <code>MetadataFeature</code>, used to annotate other <code>Elements</code> in a system model with metadata. As a <code>MetadataFeature</code>, its type must be a <code>Metaclass</code>, which will nominally be a <code>MetadataDefinition</code>. However, any kernel <code>Metaclass</code> is also allowed, to permit use of <code>Metaclasses</code> from the Kernel Model Libraries.</p> + + + + <p>A <code>MetadataUsage</code> must directly or indirectly specialize the base <code>MetadataUsage</code> <code><em>Metadata::metadataItems</em></code> from the Systems Model Library.</p> - + OCL2.0 - untilArgument = - let parameter : Feature = inputParameter(3) in - if parameter <> null and parameter.oclIsKindOf(Expression) then - parameter.oclAsType(Expression) - else - null - endif - + specializesFromLibrary('Metadata::metadataItems') - - - <p>A <code>WhileLoopActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::whileLoopActions</code></em> from the Systems Model Library.</p> + + + + + + + <p>The <code>MetadataDefinition</code> that is the <code>definition</code> of this <code>MetadataUsage</code>.</p> - - OCL2.0 - specializesFromLibrary('Actions::whileLoopActions') - - - - - <p>The <code>whileArgument</code> of a <code>WhileLoopActionUsage</code> is its first input <code>parameter</code>, which must be an <code>Expression</code>.</p> + + + + + + + + + + <p>An <code>AnalysisCaseDefinition</code> is a <code>CaseDefinition</code> for the case of carrying out an analysis.</p> + + + + <p>The <code>resultExpression</code> of a <code>AnalysisCaseDefinition</code> is the <code>ownedResultExpression</code> of its <code>ResultExpressionMembership</code>, if any.</p> - + OCL2.0 - whileArgument = - let parameter : Feature = inputParameter(1) in - if parameter <> null and parameter.oclIsKindOf(Expression) then - parameter.oclAsType(Expression) - else - null - endif - + resultExpression = + let results : OrderedSet(ResultExpressionMembership) = + featureMembersip-> + selectByKind(ResultExpressionMembership) in + if results->isEmpty() then null + else results->first().ownedResultExpression + endif - - - <p>A <code>WhileLoopActionUsage</code> must have at least two owned <code>input</code> <code>parameters</code>.</p> + + + <p>An <code>AnalysisCaseDefinition</code> must directly or indirectly specialize the base <code>AnalysisCaseDefinition</code> <code><em>AnalysisCases::AnalysisCase</em></code> from the Systems Model Library.</p> - + OCL2.0 - inputParameters()->size() >= 2 + specializesFromLibrary('AnalysisCases::AnalysisCase') - - - - <p>The <code>Expression</code> whose result, if true, determines that the <code>bodyAction</code> should continue to be performed. It is the first owned <code>parameter</code> of the <code>WhileLoopActionUsage</code>.</p> - - - - - - - - - <p>The <code>Expression</code> whose result, if false, determines that the <code>bodyAction</code> should continue to be performed. It is the (optional) third owned <code>parameter</code> of the <code>WhileLoopActionUsage</code>.</p> + + + + <p>An <code>Expression</code> used to compute the <code>result</code> of the <code>AnalysisCaseDefinition</code>, owned via a <code>ResultExpressionMembership</code>.</p> - - + + + + - - - - <p>The PerformActionUsages that have a certain ActionUsage as their <code>performedAction</code>.</p> - - - - - - - - - <p>The AssignmentActionUsages that gave a certain <code>referent</code> Expression.</p> - - - - - - - - - - <p>The Activities that feature a certain ActionUsage.</p> - - - - - - - - - - - <p>The <code>SendActionUsage</code> that has a certain <code>Expression</code> as its <code>itemsArgument</code>.</p> - - - - - - - - - <p>The <code>ForLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>seqArgument</code>.</p> - - - - - - - - - <p>The UseCaseUsage that includes a certain <code>includedUseCase</code>.</p> - - - - - - - - <p>A <code>UseCaseDefinition</code> is a <code>CaseDefinition</code> that specifies a set of actions performed by its subject, in interaction with one or more actors external to the subject. The objective is to yield an observable result that is of value to one or more of the actors.</p> - + + + <p>An <code>AnalysisCaseUsage</code> is a <code>Usage</code> of an <code>AnalysisCaseDefinition</code>.</p> - - - <p>The <code>includedUseCases<code> of a <code>UseCaseDefinition</code> are the <code>useCaseIncludeds</code> of the <code>IncludeUseCaseUsages</code> owned by the <code>UseCaseDefinition<code>.</p> + + + <p>The <code>resultExpression</code> of a <code>AnalysisCaseUsage</code> is the <code>ownedResultExpression</code> of its <code>ResultExpressionMembership</code>, if any.</p> - + OCL2.0 - includedUseCase = ownedUseCase-> - selectByKind(IncludeUseCaseUsage). - useCaseIncluded + resultExpression = + let results : OrderedSet(ResultExpressionMembership) = + featureMembersip-> + selectByKind(ResultExpressionMembership) in + if results->isEmpty() then null + else results->first().ownedResultExpression + endif - - - <p>A <code>UseCaseDefinition</code> must directly or indirectly specializes the base <code>UseCaseDefinition</code> <code><em>UseCases::UseCase</em></code> from the Systems Model Library.</p> + + + <p>An <code>AnalysisCaseUsage</code> must directly or indirectly specialize the base <code>AnalysisCaseUsage</code> <code><em>AnalysisCases::analysisCases</em></code> from the Systems Model Library.</p> - - + + OCL2.0 + specializesFromLibrary('AnalysisCases::analysisCases') + + + + + <p>A composite <code>AnalysisCaseUsage</code> whose <code>owningType</code> is an <code>AnalysisCaseDefinition</code> or <code>AnalysisCaseUsage</code> must specialize the <code>AnalysisCaseUsage</code> <code><em>AnalysisCases::AnalysisCase::subAnalysisCases</code> from the Systems Model Library.</p> - + OCL2.0 - specializesFromLibrary('UseCases::UseCase') + isComposite and owningType <> null and + (owningType.oclIsKindOf(AnalysisCaseDefinition) or + owningType.oclIsKindOf(AnalysisCaseUsage)) implies + specializesFromLibrary('AnalysisCases::AnalysisCase::subAnalysisCases') - - - - <p>The <code>UseCaseUsages</code> that are included by this <code>UseCaseDefinition</code>, which are the <code>useCaseIncludeds</code> of the <code>IncludeUseCaseUsages</code> owned by this <code>UseCaseDefinition<code>.</p> + + + + <p>The <code>AnalysisCaseDefinition</code> that is the <code>definition</code> of this <code>AnalysisCaseUsage</code>.</p> - - + + + + + + <p>An <code>Expression</code> used to compute the <code>result</code> of the <code>AnalysisCaseUsage</code>, owned via a <code>ResultExpressionMembership</code>.</p> + + + + + - - - - <p>The UseCaseUsages being typed by a certain UseCaseDefinition.</p> + + + + <p>The AnalysisCaseDefinitions that have a certain Expression as their <code>resultExpression</code>.</p> + + + + + + + + + + + <p>The AnalysisCaseUsages being typed by a certain AnalysisCaseDefinition.</p> - - + + - - - - <p>The IncludeUseCaseUsages that have a certain UseCaseUsage as their <code>includedUseCase</code>.</p> + + + + <p>The AnalysisCaseUsages that have a certain Expression as their <code>resultExpression</code>.</p> - - + + + - - - <p>An <code>IncludeUseCaseUsage</code> is a <code>UseCaseUsage</code> that represents the inclusion of a <code>UseCaseUsage</code> by a <code>UseCaseDefinition</code> or <code>UseCaseUsage</code>. Unless it is the <code>IncludeUseCaseUsage</code> itself, the <code>UseCaseUsage</code> to be included is related to the <code>includedUseCase</code> by a <code>ReferenceSubsetting</code> <code>Relationship</code>. An <code>IncludeUseCaseUsage</code> is also a PerformActionUsage, with its <code>useCaseIncluded</code> as the <code>performedAction</code>.</p> - + + + <p>A <code>FlowDefinition</code> is an <code>ActionDefinition</code> that is also an <code>Interaction</code> (which is both a KerML <code>Behavior</code> and <code>Association</code>), representing flows between <code>Usages</code>.</p> - - - <p>A <code>IncludeUseCaseUsage</code> whose <code>owningType</code> is a <code>UseCaseDefinition</code> or <code>UseCaseUsage</code> must directly or indirectly specialize the <code>UseCaseUsage</code> <em><code>UseCases::UseCase::includedUseCases</code></em> from the Systems Model Library.</p> + + + <p>A <code>FlowDefinition</code> must directly or indirectly specialize the base <code>FlowDefinition</code> <em><code>Flows::MessageAction</code></em> from the Systems Model Library.</p> - + OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(UseCaseDefinition) or - owningType.oclIsKindOf(UseCaseUsage) implies - specializesFromLibrary('UseCases::UseCase::includedUseCases') + specializesFromLibrary('Flows::MessageAction') - - - <p>If an <code>IncludeUseCaseUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of the <code>referencedFeature</code> must be a <code>UseCaseUsage</code>.</p> + + + <p>A binary <code>FlowDefinition</code> must directly or indirectly specialize the base <code>FlowDefinition<code> <em><code>Flows::Message</code></em> from the Systems Model Library.</p> - + OCL2.0 - referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(UseCaseUsage) + flowEnd->size() = 2 implies + specializesFromLibrary('Flows::Message') - - - - - <p>The <code>UseCaseUsage</code> to be included by this <code>IncludeUseCaseUsage</code>. It is the <code>performedAction</code> of the <code>IncludeUseCaseUsage</code> considered as a <code>PerformActionUsage</code>, which must be a <code>UseCaseUsage</code>.</p> - + + + <p>A <code>FlowDefinition</code> may not have more than two <code>flowEnds</code>.</p> - - + + OCL2.0 + flowEnd->size() <= 2 + + + + + + + + + <p>The <code>Usages</code> that define the things related by the <code>FlowDefinition</code>.</p> + + + + - - - - <p>The UseCaseDefinition that includes a certain <code>includedUseCase</code>.</p> + + + + <p>The <code>FlowDefinitions<code> that have a certain Usage as <code>flowEnd</code>.</p> - - + + + - - - <p>A <code>UseCaseUsage</code> is a <code>Usage</code> of a <code>UseCaseDefinition</code>.</p> + + + + <p>The <code>FlowUsages<code> that have a certain <code>Interaction</code> as their <code>flowDefinition</code>.</p> + + + + + + + + <p>A <code>FlowUsage</code> is an <code>ActionUsage</code> that is also a <code>ConnectorAsUsage</code> and a KerML <code>Flow</code>.</p> - - - <p>The <code>includedUseCases<code> of a <code>UseCaseUsage</code> are the <code>useCaseIncludeds</code> of the <code>IncludeUseCaseUsages</code> owned by the <code>UseCaseUsage<code>.</p> + + + <p>A <code>FlowUsage</code> must directly or indirectly specialize the base <code>FlowUsage</code> <em><code>Flows::messages</code></em> from the Systems Library model.</p> - + OCL2.0 - includedUseCase = ownedUseCase-> - selectByKind(IncludeUseCaseUsage). - useCaseIncluded + specializesFromLibrary('Flows::messages') - - - <p>A <code>UseCaseUsage</code> must directly or indirectly specializes the base <code>UseCaseUsage</code> <em><code>UseCases::useCases</code></em> from the Systems Model Library.</p> + + + <p>If a <code>FlowUsage</code> has <code>ownedEndFeatures</code>, it must directly or indirectly specialize the <code>FlowUsage</code> <em><code>Flows::flows</code></em> from the Systems Model Library.</p> - + OCL2.0 - specializesFromLibrary('UseCases::useCases') + ownedEndFeatures->notEmpty() implies + specializesFromLibrary('Flows::flows') - - - <p>A composite <code>UseCaseUsage</code> whose <code>owningType</code> is a <code>UseCaseDefinition</code> or <code>UseCaseUsage</code> must specialize the <code>UseCaseUsage</code> <em><code>UseCases::UseCase::subUseCases</code></em> from the Systems Model Library.</p> + + + + + + + + <p>The <code>Interactions</code> that are the <code>types</code> of this <code>FlowUsage</code>. Nominally, these are <code>FlowDefinitions</code>, but other kinds of Kernel <code>Interactions</code> are also allowed, to permit use of Interactions from the Kernel Model Libraries.</p> - + + + + + + + + + + <p>A <code>SuccessionFlowUsage</code> is a <code>FlowUsage</code> that is also a KerML <code>SuccessionFlow</code>.</p> + + + + <p>A <code>SuccessionFlowUsage</code> must directly or indirectly specialize the base <code>FlowUsage</code> <em><code>Flows::successionFlows</code></em> from the Systems Library model.</p> + + OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(UseCaseDefinition) or - owningType.oclIsKindOf(UseCaseUsage)) implies - specializesFromLibrary('UseCases::UseCase::subUseCases') + specializesFromLibrary('Flows::successionFlows') - - - - <p>The <code>UseCaseDefinition</code> that is the <code>definition</code> of this <code>UseCaseUsage</code>.</p> + + + + + + + + + <p>The ExhibitStateUsages that have a certain StateUsage as their <tt>exhibitedState</tt>.</p> - - - - - - <p>The <code>UseCaseUsages</code> that are included by this <code>UseCaseUse</code>, which are the <code>useCaseIncludeds</code> of the <code>IncludeUseCaseUsages</code> owned by this <code>UseCaseUsage<code>.</p> + + + + + + + + <p>The TransitionFeatureMembership that owns a certain Step (if any).</p> - - - + + + + - - - <p><code>PortionKind</code> is an enumeration of the specific kinds of <code><em>Occurrence</em></code> portions that can be represented by an <code>OccurrenceUsage</code>.</p> - - - - <p>A time slice of an <code>Occurrence</code> (a portion over time).</p> + + + + <p>The TransitionUsage incoming to a certain target <tt>ActionUsage</tt>.</p> - - - - <p>A snapshot of an <code>Occurrence</code> (a time slice with zero duration).</p> + + + + + + + + <p>The StateDefinitions with a certain <tt>doAction</tt>.</p> - + + + - - - - <p>The EventOccurrenceUsages that reference a certain <code>eventOccurrence</code>.</p> + + + + <p>The StateDefinitions with a certain <tt>exitAction</tt>.</p> - - + + - - - <p>An <code>OccurrenceUsage</code> is a <code>Usage</code> whose <code>types</code> are all <code>Classes</code>. Nominally, if a <code>type</code> is an <code>OccurrenceDefinition</code>, an <code>OccurrenceUsage</code> is a <code>Usage</code> of that <code>OccurrenceDefinition</code> within a system. However, other types of Kernel <code>Classes</code> are also allowed, to permit use of <code>Classes</code> from the Kernel Model Libraries.</p> + + + + <p>The TransitionUsage outgoing from a certain source <tt>ActionUsage</tt>.</p> + + + + + + + + <p>A <code>StateUsage</code> is an <code>ActionUsage</code> that is nominally the <code>Usage</code> of a <code>StateDefinition</code>. However, other kinds of kernel <code>Behaviors</code> are also allowed as <code>types</code>, to permit use of <code>Behaviors</code from the Kernel Model Libraries.</p> + +<p>A <code>StateUsage</code> may be related to up to three of its <code>ownedFeatures</code> by <code>StateSubactionMembership</code> <code>Relationships</code>, all of different <code>kinds</code>, corresponding to the entry, do and exit actions of the <code>StateUsage</code>.</p> - - - <p>The <code>individualDefinition</code> of an <code>OccurrenceUsage</code> is the <code>occurrenceDefinition</code> that is an <code>OccurrenceDefinition</code> with <code>isIndividual = true</code>, if any.</p> + + + <p>The <code>doAction</code> of a <code>StateUsage</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = do</code>.</p> - + OCL2.0 - individualDefinition = - let individualDefinitions : OrderedSet(OccurrenceDefinition) = - occurrenceDefinition-> - selectByKind(OccurrenceDefinition)-> - select(isIndividual) in - if individualDefinitions->isEmpty() then null - else individualDefinitions->first() endif + doAction = + let doMemberships : Sequence(StateSubactionMembership) = + ownedMembership-> + selectByKind(StateSubactionMembership)-> + select(kind = StateSubactionKind::do) in + if doMemberships->isEmpty() then null + else doMemberships->at(1) + endif - - - <p>If an <code>OccurrenceUsage</code> has <code>isIndividual = true</code>, then it must have an <code>individualDefinition</code>.</p> + + + <p>The <code>entryAction</code> of a <code>StateUsage</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = entry</code>.</p> - + OCL2.0 - isIndividual implies individualDefinition <> null + entryAction = + let entryMemberships : Sequence(StateSubactionMembership) = + ownedMembership-> + selectByKind(StateSubactionMembership)-> + select(kind = StateSubactionKind::entry) in + if entryMemberships->isEmpty() then null + else entryMemberships->at(1) + endif - - - <p>An <code>OccurrenceUsage</code> must directly or indirectly specialize <code><em>Occurrences::occurrences</em></code> from the Kernel Semantic Library.</p> + + + <p>If a <code>StateUsage</code> is parallel, then its <code>nestedActions</code> (which includes <code>nestedStates</code>) must not have any <code>incomingTransitions</code> or <code>outgoingTransitions</code>.</p> - + OCL2.0 - specializesFromLibrary('Occurrences::occurrences') + isParallel implies + nestedAction.incomingTransition->isEmpty() and + nestedAction.outgoingTransition->isEmpty() - - - <p>A composite <code>OccurrenceUsage</code>, whose <code>ownedType</code> is a <code>Class</code>, another <code>OccurrenceUsage</code>, or any kind of <code>Feature</code> typed by a <code>Class</code>, must directly or indirectly specialize <em><code>Occurrences::Occurrence::suboccurrences</code></em>. + + + <p>A <code>StateUsage</code> that is a substate usage with a non-parallel owning <code>StateDefinition</code> or <code>StateUsage</code> must directly or indirectly specialize the <code>StateUsage</code> <em><code>States::StateAction::exclusiveStates</code></em> from the Systems Model Library.</p> - + OCL2.0 - isComposite and -owningType <> null and -(owningType.oclIsKindOf(Class) or - owningType.oclIsKindOf(OccurrenceUsage) or - owningType.oclIsKindOf(Feature) and - owningType.oclAsType(Feature).type-> - exists(oclIsKind(Class))) implies - specializesFromLibrary('Occurrences::Occurrence::suboccurrences') + isSubstateUsage(false) implies + specializesFromLibrary('States::StateAction::exclusiveStates') - - - <p>An <code>OccurrenceUsage</code> must have at most one <code>occurrenceDefinition</code> with <code>isIndividual = true</code>.</p> + + + <p>The <code>exitAction</code> of a <code>StateUsage</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = exit +</code>.</p> - + OCL2.0 - occurrenceDefinition-> - selectByKind(OccurrenceDefinition)-> - select(isIndividual).size() <= 1 + exitAction = + let exitMemberships : Sequence(StateSubactionMembership) = + ownedMembership-> + selectByKind(StateSubactionMembership)-> + select(kind = StateSubactionKind::exit) in + if exitMemberships->isEmpty() then null + else exitMemberships->at(1) + endif - - - <p>If an <code>OccurrenceUsage</code> has <code>portionKind = snapshot</code>, then it must directly or indirectly specialize <em><code>Occurrences::Occurrence::snapshots</code></em> from the Kernel Semantic Library.</p> + + + <p>A <code>StateUsage</code> must directly or indirectly specialize the <code>StateUsage</code> <em><code>States::stateActions</code></em> from the Systems Model Library.</p> - + OCL2.0 - portionKind = PortionKind::snapshot implies - specializesFromLibrary('Occurrences::Occurrence::snapshots') + specializesFromLibrary('States::stateActions') - - - <p>If an <code>OccurrenceUsage</code> has <code>portionKind = timeslice</code>, then it must directly or indirectly specialize <em><code>Occurrences::Occurrence::timeSlices</code></em> from the Kernel Semantic Library.</p> + + + <p>A <code>StateUsage</code> must not have more than one owned <code>StateSubactionMembership</code> of each <code>kind</code>.</p> - + OCL2.0 - portionKind = PortionKind::timeslice implies - specializesFromLibrary('Occurrences::Occurrence::timeSlices') + ownedMembership-> + selectByKind(StateSubactionMembership)-> + isUnique(kind) - - - <p>If an <code>OccurrenceUsage</code> has a non-null <code>portionKind</code>, then its <code>owningType</code> must be an <code>OccurrenceDefinition</code> or an <code>OccurrenceUsage</code>.</p> + + + <p>A <code>StateUsage</code> that is a substate usage with a owning <code>StateDefinition</code> or <code>StateUsage</code> that is parallel must directly or indirectly specialize the <code>StateUsage</code> <em><code>States::StateAction::substates</code></em> from the Systems Model Library.</p> - + OCL2.0 - portionKind <> null implies - owningType <> null and - (owningType.oclIsKindOf(OccurrenceDefinition) or - owningType.oclIsKindOf(OccurrenceUsage)) + isSubstateUsage(true) implies + specializesFromLibrary('States::StateAction::substates') - - - <p>If an <code>OccurrenceUsage</code> has a non-null <code>portionKind</code>, then it must have <code>isPortion = true</code>.</p> + + + <p>A composite <code>StateUsage</code> whose <code>owningType</code> is a <code>PartDefinition</code> or <code>PartUsage</code> must directly or indirectly specialize the <code>StateUsage</code> <em><code>Parts::Part::ownedStates</code></em> from the Systems Model Library.</p> - + OCL2.0 - portionKind <> null implies isPortion + isComposite and owningType <> null and +(owningType.oclIsKindOf(PartDefinition) or + owningType.oclIsKindOf(PartUsage)) implies + specializesFromLibrary('Parts::Part::ownedStates') - - - - <p>The <code>Classes</code> that are the types of this <code>OccurrenceUsage</code>. Nominally, these are <code>OccurrenceDefinitions</code>, but other kinds of kernel <code>Classes</code> are also allowed, to permit use of <code>Classes</code> from the Kernel Model Libraries.</p> + + + + <p>The <code>Behaviors</code> that are the <code>types</code> of this <code>StateUsage</code>. Nominally, these would be <code>StateDefinitions</code>, but kernel <code>Behaviors</code> are also allowed, to permit use of <code>Behaviors</code> from the Kernel Model Libraries.</p> - - - + + + - - - <p>The at most one <code>occurrenceDefinition</code> that has <code>isIndividual = true</code>.</p> + + + <p>The <code>ActionUsage</code> of this <code>StateUsage</code> to be performed on entry to the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateUsage</code> by a <code>StateSubactionMembership</code> with <code>kind = entry</code>.</p> - - + + - - - <p>Whether this <code>OccurrenceUsage</code> represents the usage of the specific individual represented by its <code>individualDefinition</code>.</p> + + + <p>The <code>ActionUsage</code> of this <code>StateUsage</code> to be performed while in the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateUsage</code> by a <code>StateSubactionMembership</code> with <code>kind = do</code>.</p> - - + + - - - <p>The kind of temporal portion (time slice or snapshot) is represented by this <code>OccurrenceUsage</code>. If <code>portionKind</code> is not null, then the <code>owningType</code> of the <code>OccurrenceUsage</code> must be non-null, and the <code>OccurrenceUsage</code> represents portions of the featuring instance of the <code>owningType</code>.</p> + + + <p>The <code>ActionUsage</code> of this <code>StateUsage</code> to be performed on exit to the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateUsage</code> by a <code>StateSubactionMembership</code> with <code>kind = exit</code>.</p> - - + + - - - - <p>An <code>EventOccurrenceUsage</code> is an <code>OccurrenceUsage</code> that represents another <code>OccurrenceUsage</code> occurring as a <code><em>suboccurrence</em></code> of the containing occurrence of the <code>EventOccurrenceUsage</code>. Unless it is the <code>EventOccurrenceUsage</code> itself, the referenced <code>OccurrenceUsage</code> is related to the <code>EventOccurrenceUsage</code> by a <code>ReferenceSubsetting</code> <code>Relationship</code>.</p> - -<p>If the <code>EventOccurrenceUsage</code> is owned by an <code>OccurrenceDefinition</code> or <code>OccurrenceUsage</code>, then it also subsets the <em><code>timeEnclosedOccurrences</code></em> property of the <code>Class</code> <em><code>Occurrence</code></em> from the Kernel Semantic Library model <em><code>Occurrences</code></em>.</p> - - - - <p>If an <code>EventOccurrenceUsage</code> has no <code>ownedReferenceSubsetting</code>, then its <code>eventOccurrence</code> is the <code>EventOccurrenceUsage</code> itself. Otherwise, the <code>eventOccurrence</code> is the <code>featureTarget</code> of the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code> (which must be an <code>OccurrenceUsage</code>).</p> + + + <p>Whether the <code>nestedStates</code> of this <code>StateUsage</code> are to all be performed in parallel. If true, none of the <code>nestedActions</code> (which include <code>nestedStates</code>) may have any incoming or outgoing <code>Transitions</code>. If false, only one <code>nestedState</code> may be performed at a time.</p> + - - OCL2.0 - eventOccurrence = - if referencedFeatureTarget() = null then self - else if referencedFeatureTarget().oclIsKindOf(OccurrenceUsage) then - referencedFeatureTarget().oclAsType(OccurrenceUsage) - else null - endif endif - - - - - <p>If an <code>EventOccurrenceUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of the <code>referencedFeature</code> must be an <code>OccurrenceUsage</code>.</p> + + + + + + <p>Check if this <code>StateUsage</code> is composite and has an <code>owningType</code> that is a <code>StateDefinition</code> or <code>StateUsage</code> with the given value of <code>isParallel</code>, but is <em>not</em> an <code>entryAction</code>, <code>doAction</code>, or <code>exitAction</code>. If so, then it represents a <code><em>StateAction</em></code> that is a <code><em>substate</em></code> or <code><em>exclusiveState</em></code> (for <code>isParallel = false</code>) of another <code><em>StateAction</em></code>.</p> - - OCL2.0 - referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(OccurrenceUsage) - - - - - <p>If an <code>EventOccurrenceUsage</code> has an <code>owningType</code> that is an <code>OccurrenceDefinition</code> or <code>OccurrenceUsage</code>, then it must directly or indirectly specialize the <code>Feature</code> <code><em>Occurrences::Occurrence::timeEnclosedOccurrences</em></code>.</p> + + + OCL2.0 + isComposite and owningType <> null and +(owningType.oclIsKindOf(StateDefinition) and + owningType.oclAsType(StateDefinition).isParallel = isParallel or + owningType.oclIsKindOf(StateUsage) and + owningType.oclAsType(StateUsage).isParallel = isParallel) and +not owningFeatureMembership.oclIsKindOf(StateSubactionMembership) + + + + + + + + + + + + + <p>A <code>TransitionFeatureMembership</code> is a <code>FeatureMembership</code> for a trigger, guard or effect of a <code>TransitionUsage</code>, whose <code>transitionFeature</code> is a <code>AcceptActionUsage</code>, <em><code>Boolean</code></em>-valued <code>Expression</code> or <code>ActionUsage</code>, depending on its <code>kind</code>. </p> + + + + <p>If the <code>kind</code> of a <code>TransitionUsage</code> is <code>trigger</code>, then its <code>transitionFeature</code> must be a kind of <code>AcceptActionUsage</code>.</p> - + OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(OccurrenceDefinition) or - owningType.oclIsKindOf(OccurrenceUsage)) implies - specializesFromLibrary('Occurrences::Occurrence::timeEnclosedOccurrences') + kind = TransitionFeatureKind::trigger implies + transitionFeature.oclIsKindOf(AcceptActionUsage) - - - <p>An <code>EventOccurrenceUsage</code> must be referential.</p> + + + <p>The <code>owningType</code> of a <code>TransitionFeatureMembership</code> must be a <code>TransitionUsage</code>.</p> - + OCL2.0 - isReference + owningType.oclIsKindOf(TransitionUsage) - - - - <p>The <code>OccurrenceUsage</code> referenced as an event by this <code>EventOccurrenceUsage</code>. It is the <code>referenceFeature</code> of the <code>ownedReferenceSubsetting</code> for the <code>EventOccurrenceUsage</code>, if there is one, and, otherwise, the <code>EventOccurrenceUsage</code> itself.</p> - - - - - - - <p>Always true for an <code>EventOccurrenceUsage</code>.</p> - - - - - - - - - <p>The <code>OccurrenceUsages</code> being typed by a certain <code>Class</code>.</p> - - - - - - - - <p>An <code>OccurrenceDefinition</code> is a <code>Definition</code> of a <code>Class</code> of individuals that have an independent life over time and potentially an extent over space. This includes both structural things and behaviors that act on such structures. If <code>isIndividual</code> is true, then the <code>OccurrenceDefinition</code> is constrained to have (at most) a single instance that is the entire life of a single individual.</p> - - - - <p>An <code>OccurrenceDefinition</code> with <code>isIndividual = true</code> must directly or indirectly specialize <em><code>Occurrences::Life</code></em> from the Kernel Semantic Library.</p> + + + <p>If the <code>kind</code> of a <code>TransitionUsage</code> is <code>guard</code>, then its <code>transitionFeature</code> must be a kind of <code>Expression</code> whose result is a <em><code>Boolean</code></em> value.</p> - + OCL2.0 - isIndividual implies specializesFromLibrary('Occurrences::Life') + kind = TransitionFeatureKind::guard implies + transitionFeature.oclIsKindOf(Expression) and + let guard : Expression = transitionFeature.oclIsKindOf(Expression) in + guard.result.specializesFromLibrary('ScalarValues::Boolean') and + guard.result.multiplicity <> null and + guard.result.multiplicity.hasBounds(1,1) - - - <p>An <code>OccurrenceDefinition</code> with <code>isIndividual = true</code> must have a <code>multiplicity</code> that specializes <em><code>Base::zeroOrOne</code></em> from the Kernel Semantic Library.</p> + + + <p>If the <code>kind</code> of a <code>TransitionUsage</code> is <code>effect</code>, then its <code>transitionFeature</code> must be a kind of <code>ActionUsage</code>.</p> - + OCL2.0 - isIndividual implies - multiplicity <> null and - multiplicity.specializesFromLibrary('Base::zeroOrOne') + kind = TransitionFeatureKind::effect implies + transitionFeature.oclIsKindOf(ActionUsage) - - - + + - - - <p>Whether this <code>OccurrenceDefinition</code> is constrained to represent at most one thing.</p> + + + <p>Whether this <code>TransitionFeatureMembership </code> is for a <code>trigger</code>, <code>guard</code> or <code>effect</code>.</p> - - + + + + <p>The <code>Step</code> that is the <code>ownedMemberFeature</code> of this <code>TransitionFeatureMembership</code>.</p> + + + + + - - - - <p>The <code>OccurrenceUsage</code> that has a certain <code>individualDefinition</code>.</p> + + + + <p>The Transition that owns a certain Succession.</p> - - + + + - - - <p>A <code>PartUsage</code> is a usage of a <code>PartDefinition</code> to represent a system or a part of a system. At least one of the <code>itemDefinitions</code> of the <code>PartUsage</code> must be a <code>PartDefinition</code>.</p> - -<p>A <code>PartUsage</code> must subset, directly or indirectly, the base <code>PartUsage</code> <em><code>parts</code></em> from the Systems Model Library.</p> + + + <p>A <code>TransitionActionKind</code> indicates whether the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is a trigger, guard or effect.</p> - - - <p>The <code>partDefinitions</code> of an <code>PartUsage</code> are those <code>itemDefinitions</code> that are <code>PartDefinitions</code>.</p> - - - OCL2.0 - itemDefinition->selectByKind(PartDefinition) - - - - - <p>At least one of the <code>itemDefinitions</code> of a <code>PartUsage</code> must be a <code>PartDefinition</code>.</p> - - - OCL2.0 - partDefinition->notEmpty() - - - - - <p>A <code>PartUsage</code> must directly or indirectly specialize the <code>PartUsage</code> <em><code>Parts::parts</code></em> from the Systems Model Library.</p> + + + <p>Indicates that the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is a <code>triggerAction</code>.</p> - - OCL2.0 - specializesFromLibrary('Parts::parts') - - - - - <p>A composite <code>PartUsage</code> whose <code>owningType</code> is a <code>ItemDefinition</code> or <code>ItemUsage</code> must directly or indirectly specialize the <code>PartUsage</code> <em><code>Items::Item::subparts</code></em> from the Systems Model Library.</p> + + + + <p>Indicates that the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is a <code>guardExpression</code>.</p> - - OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(ItemDefinition) or - owningType.oclIsKindOf(ItemUsage)) implies - specializesFromLibrary('Items::Item::subparts') - - - - - <p>If a <code>PartUsage</code> is owned via an <code>ActorMembership</code>, then it must directly or indirectly specialize either <code><em>Requirements::RequirementCheck::actors</em></code> (if its <code>owningType</code> is a <code>RequirementDefinition</code> or <code>RequirementUsage</code> or <code><em>Cases::Case::actors</em></code> (otherwise).</p> + + + + <p>Indicates that the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is an <code>effectAction</code>.</p> - - OCL2.0 - owningFeatureMembership <> null and -owningFeatureMembership.oclIsKindOf(ActorMembership) implies - if owningType.oclIsKindOf(RequirementDefinition) or - owningType.oclIsKindOf(RequirementUsage) - then specializesFromLibrary('Requirements::RequirementCheck::actors') - else specializesFromLibrary('Cases::Case::actors') - - - - - <p>If a <code>PartUsage</code> is owned via a <code>StakeholderMembership</code>, then it must directly or indirectly specialize either <code><em>Requirements::RequirementCheck::stakeholders</em></code>.</p> + + + + + + <p>The StateUsages with a certain <tt>exitAction</tt>.</p> - - OCL2.0 - owningFeatureMembership <> null and -owningFeatureMembership.oclIsKindOf(StakeholderMembership) implies - specializesFromLibrary('Requirements::RequirementCheck::stakeholders') - - - - - - <p>The <code>itemDefinitions</code> of this PartUsage that are PartDefinitions.</p> + + + + + + + + <p>The StateDefinitions featuring a certain StateUsage.</p> - - - + + + + - - - <p>A <code>PartDefinition</code> is an <code>ItemDefinition</code> of a <code>Class</code> of systems or parts of systems. Note that all parts may be considered items for certain purposes, but not all items are parts that can perform actions within a system.</p> - - - - - </p>A <code>PartDefinition</code> must directly or indirectly specialize the base <code>PartDefinition</code> <em><code>Parts::Part</code></em> from the Systems Model Library.</p> + + + + <p>The Behaviors that are the types of this StateUsage. Nominally, these would be StateDefinition, but non-StateDefinition Behaviors are also allowed, to permit use of Behaviors from the Kernel Library.</p> - - OCL2.0 - specializesFromLibrary('Parts::Part') - - - + + + - - - - <p>The PartUsages typed by a certain PartDefinition.</p> + + + + <p>The TransitionUsage that is guarded by a certain Expression.</p> - - + + + - - - - <p>The Usage in which the <code>nestedCalculation<code> is nested.</p> + + + + <p>The StateUsages with a certain <tt>doAction</tt>.</p> - - + + - - - - <p>The CalculationUsage being typed by a certain Function.</p> + + + + <p>The StateSubactionMembership that is the owner of a certain ActionUsage (if any).</p> - - - - + + + - - - <p>A <code>CalculationUsage</code> is an <code>ActionUsage</code> that is also an <code>Expression</code>, and, so, is typed by a <code>Function</code>. Nominally, if the <code>type</code> is a <code>CalculationDefinition</code>, a <code>CalculationUsage</code> is a <code>Usage</code> of that <code>CalculationDefinition</code> within a system. However, other kinds of kernel <code>Functions</code> are also allowed, to permit use of <code>Functions</code> from the Kernel Model Libraries.</p> + + + <p>A <code>StateSubactionMembership</code> is a <code>FeatureMembership</code> for an entry, do or exit <code>ActionUsage<code> of a <code>StateDefinition</code> or <code>StateUsage</code>.</p> - - - <p>A <code>CalculationUsage</code> must specialize directly or indirectly the <code>CalculationUsage</code> <em><code>Calculations::calculations</code></em> from the Systems Model Library.</p> + + + <p>The <code>owningType</code> of a <code>StateSubactionMembership</code> must be a <code>StateDefinition</code> or a <code>StateUsage</code>.</p> - - OCL2.0 - specializesFromLibrary('Calculations::calculations') - - - - + OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(CalculationDefinition) or - owningType.oclIsKindOf(CalculationUsage)) implies - specializesFromLibrary('Calculations::Calculation::subcalculations') + owningType.oclIsKindOf(StateDefinition) or +owningType.oclIsKindOf(StateUsage) - - + + - - - - <p>The <ode>Function</code> that is the <code>type</code> of this <code>CalculationUsage</code>. Nominally, this would be a <code>CalculationDefinition</code>, but a kernel <code>Function</code> is also allowed, to permit use of <code>Functions</code> from the Kernel Model Libraries.</p> + + + <p>Whether this <code>StateSubactionMembership</code> is for an <code>entry<code>, <code>do</code> or <code>exit</code> <code>ActionUsage</code>.</p> - - - - - - - - <p>A <code>CalculationUsage</code> is not model-level evaluable.</p> + + + <p>The <code>ActionUsage</code> that is the <code>ownedMemberFeature</code> of this <code>StateSubactionMembership</code>.</p> - - - OCL2.0 - false - - - - - - - - - - - - + + + + - - - - <p>The CalculationDefinitions that feature a certain CalculationUsage.</p> + + + + <p>The StateUsages with a certain <tt>entryAction</tt>.</p> - - - - + + - - - - <p>The Definition that owns the <code>ownedCalculation</code>.</p> + + + + <p>The TransitionUsage that is triggered by a certain AcceptActionUsage.</p> - - + + + - - - <p>A <code>CalculationDefinition</code> is an <coed>ActionDefinition</code> that also defines a <code>Function</code> producing a <code>result</code>.</p> + + + + <p>The StateDefinitions with a certain <tt>entryAction</tt>.</p> + + + + + + + + <p>A <code>StateSubactionKind</code> indicates whether the <code>action</code> of a StateSubactionMembership is an entry, do or exit action.</p> - - - <p>A <code>CalculationDefinition</code> must directly or indirectly specialize the <code>CalculationDefinition</code> <em><code>Calculations::Calculation</code></em> from the Systems Model Library.</p> + + + <p>Indicates that the <code>action</code> of a <code>StateSubactionMembership</code> is an <code>entryAction</code>.</p> - - OCL2.0 - specializesFromLibrary('Calculations::Calculation') - - - - - <p>The <code>calculations</code> of a <code>CalculationDefinition</code> are those of its <code>actions</code> that are <code>CalculationUsages</code>.</p> + + + + <p>Indicates that the <code>action</code> of a <code>StateSubactionMembership</code> is a <code>doAction</code>.</p> - - OCL2.0 - calculation = action->selectByKind(CalculationUsage) - - - - - - - - - <p>The <code>actions</code> of this <code>CalculationDefinition</code> that are <code>CalculationUsages</code>.</p> + + + + <p>Indicates that the <code>action</code> of a <code>StateSubactionMembership</code> is an <code>exitAction</code>.</p> - - - - - + - - - <p>A <code>Definition</code> is a <code>Classifier</code> of <code>Usages</code>. The actual kinds of <code>Definition</code> that may appear in a model are given by the subclasses of <code>Definition</code> (possibly as extended with user-defined <em><code>SemanticMetadata</code></em>).</p> - -<p>Normally, a <code>Definition</code> has owned Usages that model <code>features</code> of the thing being defined. A <code>Definition</code> may also have other <code>Definitions</code> nested in it, but this has no semantic significance, other than the nested scoping resulting from the <code>Definition</code> being considered as a <code>Namespace</code> for any nested <code>Definitions</code>.</p> + + + <p>A <code>TransitionUsage</code> is an <code>ActionUsage</code> representing a triggered transition between <code>ActionUsages</code> or <code>StateUsages</code>. When triggered by a <code>triggerAction</code>, when its <code>guardExpression</code> is true, the <code>TransitionUsage</code> asserts that its <code>source</code> is exited, then its <code>effectAction</code> (if any) is performed, and then its <code>target</code> is entered.</p> -<p>However, if a <code>Definition</code> has <code>isVariation</code> = <code>true</code>, then it represents a <em>variation point</em> <code>Definition</code>. In this case, all of its <code>members</code> must be <code>variant</code> <code>Usages</code>, related to the <code>Definition</code> by <code>VariantMembership</code> <code>Relationships</code>. Rather than being <code>features</code> of the <code>Definition</code>, <code>variant</code> <code>Usages</code> model different concrete alternatives that can be chosen to fill in for an abstract <code>Usage</code> of the variation point <code>Definition</code>.</p> - +<p>A <code>TransitionUsage</code> can be related to some of its <code>ownedFeatures</code> using <code>TransitionFeatureMembership</code> <code>Relationships</code>, corresponding to the <code>triggerAction</code>, <code>guardExpression</code> and <code>effectAction</code> of the <code>TransitionUsage</code>.</p> - - - <p>If a <code>Definition</code> is a variation, then all it must not have any <code>ownedFeatureMemberships</code>.</p> - - - OCL2.0 - isVariation implies ownedFeatureMembership->isEmpty() - - - - - <p>The <code>variants</code> of a <code>Definition</code> are the <code>ownedVariantUsages</code> of its <code>variantMemberships</code>.</p> - - - OCL2.0 - variant = variantMembership.ownedVariantUsage - - - - - <p>The <code>variantMemberships</code> of a <code>Definition</code> are those <code>ownedMemberships</code> that are <code>VariantMemberships</code>.</p> - - - OCL2.0 - variantMembership = ownedMembership->selectByKind(VariantMembership) - - - - - <p>A variation <code>Definition</code> may not specialize any other variation <code>Definition</code>.</p> - - - OCL2.0 - isVariation implies - not ownedSpecialization.specific->exists( - oclIsKindOf(Definition) and - oclAsType(Definition).isVariation) - - - - - <p>The <code>usages</code> of a <code>Definition</code> are all its <code>features</code> that are <code>Usages</code>.</p> - - - OCL2.0 - usage = feature->selectByKind(Usage) - - - - - <p>The <code>directedUsages</code> of a <code>Definition</code> are all its <code>directedFeatures</code> that are <code>Usages</code>.</p> - - - OCL2.0 - directedUsage = directedFeature->selectByKind(Usage) - - - - - <p>The <code>ownedUsages</code> of a <code>Definition</code> are all its <code>ownedFeatures</code> that are <code>Usages</code>.</p> - - - OCL2.0 - ownedUsage = ownedFeature->selectByKind(Usage) - - - - - <p>The <code>ownedAttributes</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>AttributeUsages</code>.</p> + + + <p>A composite <code>TransitionUsage</code> whose <code>owningType</code> is an <code>ActionDefinition</code> or <code>ActionUsage</code> and whose <code>source</code> is <em>not</em> a <code>StateUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::Action::decisionTransitions</code></em> from the Systems Model Library.</p> - + OCL2.0 - ownedAttribute = ownedUsage->selectByKind(AttributeUsage) + isComposite and owningType <> null and +(owningType.oclIsKindOf(ActionDefinition) or + owningType.oclIsKindOf(ActionUsage)) and +source <> null and not source.oclIsKindOf(StateUsage) implies + specializesFromLibrary('Actions::Action::decisionTransitions') - - - <p>The <code>ownedReferences</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ReferenceUsages</code>.</p> + + + <p>A composite <code>TransitionUsage</code> whose <code>owningType</code> is a <code>StateDefinition</code> or <code>StateUsage</code> and whose <code>source</code> is a <code>StateUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>States::StateAction::stateTransitions</code></em> from the Systems Model Library</p> - + OCL2.0 - ownedReference = ownedUsage->selectByKind(ReferenceUsage) + isComposite and owningType <> null and +(owningType.oclIsKindOf(StateDefinition) or + owningType.oclIsKindOf(StateUsage)) and +source <> null and source.oclIsKindOf(StateUsage) implies + specializesFromLibrary('States::StateAction::stateTransitions') + - - - <p>The <code>ownedEnumerations</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>EnumerationUsages</code>.</p> + + + <p>A <code>TransitionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::transitionActions</code></em> from the Systems Model Library.</p> - + OCL2.0 - ownedEnumeration = ownedUsage->selectByKind(EnumerationUsage) + specializesFromLibrary('Actions::transitionActions') - - - <p>The <code>ownedOccurrences</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>OccurrenceUsages</code>.</p> + + + <p>The <code>source</code> of a <code>TransitionUsage</code> is <code>featureTarget</code> of the result of <code>sourceFeature()</code>, which must be an <code>ActionUsage</code>.</p> - + OCL2.0 - ownedOccurrence = ownedUsage->selectByKind(OccurrenceUsage) + source = + let sourceFeature : Feature = sourceFeature() in + if sourceFeature = null then null + else sourceFeature.featureTarget.oclAsType(ActionUsage) - - - <p>The <code>ownedItems</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ItemUsages</code>.</p> + + + <p>The <code>target</code> of a <code>TransitionUsage</code> is given by the <code>featureTarget</code> of the <code>targetFeature</code> of its <code>succession</code>, which must be an <code>ActionUsage</code>.</p> - + OCL2.0 - ownedItem = ownedUsage->selectByKind(ItemUsage) + target = + if succession.targetFeature->isEmpty() then null + else + let targetFeature : Feature = + succession.targetFeature->first().featureTarget in + if not targetFeature.oclIsKindOf(ActionUsage) then null + else targetFeature.oclAsType(ActionUsage) + endif + endif + - - - <p>The <code>ownedParts</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>PartUsages</code>.</p> + + + <p>The <code>triggerActions</code> of a <code>TransitionUsage</code> are the <code>transitionFeatures</code> of the <code>ownedFeatureMemberships</code> of the <code>TransitionUsage</code> with <code>kind = trigger</code>, which must all be <code>AcceptActionUsages</code>.</p> - + OCL2.0 - ownedPart = ownedUsage->selectByKind(PartUsage) + triggerAction = ownedFeatureMembership-> + selectByKind(TransitionFeatureMembership)-> + select(kind = TransitionFeatureKind::trigger).transitionFeature-> + selectByKind(AcceptActionUsage) - - - <p>The <code>ownedPorts</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>PortUsages</code>.</p> + + + <p>A <code>TransitionUsage</code> must have an <code>ownedMember</code> that is a <code>Succession</code> with an <code>ActionUsage</code> as the <code>featureTarget</code> of its <code>targetFeature</code>.</p> - + OCL2.0 - ownedPort = ownedUsage->selectByKind(PortUsage) + let successions : Sequence(Successions) = + ownedMember->selectByKind(Succession) in +successions->notEmpty() and +successions->at(1).targetFeature.featureTarget-> + forAll(oclIsKindOf(ActionUsage)) - - - <p>The <code>ownedConnections</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ConnectorAsUsages</code>.</p> + + + <p>The <code>triggerActions</code> of a <code>TransitionUsage</code> are the <code>transitionFeatures</code> of the <code>ownedFeatureMemberships</code> of the <code>TransitionUsage</code> with <code>kind = trigger</code>, which must all be <code>Expressions</code>.</p> - + OCL2.0 - ownedConnection = ownedUsage->selectByKind(ConnectorAsUsage) + guardExpression = ownedFeatureMembership-> + selectByKind(TransitionFeatureMembership)-> + select(kind = TransitionFeatureKind::trigger).transitionFeature-> + selectByKind(Expression) - - - <p>The <code>ownedFlows</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>FlowUsages</code>.</p> + + + <p>The <code>triggerActions</code>, <code>guardExpressions</code>, and <code>effectActions</code> of a <code>TransitionUsage</code> must specialize, respectively, the <em><code>accepter</code></em>, <em><code>guard</code></em>, and <em><code>effect</code></em> <code>features</code> of the <code>ActionUsage</code> <em><code>Actions::TransitionActions</code></em> from the Systems Model Library.</p> - + OCL2.0 - ownedFlow = ownedUsage->selectByKind(FlowConnectionUsage) + triggerAction->forAll(specializesFromLibrary('Actions::TransitionAction::accepter') and +guardExpression->forAll(specializesFromLibrary('Actions::TransitionAction::guard') and +effectAction->forAll(specializesFromLibrary('Actions::TransitionAction::effect')) - - - <p>The <code>ownedInterfaces</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>InterfaceUsages</code>.</p> + + + <p>The <code>effectActions</code> of a <code>TransitionUsage</code> are the <code>transitionFeatures</code> of the <code>ownedFeatureMemberships</code> of the <code>TransitionUsage</code> with <code>kind = effect</code>, which must all be <code>ActionUsages</code>.</p> - + OCL2.0 - ownedInterface = ownedUsage->selectByKind(ReferenceUsage) + triggerAction = ownedFeatureMembership-> + selectByKind(TransitionFeatureMembership)-> + select(kind = TransitionFeatureKind::trigger).transitionFeatures-> + selectByKind(AcceptActionUsage) - - - <p>The <code>ownedAllocations</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>AllocationUsages</code>.</p> + + + <p>The <code>sourceFeature</code> of the <code>succession</code> of a <code>TransitionUsage</code> must be the <code>source</code> of the <code>TransitionUsage</code> (i.e., the first <code>connectorEnd</code> of the <code>succession</code> must have a <code>ReferenceSubsetting</code> <code>Relationship</code> with the <code>source</code>).</p> - + OCL2.0 - ownedAllocation = ownedUsage->selectByKind(AllocationUsage) + succession.sourceFeature = source - - - <p>The <code>ownedActions</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ActionUsages</code>.</p> + + + <p>A <code>TransitionUsage</code> must have an <code>ownedMember</code> that is a <code>BindingConnector</code> between its <code>source</code> and its first input <code>parameter</code> (which redefines <code><em>Actions::TransitionAction::transitionLinkSource</em></code>).</p> - + OCL2.0 - ownedAction = ownedUsage->selectByKind(ActionUsage) + ownedMember->selectByKind(BindingConnector)->exists(b | + b.relatedFeatures->includes(source) and + b.relatedFeatures->includes(inputParameter(1))) - - - <p>The <code>ownedStates</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>StateUsages</code>.</p> + + + <p>If a <code>TransitionUsage</code> has a <code>triggerAction</code>, then the <em><code>payload</code></em> <code>parameter</code> of the <code>TransitionUsage</code> subsets the <code>Feature</code> chain of the <code>triggerAction</code> and its <code>payloadParameter</code>.</p> - + OCL2.0 - ownedState = ownedUsage->selectByKind(StateUsage) + triggerAction->notEmpty() implies + let payloadParameter : Feature = inputParameter(2) in + payloadParameter <> null and + payloadParameter.subsetsChain(triggerAction->at(1), triggerPayloadParameter()) - - - <p>The <code>ownedTransitions</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>TransitionUsages</code>.</p> + + + <p>A <code>TransitionUsage</code> must have an <code>ownedMember</code> that is a <code>BindingConnector</code> between its <code>succession</code> and the inherited <code>Feature</code> <code><em>TransitionPerformances::TransitionPerformance::transitionLink</em></code>.</p> - + OCL2.0 - ownedTransition = ownedUsage->selectByKind(TransitionUsage) + ownedMember->selectByKind(BindingConnector)->exists(b | + b.relatedFeatures->includes(succession) and + b.relatedFeatures->includes(resolveGlobal( + 'TransitionPerformances::TransitionPerformance::transitionLink'))) - - - <p>The <code>ownedCalculations</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>CalculationUsages</code>.</p> + + + <p>A <code>TransitionUsage</code> must have at least one owned input <code>parameter</code> and, if it has a <code>triggerAction</code>, it must have at least two.</p> - + OCL2.0 - ownedCalculation = ownedUsage->selectByKind(CalculationUsage) + if triggerAction->isEmpty() then + inputParameters()->size() >= 1 +else + inputParameters()->size() >= 2 +endif + - - - <p>The <code>ownedConstraints</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ConstraintUsages</code>.</p> + + + <p>The <code>succession</code> of a <code>TransitionUsage</code> is its first <code>ownedMember</code> that is a <code>Succession</code>.</p> - + OCL2.0 - ownedConstraint = ownedUsage->selectByKind(ConstraintUsage) + succession = ownedMember->selectByKind(Succession)->at(1) - - - <p>The <code>ownedRequirements</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>RequirementUsages</code>.</p> + + + <p>If the <code>source</code> of a <code>TransitionUsage</code> is <em>not</em> a <code>StateUsage</code>, then the <code>TransitionUsage</code> must not have any <code>triggerActions</code>.</p> - + OCL2.0 - ownedRequirement = ownedUsage->selectByKind(RequirementUsage) + source <> null and not source.oclIsKindOf(StateUsage) implies + triggerAction->isEmpty() - - - <p>The <code>ownedConcerns</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ConcernUsages</code>.</p> + + + + <p>The source <code>ActionUsage</code> of this <code>TransitionUsage</code>, which becomes the <code>source</code> of the <code>succession</code> for the <code>TransitionUsage</code>.</p> + + + + + + + <p>The target <code>ActionUsage</code> of this <code>TransitionUsage<code>, which is the <code>targetFeature</code> of the <code>succession</code> for the <code>TransitionUsage</code>.</p> + + + + + + + <p>The <code>AcceptActionUsages</code> that define the triggers of this <code>TransitionUsage</code>, which are the <code>ownedFeatures</code> of the <code>TransitionUsage</code> related to it by <code>TransitionFeatureMemberships</code> with <code>kind = trigger</code>, which must all be <code>AcceptActionUsages</code>.</p> + + + + + + + + <p>The <code>Expressions</code> that define the guards of this <code>TransitionUsage</code>, which are the <code>ownedFeatures</code> of the <code>TransitionUsage</code> related to it by <code>TransitionFeatureMemberships</code> with <code>kind = guard</code>, which must all be <code>Expressions</code>.</p> + + + + + + + + + <p>The <code>ActionUsages</code> that define the effects of this <code>TransitionUsage</code>, which are the <code>ownedFeatures</code> of the <code>TransitionUsage</code> related to it by <code>TransitionFeatureMemberships</code> with <code>kind = effect</code>, which must all be <code>ActionUsages</code>.</p> + + + + + + + + <p>The <code>Succession</code> that is the <code>ownedFeature</code> of this <code>TransitionUsage</code>, which, if the <code>TransitionUsage</code> is triggered, asserts the temporal ordering of the <code>source</code> and <code>target</code>.</p> - - OCL2.0 - ownedConcern = ownedUsage->selectByKind(ConcernUsage) - - - - - <p>The <code>ownedCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>CaseUsages</code>.</p> + + + + + + + + <p>Return the <code>payloadParameter</code> of the <code>triggerAction</code> of this <code>TransitionUsage</code>, if it has one.</p> - - OCL2.0 - ownedCase = ownedUsage->selectByKind(CaseUsage) - - - - - <p>The <code>ownedAnalysisCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>AnalysisCaseUsages</code>.</p> + + + OCL2.0 + if triggerAction->isEmpty() then null +else triggerAction->first().payloadParameter +endif + + + + + + + + + + <p>Return the <code>Feature</code> to be used as the <code>source</code> of the <code>succession</code> of this <code>TransitionUsage</code>, which is the first <code>member</code> of the <code>TransitionUsage</code> that is a <code>Feature</code>, that is owned by the <code>TransitionUsage</code> via a <code>Membership</code> that is <em>not</em> a <code>FeatureMembership</code>, and whose <code>featureTarget</code> is an <code>ActionUsage</code>.</p> - - OCL2.0 - ownedAnalysisCase = ownedUsage->selectByKind(AnalysisCaseUsage) - - - - - <p>The <code>ownedValidationCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ValidationCaseUsages</code>.</p> + + + OCL2.0 + let features : Sequence(Feature) = ownedMembership-> + reject(oclIsKindOf(FeatureMembership)).memberElement-> + selectByKind(Feature)-> + select(featureTarget.oclIsKindOf(ActionUsage)) in +if features->isEmpty() then null +else features->first() +endif + + + + + + + + + + + + <p>A <code>StateDefinition</code> is the <code>Definition</code> of the </code>Behavior</code> of a system or part of a system in a certain state condition.</p> + +<p>A <code>StateDefinition</code> may be related to up to three of its <code>ownedFeatures</code> by <code>StateBehaviorMembership</code> <code>Relationships</code>, all of different <code>kinds</code>, corresponding to the entry, do and exit actions of the <code>StateDefinition</code>.</p> + + + + <p>A <code>StateDefinition</code> must directly or indirectly specialize the <code>StateDefinition</code> <em><code>States::StateAction</code></em> from the Systems Model Library.</p> - + OCL2.0 - ownedVerificationCase = ownedUsage->selectByKind(VerificationCaseUsage) + specializesFromLibrary('States::StateAction') - - - <p>The <code>ownedUseCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>UseCaseUsages</code>.</p> + + + <p>A <code>StateDefinition</code> must not have more than one owned <code>StateSubactionMembership</code> of each <code>kind</code>.</p> - + OCL2.0 - ownedUseCase = ownedUsage->selectByKind(UseCaseUsage) + ownedMembership-> + selectByKind(StateSubactionMembership)-> + isUnique(kind) - - - <p>The <code>ownedViews</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ViewUsages</code>.</p> + + + <p>The <code>states</code> of a <code>StateDefinition</code> are those of its <code>actions</code> that are <code>StateUsages</code>.</p> - + OCL2.0 - ownedView = ownedUsage->selectByKind(ViewUsage) + state = action->selectByKind(StateUsage) - - - <p>The <code>ownedViewpoints</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ViewpointUsages</code>.</p> + + + <p>The <code>doAction</code> of a <code>StateDefinition</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = do</code>.</p> - + OCL2.0 - ownedViewpoint = ownedUsage->selectByKind(ViewpointUsage) + doAction = + let doMemberships : Sequence(StateSubactionMembership) = + ownedMembership-> + selectByKind(StateSubactionMembership)-> + select(kind = StateSubactionKind::do) in + if doMemberships->isEmpty() then null + else doMemberships->at(1) + endif - - - <p>The <code>ownedRenderings</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>RenderingUsages</code>.</p> + + + <p>The <code>entryAction</code> of a <code>StateDefinition</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = entry</code>.</p> - + OCL2.0 - ownedRendering = ownedUsage->selectByKind(RenderingUsage) + entryAction = + let entryMemberships : Sequence(StateSubactionMembership) = + ownedMembership-> + selectByKind(StateSubactionMembership)-> + select(kind = StateSubactionKind::entry) in + if entryMemberships->isEmpty() then null + else entryMemberships->at(1) + endif - - - <p>The <code>ownedMetadata</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>MetadataUsages</code>.</p> + + + <p>If a <code>StateDefinition</code> is parallel, then its <code>ownedActions</code> (which includes its <code>ownedStates</code>) must not have any <code>incomingTransitions</code> or <code>outgoingTransitions</code>.</p> - + OCL2.0 - ownedMetadata = ownedUsage->selectByKind(MetadataUsage) + isParallel implies + ownedAction.incomingTransition->isEmpty() and + ownedAction.outgoingTransition->isEmpty() - - - <p>If a <code>Definition</code> is a variation, then it must be abstract.</p> + + + <p>The <code>exitAction</code> of a <code>StateDefinition</code> is the <code>action</code> of the owned <code>StateSubactionMembership</code> with <code>kind = exit +</code>.</p> - + OCL2.0 - isVariation implies isAbstract + exitAction = + let exitMemberships : Sequence(StateSubactionMembership) = + ownedMembership-> + selectByKind(StateSubactionMembership)-> + select(kind = StateSubactionKind::exit) in + if exitMemberships->isEmpty() then null + else exitMemberships->at(1) + endif - - - - - - <p>Whether this <code>Definition</code> is for a variation point or not. If true, then all the <code>memberships</code> of the <code>Definition</code> must be <code>VariantMemberships</code>.</p> - - - - - - <p>The <code>Usages</code> which represent the variants of this <code>Definition</code> as a variation point <code>Definition</code>, if <code>isVariation</code> = true. If <code>isVariation = false</code>, the there must be no <code>variants</code>.</p> - - - - - - - - <p>The <code>ownedMemberships</code> of this <code>Definition</code> that are <code>VariantMemberships</code>. If <code>isVariation</code> = true, then this must be all <code>ownedMemberships</code> of the <code>Definition</code>. If <code>isVariation</code> = false, then <code>variantMembership</code>must be empty.</p> - - - - - - - - <p>The <code>Usages</code> that are <code>features</code> of this <code>Definition</code> (not necessarily owned).</p> - - - - - - - - <p>The <code>usages</code> of this <code>Definition</code> that are <code>directedFeatures</code>.</p> - - - - - - - - - - <p>The <code>Usages</code> that are <code>ownedFeatures</code> of this <code>Definition</code>.</p> - - - - - - - - - <p>The <code>ReferenceUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - - - - - - <p>The <code>AttributeUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.<p> - - - - - - - <p>The <code>EnumerationUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.<p> - - - - - - - <p>The <code>OccurrenceUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - - - - - - <p>The <code>ItemUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - - - - - - <p>The <code>PartUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + <p>The <code>StateUsages</code>, which are <code>actions</code> in the <code>StateDefinition</code>, that specify the discrete states in the behavior defined by the <code>StateDefinition</code>.</p> - - + + - - - <p>The <code>PortUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + <p>The <code>ActionUsage</code> of this <code>StateDefinition</code> to be performed on entry to the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateDefinition</code> by a <code>StateSubactionMembership</code> with <code>kind = entry</code>.</p> - - + + - - - <p>The <code>ConnectorAsUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>. Note that this list includes <code>BindingConnectorAsUsages</code>, <code>SuccessionAsUsages</code>, and <code>FlowUsages</code> because these are <code>ConnectorAsUsages</code> even though they are not <code>ConnectionUsages</code>.</p> + + + <p>The <code>ActionUsage</code> of this <code>StateDefinition</code> to be performed while in the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateDefinition</code> by a <code>StateSubactionMembership</code> with <code>kind = do</code>.</p> - - + + - - - <p>The <code>FlowUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + <p>The <code>ActionUsage</code> of this <code>StateDefinition</code> to be performed on exit to the state defined by the <code>StateDefinition</code>. It is the owned <code>ActionUsage</code> related to the <code>StateDefinition</code> by a <code>StateSubactionMembership</code> with <code>kind = exit</code>.</p> - - + + - - - <p>The <code>InterfaceUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + <p>Whether the <code>ownedStates</code> of this <code>StateDefinition</code> are to all be performed in parallel. If true, none of the <code>ownedActions</code> (which includes <code>ownedStates</code>) may have any incoming or outgoing <code>Transitions</code>. If false, only one <code>ownedState</code> may be performed at a time.</p> + - - + + - - - <p>The <code>AllocationUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + <p>The TransitionUsage that has a certain <tt>effectAction</tt>.</p> - - - - - - <p>The <code>ActionUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + + + + <p>An <code>ExhibitStateUsage</code> is a <code>StateUsage</code> that represents the exhibiting of a <code>StateUsage</code>. Unless it is the <code>StateUsage</code> itself, the <code>StateUsage</code> to be exhibited is related to the <code>ExhibitStateUsage</code> by a <code>ReferenceSubsetting</code> <code>Relationship</code>. An <code>ExhibitStateUsage</code> is also a <code>PerformActionUsage</code>, with its <code>exhibitedState</code> as the <code>performedAction</code>.</p> + + + + + <p>If an <code>ExhibitStateUsage</code> has an <code>owningType</code> that is a <code>PartDefinition</code> or <code>PartUsage</code>, then it must directly or indirectly specialize the <code>StateUsage</code> <code><em>Parts::Part::exhibitedStates</em></code>.</p> - - - - - - <p>The <code>StateUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + OCL2.0 + owningType <> null and +(owningType.oclIsKindOf(PartDefinition) or + owningType.oclIsKindOf(PartUsage)) implies + specializesFromLibrary('Parts::Part::exhibitedStates') + + + + + <p>If an <code>ExhibitStateUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of the <code>referencedFeature</code> must be a <code>StateUsage</code>.</p> - - - - - - <p>The <code>TransitionUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + OCL2.0 + referencedFeatureTarget() <> null implies + referencedFeatureTarget().oclIsKindOf(StateUsage) + + + + + + + <p>The <code>StateUsage</code> to be exhibited by the <code>ExhibitStateUsage</code>. It is the <code>performedAction</code> of the <code>ExhibitStateUsage</code> considered as a <code>PerformActionUsage</code>, which must be a <code>StateUsage</code>.</p> - - + + - - - <p>The <code>CalculationUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + <p>The <code>OccurrenceUsages</code> being typed by a certain <code>Class</code>.</p> - - - - - - <p>The <code>ConstraintUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - + + + + + + + <p>An <code>EventOccurrenceUsage</code> is an <code>OccurrenceUsage</code> that represents another <code>OccurrenceUsage</code> occurring as a <code><em>suboccurrence</em></code> of the containing occurrence of the <code>EventOccurrenceUsage</code>. Unless it is the <code>EventOccurrenceUsage</code> itself, the referenced <code>OccurrenceUsage</code> is related to the <code>EventOccurrenceUsage</code> by a <code>ReferenceSubsetting</code> <code>Relationship</code>.</p> + +<p>If the <code>EventOccurrenceUsage</code> is owned by an <code>OccurrenceDefinition</code> or <code>OccurrenceUsage</code>, then it also subsets the <em><code>timeEnclosedOccurrences</code></em> property of the <code>Class</code> <em><code>Occurrence</code></em> from the Kernel Semantic Library model <em><code>Occurrences</code></em>.</p> + + + + <p>If an <code>EventOccurrenceUsage</code> has no <code>ownedReferenceSubsetting</code>, then its <code>eventOccurrence</code> is the <code>EventOccurrenceUsage</code> itself. Otherwise, the <code>eventOccurrence</code> is the <code>featureTarget</code> of the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code> (which must be an <code>OccurrenceUsage</code>).</p> - - - - - - <p>The <code>RequirementUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + OCL2.0 + eventOccurrence = + if referencedFeatureTarget() = null then self + else if referencedFeatureTarget().oclIsKindOf(OccurrenceUsage) then + referencedFeatureTarget().oclAsType(OccurrenceUsage) + else null + endif endif + + + + + <p>If an <code>EventOccurrenceUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of the <code>referencedFeature</code> must be an <code>OccurrenceUsage</code>.</p> - - - - - - <p>The <code>ConcernUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + OCL2.0 + referencedFeatureTarget() <> null implies + referencedFeatureTarget().oclIsKindOf(OccurrenceUsage) + + + + + <p>If an <code>EventOccurrenceUsage</code> has an <code>owningType</code> that is an <code>OccurrenceDefinition</code> or <code>OccurrenceUsage</code>, then it must directly or indirectly specialize the <code>Feature</code> <code><em>Occurrences::Occurrence::timeEnclosedOccurrences</em></code>.</p> - - - - - - <p>The code>CaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + OCL2.0 + owningType <> null and +(owningType.oclIsKindOf(OccurrenceDefinition) or + owningType.oclIsKindOf(OccurrenceUsage)) implies + specializesFromLibrary('Occurrences::Occurrence::timeEnclosedOccurrences') + + + + + <p>An <code>EventOccurrenceUsage</code> must be referential.</p> - - + + OCL2.0 + isReference + + + + + + <p>The <code>OccurrenceUsage</code> referenced as an event by this <code>EventOccurrenceUsage</code>. It is the <code>referenceFeature</code> of the <code>ownedReferenceSubsetting</code> for the <code>EventOccurrenceUsage</code>, if there is one, and, otherwise, the <code>EventOccurrenceUsage</code> itself.</p> + + + - - - <p>The <code>AnalysisCaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + <p>Always true for an <code>EventOccurrenceUsage</code>.</p> - - + + - - - <p>The <code>VerificationCaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + <p>The <code>OccurrenceUsage</code> that has a certain <code>individualDefinition</code>.</p> + + + + + + + + <p>An <code>OccurrenceDefinition</code> is a <code>Definition</code> of a <code>Class</code> of individuals that have an independent life over time and potentially an extent over space. This includes both structural things and behaviors that act on such structures. If <code>isIndividual</code> is true, then the <code>OccurrenceDefinition</code> is constrained to have (at most) a single instance that is the entire life of a single individual.</p> + + + + <p>An <code>OccurrenceDefinition</code> with <code>isIndividual = true</code> must directly or indirectly specialize <em><code>Occurrences::Life</code></em> from the Kernel Semantic Library.</p> + + + OCL2.0 + isIndividual implies specializesFromLibrary('Occurrences::Life') + + + + + <p>An <code>OccurrenceDefinition</code> with <code>isIndividual = true</code> must have a <code>multiplicity</code> that specializes <em><code>Base::zeroOrOne</code></em> from the Kernel Semantic Library.</p> + + + OCL2.0 + isIndividual implies + multiplicity <> null and + multiplicity.specializesFromLibrary('Base::zeroOrOne') + + + + + + + + + <p>Whether this <code>OccurrenceDefinition</code> is constrained to represent at most one thing.</p> - - + + - - - <p>The <code>UseCaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + <p><code>PortionKind</code> is an enumeration of the specific kinds of <code><em>Occurrence</em></code> portions that can be represented by an <code>OccurrenceUsage</code>.</p> + + + + <p>A time slice of an <code>Occurrence</code> (a portion over time).</p> - - - - - - <p>The <code>ViewUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + <p>A snapshot of an <code>Occurrence</code> (a time slice with zero duration).</p> - - - - - - <p>The <code>ViewpointUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + <p>An <code>OccurrenceUsage</code> is a <code>Usage</code> whose <code>types</code> are all <code>Classes</code>. Nominally, if a <code>type</code> is an <code>OccurrenceDefinition</code>, an <code>OccurrenceUsage</code> is a <code>Usage</code> of that <code>OccurrenceDefinition</code> within a system. However, other types of Kernel <code>Classes</code> are also allowed, to permit use of <code>Classes</code> from the Kernel Model Libraries.</p> + + + + + <p>The <code>individualDefinition</code> of an <code>OccurrenceUsage</code> is the <code>occurrenceDefinition</code> that is an <code>OccurrenceDefinition</code> with <code>isIndividual = true</code>, if any.</p> - - - - - - <p>The <code>RenderingUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + OCL2.0 + individualDefinition = + let individualDefinitions : OrderedSet(OccurrenceDefinition) = + occurrenceDefinition-> + selectByKind(OccurrenceDefinition)-> + select(isIndividual) in + if individualDefinitions->isEmpty() then null + else individualDefinitions->first() endif + + + + + <p>If an <code>OccurrenceUsage</code> has <code>isIndividual = true</code>, then it must have an <code>individualDefinition</code>.</p> - - - - - - <p>The <code>MetadataUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + OCL2.0 + isIndividual implies individualDefinition <> null + + + + + <p>An <code>OccurrenceUsage</code> must directly or indirectly specialize <code><em>Occurrences::occurrences</em></code> from the Kernel Semantic Library.</p> - - - - - - - - <p>The ItemUsages being typed by a certain Structure.</p> + + OCL2.0 + specializesFromLibrary('Occurrences::occurrences') + + + + + <p>A composite <code>OccurrenceUsage</code>, whose <code>ownedType</code> is a <code>Class</code>, another <code>OccurrenceUsage</code>, or any kind of <code>Feature</code> typed by a <code>Class</code>, must directly or indirectly specialize <em><code>Occurrences::Occurrence::suboccurrences</code></em>. - - - - - - - - <p>The Usage in which the <code>nestedRequirement</code> is nested.</p> + + OCL2.0 + isComposite and +owningType <> null and +(owningType.oclIsKindOf(Class) or + owningType.oclIsKindOf(OccurrenceUsage) or + owningType.oclIsKindOf(Feature) and + owningType.oclAsType(Feature).type-> + exists(oclIsKind(Class))) implies + specializesFromLibrary('Occurrences::Occurrence::suboccurrences') + + + + + <p>An <code>OccurrenceUsage</code> must have at most one <code>occurrenceDefinition</code> with <code>isIndividual = true</code>.</p> - - - - - - - - <p>The <code>Usage</code> that owns the <code>nestedFlow</code>.</p> + + OCL2.0 + occurrenceDefinition-> + selectByKind(OccurrenceDefinition)-> + select(isIndividual).size() <= 1 + + + + + <p>If an <code>OccurrenceUsage</code> has <code>portionKind = snapshot</code>, then it must directly or indirectly specialize <em><code>Occurrences::Occurrence::snapshots</code></em> from the Kernel Semantic Library.</p> - - - - - - - - <p>The Definition that owns the <code>ownedAnalysisCase</code>.</p> + + OCL2.0 + portionKind = PortionKind::snapshot implies + specializesFromLibrary('Occurrences::Occurrence::snapshots') + + + + + <p>If an <code>OccurrenceUsage</code> has <code>portionKind = timeslice</code>, then it must directly or indirectly specialize <em><code>Occurrences::Occurrence::timeSlices</code></em> from the Kernel Semantic Library.</p> - - - - - - - - <p>The Usage in which the <code>nestedPart</code> is nested.</p> + + OCL2.0 + portionKind = PortionKind::timeslice implies + specializesFromLibrary('Occurrences::Occurrence::timeSlices') + + + + + <p>If an <code>OccurrenceUsage</code> has a non-null <code>portionKind</code>, then its <code>owningType</code> must be an <code>OccurrenceDefinition</code> or an <code>OccurrenceUsage</code>.</p> - - - - - - - - <p>The Usage in which the <code>nestedItem</code> is nested.</p> + + OCL2.0 + portionKind <> null implies + owningType <> null and + (owningType.oclIsKindOf(OccurrenceDefinition) or + owningType.oclIsKindOf(OccurrenceUsage)) + + + + + <p>If an <code>OccurrenceUsage</code> has a non-null <code>portionKind</code>, then it must have <code>isPortion = true</code>.</p> - - - - - - - - <p>The variation point Usage that for which this Usage represents a variant, derived as the <code>owningVariationUsage</code> of the <code>owningVariantMembership</code> of the Usage.</p> + + OCL2.0 + portionKind <> null implies isPortion + + + + + + <p>The <code>Classes</code> that are the types of this <code>OccurrenceUsage</code>. Nominally, these are <code>OccurrenceDefinitions</code>, but other kinds of kernel <code>Classes</code> are also allowed, to permit use of <code>Classes</code> from the Kernel Model Libraries.</p> - - - - - - - - - <p>The Usage that owns a certain <code>nestedViewpoint</code>.</p> + + + + + + + <p>The at most one <code>occurrenceDefinition</code> that has <code>isIndividual = true</code>.</p> - - - - - - - - <p>The Definition that owns the <code>ownedAllocation</code>.</p> + + + + + + <p>Whether this <code>OccurrenceUsage</code> represents the usage of the specific individual represented by its <code>individualDefinition</code>.</p> - - - - - - - - <p>The Definition that owns the <code>ownedTransition</code>.</p> + + + + + + <p>The kind of temporal portion (time slice or snapshot) is represented by this <code>OccurrenceUsage</code>. If <code>portionKind</code> is not null, then the <code>owningType</code> of the <code>OccurrenceUsage</code> must be non-null, and the <code>OccurrenceUsage</code> represents portions of the featuring instance of the <code>owningType</code>.</p> - - - + + + - - - - <p>The Definition that owns the <code>ownedOccurrence</code>.</p> + + + + <p>The EventOccurrenceUsages that reference a certain <code>eventOccurrence</code>.</p> - - + + - - - - <p>The Usages that feature a certain Usage.</p> + + + + <p>The IncludeUseCaseUsages that have a certain UseCaseUsage as their <code>includedUseCase</code>.</p> - - - + + - - - - <p>The Definition that owns the <code>ownedAction</code>.</p> + + + + <p>The UseCaseUsage that includes a certain <code>includedUseCase</code>.</p> - - + + - - - - <p>The Usage that owns a certain <code>nestedView</code>.</p> + + + <p>An <code>IncludeUseCaseUsage</code> is a <code>UseCaseUsage</code> that represents the inclusion of a <code>UseCaseUsage</code> by a <code>UseCaseDefinition</code> or <code>UseCaseUsage</code>. Unless it is the <code>IncludeUseCaseUsage</code> itself, the <code>UseCaseUsage</code> to be included is related to the <code>includedUseCase</code> by a <code>ReferenceSubsetting</code> <code>Relationship</code>. An <code>IncludeUseCaseUsage</code> is also a PerformActionUsage, with its <code>useCaseIncluded</code> as the <code>performedAction</code>.</p> + + + + + <p>A <code>IncludeUseCaseUsage</code> whose <code>owningType</code> is a <code>UseCaseDefinition</code> or <code>UseCaseUsage</code> must directly or indirectly specialize the <code>UseCaseUsage</code> <em><code>UseCases::UseCase::includedUseCases</code></em> from the Systems Model Library.</p> - - - + + OCL2.0 + owningType <> null and +(owningType.oclIsKindOf(UseCaseDefinition) or + owningType.oclIsKindOf(UseCaseUsage) implies + specializesFromLibrary('UseCases::UseCase::includedUseCases') + + + + + <p>If an <code>IncludeUseCaseUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of the <code>referencedFeature</code> must be a <code>UseCaseUsage</code>.</p> + + + OCL2.0 + referencedFeatureTarget() <> null implies + referencedFeatureTarget().oclIsKindOf(UseCaseUsage) + + + + + + + <p>The <code>UseCaseUsage</code> to be included by this <code>IncludeUseCaseUsage</code>. It is the <code>performedAction</code> of the <code>IncludeUseCaseUsage</code> considered as a <code>PerformActionUsage</code>, which must be a <code>UseCaseUsage</code>.</p> + + + + + - - - - <p>The Usage in which the <code>nestedMetadata</code> is nested.</p> + + + + <p>The UseCaseUsages being typed by a certain UseCaseDefinition.</p> - - + + - - - - <p>The Usages that have a certain Usage as a <code>flow</code>.</p> + + + <p>A <code>UseCaseUsage</code> is a <code>Usage</code> of a <code>UseCaseDefinition</code>.</p> + + + + <p>The <code>includedUseCases<code> of a <code>UseCaseUsage</code> are the <code>useCaseIncludeds</code> of the <code>IncludeUseCaseUsages</code> owned by the <code>UseCaseUsage<code>.</p> - - + + OCL2.0 + includedUseCase = ownedUseCase-> + selectByKind(IncludeUseCaseUsage). + useCaseIncluded + + + + + <p>A <code>UseCaseUsage</code> must directly or indirectly specializes the base <code>UseCaseUsage</code> <em><code>UseCases::useCases</code></em> from the Systems Model Library.</p> - - - - - - - - - - <p>The Usage in which the <code>nestedPort</code> is nested (if any).</p> + + OCL2.0 + specializesFromLibrary('UseCases::useCases') + + + + + <p>A composite <code>UseCaseUsage</code> whose <code>owningType</code> is a <code>UseCaseDefinition</code> or <code>UseCaseUsage</code> must specialize the <code>UseCaseUsage</code> <em><code>UseCases::UseCase::subUseCases</code></em> from the Systems Model Library.</p> - - - + + OCL2.0 + isComposite and owningType <> null and +(owningType.oclIsKindOf(UseCaseDefinition) or + owningType.oclIsKindOf(UseCaseUsage)) implies + specializesFromLibrary('UseCases::UseCase::subUseCases') + + + + + + <p>The <code>UseCaseDefinition</code> that is the <code>definition</code> of this <code>UseCaseUsage</code>.</p> + + + + + + + <p>The <code>UseCaseUsages</code> that are included by this <code>UseCaseUse</code>, which are the <code>useCaseIncludeds</code> of the <code>IncludeUseCaseUsages</code> owned by this <code>UseCaseUsage<code>.</p> + + + + - - - - <p>The Definition that owns a certain <code>ownedRendering</code>.</p> + + + + <p>The UseCaseDefinition that includes a certain <code>includedUseCase</code>.</p> - - + + - - - - <p>The Usage that owns the <code>nestedConcern</code>.</p> + + + <p>A <code>UseCaseDefinition</code> is a <code>CaseDefinition</code> that specifies a set of actions performed by its subject, in interaction with one or more actors external to the subject. The objective is to yield an observable result that is of value to one or more of the actors.</p> + + + + + <p>The <code>includedUseCases<code> of a <code>UseCaseDefinition</code> are the <code>useCaseIncludeds</code> of the <code>IncludeUseCaseUsages</code> owned by the <code>UseCaseDefinition<code>.</p> - - - + + OCL2.0 + includedUseCase = ownedUseCase-> + selectByKind(IncludeUseCaseUsage). + useCaseIncluded + + + + + <p>A <code>UseCaseDefinition</code> must directly or indirectly specializes the base <code>UseCaseDefinition</code> <code><em>UseCases::UseCase</em></code> from the Systems Model Library.</p> + + + + + + OCL2.0 + specializesFromLibrary('UseCases::UseCase') + + + + + + <p>The <code>UseCaseUsages</code> that are included by this <code>UseCaseDefinition</code>, which are the <code>useCaseIncludeds</code> of the <code>IncludeUseCaseUsages</code> owned by this <code>UseCaseDefinition<code>.</p> + + + + - - - - <p>The Definition that owns a certain <code>ownedVerificationCase</code>.</p> + + + + <p>The PortUsages that are typed by a certain PortDefinition.</p> - - + + - - - - <p>The Usage in which the <code>nestedAnalysisCase</code> is nested.</p> + + + + <p>The PortConjugation that relates a certain PortDefinition to its ConjugatedPortDefinition (if any).</p> - - + + + - - - - <p>The Usage that owns the <code>nestedAllocation</code>.</p> + + + <p>A <code>PortConjugation</code> is a <code>Conjugation</code> <code>Relationship</code> between a <code>PortDefinition</code> and its corresponding <code>ConjugatedPortDefinition</code>. As a result of this <code>Relationship</code>, the <code>ConjugatedPortDefinition</code> inherits all the <code>features</code> of the original <code>PortDefinition</code>, but input <code>flows</code> of the original <code>PortDefinition</code> become outputs on the <code>ConjugatedPortDefinition</code> and output <code>flows</code> of the original <code>PortDefinition</code> become inputs on the <code>ConjugatedPortDefinition</code>.</code></p> + + + + + + + + <p>The <code>PortDefinition</code> being conjugated.</p> + + + + + + + + <p>The <code>ConjugatedPortDefinition</code> that is conjugate to the <code>originalPortDefinition</code>.</p> - - - + + + + - - - - <p>The Definition that owns the <code>ownedReference</code>.</p> + + + + <p>A <code>ConjugatedPortTyping</code> is a <code>FeatureTyping</code> whose <code>type</code> is a <code>ConjugatedPortDefinition</code>. (This relationship is intended to be an abstract-syntax marker for a special surface notation for conjugated typing of ports.)</p> + + + + <p>The <code>portDefinition</code> of a <code>ConjugatedPortTyping</code> is the <code>originalPortDefinition</code> of the <code>conjugatedPortDefinition</code> of the <code>ConjugatedPortTyping</code>.</p> - - - - - - - - <p>The Definition that owns the <code>ownedConnection</code>.</p> + + OCL2.0 + portDefinition = conjugatedPortDefinition.originalPortDefinition + + + + + + + + <p>The <code>originalPortDefinition</code> of the <code>conjugatedPortDefinition</code> of this <code>ConjugatedPortTyping</code>.</p> - - - + + + + + + <p>The <code>type</code> of this <code>ConjugatedPortTyping</code> considered as a <code>FeatureTyping</code>, which must be a <code>ConjugatedPortDefinition</code>.</p> + + + + + + - - - - <p>A <code>ReferenceUsage</code> is a <code>Usage</code> that specifies a non-compositional (<code>isComposite = false</code>) reference to something. The <code>definition</code> of a <code>ReferenceUsage</code> can be any kind of <code>Classifier</code>, with the default being the top-level <code>Classifier</code> <code><em>Base::Anything</em></code> from the Kernel Semantic Library. This allows the specification of a generic reference without distinguishing if the thing referenced is an attribute value, item, action, etc.</p> + + + <p>A <code>ConjugatedPortDefinition</code> is a <code>PortDefinition</code> that is a <code>PortDefinition</code> of its original <code>PortDefinition</code>. That is, a <code>ConjugatedPortDefinition</code> inherits all the <code>features</code> of the original <code>PortDefinition</code>, but input <code>flows</code> of the original <code>PortDefinition</code> become outputs on the <code>ConjugatedPortDefinition</code> and output <code>flows</code> of the original <code>PortDefinition</code> become inputs on the <code>ConjugatedPortDefinition</code>. Every <code>PortDefinition</code> (that is not itself a <code><code>ConjugatedPortDefinition</code></code>) has exactly one corresponding <code>ConjugatedPortDefinition</code>, whose effective name is the name of the <code>originalPortDefinition</code>, with the character <code>~</code> prepended.</p> - - - <p>A <code>ReferenceUsage</code> is always referential.</p> + + + <p>The <code>originalPortDefinition</code> of the <code>ownedPortConjugator</code> of a <code>ConjugatedPortDefinition</code> must be the <code>originalPortDefinition</code> of the <code>ConjugatedPortDefinition</code>.</p> - + OCL2.0 - isReference + ownedPortConjugator.originalPortDefinition = originalPortDefinition - - - - <p>Always <code>true</code> for a <code>ReferenceUsage</code>.</code> + + + <p>A <code>ConjugatedPortDefinition</code> must not itself have a <code>conjugatedPortDefinition</code>. - - + + OCL2.0 + conjugatedPortDefinition = null + + + + + + <p>The original <code>PortDefinition</code> for this <code>ConjugatedPortDefinition</code>, which is the <code>owningNamespace</code> of the <code>ConjugatedPortDefinition</code>.</p> + + + + - - - <p>If this <code>ReferenceUsage</code> is the <em><code>payload</code></em> <code>parameter</code> of a <code>TransitionUsage</code>, then its naming <code>Feature</code> is the <code>payloadParameter</code> of the <code>triggerAction</code> of that <code>TransitionUsage</code> (if any).</p> + + + <p>The <code>PortConjugation</code> that is the <code>ownedConjugator</code> of this <code>ConjugatedPortDefinition</code>, linking it to its <code>originalPortDefinition</code>.</p> - - + + + + + + + <p>If the <code>name</code> of the <code>originalPortDefinition</code> is non-empty, then return that with the character <code>~</code> prepended.</p> + + + OCL2.0 - if owningType <> null and owningType.oclIsKindOf(TransitionUsage) and - owningType.oclAsType(TransitionUsage).inputParameter(2) = self then - owningType.oclAsType(TransitionUsage).triggerPayloadParameter() -else self.oclAsType(Usage).namingFeature() + let originalName : String = originalPortDefinition.name in +if originalName = null then null +else '~' + originalName endif - - - - + + + + + - - - - <p>The <code>Definition</code> that owns the <code>ownedFlow</code>.</p> + + + <p>A <code>PortDefinition</code> defines a point at which external entities can connect to and interact with a system or part of a system. Any <code>ownedUsages</code> of a <code>PortDefinition</code>, other than <code>PortUsages</code>, must not be composite.</p> + + + + + + + <p>The <code>conjugatedPortDefinition</code> of a <code>PortDefinition</code> is the <code>ownedMember</code> that is a <code>ConjugatedPortDefinition</code>.</p> - - - - - - - - <p>The Usage in which the <code>nestedTransition</code> is nested.</p> + + OCL2.0 + conjugatedPortDefinition = +let conjugatedPortDefinitions : OrderedSet(ConjugatedPortDefinition) = + ownedMember->selectByKind(ConjugatedPortDefinition) in +if conjugatedPortDefinitions->isEmpty() then null +else conjugatedPortDefinitions->first() +endif + + + + + <p>The <code>ownedUsages</code> of a <code>PortDefinition</code> that are not <code>PortUsages</code> must not be composite.</p> - - - - - - - - <p>The VariantMembership that owns this Usage, if the Usage represents a variant in the context of some variation point Definition or Usage.</p> + + OCL2.0 + ownedUsage-> + reject(oclIsKindOf(PortUsage))-> + forAll(not isComposite) + + + + + <p>Unless it is a <code>ConjugatedPortDefinition</code>, a <code>PortDefinition</code> must have exactly one <code>ownedMember</code> that is a <code>ConjugatedPortDefinition</code>.</p> - - - - - - - - - <p>The Definition that owns the <code>ownedRequirement</code>.</p> + + OCL2.0 + not oclIsKindOf(ConjugatedPortDefinition) implies + ownedMember-> + selectByKind(ConjugatedPortDefinition)-> + size() = 1 + + + + + <p>A <code>PortDefinition</code> must directly or indirectly specialize the <code>PortDefinition</code> <em><code>Ports::Port</code></em> from the Systems Model Library.</p> - - - + + OCL2.0 + specializesFromLibrary('Ports::Port') + + + + + + + + + <p>The <code>ConjugatedPortDefinition</code> that is conjugate to this <code>PortDefinition</code>.</p> + + + + + - - - - <p>The Definition that owns the <code>ownedEnumeration</code>.</p> + + + + + <p>The ConjugatedPortTypings whose <code>conjugatedPortDefinition</code> a certain ConjugatedPortDefinition.</p> - - + + + - - - - <p>The Definitions that have a certain Usage as a <code>flow</code>.</p> + + + <p>A <code>PortUsage</code> is a usage of a <code>PortDefinition</code>. A <code>PortUsage</code> itself as well as all its <code>nestedUsages</code> must be referential (non-composite).</p> + + + + <p>The <code>nestedUsages</code> of a <code>PortUsage</code> that are not themselves <code>PortUsages</code> must not be composite.</p> + + + OCL2.0 + nestedUsage-> + reject(oclIsKindOf(PortUsage))-> + forAll(not isComposite) + + + + + <p>A <code>PortUsage</code> must directly or indirectly specialize the <code>PortUsage</code> <em><code>Ports::ports</code></em> from the Systems Model Library.</p> - - - - - - - - - - <p>The Definition that owns the <code>ownedConstraint</code>.</p> + + OCL2.0 + specializesFromLibrary('Ports::ports') + + + + + <p>A composite <code>PortUsage</code> with an <code>owningType</code> that is a <code>PortDefinition</code> or <code>PortUsage</code> must directly or indirectly specialize the <code>PortUsage</code> <em><code>Ports::Port::subports</code></em> from the Systems Model Library.</p> - - - - - - - - <p>The Usage in which the <code>nestedAction</code> is nested.</p> + + OCL2.0 + isComposite and owningType <> null and +(owningType.oclIsKindOf(PortDefinition) or + owningType.oclIsKindOf(PortUsage)) implies + specializesFromLibrary('Ports::Port::subports') + + + + + <p>Unless a <code>PortUsage</code> has an <code>owningType</code> that is a <code>PortDefinition</code> or a <code>PortUsage</code>, it must be referential (non-composite).</p> - - - - - - - - <p>The Usage in which the <code>nestedState</code> is nested.</p> + + OCL2.0 + owningType = null or +not owningType.oclIsKindOf(PortDefinition) and +not owningType.oclIsKindOf(PortUsage) implies + isReference + + + + + <p>A <code>PortUsage</code> whose <code>owningType</code> is a <code>PartDefinition</code> or <code>PartUsage</code> must directly or indirectly specialize the <code>PortUsage</code> <em><code>Parts::Part::ownedPorts</code></em> from the Systems Model Library.</p> - - - - - - - - - <p>The Usage in which the <code>nestedOccurrence</code> is nested.</p> + + OCL2.0 + owningType <> null and +(owningType.oclIsKindOf(PartDefinition) or + owningType.oclIsKindOf(PartUsage)) implies + specializesFromLibrary('Parts::Part::ownedPorts') + + + + + + <p>The <code>occurrenceDefinitions</code> of this <code>PortUsage</code>, which must all be <code>PortDefinitions<code>.</p> - - - + + + - - - - <p>The Definition that owns the <code>ownedConcern</code>.</p> + + + + <p>The ConjugatedPortTypings whose <code>portDefinition</code> is a certain PortDefinition.</p> - - + + + - - - - <p>The Usage that owns a certain <code>nestedRendering</code>.</p> + + + + <p>The AddressedConcernMembership that has a certain ConcernUsage as its <code>addressedConcern</code>.</p> - - + + - - - - <p>The Usage that owns a certain <code>nestedVerificationCase</code>.</p> + + + + <p>The RequirementDefinition that has a certain ConstraintUsage as an <code>assumedConstraint</code> (if any).</p> - - + + + - - - - <p>The Definition that owns the <code>ownedItem</code>.</p> - - - + + + + + + - - - <p>A <code>VariantMembership</code> is a <code>Membership</code> between a variation point <code>Definition</code> or <code>Usage</code> and a <code>Usage</code> that represents a variant in the context of that variation. The <code>membershipOwningNamespace</code> for the <code>VariantMembership</code> must be either a Definition or a <code>Usage</code> with <code>isVariation = true</code>.</p> - - - - <p>The <code>membershipOwningNamespace</code> of a <code>VariantMembership</code> must be a variation-point <code>Definition</code> or <code>Usage</code>.</p> - - - OCL2.0 - membershipOwningNamespace.oclIsKindOf(Definition) and - membershipOwningNamespace.oclAsType(Definition).isVariation or -membershipOwningNamespace.oclIsKindOf(Usage) and - membershipOwningNamespace.oclAsType(Usage).isVariation - - - - - - - - - <p>The <code>Usage</code> that represents a variant in the context of the <code>owningVariationDefinition</code> or <code>owningVariationUsage</code>.</p> + + + + <p>The RequirementUsage that has a certain ConstraintUsage as a <code>requiredConstraint</code> (if any).</p> - - - - + + + + - - - <p>A <code>Usage</code> is a usage of a <code>Definition</code>.</p> - -<p>A <code>Usage</code> may have <code>nestedUsages</code> that model <code>features</code> that apply in the context of the <code>owningUsage</code>. A <code>Usage</code> may also have <code>Definitions</code> nested in it, but this has no semantic significance, other than the nested scoping resulting from the <code>Usage</code> being considered as a <code>Namespace</code> for any nested <code>Definitions</code>.</p> - -<p>However, if a <code>Usage</code> has <code>isVariation = true</code>, then it represents a <em>variation point</em> <code>Usage</code>. In this case, all of its <code>members</code> must be <code>variant</code> <code>Usages</code>, related to the <code>Usage</code> by <code>VariantMembership</code> <code>Relationships</code>. Rather than being <code>features</code> of the <code>Usage</code>, <code>variant</code> <code>Usages</code> model different concrete alternatives that can be chosen to fill in for the variation point <code>Usage</code>.</p> + + + <p>A <code>RequirementDefinition</code> is a <code>ConstraintDefinition</code> that defines a requirement used in the context of a specification as a constraint that a valid solution must satisfy. The specification is relative to a specified subject, possibly in collaboration with one or more external actors.</p> - - - <p>The <code>variants</code> of a <code>Usage</code> are the <code>ownedVariantUsages</code> of its <code>variantMemberships</code>.</p> - - - OCL2.0 - variant = variantMembership.ownedVariantUsage - - - - - <p>The <code>variantMemberships</code> of a <code>Usage</code> are those <code>ownedMemberships</code> that are <code>VariantMemberships</code>.</p> + + + <p>The <code>texts</code> of a<code>RequirementDefinition</code> are the <code>bodies</code> of the <code>documentation</code> of the <code>RequirementDefinition</code>.</p> - + OCL2.0 - variantMembership = ownedMembership->selectByKind(VariantMembership) + text = documentation.body - - - <p>If a <code>Usage</code> is a variation, then it must not have any <code>ownedFeatureMemberships</code>.</p> + + + <p>The <code>assumedConstraints</code> of a <code>RequirementDefinition</code> are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind = assumption</code>.</p> - + OCL2.0 - isVariation implies ownedFeatureMembership->isEmpty() + assumedConstraint = ownedFeatureMembership-> + selectByKind(RequirementConstraintMembership)-> + select(kind = RequirementConstraintKind::assumption). + ownedConstraint - - - <p>A <code>Usage</code> is referential if it is not composite.</p> + + + <p>The <code>requiredConstraints</code> of a <code>RequirementDefinition</code> are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind = requirement</code>.</p> - + OCL2.0 - isReference = not isComposite + requiredConstraint = ownedFeatureMembership-> + selectByKind(RequirementConstraintMembership)-> + select(kind = RequirementConstraintKind::requirement). + ownedConstraint - - - <p>If a <code>Usage</code> has an <code>owningVariationUsage</code>, then it must directly or indirectly specialize that <code>Usage</code>.</p> + + + <p>The <code>subjectParameter</code> of a <code>RequirementDefinition</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p> - + OCL2.0 - owningVariationUsage <> null implies - specializes(owningVariationUsage) + subjectParameter = + let subjects : OrderedSet(SubjectMembership) = + featureMembership->selectByKind(SubjectMembership) in + if subjects->isEmpty() then null + else subjects->first().ownedSubjectParameter + endif - - - <p>A variation <code>Usage</code> may not specialize any variation <code>Definition</code> or <code>Usage</code>.</p> + + + <p>The <code>framedConcerns</code> of a <code>RequirementDefinition</code> are the <code>ownedConcerns</code> of the <code>FramedConcernMemberships</code> of the <code>RequirementDefinition</code>.</p> - - OCL2.0 - isVariation implies - not ownedSpecialization.specific->exists( - oclIsKindOf(Definition) and - oclAsType(Definition).isVariation or - oclIsKindOf(Usage) and - oclAsType(Usage).isVariation) + + OCL2.0 + framedConcern = featureMembership-> + selectByKind(FramedConcernMembership). + ownedConcern - - - <p>If a <code>Usage</code> has an <code>owningVariationDefinition</code>, then it must directly or indirectly specialize that <code>Definition</code>.</p> + + + <p>The <code>actorParameters</code> of a <code>RequirementDefinition</code> are the <code>ownedActorParameters</code> of the <code>ActorMemberships</code> of the <code>RequirementDefinition</code>.</p> - + OCL2.0 - owningVariationDefinition <> null implies - specializes(owningVariationDefinition) + actorParameter = featureMembership-> + selectByKind(ActorMembership). + ownedActorParameter - - - <p>The <code>directedUsages</code> of a <code>Usage</code> are all its <code>directedFeatures</code> that are <code>Usages</code>.</p> + + + <p>The <code>stakeHolderParameters</code> of a <code>RequirementDefinition</code> are the <code>ownedStakeholderParameters</code> of the <code>StakeholderMemberships</code> of the <code>RequirementDefinition</code>.</p> - + OCL2.0 - directedUsage = directedFeature->selectByKind(Usage) + stakeholderParameter = featureMembership-> + selectByKind(StakholderMembership). + ownedStakeholderParameter - - - <p>The <code>ownedActions</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ActionUsages</code>.</p> + + + <p>A <code>RequirementDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> - + OCL2.0 - nestedAction = nestedUsage->selectByKind(ActionUsage) + featureMembership-> + selectByKind(SubjectMembership)-> + size() <= 1 - - - <p>The <code>ownedAllocations</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>AllocationUsages</code>.</p> + + + <p>The <code>subjectParameter</code> of a <code>RequirementDefinition</code> must be its first <code>input</code>.</p> - + OCL2.0 - nestedAllocation = nestedUsage->selectByKind(AllocationUsage) + input->notEmpty() and input->first() = subjectParameter - - - <p>The <code>ownedAnalysisCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>AnalysisCaseUsages</code>.</p> + + + <p>A <code>RequirementDefinition</code> must directly or indirectly specialize the base <code>RequirementDefinition</code> <code><em>Requirements::RequirementCheck</em></code> from the Systems Model Library.</p> - + OCL2.0 - nestedAnalysisCase = nestedUsage->selectByKind(AnalysisCaseUsage) + specializesFromLibrary('Requirements::RequirementCheck') - - - <p>The <code>ownedAttributes</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>AttributeUsages</code>.</p> + + + + <p>An optional modeler-specified identifier for this <code>RequirementDefinition</code> (used, e.g., to link it to an original requirement text in some source document), which is the <code>declaredShortName</code> for the <code>RequirementDefinition</code>.</p> - + + + + + + + + <p>An optional textual statement of the requirement represented by this <code>RequirementDefinition</code>, derived from the <code>bodies</code> of the <code>documentation</code> of the <code>RequirementDefinition</code>.</p> + + + + + + + + + <p>The <code>parameter</code> of this <code>RequirementDefinition</code> that represents its subject.</p> + + + + + + + + + <p>The <code>parameters</code> of this <code>RequirementDefinition</code> that represent actors involved in the requirement.</p> + + + + + + + + + <p>The <code>parameters</code> of this <code>RequirementDefinition</code> that represent stakeholders for the requirement.</p> + + + + + + + + + <p>The owned <code>ConstraintUsages</code> that represent assumptions of this <code>RequirementDefinition</code>, which are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind = assumption</code>.</p> + + + + + + + + <p>The owned <code>ConstraintUsages</code> that represent requirements of this <code>RequirementDefinition</code>, derived as the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind</code> = <code>requirement</code>.</p> + + + + + + + + <p>The <code>ConcernUsages</code> framed by this <code>RequirementDefinition</code>, which are the <code>ownedConcerns</code> of all <code>FramedConcernMemberships</code> of the <code>RequirementDefinition</code>.</p> + + + + + + + + <p>A <code>ConcernDefinition</code> is a <code>RequirementDefinition</code> that one or more stakeholders may be interested in having addressed. These stakeholders are identified by the <code>ownedStakeholders</code>of the <code>ConcernDefinition</code>.</p> + + + + + <p>A <code>ConcernDefinition</code> must directly or indirectly specialize the base <code>ConcernDefinition</code> <em><code>Requirements::ConcernCheck</code></em> from the Systems Model Library.</p> + + OCL2.0 - nestedAttribute = nestedUsage->selectByKind(AttributeUsage) + specializesFromLibrary('Requirements::ConcernCheck') - - - <p>The <code>ownedCalculations</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>CalculationUsages</code>.</p> + + + + + + <p>The RequirementConstraintMembership that has a certain ConstraintUsage as its <code>referencedConstraint</code>.</p> - + + + + + + + + <p>The RequirementUsage that addresses a certain <code>addressedConcern</code>.</p> + + + + + + + + + <p>The RequirementUsages that have a certain Usage as their <code>subjectParameter</code>.</p> + + + + + + + + + + <p>A <code>FramedConcernMembership</code> is a <code>RequirementConstraintMembership</code> for a framed <code>ConcernUsage</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage</code>.</p> + + + + <p>A <code>FramedConcernMembership</code> must have <code>kind = requirement</code>.</p> + + OCL2.0 - nestedCalculation = nestedUsage->selectByKind(CalculationUsage) + kind = RequirementConstraintKind::requirement - - - <p>The <code>ownedCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>CaseUsages</code>.</p> + + + + <p>The <code>kind</code> of an <code>FramedConcernMembership</code> must be <code>requirement</code>.</p> + + + + + + <p>The <code>ConcernUsage</code> that is the <code>ownedConstraint</code> of this <code>FramedConcernMembership</code>.</p> + + + + + + + <p> The <code>ConcernUsage</code> that is referenced through this <code>FramedConcernMembership</code>. It is the <code>referencedConstraint</code> of the <code>FramedConcernMembership</code> considered as a <code>RequirementConstraintMembership</code>, which must be a <code>ConcernUsage</code>.</p> + + + + + + + + + <p>The ActorMembership that has a certain PartUsage as its <code>ownedActorParameter</code>.</p> + + + + + + + + + + <p>The SatifyRequirementUsages that have a certain RequirementUsage as their <tt>satisfiedRequirement</tt>.</p> + + + + + + + + + <p>TheStakehplderMembership that has a certain PartUsage as its <code>ownedStakeholderParameter</code>.</p> + + + + + + + + + + <p>The RequirementUsage that has a certain ConstraintUsage as an <cod>assumedConstraint</code> (if any).</p> + + + + + + + + + <p>A <code>RequirementUsage</code> is a <code>Usage</code> of a <code>RequirementDefinition</code>.</p> + + + + <p>The <code>actorParameters</code> of a <code>RequirementUsage</code> are the <code>ownedActorParameters</code> of the <code>ActorMemberships</code> of the <code>RequirementUsage</code>.</p> - + OCL2.0 - nestedCase = nestedUsage->selectByKind(CaseUsage) + actorParameter = featureMembership-> + selectByKind(ActorMembership). + ownedActorParameter - - - <p>The <code>ownedConcerns</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ConcernUsages</code>.</p> + + + <p>The <code>assumedConstraints</code> of a <code>RequirementUsage</code> are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementDefinition</code> with <code>kind = assumption</code>.</p> - + OCL2.0 - nestedConcern = nestedUsage->selectByKind(ConcernUsage) + assumedConstraint = ownedFeatureMembership-> + selectByKind(RequirementConstraintMembership)-> + select(kind = RequirementConstraintKind::assumption). + ownedConstraint - - - <p>The <code>ownedConnections</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ConnectorAsUsages</code>.</p> + + + <p>The <code>framedConcerns</code> of a <code>RequirementUsage</code> are the <code>ownedConcerns</code> of the <code>FramedConcernMemberships</code> of the <code>RequirementUsage</code>.</p> - + OCL2.0 - nestedConnection = nestedUsage->selectByKind(ConnectorAsUsage) + framedConcern = featureMembership-> + selectByKind(FramedConcernMembership). + ownedConcern - - - <p>The <code>ownedConstraints</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ConstraintUsages</code>.</p> + + + <p>The <code>requiredConstraints</code> of a <code>RequirementUsage</code> are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementUsage</code> with <code>kind = requirement</code>.</p> - + OCL2.0 - nestedConstraint = nestedUsage->selectByKind(ConstraintUsage) + requiredConstraint = ownedFeatureMembership-> + selectByKind(RequirementConstraintMembership)-> + select(kind = RequirementConstraintKind::requirement). + ownedConstraint - - - <p>The <code>ownedEnumerations</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>EnumerationUsages</code>.</p> + + + <p>The <code>stakeHolderParameters</code> of a <code>RequirementUsage</code> are the <code>ownedStakeholderParameters</code> of the <code>StakeholderMemberships</code> of the <code>RequirementUsage</code>.</p> - + OCL2.0 - ownedNested = nestedUsage->selectByKind(EnumerationUsage) + stakeholderParameter = featureMembership-> + selectByKind(AStakholderMembership). + ownedStakeholderParameter - - - <p>The <code>ownedFlows</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>FlowConnectionUsages</code>.</p> + + + <p>The <code>subjectParameter</code> of a <code>RequirementUsage</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p> - + OCL2.0 - nestedFlow = nestedUsage->selectByKind(FlowConnectionUsage) + subjectParameter = + let subjects : OrderedSet(SubjectMembership) = + featureMembership->selectByKind(SubjectMembership) in + if subjects->isEmpty() then null + else subjects->first().ownedSubjectParameter + endif - - - <p>The <code>ownedInterfaces</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>InterfaceUsages</code>.</p> + + + <p>The <code>texts</code> of a<code>RequirementUsage</code> are the <code>bodies</code> of the <code>documentation</code> of the <code>RequirementUsage</code>.</p> - + OCL2.0 - nestedInterface = nestedUsage->selectByKind(ReferenceUsage) + text = documentation.body - - - <p>The <code>ownedItems</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ItemUsages</code>.</p> + + + <p>A <code>RequirementDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> - + OCL2.0 - nestedItem = nestedUsage->selectByKind(ItemUsage) + featureMembership-> + selectByKind(SubjectMembership)-> + size() <= 1 - - - <p>The <code>ownedMetadata</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>MetadataUsages</code>.</p> + + + <p>The <code>subjectParameter</code> of a <code>RequirementUsage</code> must be its first <code>input</code>.</p> - + OCL2.0 - nestedMetadata = nestedUsage->selectByKind(MetadataUsage) + input->notEmpty() and input->first() = subjectParameter - - - <p>The <code>ownedOccurrences</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>OccurrenceUsages</code>.</p> + + + <p>A <code>RequirementUsage</code> must directly or indirectly specialize the base <code>RequirementUsage</code> <em><code>Requirements::requirementChecks</code></em> from the Systems Model Library.</p> - + OCL2.0 - nestedOccurrence = nestedUsage->selectByKind(OccurrenceUsage) + specializesFromLibrary('Requirements::requirementChecks') - - - <p>The <code>ownedParts</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>PartUsages</code>.</p> + + + <p>A composite <code>RequirementUsage</code> whose <code>owningType</code> is a <code>RequirementDefinition</code> or <code>RequirementUsage</code> must directly or indirectly specialize the <code>RequirementUsage</code> <em><code>Requirements::RequirementCheck::subrequirements</code></em> from the Systems Model Library.</p> - + OCL2.0 - nestedPart = nestedUsage->selectByKind(PartUsage) + isComposite and owningType <> null and + (owningType.oclIsKindOf(RequirementDefinition) or + owningType.oclIsKindOf(RequirementUsage)) implies + specializesFromLibrary('Requirements::RequirementCheck::subrequirements') - - - <p>The <code>ownedPorts</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>PortUsages</code>.</p> + + + <p>A <code>RequirementUsage</code> whose <code>owningFeatureMembership</code> is a <code>ObjectiveMembership</code> must redefine the <code>objectiveRequirement</code> of each <code>CaseDefinition</code> or <code>CaseUsage</code> that is specialized by the <code>owningType</code> of the <code>RequirementUsage</code>.</p> - + OCL2.0 - nestedPort = nestedUsage->selectByKind(PortUsage) + owningfeatureMembership <> null and +owningfeatureMembership.oclIsKindOf(ObjectiveMembership) implies + owningType.ownedSpecialization.general->forAll(gen | + (gen.oclIsKindOf(CaseDefinition) implies + redefines(gen.oclAsType(CaseDefinition).objectiveRequirement)) and + (gen.oclIsKindOf(Feature) and + gen.oclAsType(Feature).featureTarget.oclIsKindOf(CaseUsage) implies + redefines(gen.oclAsType(Feature).featureTarget. + oclAsType(CaseUsage).objectiveRequirement)) - - - <p>The <code>ownedReferences</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ReferenceUsages</code>.</p> + + + <p>A <code>RequirementUsage</code> whose <code>owningFeatureMembership</code> is a <code>RequirementVerificationMembership</code> must directly or indirectly specialize the <code>RequirementUsage</code> <code><em>VerificationCases::VerificationCase::obj::requirementVerifications</em></code>.</p> - + OCL2.0 - nestedReference = nestedUsage->selectByKind(ReferenceUsage) + owningFeatureMembership <> null and +owningFeatureMembership.oclIsKindOf(RequirementVerificationMembership) implies + specializesFromLibrary('VerificationCases::VerificationCase::obj::requirementVerifications') - - - <p>The <code>ownedRenderings</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>RenderingUsages</code>.</p> + + + + <p>The <code>RequirementDefinition</code> that is the single <code>definition</code> of this <code>RequirementUsage</code>.</p> - - OCL2.0 - nestedRendering = nestedUsage->selectByKind(RenderingUsage) - - - - - <p>The <code>ownedRequirements</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>RequirementUsages</code>.</p> + + + + + + <p>An optional modeler-specified identifier for this <code>RequirementUsage</code> (used, e.g., to link it to an original requirement text in some source document), which is the <code>declaredShortName</code> for the <code>RequirementUsage</code>.</p> + + + + + + + + + <p>An optional textual statement of the requirement represented by this <code>RequirementUsage</code>, derived from the <code>bodies<code> of the <code>documentation</code> of the <code>RequirementUsage</code>.</p> + + + + + + + + <p>The owned <code>ConstraintUsages</code> that represent requirements of this <code>RequirementUsage</code>, which are the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementUsage</code> with <code>kind</code> = <code>requirement</code>.</p> + + + + + + + + <p>The owned <code>ConstraintUsages</code> that represent assumptions of this <code>RequirementUsage</code>, derived as the <code>ownedConstraints</code> of the <code>RequirementConstraintMemberships</code> of the <code>RequirementUsage</code> with <code>kind</code> = <code>assumption</code>.</p> + + + + + + + + <p>The <code>parameter</code> of this <code>RequirementUsage</code> that represents its subject.</p> + + + + + + + + + <p>The <code>ConcernUsages</code> framed by this <code>RequirementUsage</code>, which are the <code>ownedConcerns</code> of all <code>FramedConcernMemberships</code> of the <code>RequirementUsage</code>.</p> + + + + + + + <p>The <code>parameters</code> of this <code>RequirementUsage</code> that represent actors involved in the requirement.</p> + + + + + + + + + <p>The <code>parameters</code> of this <code>RequirementUsage</code> that represent stakeholders for the requirement.</p> + + + + + + + + + + + <p>The RequirementDefinition that has a certain ConstraintUsage as a <code>requiredConstraint</code> (if any).</p> + + + + + + + + + <p>A <code>ConcernUsage</code> is a <code>Usage</code> of a <code>ConcernDefinition</code>.</p> + + The <code>ownedStakeholder</code> features of the ConcernUsage shall all subset the <em><code>ConcernCheck::concernedStakeholders</code> </em>feature. If the ConcernUsage is an <code>ownedFeature</code> of a StakeholderDefinition or StakeholderUsage, then the ConcernUsage shall have an <code>ownedStakeholder</code> feature that is bound to the <em><code>self</code></em> feature of its owner.</p> + + + + + <p>A <code>ConcernUsage</code> must directly or indirectly specialize the base <code>ConcernUsage</code> <em><code>Requirements::concernChecks</code></em> from the Systems Model Library.</p> - + OCL2.0 - nestedRequirement = nestedUsage->selectByKind(RequirementUsage) + specializesFromLibrary('Requirements::concernChecks') - - - <p>The <code>ownedStates</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>StateUsages</code>.</p> + + + <p>If a <code>ConcernUsage</code> is owned via a <code>FramedConcernMembership</code>, then it must directly or indirectly specialize the <code>ConcernUsage</code> <code><em>Requirements::RequirementCheck::concerns</em></code> from the Systems Model Library.</p> - + OCL2.0 - nestedState = nestedUsage->selectByKind(StateUsage) + owningFeatureMembership <> null and +owningFeatureMembership.oclIsKindOf(FramedConcernMembership) implies + specializesFromLibrary('Requirements::RequirementCheck::concerns') - - - <p>The <code>ownedTransitions</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>TransitionUsages</code>.</p> + + + + <p>The ConcernDefinition that is the single type of this ConcernUsage.</p> - - OCL2.0 - nestedTransition = nestedUsage->selectByKind(TransitionUsage) - - - - - <p>The <code>ownedUsages</code> of a <code>Usage</code> are all its <code>ownedFeatures</code> that are <code>Usages</code>.</p> + + + + + + + <p>A <code>StakeholderMembership</code> is a <code>ParameterMembership</code> that identifies a <code>PartUsage</code> as a <code>stakeholderParameter</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage</code>, which specifies a role played by an entity with concerns framed by the <code>owningType</code>.</p> + + + + <p>The <code>owningType</code> of a <code>StakeholderMembership</code> must be a <code>RequirementDefinition</code> or <code>RequirementUsage</code>.</p> - + OCL2.0 - nestedUsage = ownedFeature->selectByKind(Usage) + owningType.oclIsKindOf(RequirementUsage) or +owningType.oclIsKindOf(RequirementDefinition) - - - <p>The <code>ownedUseCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>UseCaseUsages</code>.</p> + + + + + + <p>The <code>PartUsage</code> specifying the stakeholder.</p> - - OCL2.0 - nestedUseCase = nestedUsage->selectByKind(UseCaseUsage) - - - - - <p>The <code>ownedValidationCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ValidationCaseUsages</code>.</p> + + + + + + + + <p>A <code>RequirementConstraintMembership</code> is a <code>FeatureMembership</code> for an assumed or required <code>ConstraintUsage</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage<code>.</p> + + + + <p>The <code>referencedConstraint</code> of a <code>RequirementConstraintMembership</code> is the <code>featureTarget</code> of the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code> of the <code>ownedConstraint</code>, if there is one, and, otherwise, the <code>ownedConstraint</code> itself.</p> - + OCL2.0 - nestedVerificationCase = nestedUsage->selectByKind(VerificationCaseUsage) + referencedConstraint = + let referencedFeature : Feature = + ownedConstraint.referencedFeatureTarget() in + if referencedFeature = null then ownedConstraint + else if referencedFeature.oclIsKindOf(ConstraintUsage) then + refrencedFeature.oclAsType(ConstraintUsage) + else null + endif endif - - - <p>The <code>ownedViews</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ViewUsages</code>.</p> + + + <p>The <code>owningType</code> of a <code>RequirementConstraintMembership</code> must be a <code>RequirementDefinition</code> or a <code>RequirementUsage</code>.</p> - + OCL2.0 - nestedView = nestedUsage->selectByKind(ViewUsage) + owningType.oclIsKindOf(RequirementDefinition) or +owningType.oclIsKindOf(RequirementUsage) - - - <p>The <code>ownedViewpoints</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ViewpointUsages</code>.</p> + + + <p>The <code>ownedConstraint</code> of a <code>RequirementConstraintMembership</code> must be composite.</p> - + OCL2.0 - nestedViewpoint = nestedUsage->selectByKind(ViewpointUsage) + ownedConstraint.isComposite - - - <p>The <code>usages</code> of a <code>Usage</code> are all its <code>features</code> that are <code>Usages</code>.</p> + + + + + + <p>Whether the <code>RequirementConstraintMembership</code> is for an assumed or required <code>ConstraintUsage</code>.</p> - - OCL2.0 - usage = feature->selectByKind(Usage) - - - - - <p>A <code>Usage</code> that is directed, an end feature or has no <code>featuringTypes</code> must be referential.</p> + + + + <p>The <code>ConstraintUsage</code> that is the <code>ownedMemberFeature</code> of this <code>RequirementConstraintMembership</code>.</p> - + + + + + + + <p> The <code>ConstraintUsage</code> that is referenced through this <code>RequirementConstraintMembership</code>. It is the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code> of the <code>ownedConstraint</code>, if there is one, and, otherwise, the <code>ownedConstraint</code> itself.</p> + + + + + + + + + <p>The SatisfyRequirementUsages that have a certain Feature as their <tt>satisfyingFeature</tt>.</p> + + + + + + + + + <p>The ConcernUsages that are typed by a certain <code>concernDefinition</code>.</p> + + + + + + + + <p>A <code>RequirementConstraintKind</code> indicates whether a <code>ConstraintUsage</code> is an assumption or a requirement in a <code>RequirementDefinition</code> or <code>RequirementUsage</code>.</p> + + + + <p>Indicates that a member <code>ConstraintUsage</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage</code> represents an assumption.</p> + + + + + <p>Indicates that a member <code>ConstraintUsage</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage</code>represents an requirement.</p> + + + + + + + <p>The RequirementUsages that have a certain PartUsage as an <code>actorParameter</code>.</p> + + + + + + + + + + <p>A <code>SatisfyRequirementUsage</code> is an <code>AssertConstraintUsage</code> that asserts, by default, that a satisfied <code>RequirementUsage</code> is true for a specific <code>satisfyingFeature</code>, or, if <code>isNegated = true</code>, that the <code>RequirementUsage</code> is false. The satisfied <code>RequirementUsage</code> is related to the <code>SatisfyRequirementUsage</code> by a <code>ReferenceSubsetting</code> <code>Relationship</code>.</p> + + + + <p>The <code>satisfyingFeature</code> of a <code>SatisfyRequirementUsage</code> is the <code>Feature</code> to which the <code>subjectParameter</code> is bound.</p> + + OCL2.0 - direction <> null or isEnd or featuringType->isEmpty() implies - isReference + satisfyingFeature = + let bindings: BindingConnector = ownedMember-> + selectByKind(BindingConnector)-> + select(b | b.relatedElement->includes(subjectParameter)) in + if bindings->isEmpty() or + not bindings->first().relatedElement->exits(r | r <> subjectParameter) + then null + else bindings->first().relatedElement->any(r | r <> subjectParameter) + endif - - - <p>If a <code>Usage</code> is a variation, then it must be abstract.</p> + + + <p>A <code>SatisfyRequirementUsage</code> must have exactly one <code>ownedMember</code> that is a <code>BindingConnector</code> between its <code>subjectParameter</code> and some <code>Feature</code> other than the <code>subjectParameter</code>.</p> - + OCL2.0 - isVariation implies isAbstract + ownedMember->selectByKind(BindingConnector)-> + select(b | + b.relatedElement->includes(subjectParameter) and + b.relatedElement->exists(r | r <> subjectParameter))-> + size() = 1 - - - <p>A <code>Usage</code> <code>mayTimeVary</code> if and only if all of the following are true</p> -<ul> - <li>It has an <code>owningType</code> that specializes <em><code>Occurrences::Occurrence</code></em> (from the Kernel Semantic Library).</li> - <li>It is not a portion.</li> - <li>It does not specialize <em><code>Links::SelfLink</code></em> or <em><code>Occurrences::HappensLink</code></em> (from the Kernel Semantic Library).</li> - <li>If <code>isComposite = true</code>, it does not specialize <em><code>Actions::Action</code></em> (from the Systems Model Library). -</li></ul> + + + <p>If a <code>SatisfyRequirementUsage</code> has an <code>ownedReferenceSubsetting</code>, then the <code>featureTarget</code> of its <code>referencedFeature</code> must be a <code>RequirementUsage</code>.</p> - + OCL2.0 - mayTimeVary = - owningType <> null and - owningType.specializesFromLibrary('Occurrences::Occurrence') and - not ( - isPortion or - specializesFromLibrary('Links::SelfLink') or - specializesFromLibrary('Occurrences::HappensLink') or - isComposite and specializesFromLibrary('Actions::Action') - ) + referencedFeatureTarget() <> null implies + referencedFeatureTarget().oclIsKindOf(RequirementUsage) - - - <p>If a <code>Usage</code> has an <code>owningVariationUsage</code>, then it must have the same <code>featuringTypes</code> as that <code>Usage</code>.</p> + + + <p>If a <code>SatisfyRequirementUsage</code> is negated, then it must directly or indirectly specialize the <code>RequirementUsage</code> <em><code>Requirements::notSatisfiedRequirementChecks</code></em>. Otherwise, it must directly or indirectly specialize the <code>RequirementUsage</code> <em><code>Requirements::satisfiedRequirementChecks</code></em>.</p> - + OCL2.0 - owningVariationUsage <> null implies - featuringType->asSet() = owningVariationUsage.featuringType->asSet() + if isNegated then + specializesFromLibrary('Requirements::notSatisfiedRequirementChecks') +else + specializesFromLibrary('Requirements::satisfiedRequirementChecks') +endif - - - - - - <p>Whether this <code>Usage</code> may be time varying (that is, whether it is featured by the snapshots of its <code>owningType</code>, rather than being featured by the <code>owningType</code> itself). However, if <code>isConstant</code> is also true, then the value of the <code>Usage</code> is nevertheless constant over the entire duration of an instance of its <code>owningType</code> (that is, it has the same value on all snapshots).</p> - -<p>The property <code>mayTimeVary</code> redefines the KerML property <code>Feature::isVariable</code>, making it derived. The property <code>isConstant</code> is inherited from <code>Feature</code>.</p> - - - - - - - <p>Whether this <code>Usage</code> is a referential <code>Usage</code>, that is, it has <code>isComposite = false</code>.<p> + + + + + <p>The <code>RequirementUsage</code> that is satisfied by the <code>satisfyingSubject</code> of this <code>SatisfyRequirementUsage</code>. It is the <code>assertedConstraint</code> of the <code>SatisfyRequirementUsage</code> considered as an <code>AssertConstraintUsage</code>, which must be a <code>RequirementUsage</code>.</p> - + + - - - <p>The <code>Usages</code> which represent the variants of this <code>Usage</code> as a variation point <code>Usage</code>, if <code>isVariation = true</code>. If <code>isVariation = false</code>, then there must be no <code>variants</code>.</p> + + + <p>The <code>Feature</code> that represents the actual subject that is asserted to satisfy the <code>satisfiedRequirement</code>. The <code>satisfyingFeature</code> is bound to the <code>subjectParameter</code> of the <code>SatisfyRequirementUsage</code>.</p> - - - + + + - - - <p>The <code>ownedMemberships</code> of this <code>Usage</code> that are <code>VariantMemberships</code>. If <code>isVariation = true</code>, then this must be all <code>memberships</code> of the <code>Usage</code>. If <code>isVariation = false</code>, then <code>variantMembership</code>must be empty.</p> + + + + + <p>The SubjectMembership that owns a particular Parameter as its <code>ownedSubjectParameter</code>.</p> - - - - - - - <p>The <code>Definition</code> that owns this <code>Usage</code> (if any).</p> + + + + + + + + + <p>The RequirementConstraintMembership that owns a certain ConstraintUsage as its <code>ownedConstraint</code>.</p> - - - - - - - - <p>The <code>Usage</code> in which this <code>Usage</code> is nested (if any).</p> + + + + + + + + + <p>The AddressedConcernMembership that owns a certain ConcernUsage as its <code>ownedConcern</code>.</p> - - - - - - - <p>The <code>Classifiers</code> that are the types of this <code>Usage</code>. Nominally, these are <code>Definitions</code>, but other kinds of Kernel <code>Classifiers</code> are also allowed, to permit use of <code>Classifiers</code> from the Kernel Model Libraries.</p> + + + + + + + + + + + + + + + + <p>The RequirementUsages typed by a certain RequirementDefinition.</p> - - - - - - - - <p>The <code>Usages</code> that are <code>features</code> of this <code>Usage</code> (not necessarily owned).</p> + + + + + + + + <p>The RequirementDefinitions that have a certain PartUsage as an <code>actorParameter</code>.</p> - - + + + + + + + + + <p>A <code>SubjectMembership</code> is a <code>ParameterMembership</code> that indicates that its <code>ownedSubjectParameter</code> is the subject of its <code>owningType</code>. The <code>owningType</code> of a <code>SubjectMembership</code> must be a <code>RequirementDefinition</code>, <code>RequirementUsage</code>, <code>CaseDefinition</code>, or <code>CaseUsage</code>.</p> + + + + <p>The <code>owningType</code> of a <code>SubjectMembership</code> must be a <code>RequirementDefinition</code>, <code>RequirementUsage</code>, <code>CaseDefinition</code>, or <code>CaseUsage</code>.</p> - - - - - - - <p>The <code>usages</code> of this <code>Usage</code> that are <code>directedFeatures</code>.</p> + + OCL2.0 + owningType.oclIsType(RequirementDefinition) or +owningType.oclIsType(RequiremenCaseRequirementDefinition) or +owningType.oclIsType(CaseDefinition) or +owningType.oclIsType(CaseUsage) + + + + + + + + <p>The <code>Usage</code< that is the <code>ownedMemberParameter</code> of this <code>SubjectMembership</code>.</p> - - - - - - - - <p>The <code>Usages</code> that are <code>ownedFeatures</code> of this <code>Usage</code>.</p> - - - - - + + + - - - <p>The <code>ReferenceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + + + <p>An <code>ActorMembership</code> is a <code>ParameterMembership</code> that identifies a <code>PartUsage</code> as an <em>actor</em> <code>parameter</code>, which specifies a role played by an external entity in interaction with the <code>owningType</code> of the <code>ActorMembership</code>.</p> + + + + <p>The <code>owningType</code> of an <code>ActorMembership</code> must be a <code>RequirementDefinition</code>, <code>RequirementUsage</code>, <code>CaseDefinition</code>, or <code>CaseUsage</code>.</p> - - - - - - <p>The code>AttributeUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + OCL2.0 + owningType.oclIsKindOf(RequirementUsage) or +owningType.oclIsKindOf(RequirementDefinition) or +owningType.oclIsKindOf(CaseDefinition) or +owningType.oclIsKindOf(CaseUsage) + + + + + + + + <p>The <code>PartUsage</code> specifying the actor.</p> - - - - - - <p>The code>EnumerationUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.<p> - - - - - - - <p>The <code>OccurrenceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - - - - - <p>The <code>ItemUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - - - - - <p>The <code>PartUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - + + + - - - <p>The <code>PortUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + + + + <p>The RequirementDefinitions that have a certain Usage as their <code>subjectParameter</code>.</p> - - - - - - <p>The <code>ConnectorAsUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>. Note that this list includes <code>BindingConnectorAsUsages</code>, <code>SuccessionAsUsages</code>, and <code>FlowConnectionUsages</code> because these are <code>ConnectorAsUsages</code> even though they are not <code>ConnectionUsages</code>.</p> + + + + + + + + + + <p>The RequirementDefinition that addresses a certain <code>addressedConcern</code>.</p> - - - - - - <p>The code>FlowUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + + + + + + <p>A <code>CaseUsage</code> is a <code>Usage</code> of a <code>CaseDefinition</code>.</p> + + + + <p>The <code>objectiveRequirement</code> of a <code>CaseUsage</code> is the <code>RequirementUsage</code> it owns via an <case>ObjectiveMembership</code>, if any.</p> - - - - - - <p>The <code>InterfaceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + OCL2.0 + objectiveRequirement = + let objectives: OrderedSet(RequirementUsage) = + featureMembership-> + selectByKind(ObjectiveMembership). + ownedRequirement in + if objectives->isEmpty() then null + else objectives->first().ownedObjectiveRequirement + endif + + + + + <p>A <code>CaseUsage</code> must have at most one <code>featureMembership</code> that is a <code>ObjectiveMembership</code>.</p> - - - - - - <p>The <code>AllocationUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + OCL2.0 + featureMembership-> + selectByKind(ObjectiveMembership)-> + size() <= 1 + + + + + <p>A <code>CaseUsage</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> - - - - - - <p>The <code>ActionUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + OCL2.0 + featureMembership-> + selectByKind(SubjectMembership)-> + size() <= 1 + + + + + <p>The <code>actorParameters</code> of a <code>CaseUsage</code> are the <code>ownedActorParameters</code> of the <code>ActorMemberships</code> of the <code>CaseUsage</code>.</p> - - - - - - <p>The <code>StateUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + OCL2.0 + actorParameter = featureMembership-> + selectByKind(ActorMembership). + ownedActorParameter + + + + + <p>The <code>subjectParameter</code> of a <code>CaseUsage</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p> - - - - - - <p>The <code>TransitionUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + OCL2.0 + subjectParameter = + let subjects : OrderedSet(SubjectMembership) = + featureMembership->selectByKind(SubjectMembership) in + if subjects->isEmpty() then null + else subjects->first().ownedSubjectParameter + endif + + + + + <p>The <code>subjectParameter</code> of a <code>CaseUsage</code> must be its first <code>input</code>.</p> - - - - - - <p>The <code>CalculationUsage</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + OCL2.0 + input->notEmpty() and input->first() = subjectParameter + + + + + <p>A <code>CaseUsage</code> must directly or indirectly specialize the base <code>CaseUsage</code> <em><code>Cases::cases</code></em> from the Systems Model Library.</p> - - - - - - <p>The <code>ConstraintUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + OCL2.0 + specializesFromLibrary('Cases::cases') + + + + + <p>A composite <code>CaseUsage</code> whose <code>owningType</code> is a <code>CaseDefinition</code> or <code>CaseUsage</code> must directly or indirectly specialize the <code>CaseUsage</code> <em><code>Cases::Case::subcases</code></em>.</p> - - - - - - <p>The <code>RequirementUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + OCL2.0 + isComposite and owningType <> null and + (owningType.oclIsKindOf(CaseDefinition) or + owningType.oclIsKindOf(CaseUsage)) implies + specializesFromLibrary('Cases::Case::subcases') + + + + + + <p>The <code>RequirementUsage</code> representing the objective of this <code>CaseUsage</code>.</p> - - + + - - - <p>The <code>ConcernUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + + <p>The CaseDefinition that is the type of this CaseUsage.</p> - - + + - - - <p>The <code>CaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + + <p>The <code>parameter</code> of this <code>CaseUsage</code> that represents its subject.</p> - - + + + + - - - <p>The <code>AnalysisCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + + <p>The <code>parameters</code> of this <code>CaseUsage</code> that represent actors involved in the case.</p> - - + + + + - - - <p>The <code>VerificationCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + + + + <p>The CaseUsages being typed by a certain CaseDefinition.</p> - - - - - - <p>The <code>UseCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + + + + + + + <p>The ObjectMembership that owns a particular RequirementUsage as its <code>ownedObjectiveRequirement</code>.</p> - - - - - - <p>The <code>ViewUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + + + + + + + <p>An <code>ObjectiveMembership</code> is a <code>FeatureMembership</code> that indicates that its <code>ownedObjectiveRequirement</code> is the objective <code>RequirementUsage</code> for its <code>owningType</code>, which must be a <code>CaseDefinition</code> or <code>CaseUsage</code>.</p> + + + + <p>The <code>owningType</code> of an <code>ObjectiveMembership</code> must be a <code>CaseDefinition</code> or <code>CaseUsage</code>.</p> - - - - - - <p>The <code>ViewpointUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + OCL2.0 + owningType.oclIsType(CaseDefinition) or +owningType.oclIsType(CaseUsage) + + + + + <p>The <code>ownedObjectiveRequirement</code> of an <code>ObjectiveMembership</code> must be composite.</p> - - - - - - <p>The <code>RenderingUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + OCL2.0 + ownedObjectiveRequirement.isComposite + + + + + + + + <p>The RequirementUsage that is the <code>ownedMemberFeature</code> of this RequirementUsage.</p> - - - - - - <p>The <code>MetadataUsages</code> that are <code>nestedUsages</code> of this of this <code>Usage</code>.</p> - - - - - - - <p>Whether this <code>Usage</code> is for a variation point or not. If true, then all the <code>memberships</code> of the <code>Usage</code> must be <code>VariantMemberships</code>.</p> - - + + + - - - <p>If this <code>Usage</code> is a variant, then its naming <code>Feature</code> is the <code>referencedFeature</code> of its <code>ownedReferenceSubsetting</code>.</p> - - - - OCL2.0 - if not owningMembership.oclIsKindOf(VariantMembership) then - self.oclAsType(Feature).namingFeature() -else if ownedReferenceSubsetting = null then null -else ownedReferenceSubsetting.referencedFeature -endif endif - - - - - - - - - - - - <p>If <code>ownedReferenceSubsetting</code> is not null, return the <code>featureTarget</code> of the <code>referencedFeature</code> of the <code>ownedReferenceSubsetting</code>.</p> - - - - OCL2.0 - if ownedReferenceSubsetting = null then null -else ownedReferenceSubsetting.referencedFeature.featureTarget -endif - - - - - - - - - - <p>The Usage in which the <code>nestedUseCase</code> is nested.</p> + + + + <p>The CaseUsages that have a certain PartUsage as an <code>actorParameter</code>.</p> - - + + + + - - - - <p>The variation point Definition that for which this Usage represents a variant, derived as the <code>owningVariationDefinition</code> of the <code>owningVariantMembership</code> of the Usage.</p> + + + + <p>The CaseUsages that have a certain Usage as their <code>subjectParameter</code>.</p> - - - + + + + - - - - <p>The Usage in which the <code>nestedUsage</code> is nested.</p> + + + + <p>The Usage in which the <code>nestedCase</code> is nested.</p> - - + + - - - - <p>The Definition that owns a certain <code>ownedView</code>.</p> + + + + <p>The CaseDefinitions that have a certain Usage as their <code>subjectParameter</code>.</p> - - + + + + - - - - <p>The Usage that owns the <code>nestedReference</code>.</p> + + + + <p>The CaseDefinitions that have a certain RequirementUsage as their <code>objectiveRequirement</code>.</p> - - + + + - - - - <p>The Definition that owns the <code>ownedPart</code>.</p> + + + + + + + + + <p>A <code>CaseDefinition</code> is a <code>CalculationDefinition</code> for a process, often involving collecting evidence or data, relative to a subject, possibly involving the collaboration of one or more other actors, producing a result that meets an objective.</p> + + + + <p>The <code>objectiveRequirement</code> of a <code>CaseDefinition</code> is the <code>ownedObjectiveRequirement</code> of its <case>ObjectiveMembership</code>, if any.</p> + + + OCL2.0 + objectiveRequirement = + let objectives: OrderedSet(RequirementUsage) = + featureMembership-> + selectByKind(ObjectiveMembership). + ownedRequirement in + if objectives->isEmpty() then null + else objectives->first().ownedObjectiveRequirement + endif + + + + + <p>A <code>CaseDefinition</code> must have at most one <code>featureMembership</code> that is a <code>ObjectiveMembership</code>.</p> + + + OCL2.0 + featureMembership-> + selectByKind(ObjectiveMembership)-> + size() <= 1 + + + + + <p>The <code>subjectParameter</code> of a <code>CaseDefinition</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p> + + + OCL2.0 + subjectParameter = + let subjectMems : OrderedSet(SubjectMembership) = + featureMembership->selectByKind(SubjectMembership) in + if subjectMems->isEmpty() then null + else subjectMems->first().ownedSubjectParameter + endif + + + + + <p>The <code>actorParameters</code> of a <code>CaseDefinition</code> are the <code>ownedActorParameters</code> of the <code>ActorMemberships</code> of the <code>CaseDefinition</code>.</p> + + + OCL2.0 + actorParameter = featureMembership-> + selectByKind(ActorMembership). + ownedActorParameter + + + + + <p>A <code>CaseDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> + + + English + featureMembership->selectByKind(SubjectMembership)->size() <= 1 + + + + + <p>The <code>subjectParameter</code> of a <code>CaaseDefinition</code> must be its first <code>input</code>.</p> + + + OCL2.0 + input->notEmpty() and input->first() = subjectParameter + + + + + <p>A <code>CaseDefinition</code> must directly or indirectly specialize the base <code>CaseDefinition</code> <em><code>Cases::Case></code></em> from the Systems Model Library.</p> + + + OCL2.0 + specializesFromLibrary('Cases::Case') + + + + + + <p>The <code>RequirementUsage</code> representing the objective of this <code>CaseDefinition</code>.</p> + + + + + + + + <p>The <code>parameter</code> of this <code>CaseDefinition</code> that represents its subject.</p> + + + + + + + + + <p>The <code>parameters</code> of this <code>CaseDefinition</code> that represent actors involved in the case.</p> - - - + + + + + - - - - <p>The owning Definition of this VariantMembership, which must have <code>isVariation</code> = true.</p> + + + + <p>The CaseDefinitions that have a certain PartUsage as an <code>actorParameter</code>.</p> - - - + + + + - - - - <p>The Definition that owns the <code>ownedPort</code>.</p> - - - - + + + <p>A <code>BindingConnectorAsUsage</code> is both a <code>BindingConnector</code> and a <code>ConnectorAsUsage</code>.</p> + + + + + - - - - <p>The Usage in which the <code>nestedConstraint</code> is nested.</p> + + + + <p>The ConnectionDefinitions that have a certain Usage as an <code>connectionEnd</code>.</p> - - + + + - - - - <p>The Usage in which the <code>nestedAttribute</code> is nested.</p> + + + <p>A <code>ConnectionDefinition</code> is a <code>PartDefinition</code> that is also an <code>AssociationStructure</code>. The end <code>Features</code> of a <code>ConnectionDefinition</code> must be <code>Usages</code>.</p> + + + + <p>A <code>ConnectionDefinition</code> must directly or indirectly specialize the <code>ConnectionDefinition</code> <em><code>Connections::Connection</code></em> from the Systems Model Library.</p> - - - - - - - - <p>The Definition that owns a certain <code>ownedViewpoint</code>.</p> + + OCL2.0 + specializesFromLibrary('Connections::Connection') + + + + + <p>A binary <code>ConnectionDefinition</code> must directly or indirectly specialize the <code>ConnectionDefinition</code> <em><code>Connections::BinaryConnection</code></em> from the Systems Model Library.</p> - - - - - - - - <p>The Definition that owns the <code>ownedState</code>.</p> + + OCL2.0 + ownedEndFeature->size() = 2 implies + specializesFromLibrary('Connections::BinaryConnection') + + + + + <p>A <code>ConnectionDefinition</code> must have <code>isSufficient = true</code>.</p> - - - - - - - - <p>The Definition that owns the <code>ownedAttribute</code>.</p> + + OCL2.0 + isSufficient + + + + + + + + + <p>The <code>Usages</code> that define the things related by the <code>ConnectionDefinition</code>.</p> - - - - - - - - <p>The Usage that owns the <code>nestedEnumeration</code>.</p> + + + + + + + <p>A <code>ConnectionDefinition</code> always has <code>isSufficient = true</code>.</p> - - - + + + + - - - - <p>The Definitions that feature a certain Usage.</p> + + + <p>A <code>ConnectionUsage</code> is a <code>ConnectorAsUsage</code> that is also a <code>PartUsage</code>. Nominally, if its type is a <code>ConnectionDefinition</code>, then a <code>ConnectionUsage</code> is a Usage of that <code>ConnectionDefinition</code>, representing a connection between parts of a system. However, other kinds of kernel <code>AssociationStructures</code> are also allowed, to permit use of <code>AssociationStructures</code> from the Kernel Model Libraries.</p> + + + + <p>A <code>ConnectionUsage</code> must directly or indirectly specialize the <code>ConnectionUsage</code> <em><code>Connections::connections</code></em> from the Systems Model Library.</p> - - - - + + OCL2.0 + specializesFromLibrary('Connections::connections') + + + + + <p>A binary <code>ConnectionUsage</code> must directly or indirectly specialize the <code>ConnectionUsage</code> <em><code>Connections::binaryConnections</code></em> from the Systems Model Library.</p> + + + OCL2.0 + ownedEndFeature->size() = 2 implies + specializesFromLibrary('Connections::binaryConnections') + + + + + + + <p>The <code>AssociationStructures</code> that are the types of this <code>ConnectionUsage</code>. Nominally, these are , but other kinds of Kernel <code>AssociationStructures</code> are also allowed, to permit use of <code>AssociationStructures</code> from the Kernel Model Libraries</p> + + + + + + - - - - <p>The Definition that owns the <code>ownedInterface</code>.</p> + + + + <p>The ConnectionUsages that have a certain AssociationStructure as their <code>connectionDefinition</code>.</p> - - + + + - - - - <p>The Definition that owns the <code>ownedUseCase</code>.</p> + + + <p>A <code>SuccessionAsUsage</code> is both a <code>ConnectorAsUsage</code> and a <code>Succession</code>.<p> + + + + + + + + + <p>A <code>ConnectorAsUsage</code> is both a <code>Connector</code> and a <code>Usage</code>. <code>ConnectorAsUsage</code> cannot itself be instantiated in a SysML model, but it is a base class for the concrete classes <code>BindingConnectorAsUsage</code>, <code>SuccessionAsUsage</code>, <code>ConnectionUsage</code> and <code>FlowUsage</code>.</p> + + + + + + + + + <p>A <code>VerificationCaseDefinition</code> is a <code>CaseDefinition</code> for the purpose of verification of the subject of the case against its requirements.</p> + + + + <p>The <code>verifiedRequirements</code> of a <code>VerificationCaseDefinition</code> are the <code>verifiedRequirements</code> of its <code>RequirementVerificationMemberships</code>.</p> - - - + + OCL2.0 + verifiedRequirement = + if objectiveRequirement = null then OrderedSet{} + else + objectiveRequirement.featureMembership-> + selectByKind(RequirementVerificationMembership). + verifiedRequirement->asOrderedSet() + endif + + + + + <p>A <code>VerificationCaseDefinition</code> must directly or indirectly specialize the base <code>VerificationCaseDefinition</code> <em><code>VerificationCases::VerificationCase</code></em> from the Systems Model Library.</p> + + + OCL2.0 + specializesFromLibrary('VerificationCases::VerificationCase') + + + + + + <p>The <code>RequirementUsages</code> verified by this <code>VerificationCaseDefinition</code>, which are the <code>verifiedRequirements</code> of all <code>RequirementVerificationMemberships</code> of the <code>objectiveRequirement</code>.</p> + + + + - - - - <p>The owning Definition of this VariantMembership, which must have <code>isVariation</code> = true.</p> + + + + <p>The VerificationCaseUsages that verify a certain <code>verifiedRequirement</code>.</p> - - - + + - - - - <p>The Usages that have a certain Classifier as a <code>definition</code>.</p> + + + + <p>The VerificationCaseDefinitions that verify a certain <code>verifiedRequirement</code>.</p> - - - + + - - - - <p>The Usage in which the <code>nestedInterface</code> is nested.</p> + + + + <p>The VerificationUsages that are defined by a certain <code>verificationCaseDefinition</code>.</p> - - + + - - - <p>The Definition that owns this CaseUsage (if any).</p> + + + <p>A <code>VerificationCaseUsage</code> is a </code>Usage</code> of a <code>VerificationCaseDefinition</code>.</p> - - - <p>The Definition that owns the <code>ownedCase</code>.</p> + + + <p>The <code>verifiedRequirements</code> of a <code>VerificationCaseUsage</code> are the <code>verifiedRequirements</code> of its <code>RequirementVerificationMemberships</code>.</p> - - - + + OCL2.0 + verifiedRequirement = + if objectiveRequirement = null then OrderedSet{} + else + objectiveRequirement.featureMembership-> + selectByKind(RequirementVerificationMembership). + verifiedRequirement->asOrderedSet() + endif + + + + + <p>A <code>VerificationCaseUsage</code> must subset, directly or indirectly, the base <code>VerificationCaseUsage</code> <code><em>VerificationCases::verificationCases</em></code> from the Systems Model Library.</p> + + + OCL2.0 + specializesFromLibrary('VerificationCases::verificationCases') + + + + + If it is composite and owned by a <code>VerificationCaseDefinition</code> or <code>VerificationCaseUsage</code>, then it must specialize <code>VerificationCaseUsage</code> <code><em>VerificationCases::VerificationCase::subVerificationCases</code>.</p> + + + OCL2.0 + isComposite and owningType <> null and + (owningType.oclIsKindOf(VerificationCaseDefinition) or + owningType.oclIsKindOf(VerificationCaseUsage)) implies + specializesFromLibrary('VerificationCases::VerificationCase::subVerificationCases') + + + + + + <p>The <code>VerificationCase</code> that is the <code>definition</code> of this <code>VerificationCaseUsage</code>.</p> + + + + + + + <p>The <code>RequirementUsages</code> verified by this <code>VerificationCaseUsage</code>, which are the <code>verifiedRequirements</code> of all <code>RequirementVerificationMemberships</code> of the <code>objectiveRequirement</code>.</p> + + + + - - - - <p>The Definition that owns the <code>ownedMetadata</code>.</p> + + + + <p>The RequirementVerificationMembership that has a certain RequirementUsage as its <code>verifiedRequirement</code>.</p> - - + + - - - <p>A <code>MetadataUsage</code> is a <code>Usage</code> and a <code>MetadataFeature</code>, used to annotate other <code>Elements</code> in a system model with metadata. As a <code>MetadataFeature</code>, its type must be a <code>Metaclass</code>, which will nominally be a <code>MetadataDefinition</code>. However, any kernel <code>Metaclass</code> is also allowed, to permit use of <code>Metaclasses</code> from the Kernel Model Libraries.</p> + + + <p>A <code>RequirementVerificationMembership</code> is a <code>RequirementConstraintMembership </code> used in the objective of a <code>VerificationCase</code> to identify a <code>RequirementUsage</code> that is verified by the <code>VerificationCase</code>.</p> - - - <p>A <code>MetadataUsage</code> must directly or indirectly specialize the base <code>MetadataUsage</code> <code><em>Metadata::metadataItems</em></code> from the Systems Model Library.</p> + + + <p>A <code>RequirementVerificationMembership</code> must have <code>kind = requirement</code>.</p> - + OCL2.0 - specializesFromLibrary('Metadata::metadataItems') + kind = RequirementConstraintKind::requirement - - - - - - - <p>The <code>MetadataDefinition</code> that is the <code>definition</code> of this <code>MetadataUsage</code>.</p> + + + <p>The <code>owningType</code> of a <code>RequirementVerificationMembership</code> must a <code>RequirementUsage</code> that is owned by an <code>ObjectiveMembership</code>.</p> - - - - - + + OCL2.0 + owningType.oclIsKindOf(RequirementUsage) and +owningType.owningFeatureMembership <> null and +owningType.owningFeatureMembership.oclIsKindOf(ObjectiveMembership) + + + + + + <p>The owned <code>RequirementUsage</code> that acts as the <code>ownedConstraint</code> for this <code>RequirementVerificationMembership</code>. This will either be the <code>verifiedRequirement</code>, or it will subset the <code>verifiedRequirement</code>.</p> + + + + + + + <p>The <code>kind</code> of a <code>RequirementVerificationMembership</code> must be <code>requirement</code>.</p> + + + + + + <p> The <code>RequirementUsage</code> that is identified as being verified. It is the <code>referencedConstraint</code> of the <code>RequirementVerificationMembership</code> considered as a <code>RequirementConstraintMembership</code>, which must be a <code>RequirementUsage</code>.</p> + + + - - - - - - + + + + <p>The RequirementVerificationMembership that owns a certain RequirementUsage as its <code>ownedRequirement</code>.</p> + + + - - - <p>A <code>MetadataDefinition</code> is an <code>ItemDefinition</code> that is also a <code>Metaclass</code>.</p> + + + <p>An <code>AllocationUsage</code> is a usage of an <code>AllocationDefinition</code> asserting the allocation of the <code>source</code> feature to the <code>target</code> feature.</p> - - - <p>A <code>MetadataDefinition</code> must directly or indirectly specialize the base <code>MetadataDefinition</code> <code><em>Metadata::MetadataItem</em></code> from the Systems Model Library.</p> + + + <p>An <code>AllocationUsage</code> must directly or indirectly specialize the <code>AllocationUsage</code> <em><code>Allocations::allocations</code></em> from the Systems Model Library.</p> - + OCL2.0 - specializesFromLibrary('Metadata::MetadataItem') + specializesFromLibrary('Allocations::allocations') - - - - + + + + <p>The <code>AllocationDefinitions</code> that are the types of this <code>AllocationUsage</code>.</p> + + + + + + + + <p>An <code>AllocationDefinition</code> is a <code>ConnectionDefinition</code> that specifies that some or all of the responsibility to realize the intent of the <code>source</code> is allocated to the <code>target</code> instances. Such allocations define mappings across the various structures and hierarchies of a system model, perhaps as a precursor to more rigorous specifications and implementations. An <code>AllocationDefinition</code> can itself be refined using nested <code>allocations</code> that give a finer-grained decomposition of the containing allocation mapping.</p> + + + + <p> The <code>allocations</code> of an <code>AllocationDefinition</code> are all its <code>usages</code> that are <code>AllocationUsages</code>.</p> + + + OCL2.0 + allocation = usage->selectAsKind(AllocationUsage) + + + + + <p>An <code>AllocationDefinition</code> must directly or indirectly specialize the <code>AllocationDefinition</code> <em><code>Allocations::Allocation</code></em> from the Systems Model Library.</p> + + + OCL2.0 + specializesFromLibrary('Allocations::Allocation') + + + + + + <p>The <code>AllocationUsages</code> that refine the allocation mapping defined by this <code>AllocationDefinition</code>.</p> + + + + + + + + + <p>The AllocationUsages that have a certain AllocationDefinition as their <code>allocationDefinition</code>.</p> + + + + + + + + + <p>The AllocationDefinitions that feature a certain <code>allocation</code>.</p> + + + + diff --git a/org.omg.sysml/model/SysML_only_xmi.uml b/org.omg.sysml/model/SysML_only_xmi.uml index 7f368fdca..45b53eebd 100644 --- a/org.omg.sysml/model/SysML_only_xmi.uml +++ b/org.omg.sysml/model/SysML_only_xmi.uml @@ -1,5 +1,5 @@ - + @@ -142,7 +142,7 @@ endif - <p>The <codeConjugatedPortDefinition</code> that is conjugate to this <code>PortDefinition</code>.</p> + <p>The <code>ConjugatedPortDefinition</code> that is conjugate to this <code>PortDefinition</code>.</p> @@ -398,11 +398,11 @@ endif - <p>An <code>AcceptUsageAction</code> must have at least two input <code>parameters</code>, corresponding to its <em><code>payload</code></em> and <em><code>receiver</code>, respectively (even if they have no <code>FeatureValue</code>). (Note that the <code>payloadParameter</code> is an input as well as an output.)</p> + <p>An <code>AcceptUsageAction</code> must have at least on input <code>parameter</code>, corresponding to its <em><code>payload</code></em> (even if it has no <code>FeatureValue</code>). (Note that the <code>payloadParameter</code> is an input as well as an output.)</p> OCL2.0 - inputParameters()->size() >= 2 + inputParameters()->notEmpty() @@ -558,13 +558,16 @@ owningType.oclAsType(TransitionUsage).triggerAction->includes(self) payloadArgument = argument(1) - + - <p>A <code>SendActionUsage</code> must have at least three owned input <code>parameters</code>, corresponding to its <em><code>payload</code></em>, <em><code>sender</code></em> and <em><code>receiver</code></em>, respectively (whether or not they have <code>FeatureValues</code>).</p> + <p>If a <code>SendActionUsage</code> is owned via a <code>StateSubactionMembership</code> or a <code>TransitionFeatureMembership</code>, then it must have a <code>payloadArgument</code>.</p> OCL2.0 - inputParameters()->size() >= 3 + owningFeatureMembership <> null and +(owningFeatureMembership.oclIsKindOf(StateSubactionMembership) or + owningFeatureMembership.oclIsKindOf(TransitionFeatureMembership)) implies + payloadArgument <> null @@ -611,7 +614,7 @@ owningType.oclAsType(TransitionUsage).triggerAction->includes(self) - + @@ -1023,7 +1026,7 @@ endif OCL2.0 sourceConnector->selectByKind(Succession)-> forAll(subsetsChain(self, - resolveGlobal('ControlPerformances::MergePerformance::outgoingHBLink'))) + resolveGlobal('ControlPerformances::DecisionPerformance::outgoingHBLink'))) @@ -1490,7 +1493,7 @@ ownedFeature->at(1).oclIsKindOf(ReferenceUsage) targetParameter <> null and targetParameter.ownedFeature->notEmpty() and targetParameter.ownedFeature->first(). - redefines('AssignmentAction::target::startingAt') + redefinesFromLibrary('AssignmentAction::target::startingAt') @@ -1530,9 +1533,9 @@ targetParameter.ownedFeature->first(). let targetParameter : Feature = inputParameter(1) in targetParameter <> null and targetParameter.ownedFeature->notEmpty() and -targetParameter->first().ownedFeature->notEmpty() and -targetParameter->first().ownedFeature->first(). - redefines('AssigmentAction::target::startingAt::accessedFeature') +targetParameter.ownedFeature->first().ownedFeature->notEmpty() and +targetParameter.ownedFeature->first().ownedFeature->first(). + redefinesFromLibrary('AssigmentAction::target::startingAt::accessedFeature') @@ -1544,20 +1547,21 @@ targetParameter->first().ownedFeature->first(). let targetParameter : Feature = inputParameter(1) in targetParameter <> null and targetParameter.ownedFeature->notEmpty() and -targetParameter->first().ownedFeature->notEmpty() and -targetParameter->first().ownedFeature->first().redefines(referent) +targetParameter.ownedFeature->first().ownedFeature->notEmpty() and +targetParameter.ownedFeature->first().ownedFeature->first().redefines(referent) - <p>The <code>referent</code> of an <code>AssignmentActionUsage</code> is the first <code>Feature</code> that is the <code>memberElement</code> of a <code>ownedMembership</code> that is not a <code>FeatureMembership</code>.</p> + <p>The <code>referent</code> of an <code>AssignmentActionUsage</code> is the first <code>Feature</code> that is not a <code>MetadataFeature</code> and is the <code>memberElement</code> of a <code>ownedMembership</code> that is not a <code>FeatureMembership</code>.</p> OCL2.0 referent = let unownedFeatures : Sequence(Feature) = ownedMembership-> reject(oclIsKindOf(FeatureMembership)).memberElement-> - selectByKind(Feature) in + select(oclIsKindOf(Feature) and + not oclIsKindOf(MetadataFeature)) in if unownedFeatures->isEmpty() then null else unownedFeatures->first().oclAsType(Feature) endif @@ -1565,22 +1569,23 @@ targetParameter->first().ownedFeature->first().redefines(referent) - <p>An <code>AssignmentActionUsage</code> must have an <code>ownedMembership</code> that is not an <code>OwningMembership</code> and whose <code>memberElement</code> is a <code>Feature</code>.</p> + <p>An <code>AssignmentActionUsage</code> must have an <code>ownedMembership</code> that is not an <code>OwningMembership</code> and whose <code>memberElement</code> is a <code>Feature</code> but not a <code>MetadataFeature</code>.</p> OCL2.0 ownedMembership->exists( not oclIsKindOf(OwningMembership) and - memberElement.oclIsKindOf(Feature)) + memberElement.oclIsKindOf(Feature) and + not memberElement.oclIsKindOf(MetadataFeature)) - + <p>The <code>featureTarget</code> of the <code>referent</code> of an <code>AssignmentActionUsage</code> must be able to have time-varying values.</p> OCL2.0 - referent <> null implies referent.featureTarget.mayTimeVary + referent <> null implies referent.featureTarget.isVariable @@ -2063,7 +2068,7 @@ targetParameter->first().ownedFeature->first().redefines(referent) OCL2.0 - ownedFlow = ownedUsage->selectByKind(FlowConnectionUsage) + ownedFlow = ownedUsage->selectByKind(FlowUsage) @@ -2212,11 +2217,11 @@ targetParameter->first().ownedFeature->first().redefines(referent) - <p>The <code>ownedMetadata</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>MetadataUsages</code>.</p> + <p>The <code>ownedMetadata</code> of a <code>Definition</code> are all its <code>ownedMembers</code> that are <code>MetadataUsages</code>.</p> OCL2.0 - ownedMetadata = ownedUsage->selectByKind(MetadataUsage) + ownedMetadata = ownedMember->selectByKind(MetadataUsage) @@ -2458,7 +2463,7 @@ targetParameter->first().ownedFeature->first().redefines(referent) - <p>The <code>MetadataUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + <p>The <code>MetadataUsages</code> that are <code>ownedMembers</code> of this <code>Definition</code>.</p> @@ -2676,7 +2681,7 @@ targetParameter->first().ownedFeature->first().redefines(referent) OCL2.0 - nestedFlow = nestedUsage->selectByKind(FlowConnectionUsage) + nestedFlow = nestedUsage->selectByKind(FlowUsage) @@ -2699,7 +2704,7 @@ targetParameter->first().ownedFeature->first().redefines(referent) - <p>The <code>ownedMetadata</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>MetadataUsages</code>.</p> + <p>The <code>ownedMetadata</code> of a <code>Usage</code> are all its <code>ownedMembers</code> that are <code>MetadataUsages</code>.</p> OCL2.0 @@ -3027,7 +3032,7 @@ targetParameter->first().ownedFeature->first().redefines(referent) - <p>The <code>ConnectorAsUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>. Note that this list includes <code>BindingConnectorAsUsages</code>, <code>SuccessionAsUsages</code>, and <code>FlowConnectionUsages</code> because these are <code>ConnectorAsUsages</code> even though they are not <code>ConnectionUsages</code>.</p> + <p>The <code>ConnectorAsUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>. Note that this list includes <code>BindingConnectorAsUsages</code>, <code>SuccessionAsUsages</code>, and <code>FlowUsages</code> because these are <code>ConnectorAsUsages</code> even though they are not <code>ConnectionUsages</code>.</p> @@ -3167,7 +3172,7 @@ targetParameter->first().ownedFeature->first().redefines(referent) - <p>The <code>MetadataUsages</code> that are <code>nestedUsages</code> of this of this <code>Usage</code>.</p> + <p>The <code>MetadataUsages</code> that are <code>ownedMembers</code> of this of this <code>Usage</code>.</p> @@ -3867,7 +3872,7 @@ owningFeatureMembership.oclIsKindOf(ActorMembership) implies - <p>If a <code>PartUsage</code> is owned via a <code>StakeholderMembership</code>, then it must directly or indirectly specialize either <code><em>Requirements::RequirementCheck::stakeholders</em></code>.</p> + <p>If a <code>PartUsage</code> is owned via a <code>StakeholderMembership</code>, then it must directly or indirectly specialize <code><em>Requirements::RequirementCheck::stakeholders</em></code>.</p> OCL2.0 @@ -4939,11 +4944,12 @@ endif - <p>A <code>ConstraintUsage</code> whose <code>owningFeatureMembership</code> is a <code>RequirementConstraintMembership</code> must directly or indirectly specialize on the <code>ConstraintUsages</code> <code><em>assumptions</em></code> or <code><em>constraints</em></code> from the <code>ConstraintDefinition</code> <code><em>Requirements::RequirementCheck</em></code> in the Systems Model Library, depending on whether the <code>kind</code> of the <code>RequirementConstraintMembership</code> is <code>assumption</code> or <code>requirement</code>, respectively.</p> + <p>A composite <code>ConstraintUsage</code> whose <code>owningFeatureMembership</code> is a <code>RequirementConstraintMembership</code> must directly or indirectly specialize on the <code>ConstraintUsages</code> <code><em>assumptions</em></code> or <code><em>constraints</em></code> from the <code>ConstraintDefinition</code> <code><em>Requirements::RequirementCheck</em></code> in the Systems Model Library, depending on whether the <code>kind</code> of the <code>RequirementConstraintMembership</code> is <code>assumption</code> or <code>requirement</code>, respectively.</p> OCL2.0 - owningFeatureMembership <> null and + isComposite and +owningFeatureMembership <> null and owningFeatureMembership.oclIsKindOf(RequirementConstraintMembership) implies if owningFeatureMembership.oclAsType(RequirementConstraintMembership).kind = RequirementConstraintKind::assumption then @@ -5106,7 +5112,7 @@ endif OCL2.0 - referencedFeaureTarget() <> null implies + referencedFeatureTarget() <> null implies referencedFeatureTarget().oclIsKindOf(ConstraintUsage) @@ -5305,7 +5311,7 @@ endif - <p>The <code>parameters</code> of this <code>RequirementDefinition</code> that represent stakeholders for th requirement.</p> + <p>The <code>parameters</code> of this <code>RequirementDefinition</code> that represent stakeholders for the requirement.</p> @@ -5379,7 +5385,7 @@ endif selectByKind(BindingConnector)-> select(b | b.relatedElement->includes(subjectParameter)) in if bindings->isEmpty() or - bindings->first().relatedElement->exits(r | r <> subjectParameter) + not bindings->first().relatedElement->exits(r | r <> subjectParameter) then null else bindings->first().relatedElement->any(r | r <> subjectParameter) endif @@ -5554,7 +5560,7 @@ endif - <p>A composite <code>RequirementUsage</code> whose <code>owningType</code> is a <code>RequirementDefinition</code> or ,code>RequirementUsage</code> must directly or indirectly specialize the <code>RequirementUsage</code> <em><code>Requirements::RequirementCheck::subrequirements</code></em> from the Systems Model Library.</p> + <p>A composite <code>RequirementUsage</code> whose <code>owningType</code> is a <code>RequirementDefinition</code> or <code>RequirementUsage</code> must directly or indirectly specialize the <code>RequirementUsage</code> <em><code>Requirements::RequirementCheck::subrequirements</code></em> from the Systems Model Library.</p> OCL2.0 @@ -5575,8 +5581,10 @@ owningfeatureMembership.oclIsKindOf(ObjectiveMembership) implies owningType.ownedSpecialization.general->forAll(gen | (gen.oclIsKindOf(CaseDefinition) implies redefines(gen.oclAsType(CaseDefinition).objectiveRequirement)) and - (gen.oclIsKindOf(CaseUsage) implies - redefines(gen.oclAsType(CaseUsage).objectiveRequirement)) + (gen.oclIsKindOf(Feature) and + gen.oclAsType(Feature).featureTarget.oclIsKindOf(CaseUsage) implies + redefines(gen.oclAsType(Feature).featureTarget. + oclAsType(CaseUsage).objectiveRequirement)) @@ -6246,7 +6254,7 @@ owningType.oclIsKindOf(CaseUsage) OCL2.0 ownedEndFeature->size() = 2 implies - specializesFromLibrary('Connections::BinaryConnections') + specializesFromLibrary('Connections::BinaryConnection') @@ -6335,7 +6343,7 @@ owningType.oclIsKindOf(CaseUsage) - <p>A <code>ConnectorAsUsage</code> is both a <code>Connector</code> and a <code>Usage</code>. <code>ConnectorAsUsage</code> cannot itself be instantiated in a SysML model, but it is a base class for the concrete classes <code>BindingConnectorAsUsage</code>, <code>SuccessionAsUsage</code>, <code>ConnectionUsage</code> and <code>FlowConnectionUsage</code>.</p> + <p>A <code>ConnectorAsUsage</code> is both a <code>Connector</code> and a <code>Usage</code>. <code>ConnectorAsUsage</code> cannot itself be instantiated in a SysML model, but it is a base class for the concrete classes <code>BindingConnectorAsUsage</code>, <code>SuccessionAsUsage</code>, <code>ConnectionUsage</code> and <code>FlowUsage</code>.</p> @@ -6857,7 +6865,7 @@ owningType.oclIsType(CaseUsage) - <p>An <code>ItemUsage</code> is a <code>ItemUsage</code> whose <code>definition</code> is a <code>Structure</code>. Nominally, if the <code>definition</code> is an <code>ItemDefinition</code>, an <code>ItemUsage</code> is a <code>ItemUsage</code> of that <code>ItemDefinition</code> within a system. However, other kinds of Kernel <code>Structures</code> are also allowed, to permit use of <code>Structures</code> from the Kernel Model Libraries.</p> + <p>An <code>ItemUsage</code> is an <code>OccurrenceUsage</code> whose <code>definition</code> is a <code>Structure</code>. Nominally, if the <code>definition</code> is an <code>ItemDefinition</code>, an <code>ItemUsage</code> is a <code>ItemUsage</code> of that <code>ItemDefinition</code> within a system. However, other kinds of Kernel <code>Structures</code> are also allowed, to permit use of <code>Structures</code> from the Kernel Model Libraries.</p> @@ -6878,6 +6886,9 @@ owningType.oclIsType(CaseUsage) + + <p>A composite <code>ItemUsage</code> whose <code>owningType</code> is an <code>ItemDefinition</code> or <code>ItemUsage</code> must directly or indirectly specialize the Systems Model Library <code>ItemUsage</code> <em><code>Items::Item::subitems</code></em>.</p> + OCL2.0 isComposite and owningType <> null and @@ -6934,11 +6945,11 @@ owningType.oclIsType(CaseUsage) - <p>A <code>ViewpointDefinition</code> must directly or indirectly specialize the base <code>ViewpointDefinition</code> <code><em>Views::Viewpoint</em></code> from the Systems Model Library.</p> + <p>A <code>ViewpointDefinition</code> must directly or indirectly specialize the base <code>ViewpointDefinition</code> <code><em>Views::ViewpointCheck</em></code> from the Systems Model Library.</p> OCL2.0 - specializesFromLibrary('Views::Viewpoint') + specializesFromLibrary('Views::ViewpointCheck') @@ -7212,11 +7223,11 @@ self.membership->selectByKind(ElementFilterMembership). - <p>A <code>ViewpointUsage</code> must directly or indirectly specialize the base <code>ViewpointUsage</code> <code><em>Views::viewpoints</em></code> from the Systems Model Library.</p> + <p>A <code>ViewpointUsage</code> must directly or indirectly specialize the base <code>ViewpointUsage</code> <code><em>Views::viewpointChecks</em></code> from the Systems Model Library.</p> OCL2.0 - specializesFromLibrary('Views::viewpoints') + specializesFromLibrary('Views::viewpointChecks') @@ -8219,7 +8230,7 @@ owningType <> null and <p>An <code>IncludeUseCaseUsage</code> is a <code>UseCaseUsage</code> that represents the inclusion of a <code>UseCaseUsage</code> by a <code>UseCaseDefinition</code> or <code>UseCaseUsage</code>. Unless it is the <code>IncludeUseCaseUsage</code> itself, the <code>UseCaseUsage</code> to be included is related to the <code>includedUseCase</code> by a <code>ReferenceSubsetting</code> <code>Relationship</code>. An <code>IncludeUseCaseUsage</code> is also a PerformActionUsage, with its <code>useCaseIncluded</code> as the <code>performedAction</code>.</p> - + <p>A <code>IncludeUseCaseUsage</code> whose <code>owningType</code> is a <code>UseCaseDefinition</code> or <code>UseCaseUsage</code> must directly or indirectly specialize the <code>UseCaseUsage</code> <em><code>UseCases::UseCase::includedUseCases</code></em> from the Systems Model Library.</p> diff --git a/org.omg.sysml/model/SysML_xmi.uml b/org.omg.sysml/model/SysML_xmi.uml index 33875557c..b700e9662 100644 --- a/org.omg.sysml/model/SysML_xmi.uml +++ b/org.omg.sysml/model/SysML_xmi.uml @@ -1,5 +1,5 @@ - + The Root layer provides the syntactic foundation for KerML. @@ -633,7 +633,7 @@ else let memberships : Membership = membership-> select(memberShortName = name or memberName = name) in if memberships->notEmpty() then memberships->first() - else owningNamspace.resolveLocal(name) + else owningNamespace.resolveLocal(name) endif endif @@ -1224,9 +1224,9 @@ endif shortName = effectiveShortName() - + - <p>The <code>owningNamespace</code> of an <code>Element</code> is the <code>membershipOwningNamspace</code> of its <code>owningMembership</code> (if any).</p> + <p>The <code>owningNamespace</code> of an <code>Element</code> is the <code>membershipOwningNamespace</code> of its <code>owningMembership</code> (if any).</p> OCL2.0 @@ -2514,7 +2514,7 @@ specializes(mem.memberElement.oclAsType(Type)) - + @@ -2656,13 +2656,13 @@ endif - <p>If the <code>owningType</code> of a <code>Multiplicity</code> is a <code>Feature</code>, then the <code>Multiplicity</code> must have the same <code>featuringTypes</code> as that <code>Feature</code>. Otherwise, it must have no <code>featuringTypes</code> (meaning that it is implicitly featured by the base <code>Classifier</code> <em><code>Anything</code></em>).</p> + <p>If the <code>owningNamespace</code> of a <code>Multiplicity</code> is a <code>Feature</code>, then the <code>Multiplicity</code> must have the same <code>featuringTypes</code> as that <code>Feature</code>. Otherwise, it must have no <code>featuringTypes</code> (meaning that it is implicitly featured by the base <code>Classifier</code> <em><code>Anything</code></em>).</p> OCL2.0 - if owningType <> null and owningType.oclIsKindOf(Feature) then + if owningNamespace <> null and owningNamespace.oclIsKindOf(Feature) then featuringType = - owningType.oclAsType(Feature).featuringType + owningNamespace.oclAsType(Feature).featuringType else featuringType->isEmpty() endif @@ -3313,7 +3313,7 @@ owningType.ownedFeature->at(1) = self implies (i = 1 implies redefinesFromLibrary('Transfers::Transfer::source::sourceOutput')) and (i = 2 implies - redefinesFromLibrary('Transfers::Transfer::source::targetInput')) + redefinesFromLibrary('Transfers::Transfer::target::targetInput')) @@ -3330,26 +3330,28 @@ owningType.ownedFeature->at(1) = self implies OCL2.0 owningType <> null and -not owningFeatureMembership. - oclIsKindOf(ReturnParameterMembership) and (owningType.oclIsKindOf(Behavior) or owningType.oclIsKindOf(Step) and (owningType.oclIsKindOf(InvocationExpression) implies - not ownedRedefinition->exists(not isImplied)) + not ownedRedefinition->exists(not isImplied))) implies - let i : Integer = + let ownerParameters : Sequence(Feature) = owningType.ownedFeature->select(direction <> null)-> reject(owningFeatureMembership. - oclIsKindOf(ReturnParameterMembership))-> - indexOf(self) in - owningType.ownedSpecialization.general-> - forAll(supertype | - let ownedParameters : Sequence(Feature) = - supertype.ownedFeature->select(direction <> null)-> - reject(owningFeatureMembership. - oclIsKindOf(ReturnParameterMembership)) in - ownedParameters->size() >= i implies - redefines(ownedParameters->at(i)) + oclIsKindOf(ReturnParameterMembership)) in + ownerParameters->includes(self) implies + let i : Integer = ownerParameters.indexof(self) in + owningType.ownedSpecialization.general-> + forAll(supertype | + supertype.oclIsKindOf(Behavior) or + supertype.oclIsKindOf(Step) + implies + let ownedParameters : Sequence(Feature) = + supertype.ownedFeature->select(direction <> null)-> + reject(owningFeatureMembership. + oclIsKindOf(ReturnParameterMembership)) in + ownedParameters->size() >= i implies + redefines(ownedParameters->at(i))) @@ -3359,7 +3361,7 @@ implies OCL2.0 ownedTyping.type->exists(selectByKind(Structure)) implies - specializesFromLibary('Objects::objects') + specializesFromLibrary('Objects::objects') @@ -3402,7 +3404,7 @@ implies OCL2.0 featuringType = let featuringTypes : OrderedSet(Type) = - featuring.type->asOrderedSet() in + typeFeaturing.type->asOrderedSet() in if chainingFeature->isEmpty() then featuringTypes else featuringTypes-> @@ -4026,7 +4028,7 @@ redefines(mem.memberElement.oclAsType(Feature)) - + @@ -4647,89 +4649,6 @@ crossingFeature.owningType.endFeature ->size() > 1 - - - - - - - - - - <p>The ItemFlow that has a certain <code>sourceOutputFeature</code>.</p> - - - - - - - - - - - - - - - - - - - - - - - - - - - - <p>A <code>PayloadFeature</code> is the <code>ownedFeature</code> of a <code>Flow</code> that identifies the things carried by the kinds of transfers that are instances of the <code>Flow</code>.</p> - - - - <p>A <code>PayloadFeature</code> must redefine the <code>Feature</code> <code><em>Transfers::Transfer::payload</em></code> from the Kernel Semantic Library.</p> - - - OCL2.0 - redefinesFromLibrary('Transfers::Transfer::payload') - - - - - - - <p>The ItemFlow that has a certain <code>itemType</code>.</p> - - - - - - - - - <p>An <code>Interaction</code> is a <code>Behavior</code> that is also an <code>Association</code>, providing a context for multiple objects that have behaviors that impact one another.</p> - - - - - - - - <p>A <code>SuccessionFlow</code> is a <code>Flow</code> that also provides temporal ordering. It classifies <code><em>Transfers</em></code> that cannot start until the source <code><em>Occurrence</em></code> has completed and that must complete before the target <code><em>Occurrence</em></code> can start.</p> - - - - <p>A <code>SuccessionFlow</code> must directly or indirectly specialize the <code>Step</code> <code><em>Transfers::flowTransfersBefore</em></code> from the Kernel Semantic Library.</p> - - - OCL2.0 - specializesFromLibrary('Transfers::flowTransfersBefore') - - - - - @@ -4885,6 +4804,81 @@ crossingFeature.owningType.endFeature ->size() > 1 + + + <p>The ItemFlow that has a certain <code>itemType</code>.</p> + + + + + + + + + <p>A <code>SuccessionFlow</code> is a <code>Flow</code> that also provides temporal ordering. It classifies <code><em>Transfers</em></code> that cannot start until the source <code><em>Occurrence</em></code> has completed and that must complete before the target <code><em>Occurrence</em></code> can start.</p> + + + + <p>A <code>SuccessionFlow</code> must directly or indirectly specialize the <code>Step</code> <code><em>Transfers::flowTransfersBefore</em></code> from the Kernel Semantic Library.</p> + + + OCL2.0 + specializesFromLibrary('Transfers::flowTransfersBefore') + + + + + + + + + <p>The ItemFlow that has a certain <code>sourceOutputFeature</code>.</p> + + + + + + + + + + + + + + + + + + + + <p>An <code>Interaction</code> is a <code>Behavior</code> that is also an <code>Association</code>, providing a context for multiple objects that have behaviors that impact one another.</p> + + + + + + + + + + + + + + <p>A <code>PayloadFeature</code> is the <code>ownedFeature</code> of a <code>Flow</code> that identifies the things carried by the kinds of transfers that are instances of the <code>Flow</code>.</p> + + + + <p>A <code>PayloadFeature</code> must redefine the <code>Feature</code> <code><em>Transfers::Transfer::payload</em></code> from the Kernel Semantic Library.</p> + + + OCL2.0 + redefinesFromLibrary('Transfers::Transfer::payload') + + + + <p>A <code>FlowEnd</code> is a <code>Feature</code> that is one of the <code>connectorEnds</code> giving the <code><em>source</em></code> or <code><em>target</em></code> of a <code>Flow</code>. For <code>Flows</code> typed by <code><em>FlowTransfer</em></code> or its specializations, <code>FlowEnds</code> must have exactly one <code>ownedFeature</code>, which redefines <code><em>Transfer::source::sourceOutput</em></code> or <code><em>Transfer::target::targetInput</em></code> and redefines the corresponding feature of the <code>relatedElement</code> for its end.</p> @@ -5714,7 +5708,7 @@ endif OCL2.0 - let sourceParameter : Feature = sourceTargetFeature() in + let sourceTargetFeature : Feature = sourceTargetFeature() in sourceTargetFeature <> null and sourceTargetFeature.redefinesFromLibrary('ControlFunctions::\'.\'::source::target') @@ -5725,7 +5719,7 @@ sourceTargetFeature.redefinesFromLibrary('ControlFunctions::\'.\'::source::targe OCL2.0 - let sourceParameter : Feature = sourceTargetFeature() in + let sourceTargetFeature : Feature = sourceTargetFeature() in sourceTargetFeature <> null and sourceTargetFeature.redefines(targetFeature) @@ -5853,7 +5847,7 @@ endif ownedMembership->exists(not oclIsKindOf(FeatureMembership)) - + <p>The <code>referencedElement</code> of a <code>MetadataAccessExpression</code> is the <code>memberElement</code> of its first <code>ownedMembership</code> that is not a <code>FeatureMembership</code>.</p> @@ -7778,13 +7772,6 @@ endif - - - - - - - <p>A <code>BindingConnector</code> is a binary <code>Connector</code> that requires its <code>relatedFeatures</code> to identify the same things (have the same values).</p> @@ -7993,7 +7980,7 @@ endif - <p>The <codeConjugatedPortDefinition</code> that is conjugate to this <code>PortDefinition</code>.</p> + <p>The <code>ConjugatedPortDefinition</code> that is conjugate to this <code>PortDefinition</code>.</p> @@ -8232,11 +8219,11 @@ endif - <p>An <code>AcceptUsageAction</code> must have at least two input <code>parameters</code>, corresponding to its <em><code>payload</code></em> and <em><code>receiver</code>, respectively (even if they have no <code>FeatureValue</code>). (Note that the <code>payloadParameter</code> is an input as well as an output.)</p> + <p>An <code>AcceptUsageAction</code> must have at least on input <code>parameter</code>, corresponding to its <em><code>payload</code></em> (even if it has no <code>FeatureValue</code>). (Note that the <code>payloadParameter</code> is an input as well as an output.)</p> OCL2.0 - inputParameters()->size() >= 2 + inputParameters()->notEmpty() @@ -8388,13 +8375,16 @@ owningType.oclAsType(TransitionUsage).triggerAction->includes(self) payloadArgument = argument(1) - + - <p>A <code>SendActionUsage</code> must have at least three owned input <code>parameters</code>, corresponding to its <em><code>payload</code></em>, <em><code>sender</code></em> and <em><code>receiver</code></em>, respectively (whether or not they have <code>FeatureValues</code>).</p> + <p>If a <code>SendActionUsage</code> is owned via a <code>StateSubactionMembership</code> or a <code>TransitionFeatureMembership</code>, then it must have a <code>payloadArgument</code>.</p> OCL2.0 - inputParameters()->size() >= 3 + owningFeatureMembership <> null and +(owningFeatureMembership.oclIsKindOf(StateSubactionMembership) or + owningFeatureMembership.oclIsKindOf(TransitionFeatureMembership)) implies + payloadArgument <> null @@ -8439,7 +8429,7 @@ owningType.oclAsType(TransitionUsage).triggerAction->includes(self) <p>An <code>Expression</code> whose result is bound to the <code><em>payload</em></code> input parameter of this <code>SendActionUsage</code>.</p> - + @@ -8837,7 +8827,7 @@ endif OCL2.0 sourceConnector->selectByKind(Succession)-> forAll(subsetsChain(self, - resolveGlobal('ControlPerformances::MergePerformance::outgoingHBLink'))) + resolveGlobal('ControlPerformances::DecisionPerformance::outgoingHBLink'))) @@ -9295,7 +9285,7 @@ ownedFeature->at(1).oclIsKindOf(ReferenceUsage) targetParameter <> null and targetParameter.ownedFeature->notEmpty() and targetParameter.ownedFeature->first(). - redefines('AssignmentAction::target::startingAt') + redefinesFromLibrary('AssignmentAction::target::startingAt') @@ -9335,9 +9325,9 @@ targetParameter.ownedFeature->first(). let targetParameter : Feature = inputParameter(1) in targetParameter <> null and targetParameter.ownedFeature->notEmpty() and -targetParameter->first().ownedFeature->notEmpty() and -targetParameter->first().ownedFeature->first(). - redefines('AssigmentAction::target::startingAt::accessedFeature') +targetParameter.ownedFeature->first().ownedFeature->notEmpty() and +targetParameter.ownedFeature->first().ownedFeature->first(). + redefinesFromLibrary('AssigmentAction::target::startingAt::accessedFeature') @@ -9349,20 +9339,21 @@ targetParameter->first().ownedFeature->first(). let targetParameter : Feature = inputParameter(1) in targetParameter <> null and targetParameter.ownedFeature->notEmpty() and -targetParameter->first().ownedFeature->notEmpty() and -targetParameter->first().ownedFeature->first().redefines(referent) +targetParameter.ownedFeature->first().ownedFeature->notEmpty() and +targetParameter.ownedFeature->first().ownedFeature->first().redefines(referent) - <p>The <code>referent</code> of an <code>AssignmentActionUsage</code> is the first <code>Feature</code> that is the <code>memberElement</code> of a <code>ownedMembership</code> that is not a <code>FeatureMembership</code>.</p> + <p>The <code>referent</code> of an <code>AssignmentActionUsage</code> is the first <code>Feature</code> that is not a <code>MetadataFeature</code> and is the <code>memberElement</code> of a <code>ownedMembership</code> that is not a <code>FeatureMembership</code>.</p> OCL2.0 referent = let unownedFeatures : Sequence(Feature) = ownedMembership-> reject(oclIsKindOf(FeatureMembership)).memberElement-> - selectByKind(Feature) in + select(oclIsKindOf(Feature) and + not oclIsKindOf(MetadataFeature)) in if unownedFeatures->isEmpty() then null else unownedFeatures->first().oclAsType(Feature) endif @@ -9370,22 +9361,23 @@ targetParameter->first().ownedFeature->first().redefines(referent) - <p>An <code>AssignmentActionUsage</code> must have an <code>ownedMembership</code> that is not an <code>OwningMembership</code> and whose <code>memberElement</code> is a <code>Feature</code>.</p> + <p>An <code>AssignmentActionUsage</code> must have an <code>ownedMembership</code> that is not an <code>OwningMembership</code> and whose <code>memberElement</code> is a <code>Feature</code> but not a <code>MetadataFeature</code>.</p> OCL2.0 ownedMembership->exists( not oclIsKindOf(OwningMembership) and - memberElement.oclIsKindOf(Feature)) + memberElement.oclIsKindOf(Feature) and + not memberElement.oclIsKindOf(MetadataFeature)) - + <p>The <code>featureTarget</code> of the <code>referent</code> of an <code>AssignmentActionUsage</code> must be able to have time-varying values.</p> OCL2.0 - referent <> null implies referent.featureTarget.mayTimeVary + referent <> null implies referent.featureTarget.isVariable @@ -9853,7 +9845,7 @@ targetParameter->first().ownedFeature->first().redefines(referent) OCL2.0 - ownedFlow = ownedUsage->selectByKind(FlowConnectionUsage) + ownedFlow = ownedUsage->selectByKind(FlowUsage) @@ -10002,11 +9994,11 @@ targetParameter->first().ownedFeature->first().redefines(referent) - <p>The <code>ownedMetadata</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>MetadataUsages</code>.</p> + <p>The <code>ownedMetadata</code> of a <code>Definition</code> are all its <code>ownedMembers</code> that are <code>MetadataUsages</code>.</p> OCL2.0 - ownedMetadata = ownedUsage->selectByKind(MetadataUsage) + ownedMetadata = ownedMember->selectByKind(MetadataUsage) @@ -10239,7 +10231,7 @@ targetParameter->first().ownedFeature->first().redefines(referent) - <p>The <code>MetadataUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + <p>The <code>MetadataUsages</code> that are <code>ownedMembers</code> of this <code>Definition</code>.</p> @@ -10457,7 +10449,7 @@ targetParameter->first().ownedFeature->first().redefines(referent) OCL2.0 - nestedFlow = nestedUsage->selectByKind(FlowConnectionUsage) + nestedFlow = nestedUsage->selectByKind(FlowUsage) @@ -10480,7 +10472,7 @@ targetParameter->first().ownedFeature->first().redefines(referent) - <p>The <code>ownedMetadata</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>MetadataUsages</code>.</p> + <p>The <code>ownedMetadata</code> of a <code>Usage</code> are all its <code>ownedMembers</code> that are <code>MetadataUsages</code>.</p> OCL2.0 @@ -10793,7 +10785,7 @@ targetParameter->first().ownedFeature->first().redefines(referent) - <p>The <code>ConnectorAsUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>. Note that this list includes <code>BindingConnectorAsUsages</code>, <code>SuccessionAsUsages</code>, and <code>FlowConnectionUsages</code> because these are <code>ConnectorAsUsages</code> even though they are not <code>ConnectionUsages</code>.</p> + <p>The <code>ConnectorAsUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>. Note that this list includes <code>BindingConnectorAsUsages</code>, <code>SuccessionAsUsages</code>, and <code>FlowUsages</code> because these are <code>ConnectorAsUsages</code> even though they are not <code>ConnectionUsages</code>.</p> @@ -10933,7 +10925,7 @@ targetParameter->first().ownedFeature->first().redefines(referent) - <p>The <code>MetadataUsages</code> that are <code>nestedUsages</code> of this of this <code>Usage</code>.</p> + <p>The <code>MetadataUsages</code> that are <code>ownedMembers</code> of this of this <code>Usage</code>.</p> @@ -11616,7 +11608,7 @@ owningFeatureMembership.oclIsKindOf(ActorMembership) implies - <p>If a <code>PartUsage</code> is owned via a <code>StakeholderMembership</code>, then it must directly or indirectly specialize either <code><em>Requirements::RequirementCheck::stakeholders</em></code>.</p> + <p>If a <code>PartUsage</code> is owned via a <code>StakeholderMembership</code>, then it must directly or indirectly specialize <code><em>Requirements::RequirementCheck::stakeholders</em></code>.</p> OCL2.0 @@ -12666,11 +12658,12 @@ endif - <p>A <code>ConstraintUsage</code> whose <code>owningFeatureMembership</code> is a <code>RequirementConstraintMembership</code> must directly or indirectly specialize on the <code>ConstraintUsages</code> <code><em>assumptions</em></code> or <code><em>constraints</em></code> from the <code>ConstraintDefinition</code> <code><em>Requirements::RequirementCheck</em></code> in the Systems Model Library, depending on whether the <code>kind</code> of the <code>RequirementConstraintMembership</code> is <code>assumption</code> or <code>requirement</code>, respectively.</p> + <p>A composite <code>ConstraintUsage</code> whose <code>owningFeatureMembership</code> is a <code>RequirementConstraintMembership</code> must directly or indirectly specialize on the <code>ConstraintUsages</code> <code><em>assumptions</em></code> or <code><em>constraints</em></code> from the <code>ConstraintDefinition</code> <code><em>Requirements::RequirementCheck</em></code> in the Systems Model Library, depending on whether the <code>kind</code> of the <code>RequirementConstraintMembership</code> is <code>assumption</code> or <code>requirement</code>, respectively.</p> OCL2.0 - owningFeatureMembership <> null and + isComposite and +owningFeatureMembership <> null and owningFeatureMembership.oclIsKindOf(RequirementConstraintMembership) implies if owningFeatureMembership.oclAsType(RequirementConstraintMembership).kind = RequirementConstraintKind::assumption then @@ -12823,7 +12816,7 @@ endif OCL2.0 - referencedFeaureTarget() <> null implies + referencedFeatureTarget() <> null implies referencedFeatureTarget().oclIsKindOf(ConstraintUsage) @@ -13013,7 +13006,7 @@ endif - <p>The <code>parameters</code> of this <code>RequirementDefinition</code> that represent stakeholders for th requirement.</p> + <p>The <code>parameters</code> of this <code>RequirementDefinition</code> that represent stakeholders for the requirement.</p> @@ -13082,7 +13075,7 @@ endif selectByKind(BindingConnector)-> select(b | b.relatedElement->includes(subjectParameter)) in if bindings->isEmpty() or - bindings->first().relatedElement->exits(r | r <> subjectParameter) + not bindings->first().relatedElement->exits(r | r <> subjectParameter) then null else bindings->first().relatedElement->any(r | r <> subjectParameter) endif @@ -13256,7 +13249,7 @@ endif - <p>A composite <code>RequirementUsage</code> whose <code>owningType</code> is a <code>RequirementDefinition</code> or ,code>RequirementUsage</code> must directly or indirectly specialize the <code>RequirementUsage</code> <em><code>Requirements::RequirementCheck::subrequirements</code></em> from the Systems Model Library.</p> + <p>A composite <code>RequirementUsage</code> whose <code>owningType</code> is a <code>RequirementDefinition</code> or <code>RequirementUsage</code> must directly or indirectly specialize the <code>RequirementUsage</code> <em><code>Requirements::RequirementCheck::subrequirements</code></em> from the Systems Model Library.</p> OCL2.0 @@ -13277,8 +13270,10 @@ owningfeatureMembership.oclIsKindOf(ObjectiveMembership) implies owningType.ownedSpecialization.general->forAll(gen | (gen.oclIsKindOf(CaseDefinition) implies redefines(gen.oclAsType(CaseDefinition).objectiveRequirement)) and - (gen.oclIsKindOf(CaseUsage) implies - redefines(gen.oclAsType(CaseUsage).objectiveRequirement)) + (gen.oclIsKindOf(Feature) and + gen.oclAsType(Feature).featureTarget.oclIsKindOf(CaseUsage) implies + redefines(gen.oclAsType(Feature).featureTarget. + oclAsType(CaseUsage).objectiveRequirement)) @@ -13894,7 +13889,7 @@ owningType.oclIsKindOf(CaseUsage) OCL2.0 ownedEndFeature->size() = 2 implies - specializesFromLibrary('Connections::BinaryConnections') + specializesFromLibrary('Connections::BinaryConnection') @@ -13974,7 +13969,7 @@ owningType.oclIsKindOf(CaseUsage) - <p>A <code>ConnectorAsUsage</code> is both a <code>Connector</code> and a <code>Usage</code>. <code>ConnectorAsUsage</code> cannot itself be instantiated in a SysML model, but it is a base class for the concrete classes <code>BindingConnectorAsUsage</code>, <code>SuccessionAsUsage</code>, <code>ConnectionUsage</code> and <code>FlowConnectionUsage</code>.</p> + <p>A <code>ConnectorAsUsage</code> is both a <code>Connector</code> and a <code>Usage</code>. <code>ConnectorAsUsage</code> cannot itself be instantiated in a SysML model, but it is a base class for the concrete classes <code>BindingConnectorAsUsage</code>, <code>SuccessionAsUsage</code>, <code>ConnectionUsage</code> and <code>FlowUsage</code>.</p> @@ -14463,7 +14458,7 @@ owningType.oclIsType(CaseUsage) - <p>An <code>ItemUsage</code> is a <code>ItemUsage</code> whose <code>definition</code> is a <code>Structure</code>. Nominally, if the <code>definition</code> is an <code>ItemDefinition</code>, an <code>ItemUsage</code> is a <code>ItemUsage</code> of that <code>ItemDefinition</code> within a system. However, other kinds of Kernel <code>Structures</code> are also allowed, to permit use of <code>Structures</code> from the Kernel Model Libraries.</p> + <p>An <code>ItemUsage</code> is an <code>OccurrenceUsage</code> whose <code>definition</code> is a <code>Structure</code>. Nominally, if the <code>definition</code> is an <code>ItemDefinition</code>, an <code>ItemUsage</code> is a <code>ItemUsage</code> of that <code>ItemDefinition</code> within a system. However, other kinds of Kernel <code>Structures</code> are also allowed, to permit use of <code>Structures</code> from the Kernel Model Libraries.</p> @@ -14484,6 +14479,9 @@ owningType.oclIsType(CaseUsage) + + <p>A composite <code>ItemUsage</code> whose <code>owningType</code> is an <code>ItemDefinition</code> or <code>ItemUsage</code> must directly or indirectly specialize the Systems Model Library <code>ItemUsage</code> <em><code>Items::Item::subitems</code></em>.</p> + OCL2.0 isComposite and owningType <> null and @@ -14537,11 +14535,11 @@ owningType.oclIsType(CaseUsage) - <p>A <code>ViewpointDefinition</code> must directly or indirectly specialize the base <code>ViewpointDefinition</code> <code><em>Views::Viewpoint</em></code> from the Systems Model Library.</p> + <p>A <code>ViewpointDefinition</code> must directly or indirectly specialize the base <code>ViewpointDefinition</code> <code><em>Views::ViewpointCheck</em></code> from the Systems Model Library.</p> OCL2.0 - specializesFromLibrary('Views::Viewpoint') + specializesFromLibrary('Views::ViewpointCheck') @@ -14808,11 +14806,11 @@ self.membership->selectByKind(ElementFilterMembership). - <p>A <code>ViewpointUsage</code> must directly or indirectly specialize the base <code>ViewpointUsage</code> <code><em>Views::viewpoints</em></code> from the Systems Model Library.</p> + <p>A <code>ViewpointUsage</code> must directly or indirectly specialize the base <code>ViewpointUsage</code> <code><em>Views::viewpointChecks</em></code> from the Systems Model Library.</p> OCL2.0 - specializesFromLibrary('Views::viewpoints') + specializesFromLibrary('Views::viewpointChecks') @@ -15794,7 +15792,7 @@ owningType <> null and <p>An <code>IncludeUseCaseUsage</code> is a <code>UseCaseUsage</code> that represents the inclusion of a <code>UseCaseUsage</code> by a <code>UseCaseDefinition</code> or <code>UseCaseUsage</code>. Unless it is the <code>IncludeUseCaseUsage</code> itself, the <code>UseCaseUsage</code> to be included is related to the <code>includedUseCase</code> by a <code>ReferenceSubsetting</code> <code>Relationship</code>. An <code>IncludeUseCaseUsage</code> is also a PerformActionUsage, with its <code>useCaseIncluded</code> as the <code>performedAction</code>.</p> - + <p>A <code>IncludeUseCaseUsage</code> whose <code>owningType</code> is a <code>UseCaseDefinition</code> or <code>UseCaseUsage</code> must directly or indirectly specialize the <code>UseCaseUsage</code> <em><code>UseCases::UseCase::includedUseCases</code></em> from the Systems Model Library.</p> diff --git a/org.omg.sysml/transforms/PrepareMetamodel.qvto b/org.omg.sysml/transforms/PrepareMetamodel.qvto index 76fd11717..5d23218e9 100644 --- a/org.omg.sysml/transforms/PrepareMetamodel.qvto +++ b/org.omg.sysml/transforms/PrepareMetamodel.qvto @@ -25,7 +25,7 @@ modeltype UML uses "http://www.eclipse.org/uml2/5.0.0/UML"; transformation PrepareMetamodel(in export: UML, in standard: UML, out prepared: UML); -property version = "20250201"; +property version = "20260501"; main() { run() From 11822d912c2ed28942424a1514d05f08d24a6cd6 Mon Sep 17 00:00:00 2001 From: Ed Seidewitz Date: Wed, 20 May 2026 22:32:02 -0700 Subject: [PATCH 2/6] ST6RI-934 Regenerated the .ecore files in org.omg.sysml. Also: - Updated SysML metamodel URIs in Xtext grammar files. - Restored SysML.genmodel to earlier version, except changed generated model directory to org.omg.sysml.model/src/main/java. --- .../expressions/xtext/KerMLExpressions.xtext | 2 +- .../src/org/omg/kerml/xtext/KerML.xtext | 2 +- .../src/org/omg/sysml/xtext/SysML.xtext | 2 +- org.omg.sysml/model/KerML.genmodel | 492 +-- org.omg.sysml/model/SysML.ecore | 52 +- org.omg.sysml/model/SysML.genmodel | 4 +- org.omg.sysml/model/SysML_clean.genmodel | 865 ++-- org.omg.sysml/model/kerml.ecore | 2188 +++++----- org.omg.sysml/model/sysml_clean.ecore | 3688 ++++++++--------- 9 files changed, 3648 insertions(+), 3647 deletions(-) diff --git a/org.omg.kerml.expressions.xtext/src/org/omg/kerml/expressions/xtext/KerMLExpressions.xtext b/org.omg.kerml.expressions.xtext/src/org/omg/kerml/expressions/xtext/KerMLExpressions.xtext index 2df593c9f..df05bf7b0 100644 --- a/org.omg.kerml.expressions.xtext/src/org/omg/kerml/expressions/xtext/KerMLExpressions.xtext +++ b/org.omg.kerml.expressions.xtext/src/org/omg/kerml/expressions/xtext/KerMLExpressions.xtext @@ -30,7 +30,7 @@ grammar org.omg.kerml.expressions.xtext.KerMLExpressions hidden(WS, ML_NOTE, SL_NOTE) import "http://www.eclipse.org/emf/2002/Ecore" as Ecore -import "https://www.omg.org/spec/SysML/20250201" as SysML +import "https://www.omg.org/spec/SysML/20260501" as SysML /* EXPRESSIONS */ diff --git a/org.omg.kerml.xtext/src/org/omg/kerml/xtext/KerML.xtext b/org.omg.kerml.xtext/src/org/omg/kerml/xtext/KerML.xtext index cf583f04d..2d0dde7df 100644 --- a/org.omg.kerml.xtext/src/org/omg/kerml/xtext/KerML.xtext +++ b/org.omg.kerml.xtext/src/org/omg/kerml/xtext/KerML.xtext @@ -30,7 +30,7 @@ grammar org.omg.kerml.xtext.KerML with org.omg.kerml.expressions.xtext.KerMLExpressions import "http://www.eclipse.org/emf/2002/Ecore" as Ecore -import "https://www.omg.org/spec/SysML/20250201" as SysML +import "https://www.omg.org/spec/SysML/20260501" as SysML /* ROOT NAMESPACE */ diff --git a/org.omg.sysml.xtext/src/org/omg/sysml/xtext/SysML.xtext b/org.omg.sysml.xtext/src/org/omg/sysml/xtext/SysML.xtext index a09a939f6..b6e1b0499 100644 --- a/org.omg.sysml.xtext/src/org/omg/sysml/xtext/SysML.xtext +++ b/org.omg.sysml.xtext/src/org/omg/sysml/xtext/SysML.xtext @@ -31,7 +31,7 @@ grammar org.omg.sysml.xtext.SysML with org.omg.kerml.expressions.xtext.KerMLExpressions import "http://www.eclipse.org/emf/2002/Ecore" as Ecore -import "https://www.omg.org/spec/SysML/20250201" as SysML +import "https://www.omg.org/spec/SysML/20260501" as SysML /* ROOT NAMESPACE */ diff --git a/org.omg.sysml/model/KerML.genmodel b/org.omg.sysml/model/KerML.genmodel index edb7b18ee..6394bc672 100644 --- a/org.omg.sysml/model/KerML.genmodel +++ b/org.omg.sysml/model/KerML.genmodel @@ -42,32 +42,41 @@ - + - - + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Import/importOwningNamespace"/> + + + + + + + - + + + - + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Relationship/relatedElement"/> + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Relationship/target"/> + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Relationship/source"/> + - - + + + - @@ -112,19 +121,6 @@ - - - - - - - - @@ -134,10 +130,10 @@ propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Namespace/member"/> - + @@ -175,18 +171,6 @@ - - - - - - - - - - @@ -195,17 +179,33 @@ + + + + + + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Annotation/owningAnnotatedElement"/> + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Annotation/owningAnnotatingElement"/> + + + + + - + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//FeatureInverting/featureInverted"/> + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//FeatureInverting/owningFeature"/> + - + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Feature/owningFeatureMembership"/> + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Feature/owningType"/> - - + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Feature/endOwningType"/> + + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Feature/type"/> + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Feature/ownedRedefinition"/> + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Feature/ownedSubsetting"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + @@ -287,8 +347,6 @@ ecoreFeature="ecore:EReference kerml.ecore#//Type/ownedDifferencing"/> - @@ -332,83 +390,54 @@ + + + + + - - - - + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Conjugation/originalType"/> + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Conjugation/conjugatedType"/> - - + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Conjugation/owningType"/> + + + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Intersecting/intersectingType"/> + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Intersecting/typeIntersected"/> + + - - + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Unioning/unioningType"/> - - - - - + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Unioning/typeUnioned"/> + + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Disjoining/typeDisjoined"/> + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Disjoining/disjoiningType"/> - + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Disjoining/owningType"/> + + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Differencing/differencingType"/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Differencing/typeDifferenced"/> + + + + + @@ -432,14 +469,6 @@ - - - - - @@ -452,69 +481,26 @@ - - - - - - - - - - - - - - - - - - - - + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//CrossSubsetting/crossedFeature"/> + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//CrossSubsetting/crossingFeature"/> - - - - - - - - - - - + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Subclassification/subclassifier"/> + + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Classifier/ownedSubclassification"/> + @@ -525,7 +511,8 @@ - + + @@ -569,7 +556,6 @@ - @@ -577,58 +563,62 @@ propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Function/result"/> - - - - + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//MetadataFeature/metaclass"/> + + + + + + - - - + + + + + - - - + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Flow/payloadType"/> - - + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Flow/targetInputFeature"/> + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Flow/sourceOutputFeature"/> - - - - - - - + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Flow/flowEnd"/> - - - + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Flow/payloadFeature"/> + - + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Connector/relatedFeature"/> + + + + + + + + - - - - - + + + + @@ -641,57 +631,67 @@ propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//InstantiationExpression/instantiatedType.1"/> + - - - - - + - - - - - - + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//FeatureReferenceExpression/referent"/> - - - + + - - - - - + + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Package/filterCondition"/> + + + + + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//ElementFilterMembership/condition"/> + + + + + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//ParameterMembership/ownedMemberParameter"/> + + + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//ResultExpressionMembership/ownedResultExpression"/> + + + + + + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//BooleanExpression/predicate"/> + + + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//FeatureValue/featureWithValue"/> + + + - - diff --git a/org.omg.sysml/model/SysML.ecore b/org.omg.sysml/model/SysML.ecore index 29505e1d1..73921612c 100644 --- a/org.omg.sysml/model/SysML.ecore +++ b/org.omg.sysml/model/SysML.ecore @@ -1,13 +1,13 @@ + xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="sysml" nsURI="https://www.omg.org/spec/SysML/20260501" nsPrefix="sysml">
-
+
@@ -291,7 +291,7 @@ -
+
-
+
@@ -736,7 +736,7 @@ -
+
@@ -841,7 +841,7 @@ -
+
@@ -851,7 +851,7 @@ -
+
@@ -915,12 +915,12 @@ -
+
-
+
@@ -1088,7 +1088,7 @@
-
+
@@ -1682,7 +1682,7 @@ -
+
@@ -1988,7 +1988,7 @@ -
+
@@ -2630,7 +2630,7 @@ -
+
@@ -2904,7 +2904,7 @@ -
+
@@ -3009,7 +3009,7 @@ -
+
@@ -3367,7 +3367,7 @@ ordered="false" eType="#//ConjugatedPortDefinition" volatile="true" transient="true" derived="true" eOpposite="#//ConjugatedPortDefinition/originalPortDefinition"> -
+
@@ -3661,7 +3661,7 @@
-
+
@@ -3688,7 +3688,7 @@ -
+
@@ -3837,7 +3837,7 @@ -
+
-
+
+ eType="#//Expression" volatile="true" transient="true" derived="true">
@@ -4826,7 +4826,7 @@ -
+
@@ -4962,7 +4962,7 @@
-
+
@@ -5028,7 +5028,7 @@
-
+
@@ -5469,7 +5469,7 @@ -
+
@@ -5484,7 +5484,7 @@ -
+
diff --git a/org.omg.sysml/model/SysML.genmodel b/org.omg.sysml/model/SysML.genmodel index 1129c3e73..c1ac4fb9a 100644 --- a/org.omg.sysml/model/SysML.genmodel +++ b/org.omg.sysml/model/SysML.genmodel @@ -1,7 +1,7 @@ @@ -29,7 +29,7 @@
- ../../../../../org.omg.sysml/model/SysML.uml + SysML.uml diff --git a/org.omg.sysml/model/SysML_clean.genmodel b/org.omg.sysml/model/SysML_clean.genmodel index 42a19ee95..81ca55fc0 100644 --- a/org.omg.sysml/model/SysML_clean.genmodel +++ b/org.omg.sysml/model/SysML_clean.genmodel @@ -31,8 +31,9 @@
SysML.uml - + @@ -51,215 +52,27 @@ - - - - + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Package/filterCondition"/> + + - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Import/importedElement"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Type/differencingType"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -585,65 +631,37 @@ - - - - - - - - - - - - - - + + - - - - - + + - - + + + - + + + + + - - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Flow/payloadType"/> + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Flow/targetInputFeature"/> + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Flow/sourceOutputFeature"/> - - - - - - - - - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Flow/flowEnd"/> + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Flow/payloadFeature"/> - - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Flow/interaction"/> - - @@ -658,50 +676,33 @@ - - - + + + + + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//MultiplicityRange/lowerBound"/> - - - - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//MultiplicityRange/upperBound"/> - - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//MultiplicityRange/bound"/> + + + + + + - - - - - - - - - - - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//FeatureValue/featureWithValue"/> + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//FeatureValue/value"/> + + - - - - - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//ViewRenderingMembership/ownedRendering"/> + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//ViewRenderingMembership/referencedRendering"/> - - - - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//RenderingUsage/renderingDefinition"/> - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//PartUsage/partDefinition"/> - + - - - - - - - - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//ItemUsage/itemDefinition"/> - - - - - - - - - - - @@ -935,6 +909,9 @@ + + + @@ -952,6 +929,18 @@ + + + + + + + + + + + @@ -968,6 +957,8 @@ + + @@ -1015,6 +1006,10 @@ propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//AcceptActionUsage/payloadArgument"/> + + + @@ -1059,15 +1054,15 @@ propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//ConcernUsage/concernDefinition"/> - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//CaseUsage/objectiveRequirement"/> - - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//CaseUsage/caseDefinition"/> + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//CaseUsage/subjectParameter"/> + + + + + + + + + + + + + + + @@ -1130,27 +1145,36 @@ - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//MetadataUsage/metadataDefinition"/> - + + + + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//ObjectiveMembership/ownedObjectiveRequirement"/> - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//IncludeUseCaseUsage/useCaseIncluded"/> - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//PerformActionUsage/performedAction"/> + + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//EventOccurrenceUsage/eventOccurrence"/> + + + @@ -1159,55 +1183,70 @@ - - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//SubjectMembership/ownedSubjectParameter"/> - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//SatisfyRequirementUsage/satisfiedRequirement"/> + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//SatisfyRequirementUsage/satisfyingFeature"/> + + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//AssertConstraintUsage/assertedConstraint"/> - - + + - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//FramedConcernMembership/ownedConcern"/> + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//FramedConcernMembership/referencedConcern"/> + + + + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//FlowDefinition/flowEnd"/> - + + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//RequirementVerificationMembership/ownedRequirement"/> + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//RequirementVerificationMembership/verifiedRequirement"/> - + + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//ExhibitStateUsage/exhibitedState"/> - + + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//TransitionFeatureMembership/transitionFeature"/> - - + + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//StateSubactionMembership/action"/> - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//StateDefinition/state"/> + + + + - + @@ -1215,6 +1254,7 @@ + @@ -1224,90 +1264,51 @@ propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//IfActionUsage/ifArgument"/> - - - - - - - - - - - - - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//SendActionUsage/receiverArgument"/> - - - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//SendActionUsage/payloadArgument"/> + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//SendActionUsage/senderArgument"/> - - + + - + - - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//AssignmentActionUsage/targetArgument"/> - - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//AssignmentActionUsage/valueExpression"/> + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//AssignmentActionUsage/referent"/> - - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//LoopActionUsage/bodyAction"/> - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//ForLoopActionUsage/seqArgument"/> + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//ForLoopActionUsage/loopVariable"/> - + + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//TerminateActionUsage/terminatedOccurrenceArgument"/> - - - - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//WhileLoopActionUsage/whileArgument"/> + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//WhileLoopActionUsage/untilArgument"/> - - - - - - - - - diff --git a/org.omg.sysml/model/kerml.ecore b/org.omg.sysml/model/kerml.ecore index aedbaf8b6..cd19ac18c 100644 --- a/org.omg.sysml/model/kerml.ecore +++ b/org.omg.sysml/model/kerml.ecore @@ -1,65 +1,107 @@ - + xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="kerml" nsURI="https://www.omg.org/spec/KerML/20260501" nsPrefix="kerml"> + -
+
- + -
+
- - + + + + +
+ + + - + -
+
- + -
+
+ + + + +
+ + + + +
+ + +
- + -
+
- + -
+
+ - + -
+
- + - + + +
+ -
+
- - + -
+
-
+
+ + + + + +
+ + +
+ + + + + +
@@ -112,10 +154,10 @@ - + -
+
- - -
- - @@ -137,6 +173,12 @@
+ + +
+ + @@ -275,6 +317,13 @@ + + +
+ + @@ -284,13 +333,6 @@ - - -
- - @@ -320,61 +362,6 @@ - - -
- - - -
- - -
- - - - -
- - -
- - - - - -
- - -
- - - - - -
- - - - - -
- - - - - -
- - -
@@ -450,7 +437,7 @@
-
+
@@ -515,13 +502,6 @@ - - -
- - - @@ -532,54 +512,12 @@ - - - -
- - - -
- - - - - -
- - - - -
- - - - -
- - - - -
- - -
- - - + -
+
- - + @@ -633,9 +571,45 @@ - + -
+
+ + + +
+ + +
+ + + + +
+ + + + + +
+ + + + +
+ + + + + + +
- + -
+
- + - + -
+
- + + + + + +
+ + + +
+ + + + +
+ + + + +
+ + + @@ -735,932 +735,880 @@ - + -
+
- - -
- - - - -
+
-
+
- + - - - -
- - -
- - - - - - -
- + eType="#//Feature" volatile="true" transient="true" derived="true" eOpposite="#//Feature/ownedFeatureInverting"> -
+
- + - -
- - -
- - - - - - -
- - - -
- - - - - -
+
-
+
- - -
- - -
- - - - + -
+
- + -
+
-
+
- - - + - + -
+
-
+
- - - - + -
+
-
+
- - - + - + -
+
-
+
- + - + -
+
-
+
- + + - + -
+
-
+
- - + -
+
-
+
- - - + -
+
-
+
- - + -
+
-
+
- + -
+
-
+
- - + -
+
-
+
- - + -
+
-
+
- + - + -
+
-
+
+ - + -
+
- - - - -
+ +
- - - + + + -
+
- + - - -
- + -
+
- + - - -
- + -
+
- + - - -
- + -
+
- - -
+
- + -
+
-
+
- - + -
+
-
+
- + - + -
+
+ - + -
+
- - + defaultValueLiteral="false"> -
+
- - -
- + -
+
- + - + -
+
-
+
- - - -
- + -
+
+ - + -
+
- - + -
+
-
+
- + -
+
- + -
+
- - -
- + -
+
- - -
+ + +
+ + -
+
- + -
+
- + - + -
+
-
+
- - + + +
+ -
+
- - - - -
- - + -
+
- - + -
+
- + - + -
+
- + -
+
-
+
- + + + - + -
+
-
+
+ + + - + -
+
-
+
- + + + - + -
+
-
+
- + - + -
+
-
+
- - + - + -
+
-
+
+ - + -
+
-
+
+ + - + -
+
-
+
+ - + -
+
-
+
- + -
+
-
+
+ - + -
+
-
+
+ - + -
+
-
+
- + - + -
+
-
+
- - + -
+
- -
+ + + + +
+ + + + + +
- - - -
+
- + - + -
+
+ - + +
+ + +
+ + + + + +
+ + +
+ + + + -
+
- + -
+
-
+
+ - + -
+
-
+
- + - + -
+
- + - -
+
- + -
+
+ - + -
+
- - + + +
+ -
+
- + - + -
+
-
+
+ - + + +
+ -
+
- - + -
+
+ - + -
+
-
+
- + -
+
- + -
+
- - -
+ + +
- - -
+
- + + +
+ -
+
- + -
+
- + - + -
+
-
+
+ - + + + +
+ + -
+
-
+
+ - - -
+ + +
- - -
+
- + - + -
+
- + - + -
+
- - -
- + -
+
- + - - -
- + -
+
- + - + -
+
- + -
+
-
+
- + - + -
+
-
+
- + - + -
+
- - + - + -
+
- + + + +
+ + -
+
-
+
+ + + + + +
+ - + + +
+ + -
+
-
+
- + -
+
- + + - + -
+
- + -
+
-
+
- + -
+
-
+
- + -
+
- + - + -
+
- + -
+
-
+
- + -
+
- - -
- - - -
- - -
- - - - - -
- - - -
@@ -1681,145 +1629,197 @@ - + -
+
- + -
+
-
+
- + - + -
+
-
+
- + - + + + +
+ + + +
+ -
+
- + + + + +
+ + +
+ + + + + +
+ + + - + -
+
+ + +
+ + +
+ + + + + +
+ + +
+ + + + + +
+ + + + - + -
+
- + +
+ + +
+ + + + -
+
-
+
- + -
+
- - + - + -
+
- + -
+
-
+
- + -
+
- + -
+
- - -
- - -
- - - - + -
+
-
+
- + - + -
+
- + - + -
+
- + -
+
-
+
- + - + -
+
- - + @@ -1827,19 +1827,6 @@
- - -
- - - -
- - - -
@@ -1854,6 +1841,13 @@ + + +
+ + + @@ -1864,85 +1858,25 @@ - - -
- - - - - - -
- - + -
+
- - -
- - -
- - - - - -
- - -
- - - - - -
- - -
- - - - - -
- - -
- - - - - - -
- - -
- - - - - - -
- + -
+
+ + + +
+ +
@@ -1990,9 +1924,14 @@ - + -
+
+ + + + +
@@ -2158,11 +2097,6 @@ - - -
- -
@@ -2195,197 +2129,221 @@ - + + +
+ + + +
+ + +
+ + + + + +
+ + +
+ + + + +
+ + +
+ + + + +
+ + +
+ + + + +
+ + +
+ + + + + -
+
- - -
- - - + -
+
- - -
- - -
- - - - + -
+
- + -
+
- + -
+
- - -
- - -
- - - + -
+
-
+
- - - - -
- - + -
+
-
+
- - - - -
- - + -
+
-
+
- - + -
+
-
+
- + - + + +
+ -
+
+ - + + +
+ -
+
+ - + -
+
- + + +
+ -
+
+ - - - -
- - + + +
+ -
+
- -
+ + + + +
- - - + +
+ + + + -
+
-
+
- + + - - - -
- - + -
+
-
+
+ + + + + + +
+ + +
- - + -
+
- + -
+
- + -
+
- + -
+
- - -
- - @@ -2398,6 +2356,11 @@ + + +
+ +
@@ -2409,6 +2372,17 @@ + + +
+ + + +
+ + +
@@ -2452,40 +2426,25 @@
- - -
- - -
- - - - - - -
- - - - -
- - + -
+
-
+
- + -
+
+ + + + +
@@ -2508,67 +2467,24 @@ - + -
+
- - -
- - -
- - - - - -
- - -
- - - - -
- - -
- - - - -
- - -
- - - + -
+
-
+
- + - - -
- - - - -
- - - + -
+
@@ -2582,9 +2498,14 @@ + + +
+ + -
+
@@ -2605,96 +2526,175 @@ - + -
+
- + -
+
+ + +
+ + +
+ + + + + +
+ + +
+ + + - + -
+
+ + +
+ + +
+ + + - + -
+
+ + +
+ + - + -
+
- + + +
+ + +
+ + + -
+
-
+
+ - + + + +
+ + -
+
-
+
+ - + + + +
+ + + + +
+ + + +
+ + + + + +
+ + -
+
-
+
+ - + + + +
+ + + + +
+ + -
+
-
+
- + - + -
+
-
+
- + - - -
+ + +
+ + -
+
- - - -
- - - - -
- - diff --git a/org.omg.sysml/model/sysml_clean.ecore b/org.omg.sysml/model/sysml_clean.ecore index 3b27be306..e5b284b14 100644 --- a/org.omg.sysml/model/sysml_clean.ecore +++ b/org.omg.sysml/model/sysml_clean.ecore @@ -1,1328 +1,1298 @@ - - -
- - - + xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="sysml" nsURI="https://www.omg.org/spec/SysML/20260501" nsPrefix="sysml"> + -
+
- + -
+
+ + + + + +
+ + +
+ - - -
- - - + -
+
- + -
+
+ - - -
+ + +
+ + + -
+
- - - -
+ + + + + + +
+ + + -
+
- - - - - -
- - + + + + -
+
- + - + -
+
- + - + -
+
- + - - -
+ + +
+ + + -
+
- + + + + +
+ + + + + +
+ + - + + +
+ + + + -
+
-
+
- + - + -
+
+ - - - -
- - + -
+
-
+
- - + -
+
-
+
- + - + -
+
- + -
+
- - + -
+
- + -
+
- - + -
+
- - + -
+
- - - + -
+
- - + + + -
+
- - + + -
+
- - + + -
+
- - + + -
+
- - + + -
+
- - + + -
+
- - - - -
- - - - + + -
+
- - - + + + -
+
- + - + -
+
- + - + -
+
- - + -
+
- + -
+
- - -
- -
+
- - -
- + -
+
- - + -
+
- - -
+
- + volatile="true" transient="true" derived="true"> -
+
- + + + +
+ + -
+
- + - - -
- + -
+
+ - + -
+
- + - + -
+
+ + - - -
+ + + +
+ + + +
+ + + -
+
- + -
+
- + + - + -
+
- - + + +
+ -
+
+ - + -
+
- + -
+
- + + + +
+ + + +
+ -
+
- - + -
+
-
+
+ - + -
+
-
+
+ - + -
+
+ - + -
+
+ + + + + +
- - + -
+
- - -
- - - - - - - -
- - - - - - - -
- - - - - - + -
+
- - - + + -
+
- - - + + -
+
- - - + + + + +
+ + -
+
- - - - + + + + + + +
+ + -
+
- - - + + -
+
- - - -
+ + + + +
+ + + +
- - - -
+
- - - + + -
+
- - - + + + -
+
- - + + -
+
- + - + + + +
+ + -
+
- + - + -
+
-
+
- + - + -
+
- + - - -
- + -
+
- + - - -
- + -
+
- + - + + + +
+ + -
+
- - -
- + -
+
- - - -
- + -
+
- + + - + + + +
+ + -
+
- - - + + + -
+
- + -
+
- - + defaultValueLiteral="false"> -
+
- + -
+
-
+
- - - -
- + -
+
- + + - - -
+ + + +
+ + + +
+ + + -
+
- - + + + -
+
- - - + + + -
+
-
+
+ - - -
+ + +
- - - -
+
- + - - -
- + -
+
- + + + +
+ + -
- - -
+
- - -
+
- + - -
+
-
+
- + - + -
+
- + -
+
- + - + -
+
- - + -
+
- - - + - + -
+
- + - + -
+
- - + + - + -
+
- - + -
+
- - + -
+
- - + -
+
- - + -
+
- - + -
+
- - + -
+
- - - + + + -
+
- - - - -
+ + + + +
+ + + -
+
- + - + -
+
- + - - -
- + -
+
+ - - -
- + -
+
- - - - -
- - + -
+
- - - -
+ + + +
- - -
+
- - - -
+ + + +
- - -
+
- - + + + -
+
- + - + -
+
- + -
+
- + -
+
+ - + + +
+ -
+
- + -
+
+ - + -
+
- + + +
+ -
+
- - + -
+
- + -
+
- + - + -
+
- + -
+
- + -
+
- + -
+
+ - + + +
+ -
+
- + + +
+ -
+
- + -
+
- + -
+
+ - + -
+
- + -
+
- - - + + + + + -
+
- - - + + + + + -
+
- - - + + + + + -
+
- - - - - - -
- - + + + -
+
- + - + -
+
- - + + + -
+
- - - - + + + + -
+
- - - -
+ + + + +
+ + -
+
- - - + + + -
+
- - + + + -
+
- - - - -
- - - -
+ + + + +
+ + -
+
+ - - -
- + -
+
- + - + -
+
-
+
- + - + -
+
- + - - -
+ + +
- - - -
+
+ - - - -
- - - -
- - - - -
- - - - -
+ + +
- - - - -
- - -
+
- - + - - - -
- - + -
+
- + + +
+ -
+
+ - - - -
- - + -
+
-
+
+ - + -
+
- + - + -
+
- + -
+
- + - - - -
- - + -
+
- - + -
+
-
+
- + - - -
+ + +
- - - -
+
- + - + + +
+ -
+
- - - - -
- - + -
+
+ - + + +
+ -
+
- + -
+
- - + - - - -
- - + -
+
+ + + + + +
- - - -
+
- + + +
+ -
+
- + -
+
+ - + -
- - -
+
- - -
+
- - + @@ -1412,7 +1382,7 @@ -
+
@@ -1802,88 +1772,306 @@ ordered="false" upperBound="-1" eType="#//Subclassification" volatile="true" transient="true" derived="true" eOpposite="#//Subclassification/owningClassifier"> -
+
+ + + + + + +
+ + + +
+ + +
+ + + + + +
+ + +
+ + + + + +
+ + + + + + +
+ + + +
+ + +
+ + + + + +
+ + +
+ + + + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + +
+ + +
+ + + + + + +
+ + + + +
+ + + +
+ + + + +
+ + +
+ + + + + + +
+ + + +
+ + +
+ + + + + + +
+ + + + +
+ + + +
+ + + + + +
+ + + +
+ + +
+ + + + + + +
+ + + + +
+ + + +
+ + +
+ + + + + +
+ + +
+ + + + + + +
+ + +
+ + + + + + +
+ + +
- + - + -
+
- - -
- + + + +
+ + -
+
- - - + + -
+
-
+
- + - + + + +
+ + -
+
- - + -
+
- - -
- + + + +
+ + -
+
- - - + + -
+
-
+
- - + + +
+ -
+
+ - - -
- - - + -
+
- + -
+
@@ -1891,20 +2079,9 @@
- - -
- - - -
- - - - + -
+
@@ -1922,6 +2099,11 @@ + + +
+ +
@@ -1983,33 +2165,6 @@
- - -
- - - - -
- - - -
- - - - - -
- - - -
- - -
@@ -2021,201 +2176,126 @@ - + -
+
- - -
- - - - -
- + -
+
- - - -
- - - + -
+
- - -
- + -
+
- - - -
- - - + -
+
- + -
+
- - -
- - - - -
- + -
+
- - + -
+
- - -
- - - + -
+
- - -
- - -
- - - - + -
+
- - -
- - - - - - -
- - - - + + + +
+ + + + +
+ + -
+
-
+
- - + -
+
-
+
- - + -
+
-
+
- - - - -
- - + -
+
-
+
- + - + -
+
-
+
- + - - -
+ + +
- - -
+
+ - - -
- - - - -
- -
@@ -2282,193 +2362,113 @@ - + -
+
- - -
- - -
- - - - - -
- - -
- - - - - - -
- - -
- - - - - - -
- - -
- - -
- + -
+
- + -
+
- - -
- - - - - -
- - -
- - - - + -
+
- + -
- - - - - -
- - - -
+
+ + + + -
+
- - - - - -
- - + + + -
+
-
+
+ - + -
+
-
+
+ - + -
+
-
+
+ - + + + +
+ + -
+
-
+
- + - + -
+
-
+
- + - - -
+ + +
+ + -
+
- - - -
- - - - -
- - - - -
- - - - -
- -
@@ -2529,126 +2529,75 @@ - + -
+
- -
+
-
+
- + - + -
+
-
+
- + -
+
- - -
- - -
- - - - - -
- - -
- - - - - -
- - -
- - - - + -
+
-
+
- + - + -
+
- + -
+
-
+
- + - + -
+
- - -
- - - - -
- - - - - -
- - - - - -
- - - + -
+
-
+
- + @@ -2691,7 +2640,7 @@ -
+
@@ -2861,7 +2810,7 @@
-
+
@@ -3043,7 +2992,7 @@
-
+
@@ -3071,7 +3020,7 @@ -
+
@@ -3378,7 +3327,7 @@
-
+
@@ -3446,58 +3395,6 @@
- - -
- - - -
- - -
- - - - - - -
- - - -
- - -
- - - - - - -
- - - - -
- - - - -
- - - -
- - -
@@ -3521,11 +3418,23 @@ ordered="false" eType="#//ConjugatedPortDefinition" volatile="true" transient="true" derived="true" eOpposite="#//ConjugatedPortDefinition/originalPortDefinition"> -
+
+ + +
+ + + +
+ + +
@@ -3572,7 +3481,7 @@ -
+
@@ -3590,6 +3499,43 @@ + + +
+ + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + +
+ + + +
@@ -3639,7 +3585,7 @@ -
+
@@ -3652,6 +3598,16 @@ + + +
+ + + + +
+ +
@@ -3813,7 +3769,7 @@ -
+
@@ -3843,16 +3799,31 @@ -
+
+ + +
+ + + + + +
+ + + +
-
+
+ -
+
@@ -3867,7 +3838,7 @@ -
+
-
+
@@ -4059,45 +4030,49 @@
- + -
+
- + -
+
-
+
- + - + -
+
-
+
- + - - - -
- - + -
+
-
+
- + + + + +
+ + +
+ + @@ -4165,6 +4140,86 @@ + + +
+ + + +
+ + +
+ + + + + +
+ + +
+ + + + + + +
+ + + +
+ + +
+ + + + + + +
+ + + +
+ + +
+ + + + + +
+ + +
+ + + + + +
+ + + +
+ + +
+ + +
@@ -4309,7 +4364,7 @@ -
+
@@ -4331,456 +4386,414 @@ - - -
- - - -
- - -
- - - - - -
- - - -
- - -
- - - - - - -
- - - -
- - -
- - - - - - -
- - - -
- - -
- - - - - - -
- - - -
- - - - -
- - - - - -
- - - -
- - -
- - - - - -
- - - -
- - -
- - - - - -
- - -
- - - - - + -
+
- - -
- - - + -
+
-
+
- - + + + +
+ + -
+
-
+
+ - + -
+
- + -
+
- + -
+
- - -
- - - + -
+
- + -
+
-
+
+ - + -
+
- + + + +
+ + + + +
+ + + + +
+ + -
+
-
+
+ - + + + +
+ + -
+
-
+
+ - + + + +
+ + -
+
-
+
- + - + -
+
- + + +
+ -
+
- + -
+
- - -
- - - + -
+
- + -
+
- + -
+
- + -
+
-
+
+ - - -
- + + + +
+ + -
+
- + -
+
-
+
+ - - - -
- - + -
+
-
+
- + + + +
+ + -
+
-
+
+ - + -
+
- + -
+
-
+
+ - - - -
- - + -
+
-
+
- - + -
+
- + -
+
-
+
- + + +
+ + -
+
-
+
+ - + -
+
- + -
+
-
+
+ + + + + +
+ + +
+ - + -
+
- + -
+
- - -
- - - - - - + -
+
- + -
+
-
+
+ - + + + +
+ + + + +
+ + -
+
-
+
+ - + -
+
-
+
+ - + -
+
- + -
+
+ + +
+ + +
+ + + - + -
+
+ + +
+ + + + +
+ + + + +
+ + - + -
+
+ eType="#//TransitionFeatureKind"> -
+
- + -
+
-
+
@@ -4805,43 +4818,23 @@ - - -
- - - -
- - - - -
- - - - -
- - - - + -
+
+ eType="#//StateSubactionKind"> -
+
- + -
+
-
+
@@ -4872,223 +4865,265 @@ -
+
+ + +
+ + + + +
+ + +
+ + + + +
+ + + + + +
+ + + + +
+ + + +
+ + + + + + + + +
+ + + + +
+ + + +
+ + +
+ + + + +
+ + +
+ + + + +
-
+
- - -
+ + + +
+ + + + +
+ + + +
+ + -
+
- - + + -
+
- + - + -
+
- + -
+
-
+
- - - - -
- - + -
+
-
+
- - - - -
- - + -
+
-
+
- - + -
+
- - -
- + -
+
- - + -
+
- + -
+
-
+
- - - - -
- - + -
+
-
+
- - + -
+
-
+
- + - + -
+
- + -
+
-
+
- - + + + +
+ + -
+
-
+
- - - -
- - -
+
-
+
- - -
- - - + -
+
- + -
+
+ + +
+ + +
+ + - + -
+
- + -
+
-
+
- - + -
+
-
+
- - -
- - - - -
- -
@@ -5114,39 +5149,4 @@ - - -
- - - - -
- - - -
- - -
- - - - - - -
- - - -
- - -
- - - - From d5ff2e39fb4d007c7f2cbb836fe840f2525e4225 Mon Sep 17 00:00:00 2001 From: Ed Seidewitz Date: Wed, 20 May 2026 23:11:25 -0700 Subject: [PATCH 3/6] ST6RI-934 Regenerated EMF model class for 2026-05 metamodel. --- .../sysml/lang/sysml/AcceptActionUsage.java | 2 +- .../lang/sysml/AssertConstraintUsage.java | 2 +- .../lang/sysml/AssignmentActionUsage.java | 20 +- .../lang/sysml/ConnectionDefinition.java | 2 +- .../sysml/lang/sysml/ConnectorAsUsage.java | 2 +- .../omg/sysml/lang/sysml/ConstraintUsage.java | 1 + .../omg/sysml/lang/sysml/DecisionNode.java | 2 +- .../org/omg/sysml/lang/sysml/Definition.java | 6 +- .../org/omg/sysml/lang/sysml/Feature.java | 36 +- .../lang/sysml/FeatureChainExpression.java | 4 +- .../org/omg/sysml/lang/sysml/ItemUsage.java | 2 +- .../omg/sysml/lang/sysml/Multiplicity.java | 4 +- .../org/omg/sysml/lang/sysml/Namespace.java | 2 +- .../omg/sysml/lang/sysml/PortDefinition.java | 2 +- .../lang/sysml/RequirementDefinition.java | 2 +- .../sysml/lang/sysml/RequirementUsage.java | 6 +- .../lang/sysml/SatisfyRequirementUsage.java | 2 +- .../omg/sysml/lang/sysml/SendActionUsage.java | 7 +- .../omg/sysml/lang/sysml/SysMLPackage.java | 3382 ++++++++--------- .../java/org/omg/sysml/lang/sysml/Usage.java | 6 +- .../sysml/lang/sysml/ViewpointDefinition.java | 2 +- .../omg/sysml/lang/sysml/ViewpointUsage.java | 2 +- .../sysml/lang/sysml/impl/NamespaceImpl.java | 1 - .../lang/sysml/impl/SysMLPackageImpl.java | 5 +- .../omg/sysml/lang/sysml/impl/TypeImpl.java | 1 - 25 files changed, 1754 insertions(+), 1749 deletions(-) diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/AcceptActionUsage.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/AcceptActionUsage.java index b6146e55d..4e06e5ab3 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/AcceptActionUsage.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/AcceptActionUsage.java @@ -11,7 +11,7 @@ * *

An AcceptActionUsage is an ActionUsage that specifies the acceptance of an incomingTransfer from the Occurrence given by the result of its receiverArgument Expression. (If no receiverArgument is provided, the default is the this context of the AcceptActionUsage.) The payload of the accepted Transfer is output on its payloadParameter. Which Transfers may be accepted is determined by conformance to the typing and (potentially) binding of the payloadParameter.

* - * inputParameters()->size() >= 2 + * inputParameters()->notEmpty() * receiverArgument = argument(2) * payloadArgument = argument(1) * payloadParameter = diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/AssertConstraintUsage.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/AssertConstraintUsage.java index 33f9c3c28..4285ce863 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/AssertConstraintUsage.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/AssertConstraintUsage.java @@ -21,7 +21,7 @@ * else * specializesFromLibrary('Constraints::assertedConstraintChecks') * endif - * referencedFeaureTarget() <> null implies + * referencedFeatureTarget() <> null implies * referencedFeatureTarget().oclIsKindOf(ConstraintUsage) * * diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/AssignmentActionUsage.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/AssignmentActionUsage.java index b87d9ed35..b211a232e 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/AssignmentActionUsage.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/AssignmentActionUsage.java @@ -16,7 +16,7 @@ * targetParameter <> null and * targetParameter.ownedFeature->notEmpty() and * targetParameter.ownedFeature->first(). - * redefines('AssignmentAction::target::startingAt') + * redefinesFromLibrary('AssignmentAction::target::startingAt') * valueExpression = argument(2) * targetArgument = argument(1) * isSubactionUsage() implies @@ -24,25 +24,27 @@ * let targetParameter : Feature = inputParameter(1) in * targetParameter <> null and * targetParameter.ownedFeature->notEmpty() and - * targetParameter->first().ownedFeature->notEmpty() and - * targetParameter->first().ownedFeature->first(). - * redefines('AssigmentAction::target::startingAt::accessedFeature') + * targetParameter.ownedFeature->first().ownedFeature->notEmpty() and + * targetParameter.ownedFeature->first().ownedFeature->first(). + * redefinesFromLibrary('AssigmentAction::target::startingAt::accessedFeature') * let targetParameter : Feature = inputParameter(1) in * targetParameter <> null and * targetParameter.ownedFeature->notEmpty() and - * targetParameter->first().ownedFeature->notEmpty() and - * targetParameter->first().ownedFeature->first().redefines(referent) + * targetParameter.ownedFeature->first().ownedFeature->notEmpty() and + * targetParameter.ownedFeature->first().ownedFeature->first().redefines(referent) * referent = * let unownedFeatures : Sequence(Feature) = ownedMembership-> * reject(oclIsKindOf(FeatureMembership)).memberElement-> - * selectByKind(Feature) in + * select(oclIsKindOf(Feature) and + * not oclIsKindOf(MetadataFeature)) in * if unownedFeatures->isEmpty() then null * else unownedFeatures->first().oclAsType(Feature) * endif * ownedMembership->exists( * not oclIsKindOf(OwningMembership) and - * memberElement.oclIsKindOf(Feature)) - * referent <> null implies referent.featureTarget.mayTimeVary + * memberElement.oclIsKindOf(Feature) and + * not memberElement.oclIsKindOf(MetadataFeature)) + * referent <> null implies referent.featureTarget.isVariable * * *

diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/ConnectionDefinition.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/ConnectionDefinition.java index 3fca1a172..772423d8a 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/ConnectionDefinition.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/ConnectionDefinition.java @@ -13,7 +13,7 @@ *

A ConnectionDefinition is a PartDefinition that is also an AssociationStructure. The end Features of a ConnectionDefinition must be Usages.

* specializesFromLibrary('Connections::Connection') * ownedEndFeature->size() = 2 implies - * specializesFromLibrary('Connections::BinaryConnections') + * specializesFromLibrary('Connections::BinaryConnection') * isSufficient * * diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/ConnectorAsUsage.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/ConnectorAsUsage.java index beafb5590..a2501156c 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/ConnectorAsUsage.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/ConnectorAsUsage.java @@ -9,7 +9,7 @@ * * * - *

A ConnectorAsUsage is both a Connector and a Usage. ConnectorAsUsage cannot itself be instantiated in a SysML model, but it is a base class for the concrete classes BindingConnectorAsUsage, SuccessionAsUsage, ConnectionUsage and FlowConnectionUsage.

+ *

A ConnectorAsUsage is both a Connector and a Usage. ConnectorAsUsage cannot itself be instantiated in a SysML model, but it is a base class for the concrete classes BindingConnectorAsUsage, SuccessionAsUsage, ConnectionUsage and FlowUsage.

* * * diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/ConstraintUsage.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/ConstraintUsage.java index 46b05c5d1..5a8041458 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/ConstraintUsage.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/ConstraintUsage.java @@ -10,6 +10,7 @@ * * *

A ConstraintUsage is an OccurrenceUsage that is also a BooleanExpression, and, so, is typed by a Predicate. Nominally, if the type is a ConstraintDefinition, a ConstraintUsage is a Usage of that ConstraintDefinition. However, other kinds of kernel Predicates are also allowed, to permit use of Predicates from the Kernel Model Libraries.

+ * isComposite and * owningFeatureMembership <> null and * owningFeatureMembership.oclIsKindOf(RequirementConstraintMembership) implies * if owningFeatureMembership.oclAsType(RequirementConstraintMembership).kind = diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/DecisionNode.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/DecisionNode.java index fc2e26582..610ad7d19 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/DecisionNode.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/DecisionNode.java @@ -18,7 +18,7 @@ * specializesFromLibrary('Actions::Action::decisions') * sourceConnector->selectByKind(Succession)-> * forAll(subsetsChain(self, - * resolveGlobal('ControlPerformances::MergePerformance::outgoingHBLink'))) + * resolveGlobal('ControlPerformances::DecisionPerformance::outgoingHBLink'))) * * * diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/Definition.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/Definition.java index c32a4fdab..9d63e909b 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/Definition.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/Definition.java @@ -34,7 +34,7 @@ * ownedPart = ownedUsage->selectByKind(PartUsage) * ownedPort = ownedUsage->selectByKind(PortUsage) * ownedConnection = ownedUsage->selectByKind(ConnectorAsUsage) - * ownedFlow = ownedUsage->selectByKind(FlowConnectionUsage) + * ownedFlow = ownedUsage->selectByKind(FlowUsage) * ownedInterface = ownedUsage->selectByKind(ReferenceUsage) * ownedAllocation = ownedUsage->selectByKind(AllocationUsage) * ownedAction = ownedUsage->selectByKind(ActionUsage) @@ -51,7 +51,7 @@ * ownedView = ownedUsage->selectByKind(ViewUsage) * ownedViewpoint = ownedUsage->selectByKind(ViewpointUsage) * ownedRendering = ownedUsage->selectByKind(RenderingUsage) - * ownedMetadata = ownedUsage->selectByKind(MetadataUsage) + * ownedMetadata = ownedMember->selectByKind(MetadataUsage) * isVariation implies isAbstract * * @@ -834,7 +834,7 @@ public interface Definition extends Classifier { * * * - *

The MetadataUsages that are ownedUsages of this Definition.

+ *

The MetadataUsages that are ownedMembers of this Definition.

* * @return the value of the 'Owned Metadata' reference list. * @see org.omg.sysml.lang.sysml.SysMLPackage#getDefinition_OwnedMetadata() diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/Feature.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/Feature.java index 8f9bc72b5..b7c4e9bfa 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/Feature.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/Feature.java @@ -78,31 +78,33 @@ * (i = 1 implies * redefinesFromLibrary('Transfers::Transfer::source::sourceOutput')) and * (i = 2 implies - * redefinesFromLibrary('Transfers::Transfer::source::targetInput')) + * redefinesFromLibrary('Transfers::Transfer::target::targetInput')) * * owningType <> null and - * not owningFeatureMembership. - * oclIsKindOf(ReturnParameterMembership) and * (owningType.oclIsKindOf(Behavior) or * owningType.oclIsKindOf(Step) and * (owningType.oclIsKindOf(InvocationExpression) implies - * not ownedRedefinition->exists(not isImplied)) + * not ownedRedefinition->exists(not isImplied))) * implies - * let i : Integer = + * let ownerParameters : Sequence(Feature) = * owningType.ownedFeature->select(direction <> null)-> * reject(owningFeatureMembership. - * oclIsKindOf(ReturnParameterMembership))-> - * indexOf(self) in - * owningType.ownedSpecialization.general-> - * forAll(supertype | - * let ownedParameters : Sequence(Feature) = - * supertype.ownedFeature->select(direction <> null)-> - * reject(owningFeatureMembership. - * oclIsKindOf(ReturnParameterMembership)) in - * ownedParameters->size() >= i implies - * redefines(ownedParameters->at(i)) + * oclIsKindOf(ReturnParameterMembership)) in + * ownerParameters->includes(self) implies + * let i : Integer = ownerParameters.indexof(self) in + * owningType.ownedSpecialization.general-> + * forAll(supertype | + * supertype.oclIsKindOf(Behavior) or + * supertype.oclIsKindOf(Step) + * implies + * let ownedParameters : Sequence(Feature) = + * supertype.ownedFeature->select(direction <> null)-> + * reject(owningFeatureMembership. + * oclIsKindOf(ReturnParameterMembership)) in + * ownedParameters->size() >= i implies + * redefines(ownedParameters->at(i))) * ownedTyping.type->exists(selectByKind(Structure)) implies - * specializesFromLibary('Objects::objects') + * specializesFromLibrary('Objects::objects') * owningType <> null and * (owningType.oclIsKindOf(Function) and * self = owningType.oclAsType(Function).result or @@ -121,7 +123,7 @@ * select(fi | fi.featureInverted = self) * featuringType = * let featuringTypes : OrderedSet(Type) = - * featuring.type->asOrderedSet() in + * typeFeaturing.type->asOrderedSet() in * if chainingFeature->isEmpty() then featuringTypes * else * featuringTypes-> diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/FeatureChainExpression.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/FeatureChainExpression.java index fb7fab9a7..44b19fa63 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/FeatureChainExpression.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/FeatureChainExpression.java @@ -10,10 +10,10 @@ * * *

A FeatureChainExpression is an OperatorExpression whose operator is ".", which resolves to the Function ControlFunctions::'.' from the Kernel Functions Library. It evaluates to the result of chaining the result Feature of its single argument Expression with its targetFeature.

- * let sourceParameter : Feature = sourceTargetFeature() in + * let sourceTargetFeature : Feature = sourceTargetFeature() in * sourceTargetFeature <> null and * sourceTargetFeature.redefinesFromLibrary('ControlFunctions::\'.\'::source::target') - * let sourceParameter : Feature = sourceTargetFeature() in + * let sourceTargetFeature : Feature = sourceTargetFeature() in * sourceTargetFeature <> null and * sourceTargetFeature.redefines(targetFeature) * targetFeature = diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/ItemUsage.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/ItemUsage.java index d82a65dc6..672e281f2 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/ItemUsage.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/ItemUsage.java @@ -10,7 +10,7 @@ * * * - *

An ItemUsage is a ItemUsage whose definition is a Structure. Nominally, if the definition is an ItemDefinition, an ItemUsage is a ItemUsage of that ItemDefinition within a system. However, other kinds of Kernel Structures are also allowed, to permit use of Structures from the Kernel Model Libraries.

+ *

An ItemUsage is an OccurrenceUsage whose definition is a Structure. Nominally, if the definition is an ItemDefinition, an ItemUsage is a ItemUsage of that ItemDefinition within a system. However, other kinds of Kernel Structures are also allowed, to permit use of Structures from the Kernel Model Libraries.

* itemDefinition = occurrenceDefinition->selectByKind(Structure) * specializesFromLibrary('Items::items') * isComposite and owningType <> null and diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/Multiplicity.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/Multiplicity.java index d10f99b80..c7ab28700 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/Multiplicity.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/Multiplicity.java @@ -17,9 +17,9 @@ * *

Multiplicity co-domains (in models) can be specified by Expression that might vary in their results. If the typeWithMultiplicity is a Classifier, the domain of the Multiplicity shall be Base::Anything. If the typeWithMultiplicity is a Feature, the Multiplicity shall have the same domain as the typeWithMultiplicity.

* - * if owningType <> null and owningType.oclIsKindOf(Feature) then + * if owningNamespace <> null and owningNamespace.oclIsKindOf(Feature) then * featuringType = - * owningType.oclAsType(Feature).featuringType + * owningNamespace.oclAsType(Feature).featuringType * else * featuringType->isEmpty() * endif diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/Namespace.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/Namespace.java index 56d515f95..5f35f288e 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/Namespace.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/Namespace.java @@ -329,7 +329,7 @@ public interface Namespace extends Element { * let memberships : Membership = membership-> * select(memberShortName = name or memberName = name) in * if memberships->notEmpty() then memberships->first() - * else owningNamspace.resolveLocal(name) + * else owningNamespace.resolveLocal(name) * endif * endif * diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/PortDefinition.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/PortDefinition.java index e012923c7..3293c4476 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/PortDefinition.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/PortDefinition.java @@ -53,7 +53,7 @@ public interface PortDefinition extends OccurrenceDefinition, Structure { * * * - *

The that is conjugate to this PortDefinition.

+ *

The ConjugatedPortDefinition that is conjugate to this PortDefinition.

* * @return the value of the 'Conjugated Port Definition' reference. * @see #setConjugatedPortDefinition(ConjugatedPortDefinition) diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/RequirementDefinition.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/RequirementDefinition.java index aa0f22bde..774893f97 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/RequirementDefinition.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/RequirementDefinition.java @@ -183,7 +183,7 @@ public interface RequirementDefinition extends ConstraintDefinition { * * * - *

The parameters of this RequirementDefinition that represent stakeholders for th requirement.

+ *

The parameters of this RequirementDefinition that represent stakeholders for the requirement.

* * @return the value of the 'Stakeholder Parameter' reference list. * @see org.omg.sysml.lang.sysml.SysMLPackage#getRequirementDefinition_StakeholderParameter() diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/RequirementUsage.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/RequirementUsage.java index 96b64ade1..40107bb78 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/RequirementUsage.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/RequirementUsage.java @@ -49,8 +49,10 @@ * owningType.ownedSpecialization.general->forAll(gen | * (gen.oclIsKindOf(CaseDefinition) implies * redefines(gen.oclAsType(CaseDefinition).objectiveRequirement)) and - * (gen.oclIsKindOf(CaseUsage) implies - * redefines(gen.oclAsType(CaseUsage).objectiveRequirement)) + * (gen.oclIsKindOf(Feature) and + * gen.oclAsType(Feature).featureTarget.oclIsKindOf(CaseUsage) implies + * redefines(gen.oclAsType(Feature).featureTarget. + * oclAsType(CaseUsage).objectiveRequirement)) * owningFeatureMembership <> null and * owningFeatureMembership.oclIsKindOf(RequirementVerificationMembership) implies * specializesFromLibrary('VerificationCases::VerificationCase::obj::requirementVerifications') diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/SatisfyRequirementUsage.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/SatisfyRequirementUsage.java index 0a7b98502..4d5a066ef 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/SatisfyRequirementUsage.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/SatisfyRequirementUsage.java @@ -15,7 +15,7 @@ * selectByKind(BindingConnector)-> * select(b | b.relatedElement->includes(subjectParameter)) in * if bindings->isEmpty() or - * bindings->first().relatedElement->exits(r | r <> subjectParameter) + * not bindings->first().relatedElement->exits(r | r <> subjectParameter) * then null * else bindings->first().relatedElement->any(r | r <> subjectParameter) * endif diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/SendActionUsage.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/SendActionUsage.java index 902c491d2..f64245837 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/SendActionUsage.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/SendActionUsage.java @@ -13,7 +13,10 @@ * * senderArgument = argument(2) * payloadArgument = argument(1) - * inputParameters()->size() >= 3 + * owningFeatureMembership <> null and + * (owningFeatureMembership.oclIsKindOf(StateSubactionMembership) or + * owningFeatureMembership.oclIsKindOf(TransitionFeatureMembership)) implies + * payloadArgument <> null * receiverArgument = argument(3) * isSubactionUsage() implies * specializesFromLibrary('Actions::Action::acceptSubactions') @@ -73,7 +76,7 @@ public interface SendActionUsage extends ActionUsage { * @return the value of the 'Payload Argument' reference. * @see #setPayloadArgument(Expression) * @see org.omg.sysml.lang.sysml.SysMLPackage#getSendActionUsage_PayloadArgument() - * @model required="true" transient="true" volatile="true" derived="true" ordered="false" + * @model transient="true" volatile="true" derived="true" ordered="false" * annotation="http://schema.omg.org/spec/MOF/2.0/emof.xml#Property.oppositeRoleName body='sendingActionUsage'" * annotation="http://www.omg.org/spec/SysML" * @generated diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/SysMLPackage.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/SysMLPackage.java index 69600694a..43c98e6b9 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/SysMLPackage.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/SysMLPackage.java @@ -41,7 +41,7 @@ public interface SysMLPackage extends EPackage { * * @generated */ - String eNS_URI = "https://www.omg.org/spec/SysML/20250201"; + String eNS_URI = "https://www.omg.org/spec/SysML/20260501"; /** * The package namespace name. @@ -179629,2738 +179629,2756 @@ public interface SysMLPackage extends EPackage { */ interface Literals { /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.SelectExpressionImpl Select Expression}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.AcceptActionUsageImpl Accept Action Usage}' class. * * - * @see org.omg.sysml.lang.sysml.impl.SelectExpressionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getSelectExpression() + * @see org.omg.sysml.lang.sysml.impl.AcceptActionUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getAcceptActionUsage() * @generated */ - EClass SELECT_EXPRESSION = eINSTANCE.getSelectExpression(); + EClass ACCEPT_ACTION_USAGE = eINSTANCE.getAcceptActionUsage(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.OperatorExpressionImpl Operator Expression}' class. + * The meta object literal for the 'Payload Argument' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.OperatorExpressionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getOperatorExpression() * @generated */ - EClass OPERATOR_EXPRESSION = eINSTANCE.getOperatorExpression(); + EReference ACCEPT_ACTION_USAGE__PAYLOAD_ARGUMENT = eINSTANCE.getAcceptActionUsage_PayloadArgument(); /** - * The meta object literal for the 'Operator' attribute feature. + * The meta object literal for the 'Payload Parameter' reference feature. * * * @generated */ - EAttribute OPERATOR_EXPRESSION__OPERATOR = eINSTANCE.getOperatorExpression_Operator(); + EReference ACCEPT_ACTION_USAGE__PAYLOAD_PARAMETER = eINSTANCE.getAcceptActionUsage_PayloadParameter(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.InvocationExpressionImpl Invocation Expression}' class. + * The meta object literal for the 'Receiver Argument' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.InvocationExpressionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getInvocationExpression() * @generated */ - EClass INVOCATION_EXPRESSION = eINSTANCE.getInvocationExpression(); + EReference ACCEPT_ACTION_USAGE__RECEIVER_ARGUMENT = eINSTANCE.getAcceptActionUsage_ReceiverArgument(); /** - * The meta object literal for the 'Operand' containment reference list feature. + * The meta object literal for the 'Is Trigger Action' operation. * * * @generated */ - EReference INVOCATION_EXPRESSION__OPERAND = eINSTANCE.getInvocationExpression_Operand(); + EOperation ACCEPT_ACTION_USAGE___IS_TRIGGER_ACTION = eINSTANCE.getAcceptActionUsage__IsTriggerAction(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.InstantiationExpressionImpl Instantiation Expression}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ActionDefinitionImpl Action Definition}' class. * * - * @see org.omg.sysml.lang.sysml.impl.InstantiationExpressionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getInstantiationExpression() + * @see org.omg.sysml.lang.sysml.impl.ActionDefinitionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getActionDefinition() * @generated */ - EClass INSTANTIATION_EXPRESSION = eINSTANCE.getInstantiationExpression(); + EClass ACTION_DEFINITION = eINSTANCE.getActionDefinition(); /** - * The meta object literal for the 'Argument' reference list feature. + * The meta object literal for the 'Action' reference list feature. * * * @generated */ - EReference INSTANTIATION_EXPRESSION__ARGUMENT = eINSTANCE.getInstantiationExpression_Argument(); + EReference ACTION_DEFINITION__ACTION = eINSTANCE.getActionDefinition_Action(); /** - * The meta object literal for the 'Instantiated Type' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ActionUsageImpl Action Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.ActionUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getActionUsage() * @generated */ - EReference INSTANTIATION_EXPRESSION__INSTANTIATED_TYPE = eINSTANCE.getInstantiationExpression_InstantiatedType(); + EClass ACTION_USAGE = eINSTANCE.getActionUsage(); /** - * The meta object literal for the 'Instantiated Type' operation. + * The meta object literal for the 'Action Definition' reference list feature. * * * @generated */ - EOperation INSTANTIATION_EXPRESSION___INSTANTIATED_TYPE = eINSTANCE.getInstantiationExpression__InstantiatedType(); + EReference ACTION_USAGE__ACTION_DEFINITION = eINSTANCE.getActionUsage_ActionDefinition(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ExpressionImpl Expression}' class. + * The meta object literal for the 'Argument' operation. * * - * @see org.omg.sysml.lang.sysml.impl.ExpressionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getExpression() * @generated */ - EClass EXPRESSION = eINSTANCE.getExpression(); + EOperation ACTION_USAGE___ARGUMENT__INT = eINSTANCE.getActionUsage__Argument__int(); /** - * The meta object literal for the 'Function' reference feature. + * The meta object literal for the 'Input Parameter' operation. * * * @generated */ - EReference EXPRESSION__FUNCTION = eINSTANCE.getExpression_Function(); + EOperation ACTION_USAGE___INPUT_PARAMETER__INT = eINSTANCE.getActionUsage__InputParameter__int(); /** - * The meta object literal for the 'Result' reference feature. + * The meta object literal for the 'Input Parameters' operation. * * * @generated */ - EReference EXPRESSION__RESULT = eINSTANCE.getExpression_Result(); + EOperation ACTION_USAGE___INPUT_PARAMETERS = eINSTANCE.getActionUsage__InputParameters(); /** - * The meta object literal for the 'Is Model Level Evaluable' attribute feature. + * The meta object literal for the 'Is Subaction Usage' operation. * * * @generated */ - EAttribute EXPRESSION__IS_MODEL_LEVEL_EVALUABLE = eINSTANCE.getExpression_IsModelLevelEvaluable(); + EOperation ACTION_USAGE___IS_SUBACTION_USAGE = eINSTANCE.getActionUsage__IsSubactionUsage(); /** - * The meta object literal for the 'Model Level Evaluable' operation. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ActorMembershipImpl Actor Membership}' class. * * + * @see org.omg.sysml.lang.sysml.impl.ActorMembershipImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getActorMembership() * @generated */ - EOperation EXPRESSION___MODEL_LEVEL_EVALUABLE__ELIST = eINSTANCE.getExpression__ModelLevelEvaluable__EList(); + EClass ACTOR_MEMBERSHIP = eINSTANCE.getActorMembership(); /** - * The meta object literal for the 'Evaluate' operation. + * The meta object literal for the 'Owned Actor Parameter' reference feature. * * * @generated */ - EOperation EXPRESSION___EVALUATE__ELEMENT = eINSTANCE.getExpression__Evaluate__Element(); + EReference ACTOR_MEMBERSHIP__OWNED_ACTOR_PARAMETER = eINSTANCE.getActorMembership_OwnedActorParameter(); /** - * The meta object literal for the 'Check Condition' operation. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.AllocationDefinitionImpl Allocation Definition}' class. * * + * @see org.omg.sysml.lang.sysml.impl.AllocationDefinitionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getAllocationDefinition() * @generated */ - EOperation EXPRESSION___CHECK_CONDITION__ELEMENT = eINSTANCE.getExpression__CheckCondition__Element(); + EClass ALLOCATION_DEFINITION = eINSTANCE.getAllocationDefinition(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.StepImpl Step}' class. + * The meta object literal for the 'Allocation' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.StepImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getStep() * @generated */ - EClass STEP = eINSTANCE.getStep(); + EReference ALLOCATION_DEFINITION__ALLOCATION = eINSTANCE.getAllocationDefinition_Allocation(); /** - * The meta object literal for the 'Behavior' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.AllocationUsageImpl Allocation Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.AllocationUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getAllocationUsage() * @generated */ - EReference STEP__BEHAVIOR = eINSTANCE.getStep_Behavior(); + EClass ALLOCATION_USAGE = eINSTANCE.getAllocationUsage(); /** - * The meta object literal for the 'Parameter' reference list feature. + * The meta object literal for the 'Allocation Definition' reference list feature. * * * @generated */ - EReference STEP__PARAMETER = eINSTANCE.getStep_Parameter(); + EReference ALLOCATION_USAGE__ALLOCATION_DEFINITION = eINSTANCE.getAllocationUsage_AllocationDefinition(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.FeatureImpl Feature}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.AnalysisCaseDefinitionImpl Analysis Case Definition}' class. * * - * @see org.omg.sysml.lang.sysml.impl.FeatureImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getFeature() + * @see org.omg.sysml.lang.sysml.impl.AnalysisCaseDefinitionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getAnalysisCaseDefinition() * @generated */ - EClass FEATURE = eINSTANCE.getFeature(); + EClass ANALYSIS_CASE_DEFINITION = eINSTANCE.getAnalysisCaseDefinition(); /** - * The meta object literal for the 'Owning Feature Membership' reference feature. + * The meta object literal for the 'Result Expression' reference feature. * * * @generated */ - EReference FEATURE__OWNING_FEATURE_MEMBERSHIP = eINSTANCE.getFeature_OwningFeatureMembership(); + EReference ANALYSIS_CASE_DEFINITION__RESULT_EXPRESSION = eINSTANCE.getAnalysisCaseDefinition_ResultExpression(); /** - * The meta object literal for the 'Owning Type' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.AnalysisCaseUsageImpl Analysis Case Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.AnalysisCaseUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getAnalysisCaseUsage() * @generated */ - EReference FEATURE__OWNING_TYPE = eINSTANCE.getFeature_OwningType(); + EClass ANALYSIS_CASE_USAGE = eINSTANCE.getAnalysisCaseUsage(); /** - * The meta object literal for the 'End Owning Type' reference feature. + * The meta object literal for the 'Analysis Case Definition' reference feature. * * * @generated */ - EReference FEATURE__END_OWNING_TYPE = eINSTANCE.getFeature_EndOwningType(); + EReference ANALYSIS_CASE_USAGE__ANALYSIS_CASE_DEFINITION = eINSTANCE.getAnalysisCaseUsage_AnalysisCaseDefinition(); /** - * The meta object literal for the 'Is Unique' attribute feature. + * The meta object literal for the 'Result Expression' reference feature. * * * @generated */ - EAttribute FEATURE__IS_UNIQUE = eINSTANCE.getFeature_IsUnique(); + EReference ANALYSIS_CASE_USAGE__RESULT_EXPRESSION = eINSTANCE.getAnalysisCaseUsage_ResultExpression(); /** - * The meta object literal for the 'Is Ordered' attribute feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.AnnotatingElementImpl Annotating Element}' class. * * + * @see org.omg.sysml.lang.sysml.impl.AnnotatingElementImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getAnnotatingElement() * @generated */ - EAttribute FEATURE__IS_ORDERED = eINSTANCE.getFeature_IsOrdered(); + EClass ANNOTATING_ELEMENT = eINSTANCE.getAnnotatingElement(); /** - * The meta object literal for the 'Type' reference list feature. + * The meta object literal for the 'Annotated Element' reference list feature. * * * @generated */ - EReference FEATURE__TYPE = eINSTANCE.getFeature_Type(); + EReference ANNOTATING_ELEMENT__ANNOTATED_ELEMENT = eINSTANCE.getAnnotatingElement_AnnotatedElement(); /** - * The meta object literal for the 'Owned Redefinition' reference list feature. + * The meta object literal for the 'Annotation' reference list feature. * * * @generated */ - EReference FEATURE__OWNED_REDEFINITION = eINSTANCE.getFeature_OwnedRedefinition(); + EReference ANNOTATING_ELEMENT__ANNOTATION = eINSTANCE.getAnnotatingElement_Annotation(); /** - * The meta object literal for the 'Owned Subsetting' reference list feature. + * The meta object literal for the 'Owned Annotating Relationship' reference list feature. * * * @generated */ - EReference FEATURE__OWNED_SUBSETTING = eINSTANCE.getFeature_OwnedSubsetting(); + EReference ANNOTATING_ELEMENT__OWNED_ANNOTATING_RELATIONSHIP = eINSTANCE.getAnnotatingElement_OwnedAnnotatingRelationship(); /** - * The meta object literal for the 'Is Composite' attribute feature. + * The meta object literal for the 'Owning Annotating Relationship' reference feature. * * * @generated */ - EAttribute FEATURE__IS_COMPOSITE = eINSTANCE.getFeature_IsComposite(); + EReference ANNOTATING_ELEMENT__OWNING_ANNOTATING_RELATIONSHIP = eINSTANCE.getAnnotatingElement_OwningAnnotatingRelationship(); /** - * The meta object literal for the 'Is End' attribute feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.AnnotationImpl Annotation}' class. * * + * @see org.omg.sysml.lang.sysml.impl.AnnotationImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getAnnotation() * @generated */ - EAttribute FEATURE__IS_END = eINSTANCE.getFeature_IsEnd(); + EClass ANNOTATION = eINSTANCE.getAnnotation(); /** - * The meta object literal for the 'Owned Typing' reference list feature. + * The meta object literal for the 'Annotated Element' reference feature. * * * @generated */ - EReference FEATURE__OWNED_TYPING = eINSTANCE.getFeature_OwnedTyping(); + EReference ANNOTATION__ANNOTATED_ELEMENT = eINSTANCE.getAnnotation_AnnotatedElement(); /** - * The meta object literal for the 'Featuring Type' reference list feature. + * The meta object literal for the 'Annotating Element' reference feature. * * * @generated */ - EReference FEATURE__FEATURING_TYPE = eINSTANCE.getFeature_FeaturingType(); + EReference ANNOTATION__ANNOTATING_ELEMENT = eINSTANCE.getAnnotation_AnnotatingElement(); /** - * The meta object literal for the 'Owned Type Featuring' reference list feature. + * The meta object literal for the 'Owned Annotating Element' reference feature. * * * @generated */ - EReference FEATURE__OWNED_TYPE_FEATURING = eINSTANCE.getFeature_OwnedTypeFeaturing(); + EReference ANNOTATION__OWNED_ANNOTATING_ELEMENT = eINSTANCE.getAnnotation_OwnedAnnotatingElement(); /** - * The meta object literal for the 'Is Derived' attribute feature. + * The meta object literal for the 'Owning Annotated Element' reference feature. * * * @generated */ - EAttribute FEATURE__IS_DERIVED = eINSTANCE.getFeature_IsDerived(); + EReference ANNOTATION__OWNING_ANNOTATED_ELEMENT = eINSTANCE.getAnnotation_OwningAnnotatedElement(); /** - * The meta object literal for the 'Chaining Feature' reference list feature. + * The meta object literal for the 'Owning Annotating Element' reference feature. * * * @generated */ - EReference FEATURE__CHAINING_FEATURE = eINSTANCE.getFeature_ChainingFeature(); + EReference ANNOTATION__OWNING_ANNOTATING_ELEMENT = eINSTANCE.getAnnotation_OwningAnnotatingElement(); /** - * The meta object literal for the 'Owned Feature Inverting' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.AssertConstraintUsageImpl Assert Constraint Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.AssertConstraintUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getAssertConstraintUsage() * @generated */ - EReference FEATURE__OWNED_FEATURE_INVERTING = eINSTANCE.getFeature_OwnedFeatureInverting(); + EClass ASSERT_CONSTRAINT_USAGE = eINSTANCE.getAssertConstraintUsage(); /** - * The meta object literal for the 'Owned Feature Chaining' reference list feature. + * The meta object literal for the 'Asserted Constraint' reference feature. * * * @generated */ - EReference FEATURE__OWNED_FEATURE_CHAINING = eINSTANCE.getFeature_OwnedFeatureChaining(); + EReference ASSERT_CONSTRAINT_USAGE__ASSERTED_CONSTRAINT = eINSTANCE.getAssertConstraintUsage_AssertedConstraint(); /** - * The meta object literal for the 'Is Portion' attribute feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.AssignmentActionUsageImpl Assignment Action Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.AssignmentActionUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getAssignmentActionUsage() * @generated */ - EAttribute FEATURE__IS_PORTION = eINSTANCE.getFeature_IsPortion(); + EClass ASSIGNMENT_ACTION_USAGE = eINSTANCE.getAssignmentActionUsage(); /** - * The meta object literal for the 'Is Variable' attribute feature. + * The meta object literal for the 'Referent' reference feature. * * * @generated */ - EAttribute FEATURE__IS_VARIABLE = eINSTANCE.getFeature_IsVariable(); + EReference ASSIGNMENT_ACTION_USAGE__REFERENT = eINSTANCE.getAssignmentActionUsage_Referent(); /** - * The meta object literal for the 'Is Constant' attribute feature. + * The meta object literal for the 'Target Argument' reference feature. * * * @generated */ - EAttribute FEATURE__IS_CONSTANT = eINSTANCE.getFeature_IsConstant(); + EReference ASSIGNMENT_ACTION_USAGE__TARGET_ARGUMENT = eINSTANCE.getAssignmentActionUsage_TargetArgument(); /** - * The meta object literal for the 'Owned Reference Subsetting' reference feature. + * The meta object literal for the 'Value Expression' reference feature. * * * @generated */ - EReference FEATURE__OWNED_REFERENCE_SUBSETTING = eINSTANCE.getFeature_OwnedReferenceSubsetting(); + EReference ASSIGNMENT_ACTION_USAGE__VALUE_EXPRESSION = eINSTANCE.getAssignmentActionUsage_ValueExpression(); /** - * The meta object literal for the 'Feature Target' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.AssociationImpl Association}' class. * * + * @see org.omg.sysml.lang.sysml.impl.AssociationImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getAssociation() * @generated */ - EReference FEATURE__FEATURE_TARGET = eINSTANCE.getFeature_FeatureTarget(); + EClass ASSOCIATION = eINSTANCE.getAssociation(); /** - * The meta object literal for the 'Cross Feature' reference feature. + * The meta object literal for the 'Association End' reference list feature. * * * @generated */ - EReference FEATURE__CROSS_FEATURE = eINSTANCE.getFeature_CrossFeature(); + EReference ASSOCIATION__ASSOCIATION_END = eINSTANCE.getAssociation_AssociationEnd(); /** - * The meta object literal for the 'Direction' attribute feature. + * The meta object literal for the 'Related Type' reference list feature. * * * @generated */ - EAttribute FEATURE__DIRECTION = eINSTANCE.getFeature_Direction(); + EReference ASSOCIATION__RELATED_TYPE = eINSTANCE.getAssociation_RelatedType(); /** - * The meta object literal for the 'Owned Cross Subsetting' reference feature. + * The meta object literal for the 'Source Type' reference feature. * * * @generated */ - EReference FEATURE__OWNED_CROSS_SUBSETTING = eINSTANCE.getFeature_OwnedCrossSubsetting(); + EReference ASSOCIATION__SOURCE_TYPE = eINSTANCE.getAssociation_SourceType(); /** - * The meta object literal for the 'Direction For' operation. + * The meta object literal for the 'Target Type' reference list feature. * * * @generated */ - EOperation FEATURE___DIRECTION_FOR__TYPE = eINSTANCE.getFeature__DirectionFor__Type(); + EReference ASSOCIATION__TARGET_TYPE = eINSTANCE.getAssociation_TargetType(); /** - * The meta object literal for the 'Naming Feature' operation. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.AssociationStructureImpl Association Structure}' class. * * + * @see org.omg.sysml.lang.sysml.impl.AssociationStructureImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getAssociationStructure() * @generated */ - EOperation FEATURE___NAMING_FEATURE = eINSTANCE.getFeature__NamingFeature(); + EClass ASSOCIATION_STRUCTURE = eINSTANCE.getAssociationStructure(); /** - * The meta object literal for the 'Redefines' operation. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.AttributeDefinitionImpl Attribute Definition}' class. * * + * @see org.omg.sysml.lang.sysml.impl.AttributeDefinitionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getAttributeDefinition() * @generated */ - EOperation FEATURE___REDEFINES__FEATURE = eINSTANCE.getFeature__Redefines__Feature(); + EClass ATTRIBUTE_DEFINITION = eINSTANCE.getAttributeDefinition(); /** - * The meta object literal for the 'Redefines From Library' operation. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.AttributeUsageImpl Attribute Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.AttributeUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getAttributeUsage() * @generated */ - EOperation FEATURE___REDEFINES_FROM_LIBRARY__STRING = eINSTANCE.getFeature__RedefinesFromLibrary__String(); + EClass ATTRIBUTE_USAGE = eINSTANCE.getAttributeUsage(); /** - * The meta object literal for the 'Subsets Chain' operation. + * The meta object literal for the 'Attribute Definition' reference list feature. * * * @generated */ - EOperation FEATURE___SUBSETS_CHAIN__FEATURE_FEATURE = eINSTANCE.getFeature__SubsetsChain__Feature_Feature(); + EReference ATTRIBUTE_USAGE__ATTRIBUTE_DEFINITION = eINSTANCE.getAttributeUsage_AttributeDefinition(); /** - * The meta object literal for the 'Typing Features' operation. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.BehaviorImpl Behavior}' class. * * + * @see org.omg.sysml.lang.sysml.impl.BehaviorImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getBehavior() * @generated */ - EOperation FEATURE___TYPING_FEATURES = eINSTANCE.getFeature__TypingFeatures(); + EClass BEHAVIOR = eINSTANCE.getBehavior(); /** - * The meta object literal for the 'As Cartesian Product' operation. + * The meta object literal for the 'Parameter' reference list feature. * * * @generated */ - EOperation FEATURE___AS_CARTESIAN_PRODUCT = eINSTANCE.getFeature__AsCartesianProduct(); + EReference BEHAVIOR__PARAMETER = eINSTANCE.getBehavior_Parameter(); /** - * The meta object literal for the 'Is Cartesian Product' operation. + * The meta object literal for the 'Step' reference list feature. * * * @generated */ - EOperation FEATURE___IS_CARTESIAN_PRODUCT = eINSTANCE.getFeature__IsCartesianProduct(); + EReference BEHAVIOR__STEP = eINSTANCE.getBehavior_Step(); /** - * The meta object literal for the 'Is Owned Cross Feature' operation. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.BindingConnectorImpl Binding Connector}' class. * * + * @see org.omg.sysml.lang.sysml.impl.BindingConnectorImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getBindingConnector() * @generated */ - EOperation FEATURE___IS_OWNED_CROSS_FEATURE = eINSTANCE.getFeature__IsOwnedCrossFeature(); + EClass BINDING_CONNECTOR = eINSTANCE.getBindingConnector(); /** - * The meta object literal for the 'Owned Cross Feature' operation. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.BindingConnectorAsUsageImpl Binding Connector As Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.BindingConnectorAsUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getBindingConnectorAsUsage() * @generated */ - EOperation FEATURE___OWNED_CROSS_FEATURE = eINSTANCE.getFeature__OwnedCrossFeature(); + EClass BINDING_CONNECTOR_AS_USAGE = eINSTANCE.getBindingConnectorAsUsage(); /** - * The meta object literal for the 'All Redefined Features' operation. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.BooleanExpressionImpl Boolean Expression}' class. * * + * @see org.omg.sysml.lang.sysml.impl.BooleanExpressionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getBooleanExpression() * @generated */ - EOperation FEATURE___ALL_REDEFINED_FEATURES = eINSTANCE.getFeature__AllRedefinedFeatures(); + EClass BOOLEAN_EXPRESSION = eINSTANCE.getBooleanExpression(); /** - * The meta object literal for the 'Is Featured Within' operation. + * The meta object literal for the 'Predicate' reference feature. * * * @generated */ - EOperation FEATURE___IS_FEATURED_WITHIN__TYPE = eINSTANCE.getFeature__IsFeaturedWithin__Type(); + EReference BOOLEAN_EXPRESSION__PREDICATE = eINSTANCE.getBooleanExpression_Predicate(); /** - * The meta object literal for the 'Can Access' operation. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.CalculationDefinitionImpl Calculation Definition}' class. * * + * @see org.omg.sysml.lang.sysml.impl.CalculationDefinitionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getCalculationDefinition() * @generated */ - EOperation FEATURE___CAN_ACCESS__FEATURE = eINSTANCE.getFeature__CanAccess__Feature(); + EClass CALCULATION_DEFINITION = eINSTANCE.getCalculationDefinition(); /** - * The meta object literal for the 'Is Featuring Type' operation. + * The meta object literal for the 'Calculation' reference list feature. * * * @generated */ - EOperation FEATURE___IS_FEATURING_TYPE__TYPE = eINSTANCE.getFeature__IsFeaturingType__Type(); + EReference CALCULATION_DEFINITION__CALCULATION = eINSTANCE.getCalculationDefinition_Calculation(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.TypeImpl Type}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.CalculationUsageImpl Calculation Usage}' class. * * - * @see org.omg.sysml.lang.sysml.impl.TypeImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getType() + * @see org.omg.sysml.lang.sysml.impl.CalculationUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getCalculationUsage() * @generated */ - EClass TYPE = eINSTANCE.getType(); + EClass CALCULATION_USAGE = eINSTANCE.getCalculationUsage(); /** - * The meta object literal for the 'Owned Specialization' reference list feature. + * The meta object literal for the 'Calculation Definition' reference feature. * * * @generated */ - EReference TYPE__OWNED_SPECIALIZATION = eINSTANCE.getType_OwnedSpecialization(); + EReference CALCULATION_USAGE__CALCULATION_DEFINITION = eINSTANCE.getCalculationUsage_CalculationDefinition(); /** - * The meta object literal for the 'Owned Feature Membership' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.CaseDefinitionImpl Case Definition}' class. * * + * @see org.omg.sysml.lang.sysml.impl.CaseDefinitionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getCaseDefinition() * @generated */ - EReference TYPE__OWNED_FEATURE_MEMBERSHIP = eINSTANCE.getType_OwnedFeatureMembership(); + EClass CASE_DEFINITION = eINSTANCE.getCaseDefinition(); /** - * The meta object literal for the 'Feature' reference list feature. + * The meta object literal for the 'Actor Parameter' reference list feature. * * * @generated */ - EReference TYPE__FEATURE = eINSTANCE.getType_Feature(); + EReference CASE_DEFINITION__ACTOR_PARAMETER = eINSTANCE.getCaseDefinition_ActorParameter(); /** - * The meta object literal for the 'Owned Feature' reference list feature. + * The meta object literal for the 'Objective Requirement' reference feature. * * * @generated */ - EReference TYPE__OWNED_FEATURE = eINSTANCE.getType_OwnedFeature(); + EReference CASE_DEFINITION__OBJECTIVE_REQUIREMENT = eINSTANCE.getCaseDefinition_ObjectiveRequirement(); /** - * The meta object literal for the 'Input' reference list feature. + * The meta object literal for the 'Subject Parameter' reference feature. * * * @generated */ - EReference TYPE__INPUT = eINSTANCE.getType_Input(); + EReference CASE_DEFINITION__SUBJECT_PARAMETER = eINSTANCE.getCaseDefinition_SubjectParameter(); /** - * The meta object literal for the 'Output' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.CaseUsageImpl Case Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.CaseUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getCaseUsage() * @generated */ - EReference TYPE__OUTPUT = eINSTANCE.getType_Output(); + EClass CASE_USAGE = eINSTANCE.getCaseUsage(); /** - * The meta object literal for the 'Is Abstract' attribute feature. + * The meta object literal for the 'Actor Parameter' reference list feature. * * * @generated */ - EAttribute TYPE__IS_ABSTRACT = eINSTANCE.getType_IsAbstract(); + EReference CASE_USAGE__ACTOR_PARAMETER = eINSTANCE.getCaseUsage_ActorParameter(); /** - * The meta object literal for the 'Inherited Membership' reference list feature. + * The meta object literal for the 'Case Definition' reference feature. * * * @generated */ - EReference TYPE__INHERITED_MEMBERSHIP = eINSTANCE.getType_InheritedMembership(); + EReference CASE_USAGE__CASE_DEFINITION = eINSTANCE.getCaseUsage_CaseDefinition(); /** - * The meta object literal for the 'End Feature' reference list feature. + * The meta object literal for the 'Objective Requirement' reference feature. * * * @generated */ - EReference TYPE__END_FEATURE = eINSTANCE.getType_EndFeature(); + EReference CASE_USAGE__OBJECTIVE_REQUIREMENT = eINSTANCE.getCaseUsage_ObjectiveRequirement(); /** - * The meta object literal for the 'Owned End Feature' reference list feature. + * The meta object literal for the 'Subject Parameter' reference feature. * * * @generated */ - EReference TYPE__OWNED_END_FEATURE = eINSTANCE.getType_OwnedEndFeature(); + EReference CASE_USAGE__SUBJECT_PARAMETER = eINSTANCE.getCaseUsage_SubjectParameter(); /** - * The meta object literal for the 'Is Sufficient' attribute feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ClassImpl Class}' class. * * + * @see org.omg.sysml.lang.sysml.impl.ClassImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getClass_() * @generated */ - EAttribute TYPE__IS_SUFFICIENT = eINSTANCE.getType_IsSufficient(); + EClass CLASS = eINSTANCE.getClass_(); /** - * The meta object literal for the 'Owned Conjugator' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ClassifierImpl Classifier}' class. * * + * @see org.omg.sysml.lang.sysml.impl.ClassifierImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getClassifier() * @generated */ - EReference TYPE__OWNED_CONJUGATOR = eINSTANCE.getType_OwnedConjugator(); + EClass CLASSIFIER = eINSTANCE.getClassifier(); /** - * The meta object literal for the 'Is Conjugated' attribute feature. + * The meta object literal for the 'Owned Subclassification' reference list feature. * * * @generated */ - EAttribute TYPE__IS_CONJUGATED = eINSTANCE.getType_IsConjugated(); + EReference CLASSIFIER__OWNED_SUBCLASSIFICATION = eINSTANCE.getClassifier_OwnedSubclassification(); /** - * The meta object literal for the 'Inherited Feature' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.CollectExpressionImpl Collect Expression}' class. * * + * @see org.omg.sysml.lang.sysml.impl.CollectExpressionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getCollectExpression() * @generated */ - EReference TYPE__INHERITED_FEATURE = eINSTANCE.getType_InheritedFeature(); + EClass COLLECT_EXPRESSION = eINSTANCE.getCollectExpression(); /** - * The meta object literal for the 'Multiplicity' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.CommentImpl Comment}' class. * * + * @see org.omg.sysml.lang.sysml.impl.CommentImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getComment() * @generated */ - EReference TYPE__MULTIPLICITY = eINSTANCE.getType_Multiplicity(); + EClass COMMENT = eINSTANCE.getComment(); /** - * The meta object literal for the 'Unioning Type' reference list feature. + * The meta object literal for the 'Body' attribute feature. * * * @generated */ - EReference TYPE__UNIONING_TYPE = eINSTANCE.getType_UnioningType(); + EAttribute COMMENT__BODY = eINSTANCE.getComment_Body(); /** - * The meta object literal for the 'Owned Intersecting' reference list feature. + * The meta object literal for the 'Locale' attribute feature. * * * @generated */ - EReference TYPE__OWNED_INTERSECTING = eINSTANCE.getType_OwnedIntersecting(); + EAttribute COMMENT__LOCALE = eINSTANCE.getComment_Locale(); /** - * The meta object literal for the 'Intersecting Type' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ConcernDefinitionImpl Concern Definition}' class. * * + * @see org.omg.sysml.lang.sysml.impl.ConcernDefinitionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getConcernDefinition() * @generated */ - EReference TYPE__INTERSECTING_TYPE = eINSTANCE.getType_IntersectingType(); + EClass CONCERN_DEFINITION = eINSTANCE.getConcernDefinition(); /** - * The meta object literal for the 'Owned Unioning' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ConcernUsageImpl Concern Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.ConcernUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getConcernUsage() * @generated */ - EReference TYPE__OWNED_UNIONING = eINSTANCE.getType_OwnedUnioning(); + EClass CONCERN_USAGE = eINSTANCE.getConcernUsage(); /** - * The meta object literal for the 'Owned Disjoining' reference list feature. + * The meta object literal for the 'Concern Definition' reference feature. * * * @generated */ - EReference TYPE__OWNED_DISJOINING = eINSTANCE.getType_OwnedDisjoining(); + EReference CONCERN_USAGE__CONCERN_DEFINITION = eINSTANCE.getConcernUsage_ConcernDefinition(); /** - * The meta object literal for the 'Feature Membership' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ConjugatedPortDefinitionImpl Conjugated Port Definition}' class. * * + * @see org.omg.sysml.lang.sysml.impl.ConjugatedPortDefinitionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getConjugatedPortDefinition() * @generated */ - EReference TYPE__FEATURE_MEMBERSHIP = eINSTANCE.getType_FeatureMembership(); + EClass CONJUGATED_PORT_DEFINITION = eINSTANCE.getConjugatedPortDefinition(); /** - * The meta object literal for the 'Differencing Type' reference list feature. + * The meta object literal for the 'Original Port Definition' reference feature. * * * @generated */ - EReference TYPE__DIFFERENCING_TYPE = eINSTANCE.getType_DifferencingType(); + EReference CONJUGATED_PORT_DEFINITION__ORIGINAL_PORT_DEFINITION = eINSTANCE.getConjugatedPortDefinition_OriginalPortDefinition(); /** - * The meta object literal for the 'Owned Differencing' reference list feature. + * The meta object literal for the 'Owned Port Conjugator' reference feature. * * * @generated */ - EReference TYPE__OWNED_DIFFERENCING = eINSTANCE.getType_OwnedDifferencing(); + EReference CONJUGATED_PORT_DEFINITION__OWNED_PORT_CONJUGATOR = eINSTANCE.getConjugatedPortDefinition_OwnedPortConjugator(); /** - * The meta object literal for the 'Directed Feature' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ConjugatedPortTypingImpl Conjugated Port Typing}' class. * * + * @see org.omg.sysml.lang.sysml.impl.ConjugatedPortTypingImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getConjugatedPortTyping() * @generated */ - EReference TYPE__DIRECTED_FEATURE = eINSTANCE.getType_DirectedFeature(); + EClass CONJUGATED_PORT_TYPING = eINSTANCE.getConjugatedPortTyping(); /** - * The meta object literal for the 'Inherited Memberships' operation. + * The meta object literal for the 'Conjugated Port Definition' reference feature. * * * @generated */ - EOperation TYPE___INHERITED_MEMBERSHIPS__ELIST_ELIST_BOOLEAN = eINSTANCE.getType__InheritedMemberships__EList_EList_boolean(); + EReference CONJUGATED_PORT_TYPING__CONJUGATED_PORT_DEFINITION = eINSTANCE.getConjugatedPortTyping_ConjugatedPortDefinition(); /** - * The meta object literal for the 'Inheritable Memberships' operation. + * The meta object literal for the 'Port Definition' reference feature. * * * @generated */ - EOperation TYPE___INHERITABLE_MEMBERSHIPS__ELIST_ELIST_BOOLEAN = eINSTANCE.getType__InheritableMemberships__EList_EList_boolean(); + EReference CONJUGATED_PORT_TYPING__PORT_DEFINITION = eINSTANCE.getConjugatedPortTyping_PortDefinition(); /** - * The meta object literal for the 'Non Private Memberships' operation. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ConjugationImpl Conjugation}' class. * * + * @see org.omg.sysml.lang.sysml.impl.ConjugationImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getConjugation() * @generated */ - EOperation TYPE___NON_PRIVATE_MEMBERSHIPS__ELIST_ELIST_BOOLEAN = eINSTANCE.getType__NonPrivateMemberships__EList_EList_boolean(); + EClass CONJUGATION = eINSTANCE.getConjugation(); /** - * The meta object literal for the 'Remove Redefined Features' operation. + * The meta object literal for the 'Conjugated Type' reference feature. * * * @generated */ - EOperation TYPE___REMOVE_REDEFINED_FEATURES__ELIST = eINSTANCE.getType__RemoveRedefinedFeatures__EList(); + EReference CONJUGATION__CONJUGATED_TYPE = eINSTANCE.getConjugation_ConjugatedType(); /** - * The meta object literal for the 'All Redefined Features Of' operation. + * The meta object literal for the 'Original Type' reference feature. * * * @generated */ - EOperation TYPE___ALL_REDEFINED_FEATURES_OF__MEMBERSHIP = eINSTANCE.getType__AllRedefinedFeaturesOf__Membership(); + EReference CONJUGATION__ORIGINAL_TYPE = eINSTANCE.getConjugation_OriginalType(); /** - * The meta object literal for the 'Direction Of' operation. + * The meta object literal for the 'Owning Type' reference feature. * * * @generated */ - EOperation TYPE___DIRECTION_OF__FEATURE = eINSTANCE.getType__DirectionOf__Feature(); + EReference CONJUGATION__OWNING_TYPE = eINSTANCE.getConjugation_OwningType(); /** - * The meta object literal for the 'Direction Of Excluding' operation. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ConnectionDefinitionImpl Connection Definition}' class. * * + * @see org.omg.sysml.lang.sysml.impl.ConnectionDefinitionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getConnectionDefinition() * @generated */ - EOperation TYPE___DIRECTION_OF_EXCLUDING__FEATURE_ELIST = eINSTANCE.getType__DirectionOfExcluding__Feature_EList(); + EClass CONNECTION_DEFINITION = eINSTANCE.getConnectionDefinition(); /** - * The meta object literal for the 'Supertypes' operation. + * The meta object literal for the 'Connection End' reference list feature. * * * @generated */ - EOperation TYPE___SUPERTYPES__BOOLEAN = eINSTANCE.getType__Supertypes__boolean(); + EReference CONNECTION_DEFINITION__CONNECTION_END = eINSTANCE.getConnectionDefinition_ConnectionEnd(); /** - * The meta object literal for the 'All Supertypes' operation. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ConnectionUsageImpl Connection Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.ConnectionUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getConnectionUsage() * @generated */ - EOperation TYPE___ALL_SUPERTYPES = eINSTANCE.getType__AllSupertypes(); + EClass CONNECTION_USAGE = eINSTANCE.getConnectionUsage(); /** - * The meta object literal for the 'Specializes' operation. + * The meta object literal for the 'Connection Definition' reference list feature. * * * @generated */ - EOperation TYPE___SPECIALIZES__TYPE = eINSTANCE.getType__Specializes__Type(); + EReference CONNECTION_USAGE__CONNECTION_DEFINITION = eINSTANCE.getConnectionUsage_ConnectionDefinition(); /** - * The meta object literal for the 'Specializes From Library' operation. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ConnectorImpl Connector}' class. * * + * @see org.omg.sysml.lang.sysml.impl.ConnectorImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getConnector() * @generated */ - EOperation TYPE___SPECIALIZES_FROM_LIBRARY__STRING = eINSTANCE.getType__SpecializesFromLibrary__String(); + EClass CONNECTOR = eINSTANCE.getConnector(); /** - * The meta object literal for the 'Is Compatible With' operation. + * The meta object literal for the 'Association' reference list feature. * * * @generated */ - EOperation TYPE___IS_COMPATIBLE_WITH__TYPE = eINSTANCE.getType__IsCompatibleWith__Type(); + EReference CONNECTOR__ASSOCIATION = eINSTANCE.getConnector_Association(); /** - * The meta object literal for the 'Multiplicities' operation. + * The meta object literal for the 'Connector End' reference list feature. * * * @generated */ - EOperation TYPE___MULTIPLICITIES = eINSTANCE.getType__Multiplicities(); + EReference CONNECTOR__CONNECTOR_END = eINSTANCE.getConnector_ConnectorEnd(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.NamespaceImpl Namespace}' class. + * The meta object literal for the 'Default Featuring Type' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.NamespaceImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getNamespace() * @generated */ - EClass NAMESPACE = eINSTANCE.getNamespace(); + EReference CONNECTOR__DEFAULT_FEATURING_TYPE = eINSTANCE.getConnector_DefaultFeaturingType(); /** - * The meta object literal for the 'Owned Membership' reference list feature. + * The meta object literal for the 'Related Feature' reference list feature. * * * @generated */ - EReference NAMESPACE__OWNED_MEMBERSHIP = eINSTANCE.getNamespace_OwnedMembership(); + EReference CONNECTOR__RELATED_FEATURE = eINSTANCE.getConnector_RelatedFeature(); /** - * The meta object literal for the 'Owned Member' reference list feature. + * The meta object literal for the 'Source Feature' reference feature. * * * @generated */ - EReference NAMESPACE__OWNED_MEMBER = eINSTANCE.getNamespace_OwnedMember(); + EReference CONNECTOR__SOURCE_FEATURE = eINSTANCE.getConnector_SourceFeature(); /** - * The meta object literal for the 'Membership' reference list feature. + * The meta object literal for the 'Target Feature' reference list feature. * * * @generated */ - EReference NAMESPACE__MEMBERSHIP = eINSTANCE.getNamespace_Membership(); + EReference CONNECTOR__TARGET_FEATURE = eINSTANCE.getConnector_TargetFeature(); /** - * The meta object literal for the 'Owned Import' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ConnectorAsUsageImpl Connector As Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.ConnectorAsUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getConnectorAsUsage() * @generated */ - EReference NAMESPACE__OWNED_IMPORT = eINSTANCE.getNamespace_OwnedImport(); + EClass CONNECTOR_AS_USAGE = eINSTANCE.getConnectorAsUsage(); /** - * The meta object literal for the 'Member' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ConstraintDefinitionImpl Constraint Definition}' class. * * + * @see org.omg.sysml.lang.sysml.impl.ConstraintDefinitionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getConstraintDefinition() * @generated */ - EReference NAMESPACE__MEMBER = eINSTANCE.getNamespace_Member(); + EClass CONSTRAINT_DEFINITION = eINSTANCE.getConstraintDefinition(); /** - * The meta object literal for the 'Imported Membership' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ConstraintUsageImpl Constraint Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.ConstraintUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getConstraintUsage() * @generated */ - EReference NAMESPACE__IMPORTED_MEMBERSHIP = eINSTANCE.getNamespace_ImportedMembership(); + EClass CONSTRAINT_USAGE = eINSTANCE.getConstraintUsage(); /** - * The meta object literal for the 'Names Of' operation. + * The meta object literal for the 'Constraint Definition' reference feature. * * * @generated */ - EOperation NAMESPACE___NAMES_OF__ELEMENT = eINSTANCE.getNamespace__NamesOf__Element(); + EReference CONSTRAINT_USAGE__CONSTRAINT_DEFINITION = eINSTANCE.getConstraintUsage_ConstraintDefinition(); /** - * The meta object literal for the 'Visibility Of' operation. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ConstructorExpressionImpl Constructor Expression}' class. * * + * @see org.omg.sysml.lang.sysml.impl.ConstructorExpressionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getConstructorExpression() * @generated */ - EOperation NAMESPACE___VISIBILITY_OF__MEMBERSHIP = eINSTANCE.getNamespace__VisibilityOf__Membership(); + EClass CONSTRUCTOR_EXPRESSION = eINSTANCE.getConstructorExpression(); /** - * The meta object literal for the 'Visible Memberships' operation. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ControlNodeImpl Control Node}' class. * * + * @see org.omg.sysml.lang.sysml.impl.ControlNodeImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getControlNode() * @generated */ - EOperation NAMESPACE___VISIBLE_MEMBERSHIPS__ELIST_BOOLEAN_BOOLEAN = eINSTANCE.getNamespace__VisibleMemberships__EList_boolean_boolean(); + EClass CONTROL_NODE = eINSTANCE.getControlNode(); /** - * The meta object literal for the 'Imported Memberships' operation. + * The meta object literal for the 'Multiplicity Has Bounds' operation. * * * @generated */ - EOperation NAMESPACE___IMPORTED_MEMBERSHIPS__ELIST = eINSTANCE.getNamespace__ImportedMemberships__EList(); + EOperation CONTROL_NODE___MULTIPLICITY_HAS_BOUNDS__MULTIPLICITY_INT_INT = eINSTANCE.getControlNode__MultiplicityHasBounds__Multiplicity_int_int(); /** - * The meta object literal for the 'Memberships Of Visibility' operation. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.CrossSubsettingImpl Cross Subsetting}' class. * * + * @see org.omg.sysml.lang.sysml.impl.CrossSubsettingImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getCrossSubsetting() * @generated */ - EOperation NAMESPACE___MEMBERSHIPS_OF_VISIBILITY__VISIBILITYKIND_ELIST = eINSTANCE.getNamespace__MembershipsOfVisibility__VisibilityKind_EList(); + EClass CROSS_SUBSETTING = eINSTANCE.getCrossSubsetting(); /** - * The meta object literal for the 'Resolve' operation. + * The meta object literal for the 'Crossed Feature' reference feature. * * * @generated */ - EOperation NAMESPACE___RESOLVE__STRING = eINSTANCE.getNamespace__Resolve__String(); + EReference CROSS_SUBSETTING__CROSSED_FEATURE = eINSTANCE.getCrossSubsetting_CrossedFeature(); /** - * The meta object literal for the 'Resolve Global' operation. + * The meta object literal for the 'Crossing Feature' reference feature. * * * @generated */ - EOperation NAMESPACE___RESOLVE_GLOBAL__STRING = eINSTANCE.getNamespace__ResolveGlobal__String(); + EReference CROSS_SUBSETTING__CROSSING_FEATURE = eINSTANCE.getCrossSubsetting_CrossingFeature(); /** - * The meta object literal for the 'Resolve Local' operation. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.DataTypeImpl Data Type}' class. * * + * @see org.omg.sysml.lang.sysml.impl.DataTypeImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getDataType() * @generated */ - EOperation NAMESPACE___RESOLVE_LOCAL__STRING = eINSTANCE.getNamespace__ResolveLocal__String(); + EClass DATA_TYPE = eINSTANCE.getDataType(); /** - * The meta object literal for the 'Resolve Visible' operation. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.DecisionNodeImpl Decision Node}' class. * * + * @see org.omg.sysml.lang.sysml.impl.DecisionNodeImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getDecisionNode() * @generated */ - EOperation NAMESPACE___RESOLVE_VISIBLE__STRING = eINSTANCE.getNamespace__ResolveVisible__String(); + EClass DECISION_NODE = eINSTANCE.getDecisionNode(); /** - * The meta object literal for the 'Qualification Of' operation. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.DefinitionImpl Definition}' class. * * + * @see org.omg.sysml.lang.sysml.impl.DefinitionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getDefinition() * @generated */ - EOperation NAMESPACE___QUALIFICATION_OF__STRING = eINSTANCE.getNamespace__QualificationOf__String(); + EClass DEFINITION = eINSTANCE.getDefinition(); /** - * The meta object literal for the 'Unqualified Name Of' operation. + * The meta object literal for the 'Directed Usage' reference list feature. * * * @generated */ - EOperation NAMESPACE___UNQUALIFIED_NAME_OF__STRING = eINSTANCE.getNamespace__UnqualifiedNameOf__String(); + EReference DEFINITION__DIRECTED_USAGE = eINSTANCE.getDefinition_DirectedUsage(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ElementImpl Element}' class. + * The meta object literal for the 'Is Variation' attribute feature. * * - * @see org.omg.sysml.lang.sysml.impl.ElementImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getElement() * @generated */ - EClass ELEMENT = eINSTANCE.getElement(); + EAttribute DEFINITION__IS_VARIATION = eINSTANCE.getDefinition_IsVariation(); /** - * The meta object literal for the 'Owning Membership' reference feature. + * The meta object literal for the 'Owned Action' reference list feature. * * * @generated */ - EReference ELEMENT__OWNING_MEMBERSHIP = eINSTANCE.getElement_OwningMembership(); + EReference DEFINITION__OWNED_ACTION = eINSTANCE.getDefinition_OwnedAction(); /** - * The meta object literal for the 'Owned Relationship' containment reference list feature. + * The meta object literal for the 'Owned Allocation' reference list feature. * * * @generated */ - EReference ELEMENT__OWNED_RELATIONSHIP = eINSTANCE.getElement_OwnedRelationship(); + EReference DEFINITION__OWNED_ALLOCATION = eINSTANCE.getDefinition_OwnedAllocation(); /** - * The meta object literal for the 'Owning Relationship' container reference feature. + * The meta object literal for the 'Owned Analysis Case' reference list feature. * * * @generated */ - EReference ELEMENT__OWNING_RELATIONSHIP = eINSTANCE.getElement_OwningRelationship(); + EReference DEFINITION__OWNED_ANALYSIS_CASE = eINSTANCE.getDefinition_OwnedAnalysisCase(); /** - * The meta object literal for the 'Owning Namespace' reference feature. + * The meta object literal for the 'Owned Attribute' reference list feature. * * * @generated */ - EReference ELEMENT__OWNING_NAMESPACE = eINSTANCE.getElement_OwningNamespace(); + EReference DEFINITION__OWNED_ATTRIBUTE = eINSTANCE.getDefinition_OwnedAttribute(); /** - * The meta object literal for the 'Element Id' attribute feature. + * The meta object literal for the 'Owned Calculation' reference list feature. * * * @generated */ - EAttribute ELEMENT__ELEMENT_ID = eINSTANCE.getElement_ElementId(); + EReference DEFINITION__OWNED_CALCULATION = eINSTANCE.getDefinition_OwnedCalculation(); /** - * The meta object literal for the 'Owner' reference feature. + * The meta object literal for the 'Owned Case' reference list feature. * * * @generated */ - EReference ELEMENT__OWNER = eINSTANCE.getElement_Owner(); + EReference DEFINITION__OWNED_CASE = eINSTANCE.getDefinition_OwnedCase(); /** - * The meta object literal for the 'Owned Element' reference list feature. + * The meta object literal for the 'Owned Concern' reference list feature. * * * @generated */ - EReference ELEMENT__OWNED_ELEMENT = eINSTANCE.getElement_OwnedElement(); + EReference DEFINITION__OWNED_CONCERN = eINSTANCE.getDefinition_OwnedConcern(); /** - * The meta object literal for the 'Documentation' reference list feature. + * The meta object literal for the 'Owned Connection' reference list feature. * * * @generated */ - EReference ELEMENT__DOCUMENTATION = eINSTANCE.getElement_Documentation(); + EReference DEFINITION__OWNED_CONNECTION = eINSTANCE.getDefinition_OwnedConnection(); /** - * The meta object literal for the 'Owned Annotation' reference list feature. + * The meta object literal for the 'Owned Constraint' reference list feature. * * * @generated */ - EReference ELEMENT__OWNED_ANNOTATION = eINSTANCE.getElement_OwnedAnnotation(); + EReference DEFINITION__OWNED_CONSTRAINT = eINSTANCE.getDefinition_OwnedConstraint(); /** - * The meta object literal for the 'Textual Representation' reference list feature. + * The meta object literal for the 'Owned Enumeration' reference list feature. * * * @generated */ - EReference ELEMENT__TEXTUAL_REPRESENTATION = eINSTANCE.getElement_TextualRepresentation(); + EReference DEFINITION__OWNED_ENUMERATION = eINSTANCE.getDefinition_OwnedEnumeration(); /** - * The meta object literal for the 'Alias Ids' attribute list feature. + * The meta object literal for the 'Owned Flow' reference list feature. * * * @generated */ - EAttribute ELEMENT__ALIAS_IDS = eINSTANCE.getElement_AliasIds(); + EReference DEFINITION__OWNED_FLOW = eINSTANCE.getDefinition_OwnedFlow(); /** - * The meta object literal for the 'Declared Short Name' attribute feature. + * The meta object literal for the 'Owned Interface' reference list feature. * * * @generated */ - EAttribute ELEMENT__DECLARED_SHORT_NAME = eINSTANCE.getElement_DeclaredShortName(); + EReference DEFINITION__OWNED_INTERFACE = eINSTANCE.getDefinition_OwnedInterface(); /** - * The meta object literal for the 'Declared Name' attribute feature. + * The meta object literal for the 'Owned Item' reference list feature. * * * @generated */ - EAttribute ELEMENT__DECLARED_NAME = eINSTANCE.getElement_DeclaredName(); + EReference DEFINITION__OWNED_ITEM = eINSTANCE.getDefinition_OwnedItem(); /** - * The meta object literal for the 'Short Name' attribute feature. + * The meta object literal for the 'Owned Metadata' reference list feature. * * * @generated */ - EAttribute ELEMENT__SHORT_NAME = eINSTANCE.getElement_ShortName(); + EReference DEFINITION__OWNED_METADATA = eINSTANCE.getDefinition_OwnedMetadata(); /** - * The meta object literal for the 'Name' attribute feature. + * The meta object literal for the 'Owned Occurrence' reference list feature. * * * @generated */ - EAttribute ELEMENT__NAME = eINSTANCE.getElement_Name(); + EReference DEFINITION__OWNED_OCCURRENCE = eINSTANCE.getDefinition_OwnedOccurrence(); /** - * The meta object literal for the 'Qualified Name' attribute feature. + * The meta object literal for the 'Owned Part' reference list feature. * * * @generated */ - EAttribute ELEMENT__QUALIFIED_NAME = eINSTANCE.getElement_QualifiedName(); + EReference DEFINITION__OWNED_PART = eINSTANCE.getDefinition_OwnedPart(); /** - * The meta object literal for the 'Is Implied Included' attribute feature. + * The meta object literal for the 'Owned Port' reference list feature. * * * @generated */ - EAttribute ELEMENT__IS_IMPLIED_INCLUDED = eINSTANCE.getElement_IsImpliedIncluded(); + EReference DEFINITION__OWNED_PORT = eINSTANCE.getDefinition_OwnedPort(); /** - * The meta object literal for the 'Is Library Element' attribute feature. + * The meta object literal for the 'Owned Reference' reference list feature. * * * @generated */ - EAttribute ELEMENT__IS_LIBRARY_ELEMENT = eINSTANCE.getElement_IsLibraryElement(); + EReference DEFINITION__OWNED_REFERENCE = eINSTANCE.getDefinition_OwnedReference(); /** - * The meta object literal for the 'Escaped Name' operation. + * The meta object literal for the 'Owned Rendering' reference list feature. * * * @generated */ - EOperation ELEMENT___ESCAPED_NAME = eINSTANCE.getElement__EscapedName(); + EReference DEFINITION__OWNED_RENDERING = eINSTANCE.getDefinition_OwnedRendering(); /** - * The meta object literal for the 'Effective Short Name' operation. + * The meta object literal for the 'Owned Requirement' reference list feature. * * * @generated */ - EOperation ELEMENT___EFFECTIVE_SHORT_NAME = eINSTANCE.getElement__EffectiveShortName(); + EReference DEFINITION__OWNED_REQUIREMENT = eINSTANCE.getDefinition_OwnedRequirement(); /** - * The meta object literal for the 'Effective Name' operation. + * The meta object literal for the 'Owned State' reference list feature. * * * @generated */ - EOperation ELEMENT___EFFECTIVE_NAME = eINSTANCE.getElement__EffectiveName(); + EReference DEFINITION__OWNED_STATE = eINSTANCE.getDefinition_OwnedState(); /** - * The meta object literal for the 'Library Namespace' operation. + * The meta object literal for the 'Owned Transition' reference list feature. * * * @generated */ - EOperation ELEMENT___LIBRARY_NAMESPACE = eINSTANCE.getElement__LibraryNamespace(); + EReference DEFINITION__OWNED_TRANSITION = eINSTANCE.getDefinition_OwnedTransition(); /** - * The meta object literal for the 'Path' operation. + * The meta object literal for the 'Owned Usage' reference list feature. * * * @generated */ - EOperation ELEMENT___PATH = eINSTANCE.getElement__Path(); + EReference DEFINITION__OWNED_USAGE = eINSTANCE.getDefinition_OwnedUsage(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.OwningMembershipImpl Owning Membership}' class. + * The meta object literal for the 'Owned Use Case' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.OwningMembershipImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getOwningMembership() * @generated */ - EClass OWNING_MEMBERSHIP = eINSTANCE.getOwningMembership(); + EReference DEFINITION__OWNED_USE_CASE = eINSTANCE.getDefinition_OwnedUseCase(); /** - * The meta object literal for the 'Owned Member Element Id' attribute feature. + * The meta object literal for the 'Owned Verification Case' reference list feature. * * * @generated */ - EAttribute OWNING_MEMBERSHIP__OWNED_MEMBER_ELEMENT_ID = eINSTANCE.getOwningMembership_OwnedMemberElementId(); + EReference DEFINITION__OWNED_VERIFICATION_CASE = eINSTANCE.getDefinition_OwnedVerificationCase(); /** - * The meta object literal for the 'Owned Member Short Name' attribute feature. + * The meta object literal for the 'Owned View' reference list feature. * * * @generated */ - EAttribute OWNING_MEMBERSHIP__OWNED_MEMBER_SHORT_NAME = eINSTANCE.getOwningMembership_OwnedMemberShortName(); + EReference DEFINITION__OWNED_VIEW = eINSTANCE.getDefinition_OwnedView(); /** - * The meta object literal for the 'Owned Member Name' attribute feature. + * The meta object literal for the 'Owned Viewpoint' reference list feature. * * * @generated */ - EAttribute OWNING_MEMBERSHIP__OWNED_MEMBER_NAME = eINSTANCE.getOwningMembership_OwnedMemberName(); + EReference DEFINITION__OWNED_VIEWPOINT = eINSTANCE.getDefinition_OwnedViewpoint(); /** - * The meta object literal for the 'Owned Member Element' reference feature. + * The meta object literal for the 'Usage' reference list feature. * * * @generated */ - EReference OWNING_MEMBERSHIP__OWNED_MEMBER_ELEMENT = eINSTANCE.getOwningMembership_OwnedMemberElement(); + EReference DEFINITION__USAGE = eINSTANCE.getDefinition_Usage(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.MembershipImpl Membership}' class. + * The meta object literal for the 'Variant' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.MembershipImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getMembership() * @generated */ - EClass MEMBERSHIP = eINSTANCE.getMembership(); + EReference DEFINITION__VARIANT = eINSTANCE.getDefinition_Variant(); /** - * The meta object literal for the 'Member Element Id' attribute feature. + * The meta object literal for the 'Variant Membership' reference list feature. * * * @generated */ - EAttribute MEMBERSHIP__MEMBER_ELEMENT_ID = eINSTANCE.getMembership_MemberElementId(); + EReference DEFINITION__VARIANT_MEMBERSHIP = eINSTANCE.getDefinition_VariantMembership(); /** - * The meta object literal for the 'Membership Owning Namespace' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.DependencyImpl Dependency}' class. * * + * @see org.omg.sysml.lang.sysml.impl.DependencyImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getDependency() * @generated */ - EReference MEMBERSHIP__MEMBERSHIP_OWNING_NAMESPACE = eINSTANCE.getMembership_MembershipOwningNamespace(); + EClass DEPENDENCY = eINSTANCE.getDependency(); /** - * The meta object literal for the 'Member Short Name' attribute feature. + * The meta object literal for the 'Client' reference list feature. * * * @generated */ - EAttribute MEMBERSHIP__MEMBER_SHORT_NAME = eINSTANCE.getMembership_MemberShortName(); + EReference DEPENDENCY__CLIENT = eINSTANCE.getDependency_Client(); /** - * The meta object literal for the 'Member Element' reference feature. + * The meta object literal for the 'Supplier' reference list feature. * * * @generated */ - EReference MEMBERSHIP__MEMBER_ELEMENT = eINSTANCE.getMembership_MemberElement(); + EReference DEPENDENCY__SUPPLIER = eINSTANCE.getDependency_Supplier(); /** - * The meta object literal for the 'Member Name' attribute feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.DifferencingImpl Differencing}' class. * * + * @see org.omg.sysml.lang.sysml.impl.DifferencingImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getDifferencing() * @generated */ - EAttribute MEMBERSHIP__MEMBER_NAME = eINSTANCE.getMembership_MemberName(); + EClass DIFFERENCING = eINSTANCE.getDifferencing(); /** - * The meta object literal for the 'Visibility' attribute feature. + * The meta object literal for the 'Differencing Type' reference feature. * * * @generated */ - EAttribute MEMBERSHIP__VISIBILITY = eINSTANCE.getMembership_Visibility(); + EReference DIFFERENCING__DIFFERENCING_TYPE = eINSTANCE.getDifferencing_DifferencingType(); /** - * The meta object literal for the 'Is Distinguishable From' operation. + * The meta object literal for the 'Type Differenced' reference feature. * * * @generated */ - EOperation MEMBERSHIP___IS_DISTINGUISHABLE_FROM__MEMBERSHIP = eINSTANCE.getMembership__IsDistinguishableFrom__Membership(); + EReference DIFFERENCING__TYPE_DIFFERENCED = eINSTANCE.getDifferencing_TypeDifferenced(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.RelationshipImpl Relationship}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.DisjoiningImpl Disjoining}' class. * * - * @see org.omg.sysml.lang.sysml.impl.RelationshipImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getRelationship() + * @see org.omg.sysml.lang.sysml.impl.DisjoiningImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getDisjoining() * @generated */ - EClass RELATIONSHIP = eINSTANCE.getRelationship(); + EClass DISJOINING = eINSTANCE.getDisjoining(); /** - * The meta object literal for the 'Related Element' reference list feature. + * The meta object literal for the 'Disjoining Type' reference feature. * * * @generated */ - EReference RELATIONSHIP__RELATED_ELEMENT = eINSTANCE.getRelationship_RelatedElement(); + EReference DISJOINING__DISJOINING_TYPE = eINSTANCE.getDisjoining_DisjoiningType(); /** - * The meta object literal for the 'Target' reference list feature. + * The meta object literal for the 'Owning Type' reference feature. * * * @generated */ - EReference RELATIONSHIP__TARGET = eINSTANCE.getRelationship_Target(); + EReference DISJOINING__OWNING_TYPE = eINSTANCE.getDisjoining_OwningType(); /** - * The meta object literal for the 'Source' reference list feature. + * The meta object literal for the 'Type Disjoined' reference feature. * * * @generated */ - EReference RELATIONSHIP__SOURCE = eINSTANCE.getRelationship_Source(); + EReference DISJOINING__TYPE_DISJOINED = eINSTANCE.getDisjoining_TypeDisjoined(); /** - * The meta object literal for the 'Owning Related Element' container reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.DocumentationImpl Documentation}' class. * * + * @see org.omg.sysml.lang.sysml.impl.DocumentationImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getDocumentation() * @generated */ - EReference RELATIONSHIP__OWNING_RELATED_ELEMENT = eINSTANCE.getRelationship_OwningRelatedElement(); + EClass DOCUMENTATION = eINSTANCE.getDocumentation(); /** - * The meta object literal for the 'Owned Related Element' containment reference list feature. + * The meta object literal for the 'Documented Element' reference feature. * * * @generated */ - EReference RELATIONSHIP__OWNED_RELATED_ELEMENT = eINSTANCE.getRelationship_OwnedRelatedElement(); + EReference DOCUMENTATION__DOCUMENTED_ELEMENT = eINSTANCE.getDocumentation_DocumentedElement(); /** - * The meta object literal for the 'Is Implied' attribute feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ElementImpl Element}' class. * * + * @see org.omg.sysml.lang.sysml.impl.ElementImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getElement() * @generated */ - EAttribute RELATIONSHIP__IS_IMPLIED = eINSTANCE.getRelationship_IsImplied(); + EClass ELEMENT = eINSTANCE.getElement(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.DocumentationImpl Documentation}' class. + * The meta object literal for the 'Alias Ids' attribute list feature. * * - * @see org.omg.sysml.lang.sysml.impl.DocumentationImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getDocumentation() * @generated */ - EClass DOCUMENTATION = eINSTANCE.getDocumentation(); + EAttribute ELEMENT__ALIAS_IDS = eINSTANCE.getElement_AliasIds(); /** - * The meta object literal for the 'Documented Element' reference feature. + * The meta object literal for the 'Declared Name' attribute feature. * * * @generated */ - EReference DOCUMENTATION__DOCUMENTED_ELEMENT = eINSTANCE.getDocumentation_DocumentedElement(); + EAttribute ELEMENT__DECLARED_NAME = eINSTANCE.getElement_DeclaredName(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.CommentImpl Comment}' class. + * The meta object literal for the 'Declared Short Name' attribute feature. * * - * @see org.omg.sysml.lang.sysml.impl.CommentImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getComment() * @generated */ - EClass COMMENT = eINSTANCE.getComment(); + EAttribute ELEMENT__DECLARED_SHORT_NAME = eINSTANCE.getElement_DeclaredShortName(); /** - * The meta object literal for the 'Locale' attribute feature. + * The meta object literal for the 'Documentation' reference list feature. * * * @generated */ - EAttribute COMMENT__LOCALE = eINSTANCE.getComment_Locale(); + EReference ELEMENT__DOCUMENTATION = eINSTANCE.getElement_Documentation(); /** - * The meta object literal for the 'Body' attribute feature. + * The meta object literal for the 'Element Id' attribute feature. * * * @generated */ - EAttribute COMMENT__BODY = eINSTANCE.getComment_Body(); + EAttribute ELEMENT__ELEMENT_ID = eINSTANCE.getElement_ElementId(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.AnnotatingElementImpl Annotating Element}' class. + * The meta object literal for the 'Is Implied Included' attribute feature. * * - * @see org.omg.sysml.lang.sysml.impl.AnnotatingElementImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getAnnotatingElement() * @generated */ - EClass ANNOTATING_ELEMENT = eINSTANCE.getAnnotatingElement(); + EAttribute ELEMENT__IS_IMPLIED_INCLUDED = eINSTANCE.getElement_IsImpliedIncluded(); /** - * The meta object literal for the 'Annotated Element' reference list feature. + * The meta object literal for the 'Is Library Element' attribute feature. * * * @generated */ - EReference ANNOTATING_ELEMENT__ANNOTATED_ELEMENT = eINSTANCE.getAnnotatingElement_AnnotatedElement(); + EAttribute ELEMENT__IS_LIBRARY_ELEMENT = eINSTANCE.getElement_IsLibraryElement(); /** - * The meta object literal for the 'Owned Annotating Relationship' reference list feature. + * The meta object literal for the 'Name' attribute feature. * * * @generated */ - EReference ANNOTATING_ELEMENT__OWNED_ANNOTATING_RELATIONSHIP = eINSTANCE.getAnnotatingElement_OwnedAnnotatingRelationship(); + EAttribute ELEMENT__NAME = eINSTANCE.getElement_Name(); /** - * The meta object literal for the 'Annotation' reference list feature. + * The meta object literal for the 'Owned Annotation' reference list feature. * * * @generated */ - EReference ANNOTATING_ELEMENT__ANNOTATION = eINSTANCE.getAnnotatingElement_Annotation(); + EReference ELEMENT__OWNED_ANNOTATION = eINSTANCE.getElement_OwnedAnnotation(); /** - * The meta object literal for the 'Owning Annotating Relationship' reference feature. + * The meta object literal for the 'Owned Element' reference list feature. * * * @generated */ - EReference ANNOTATING_ELEMENT__OWNING_ANNOTATING_RELATIONSHIP = eINSTANCE.getAnnotatingElement_OwningAnnotatingRelationship(); + EReference ELEMENT__OWNED_ELEMENT = eINSTANCE.getElement_OwnedElement(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.AnnotationImpl Annotation}' class. + * The meta object literal for the 'Owned Relationship' containment reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.AnnotationImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getAnnotation() * @generated */ - EClass ANNOTATION = eINSTANCE.getAnnotation(); + EReference ELEMENT__OWNED_RELATIONSHIP = eINSTANCE.getElement_OwnedRelationship(); /** - * The meta object literal for the 'Annotating Element' reference feature. + * The meta object literal for the 'Owner' reference feature. * * * @generated */ - EReference ANNOTATION__ANNOTATING_ELEMENT = eINSTANCE.getAnnotation_AnnotatingElement(); + EReference ELEMENT__OWNER = eINSTANCE.getElement_Owner(); /** - * The meta object literal for the 'Annotated Element' reference feature. + * The meta object literal for the 'Owning Membership' reference feature. * * * @generated */ - EReference ANNOTATION__ANNOTATED_ELEMENT = eINSTANCE.getAnnotation_AnnotatedElement(); + EReference ELEMENT__OWNING_MEMBERSHIP = eINSTANCE.getElement_OwningMembership(); /** - * The meta object literal for the 'Owning Annotated Element' reference feature. + * The meta object literal for the 'Owning Namespace' reference feature. * * * @generated */ - EReference ANNOTATION__OWNING_ANNOTATED_ELEMENT = eINSTANCE.getAnnotation_OwningAnnotatedElement(); + EReference ELEMENT__OWNING_NAMESPACE = eINSTANCE.getElement_OwningNamespace(); /** - * The meta object literal for the 'Owned Annotating Element' reference feature. + * The meta object literal for the 'Owning Relationship' container reference feature. * * * @generated */ - EReference ANNOTATION__OWNED_ANNOTATING_ELEMENT = eINSTANCE.getAnnotation_OwnedAnnotatingElement(); + EReference ELEMENT__OWNING_RELATIONSHIP = eINSTANCE.getElement_OwningRelationship(); /** - * The meta object literal for the 'Owning Annotating Element' reference feature. + * The meta object literal for the 'Qualified Name' attribute feature. * * * @generated */ - EReference ANNOTATION__OWNING_ANNOTATING_ELEMENT = eINSTANCE.getAnnotation_OwningAnnotatingElement(); + EAttribute ELEMENT__QUALIFIED_NAME = eINSTANCE.getElement_QualifiedName(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.TextualRepresentationImpl Textual Representation}' class. + * The meta object literal for the 'Short Name' attribute feature. * * - * @see org.omg.sysml.lang.sysml.impl.TextualRepresentationImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getTextualRepresentation() * @generated */ - EClass TEXTUAL_REPRESENTATION = eINSTANCE.getTextualRepresentation(); + EAttribute ELEMENT__SHORT_NAME = eINSTANCE.getElement_ShortName(); /** - * The meta object literal for the 'Language' attribute feature. + * The meta object literal for the 'Textual Representation' reference list feature. * * * @generated */ - EAttribute TEXTUAL_REPRESENTATION__LANGUAGE = eINSTANCE.getTextualRepresentation_Language(); + EReference ELEMENT__TEXTUAL_REPRESENTATION = eINSTANCE.getElement_TextualRepresentation(); /** - * The meta object literal for the 'Body' attribute feature. + * The meta object literal for the 'Effective Name' operation. * * * @generated */ - EAttribute TEXTUAL_REPRESENTATION__BODY = eINSTANCE.getTextualRepresentation_Body(); + EOperation ELEMENT___EFFECTIVE_NAME = eINSTANCE.getElement__EffectiveName(); /** - * The meta object literal for the 'Represented Element' reference feature. + * The meta object literal for the 'Effective Short Name' operation. * * * @generated */ - EReference TEXTUAL_REPRESENTATION__REPRESENTED_ELEMENT = eINSTANCE.getTextualRepresentation_RepresentedElement(); + EOperation ELEMENT___EFFECTIVE_SHORT_NAME = eINSTANCE.getElement__EffectiveShortName(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ImportImpl Import}' class. + * The meta object literal for the 'Escaped Name' operation. * * - * @see org.omg.sysml.lang.sysml.impl.ImportImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getImport() * @generated */ - EClass IMPORT = eINSTANCE.getImport(); + EOperation ELEMENT___ESCAPED_NAME = eINSTANCE.getElement__EscapedName(); /** - * The meta object literal for the 'Visibility' attribute feature. + * The meta object literal for the 'Library Namespace' operation. * * * @generated */ - EAttribute IMPORT__VISIBILITY = eINSTANCE.getImport_Visibility(); + EOperation ELEMENT___LIBRARY_NAMESPACE = eINSTANCE.getElement__LibraryNamespace(); /** - * The meta object literal for the 'Is Recursive' attribute feature. + * The meta object literal for the 'Path' operation. * * * @generated */ - EAttribute IMPORT__IS_RECURSIVE = eINSTANCE.getImport_IsRecursive(); + EOperation ELEMENT___PATH = eINSTANCE.getElement__Path(); /** - * The meta object literal for the 'Is Import All' attribute feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ElementFilterMembershipImpl Element Filter Membership}' class. * * + * @see org.omg.sysml.lang.sysml.impl.ElementFilterMembershipImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getElementFilterMembership() * @generated */ - EAttribute IMPORT__IS_IMPORT_ALL = eINSTANCE.getImport_IsImportAll(); + EClass ELEMENT_FILTER_MEMBERSHIP = eINSTANCE.getElementFilterMembership(); /** - * The meta object literal for the 'Imported Element' reference feature. + * The meta object literal for the 'Condition' reference feature. * * * @generated */ - EReference IMPORT__IMPORTED_ELEMENT = eINSTANCE.getImport_ImportedElement(); + EReference ELEMENT_FILTER_MEMBERSHIP__CONDITION = eINSTANCE.getElementFilterMembership_Condition(); /** - * The meta object literal for the 'Import Owning Namespace' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.EndFeatureMembershipImpl End Feature Membership}' class. * * + * @see org.omg.sysml.lang.sysml.impl.EndFeatureMembershipImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getEndFeatureMembership() * @generated */ - EReference IMPORT__IMPORT_OWNING_NAMESPACE = eINSTANCE.getImport_ImportOwningNamespace(); + EClass END_FEATURE_MEMBERSHIP = eINSTANCE.getEndFeatureMembership(); /** - * The meta object literal for the 'Imported Memberships' operation. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.EnumerationDefinitionImpl Enumeration Definition}' class. * * + * @see org.omg.sysml.lang.sysml.impl.EnumerationDefinitionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getEnumerationDefinition() * @generated */ - EOperation IMPORT___IMPORTED_MEMBERSHIPS__ELIST = eINSTANCE.getImport__ImportedMemberships__EList(); + EClass ENUMERATION_DEFINITION = eINSTANCE.getEnumerationDefinition(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.SpecializationImpl Specialization}' class. + * The meta object literal for the 'Enumerated Value' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.SpecializationImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getSpecialization() * @generated */ - EClass SPECIALIZATION = eINSTANCE.getSpecialization(); + EReference ENUMERATION_DEFINITION__ENUMERATED_VALUE = eINSTANCE.getEnumerationDefinition_EnumeratedValue(); /** - * The meta object literal for the 'General' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.EnumerationUsageImpl Enumeration Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.EnumerationUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getEnumerationUsage() * @generated */ - EReference SPECIALIZATION__GENERAL = eINSTANCE.getSpecialization_General(); + EClass ENUMERATION_USAGE = eINSTANCE.getEnumerationUsage(); /** - * The meta object literal for the 'Specific' reference feature. + * The meta object literal for the 'Enumeration Definition' reference feature. * * * @generated */ - EReference SPECIALIZATION__SPECIFIC = eINSTANCE.getSpecialization_Specific(); + EReference ENUMERATION_USAGE__ENUMERATION_DEFINITION = eINSTANCE.getEnumerationUsage_EnumerationDefinition(); /** - * The meta object literal for the 'Owning Type' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.EventOccurrenceUsageImpl Event Occurrence Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.EventOccurrenceUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getEventOccurrenceUsage() * @generated */ - EReference SPECIALIZATION__OWNING_TYPE = eINSTANCE.getSpecialization_OwningType(); + EClass EVENT_OCCURRENCE_USAGE = eINSTANCE.getEventOccurrenceUsage(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.FeatureMembershipImpl Feature Membership}' class. + * The meta object literal for the 'Event Occurrence' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.FeatureMembershipImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getFeatureMembership() * @generated */ - EClass FEATURE_MEMBERSHIP = eINSTANCE.getFeatureMembership(); + EReference EVENT_OCCURRENCE_USAGE__EVENT_OCCURRENCE = eINSTANCE.getEventOccurrenceUsage_EventOccurrence(); /** - * The meta object literal for the 'Owned Member Feature' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ExhibitStateUsageImpl Exhibit State Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.ExhibitStateUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getExhibitStateUsage() * @generated */ - EReference FEATURE_MEMBERSHIP__OWNED_MEMBER_FEATURE = eINSTANCE.getFeatureMembership_OwnedMemberFeature(); + EClass EXHIBIT_STATE_USAGE = eINSTANCE.getExhibitStateUsage(); /** - * The meta object literal for the 'Owning Type' reference feature. + * The meta object literal for the 'Exhibited State' reference feature. * * * @generated */ - EReference FEATURE_MEMBERSHIP__OWNING_TYPE = eINSTANCE.getFeatureMembership_OwningType(); + EReference EXHIBIT_STATE_USAGE__EXHIBITED_STATE = eINSTANCE.getExhibitStateUsage_ExhibitedState(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ConjugationImpl Conjugation}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ExposeImpl Expose}' class. * * - * @see org.omg.sysml.lang.sysml.impl.ConjugationImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getConjugation() + * @see org.omg.sysml.lang.sysml.impl.ExposeImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getExpose() * @generated */ - EClass CONJUGATION = eINSTANCE.getConjugation(); + EClass EXPOSE = eINSTANCE.getExpose(); /** - * The meta object literal for the 'Original Type' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ExpressionImpl Expression}' class. * * + * @see org.omg.sysml.lang.sysml.impl.ExpressionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getExpression() * @generated */ - EReference CONJUGATION__ORIGINAL_TYPE = eINSTANCE.getConjugation_OriginalType(); + EClass EXPRESSION = eINSTANCE.getExpression(); /** - * The meta object literal for the 'Conjugated Type' reference feature. + * The meta object literal for the 'Function' reference feature. * * * @generated */ - EReference CONJUGATION__CONJUGATED_TYPE = eINSTANCE.getConjugation_ConjugatedType(); + EReference EXPRESSION__FUNCTION = eINSTANCE.getExpression_Function(); /** - * The meta object literal for the 'Owning Type' reference feature. + * The meta object literal for the 'Is Model Level Evaluable' attribute feature. * * * @generated */ - EReference CONJUGATION__OWNING_TYPE = eINSTANCE.getConjugation_OwningType(); + EAttribute EXPRESSION__IS_MODEL_LEVEL_EVALUABLE = eINSTANCE.getExpression_IsModelLevelEvaluable(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.MultiplicityImpl Multiplicity}' class. + * The meta object literal for the 'Result' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.MultiplicityImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getMultiplicity() * @generated */ - EClass MULTIPLICITY = eINSTANCE.getMultiplicity(); + EReference EXPRESSION__RESULT = eINSTANCE.getExpression_Result(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.IntersectingImpl Intersecting}' class. + * The meta object literal for the 'Check Condition' operation. * * - * @see org.omg.sysml.lang.sysml.impl.IntersectingImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getIntersecting() * @generated */ - EClass INTERSECTING = eINSTANCE.getIntersecting(); + EOperation EXPRESSION___CHECK_CONDITION__ELEMENT = eINSTANCE.getExpression__CheckCondition__Element(); /** - * The meta object literal for the 'Intersecting Type' reference feature. + * The meta object literal for the 'Evaluate' operation. * * * @generated */ - EReference INTERSECTING__INTERSECTING_TYPE = eINSTANCE.getIntersecting_IntersectingType(); + EOperation EXPRESSION___EVALUATE__ELEMENT = eINSTANCE.getExpression__Evaluate__Element(); /** - * The meta object literal for the 'Type Intersected' reference feature. + * The meta object literal for the 'Model Level Evaluable' operation. * * * @generated */ - EReference INTERSECTING__TYPE_INTERSECTED = eINSTANCE.getIntersecting_TypeIntersected(); + EOperation EXPRESSION___MODEL_LEVEL_EVALUABLE__ELIST = eINSTANCE.getExpression__ModelLevelEvaluable__EList(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.UnioningImpl Unioning}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.FeatureImpl Feature}' class. * * - * @see org.omg.sysml.lang.sysml.impl.UnioningImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getUnioning() + * @see org.omg.sysml.lang.sysml.impl.FeatureImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getFeature() * @generated */ - EClass UNIONING = eINSTANCE.getUnioning(); + EClass FEATURE = eINSTANCE.getFeature(); /** - * The meta object literal for the 'Unioning Type' reference feature. + * The meta object literal for the 'Chaining Feature' reference list feature. * * * @generated */ - EReference UNIONING__UNIONING_TYPE = eINSTANCE.getUnioning_UnioningType(); + EReference FEATURE__CHAINING_FEATURE = eINSTANCE.getFeature_ChainingFeature(); /** - * The meta object literal for the 'Type Unioned' reference feature. + * The meta object literal for the 'Cross Feature' reference feature. * * * @generated */ - EReference UNIONING__TYPE_UNIONED = eINSTANCE.getUnioning_TypeUnioned(); + EReference FEATURE__CROSS_FEATURE = eINSTANCE.getFeature_CrossFeature(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.DisjoiningImpl Disjoining}' class. + * The meta object literal for the 'Direction' attribute feature. * * - * @see org.omg.sysml.lang.sysml.impl.DisjoiningImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getDisjoining() * @generated */ - EClass DISJOINING = eINSTANCE.getDisjoining(); + EAttribute FEATURE__DIRECTION = eINSTANCE.getFeature_Direction(); /** - * The meta object literal for the 'Type Disjoined' reference feature. + * The meta object literal for the 'End Owning Type' reference feature. * * * @generated */ - EReference DISJOINING__TYPE_DISJOINED = eINSTANCE.getDisjoining_TypeDisjoined(); + EReference FEATURE__END_OWNING_TYPE = eINSTANCE.getFeature_EndOwningType(); /** - * The meta object literal for the 'Disjoining Type' reference feature. + * The meta object literal for the 'Feature Target' reference feature. * * * @generated */ - EReference DISJOINING__DISJOINING_TYPE = eINSTANCE.getDisjoining_DisjoiningType(); + EReference FEATURE__FEATURE_TARGET = eINSTANCE.getFeature_FeatureTarget(); /** - * The meta object literal for the 'Owning Type' reference feature. + * The meta object literal for the 'Featuring Type' reference list feature. * * * @generated */ - EReference DISJOINING__OWNING_TYPE = eINSTANCE.getDisjoining_OwningType(); + EReference FEATURE__FEATURING_TYPE = eINSTANCE.getFeature_FeaturingType(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.DifferencingImpl Differencing}' class. + * The meta object literal for the 'Is Composite' attribute feature. * * - * @see org.omg.sysml.lang.sysml.impl.DifferencingImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getDifferencing() * @generated */ - EClass DIFFERENCING = eINSTANCE.getDifferencing(); + EAttribute FEATURE__IS_COMPOSITE = eINSTANCE.getFeature_IsComposite(); /** - * The meta object literal for the 'Differencing Type' reference feature. + * The meta object literal for the 'Is Constant' attribute feature. * * * @generated */ - EReference DIFFERENCING__DIFFERENCING_TYPE = eINSTANCE.getDifferencing_DifferencingType(); + EAttribute FEATURE__IS_CONSTANT = eINSTANCE.getFeature_IsConstant(); /** - * The meta object literal for the 'Type Differenced' reference feature. + * The meta object literal for the 'Is Derived' attribute feature. * * * @generated */ - EReference DIFFERENCING__TYPE_DIFFERENCED = eINSTANCE.getDifferencing_TypeDifferenced(); + EAttribute FEATURE__IS_DERIVED = eINSTANCE.getFeature_IsDerived(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.RedefinitionImpl Redefinition}' class. + * The meta object literal for the 'Is End' attribute feature. * * - * @see org.omg.sysml.lang.sysml.impl.RedefinitionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getRedefinition() * @generated */ - EClass REDEFINITION = eINSTANCE.getRedefinition(); + EAttribute FEATURE__IS_END = eINSTANCE.getFeature_IsEnd(); /** - * The meta object literal for the 'Redefining Feature' reference feature. + * The meta object literal for the 'Is Ordered' attribute feature. * * * @generated */ - EReference REDEFINITION__REDEFINING_FEATURE = eINSTANCE.getRedefinition_RedefiningFeature(); - - /** - * The meta object literal for the 'Redefined Feature' reference feature. - * - * - * @generated - */ - EReference REDEFINITION__REDEFINED_FEATURE = eINSTANCE.getRedefinition_RedefinedFeature(); - - /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.SubsettingImpl Subsetting}' class. - * - * - * @see org.omg.sysml.lang.sysml.impl.SubsettingImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getSubsetting() - * @generated - */ - EClass SUBSETTING = eINSTANCE.getSubsetting(); + EAttribute FEATURE__IS_ORDERED = eINSTANCE.getFeature_IsOrdered(); /** - * The meta object literal for the 'Subsetted Feature' reference feature. + * The meta object literal for the 'Is Portion' attribute feature. * * * @generated */ - EReference SUBSETTING__SUBSETTED_FEATURE = eINSTANCE.getSubsetting_SubsettedFeature(); + EAttribute FEATURE__IS_PORTION = eINSTANCE.getFeature_IsPortion(); /** - * The meta object literal for the 'Subsetting Feature' reference feature. + * The meta object literal for the 'Is Unique' attribute feature. * * * @generated */ - EReference SUBSETTING__SUBSETTING_FEATURE = eINSTANCE.getSubsetting_SubsettingFeature(); + EAttribute FEATURE__IS_UNIQUE = eINSTANCE.getFeature_IsUnique(); /** - * The meta object literal for the 'Owning Feature' reference feature. + * The meta object literal for the 'Is Variable' attribute feature. * * * @generated */ - EReference SUBSETTING__OWNING_FEATURE = eINSTANCE.getSubsetting_OwningFeature(); + EAttribute FEATURE__IS_VARIABLE = eINSTANCE.getFeature_IsVariable(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.FeatureTypingImpl Feature Typing}' class. + * The meta object literal for the 'Owned Cross Subsetting' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.FeatureTypingImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getFeatureTyping() * @generated */ - EClass FEATURE_TYPING = eINSTANCE.getFeatureTyping(); + EReference FEATURE__OWNED_CROSS_SUBSETTING = eINSTANCE.getFeature_OwnedCrossSubsetting(); /** - * The meta object literal for the 'Typed Feature' reference feature. + * The meta object literal for the 'Owned Feature Chaining' reference list feature. * * * @generated */ - EReference FEATURE_TYPING__TYPED_FEATURE = eINSTANCE.getFeatureTyping_TypedFeature(); + EReference FEATURE__OWNED_FEATURE_CHAINING = eINSTANCE.getFeature_OwnedFeatureChaining(); /** - * The meta object literal for the 'Type' reference feature. + * The meta object literal for the 'Owned Feature Inverting' reference list feature. * * * @generated */ - EReference FEATURE_TYPING__TYPE = eINSTANCE.getFeatureTyping_Type(); + EReference FEATURE__OWNED_FEATURE_INVERTING = eINSTANCE.getFeature_OwnedFeatureInverting(); /** - * The meta object literal for the 'Owning Feature' reference feature. + * The meta object literal for the 'Owned Redefinition' reference list feature. * * * @generated */ - EReference FEATURE_TYPING__OWNING_FEATURE = eINSTANCE.getFeatureTyping_OwningFeature(); + EReference FEATURE__OWNED_REDEFINITION = eINSTANCE.getFeature_OwnedRedefinition(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.TypeFeaturingImpl Type Featuring}' class. + * The meta object literal for the 'Owned Reference Subsetting' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.TypeFeaturingImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getTypeFeaturing() * @generated */ - EClass TYPE_FEATURING = eINSTANCE.getTypeFeaturing(); + EReference FEATURE__OWNED_REFERENCE_SUBSETTING = eINSTANCE.getFeature_OwnedReferenceSubsetting(); /** - * The meta object literal for the 'Feature Of Type' reference feature. + * The meta object literal for the 'Owned Subsetting' reference list feature. * * * @generated */ - EReference TYPE_FEATURING__FEATURE_OF_TYPE = eINSTANCE.getTypeFeaturing_FeatureOfType(); + EReference FEATURE__OWNED_SUBSETTING = eINSTANCE.getFeature_OwnedSubsetting(); /** - * The meta object literal for the 'Featuring Type' reference feature. + * The meta object literal for the 'Owned Type Featuring' reference list feature. * * * @generated */ - EReference TYPE_FEATURING__FEATURING_TYPE = eINSTANCE.getTypeFeaturing_FeaturingType(); + EReference FEATURE__OWNED_TYPE_FEATURING = eINSTANCE.getFeature_OwnedTypeFeaturing(); /** - * The meta object literal for the 'Owning Feature Of Type' reference feature. + * The meta object literal for the 'Owned Typing' reference list feature. * * * @generated */ - EReference TYPE_FEATURING__OWNING_FEATURE_OF_TYPE = eINSTANCE.getTypeFeaturing_OwningFeatureOfType(); + EReference FEATURE__OWNED_TYPING = eINSTANCE.getFeature_OwnedTyping(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.FeatureInvertingImpl Feature Inverting}' class. + * The meta object literal for the 'Owning Feature Membership' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.FeatureInvertingImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getFeatureInverting() * @generated */ - EClass FEATURE_INVERTING = eINSTANCE.getFeatureInverting(); + EReference FEATURE__OWNING_FEATURE_MEMBERSHIP = eINSTANCE.getFeature_OwningFeatureMembership(); /** - * The meta object literal for the 'Feature Inverted' reference feature. + * The meta object literal for the 'Owning Type' reference feature. * * * @generated */ - EReference FEATURE_INVERTING__FEATURE_INVERTED = eINSTANCE.getFeatureInverting_FeatureInverted(); + EReference FEATURE__OWNING_TYPE = eINSTANCE.getFeature_OwningType(); /** - * The meta object literal for the 'Inverting Feature' reference feature. + * The meta object literal for the 'Type' reference list feature. * * * @generated */ - EReference FEATURE_INVERTING__INVERTING_FEATURE = eINSTANCE.getFeatureInverting_InvertingFeature(); + EReference FEATURE__TYPE = eINSTANCE.getFeature_Type(); /** - * The meta object literal for the 'Owning Feature' reference feature. + * The meta object literal for the 'All Redefined Features' operation. * * * @generated */ - EReference FEATURE_INVERTING__OWNING_FEATURE = eINSTANCE.getFeatureInverting_OwningFeature(); + EOperation FEATURE___ALL_REDEFINED_FEATURES = eINSTANCE.getFeature__AllRedefinedFeatures(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.FeatureChainingImpl Feature Chaining}' class. + * The meta object literal for the 'As Cartesian Product' operation. * * - * @see org.omg.sysml.lang.sysml.impl.FeatureChainingImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getFeatureChaining() * @generated */ - EClass FEATURE_CHAINING = eINSTANCE.getFeatureChaining(); + EOperation FEATURE___AS_CARTESIAN_PRODUCT = eINSTANCE.getFeature__AsCartesianProduct(); /** - * The meta object literal for the 'Chaining Feature' reference feature. + * The meta object literal for the 'Can Access' operation. * * * @generated */ - EReference FEATURE_CHAINING__CHAINING_FEATURE = eINSTANCE.getFeatureChaining_ChainingFeature(); + EOperation FEATURE___CAN_ACCESS__FEATURE = eINSTANCE.getFeature__CanAccess__Feature(); /** - * The meta object literal for the 'Feature Chained' reference feature. + * The meta object literal for the 'Direction For' operation. * * * @generated */ - EReference FEATURE_CHAINING__FEATURE_CHAINED = eINSTANCE.getFeatureChaining_FeatureChained(); + EOperation FEATURE___DIRECTION_FOR__TYPE = eINSTANCE.getFeature__DirectionFor__Type(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ReferenceSubsettingImpl Reference Subsetting}' class. + * The meta object literal for the 'Is Cartesian Product' operation. * * - * @see org.omg.sysml.lang.sysml.impl.ReferenceSubsettingImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getReferenceSubsetting() * @generated */ - EClass REFERENCE_SUBSETTING = eINSTANCE.getReferenceSubsetting(); + EOperation FEATURE___IS_CARTESIAN_PRODUCT = eINSTANCE.getFeature__IsCartesianProduct(); /** - * The meta object literal for the 'Referenced Feature' reference feature. + * The meta object literal for the 'Is Featured Within' operation. * * * @generated */ - EReference REFERENCE_SUBSETTING__REFERENCED_FEATURE = eINSTANCE.getReferenceSubsetting_ReferencedFeature(); + EOperation FEATURE___IS_FEATURED_WITHIN__TYPE = eINSTANCE.getFeature__IsFeaturedWithin__Type(); /** - * The meta object literal for the 'Referencing Feature' reference feature. + * The meta object literal for the 'Is Featuring Type' operation. * * * @generated */ - EReference REFERENCE_SUBSETTING__REFERENCING_FEATURE = eINSTANCE.getReferenceSubsetting_ReferencingFeature(); + EOperation FEATURE___IS_FEATURING_TYPE__TYPE = eINSTANCE.getFeature__IsFeaturingType__Type(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.CrossSubsettingImpl Cross Subsetting}' class. + * The meta object literal for the 'Is Owned Cross Feature' operation. * * - * @see org.omg.sysml.lang.sysml.impl.CrossSubsettingImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getCrossSubsetting() * @generated */ - EClass CROSS_SUBSETTING = eINSTANCE.getCrossSubsetting(); + EOperation FEATURE___IS_OWNED_CROSS_FEATURE = eINSTANCE.getFeature__IsOwnedCrossFeature(); /** - * The meta object literal for the 'Crossed Feature' reference feature. + * The meta object literal for the 'Naming Feature' operation. * * * @generated */ - EReference CROSS_SUBSETTING__CROSSED_FEATURE = eINSTANCE.getCrossSubsetting_CrossedFeature(); + EOperation FEATURE___NAMING_FEATURE = eINSTANCE.getFeature__NamingFeature(); /** - * The meta object literal for the 'Crossing Feature' reference feature. + * The meta object literal for the 'Owned Cross Feature' operation. * * * @generated */ - EReference CROSS_SUBSETTING__CROSSING_FEATURE = eINSTANCE.getCrossSubsetting_CrossingFeature(); + EOperation FEATURE___OWNED_CROSS_FEATURE = eINSTANCE.getFeature__OwnedCrossFeature(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.BehaviorImpl Behavior}' class. + * The meta object literal for the 'Redefines' operation. * * - * @see org.omg.sysml.lang.sysml.impl.BehaviorImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getBehavior() * @generated */ - EClass BEHAVIOR = eINSTANCE.getBehavior(); + EOperation FEATURE___REDEFINES__FEATURE = eINSTANCE.getFeature__Redefines__Feature(); /** - * The meta object literal for the 'Step' reference list feature. + * The meta object literal for the 'Redefines From Library' operation. * * * @generated */ - EReference BEHAVIOR__STEP = eINSTANCE.getBehavior_Step(); + EOperation FEATURE___REDEFINES_FROM_LIBRARY__STRING = eINSTANCE.getFeature__RedefinesFromLibrary__String(); /** - * The meta object literal for the 'Parameter' reference list feature. + * The meta object literal for the 'Subsets Chain' operation. * * * @generated */ - EReference BEHAVIOR__PARAMETER = eINSTANCE.getBehavior_Parameter(); + EOperation FEATURE___SUBSETS_CHAIN__FEATURE_FEATURE = eINSTANCE.getFeature__SubsetsChain__Feature_Feature(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ClassImpl Class}' class. + * The meta object literal for the 'Typing Features' operation. * * - * @see org.omg.sysml.lang.sysml.impl.ClassImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getClass_() * @generated */ - EClass CLASS = eINSTANCE.getClass_(); + EOperation FEATURE___TYPING_FEATURES = eINSTANCE.getFeature__TypingFeatures(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ClassifierImpl Classifier}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.FeatureChainExpressionImpl Feature Chain Expression}' class. * * - * @see org.omg.sysml.lang.sysml.impl.ClassifierImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getClassifier() + * @see org.omg.sysml.lang.sysml.impl.FeatureChainExpressionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getFeatureChainExpression() * @generated */ - EClass CLASSIFIER = eINSTANCE.getClassifier(); + EClass FEATURE_CHAIN_EXPRESSION = eINSTANCE.getFeatureChainExpression(); /** - * The meta object literal for the 'Owned Subclassification' reference list feature. + * The meta object literal for the 'Target Feature' reference feature. * * * @generated */ - EReference CLASSIFIER__OWNED_SUBCLASSIFICATION = eINSTANCE.getClassifier_OwnedSubclassification(); + EReference FEATURE_CHAIN_EXPRESSION__TARGET_FEATURE = eINSTANCE.getFeatureChainExpression_TargetFeature(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.SubclassificationImpl Subclassification}' class. + * The meta object literal for the 'Source Target Feature' operation. * * - * @see org.omg.sysml.lang.sysml.impl.SubclassificationImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getSubclassification() * @generated */ - EClass SUBCLASSIFICATION = eINSTANCE.getSubclassification(); + EOperation FEATURE_CHAIN_EXPRESSION___SOURCE_TARGET_FEATURE = eINSTANCE.getFeatureChainExpression__SourceTargetFeature(); /** - * The meta object literal for the 'Superclassifier' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.FeatureChainingImpl Feature Chaining}' class. * * + * @see org.omg.sysml.lang.sysml.impl.FeatureChainingImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getFeatureChaining() * @generated */ - EReference SUBCLASSIFICATION__SUPERCLASSIFIER = eINSTANCE.getSubclassification_Superclassifier(); + EClass FEATURE_CHAINING = eINSTANCE.getFeatureChaining(); /** - * The meta object literal for the 'Subclassifier' reference feature. + * The meta object literal for the 'Chaining Feature' reference feature. * * * @generated */ - EReference SUBCLASSIFICATION__SUBCLASSIFIER = eINSTANCE.getSubclassification_Subclassifier(); + EReference FEATURE_CHAINING__CHAINING_FEATURE = eINSTANCE.getFeatureChaining_ChainingFeature(); /** - * The meta object literal for the 'Owning Classifier' reference feature. + * The meta object literal for the 'Feature Chained' reference feature. * * * @generated */ - EReference SUBCLASSIFICATION__OWNING_CLASSIFIER = eINSTANCE.getSubclassification_OwningClassifier(); + EReference FEATURE_CHAINING__FEATURE_CHAINED = eINSTANCE.getFeatureChaining_FeatureChained(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.FunctionImpl Function}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.FeatureInvertingImpl Feature Inverting}' class. * * - * @see org.omg.sysml.lang.sysml.impl.FunctionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getFunction() + * @see org.omg.sysml.lang.sysml.impl.FeatureInvertingImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getFeatureInverting() * @generated */ - EClass FUNCTION = eINSTANCE.getFunction(); + EClass FEATURE_INVERTING = eINSTANCE.getFeatureInverting(); /** - * The meta object literal for the 'Expression' reference list feature. + * The meta object literal for the 'Feature Inverted' reference feature. * * * @generated */ - EReference FUNCTION__EXPRESSION = eINSTANCE.getFunction_Expression(); + EReference FEATURE_INVERTING__FEATURE_INVERTED = eINSTANCE.getFeatureInverting_FeatureInverted(); /** - * The meta object literal for the 'Result' reference feature. + * The meta object literal for the 'Inverting Feature' reference feature. * * * @generated */ - EReference FUNCTION__RESULT = eINSTANCE.getFunction_Result(); + EReference FEATURE_INVERTING__INVERTING_FEATURE = eINSTANCE.getFeatureInverting_InvertingFeature(); /** - * The meta object literal for the 'Is Model Level Evaluable' attribute feature. + * The meta object literal for the 'Owning Feature' reference feature. * * * @generated */ - EAttribute FUNCTION__IS_MODEL_LEVEL_EVALUABLE = eINSTANCE.getFunction_IsModelLevelEvaluable(); + EReference FEATURE_INVERTING__OWNING_FEATURE = eINSTANCE.getFeatureInverting_OwningFeature(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ConstructorExpressionImpl Constructor Expression}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.FeatureMembershipImpl Feature Membership}' class. * * - * @see org.omg.sysml.lang.sysml.impl.ConstructorExpressionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getConstructorExpression() + * @see org.omg.sysml.lang.sysml.impl.FeatureMembershipImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getFeatureMembership() * @generated */ - EClass CONSTRUCTOR_EXPRESSION = eINSTANCE.getConstructorExpression(); + EClass FEATURE_MEMBERSHIP = eINSTANCE.getFeatureMembership(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.NullExpressionImpl Null Expression}' class. + * The meta object literal for the 'Owned Member Feature' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.NullExpressionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getNullExpression() * @generated */ - EClass NULL_EXPRESSION = eINSTANCE.getNullExpression(); + EReference FEATURE_MEMBERSHIP__OWNED_MEMBER_FEATURE = eINSTANCE.getFeatureMembership_OwnedMemberFeature(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.IndexExpressionImpl Index Expression}' class. + * The meta object literal for the 'Owning Type' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.IndexExpressionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getIndexExpression() * @generated */ - EClass INDEX_EXPRESSION = eINSTANCE.getIndexExpression(); + EReference FEATURE_MEMBERSHIP__OWNING_TYPE = eINSTANCE.getFeatureMembership_OwningType(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.CollectExpressionImpl Collect Expression}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.FeatureReferenceExpressionImpl Feature Reference Expression}' class. * * - * @see org.omg.sysml.lang.sysml.impl.CollectExpressionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getCollectExpression() + * @see org.omg.sysml.lang.sysml.impl.FeatureReferenceExpressionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getFeatureReferenceExpression() * @generated */ - EClass COLLECT_EXPRESSION = eINSTANCE.getCollectExpression(); + EClass FEATURE_REFERENCE_EXPRESSION = eINSTANCE.getFeatureReferenceExpression(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.LiteralBooleanImpl Literal Boolean}' class. + * The meta object literal for the 'Referent' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.LiteralBooleanImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getLiteralBoolean() * @generated */ - EClass LITERAL_BOOLEAN = eINSTANCE.getLiteralBoolean(); + EReference FEATURE_REFERENCE_EXPRESSION__REFERENT = eINSTANCE.getFeatureReferenceExpression_Referent(); /** - * The meta object literal for the 'Value' attribute feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.FeatureTypingImpl Feature Typing}' class. * * + * @see org.omg.sysml.lang.sysml.impl.FeatureTypingImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getFeatureTyping() * @generated */ - EAttribute LITERAL_BOOLEAN__VALUE = eINSTANCE.getLiteralBoolean_Value(); + EClass FEATURE_TYPING = eINSTANCE.getFeatureTyping(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.LiteralExpressionImpl Literal Expression}' class. + * The meta object literal for the 'Owning Feature' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.LiteralExpressionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getLiteralExpression() * @generated */ - EClass LITERAL_EXPRESSION = eINSTANCE.getLiteralExpression(); + EReference FEATURE_TYPING__OWNING_FEATURE = eINSTANCE.getFeatureTyping_OwningFeature(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.FeatureReferenceExpressionImpl Feature Reference Expression}' class. + * The meta object literal for the 'Type' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.FeatureReferenceExpressionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getFeatureReferenceExpression() * @generated */ - EClass FEATURE_REFERENCE_EXPRESSION = eINSTANCE.getFeatureReferenceExpression(); + EReference FEATURE_TYPING__TYPE = eINSTANCE.getFeatureTyping_Type(); /** - * The meta object literal for the 'Referent' reference feature. + * The meta object literal for the 'Typed Feature' reference feature. * * * @generated */ - EReference FEATURE_REFERENCE_EXPRESSION__REFERENT = eINSTANCE.getFeatureReferenceExpression_Referent(); + EReference FEATURE_TYPING__TYPED_FEATURE = eINSTANCE.getFeatureTyping_TypedFeature(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.MetadataAccessExpressionImpl Metadata Access Expression}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.FeatureValueImpl Feature Value}' class. * * - * @see org.omg.sysml.lang.sysml.impl.MetadataAccessExpressionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getMetadataAccessExpression() + * @see org.omg.sysml.lang.sysml.impl.FeatureValueImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getFeatureValue() * @generated */ - EClass METADATA_ACCESS_EXPRESSION = eINSTANCE.getMetadataAccessExpression(); + EClass FEATURE_VALUE = eINSTANCE.getFeatureValue(); /** - * The meta object literal for the 'Referenced Element' reference feature. + * The meta object literal for the 'Feature With Value' reference feature. * * * @generated */ - EReference METADATA_ACCESS_EXPRESSION__REFERENCED_ELEMENT = eINSTANCE.getMetadataAccessExpression_ReferencedElement(); + EReference FEATURE_VALUE__FEATURE_WITH_VALUE = eINSTANCE.getFeatureValue_FeatureWithValue(); /** - * The meta object literal for the 'Metaclass Feature' operation. + * The meta object literal for the 'Is Default' attribute feature. * * * @generated */ - EOperation METADATA_ACCESS_EXPRESSION___METACLASS_FEATURE = eINSTANCE.getMetadataAccessExpression__MetaclassFeature(); + EAttribute FEATURE_VALUE__IS_DEFAULT = eINSTANCE.getFeatureValue_IsDefault(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.MetadataFeatureImpl Metadata Feature}' class. + * The meta object literal for the 'Is Initial' attribute feature. * * - * @see org.omg.sysml.lang.sysml.impl.MetadataFeatureImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getMetadataFeature() * @generated */ - EClass METADATA_FEATURE = eINSTANCE.getMetadataFeature(); + EAttribute FEATURE_VALUE__IS_INITIAL = eINSTANCE.getFeatureValue_IsInitial(); /** - * The meta object literal for the 'Metaclass' reference feature. + * The meta object literal for the 'Value' reference feature. * * * @generated */ - EReference METADATA_FEATURE__METACLASS = eINSTANCE.getMetadataFeature_Metaclass(); + EReference FEATURE_VALUE__VALUE = eINSTANCE.getFeatureValue_Value(); /** - * The meta object literal for the 'Evaluate Feature' operation. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.FlowImpl Flow}' class. * * + * @see org.omg.sysml.lang.sysml.impl.FlowImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getFlow() * @generated */ - EOperation METADATA_FEATURE___EVALUATE_FEATURE__FEATURE = eINSTANCE.getMetadataFeature__EvaluateFeature__Feature(); + EClass FLOW = eINSTANCE.getFlow(); /** - * The meta object literal for the 'Is Semantic' operation. + * The meta object literal for the 'Flow End' reference list feature. * * * @generated */ - EOperation METADATA_FEATURE___IS_SEMANTIC = eINSTANCE.getMetadataFeature__IsSemantic(); + EReference FLOW__FLOW_END = eINSTANCE.getFlow_FlowEnd(); /** - * The meta object literal for the 'Is Syntactic' operation. + * The meta object literal for the 'Interaction' reference list feature. * * * @generated */ - EOperation METADATA_FEATURE___IS_SYNTACTIC = eINSTANCE.getMetadataFeature__IsSyntactic(); + EReference FLOW__INTERACTION = eINSTANCE.getFlow_Interaction(); /** - * The meta object literal for the 'Syntax Element' operation. + * The meta object literal for the 'Payload Feature' reference feature. * * * @generated */ - EOperation METADATA_FEATURE___SYNTAX_ELEMENT = eINSTANCE.getMetadataFeature__SyntaxElement(); + EReference FLOW__PAYLOAD_FEATURE = eINSTANCE.getFlow_PayloadFeature(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.MetaclassImpl Metaclass}' class. + * The meta object literal for the 'Payload Type' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.MetaclassImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getMetaclass() * @generated */ - EClass METACLASS = eINSTANCE.getMetaclass(); + EReference FLOW__PAYLOAD_TYPE = eINSTANCE.getFlow_PayloadType(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.StructureImpl Structure}' class. + * The meta object literal for the 'Source Output Feature' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.StructureImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getStructure() * @generated */ - EClass STRUCTURE = eINSTANCE.getStructure(); + EReference FLOW__SOURCE_OUTPUT_FEATURE = eINSTANCE.getFlow_SourceOutputFeature(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.LiteralRationalImpl Literal Rational}' class. + * The meta object literal for the 'Target Input Feature' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.LiteralRationalImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getLiteralRational() * @generated */ - EClass LITERAL_RATIONAL = eINSTANCE.getLiteralRational(); + EReference FLOW__TARGET_INPUT_FEATURE = eINSTANCE.getFlow_TargetInputFeature(); /** - * The meta object literal for the 'Value' attribute feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.FlowDefinitionImpl Flow Definition}' class. * * + * @see org.omg.sysml.lang.sysml.impl.FlowDefinitionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getFlowDefinition() * @generated */ - EAttribute LITERAL_RATIONAL__VALUE = eINSTANCE.getLiteralRational_Value(); + EClass FLOW_DEFINITION = eINSTANCE.getFlowDefinition(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.LiteralIntegerImpl Literal Integer}' class. + * The meta object literal for the 'Flow End' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.LiteralIntegerImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getLiteralInteger() * @generated */ - EClass LITERAL_INTEGER = eINSTANCE.getLiteralInteger(); + EReference FLOW_DEFINITION__FLOW_END = eINSTANCE.getFlowDefinition_FlowEnd(); /** - * The meta object literal for the 'Value' attribute feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.FlowEndImpl Flow End}' class. * * + * @see org.omg.sysml.lang.sysml.impl.FlowEndImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getFlowEnd() * @generated */ - EAttribute LITERAL_INTEGER__VALUE = eINSTANCE.getLiteralInteger_Value(); + EClass FLOW_END = eINSTANCE.getFlowEnd(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.LiteralStringImpl Literal String}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.FlowUsageImpl Flow Usage}' class. * * - * @see org.omg.sysml.lang.sysml.impl.LiteralStringImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getLiteralString() + * @see org.omg.sysml.lang.sysml.impl.FlowUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getFlowUsage() * @generated */ - EClass LITERAL_STRING = eINSTANCE.getLiteralString(); + EClass FLOW_USAGE = eINSTANCE.getFlowUsage(); /** - * The meta object literal for the 'Value' attribute feature. + * The meta object literal for the 'Flow Definition' reference list feature. * * * @generated */ - EAttribute LITERAL_STRING__VALUE = eINSTANCE.getLiteralString_Value(); + EReference FLOW_USAGE__FLOW_DEFINITION = eINSTANCE.getFlowUsage_FlowDefinition(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.FeatureChainExpressionImpl Feature Chain Expression}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ForLoopActionUsageImpl For Loop Action Usage}' class. * * - * @see org.omg.sysml.lang.sysml.impl.FeatureChainExpressionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getFeatureChainExpression() + * @see org.omg.sysml.lang.sysml.impl.ForLoopActionUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getForLoopActionUsage() * @generated */ - EClass FEATURE_CHAIN_EXPRESSION = eINSTANCE.getFeatureChainExpression(); + EClass FOR_LOOP_ACTION_USAGE = eINSTANCE.getForLoopActionUsage(); /** - * The meta object literal for the 'Target Feature' reference feature. + * The meta object literal for the 'Loop Variable' reference feature. * * * @generated */ - EReference FEATURE_CHAIN_EXPRESSION__TARGET_FEATURE = eINSTANCE.getFeatureChainExpression_TargetFeature(); + EReference FOR_LOOP_ACTION_USAGE__LOOP_VARIABLE = eINSTANCE.getForLoopActionUsage_LoopVariable(); /** - * The meta object literal for the 'Source Target Feature' operation. + * The meta object literal for the 'Seq Argument' reference feature. * * * @generated */ - EOperation FEATURE_CHAIN_EXPRESSION___SOURCE_TARGET_FEATURE = eINSTANCE.getFeatureChainExpression__SourceTargetFeature(); + EReference FOR_LOOP_ACTION_USAGE__SEQ_ARGUMENT = eINSTANCE.getForLoopActionUsage_SeqArgument(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.LiteralInfinityImpl Literal Infinity}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ForkNodeImpl Fork Node}' class. * * - * @see org.omg.sysml.lang.sysml.impl.LiteralInfinityImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getLiteralInfinity() + * @see org.omg.sysml.lang.sysml.impl.ForkNodeImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getForkNode() * @generated */ - EClass LITERAL_INFINITY = eINSTANCE.getLiteralInfinity(); + EClass FORK_NODE = eINSTANCE.getForkNode(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.BooleanExpressionImpl Boolean Expression}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.FramedConcernMembershipImpl Framed Concern Membership}' class. * * - * @see org.omg.sysml.lang.sysml.impl.BooleanExpressionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getBooleanExpression() + * @see org.omg.sysml.lang.sysml.impl.FramedConcernMembershipImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getFramedConcernMembership() * @generated */ - EClass BOOLEAN_EXPRESSION = eINSTANCE.getBooleanExpression(); + EClass FRAMED_CONCERN_MEMBERSHIP = eINSTANCE.getFramedConcernMembership(); /** - * The meta object literal for the 'Predicate' reference feature. + * The meta object literal for the 'Owned Concern' reference feature. * * * @generated */ - EReference BOOLEAN_EXPRESSION__PREDICATE = eINSTANCE.getBooleanExpression_Predicate(); + EReference FRAMED_CONCERN_MEMBERSHIP__OWNED_CONCERN = eINSTANCE.getFramedConcernMembership_OwnedConcern(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.PredicateImpl Predicate}' class. + * The meta object literal for the 'Referenced Concern' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.PredicateImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getPredicate() * @generated */ - EClass PREDICATE = eINSTANCE.getPredicate(); + EReference FRAMED_CONCERN_MEMBERSHIP__REFERENCED_CONCERN = eINSTANCE.getFramedConcernMembership_ReferencedConcern(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ReturnParameterMembershipImpl Return Parameter Membership}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.FunctionImpl Function}' class. * * - * @see org.omg.sysml.lang.sysml.impl.ReturnParameterMembershipImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getReturnParameterMembership() + * @see org.omg.sysml.lang.sysml.impl.FunctionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getFunction() * @generated */ - EClass RETURN_PARAMETER_MEMBERSHIP = eINSTANCE.getReturnParameterMembership(); + EClass FUNCTION = eINSTANCE.getFunction(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ParameterMembershipImpl Parameter Membership}' class. + * The meta object literal for the 'Expression' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.ParameterMembershipImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getParameterMembership() * @generated */ - EClass PARAMETER_MEMBERSHIP = eINSTANCE.getParameterMembership(); + EReference FUNCTION__EXPRESSION = eINSTANCE.getFunction_Expression(); /** - * The meta object literal for the 'Owned Member Parameter' reference feature. + * The meta object literal for the 'Is Model Level Evaluable' attribute feature. * * * @generated */ - EReference PARAMETER_MEMBERSHIP__OWNED_MEMBER_PARAMETER = eINSTANCE.getParameterMembership_OwnedMemberParameter(); + EAttribute FUNCTION__IS_MODEL_LEVEL_EVALUABLE = eINSTANCE.getFunction_IsModelLevelEvaluable(); /** - * The meta object literal for the 'Parameter Direction' operation. + * The meta object literal for the 'Result' reference feature. * * * @generated */ - EOperation PARAMETER_MEMBERSHIP___PARAMETER_DIRECTION = eINSTANCE.getParameterMembership__ParameterDirection(); + EReference FUNCTION__RESULT = eINSTANCE.getFunction_Result(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.InvariantImpl Invariant}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.IfActionUsageImpl If Action Usage}' class. * * - * @see org.omg.sysml.lang.sysml.impl.InvariantImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getInvariant() + * @see org.omg.sysml.lang.sysml.impl.IfActionUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getIfActionUsage() * @generated */ - EClass INVARIANT = eINSTANCE.getInvariant(); + EClass IF_ACTION_USAGE = eINSTANCE.getIfActionUsage(); /** - * The meta object literal for the 'Is Negated' attribute feature. + * The meta object literal for the 'Else Action' reference feature. * * * @generated */ - EAttribute INVARIANT__IS_NEGATED = eINSTANCE.getInvariant_IsNegated(); + EReference IF_ACTION_USAGE__ELSE_ACTION = eINSTANCE.getIfActionUsage_ElseAction(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ResultExpressionMembershipImpl Result Expression Membership}' class. + * The meta object literal for the 'If Argument' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.ResultExpressionMembershipImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getResultExpressionMembership() * @generated */ - EClass RESULT_EXPRESSION_MEMBERSHIP = eINSTANCE.getResultExpressionMembership(); + EReference IF_ACTION_USAGE__IF_ARGUMENT = eINSTANCE.getIfActionUsage_IfArgument(); /** - * The meta object literal for the 'Owned Result Expression' reference feature. + * The meta object literal for the 'Then Action' reference feature. * * * @generated */ - EReference RESULT_EXPRESSION_MEMBERSHIP__OWNED_RESULT_EXPRESSION = eINSTANCE.getResultExpressionMembership_OwnedResultExpression(); + EReference IF_ACTION_USAGE__THEN_ACTION = eINSTANCE.getIfActionUsage_ThenAction(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.MultiplicityRangeImpl Multiplicity Range}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ImportImpl Import}' class. * * - * @see org.omg.sysml.lang.sysml.impl.MultiplicityRangeImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getMultiplicityRange() + * @see org.omg.sysml.lang.sysml.impl.ImportImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getImport() * @generated */ - EClass MULTIPLICITY_RANGE = eINSTANCE.getMultiplicityRange(); + EClass IMPORT = eINSTANCE.getImport(); /** - * The meta object literal for the 'Lower Bound' reference feature. + * The meta object literal for the 'Import Owning Namespace' reference feature. * * * @generated */ - EReference MULTIPLICITY_RANGE__LOWER_BOUND = eINSTANCE.getMultiplicityRange_LowerBound(); + EReference IMPORT__IMPORT_OWNING_NAMESPACE = eINSTANCE.getImport_ImportOwningNamespace(); /** - * The meta object literal for the 'Upper Bound' reference feature. + * The meta object literal for the 'Imported Element' reference feature. * * * @generated */ - EReference MULTIPLICITY_RANGE__UPPER_BOUND = eINSTANCE.getMultiplicityRange_UpperBound(); + EReference IMPORT__IMPORTED_ELEMENT = eINSTANCE.getImport_ImportedElement(); /** - * The meta object literal for the 'Bound' reference list feature. + * The meta object literal for the 'Is Import All' attribute feature. * * * @generated */ - EReference MULTIPLICITY_RANGE__BOUND = eINSTANCE.getMultiplicityRange_Bound(); + EAttribute IMPORT__IS_IMPORT_ALL = eINSTANCE.getImport_IsImportAll(); /** - * The meta object literal for the 'Has Bounds' operation. + * The meta object literal for the 'Is Recursive' attribute feature. * * * @generated */ - EOperation MULTIPLICITY_RANGE___HAS_BOUNDS__INT_INT = eINSTANCE.getMultiplicityRange__HasBounds__int_int(); + EAttribute IMPORT__IS_RECURSIVE = eINSTANCE.getImport_IsRecursive(); /** - * The meta object literal for the 'Value Of' operation. + * The meta object literal for the 'Visibility' attribute feature. * * * @generated */ - EOperation MULTIPLICITY_RANGE___VALUE_OF__EXPRESSION = eINSTANCE.getMultiplicityRange__ValueOf__Expression(); + EAttribute IMPORT__VISIBILITY = eINSTANCE.getImport_Visibility(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.FeatureValueImpl Feature Value}' class. + * The meta object literal for the 'Imported Memberships' operation. * * - * @see org.omg.sysml.lang.sysml.impl.FeatureValueImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getFeatureValue() * @generated */ - EClass FEATURE_VALUE = eINSTANCE.getFeatureValue(); + EOperation IMPORT___IMPORTED_MEMBERSHIPS__ELIST = eINSTANCE.getImport__ImportedMemberships__EList(); /** - * The meta object literal for the 'Feature With Value' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.IncludeUseCaseUsageImpl Include Use Case Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.IncludeUseCaseUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getIncludeUseCaseUsage() * @generated */ - EReference FEATURE_VALUE__FEATURE_WITH_VALUE = eINSTANCE.getFeatureValue_FeatureWithValue(); + EClass INCLUDE_USE_CASE_USAGE = eINSTANCE.getIncludeUseCaseUsage(); /** - * The meta object literal for the 'Value' reference feature. + * The meta object literal for the 'Use Case Included' reference feature. * * * @generated */ - EReference FEATURE_VALUE__VALUE = eINSTANCE.getFeatureValue_Value(); + EReference INCLUDE_USE_CASE_USAGE__USE_CASE_INCLUDED = eINSTANCE.getIncludeUseCaseUsage_UseCaseIncluded(); /** - * The meta object literal for the 'Is Initial' attribute feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.IndexExpressionImpl Index Expression}' class. * * + * @see org.omg.sysml.lang.sysml.impl.IndexExpressionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getIndexExpression() * @generated */ - EAttribute FEATURE_VALUE__IS_INITIAL = eINSTANCE.getFeatureValue_IsInitial(); + EClass INDEX_EXPRESSION = eINSTANCE.getIndexExpression(); /** - * The meta object literal for the 'Is Default' attribute feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.InstantiationExpressionImpl Instantiation Expression}' class. * * + * @see org.omg.sysml.lang.sysml.impl.InstantiationExpressionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getInstantiationExpression() * @generated */ - EAttribute FEATURE_VALUE__IS_DEFAULT = eINSTANCE.getFeatureValue_IsDefault(); + EClass INSTANTIATION_EXPRESSION = eINSTANCE.getInstantiationExpression(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.DataTypeImpl Data Type}' class. + * The meta object literal for the 'Argument' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.DataTypeImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getDataType() * @generated */ - EClass DATA_TYPE = eINSTANCE.getDataType(); + EReference INSTANTIATION_EXPRESSION__ARGUMENT = eINSTANCE.getInstantiationExpression_Argument(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.BindingConnectorImpl Binding Connector}' class. + * The meta object literal for the 'Instantiated Type' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.BindingConnectorImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getBindingConnector() * @generated */ - EClass BINDING_CONNECTOR = eINSTANCE.getBindingConnector(); + EReference INSTANTIATION_EXPRESSION__INSTANTIATED_TYPE = eINSTANCE.getInstantiationExpression_InstantiatedType(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ConnectorImpl Connector}' class. + * The meta object literal for the 'Instantiated Type' operation. * * - * @see org.omg.sysml.lang.sysml.impl.ConnectorImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getConnector() * @generated */ - EClass CONNECTOR = eINSTANCE.getConnector(); + EOperation INSTANTIATION_EXPRESSION___INSTANTIATED_TYPE = eINSTANCE.getInstantiationExpression__InstantiatedType(); /** - * The meta object literal for the 'Related Feature' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.InteractionImpl Interaction}' class. * * + * @see org.omg.sysml.lang.sysml.impl.InteractionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getInteraction() * @generated */ - EReference CONNECTOR__RELATED_FEATURE = eINSTANCE.getConnector_RelatedFeature(); + EClass INTERACTION = eINSTANCE.getInteraction(); /** - * The meta object literal for the 'Association' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.InterfaceDefinitionImpl Interface Definition}' class. * * + * @see org.omg.sysml.lang.sysml.impl.InterfaceDefinitionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getInterfaceDefinition() * @generated */ - EReference CONNECTOR__ASSOCIATION = eINSTANCE.getConnector_Association(); + EClass INTERFACE_DEFINITION = eINSTANCE.getInterfaceDefinition(); /** - * The meta object literal for the 'Connector End' reference list feature. + * The meta object literal for the 'Interface End' reference list feature. * * * @generated */ - EReference CONNECTOR__CONNECTOR_END = eINSTANCE.getConnector_ConnectorEnd(); + EReference INTERFACE_DEFINITION__INTERFACE_END = eINSTANCE.getInterfaceDefinition_InterfaceEnd(); /** - * The meta object literal for the 'Source Feature' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.InterfaceUsageImpl Interface Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.InterfaceUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getInterfaceUsage() * @generated */ - EReference CONNECTOR__SOURCE_FEATURE = eINSTANCE.getConnector_SourceFeature(); + EClass INTERFACE_USAGE = eINSTANCE.getInterfaceUsage(); /** - * The meta object literal for the 'Target Feature' reference list feature. + * The meta object literal for the 'Interface Definition' reference list feature. * * * @generated */ - EReference CONNECTOR__TARGET_FEATURE = eINSTANCE.getConnector_TargetFeature(); + EReference INTERFACE_USAGE__INTERFACE_DEFINITION = eINSTANCE.getInterfaceUsage_InterfaceDefinition(); /** - * The meta object literal for the 'Default Featuring Type' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.IntersectingImpl Intersecting}' class. * * + * @see org.omg.sysml.lang.sysml.impl.IntersectingImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getIntersecting() * @generated */ - EReference CONNECTOR__DEFAULT_FEATURING_TYPE = eINSTANCE.getConnector_DefaultFeaturingType(); + EClass INTERSECTING = eINSTANCE.getIntersecting(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.AssociationImpl Association}' class. + * The meta object literal for the 'Intersecting Type' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.AssociationImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getAssociation() * @generated */ - EClass ASSOCIATION = eINSTANCE.getAssociation(); + EReference INTERSECTING__INTERSECTING_TYPE = eINSTANCE.getIntersecting_IntersectingType(); /** - * The meta object literal for the 'Related Type' reference list feature. + * The meta object literal for the 'Type Intersected' reference feature. * * * @generated */ - EReference ASSOCIATION__RELATED_TYPE = eINSTANCE.getAssociation_RelatedType(); + EReference INTERSECTING__TYPE_INTERSECTED = eINSTANCE.getIntersecting_TypeIntersected(); /** - * The meta object literal for the 'Source Type' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.InvariantImpl Invariant}' class. * * + * @see org.omg.sysml.lang.sysml.impl.InvariantImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getInvariant() * @generated */ - EReference ASSOCIATION__SOURCE_TYPE = eINSTANCE.getAssociation_SourceType(); + EClass INVARIANT = eINSTANCE.getInvariant(); /** - * The meta object literal for the 'Target Type' reference list feature. + * The meta object literal for the 'Is Negated' attribute feature. * * * @generated */ - EReference ASSOCIATION__TARGET_TYPE = eINSTANCE.getAssociation_TargetType(); + EAttribute INVARIANT__IS_NEGATED = eINSTANCE.getInvariant_IsNegated(); /** - * The meta object literal for the 'Association End' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.InvocationExpressionImpl Invocation Expression}' class. * * + * @see org.omg.sysml.lang.sysml.impl.InvocationExpressionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getInvocationExpression() * @generated */ - EReference ASSOCIATION__ASSOCIATION_END = eINSTANCE.getAssociation_AssociationEnd(); + EClass INVOCATION_EXPRESSION = eINSTANCE.getInvocationExpression(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.SuccessionImpl Succession}' class. + * The meta object literal for the 'Operand' containment reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.SuccessionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getSuccession() * @generated */ - EClass SUCCESSION = eINSTANCE.getSuccession(); + EReference INVOCATION_EXPRESSION__OPERAND = eINSTANCE.getInvocationExpression_Operand(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.AssociationStructureImpl Association Structure}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ItemDefinitionImpl Item Definition}' class. * * - * @see org.omg.sysml.lang.sysml.impl.AssociationStructureImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getAssociationStructure() + * @see org.omg.sysml.lang.sysml.impl.ItemDefinitionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getItemDefinition() * @generated */ - EClass ASSOCIATION_STRUCTURE = eINSTANCE.getAssociationStructure(); + EClass ITEM_DEFINITION = eINSTANCE.getItemDefinition(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.PackageImpl Package}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ItemUsageImpl Item Usage}' class. * * - * @see org.omg.sysml.lang.sysml.impl.PackageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getPackage() + * @see org.omg.sysml.lang.sysml.impl.ItemUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getItemUsage() * @generated */ - EClass PACKAGE = eINSTANCE.getPackage(); + EClass ITEM_USAGE = eINSTANCE.getItemUsage(); /** - * The meta object literal for the 'Filter Condition' reference list feature. + * The meta object literal for the 'Item Definition' reference list feature. * * * @generated */ - EReference PACKAGE__FILTER_CONDITION = eINSTANCE.getPackage_FilterCondition(); + EReference ITEM_USAGE__ITEM_DEFINITION = eINSTANCE.getItemUsage_ItemDefinition(); /** - * The meta object literal for the 'Include As Member' operation. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.JoinNodeImpl Join Node}' class. * * + * @see org.omg.sysml.lang.sysml.impl.JoinNodeImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getJoinNode() * @generated */ - EOperation PACKAGE___INCLUDE_AS_MEMBER__ELEMENT = eINSTANCE.getPackage__IncludeAsMember__Element(); + EClass JOIN_NODE = eINSTANCE.getJoinNode(); /** * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.LibraryPackageImpl Library Package}' class. @@ -182381,2892 +182399,2864 @@ interface Literals { EAttribute LIBRARY_PACKAGE__IS_STANDARD = eINSTANCE.getLibraryPackage_IsStandard(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ElementFilterMembershipImpl Element Filter Membership}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.LiteralBooleanImpl Literal Boolean}' class. * * - * @see org.omg.sysml.lang.sysml.impl.ElementFilterMembershipImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getElementFilterMembership() + * @see org.omg.sysml.lang.sysml.impl.LiteralBooleanImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getLiteralBoolean() * @generated */ - EClass ELEMENT_FILTER_MEMBERSHIP = eINSTANCE.getElementFilterMembership(); + EClass LITERAL_BOOLEAN = eINSTANCE.getLiteralBoolean(); /** - * The meta object literal for the 'Condition' reference feature. + * The meta object literal for the 'Value' attribute feature. * * * @generated */ - EReference ELEMENT_FILTER_MEMBERSHIP__CONDITION = eINSTANCE.getElementFilterMembership_Condition(); + EAttribute LITERAL_BOOLEAN__VALUE = eINSTANCE.getLiteralBoolean_Value(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.FlowImpl Flow}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.LiteralExpressionImpl Literal Expression}' class. * * - * @see org.omg.sysml.lang.sysml.impl.FlowImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getFlow() + * @see org.omg.sysml.lang.sysml.impl.LiteralExpressionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getLiteralExpression() * @generated */ - EClass FLOW = eINSTANCE.getFlow(); + EClass LITERAL_EXPRESSION = eINSTANCE.getLiteralExpression(); /** - * The meta object literal for the 'Payload Type' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.LiteralInfinityImpl Literal Infinity}' class. * * + * @see org.omg.sysml.lang.sysml.impl.LiteralInfinityImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getLiteralInfinity() * @generated */ - EReference FLOW__PAYLOAD_TYPE = eINSTANCE.getFlow_PayloadType(); + EClass LITERAL_INFINITY = eINSTANCE.getLiteralInfinity(); /** - * The meta object literal for the 'Target Input Feature' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.LiteralIntegerImpl Literal Integer}' class. * * + * @see org.omg.sysml.lang.sysml.impl.LiteralIntegerImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getLiteralInteger() * @generated */ - EReference FLOW__TARGET_INPUT_FEATURE = eINSTANCE.getFlow_TargetInputFeature(); + EClass LITERAL_INTEGER = eINSTANCE.getLiteralInteger(); /** - * The meta object literal for the 'Source Output Feature' reference feature. + * The meta object literal for the 'Value' attribute feature. * * * @generated */ - EReference FLOW__SOURCE_OUTPUT_FEATURE = eINSTANCE.getFlow_SourceOutputFeature(); + EAttribute LITERAL_INTEGER__VALUE = eINSTANCE.getLiteralInteger_Value(); /** - * The meta object literal for the 'Flow End' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.LiteralRationalImpl Literal Rational}' class. * * + * @see org.omg.sysml.lang.sysml.impl.LiteralRationalImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getLiteralRational() * @generated */ - EReference FLOW__FLOW_END = eINSTANCE.getFlow_FlowEnd(); + EClass LITERAL_RATIONAL = eINSTANCE.getLiteralRational(); /** - * The meta object literal for the 'Payload Feature' reference feature. + * The meta object literal for the 'Value' attribute feature. * * * @generated */ - EReference FLOW__PAYLOAD_FEATURE = eINSTANCE.getFlow_PayloadFeature(); + EAttribute LITERAL_RATIONAL__VALUE = eINSTANCE.getLiteralRational_Value(); /** - * The meta object literal for the 'Interaction' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.LiteralStringImpl Literal String}' class. * * + * @see org.omg.sysml.lang.sysml.impl.LiteralStringImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getLiteralString() * @generated */ - EReference FLOW__INTERACTION = eINSTANCE.getFlow_Interaction(); + EClass LITERAL_STRING = eINSTANCE.getLiteralString(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.FlowEndImpl Flow End}' class. + * The meta object literal for the 'Value' attribute feature. * * - * @see org.omg.sysml.lang.sysml.impl.FlowEndImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getFlowEnd() * @generated */ - EClass FLOW_END = eINSTANCE.getFlowEnd(); + EAttribute LITERAL_STRING__VALUE = eINSTANCE.getLiteralString_Value(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.PayloadFeatureImpl Payload Feature}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.LoopActionUsageImpl Loop Action Usage}' class. * * - * @see org.omg.sysml.lang.sysml.impl.PayloadFeatureImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getPayloadFeature() + * @see org.omg.sysml.lang.sysml.impl.LoopActionUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getLoopActionUsage() * @generated */ - EClass PAYLOAD_FEATURE = eINSTANCE.getPayloadFeature(); + EClass LOOP_ACTION_USAGE = eINSTANCE.getLoopActionUsage(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.InteractionImpl Interaction}' class. + * The meta object literal for the 'Body Action' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.InteractionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getInteraction() * @generated */ - EClass INTERACTION = eINSTANCE.getInteraction(); + EReference LOOP_ACTION_USAGE__BODY_ACTION = eINSTANCE.getLoopActionUsage_BodyAction(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.SuccessionFlowImpl Succession Flow}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.MembershipImpl Membership}' class. * * - * @see org.omg.sysml.lang.sysml.impl.SuccessionFlowImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getSuccessionFlow() + * @see org.omg.sysml.lang.sysml.impl.MembershipImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getMembership() * @generated */ - EClass SUCCESSION_FLOW = eINSTANCE.getSuccessionFlow(); + EClass MEMBERSHIP = eINSTANCE.getMembership(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.EndFeatureMembershipImpl End Feature Membership}' class. + * The meta object literal for the 'Member Element' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.EndFeatureMembershipImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getEndFeatureMembership() * @generated */ - EClass END_FEATURE_MEMBERSHIP = eINSTANCE.getEndFeatureMembership(); + EReference MEMBERSHIP__MEMBER_ELEMENT = eINSTANCE.getMembership_MemberElement(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.MembershipImportImpl Membership Import}' class. + * The meta object literal for the 'Member Element Id' attribute feature. * * - * @see org.omg.sysml.lang.sysml.impl.MembershipImportImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getMembershipImport() * @generated */ - EClass MEMBERSHIP_IMPORT = eINSTANCE.getMembershipImport(); + EAttribute MEMBERSHIP__MEMBER_ELEMENT_ID = eINSTANCE.getMembership_MemberElementId(); /** - * The meta object literal for the 'Imported Membership' reference feature. + * The meta object literal for the 'Member Name' attribute feature. * * * @generated */ - EReference MEMBERSHIP_IMPORT__IMPORTED_MEMBERSHIP = eINSTANCE.getMembershipImport_ImportedMembership(); + EAttribute MEMBERSHIP__MEMBER_NAME = eINSTANCE.getMembership_MemberName(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.NamespaceImportImpl Namespace Import}' class. + * The meta object literal for the 'Member Short Name' attribute feature. * * - * @see org.omg.sysml.lang.sysml.impl.NamespaceImportImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getNamespaceImport() * @generated */ - EClass NAMESPACE_IMPORT = eINSTANCE.getNamespaceImport(); + EAttribute MEMBERSHIP__MEMBER_SHORT_NAME = eINSTANCE.getMembership_MemberShortName(); /** - * The meta object literal for the 'Imported Namespace' reference feature. + * The meta object literal for the 'Membership Owning Namespace' reference feature. * * * @generated */ - EReference NAMESPACE_IMPORT__IMPORTED_NAMESPACE = eINSTANCE.getNamespaceImport_ImportedNamespace(); + EReference MEMBERSHIP__MEMBERSHIP_OWNING_NAMESPACE = eINSTANCE.getMembership_MembershipOwningNamespace(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.DependencyImpl Dependency}' class. + * The meta object literal for the 'Visibility' attribute feature. * * - * @see org.omg.sysml.lang.sysml.impl.DependencyImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getDependency() * @generated */ - EClass DEPENDENCY = eINSTANCE.getDependency(); + EAttribute MEMBERSHIP__VISIBILITY = eINSTANCE.getMembership_Visibility(); /** - * The meta object literal for the 'Client' reference list feature. + * The meta object literal for the 'Is Distinguishable From' operation. * * * @generated */ - EReference DEPENDENCY__CLIENT = eINSTANCE.getDependency_Client(); + EOperation MEMBERSHIP___IS_DISTINGUISHABLE_FROM__MEMBERSHIP = eINSTANCE.getMembership__IsDistinguishableFrom__Membership(); /** - * The meta object literal for the 'Supplier' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.MembershipExposeImpl Membership Expose}' class. * * + * @see org.omg.sysml.lang.sysml.impl.MembershipExposeImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getMembershipExpose() * @generated */ - EReference DEPENDENCY__SUPPLIER = eINSTANCE.getDependency_Supplier(); + EClass MEMBERSHIP_EXPOSE = eINSTANCE.getMembershipExpose(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.VerificationCaseUsageImpl Verification Case Usage}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.MembershipImportImpl Membership Import}' class. * * - * @see org.omg.sysml.lang.sysml.impl.VerificationCaseUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getVerificationCaseUsage() + * @see org.omg.sysml.lang.sysml.impl.MembershipImportImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getMembershipImport() * @generated */ - EClass VERIFICATION_CASE_USAGE = eINSTANCE.getVerificationCaseUsage(); + EClass MEMBERSHIP_IMPORT = eINSTANCE.getMembershipImport(); /** - * The meta object literal for the 'Verification Case Definition' reference feature. + * The meta object literal for the 'Imported Membership' reference feature. * * * @generated */ - EReference VERIFICATION_CASE_USAGE__VERIFICATION_CASE_DEFINITION = eINSTANCE.getVerificationCaseUsage_VerificationCaseDefinition(); + EReference MEMBERSHIP_IMPORT__IMPORTED_MEMBERSHIP = eINSTANCE.getMembershipImport_ImportedMembership(); /** - * The meta object literal for the 'Verified Requirement' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.MergeNodeImpl Merge Node}' class. * * + * @see org.omg.sysml.lang.sysml.impl.MergeNodeImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getMergeNode() * @generated */ - EReference VERIFICATION_CASE_USAGE__VERIFIED_REQUIREMENT = eINSTANCE.getVerificationCaseUsage_VerifiedRequirement(); + EClass MERGE_NODE = eINSTANCE.getMergeNode(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.CaseUsageImpl Case Usage}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.MetaclassImpl Metaclass}' class. * * - * @see org.omg.sysml.lang.sysml.impl.CaseUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getCaseUsage() + * @see org.omg.sysml.lang.sysml.impl.MetaclassImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getMetaclass() * @generated */ - EClass CASE_USAGE = eINSTANCE.getCaseUsage(); + EClass METACLASS = eINSTANCE.getMetaclass(); /** - * The meta object literal for the 'Objective Requirement' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.MetadataAccessExpressionImpl Metadata Access Expression}' class. * * + * @see org.omg.sysml.lang.sysml.impl.MetadataAccessExpressionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getMetadataAccessExpression() * @generated */ - EReference CASE_USAGE__OBJECTIVE_REQUIREMENT = eINSTANCE.getCaseUsage_ObjectiveRequirement(); + EClass METADATA_ACCESS_EXPRESSION = eINSTANCE.getMetadataAccessExpression(); /** - * The meta object literal for the 'Case Definition' reference feature. + * The meta object literal for the 'Referenced Element' reference feature. * * * @generated */ - EReference CASE_USAGE__CASE_DEFINITION = eINSTANCE.getCaseUsage_CaseDefinition(); + EReference METADATA_ACCESS_EXPRESSION__REFERENCED_ELEMENT = eINSTANCE.getMetadataAccessExpression_ReferencedElement(); /** - * The meta object literal for the 'Subject Parameter' reference feature. + * The meta object literal for the 'Metaclass Feature' operation. * * * @generated */ - EReference CASE_USAGE__SUBJECT_PARAMETER = eINSTANCE.getCaseUsage_SubjectParameter(); + EOperation METADATA_ACCESS_EXPRESSION___METACLASS_FEATURE = eINSTANCE.getMetadataAccessExpression__MetaclassFeature(); /** - * The meta object literal for the 'Actor Parameter' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.MetadataDefinitionImpl Metadata Definition}' class. * * + * @see org.omg.sysml.lang.sysml.impl.MetadataDefinitionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getMetadataDefinition() * @generated */ - EReference CASE_USAGE__ACTOR_PARAMETER = eINSTANCE.getCaseUsage_ActorParameter(); + EClass METADATA_DEFINITION = eINSTANCE.getMetadataDefinition(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.CalculationUsageImpl Calculation Usage}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.MetadataFeatureImpl Metadata Feature}' class. * * - * @see org.omg.sysml.lang.sysml.impl.CalculationUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getCalculationUsage() + * @see org.omg.sysml.lang.sysml.impl.MetadataFeatureImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getMetadataFeature() * @generated */ - EClass CALCULATION_USAGE = eINSTANCE.getCalculationUsage(); + EClass METADATA_FEATURE = eINSTANCE.getMetadataFeature(); /** - * The meta object literal for the 'Calculation Definition' reference feature. + * The meta object literal for the 'Metaclass' reference feature. * * * @generated */ - EReference CALCULATION_USAGE__CALCULATION_DEFINITION = eINSTANCE.getCalculationUsage_CalculationDefinition(); + EReference METADATA_FEATURE__METACLASS = eINSTANCE.getMetadataFeature_Metaclass(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ActionUsageImpl Action Usage}' class. + * The meta object literal for the 'Evaluate Feature' operation. * * - * @see org.omg.sysml.lang.sysml.impl.ActionUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getActionUsage() * @generated */ - EClass ACTION_USAGE = eINSTANCE.getActionUsage(); + EOperation METADATA_FEATURE___EVALUATE_FEATURE__FEATURE = eINSTANCE.getMetadataFeature__EvaluateFeature__Feature(); /** - * The meta object literal for the 'Action Definition' reference list feature. + * The meta object literal for the 'Is Semantic' operation. * * * @generated */ - EReference ACTION_USAGE__ACTION_DEFINITION = eINSTANCE.getActionUsage_ActionDefinition(); + EOperation METADATA_FEATURE___IS_SEMANTIC = eINSTANCE.getMetadataFeature__IsSemantic(); /** - * The meta object literal for the 'Input Parameters' operation. + * The meta object literal for the 'Is Syntactic' operation. * * * @generated */ - EOperation ACTION_USAGE___INPUT_PARAMETERS = eINSTANCE.getActionUsage__InputParameters(); + EOperation METADATA_FEATURE___IS_SYNTACTIC = eINSTANCE.getMetadataFeature__IsSyntactic(); /** - * The meta object literal for the 'Input Parameter' operation. + * The meta object literal for the 'Syntax Element' operation. * * * @generated */ - EOperation ACTION_USAGE___INPUT_PARAMETER__INT = eINSTANCE.getActionUsage__InputParameter__int(); + EOperation METADATA_FEATURE___SYNTAX_ELEMENT = eINSTANCE.getMetadataFeature__SyntaxElement(); /** - * The meta object literal for the 'Argument' operation. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.MetadataUsageImpl Metadata Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.MetadataUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getMetadataUsage() * @generated */ - EOperation ACTION_USAGE___ARGUMENT__INT = eINSTANCE.getActionUsage__Argument__int(); + EClass METADATA_USAGE = eINSTANCE.getMetadataUsage(); /** - * The meta object literal for the 'Is Subaction Usage' operation. + * The meta object literal for the 'Metadata Definition' reference feature. * * * @generated */ - EOperation ACTION_USAGE___IS_SUBACTION_USAGE = eINSTANCE.getActionUsage__IsSubactionUsage(); + EReference METADATA_USAGE__METADATA_DEFINITION = eINSTANCE.getMetadataUsage_MetadataDefinition(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.OccurrenceUsageImpl Occurrence Usage}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.MultiplicityImpl Multiplicity}' class. * * - * @see org.omg.sysml.lang.sysml.impl.OccurrenceUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getOccurrenceUsage() + * @see org.omg.sysml.lang.sysml.impl.MultiplicityImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getMultiplicity() * @generated */ - EClass OCCURRENCE_USAGE = eINSTANCE.getOccurrenceUsage(); + EClass MULTIPLICITY = eINSTANCE.getMultiplicity(); /** - * The meta object literal for the 'Occurrence Definition' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.MultiplicityRangeImpl Multiplicity Range}' class. * * + * @see org.omg.sysml.lang.sysml.impl.MultiplicityRangeImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getMultiplicityRange() * @generated */ - EReference OCCURRENCE_USAGE__OCCURRENCE_DEFINITION = eINSTANCE.getOccurrenceUsage_OccurrenceDefinition(); + EClass MULTIPLICITY_RANGE = eINSTANCE.getMultiplicityRange(); /** - * The meta object literal for the 'Individual Definition' reference feature. + * The meta object literal for the 'Bound' reference list feature. * * * @generated */ - EReference OCCURRENCE_USAGE__INDIVIDUAL_DEFINITION = eINSTANCE.getOccurrenceUsage_IndividualDefinition(); + EReference MULTIPLICITY_RANGE__BOUND = eINSTANCE.getMultiplicityRange_Bound(); /** - * The meta object literal for the 'Is Individual' attribute feature. + * The meta object literal for the 'Lower Bound' reference feature. * * * @generated */ - EAttribute OCCURRENCE_USAGE__IS_INDIVIDUAL = eINSTANCE.getOccurrenceUsage_IsIndividual(); + EReference MULTIPLICITY_RANGE__LOWER_BOUND = eINSTANCE.getMultiplicityRange_LowerBound(); /** - * The meta object literal for the 'Portion Kind' attribute feature. + * The meta object literal for the 'Upper Bound' reference feature. * * * @generated */ - EAttribute OCCURRENCE_USAGE__PORTION_KIND = eINSTANCE.getOccurrenceUsage_PortionKind(); + EReference MULTIPLICITY_RANGE__UPPER_BOUND = eINSTANCE.getMultiplicityRange_UpperBound(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.UsageImpl Usage}' class. + * The meta object literal for the 'Has Bounds' operation. * * - * @see org.omg.sysml.lang.sysml.impl.UsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getUsage() * @generated */ - EClass USAGE = eINSTANCE.getUsage(); + EOperation MULTIPLICITY_RANGE___HAS_BOUNDS__INT_INT = eINSTANCE.getMultiplicityRange__HasBounds__int_int(); /** - * The meta object literal for the 'May Time Vary' attribute feature. + * The meta object literal for the 'Value Of' operation. * * * @generated */ - EAttribute USAGE__MAY_TIME_VARY = eINSTANCE.getUsage_MayTimeVary(); + EOperation MULTIPLICITY_RANGE___VALUE_OF__EXPRESSION = eINSTANCE.getMultiplicityRange__ValueOf__Expression(); /** - * The meta object literal for the 'Is Reference' attribute feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.NamespaceImpl Namespace}' class. * * + * @see org.omg.sysml.lang.sysml.impl.NamespaceImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getNamespace() * @generated */ - EAttribute USAGE__IS_REFERENCE = eINSTANCE.getUsage_IsReference(); + EClass NAMESPACE = eINSTANCE.getNamespace(); /** - * The meta object literal for the 'Variant' reference list feature. + * The meta object literal for the 'Imported Membership' reference list feature. * * * @generated */ - EReference USAGE__VARIANT = eINSTANCE.getUsage_Variant(); + EReference NAMESPACE__IMPORTED_MEMBERSHIP = eINSTANCE.getNamespace_ImportedMembership(); /** - * The meta object literal for the 'Variant Membership' reference list feature. + * The meta object literal for the 'Member' reference list feature. * * * @generated */ - EReference USAGE__VARIANT_MEMBERSHIP = eINSTANCE.getUsage_VariantMembership(); + EReference NAMESPACE__MEMBER = eINSTANCE.getNamespace_Member(); /** - * The meta object literal for the 'Owning Definition' reference feature. + * The meta object literal for the 'Membership' reference list feature. * * * @generated */ - EReference USAGE__OWNING_DEFINITION = eINSTANCE.getUsage_OwningDefinition(); + EReference NAMESPACE__MEMBERSHIP = eINSTANCE.getNamespace_Membership(); /** - * The meta object literal for the 'Owning Usage' reference feature. + * The meta object literal for the 'Owned Import' reference list feature. * * * @generated */ - EReference USAGE__OWNING_USAGE = eINSTANCE.getUsage_OwningUsage(); + EReference NAMESPACE__OWNED_IMPORT = eINSTANCE.getNamespace_OwnedImport(); /** - * The meta object literal for the 'Nested Usage' reference list feature. + * The meta object literal for the 'Owned Member' reference list feature. * * * @generated */ - EReference USAGE__NESTED_USAGE = eINSTANCE.getUsage_NestedUsage(); + EReference NAMESPACE__OWNED_MEMBER = eINSTANCE.getNamespace_OwnedMember(); /** - * The meta object literal for the 'Definition' reference list feature. + * The meta object literal for the 'Owned Membership' reference list feature. * * * @generated */ - EReference USAGE__DEFINITION = eINSTANCE.getUsage_Definition(); + EReference NAMESPACE__OWNED_MEMBERSHIP = eINSTANCE.getNamespace_OwnedMembership(); /** - * The meta object literal for the 'Usage' reference list feature. + * The meta object literal for the 'Imported Memberships' operation. * * * @generated */ - EReference USAGE__USAGE = eINSTANCE.getUsage_Usage(); + EOperation NAMESPACE___IMPORTED_MEMBERSHIPS__ELIST = eINSTANCE.getNamespace__ImportedMemberships__EList(); /** - * The meta object literal for the 'Directed Usage' reference list feature. + * The meta object literal for the 'Memberships Of Visibility' operation. * * * @generated */ - EReference USAGE__DIRECTED_USAGE = eINSTANCE.getUsage_DirectedUsage(); + EOperation NAMESPACE___MEMBERSHIPS_OF_VISIBILITY__VISIBILITYKIND_ELIST = eINSTANCE.getNamespace__MembershipsOfVisibility__VisibilityKind_EList(); /** - * The meta object literal for the 'Nested Reference' reference list feature. + * The meta object literal for the 'Names Of' operation. * * * @generated */ - EReference USAGE__NESTED_REFERENCE = eINSTANCE.getUsage_NestedReference(); + EOperation NAMESPACE___NAMES_OF__ELEMENT = eINSTANCE.getNamespace__NamesOf__Element(); /** - * The meta object literal for the 'Nested Attribute' reference list feature. + * The meta object literal for the 'Qualification Of' operation. * * * @generated */ - EReference USAGE__NESTED_ATTRIBUTE = eINSTANCE.getUsage_NestedAttribute(); + EOperation NAMESPACE___QUALIFICATION_OF__STRING = eINSTANCE.getNamespace__QualificationOf__String(); /** - * The meta object literal for the 'Nested Enumeration' reference list feature. + * The meta object literal for the 'Resolve' operation. * * * @generated */ - EReference USAGE__NESTED_ENUMERATION = eINSTANCE.getUsage_NestedEnumeration(); + EOperation NAMESPACE___RESOLVE__STRING = eINSTANCE.getNamespace__Resolve__String(); /** - * The meta object literal for the 'Nested Occurrence' reference list feature. + * The meta object literal for the 'Resolve Global' operation. * * * @generated */ - EReference USAGE__NESTED_OCCURRENCE = eINSTANCE.getUsage_NestedOccurrence(); + EOperation NAMESPACE___RESOLVE_GLOBAL__STRING = eINSTANCE.getNamespace__ResolveGlobal__String(); /** - * The meta object literal for the 'Nested Item' reference list feature. + * The meta object literal for the 'Resolve Local' operation. * * * @generated */ - EReference USAGE__NESTED_ITEM = eINSTANCE.getUsage_NestedItem(); + EOperation NAMESPACE___RESOLVE_LOCAL__STRING = eINSTANCE.getNamespace__ResolveLocal__String(); /** - * The meta object literal for the 'Nested Part' reference list feature. + * The meta object literal for the 'Resolve Visible' operation. * * * @generated */ - EReference USAGE__NESTED_PART = eINSTANCE.getUsage_NestedPart(); + EOperation NAMESPACE___RESOLVE_VISIBLE__STRING = eINSTANCE.getNamespace__ResolveVisible__String(); /** - * The meta object literal for the 'Nested Port' reference list feature. + * The meta object literal for the 'Unqualified Name Of' operation. * * * @generated */ - EReference USAGE__NESTED_PORT = eINSTANCE.getUsage_NestedPort(); + EOperation NAMESPACE___UNQUALIFIED_NAME_OF__STRING = eINSTANCE.getNamespace__UnqualifiedNameOf__String(); /** - * The meta object literal for the 'Nested Connection' reference list feature. + * The meta object literal for the 'Visibility Of' operation. * * * @generated */ - EReference USAGE__NESTED_CONNECTION = eINSTANCE.getUsage_NestedConnection(); + EOperation NAMESPACE___VISIBILITY_OF__MEMBERSHIP = eINSTANCE.getNamespace__VisibilityOf__Membership(); /** - * The meta object literal for the 'Nested Flow' reference list feature. + * The meta object literal for the 'Visible Memberships' operation. * * * @generated */ - EReference USAGE__NESTED_FLOW = eINSTANCE.getUsage_NestedFlow(); + EOperation NAMESPACE___VISIBLE_MEMBERSHIPS__ELIST_BOOLEAN_BOOLEAN = eINSTANCE.getNamespace__VisibleMemberships__EList_boolean_boolean(); /** - * The meta object literal for the 'Nested Interface' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.NamespaceExposeImpl Namespace Expose}' class. * * + * @see org.omg.sysml.lang.sysml.impl.NamespaceExposeImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getNamespaceExpose() * @generated */ - EReference USAGE__NESTED_INTERFACE = eINSTANCE.getUsage_NestedInterface(); + EClass NAMESPACE_EXPOSE = eINSTANCE.getNamespaceExpose(); /** - * The meta object literal for the 'Nested Allocation' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.NamespaceImportImpl Namespace Import}' class. * * + * @see org.omg.sysml.lang.sysml.impl.NamespaceImportImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getNamespaceImport() * @generated */ - EReference USAGE__NESTED_ALLOCATION = eINSTANCE.getUsage_NestedAllocation(); + EClass NAMESPACE_IMPORT = eINSTANCE.getNamespaceImport(); /** - * The meta object literal for the 'Nested Action' reference list feature. + * The meta object literal for the 'Imported Namespace' reference feature. * * * @generated */ - EReference USAGE__NESTED_ACTION = eINSTANCE.getUsage_NestedAction(); + EReference NAMESPACE_IMPORT__IMPORTED_NAMESPACE = eINSTANCE.getNamespaceImport_ImportedNamespace(); /** - * The meta object literal for the 'Nested State' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.NullExpressionImpl Null Expression}' class. * * + * @see org.omg.sysml.lang.sysml.impl.NullExpressionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getNullExpression() * @generated */ - EReference USAGE__NESTED_STATE = eINSTANCE.getUsage_NestedState(); + EClass NULL_EXPRESSION = eINSTANCE.getNullExpression(); /** - * The meta object literal for the 'Nested Transition' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ObjectiveMembershipImpl Objective Membership}' class. * * + * @see org.omg.sysml.lang.sysml.impl.ObjectiveMembershipImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getObjectiveMembership() * @generated */ - EReference USAGE__NESTED_TRANSITION = eINSTANCE.getUsage_NestedTransition(); + EClass OBJECTIVE_MEMBERSHIP = eINSTANCE.getObjectiveMembership(); /** - * The meta object literal for the 'Nested Calculation' reference list feature. + * The meta object literal for the 'Owned Objective Requirement' reference feature. * * * @generated */ - EReference USAGE__NESTED_CALCULATION = eINSTANCE.getUsage_NestedCalculation(); + EReference OBJECTIVE_MEMBERSHIP__OWNED_OBJECTIVE_REQUIREMENT = eINSTANCE.getObjectiveMembership_OwnedObjectiveRequirement(); /** - * The meta object literal for the 'Nested Constraint' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.OccurrenceDefinitionImpl Occurrence Definition}' class. * * + * @see org.omg.sysml.lang.sysml.impl.OccurrenceDefinitionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getOccurrenceDefinition() * @generated */ - EReference USAGE__NESTED_CONSTRAINT = eINSTANCE.getUsage_NestedConstraint(); + EClass OCCURRENCE_DEFINITION = eINSTANCE.getOccurrenceDefinition(); /** - * The meta object literal for the 'Nested Requirement' reference list feature. + * The meta object literal for the 'Is Individual' attribute feature. * * * @generated */ - EReference USAGE__NESTED_REQUIREMENT = eINSTANCE.getUsage_NestedRequirement(); + EAttribute OCCURRENCE_DEFINITION__IS_INDIVIDUAL = eINSTANCE.getOccurrenceDefinition_IsIndividual(); /** - * The meta object literal for the 'Nested Concern' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.OccurrenceUsageImpl Occurrence Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.OccurrenceUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getOccurrenceUsage() * @generated */ - EReference USAGE__NESTED_CONCERN = eINSTANCE.getUsage_NestedConcern(); + EClass OCCURRENCE_USAGE = eINSTANCE.getOccurrenceUsage(); /** - * The meta object literal for the 'Nested Case' reference list feature. + * The meta object literal for the 'Individual Definition' reference feature. * * * @generated */ - EReference USAGE__NESTED_CASE = eINSTANCE.getUsage_NestedCase(); + EReference OCCURRENCE_USAGE__INDIVIDUAL_DEFINITION = eINSTANCE.getOccurrenceUsage_IndividualDefinition(); /** - * The meta object literal for the 'Nested Analysis Case' reference list feature. + * The meta object literal for the 'Is Individual' attribute feature. * * * @generated */ - EReference USAGE__NESTED_ANALYSIS_CASE = eINSTANCE.getUsage_NestedAnalysisCase(); + EAttribute OCCURRENCE_USAGE__IS_INDIVIDUAL = eINSTANCE.getOccurrenceUsage_IsIndividual(); /** - * The meta object literal for the 'Nested Verification Case' reference list feature. + * The meta object literal for the 'Occurrence Definition' reference list feature. * * * @generated */ - EReference USAGE__NESTED_VERIFICATION_CASE = eINSTANCE.getUsage_NestedVerificationCase(); + EReference OCCURRENCE_USAGE__OCCURRENCE_DEFINITION = eINSTANCE.getOccurrenceUsage_OccurrenceDefinition(); /** - * The meta object literal for the 'Nested Use Case' reference list feature. + * The meta object literal for the 'Portion Kind' attribute feature. * * * @generated */ - EReference USAGE__NESTED_USE_CASE = eINSTANCE.getUsage_NestedUseCase(); + EAttribute OCCURRENCE_USAGE__PORTION_KIND = eINSTANCE.getOccurrenceUsage_PortionKind(); /** - * The meta object literal for the 'Nested View' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.OperatorExpressionImpl Operator Expression}' class. * * + * @see org.omg.sysml.lang.sysml.impl.OperatorExpressionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getOperatorExpression() * @generated */ - EReference USAGE__NESTED_VIEW = eINSTANCE.getUsage_NestedView(); + EClass OPERATOR_EXPRESSION = eINSTANCE.getOperatorExpression(); /** - * The meta object literal for the 'Nested Viewpoint' reference list feature. + * The meta object literal for the 'Operator' attribute feature. * * * @generated */ - EReference USAGE__NESTED_VIEWPOINT = eINSTANCE.getUsage_NestedViewpoint(); + EAttribute OPERATOR_EXPRESSION__OPERATOR = eINSTANCE.getOperatorExpression_Operator(); /** - * The meta object literal for the 'Nested Rendering' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.OwningMembershipImpl Owning Membership}' class. * * + * @see org.omg.sysml.lang.sysml.impl.OwningMembershipImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getOwningMembership() * @generated */ - EReference USAGE__NESTED_RENDERING = eINSTANCE.getUsage_NestedRendering(); + EClass OWNING_MEMBERSHIP = eINSTANCE.getOwningMembership(); /** - * The meta object literal for the 'Nested Metadata' reference list feature. + * The meta object literal for the 'Owned Member Element' reference feature. * * * @generated */ - EReference USAGE__NESTED_METADATA = eINSTANCE.getUsage_NestedMetadata(); + EReference OWNING_MEMBERSHIP__OWNED_MEMBER_ELEMENT = eINSTANCE.getOwningMembership_OwnedMemberElement(); /** - * The meta object literal for the 'Is Variation' attribute feature. + * The meta object literal for the 'Owned Member Element Id' attribute feature. * * * @generated */ - EAttribute USAGE__IS_VARIATION = eINSTANCE.getUsage_IsVariation(); + EAttribute OWNING_MEMBERSHIP__OWNED_MEMBER_ELEMENT_ID = eINSTANCE.getOwningMembership_OwnedMemberElementId(); /** - * The meta object literal for the 'Referenced Feature Target' operation. + * The meta object literal for the 'Owned Member Name' attribute feature. * * * @generated */ - EOperation USAGE___REFERENCED_FEATURE_TARGET = eINSTANCE.getUsage__ReferencedFeatureTarget(); + EAttribute OWNING_MEMBERSHIP__OWNED_MEMBER_NAME = eINSTANCE.getOwningMembership_OwnedMemberName(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.VariantMembershipImpl Variant Membership}' class. + * The meta object literal for the 'Owned Member Short Name' attribute feature. * * - * @see org.omg.sysml.lang.sysml.impl.VariantMembershipImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getVariantMembership() * @generated */ - EClass VARIANT_MEMBERSHIP = eINSTANCE.getVariantMembership(); + EAttribute OWNING_MEMBERSHIP__OWNED_MEMBER_SHORT_NAME = eINSTANCE.getOwningMembership_OwnedMemberShortName(); /** - * The meta object literal for the 'Owned Variant Usage' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.PackageImpl Package}' class. * * + * @see org.omg.sysml.lang.sysml.impl.PackageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getPackage() * @generated */ - EReference VARIANT_MEMBERSHIP__OWNED_VARIANT_USAGE = eINSTANCE.getVariantMembership_OwnedVariantUsage(); + EClass PACKAGE = eINSTANCE.getPackage(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.DefinitionImpl Definition}' class. + * The meta object literal for the 'Filter Condition' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.DefinitionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getDefinition() * @generated */ - EClass DEFINITION = eINSTANCE.getDefinition(); + EReference PACKAGE__FILTER_CONDITION = eINSTANCE.getPackage_FilterCondition(); /** - * The meta object literal for the 'Is Variation' attribute feature. + * The meta object literal for the 'Include As Member' operation. * * * @generated */ - EAttribute DEFINITION__IS_VARIATION = eINSTANCE.getDefinition_IsVariation(); + EOperation PACKAGE___INCLUDE_AS_MEMBER__ELEMENT = eINSTANCE.getPackage__IncludeAsMember__Element(); /** - * The meta object literal for the 'Variant' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ParameterMembershipImpl Parameter Membership}' class. * * + * @see org.omg.sysml.lang.sysml.impl.ParameterMembershipImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getParameterMembership() * @generated */ - EReference DEFINITION__VARIANT = eINSTANCE.getDefinition_Variant(); + EClass PARAMETER_MEMBERSHIP = eINSTANCE.getParameterMembership(); /** - * The meta object literal for the 'Variant Membership' reference list feature. + * The meta object literal for the 'Owned Member Parameter' reference feature. * * * @generated */ - EReference DEFINITION__VARIANT_MEMBERSHIP = eINSTANCE.getDefinition_VariantMembership(); + EReference PARAMETER_MEMBERSHIP__OWNED_MEMBER_PARAMETER = eINSTANCE.getParameterMembership_OwnedMemberParameter(); /** - * The meta object literal for the 'Usage' reference list feature. + * The meta object literal for the 'Parameter Direction' operation. * * * @generated */ - EReference DEFINITION__USAGE = eINSTANCE.getDefinition_Usage(); + EOperation PARAMETER_MEMBERSHIP___PARAMETER_DIRECTION = eINSTANCE.getParameterMembership__ParameterDirection(); /** - * The meta object literal for the 'Directed Usage' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.PartDefinitionImpl Part Definition}' class. * * + * @see org.omg.sysml.lang.sysml.impl.PartDefinitionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getPartDefinition() * @generated */ - EReference DEFINITION__DIRECTED_USAGE = eINSTANCE.getDefinition_DirectedUsage(); + EClass PART_DEFINITION = eINSTANCE.getPartDefinition(); /** - * The meta object literal for the 'Owned Reference' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.PartUsageImpl Part Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.PartUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getPartUsage() * @generated */ - EReference DEFINITION__OWNED_REFERENCE = eINSTANCE.getDefinition_OwnedReference(); + EClass PART_USAGE = eINSTANCE.getPartUsage(); /** - * The meta object literal for the 'Owned Attribute' reference list feature. + * The meta object literal for the 'Part Definition' reference list feature. * * * @generated */ - EReference DEFINITION__OWNED_ATTRIBUTE = eINSTANCE.getDefinition_OwnedAttribute(); + EReference PART_USAGE__PART_DEFINITION = eINSTANCE.getPartUsage_PartDefinition(); /** - * The meta object literal for the 'Owned Enumeration' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.PayloadFeatureImpl Payload Feature}' class. * * + * @see org.omg.sysml.lang.sysml.impl.PayloadFeatureImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getPayloadFeature() * @generated */ - EReference DEFINITION__OWNED_ENUMERATION = eINSTANCE.getDefinition_OwnedEnumeration(); + EClass PAYLOAD_FEATURE = eINSTANCE.getPayloadFeature(); /** - * The meta object literal for the 'Owned Occurrence' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.PerformActionUsageImpl Perform Action Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.PerformActionUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getPerformActionUsage() * @generated */ - EReference DEFINITION__OWNED_OCCURRENCE = eINSTANCE.getDefinition_OwnedOccurrence(); + EClass PERFORM_ACTION_USAGE = eINSTANCE.getPerformActionUsage(); /** - * The meta object literal for the 'Owned Item' reference list feature. + * The meta object literal for the 'Performed Action' reference feature. * * * @generated */ - EReference DEFINITION__OWNED_ITEM = eINSTANCE.getDefinition_OwnedItem(); + EReference PERFORM_ACTION_USAGE__PERFORMED_ACTION = eINSTANCE.getPerformActionUsage_PerformedAction(); /** - * The meta object literal for the 'Owned Part' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.PortConjugationImpl Port Conjugation}' class. * * + * @see org.omg.sysml.lang.sysml.impl.PortConjugationImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getPortConjugation() * @generated */ - EReference DEFINITION__OWNED_PART = eINSTANCE.getDefinition_OwnedPart(); + EClass PORT_CONJUGATION = eINSTANCE.getPortConjugation(); /** - * The meta object literal for the 'Owned Port' reference list feature. + * The meta object literal for the 'Conjugated Port Definition' reference feature. * * * @generated */ - EReference DEFINITION__OWNED_PORT = eINSTANCE.getDefinition_OwnedPort(); + EReference PORT_CONJUGATION__CONJUGATED_PORT_DEFINITION = eINSTANCE.getPortConjugation_ConjugatedPortDefinition(); /** - * The meta object literal for the 'Owned Connection' reference list feature. + * The meta object literal for the 'Original Port Definition' reference feature. * * * @generated */ - EReference DEFINITION__OWNED_CONNECTION = eINSTANCE.getDefinition_OwnedConnection(); + EReference PORT_CONJUGATION__ORIGINAL_PORT_DEFINITION = eINSTANCE.getPortConjugation_OriginalPortDefinition(); /** - * The meta object literal for the 'Owned Flow' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.PortDefinitionImpl Port Definition}' class. * * + * @see org.omg.sysml.lang.sysml.impl.PortDefinitionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getPortDefinition() * @generated */ - EReference DEFINITION__OWNED_FLOW = eINSTANCE.getDefinition_OwnedFlow(); + EClass PORT_DEFINITION = eINSTANCE.getPortDefinition(); /** - * The meta object literal for the 'Owned Interface' reference list feature. + * The meta object literal for the 'Conjugated Port Definition' reference feature. * * * @generated */ - EReference DEFINITION__OWNED_INTERFACE = eINSTANCE.getDefinition_OwnedInterface(); + EReference PORT_DEFINITION__CONJUGATED_PORT_DEFINITION = eINSTANCE.getPortDefinition_ConjugatedPortDefinition(); /** - * The meta object literal for the 'Owned Allocation' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.PortUsageImpl Port Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.PortUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getPortUsage() * @generated */ - EReference DEFINITION__OWNED_ALLOCATION = eINSTANCE.getDefinition_OwnedAllocation(); + EClass PORT_USAGE = eINSTANCE.getPortUsage(); /** - * The meta object literal for the 'Owned Action' reference list feature. + * The meta object literal for the 'Port Definition' reference list feature. * * * @generated */ - EReference DEFINITION__OWNED_ACTION = eINSTANCE.getDefinition_OwnedAction(); + EReference PORT_USAGE__PORT_DEFINITION = eINSTANCE.getPortUsage_PortDefinition(); /** - * The meta object literal for the 'Owned State' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.PredicateImpl Predicate}' class. * * + * @see org.omg.sysml.lang.sysml.impl.PredicateImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getPredicate() * @generated */ - EReference DEFINITION__OWNED_STATE = eINSTANCE.getDefinition_OwnedState(); + EClass PREDICATE = eINSTANCE.getPredicate(); /** - * The meta object literal for the 'Owned Transition' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.RedefinitionImpl Redefinition}' class. * * + * @see org.omg.sysml.lang.sysml.impl.RedefinitionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getRedefinition() * @generated */ - EReference DEFINITION__OWNED_TRANSITION = eINSTANCE.getDefinition_OwnedTransition(); + EClass REDEFINITION = eINSTANCE.getRedefinition(); /** - * The meta object literal for the 'Owned Calculation' reference list feature. + * The meta object literal for the 'Redefined Feature' reference feature. * * * @generated */ - EReference DEFINITION__OWNED_CALCULATION = eINSTANCE.getDefinition_OwnedCalculation(); + EReference REDEFINITION__REDEFINED_FEATURE = eINSTANCE.getRedefinition_RedefinedFeature(); /** - * The meta object literal for the 'Owned Constraint' reference list feature. + * The meta object literal for the 'Redefining Feature' reference feature. * * * @generated */ - EReference DEFINITION__OWNED_CONSTRAINT = eINSTANCE.getDefinition_OwnedConstraint(); + EReference REDEFINITION__REDEFINING_FEATURE = eINSTANCE.getRedefinition_RedefiningFeature(); /** - * The meta object literal for the 'Owned Requirement' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ReferenceSubsettingImpl Reference Subsetting}' class. * * + * @see org.omg.sysml.lang.sysml.impl.ReferenceSubsettingImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getReferenceSubsetting() * @generated */ - EReference DEFINITION__OWNED_REQUIREMENT = eINSTANCE.getDefinition_OwnedRequirement(); + EClass REFERENCE_SUBSETTING = eINSTANCE.getReferenceSubsetting(); /** - * The meta object literal for the 'Owned Concern' reference list feature. + * The meta object literal for the 'Referenced Feature' reference feature. * * * @generated */ - EReference DEFINITION__OWNED_CONCERN = eINSTANCE.getDefinition_OwnedConcern(); + EReference REFERENCE_SUBSETTING__REFERENCED_FEATURE = eINSTANCE.getReferenceSubsetting_ReferencedFeature(); /** - * The meta object literal for the 'Owned Case' reference list feature. + * The meta object literal for the 'Referencing Feature' reference feature. * * * @generated */ - EReference DEFINITION__OWNED_CASE = eINSTANCE.getDefinition_OwnedCase(); + EReference REFERENCE_SUBSETTING__REFERENCING_FEATURE = eINSTANCE.getReferenceSubsetting_ReferencingFeature(); /** - * The meta object literal for the 'Owned Analysis Case' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ReferenceUsageImpl Reference Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.ReferenceUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getReferenceUsage() * @generated */ - EReference DEFINITION__OWNED_ANALYSIS_CASE = eINSTANCE.getDefinition_OwnedAnalysisCase(); + EClass REFERENCE_USAGE = eINSTANCE.getReferenceUsage(); /** - * The meta object literal for the 'Owned Verification Case' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.RelationshipImpl Relationship}' class. * * + * @see org.omg.sysml.lang.sysml.impl.RelationshipImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getRelationship() * @generated */ - EReference DEFINITION__OWNED_VERIFICATION_CASE = eINSTANCE.getDefinition_OwnedVerificationCase(); + EClass RELATIONSHIP = eINSTANCE.getRelationship(); /** - * The meta object literal for the 'Owned Use Case' reference list feature. + * The meta object literal for the 'Is Implied' attribute feature. * * * @generated */ - EReference DEFINITION__OWNED_USE_CASE = eINSTANCE.getDefinition_OwnedUseCase(); + EAttribute RELATIONSHIP__IS_IMPLIED = eINSTANCE.getRelationship_IsImplied(); /** - * The meta object literal for the 'Owned View' reference list feature. + * The meta object literal for the 'Owned Related Element' containment reference list feature. * * * @generated */ - EReference DEFINITION__OWNED_VIEW = eINSTANCE.getDefinition_OwnedView(); + EReference RELATIONSHIP__OWNED_RELATED_ELEMENT = eINSTANCE.getRelationship_OwnedRelatedElement(); /** - * The meta object literal for the 'Owned Viewpoint' reference list feature. + * The meta object literal for the 'Owning Related Element' container reference feature. * * * @generated */ - EReference DEFINITION__OWNED_VIEWPOINT = eINSTANCE.getDefinition_OwnedViewpoint(); + EReference RELATIONSHIP__OWNING_RELATED_ELEMENT = eINSTANCE.getRelationship_OwningRelatedElement(); /** - * The meta object literal for the 'Owned Rendering' reference list feature. + * The meta object literal for the 'Related Element' reference list feature. * * * @generated */ - EReference DEFINITION__OWNED_RENDERING = eINSTANCE.getDefinition_OwnedRendering(); + EReference RELATIONSHIP__RELATED_ELEMENT = eINSTANCE.getRelationship_RelatedElement(); /** - * The meta object literal for the 'Owned Metadata' reference list feature. + * The meta object literal for the 'Source' reference list feature. * * * @generated */ - EReference DEFINITION__OWNED_METADATA = eINSTANCE.getDefinition_OwnedMetadata(); + EReference RELATIONSHIP__SOURCE = eINSTANCE.getRelationship_Source(); /** - * The meta object literal for the 'Owned Usage' reference list feature. + * The meta object literal for the 'Target' reference list feature. * * * @generated */ - EReference DEFINITION__OWNED_USAGE = eINSTANCE.getDefinition_OwnedUsage(); + EReference RELATIONSHIP__TARGET = eINSTANCE.getRelationship_Target(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ReferenceUsageImpl Reference Usage}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.RenderingDefinitionImpl Rendering Definition}' class. * * - * @see org.omg.sysml.lang.sysml.impl.ReferenceUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getReferenceUsage() + * @see org.omg.sysml.lang.sysml.impl.RenderingDefinitionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getRenderingDefinition() * @generated */ - EClass REFERENCE_USAGE = eINSTANCE.getReferenceUsage(); + EClass RENDERING_DEFINITION = eINSTANCE.getRenderingDefinition(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.AttributeUsageImpl Attribute Usage}' class. + * The meta object literal for the 'Rendering' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.AttributeUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getAttributeUsage() * @generated */ - EClass ATTRIBUTE_USAGE = eINSTANCE.getAttributeUsage(); + EReference RENDERING_DEFINITION__RENDERING = eINSTANCE.getRenderingDefinition_Rendering(); /** - * The meta object literal for the 'Attribute Definition' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.RenderingUsageImpl Rendering Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.RenderingUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getRenderingUsage() * @generated */ - EReference ATTRIBUTE_USAGE__ATTRIBUTE_DEFINITION = eINSTANCE.getAttributeUsage_AttributeDefinition(); + EClass RENDERING_USAGE = eINSTANCE.getRenderingUsage(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.EnumerationUsageImpl Enumeration Usage}' class. + * The meta object literal for the 'Rendering Definition' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.EnumerationUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getEnumerationUsage() * @generated */ - EClass ENUMERATION_USAGE = eINSTANCE.getEnumerationUsage(); + EReference RENDERING_USAGE__RENDERING_DEFINITION = eINSTANCE.getRenderingUsage_RenderingDefinition(); /** - * The meta object literal for the 'Enumeration Definition' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.RequirementConstraintMembershipImpl Requirement Constraint Membership}' class. * * + * @see org.omg.sysml.lang.sysml.impl.RequirementConstraintMembershipImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getRequirementConstraintMembership() * @generated */ - EReference ENUMERATION_USAGE__ENUMERATION_DEFINITION = eINSTANCE.getEnumerationUsage_EnumerationDefinition(); + EClass REQUIREMENT_CONSTRAINT_MEMBERSHIP = eINSTANCE.getRequirementConstraintMembership(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.EnumerationDefinitionImpl Enumeration Definition}' class. + * The meta object literal for the 'Kind' attribute feature. * * - * @see org.omg.sysml.lang.sysml.impl.EnumerationDefinitionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getEnumerationDefinition() * @generated */ - EClass ENUMERATION_DEFINITION = eINSTANCE.getEnumerationDefinition(); + EAttribute REQUIREMENT_CONSTRAINT_MEMBERSHIP__KIND = eINSTANCE.getRequirementConstraintMembership_Kind(); /** - * The meta object literal for the 'Enumerated Value' reference list feature. + * The meta object literal for the 'Owned Constraint' reference feature. * * * @generated */ - EReference ENUMERATION_DEFINITION__ENUMERATED_VALUE = eINSTANCE.getEnumerationDefinition_EnumeratedValue(); + EReference REQUIREMENT_CONSTRAINT_MEMBERSHIP__OWNED_CONSTRAINT = eINSTANCE.getRequirementConstraintMembership_OwnedConstraint(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.AttributeDefinitionImpl Attribute Definition}' class. + * The meta object literal for the 'Referenced Constraint' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.AttributeDefinitionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getAttributeDefinition() * @generated */ - EClass ATTRIBUTE_DEFINITION = eINSTANCE.getAttributeDefinition(); + EReference REQUIREMENT_CONSTRAINT_MEMBERSHIP__REFERENCED_CONSTRAINT = eINSTANCE.getRequirementConstraintMembership_ReferencedConstraint(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ItemUsageImpl Item Usage}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.RequirementDefinitionImpl Requirement Definition}' class. * * - * @see org.omg.sysml.lang.sysml.impl.ItemUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getItemUsage() + * @see org.omg.sysml.lang.sysml.impl.RequirementDefinitionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getRequirementDefinition() * @generated */ - EClass ITEM_USAGE = eINSTANCE.getItemUsage(); + EClass REQUIREMENT_DEFINITION = eINSTANCE.getRequirementDefinition(); /** - * The meta object literal for the 'Item Definition' reference list feature. + * The meta object literal for the 'Actor Parameter' reference list feature. * * * @generated */ - EReference ITEM_USAGE__ITEM_DEFINITION = eINSTANCE.getItemUsage_ItemDefinition(); + EReference REQUIREMENT_DEFINITION__ACTOR_PARAMETER = eINSTANCE.getRequirementDefinition_ActorParameter(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.PartUsageImpl Part Usage}' class. + * The meta object literal for the 'Assumed Constraint' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.PartUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getPartUsage() * @generated */ - EClass PART_USAGE = eINSTANCE.getPartUsage(); + EReference REQUIREMENT_DEFINITION__ASSUMED_CONSTRAINT = eINSTANCE.getRequirementDefinition_AssumedConstraint(); /** - * The meta object literal for the 'Part Definition' reference list feature. + * The meta object literal for the 'Framed Concern' reference list feature. * * * @generated */ - EReference PART_USAGE__PART_DEFINITION = eINSTANCE.getPartUsage_PartDefinition(); + EReference REQUIREMENT_DEFINITION__FRAMED_CONCERN = eINSTANCE.getRequirementDefinition_FramedConcern(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.PartDefinitionImpl Part Definition}' class. + * The meta object literal for the 'Req Id' attribute feature. * * - * @see org.omg.sysml.lang.sysml.impl.PartDefinitionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getPartDefinition() * @generated */ - EClass PART_DEFINITION = eINSTANCE.getPartDefinition(); + EAttribute REQUIREMENT_DEFINITION__REQ_ID = eINSTANCE.getRequirementDefinition_ReqId(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ItemDefinitionImpl Item Definition}' class. + * The meta object literal for the 'Required Constraint' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.ItemDefinitionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getItemDefinition() * @generated */ - EClass ITEM_DEFINITION = eINSTANCE.getItemDefinition(); + EReference REQUIREMENT_DEFINITION__REQUIRED_CONSTRAINT = eINSTANCE.getRequirementDefinition_RequiredConstraint(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.OccurrenceDefinitionImpl Occurrence Definition}' class. + * The meta object literal for the 'Stakeholder Parameter' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.OccurrenceDefinitionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getOccurrenceDefinition() * @generated */ - EClass OCCURRENCE_DEFINITION = eINSTANCE.getOccurrenceDefinition(); + EReference REQUIREMENT_DEFINITION__STAKEHOLDER_PARAMETER = eINSTANCE.getRequirementDefinition_StakeholderParameter(); /** - * The meta object literal for the 'Is Individual' attribute feature. + * The meta object literal for the 'Subject Parameter' reference feature. * * * @generated */ - EAttribute OCCURRENCE_DEFINITION__IS_INDIVIDUAL = eINSTANCE.getOccurrenceDefinition_IsIndividual(); + EReference REQUIREMENT_DEFINITION__SUBJECT_PARAMETER = eINSTANCE.getRequirementDefinition_SubjectParameter(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.PortUsageImpl Port Usage}' class. + * The meta object literal for the 'Text' attribute list feature. * * - * @see org.omg.sysml.lang.sysml.impl.PortUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getPortUsage() * @generated */ - EClass PORT_USAGE = eINSTANCE.getPortUsage(); + EAttribute REQUIREMENT_DEFINITION__TEXT = eINSTANCE.getRequirementDefinition_Text(); /** - * The meta object literal for the 'Port Definition' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.RequirementUsageImpl Requirement Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.RequirementUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getRequirementUsage() * @generated */ - EReference PORT_USAGE__PORT_DEFINITION = eINSTANCE.getPortUsage_PortDefinition(); + EClass REQUIREMENT_USAGE = eINSTANCE.getRequirementUsage(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.PortDefinitionImpl Port Definition}' class. + * The meta object literal for the 'Actor Parameter' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.PortDefinitionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getPortDefinition() * @generated */ - EClass PORT_DEFINITION = eINSTANCE.getPortDefinition(); + EReference REQUIREMENT_USAGE__ACTOR_PARAMETER = eINSTANCE.getRequirementUsage_ActorParameter(); /** - * The meta object literal for the 'Conjugated Port Definition' reference feature. + * The meta object literal for the 'Assumed Constraint' reference list feature. * * * @generated */ - EReference PORT_DEFINITION__CONJUGATED_PORT_DEFINITION = eINSTANCE.getPortDefinition_ConjugatedPortDefinition(); + EReference REQUIREMENT_USAGE__ASSUMED_CONSTRAINT = eINSTANCE.getRequirementUsage_AssumedConstraint(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ConjugatedPortDefinitionImpl Conjugated Port Definition}' class. + * The meta object literal for the 'Framed Concern' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.ConjugatedPortDefinitionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getConjugatedPortDefinition() * @generated */ - EClass CONJUGATED_PORT_DEFINITION = eINSTANCE.getConjugatedPortDefinition(); + EReference REQUIREMENT_USAGE__FRAMED_CONCERN = eINSTANCE.getRequirementUsage_FramedConcern(); /** - * The meta object literal for the 'Owned Port Conjugator' reference feature. + * The meta object literal for the 'Req Id' attribute feature. * * * @generated */ - EReference CONJUGATED_PORT_DEFINITION__OWNED_PORT_CONJUGATOR = eINSTANCE.getConjugatedPortDefinition_OwnedPortConjugator(); + EAttribute REQUIREMENT_USAGE__REQ_ID = eINSTANCE.getRequirementUsage_ReqId(); /** - * The meta object literal for the 'Original Port Definition' reference feature. + * The meta object literal for the 'Required Constraint' reference list feature. * * * @generated */ - EReference CONJUGATED_PORT_DEFINITION__ORIGINAL_PORT_DEFINITION = eINSTANCE.getConjugatedPortDefinition_OriginalPortDefinition(); + EReference REQUIREMENT_USAGE__REQUIRED_CONSTRAINT = eINSTANCE.getRequirementUsage_RequiredConstraint(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.PortConjugationImpl Port Conjugation}' class. + * The meta object literal for the 'Requirement Definition' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.PortConjugationImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getPortConjugation() * @generated */ - EClass PORT_CONJUGATION = eINSTANCE.getPortConjugation(); + EReference REQUIREMENT_USAGE__REQUIREMENT_DEFINITION = eINSTANCE.getRequirementUsage_RequirementDefinition(); /** - * The meta object literal for the 'Original Port Definition' reference feature. + * The meta object literal for the 'Stakeholder Parameter' reference list feature. * * * @generated */ - EReference PORT_CONJUGATION__ORIGINAL_PORT_DEFINITION = eINSTANCE.getPortConjugation_OriginalPortDefinition(); + EReference REQUIREMENT_USAGE__STAKEHOLDER_PARAMETER = eINSTANCE.getRequirementUsage_StakeholderParameter(); /** - * The meta object literal for the 'Conjugated Port Definition' reference feature. + * The meta object literal for the 'Subject Parameter' reference feature. * * * @generated */ - EReference PORT_CONJUGATION__CONJUGATED_PORT_DEFINITION = eINSTANCE.getPortConjugation_ConjugatedPortDefinition(); + EReference REQUIREMENT_USAGE__SUBJECT_PARAMETER = eINSTANCE.getRequirementUsage_SubjectParameter(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ConnectorAsUsageImpl Connector As Usage}' class. + * The meta object literal for the 'Text' attribute list feature. + * + * + * @generated + */ + EAttribute REQUIREMENT_USAGE__TEXT = eINSTANCE.getRequirementUsage_Text(); + + /** + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.RequirementVerificationMembershipImpl Requirement Verification Membership}' class. * * - * @see org.omg.sysml.lang.sysml.impl.ConnectorAsUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getConnectorAsUsage() + * @see org.omg.sysml.lang.sysml.impl.RequirementVerificationMembershipImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getRequirementVerificationMembership() * @generated */ - EClass CONNECTOR_AS_USAGE = eINSTANCE.getConnectorAsUsage(); + EClass REQUIREMENT_VERIFICATION_MEMBERSHIP = eINSTANCE.getRequirementVerificationMembership(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.FlowUsageImpl Flow Usage}' class. + * The meta object literal for the 'Owned Requirement' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.FlowUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getFlowUsage() * @generated */ - EClass FLOW_USAGE = eINSTANCE.getFlowUsage(); + EReference REQUIREMENT_VERIFICATION_MEMBERSHIP__OWNED_REQUIREMENT = eINSTANCE.getRequirementVerificationMembership_OwnedRequirement(); /** - * The meta object literal for the 'Flow Definition' reference list feature. + * The meta object literal for the 'Verified Requirement' reference feature. * * * @generated */ - EReference FLOW_USAGE__FLOW_DEFINITION = eINSTANCE.getFlowUsage_FlowDefinition(); + EReference REQUIREMENT_VERIFICATION_MEMBERSHIP__VERIFIED_REQUIREMENT = eINSTANCE.getRequirementVerificationMembership_VerifiedRequirement(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.InterfaceUsageImpl Interface Usage}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ResultExpressionMembershipImpl Result Expression Membership}' class. * * - * @see org.omg.sysml.lang.sysml.impl.InterfaceUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getInterfaceUsage() + * @see org.omg.sysml.lang.sysml.impl.ResultExpressionMembershipImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getResultExpressionMembership() * @generated */ - EClass INTERFACE_USAGE = eINSTANCE.getInterfaceUsage(); + EClass RESULT_EXPRESSION_MEMBERSHIP = eINSTANCE.getResultExpressionMembership(); /** - * The meta object literal for the 'Interface Definition' reference list feature. + * The meta object literal for the 'Owned Result Expression' reference feature. * * * @generated */ - EReference INTERFACE_USAGE__INTERFACE_DEFINITION = eINSTANCE.getInterfaceUsage_InterfaceDefinition(); + EReference RESULT_EXPRESSION_MEMBERSHIP__OWNED_RESULT_EXPRESSION = eINSTANCE.getResultExpressionMembership_OwnedResultExpression(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ConnectionUsageImpl Connection Usage}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ReturnParameterMembershipImpl Return Parameter Membership}' class. * * - * @see org.omg.sysml.lang.sysml.impl.ConnectionUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getConnectionUsage() + * @see org.omg.sysml.lang.sysml.impl.ReturnParameterMembershipImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getReturnParameterMembership() * @generated */ - EClass CONNECTION_USAGE = eINSTANCE.getConnectionUsage(); + EClass RETURN_PARAMETER_MEMBERSHIP = eINSTANCE.getReturnParameterMembership(); /** - * The meta object literal for the 'Connection Definition' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.SatisfyRequirementUsageImpl Satisfy Requirement Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.SatisfyRequirementUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getSatisfyRequirementUsage() * @generated */ - EReference CONNECTION_USAGE__CONNECTION_DEFINITION = eINSTANCE.getConnectionUsage_ConnectionDefinition(); + EClass SATISFY_REQUIREMENT_USAGE = eINSTANCE.getSatisfyRequirementUsage(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.InterfaceDefinitionImpl Interface Definition}' class. + * The meta object literal for the 'Satisfied Requirement' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.InterfaceDefinitionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getInterfaceDefinition() * @generated */ - EClass INTERFACE_DEFINITION = eINSTANCE.getInterfaceDefinition(); + EReference SATISFY_REQUIREMENT_USAGE__SATISFIED_REQUIREMENT = eINSTANCE.getSatisfyRequirementUsage_SatisfiedRequirement(); /** - * The meta object literal for the 'Interface End' reference list feature. + * The meta object literal for the 'Satisfying Feature' reference feature. * * * @generated */ - EReference INTERFACE_DEFINITION__INTERFACE_END = eINSTANCE.getInterfaceDefinition_InterfaceEnd(); + EReference SATISFY_REQUIREMENT_USAGE__SATISFYING_FEATURE = eINSTANCE.getSatisfyRequirementUsage_SatisfyingFeature(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ConnectionDefinitionImpl Connection Definition}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.SelectExpressionImpl Select Expression}' class. * * - * @see org.omg.sysml.lang.sysml.impl.ConnectionDefinitionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getConnectionDefinition() + * @see org.omg.sysml.lang.sysml.impl.SelectExpressionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getSelectExpression() * @generated */ - EClass CONNECTION_DEFINITION = eINSTANCE.getConnectionDefinition(); + EClass SELECT_EXPRESSION = eINSTANCE.getSelectExpression(); /** - * The meta object literal for the 'Connection End' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.SendActionUsageImpl Send Action Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.SendActionUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getSendActionUsage() * @generated */ - EReference CONNECTION_DEFINITION__CONNECTION_END = eINSTANCE.getConnectionDefinition_ConnectionEnd(); + EClass SEND_ACTION_USAGE = eINSTANCE.getSendActionUsage(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.AllocationUsageImpl Allocation Usage}' class. + * The meta object literal for the 'Payload Argument' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.AllocationUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getAllocationUsage() * @generated */ - EClass ALLOCATION_USAGE = eINSTANCE.getAllocationUsage(); + EReference SEND_ACTION_USAGE__PAYLOAD_ARGUMENT = eINSTANCE.getSendActionUsage_PayloadArgument(); /** - * The meta object literal for the 'Allocation Definition' reference list feature. + * The meta object literal for the 'Receiver Argument' reference feature. * * * @generated */ - EReference ALLOCATION_USAGE__ALLOCATION_DEFINITION = eINSTANCE.getAllocationUsage_AllocationDefinition(); + EReference SEND_ACTION_USAGE__RECEIVER_ARGUMENT = eINSTANCE.getSendActionUsage_ReceiverArgument(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.AllocationDefinitionImpl Allocation Definition}' class. + * The meta object literal for the 'Sender Argument' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.AllocationDefinitionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getAllocationDefinition() * @generated */ - EClass ALLOCATION_DEFINITION = eINSTANCE.getAllocationDefinition(); + EReference SEND_ACTION_USAGE__SENDER_ARGUMENT = eINSTANCE.getSendActionUsage_SenderArgument(); /** - * The meta object literal for the 'Allocation' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.SpecializationImpl Specialization}' class. * * + * @see org.omg.sysml.lang.sysml.impl.SpecializationImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getSpecialization() * @generated */ - EReference ALLOCATION_DEFINITION__ALLOCATION = eINSTANCE.getAllocationDefinition_Allocation(); + EClass SPECIALIZATION = eINSTANCE.getSpecialization(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.StateUsageImpl State Usage}' class. + * The meta object literal for the 'General' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.StateUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getStateUsage() * @generated */ - EClass STATE_USAGE = eINSTANCE.getStateUsage(); + EReference SPECIALIZATION__GENERAL = eINSTANCE.getSpecialization_General(); /** - * The meta object literal for the 'State Definition' reference list feature. + * The meta object literal for the 'Owning Type' reference feature. * * * @generated */ - EReference STATE_USAGE__STATE_DEFINITION = eINSTANCE.getStateUsage_StateDefinition(); + EReference SPECIALIZATION__OWNING_TYPE = eINSTANCE.getSpecialization_OwningType(); /** - * The meta object literal for the 'Entry Action' reference feature. + * The meta object literal for the 'Specific' reference feature. * * * @generated */ - EReference STATE_USAGE__ENTRY_ACTION = eINSTANCE.getStateUsage_EntryAction(); + EReference SPECIALIZATION__SPECIFIC = eINSTANCE.getSpecialization_Specific(); /** - * The meta object literal for the 'Do Action' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.StakeholderMembershipImpl Stakeholder Membership}' class. * * + * @see org.omg.sysml.lang.sysml.impl.StakeholderMembershipImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getStakeholderMembership() * @generated */ - EReference STATE_USAGE__DO_ACTION = eINSTANCE.getStateUsage_DoAction(); + EClass STAKEHOLDER_MEMBERSHIP = eINSTANCE.getStakeholderMembership(); /** - * The meta object literal for the 'Exit Action' reference feature. + * The meta object literal for the 'Owned Stakeholder Parameter' reference feature. * * * @generated */ - EReference STATE_USAGE__EXIT_ACTION = eINSTANCE.getStateUsage_ExitAction(); + EReference STAKEHOLDER_MEMBERSHIP__OWNED_STAKEHOLDER_PARAMETER = eINSTANCE.getStakeholderMembership_OwnedStakeholderParameter(); /** - * The meta object literal for the 'Is Parallel' attribute feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.StateDefinitionImpl State Definition}' class. * * + * @see org.omg.sysml.lang.sysml.impl.StateDefinitionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getStateDefinition() * @generated */ - EAttribute STATE_USAGE__IS_PARALLEL = eINSTANCE.getStateUsage_IsParallel(); + EClass STATE_DEFINITION = eINSTANCE.getStateDefinition(); /** - * The meta object literal for the 'Is Substate Usage' operation. + * The meta object literal for the 'Do Action' reference feature. * * * @generated */ - EOperation STATE_USAGE___IS_SUBSTATE_USAGE__BOOLEAN = eINSTANCE.getStateUsage__IsSubstateUsage__boolean(); + EReference STATE_DEFINITION__DO_ACTION = eINSTANCE.getStateDefinition_DoAction(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.TransitionUsageImpl Transition Usage}' class. + * The meta object literal for the 'Entry Action' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.TransitionUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getTransitionUsage() * @generated */ - EClass TRANSITION_USAGE = eINSTANCE.getTransitionUsage(); + EReference STATE_DEFINITION__ENTRY_ACTION = eINSTANCE.getStateDefinition_EntryAction(); /** - * The meta object literal for the 'Source' reference feature. + * The meta object literal for the 'Exit Action' reference feature. * * * @generated */ - EReference TRANSITION_USAGE__SOURCE = eINSTANCE.getTransitionUsage_Source(); + EReference STATE_DEFINITION__EXIT_ACTION = eINSTANCE.getStateDefinition_ExitAction(); /** - * The meta object literal for the 'Target' reference feature. + * The meta object literal for the 'Is Parallel' attribute feature. * * * @generated */ - EReference TRANSITION_USAGE__TARGET = eINSTANCE.getTransitionUsage_Target(); + EAttribute STATE_DEFINITION__IS_PARALLEL = eINSTANCE.getStateDefinition_IsParallel(); /** - * The meta object literal for the 'Trigger Action' reference list feature. + * The meta object literal for the 'State' reference list feature. * * * @generated */ - EReference TRANSITION_USAGE__TRIGGER_ACTION = eINSTANCE.getTransitionUsage_TriggerAction(); + EReference STATE_DEFINITION__STATE = eINSTANCE.getStateDefinition_State(); /** - * The meta object literal for the 'Guard Expression' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.StateSubactionMembershipImpl State Subaction Membership}' class. * * + * @see org.omg.sysml.lang.sysml.impl.StateSubactionMembershipImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getStateSubactionMembership() * @generated */ - EReference TRANSITION_USAGE__GUARD_EXPRESSION = eINSTANCE.getTransitionUsage_GuardExpression(); + EClass STATE_SUBACTION_MEMBERSHIP = eINSTANCE.getStateSubactionMembership(); /** - * The meta object literal for the 'Effect Action' reference list feature. + * The meta object literal for the 'Action' reference feature. * * * @generated */ - EReference TRANSITION_USAGE__EFFECT_ACTION = eINSTANCE.getTransitionUsage_EffectAction(); + EReference STATE_SUBACTION_MEMBERSHIP__ACTION = eINSTANCE.getStateSubactionMembership_Action(); /** - * The meta object literal for the 'Succession' reference feature. + * The meta object literal for the 'Kind' attribute feature. * * * @generated */ - EReference TRANSITION_USAGE__SUCCESSION = eINSTANCE.getTransitionUsage_Succession(); + EAttribute STATE_SUBACTION_MEMBERSHIP__KIND = eINSTANCE.getStateSubactionMembership_Kind(); /** - * The meta object literal for the 'Trigger Payload Parameter' operation. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.StateUsageImpl State Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.StateUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getStateUsage() * @generated */ - EOperation TRANSITION_USAGE___TRIGGER_PAYLOAD_PARAMETER = eINSTANCE.getTransitionUsage__TriggerPayloadParameter(); + EClass STATE_USAGE = eINSTANCE.getStateUsage(); /** - * The meta object literal for the 'Source Feature' operation. + * The meta object literal for the 'Do Action' reference feature. * * * @generated */ - EOperation TRANSITION_USAGE___SOURCE_FEATURE = eINSTANCE.getTransitionUsage__SourceFeature(); + EReference STATE_USAGE__DO_ACTION = eINSTANCE.getStateUsage_DoAction(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.AcceptActionUsageImpl Accept Action Usage}' class. + * The meta object literal for the 'Entry Action' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.AcceptActionUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getAcceptActionUsage() * @generated */ - EClass ACCEPT_ACTION_USAGE = eINSTANCE.getAcceptActionUsage(); + EReference STATE_USAGE__ENTRY_ACTION = eINSTANCE.getStateUsage_EntryAction(); /** - * The meta object literal for the 'Receiver Argument' reference feature. + * The meta object literal for the 'Exit Action' reference feature. * * * @generated */ - EReference ACCEPT_ACTION_USAGE__RECEIVER_ARGUMENT = eINSTANCE.getAcceptActionUsage_ReceiverArgument(); + EReference STATE_USAGE__EXIT_ACTION = eINSTANCE.getStateUsage_ExitAction(); /** - * The meta object literal for the 'Payload Parameter' reference feature. + * The meta object literal for the 'Is Parallel' attribute feature. * * * @generated */ - EReference ACCEPT_ACTION_USAGE__PAYLOAD_PARAMETER = eINSTANCE.getAcceptActionUsage_PayloadParameter(); + EAttribute STATE_USAGE__IS_PARALLEL = eINSTANCE.getStateUsage_IsParallel(); /** - * The meta object literal for the 'Payload Argument' reference feature. + * The meta object literal for the 'State Definition' reference list feature. * * * @generated */ - EReference ACCEPT_ACTION_USAGE__PAYLOAD_ARGUMENT = eINSTANCE.getAcceptActionUsage_PayloadArgument(); + EReference STATE_USAGE__STATE_DEFINITION = eINSTANCE.getStateUsage_StateDefinition(); /** - * The meta object literal for the 'Is Trigger Action' operation. + * The meta object literal for the 'Is Substate Usage' operation. * * * @generated */ - EOperation ACCEPT_ACTION_USAGE___IS_TRIGGER_ACTION = eINSTANCE.getAcceptActionUsage__IsTriggerAction(); + EOperation STATE_USAGE___IS_SUBSTATE_USAGE__BOOLEAN = eINSTANCE.getStateUsage__IsSubstateUsage__boolean(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ConstraintUsageImpl Constraint Usage}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.StepImpl Step}' class. * * - * @see org.omg.sysml.lang.sysml.impl.ConstraintUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getConstraintUsage() + * @see org.omg.sysml.lang.sysml.impl.StepImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getStep() * @generated */ - EClass CONSTRAINT_USAGE = eINSTANCE.getConstraintUsage(); + EClass STEP = eINSTANCE.getStep(); /** - * The meta object literal for the 'Constraint Definition' reference feature. + * The meta object literal for the 'Behavior' reference list feature. * * * @generated */ - EReference CONSTRAINT_USAGE__CONSTRAINT_DEFINITION = eINSTANCE.getConstraintUsage_ConstraintDefinition(); + EReference STEP__BEHAVIOR = eINSTANCE.getStep_Behavior(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.RequirementUsageImpl Requirement Usage}' class. + * The meta object literal for the 'Parameter' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.RequirementUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getRequirementUsage() * @generated */ - EClass REQUIREMENT_USAGE = eINSTANCE.getRequirementUsage(); + EReference STEP__PARAMETER = eINSTANCE.getStep_Parameter(); /** - * The meta object literal for the 'Requirement Definition' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.StructureImpl Structure}' class. * * + * @see org.omg.sysml.lang.sysml.impl.StructureImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getStructure() * @generated */ - EReference REQUIREMENT_USAGE__REQUIREMENT_DEFINITION = eINSTANCE.getRequirementUsage_RequirementDefinition(); + EClass STRUCTURE = eINSTANCE.getStructure(); /** - * The meta object literal for the 'Req Id' attribute feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.SubclassificationImpl Subclassification}' class. * * + * @see org.omg.sysml.lang.sysml.impl.SubclassificationImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getSubclassification() * @generated */ - EAttribute REQUIREMENT_USAGE__REQ_ID = eINSTANCE.getRequirementUsage_ReqId(); + EClass SUBCLASSIFICATION = eINSTANCE.getSubclassification(); /** - * The meta object literal for the 'Text' attribute list feature. + * The meta object literal for the 'Owning Classifier' reference feature. * * * @generated */ - EAttribute REQUIREMENT_USAGE__TEXT = eINSTANCE.getRequirementUsage_Text(); + EReference SUBCLASSIFICATION__OWNING_CLASSIFIER = eINSTANCE.getSubclassification_OwningClassifier(); /** - * The meta object literal for the 'Required Constraint' reference list feature. + * The meta object literal for the 'Subclassifier' reference feature. * * * @generated */ - EReference REQUIREMENT_USAGE__REQUIRED_CONSTRAINT = eINSTANCE.getRequirementUsage_RequiredConstraint(); + EReference SUBCLASSIFICATION__SUBCLASSIFIER = eINSTANCE.getSubclassification_Subclassifier(); /** - * The meta object literal for the 'Assumed Constraint' reference list feature. + * The meta object literal for the 'Superclassifier' reference feature. * * * @generated */ - EReference REQUIREMENT_USAGE__ASSUMED_CONSTRAINT = eINSTANCE.getRequirementUsage_AssumedConstraint(); + EReference SUBCLASSIFICATION__SUPERCLASSIFIER = eINSTANCE.getSubclassification_Superclassifier(); /** - * The meta object literal for the 'Subject Parameter' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.SubjectMembershipImpl Subject Membership}' class. * * + * @see org.omg.sysml.lang.sysml.impl.SubjectMembershipImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getSubjectMembership() * @generated */ - EReference REQUIREMENT_USAGE__SUBJECT_PARAMETER = eINSTANCE.getRequirementUsage_SubjectParameter(); + EClass SUBJECT_MEMBERSHIP = eINSTANCE.getSubjectMembership(); /** - * The meta object literal for the 'Framed Concern' reference list feature. + * The meta object literal for the 'Owned Subject Parameter' reference feature. * * * @generated */ - EReference REQUIREMENT_USAGE__FRAMED_CONCERN = eINSTANCE.getRequirementUsage_FramedConcern(); + EReference SUBJECT_MEMBERSHIP__OWNED_SUBJECT_PARAMETER = eINSTANCE.getSubjectMembership_OwnedSubjectParameter(); /** - * The meta object literal for the 'Actor Parameter' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.SubsettingImpl Subsetting}' class. * * + * @see org.omg.sysml.lang.sysml.impl.SubsettingImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getSubsetting() * @generated */ - EReference REQUIREMENT_USAGE__ACTOR_PARAMETER = eINSTANCE.getRequirementUsage_ActorParameter(); + EClass SUBSETTING = eINSTANCE.getSubsetting(); /** - * The meta object literal for the 'Stakeholder Parameter' reference list feature. + * The meta object literal for the 'Owning Feature' reference feature. * * * @generated */ - EReference REQUIREMENT_USAGE__STAKEHOLDER_PARAMETER = eINSTANCE.getRequirementUsage_StakeholderParameter(); + EReference SUBSETTING__OWNING_FEATURE = eINSTANCE.getSubsetting_OwningFeature(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.RequirementDefinitionImpl Requirement Definition}' class. + * The meta object literal for the 'Subsetted Feature' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.RequirementDefinitionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getRequirementDefinition() * @generated */ - EClass REQUIREMENT_DEFINITION = eINSTANCE.getRequirementDefinition(); + EReference SUBSETTING__SUBSETTED_FEATURE = eINSTANCE.getSubsetting_SubsettedFeature(); /** - * The meta object literal for the 'Req Id' attribute feature. + * The meta object literal for the 'Subsetting Feature' reference feature. * * * @generated */ - EAttribute REQUIREMENT_DEFINITION__REQ_ID = eINSTANCE.getRequirementDefinition_ReqId(); + EReference SUBSETTING__SUBSETTING_FEATURE = eINSTANCE.getSubsetting_SubsettingFeature(); /** - * The meta object literal for the 'Text' attribute list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.SuccessionImpl Succession}' class. * * + * @see org.omg.sysml.lang.sysml.impl.SuccessionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getSuccession() * @generated */ - EAttribute REQUIREMENT_DEFINITION__TEXT = eINSTANCE.getRequirementDefinition_Text(); + EClass SUCCESSION = eINSTANCE.getSuccession(); /** - * The meta object literal for the 'Subject Parameter' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.SuccessionAsUsageImpl Succession As Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.SuccessionAsUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getSuccessionAsUsage() * @generated */ - EReference REQUIREMENT_DEFINITION__SUBJECT_PARAMETER = eINSTANCE.getRequirementDefinition_SubjectParameter(); + EClass SUCCESSION_AS_USAGE = eINSTANCE.getSuccessionAsUsage(); /** - * The meta object literal for the 'Actor Parameter' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.SuccessionFlowImpl Succession Flow}' class. * * + * @see org.omg.sysml.lang.sysml.impl.SuccessionFlowImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getSuccessionFlow() * @generated */ - EReference REQUIREMENT_DEFINITION__ACTOR_PARAMETER = eINSTANCE.getRequirementDefinition_ActorParameter(); + EClass SUCCESSION_FLOW = eINSTANCE.getSuccessionFlow(); /** - * The meta object literal for the 'Stakeholder Parameter' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.SuccessionFlowUsageImpl Succession Flow Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.SuccessionFlowUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getSuccessionFlowUsage() * @generated */ - EReference REQUIREMENT_DEFINITION__STAKEHOLDER_PARAMETER = eINSTANCE.getRequirementDefinition_StakeholderParameter(); + EClass SUCCESSION_FLOW_USAGE = eINSTANCE.getSuccessionFlowUsage(); /** - * The meta object literal for the 'Assumed Constraint' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.TerminateActionUsageImpl Terminate Action Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.TerminateActionUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getTerminateActionUsage() * @generated */ - EReference REQUIREMENT_DEFINITION__ASSUMED_CONSTRAINT = eINSTANCE.getRequirementDefinition_AssumedConstraint(); + EClass TERMINATE_ACTION_USAGE = eINSTANCE.getTerminateActionUsage(); /** - * The meta object literal for the 'Required Constraint' reference list feature. + * The meta object literal for the 'Terminated Occurrence Argument' reference feature. * * * @generated */ - EReference REQUIREMENT_DEFINITION__REQUIRED_CONSTRAINT = eINSTANCE.getRequirementDefinition_RequiredConstraint(); + EReference TERMINATE_ACTION_USAGE__TERMINATED_OCCURRENCE_ARGUMENT = eINSTANCE.getTerminateActionUsage_TerminatedOccurrenceArgument(); /** - * The meta object literal for the 'Framed Concern' reference list feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.TextualRepresentationImpl Textual Representation}' class. * * + * @see org.omg.sysml.lang.sysml.impl.TextualRepresentationImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getTextualRepresentation() * @generated */ - EReference REQUIREMENT_DEFINITION__FRAMED_CONCERN = eINSTANCE.getRequirementDefinition_FramedConcern(); + EClass TEXTUAL_REPRESENTATION = eINSTANCE.getTextualRepresentation(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ConstraintDefinitionImpl Constraint Definition}' class. + * The meta object literal for the 'Body' attribute feature. * * - * @see org.omg.sysml.lang.sysml.impl.ConstraintDefinitionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getConstraintDefinition() * @generated */ - EClass CONSTRAINT_DEFINITION = eINSTANCE.getConstraintDefinition(); + EAttribute TEXTUAL_REPRESENTATION__BODY = eINSTANCE.getTextualRepresentation_Body(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ConcernUsageImpl Concern Usage}' class. + * The meta object literal for the 'Language' attribute feature. * * - * @see org.omg.sysml.lang.sysml.impl.ConcernUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getConcernUsage() * @generated */ - EClass CONCERN_USAGE = eINSTANCE.getConcernUsage(); + EAttribute TEXTUAL_REPRESENTATION__LANGUAGE = eINSTANCE.getTextualRepresentation_Language(); /** - * The meta object literal for the 'Concern Definition' reference feature. + * The meta object literal for the 'Represented Element' reference feature. * * * @generated */ - EReference CONCERN_USAGE__CONCERN_DEFINITION = eINSTANCE.getConcernUsage_ConcernDefinition(); + EReference TEXTUAL_REPRESENTATION__REPRESENTED_ELEMENT = eINSTANCE.getTextualRepresentation_RepresentedElement(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ConcernDefinitionImpl Concern Definition}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.TransitionFeatureMembershipImpl Transition Feature Membership}' class. * * - * @see org.omg.sysml.lang.sysml.impl.ConcernDefinitionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getConcernDefinition() + * @see org.omg.sysml.lang.sysml.impl.TransitionFeatureMembershipImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getTransitionFeatureMembership() * @generated */ - EClass CONCERN_DEFINITION = eINSTANCE.getConcernDefinition(); + EClass TRANSITION_FEATURE_MEMBERSHIP = eINSTANCE.getTransitionFeatureMembership(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.AnalysisCaseUsageImpl Analysis Case Usage}' class. + * The meta object literal for the 'Kind' attribute feature. * * - * @see org.omg.sysml.lang.sysml.impl.AnalysisCaseUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getAnalysisCaseUsage() * @generated */ - EClass ANALYSIS_CASE_USAGE = eINSTANCE.getAnalysisCaseUsage(); + EAttribute TRANSITION_FEATURE_MEMBERSHIP__KIND = eINSTANCE.getTransitionFeatureMembership_Kind(); /** - * The meta object literal for the 'Analysis Case Definition' reference feature. + * The meta object literal for the 'Transition Feature' reference feature. * * * @generated */ - EReference ANALYSIS_CASE_USAGE__ANALYSIS_CASE_DEFINITION = eINSTANCE.getAnalysisCaseUsage_AnalysisCaseDefinition(); + EReference TRANSITION_FEATURE_MEMBERSHIP__TRANSITION_FEATURE = eINSTANCE.getTransitionFeatureMembership_TransitionFeature(); /** - * The meta object literal for the 'Result Expression' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.TransitionUsageImpl Transition Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.TransitionUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getTransitionUsage() * @generated */ - EReference ANALYSIS_CASE_USAGE__RESULT_EXPRESSION = eINSTANCE.getAnalysisCaseUsage_ResultExpression(); + EClass TRANSITION_USAGE = eINSTANCE.getTransitionUsage(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.AnalysisCaseDefinitionImpl Analysis Case Definition}' class. + * The meta object literal for the 'Effect Action' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.AnalysisCaseDefinitionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getAnalysisCaseDefinition() * @generated */ - EClass ANALYSIS_CASE_DEFINITION = eINSTANCE.getAnalysisCaseDefinition(); + EReference TRANSITION_USAGE__EFFECT_ACTION = eINSTANCE.getTransitionUsage_EffectAction(); /** - * The meta object literal for the 'Result Expression' reference feature. + * The meta object literal for the 'Guard Expression' reference list feature. * * * @generated */ - EReference ANALYSIS_CASE_DEFINITION__RESULT_EXPRESSION = eINSTANCE.getAnalysisCaseDefinition_ResultExpression(); + EReference TRANSITION_USAGE__GUARD_EXPRESSION = eINSTANCE.getTransitionUsage_GuardExpression(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.CaseDefinitionImpl Case Definition}' class. + * The meta object literal for the 'Source' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.CaseDefinitionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getCaseDefinition() * @generated */ - EClass CASE_DEFINITION = eINSTANCE.getCaseDefinition(); + EReference TRANSITION_USAGE__SOURCE = eINSTANCE.getTransitionUsage_Source(); /** - * The meta object literal for the 'Objective Requirement' reference feature. + * The meta object literal for the 'Succession' reference feature. * * * @generated */ - EReference CASE_DEFINITION__OBJECTIVE_REQUIREMENT = eINSTANCE.getCaseDefinition_ObjectiveRequirement(); + EReference TRANSITION_USAGE__SUCCESSION = eINSTANCE.getTransitionUsage_Succession(); /** - * The meta object literal for the 'Subject Parameter' reference feature. + * The meta object literal for the 'Target' reference feature. * * * @generated */ - EReference CASE_DEFINITION__SUBJECT_PARAMETER = eINSTANCE.getCaseDefinition_SubjectParameter(); + EReference TRANSITION_USAGE__TARGET = eINSTANCE.getTransitionUsage_Target(); /** - * The meta object literal for the 'Actor Parameter' reference list feature. + * The meta object literal for the 'Trigger Action' reference list feature. * * * @generated */ - EReference CASE_DEFINITION__ACTOR_PARAMETER = eINSTANCE.getCaseDefinition_ActorParameter(); + EReference TRANSITION_USAGE__TRIGGER_ACTION = eINSTANCE.getTransitionUsage_TriggerAction(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.CalculationDefinitionImpl Calculation Definition}' class. + * The meta object literal for the 'Source Feature' operation. * * - * @see org.omg.sysml.lang.sysml.impl.CalculationDefinitionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getCalculationDefinition() * @generated */ - EClass CALCULATION_DEFINITION = eINSTANCE.getCalculationDefinition(); + EOperation TRANSITION_USAGE___SOURCE_FEATURE = eINSTANCE.getTransitionUsage__SourceFeature(); /** - * The meta object literal for the 'Calculation' reference list feature. + * The meta object literal for the 'Trigger Payload Parameter' operation. * * * @generated */ - EReference CALCULATION_DEFINITION__CALCULATION = eINSTANCE.getCalculationDefinition_Calculation(); + EOperation TRANSITION_USAGE___TRIGGER_PAYLOAD_PARAMETER = eINSTANCE.getTransitionUsage__TriggerPayloadParameter(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ActionDefinitionImpl Action Definition}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.TriggerInvocationExpressionImpl Trigger Invocation Expression}' class. * * - * @see org.omg.sysml.lang.sysml.impl.ActionDefinitionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getActionDefinition() + * @see org.omg.sysml.lang.sysml.impl.TriggerInvocationExpressionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getTriggerInvocationExpression() * @generated */ - EClass ACTION_DEFINITION = eINSTANCE.getActionDefinition(); + EClass TRIGGER_INVOCATION_EXPRESSION = eINSTANCE.getTriggerInvocationExpression(); /** - * The meta object literal for the 'Action' reference list feature. + * The meta object literal for the 'Kind' attribute feature. * * * @generated */ - EReference ACTION_DEFINITION__ACTION = eINSTANCE.getActionDefinition_Action(); + EAttribute TRIGGER_INVOCATION_EXPRESSION__KIND = eINSTANCE.getTriggerInvocationExpression_Kind(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.UseCaseUsageImpl Use Case Usage}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.TypeImpl Type}' class. * * - * @see org.omg.sysml.lang.sysml.impl.UseCaseUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getUseCaseUsage() + * @see org.omg.sysml.lang.sysml.impl.TypeImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getType() * @generated */ - EClass USE_CASE_USAGE = eINSTANCE.getUseCaseUsage(); + EClass TYPE = eINSTANCE.getType(); /** - * The meta object literal for the 'Use Case Definition' reference feature. + * The meta object literal for the 'Differencing Type' reference list feature. * * * @generated */ - EReference USE_CASE_USAGE__USE_CASE_DEFINITION = eINSTANCE.getUseCaseUsage_UseCaseDefinition(); + EReference TYPE__DIFFERENCING_TYPE = eINSTANCE.getType_DifferencingType(); /** - * The meta object literal for the 'Included Use Case' reference list feature. + * The meta object literal for the 'Directed Feature' reference list feature. * * * @generated */ - EReference USE_CASE_USAGE__INCLUDED_USE_CASE = eINSTANCE.getUseCaseUsage_IncludedUseCase(); + EReference TYPE__DIRECTED_FEATURE = eINSTANCE.getType_DirectedFeature(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.UseCaseDefinitionImpl Use Case Definition}' class. + * The meta object literal for the 'End Feature' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.UseCaseDefinitionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getUseCaseDefinition() * @generated */ - EClass USE_CASE_DEFINITION = eINSTANCE.getUseCaseDefinition(); + EReference TYPE__END_FEATURE = eINSTANCE.getType_EndFeature(); /** - * The meta object literal for the 'Included Use Case' reference list feature. + * The meta object literal for the 'Feature' reference list feature. * * * @generated */ - EReference USE_CASE_DEFINITION__INCLUDED_USE_CASE = eINSTANCE.getUseCaseDefinition_IncludedUseCase(); + EReference TYPE__FEATURE = eINSTANCE.getType_Feature(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ViewUsageImpl View Usage}' class. + * The meta object literal for the 'Feature Membership' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.ViewUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getViewUsage() * @generated */ - EClass VIEW_USAGE = eINSTANCE.getViewUsage(); + EReference TYPE__FEATURE_MEMBERSHIP = eINSTANCE.getType_FeatureMembership(); /** - * The meta object literal for the 'View Definition' reference feature. + * The meta object literal for the 'Inherited Feature' reference list feature. * * * @generated */ - EReference VIEW_USAGE__VIEW_DEFINITION = eINSTANCE.getViewUsage_ViewDefinition(); + EReference TYPE__INHERITED_FEATURE = eINSTANCE.getType_InheritedFeature(); /** - * The meta object literal for the 'Satisfied Viewpoint' reference list feature. + * The meta object literal for the 'Inherited Membership' reference list feature. * * * @generated */ - EReference VIEW_USAGE__SATISFIED_VIEWPOINT = eINSTANCE.getViewUsage_SatisfiedViewpoint(); + EReference TYPE__INHERITED_MEMBERSHIP = eINSTANCE.getType_InheritedMembership(); /** - * The meta object literal for the 'Exposed Element' reference list feature. + * The meta object literal for the 'Input' reference list feature. * * * @generated */ - EReference VIEW_USAGE__EXPOSED_ELEMENT = eINSTANCE.getViewUsage_ExposedElement(); + EReference TYPE__INPUT = eINSTANCE.getType_Input(); /** - * The meta object literal for the 'View Rendering' reference feature. + * The meta object literal for the 'Intersecting Type' reference list feature. * * * @generated */ - EReference VIEW_USAGE__VIEW_RENDERING = eINSTANCE.getViewUsage_ViewRendering(); + EReference TYPE__INTERSECTING_TYPE = eINSTANCE.getType_IntersectingType(); /** - * The meta object literal for the 'View Condition' reference list feature. + * The meta object literal for the 'Is Abstract' attribute feature. * * * @generated */ - EReference VIEW_USAGE__VIEW_CONDITION = eINSTANCE.getViewUsage_ViewCondition(); + EAttribute TYPE__IS_ABSTRACT = eINSTANCE.getType_IsAbstract(); /** - * The meta object literal for the 'Include As Exposed' operation. + * The meta object literal for the 'Is Conjugated' attribute feature. * * * @generated */ - EOperation VIEW_USAGE___INCLUDE_AS_EXPOSED__ELEMENT = eINSTANCE.getViewUsage__IncludeAsExposed__Element(); + EAttribute TYPE__IS_CONJUGATED = eINSTANCE.getType_IsConjugated(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ViewDefinitionImpl View Definition}' class. + * The meta object literal for the 'Is Sufficient' attribute feature. * * - * @see org.omg.sysml.lang.sysml.impl.ViewDefinitionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getViewDefinition() * @generated */ - EClass VIEW_DEFINITION = eINSTANCE.getViewDefinition(); + EAttribute TYPE__IS_SUFFICIENT = eINSTANCE.getType_IsSufficient(); /** - * The meta object literal for the 'View' reference list feature. + * The meta object literal for the 'Multiplicity' reference feature. * * * @generated */ - EReference VIEW_DEFINITION__VIEW = eINSTANCE.getViewDefinition_View(); + EReference TYPE__MULTIPLICITY = eINSTANCE.getType_Multiplicity(); /** - * The meta object literal for the 'Satisfied Viewpoint' reference list feature. + * The meta object literal for the 'Output' reference list feature. * * * @generated */ - EReference VIEW_DEFINITION__SATISFIED_VIEWPOINT = eINSTANCE.getViewDefinition_SatisfiedViewpoint(); + EReference TYPE__OUTPUT = eINSTANCE.getType_Output(); /** - * The meta object literal for the 'View Rendering' reference feature. + * The meta object literal for the 'Owned Conjugator' reference feature. * * * @generated */ - EReference VIEW_DEFINITION__VIEW_RENDERING = eINSTANCE.getViewDefinition_ViewRendering(); + EReference TYPE__OWNED_CONJUGATOR = eINSTANCE.getType_OwnedConjugator(); /** - * The meta object literal for the 'View Condition' reference list feature. + * The meta object literal for the 'Owned Differencing' reference list feature. * * * @generated */ - EReference VIEW_DEFINITION__VIEW_CONDITION = eINSTANCE.getViewDefinition_ViewCondition(); + EReference TYPE__OWNED_DIFFERENCING = eINSTANCE.getType_OwnedDifferencing(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ViewpointUsageImpl Viewpoint Usage}' class. + * The meta object literal for the 'Owned Disjoining' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.ViewpointUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getViewpointUsage() * @generated */ - EClass VIEWPOINT_USAGE = eINSTANCE.getViewpointUsage(); + EReference TYPE__OWNED_DISJOINING = eINSTANCE.getType_OwnedDisjoining(); /** - * The meta object literal for the 'Viewpoint Definition' reference feature. + * The meta object literal for the 'Owned End Feature' reference list feature. * * * @generated */ - EReference VIEWPOINT_USAGE__VIEWPOINT_DEFINITION = eINSTANCE.getViewpointUsage_ViewpointDefinition(); + EReference TYPE__OWNED_END_FEATURE = eINSTANCE.getType_OwnedEndFeature(); /** - * The meta object literal for the 'Viewpoint Stakeholder' reference list feature. + * The meta object literal for the 'Owned Feature' reference list feature. * * * @generated */ - EReference VIEWPOINT_USAGE__VIEWPOINT_STAKEHOLDER = eINSTANCE.getViewpointUsage_ViewpointStakeholder(); + EReference TYPE__OWNED_FEATURE = eINSTANCE.getType_OwnedFeature(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ViewpointDefinitionImpl Viewpoint Definition}' class. + * The meta object literal for the 'Owned Feature Membership' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.ViewpointDefinitionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getViewpointDefinition() * @generated */ - EClass VIEWPOINT_DEFINITION = eINSTANCE.getViewpointDefinition(); + EReference TYPE__OWNED_FEATURE_MEMBERSHIP = eINSTANCE.getType_OwnedFeatureMembership(); /** - * The meta object literal for the 'Viewpoint Stakeholder' reference list feature. + * The meta object literal for the 'Owned Intersecting' reference list feature. * * * @generated */ - EReference VIEWPOINT_DEFINITION__VIEWPOINT_STAKEHOLDER = eINSTANCE.getViewpointDefinition_ViewpointStakeholder(); + EReference TYPE__OWNED_INTERSECTING = eINSTANCE.getType_OwnedIntersecting(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.RenderingUsageImpl Rendering Usage}' class. + * The meta object literal for the 'Owned Specialization' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.RenderingUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getRenderingUsage() * @generated */ - EClass RENDERING_USAGE = eINSTANCE.getRenderingUsage(); + EReference TYPE__OWNED_SPECIALIZATION = eINSTANCE.getType_OwnedSpecialization(); /** - * The meta object literal for the 'Rendering Definition' reference feature. + * The meta object literal for the 'Owned Unioning' reference list feature. * * * @generated */ - EReference RENDERING_USAGE__RENDERING_DEFINITION = eINSTANCE.getRenderingUsage_RenderingDefinition(); + EReference TYPE__OWNED_UNIONING = eINSTANCE.getType_OwnedUnioning(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.RenderingDefinitionImpl Rendering Definition}' class. + * The meta object literal for the 'Unioning Type' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.RenderingDefinitionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getRenderingDefinition() * @generated */ - EClass RENDERING_DEFINITION = eINSTANCE.getRenderingDefinition(); + EReference TYPE__UNIONING_TYPE = eINSTANCE.getType_UnioningType(); /** - * The meta object literal for the 'Rendering' reference list feature. + * The meta object literal for the 'All Redefined Features Of' operation. * * * @generated */ - EReference RENDERING_DEFINITION__RENDERING = eINSTANCE.getRenderingDefinition_Rendering(); + EOperation TYPE___ALL_REDEFINED_FEATURES_OF__MEMBERSHIP = eINSTANCE.getType__AllRedefinedFeaturesOf__Membership(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.MetadataUsageImpl Metadata Usage}' class. + * The meta object literal for the 'All Supertypes' operation. * * - * @see org.omg.sysml.lang.sysml.impl.MetadataUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getMetadataUsage() * @generated */ - EClass METADATA_USAGE = eINSTANCE.getMetadataUsage(); + EOperation TYPE___ALL_SUPERTYPES = eINSTANCE.getType__AllSupertypes(); /** - * The meta object literal for the 'Metadata Definition' reference feature. + * The meta object literal for the 'Direction Of' operation. * * * @generated */ - EReference METADATA_USAGE__METADATA_DEFINITION = eINSTANCE.getMetadataUsage_MetadataDefinition(); + EOperation TYPE___DIRECTION_OF__FEATURE = eINSTANCE.getType__DirectionOf__Feature(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.VerificationCaseDefinitionImpl Verification Case Definition}' class. + * The meta object literal for the 'Direction Of Excluding' operation. * * - * @see org.omg.sysml.lang.sysml.impl.VerificationCaseDefinitionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getVerificationCaseDefinition() * @generated */ - EClass VERIFICATION_CASE_DEFINITION = eINSTANCE.getVerificationCaseDefinition(); + EOperation TYPE___DIRECTION_OF_EXCLUDING__FEATURE_ELIST = eINSTANCE.getType__DirectionOfExcluding__Feature_EList(); /** - * The meta object literal for the 'Verified Requirement' reference list feature. + * The meta object literal for the 'Inheritable Memberships' operation. * * * @generated */ - EReference VERIFICATION_CASE_DEFINITION__VERIFIED_REQUIREMENT = eINSTANCE.getVerificationCaseDefinition_VerifiedRequirement(); + EOperation TYPE___INHERITABLE_MEMBERSHIPS__ELIST_ELIST_BOOLEAN = eINSTANCE.getType__InheritableMemberships__EList_EList_boolean(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.RequirementVerificationMembershipImpl Requirement Verification Membership}' class. + * The meta object literal for the 'Inherited Memberships' operation. * * - * @see org.omg.sysml.lang.sysml.impl.RequirementVerificationMembershipImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getRequirementVerificationMembership() * @generated */ - EClass REQUIREMENT_VERIFICATION_MEMBERSHIP = eINSTANCE.getRequirementVerificationMembership(); + EOperation TYPE___INHERITED_MEMBERSHIPS__ELIST_ELIST_BOOLEAN = eINSTANCE.getType__InheritedMemberships__EList_EList_boolean(); /** - * The meta object literal for the 'Owned Requirement' reference feature. + * The meta object literal for the 'Is Compatible With' operation. * * * @generated */ - EReference REQUIREMENT_VERIFICATION_MEMBERSHIP__OWNED_REQUIREMENT = eINSTANCE.getRequirementVerificationMembership_OwnedRequirement(); + EOperation TYPE___IS_COMPATIBLE_WITH__TYPE = eINSTANCE.getType__IsCompatibleWith__Type(); /** - * The meta object literal for the 'Verified Requirement' reference feature. + * The meta object literal for the 'Multiplicities' operation. * * * @generated */ - EReference REQUIREMENT_VERIFICATION_MEMBERSHIP__VERIFIED_REQUIREMENT = eINSTANCE.getRequirementVerificationMembership_VerifiedRequirement(); + EOperation TYPE___MULTIPLICITIES = eINSTANCE.getType__Multiplicities(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.RequirementConstraintMembershipImpl Requirement Constraint Membership}' class. + * The meta object literal for the 'Non Private Memberships' operation. * * - * @see org.omg.sysml.lang.sysml.impl.RequirementConstraintMembershipImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getRequirementConstraintMembership() * @generated */ - EClass REQUIREMENT_CONSTRAINT_MEMBERSHIP = eINSTANCE.getRequirementConstraintMembership(); + EOperation TYPE___NON_PRIVATE_MEMBERSHIPS__ELIST_ELIST_BOOLEAN = eINSTANCE.getType__NonPrivateMemberships__EList_EList_boolean(); /** - * The meta object literal for the 'Kind' attribute feature. + * The meta object literal for the 'Remove Redefined Features' operation. * * * @generated */ - EAttribute REQUIREMENT_CONSTRAINT_MEMBERSHIP__KIND = eINSTANCE.getRequirementConstraintMembership_Kind(); + EOperation TYPE___REMOVE_REDEFINED_FEATURES__ELIST = eINSTANCE.getType__RemoveRedefinedFeatures__EList(); /** - * The meta object literal for the 'Owned Constraint' reference feature. + * The meta object literal for the 'Specializes' operation. * * * @generated */ - EReference REQUIREMENT_CONSTRAINT_MEMBERSHIP__OWNED_CONSTRAINT = eINSTANCE.getRequirementConstraintMembership_OwnedConstraint(); + EOperation TYPE___SPECIALIZES__TYPE = eINSTANCE.getType__Specializes__Type(); /** - * The meta object literal for the 'Referenced Constraint' reference feature. + * The meta object literal for the 'Specializes From Library' operation. * * * @generated */ - EReference REQUIREMENT_CONSTRAINT_MEMBERSHIP__REFERENCED_CONSTRAINT = eINSTANCE.getRequirementConstraintMembership_ReferencedConstraint(); + EOperation TYPE___SPECIALIZES_FROM_LIBRARY__STRING = eINSTANCE.getType__SpecializesFromLibrary__String(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.MetadataDefinitionImpl Metadata Definition}' class. + * The meta object literal for the 'Supertypes' operation. * * - * @see org.omg.sysml.lang.sysml.impl.MetadataDefinitionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getMetadataDefinition() * @generated */ - EClass METADATA_DEFINITION = eINSTANCE.getMetadataDefinition(); + EOperation TYPE___SUPERTYPES__BOOLEAN = eINSTANCE.getType__Supertypes__boolean(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.EventOccurrenceUsageImpl Event Occurrence Usage}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.TypeFeaturingImpl Type Featuring}' class. * * - * @see org.omg.sysml.lang.sysml.impl.EventOccurrenceUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getEventOccurrenceUsage() + * @see org.omg.sysml.lang.sysml.impl.TypeFeaturingImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getTypeFeaturing() * @generated */ - EClass EVENT_OCCURRENCE_USAGE = eINSTANCE.getEventOccurrenceUsage(); + EClass TYPE_FEATURING = eINSTANCE.getTypeFeaturing(); /** - * The meta object literal for the 'Event Occurrence' reference feature. + * The meta object literal for the 'Feature Of Type' reference feature. * * * @generated */ - EReference EVENT_OCCURRENCE_USAGE__EVENT_OCCURRENCE = eINSTANCE.getEventOccurrenceUsage_EventOccurrence(); + EReference TYPE_FEATURING__FEATURE_OF_TYPE = eINSTANCE.getTypeFeaturing_FeatureOfType(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.AssignmentActionUsageImpl Assignment Action Usage}' class. + * The meta object literal for the 'Featuring Type' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.AssignmentActionUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getAssignmentActionUsage() * @generated */ - EClass ASSIGNMENT_ACTION_USAGE = eINSTANCE.getAssignmentActionUsage(); + EReference TYPE_FEATURING__FEATURING_TYPE = eINSTANCE.getTypeFeaturing_FeaturingType(); /** - * The meta object literal for the 'Target Argument' reference feature. + * The meta object literal for the 'Owning Feature Of Type' reference feature. * * * @generated */ - EReference ASSIGNMENT_ACTION_USAGE__TARGET_ARGUMENT = eINSTANCE.getAssignmentActionUsage_TargetArgument(); + EReference TYPE_FEATURING__OWNING_FEATURE_OF_TYPE = eINSTANCE.getTypeFeaturing_OwningFeatureOfType(); /** - * The meta object literal for the 'Value Expression' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.UnioningImpl Unioning}' class. * * + * @see org.omg.sysml.lang.sysml.impl.UnioningImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getUnioning() * @generated */ - EReference ASSIGNMENT_ACTION_USAGE__VALUE_EXPRESSION = eINSTANCE.getAssignmentActionUsage_ValueExpression(); + EClass UNIONING = eINSTANCE.getUnioning(); /** - * The meta object literal for the 'Referent' reference feature. + * The meta object literal for the 'Type Unioned' reference feature. * * * @generated */ - EReference ASSIGNMENT_ACTION_USAGE__REFERENT = eINSTANCE.getAssignmentActionUsage_Referent(); + EReference UNIONING__TYPE_UNIONED = eINSTANCE.getUnioning_TypeUnioned(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.TriggerInvocationExpressionImpl Trigger Invocation Expression}' class. + * The meta object literal for the 'Unioning Type' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.TriggerInvocationExpressionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getTriggerInvocationExpression() * @generated */ - EClass TRIGGER_INVOCATION_EXPRESSION = eINSTANCE.getTriggerInvocationExpression(); + EReference UNIONING__UNIONING_TYPE = eINSTANCE.getUnioning_UnioningType(); /** - * The meta object literal for the 'Kind' attribute feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.UsageImpl Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.UsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getUsage() * @generated */ - EAttribute TRIGGER_INVOCATION_EXPRESSION__KIND = eINSTANCE.getTriggerInvocationExpression_Kind(); + EClass USAGE = eINSTANCE.getUsage(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.SendActionUsageImpl Send Action Usage}' class. + * The meta object literal for the 'Definition' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.SendActionUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getSendActionUsage() * @generated */ - EClass SEND_ACTION_USAGE = eINSTANCE.getSendActionUsage(); + EReference USAGE__DEFINITION = eINSTANCE.getUsage_Definition(); /** - * The meta object literal for the 'Receiver Argument' reference feature. + * The meta object literal for the 'Directed Usage' reference list feature. * * * @generated */ - EReference SEND_ACTION_USAGE__RECEIVER_ARGUMENT = eINSTANCE.getSendActionUsage_ReceiverArgument(); + EReference USAGE__DIRECTED_USAGE = eINSTANCE.getUsage_DirectedUsage(); /** - * The meta object literal for the 'Payload Argument' reference feature. + * The meta object literal for the 'Is Reference' attribute feature. * * * @generated */ - EReference SEND_ACTION_USAGE__PAYLOAD_ARGUMENT = eINSTANCE.getSendActionUsage_PayloadArgument(); + EAttribute USAGE__IS_REFERENCE = eINSTANCE.getUsage_IsReference(); /** - * The meta object literal for the 'Sender Argument' reference feature. + * The meta object literal for the 'Is Variation' attribute feature. * * * @generated */ - EReference SEND_ACTION_USAGE__SENDER_ARGUMENT = eINSTANCE.getSendActionUsage_SenderArgument(); + EAttribute USAGE__IS_VARIATION = eINSTANCE.getUsage_IsVariation(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.WhileLoopActionUsageImpl While Loop Action Usage}' class. + * The meta object literal for the 'May Time Vary' attribute feature. * * - * @see org.omg.sysml.lang.sysml.impl.WhileLoopActionUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getWhileLoopActionUsage() * @generated */ - EClass WHILE_LOOP_ACTION_USAGE = eINSTANCE.getWhileLoopActionUsage(); + EAttribute USAGE__MAY_TIME_VARY = eINSTANCE.getUsage_MayTimeVary(); /** - * The meta object literal for the 'While Argument' reference feature. + * The meta object literal for the 'Nested Action' reference list feature. * * * @generated */ - EReference WHILE_LOOP_ACTION_USAGE__WHILE_ARGUMENT = eINSTANCE.getWhileLoopActionUsage_WhileArgument(); + EReference USAGE__NESTED_ACTION = eINSTANCE.getUsage_NestedAction(); /** - * The meta object literal for the 'Until Argument' reference feature. + * The meta object literal for the 'Nested Allocation' reference list feature. * * * @generated */ - EReference WHILE_LOOP_ACTION_USAGE__UNTIL_ARGUMENT = eINSTANCE.getWhileLoopActionUsage_UntilArgument(); + EReference USAGE__NESTED_ALLOCATION = eINSTANCE.getUsage_NestedAllocation(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.LoopActionUsageImpl Loop Action Usage}' class. + * The meta object literal for the 'Nested Analysis Case' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.LoopActionUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getLoopActionUsage() * @generated */ - EClass LOOP_ACTION_USAGE = eINSTANCE.getLoopActionUsage(); + EReference USAGE__NESTED_ANALYSIS_CASE = eINSTANCE.getUsage_NestedAnalysisCase(); /** - * The meta object literal for the 'Body Action' reference feature. + * The meta object literal for the 'Nested Attribute' reference list feature. * * * @generated */ - EReference LOOP_ACTION_USAGE__BODY_ACTION = eINSTANCE.getLoopActionUsage_BodyAction(); + EReference USAGE__NESTED_ATTRIBUTE = eINSTANCE.getUsage_NestedAttribute(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.PerformActionUsageImpl Perform Action Usage}' class. + * The meta object literal for the 'Nested Calculation' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.PerformActionUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getPerformActionUsage() * @generated */ - EClass PERFORM_ACTION_USAGE = eINSTANCE.getPerformActionUsage(); + EReference USAGE__NESTED_CALCULATION = eINSTANCE.getUsage_NestedCalculation(); /** - * The meta object literal for the 'Performed Action' reference feature. + * The meta object literal for the 'Nested Case' reference list feature. * * * @generated */ - EReference PERFORM_ACTION_USAGE__PERFORMED_ACTION = eINSTANCE.getPerformActionUsage_PerformedAction(); + EReference USAGE__NESTED_CASE = eINSTANCE.getUsage_NestedCase(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ForLoopActionUsageImpl For Loop Action Usage}' class. + * The meta object literal for the 'Nested Concern' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.ForLoopActionUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getForLoopActionUsage() * @generated */ - EClass FOR_LOOP_ACTION_USAGE = eINSTANCE.getForLoopActionUsage(); + EReference USAGE__NESTED_CONCERN = eINSTANCE.getUsage_NestedConcern(); /** - * The meta object literal for the 'Seq Argument' reference feature. + * The meta object literal for the 'Nested Connection' reference list feature. * * * @generated */ - EReference FOR_LOOP_ACTION_USAGE__SEQ_ARGUMENT = eINSTANCE.getForLoopActionUsage_SeqArgument(); + EReference USAGE__NESTED_CONNECTION = eINSTANCE.getUsage_NestedConnection(); /** - * The meta object literal for the 'Loop Variable' reference feature. + * The meta object literal for the 'Nested Constraint' reference list feature. * * * @generated */ - EReference FOR_LOOP_ACTION_USAGE__LOOP_VARIABLE = eINSTANCE.getForLoopActionUsage_LoopVariable(); + EReference USAGE__NESTED_CONSTRAINT = eINSTANCE.getUsage_NestedConstraint(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.TerminateActionUsageImpl Terminate Action Usage}' class. + * The meta object literal for the 'Nested Enumeration' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.TerminateActionUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getTerminateActionUsage() * @generated */ - EClass TERMINATE_ACTION_USAGE = eINSTANCE.getTerminateActionUsage(); + EReference USAGE__NESTED_ENUMERATION = eINSTANCE.getUsage_NestedEnumeration(); /** - * The meta object literal for the 'Terminated Occurrence Argument' reference feature. + * The meta object literal for the 'Nested Flow' reference list feature. * * * @generated */ - EReference TERMINATE_ACTION_USAGE__TERMINATED_OCCURRENCE_ARGUMENT = eINSTANCE.getTerminateActionUsage_TerminatedOccurrenceArgument(); + EReference USAGE__NESTED_FLOW = eINSTANCE.getUsage_NestedFlow(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.DecisionNodeImpl Decision Node}' class. + * The meta object literal for the 'Nested Interface' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.DecisionNodeImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getDecisionNode() * @generated */ - EClass DECISION_NODE = eINSTANCE.getDecisionNode(); + EReference USAGE__NESTED_INTERFACE = eINSTANCE.getUsage_NestedInterface(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ControlNodeImpl Control Node}' class. + * The meta object literal for the 'Nested Item' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.ControlNodeImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getControlNode() * @generated */ - EClass CONTROL_NODE = eINSTANCE.getControlNode(); + EReference USAGE__NESTED_ITEM = eINSTANCE.getUsage_NestedItem(); /** - * The meta object literal for the 'Multiplicity Has Bounds' operation. + * The meta object literal for the 'Nested Metadata' reference list feature. * * * @generated */ - EOperation CONTROL_NODE___MULTIPLICITY_HAS_BOUNDS__MULTIPLICITY_INT_INT = eINSTANCE.getControlNode__MultiplicityHasBounds__Multiplicity_int_int(); + EReference USAGE__NESTED_METADATA = eINSTANCE.getUsage_NestedMetadata(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.IfActionUsageImpl If Action Usage}' class. + * The meta object literal for the 'Nested Occurrence' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.IfActionUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getIfActionUsage() * @generated */ - EClass IF_ACTION_USAGE = eINSTANCE.getIfActionUsage(); + EReference USAGE__NESTED_OCCURRENCE = eINSTANCE.getUsage_NestedOccurrence(); /** - * The meta object literal for the 'Else Action' reference feature. + * The meta object literal for the 'Nested Part' reference list feature. * * * @generated */ - EReference IF_ACTION_USAGE__ELSE_ACTION = eINSTANCE.getIfActionUsage_ElseAction(); + EReference USAGE__NESTED_PART = eINSTANCE.getUsage_NestedPart(); /** - * The meta object literal for the 'Then Action' reference feature. + * The meta object literal for the 'Nested Port' reference list feature. * * * @generated */ - EReference IF_ACTION_USAGE__THEN_ACTION = eINSTANCE.getIfActionUsage_ThenAction(); + EReference USAGE__NESTED_PORT = eINSTANCE.getUsage_NestedPort(); /** - * The meta object literal for the 'If Argument' reference feature. + * The meta object literal for the 'Nested Reference' reference list feature. * * * @generated */ - EReference IF_ACTION_USAGE__IF_ARGUMENT = eINSTANCE.getIfActionUsage_IfArgument(); + EReference USAGE__NESTED_REFERENCE = eINSTANCE.getUsage_NestedReference(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.MergeNodeImpl Merge Node}' class. + * The meta object literal for the 'Nested Rendering' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.MergeNodeImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getMergeNode() * @generated */ - EClass MERGE_NODE = eINSTANCE.getMergeNode(); + EReference USAGE__NESTED_RENDERING = eINSTANCE.getUsage_NestedRendering(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.JoinNodeImpl Join Node}' class. + * The meta object literal for the 'Nested Requirement' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.JoinNodeImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getJoinNode() * @generated */ - EClass JOIN_NODE = eINSTANCE.getJoinNode(); + EReference USAGE__NESTED_REQUIREMENT = eINSTANCE.getUsage_NestedRequirement(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ForkNodeImpl Fork Node}' class. + * The meta object literal for the 'Nested State' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.ForkNodeImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getForkNode() * @generated */ - EClass FORK_NODE = eINSTANCE.getForkNode(); + EReference USAGE__NESTED_STATE = eINSTANCE.getUsage_NestedState(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.StateSubactionMembershipImpl State Subaction Membership}' class. + * The meta object literal for the 'Nested Transition' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.StateSubactionMembershipImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getStateSubactionMembership() * @generated */ - EClass STATE_SUBACTION_MEMBERSHIP = eINSTANCE.getStateSubactionMembership(); + EReference USAGE__NESTED_TRANSITION = eINSTANCE.getUsage_NestedTransition(); /** - * The meta object literal for the 'Kind' attribute feature. + * The meta object literal for the 'Nested Usage' reference list feature. * * * @generated */ - EAttribute STATE_SUBACTION_MEMBERSHIP__KIND = eINSTANCE.getStateSubactionMembership_Kind(); + EReference USAGE__NESTED_USAGE = eINSTANCE.getUsage_NestedUsage(); /** - * The meta object literal for the 'Action' reference feature. + * The meta object literal for the 'Nested Use Case' reference list feature. * * * @generated */ - EReference STATE_SUBACTION_MEMBERSHIP__ACTION = eINSTANCE.getStateSubactionMembership_Action(); + EReference USAGE__NESTED_USE_CASE = eINSTANCE.getUsage_NestedUseCase(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.TransitionFeatureMembershipImpl Transition Feature Membership}' class. + * The meta object literal for the 'Nested Verification Case' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.TransitionFeatureMembershipImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getTransitionFeatureMembership() * @generated */ - EClass TRANSITION_FEATURE_MEMBERSHIP = eINSTANCE.getTransitionFeatureMembership(); + EReference USAGE__NESTED_VERIFICATION_CASE = eINSTANCE.getUsage_NestedVerificationCase(); /** - * The meta object literal for the 'Kind' attribute feature. + * The meta object literal for the 'Nested View' reference list feature. * * * @generated */ - EAttribute TRANSITION_FEATURE_MEMBERSHIP__KIND = eINSTANCE.getTransitionFeatureMembership_Kind(); + EReference USAGE__NESTED_VIEW = eINSTANCE.getUsage_NestedView(); /** - * The meta object literal for the 'Transition Feature' reference feature. + * The meta object literal for the 'Nested Viewpoint' reference list feature. * * * @generated */ - EReference TRANSITION_FEATURE_MEMBERSHIP__TRANSITION_FEATURE = eINSTANCE.getTransitionFeatureMembership_TransitionFeature(); + EReference USAGE__NESTED_VIEWPOINT = eINSTANCE.getUsage_NestedViewpoint(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.StateDefinitionImpl State Definition}' class. + * The meta object literal for the 'Owning Definition' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.StateDefinitionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getStateDefinition() * @generated */ - EClass STATE_DEFINITION = eINSTANCE.getStateDefinition(); + EReference USAGE__OWNING_DEFINITION = eINSTANCE.getUsage_OwningDefinition(); /** - * The meta object literal for the 'State' reference list feature. + * The meta object literal for the 'Owning Usage' reference feature. * * * @generated */ - EReference STATE_DEFINITION__STATE = eINSTANCE.getStateDefinition_State(); + EReference USAGE__OWNING_USAGE = eINSTANCE.getUsage_OwningUsage(); /** - * The meta object literal for the 'Entry Action' reference feature. + * The meta object literal for the 'Usage' reference list feature. * * * @generated */ - EReference STATE_DEFINITION__ENTRY_ACTION = eINSTANCE.getStateDefinition_EntryAction(); + EReference USAGE__USAGE = eINSTANCE.getUsage_Usage(); /** - * The meta object literal for the 'Do Action' reference feature. + * The meta object literal for the 'Variant' reference list feature. * * * @generated */ - EReference STATE_DEFINITION__DO_ACTION = eINSTANCE.getStateDefinition_DoAction(); + EReference USAGE__VARIANT = eINSTANCE.getUsage_Variant(); /** - * The meta object literal for the 'Exit Action' reference feature. + * The meta object literal for the 'Variant Membership' reference list feature. * * * @generated */ - EReference STATE_DEFINITION__EXIT_ACTION = eINSTANCE.getStateDefinition_ExitAction(); + EReference USAGE__VARIANT_MEMBERSHIP = eINSTANCE.getUsage_VariantMembership(); /** - * The meta object literal for the 'Is Parallel' attribute feature. + * The meta object literal for the 'Referenced Feature Target' operation. * * * @generated */ - EAttribute STATE_DEFINITION__IS_PARALLEL = eINSTANCE.getStateDefinition_IsParallel(); + EOperation USAGE___REFERENCED_FEATURE_TARGET = eINSTANCE.getUsage__ReferencedFeatureTarget(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ExhibitStateUsageImpl Exhibit State Usage}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.UseCaseDefinitionImpl Use Case Definition}' class. * * - * @see org.omg.sysml.lang.sysml.impl.ExhibitStateUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getExhibitStateUsage() + * @see org.omg.sysml.lang.sysml.impl.UseCaseDefinitionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getUseCaseDefinition() * @generated */ - EClass EXHIBIT_STATE_USAGE = eINSTANCE.getExhibitStateUsage(); + EClass USE_CASE_DEFINITION = eINSTANCE.getUseCaseDefinition(); /** - * The meta object literal for the 'Exhibited State' reference feature. + * The meta object literal for the 'Included Use Case' reference list feature. * * * @generated */ - EReference EXHIBIT_STATE_USAGE__EXHIBITED_STATE = eINSTANCE.getExhibitStateUsage_ExhibitedState(); + EReference USE_CASE_DEFINITION__INCLUDED_USE_CASE = eINSTANCE.getUseCaseDefinition_IncludedUseCase(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ObjectiveMembershipImpl Objective Membership}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.UseCaseUsageImpl Use Case Usage}' class. * * - * @see org.omg.sysml.lang.sysml.impl.ObjectiveMembershipImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getObjectiveMembership() + * @see org.omg.sysml.lang.sysml.impl.UseCaseUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getUseCaseUsage() * @generated */ - EClass OBJECTIVE_MEMBERSHIP = eINSTANCE.getObjectiveMembership(); + EClass USE_CASE_USAGE = eINSTANCE.getUseCaseUsage(); /** - * The meta object literal for the 'Owned Objective Requirement' reference feature. + * The meta object literal for the 'Included Use Case' reference list feature. * * * @generated */ - EReference OBJECTIVE_MEMBERSHIP__OWNED_OBJECTIVE_REQUIREMENT = eINSTANCE.getObjectiveMembership_OwnedObjectiveRequirement(); + EReference USE_CASE_USAGE__INCLUDED_USE_CASE = eINSTANCE.getUseCaseUsage_IncludedUseCase(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ActorMembershipImpl Actor Membership}' class. + * The meta object literal for the 'Use Case Definition' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.ActorMembershipImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getActorMembership() * @generated */ - EClass ACTOR_MEMBERSHIP = eINSTANCE.getActorMembership(); + EReference USE_CASE_USAGE__USE_CASE_DEFINITION = eINSTANCE.getUseCaseUsage_UseCaseDefinition(); /** - * The meta object literal for the 'Owned Actor Parameter' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.VariantMembershipImpl Variant Membership}' class. * * + * @see org.omg.sysml.lang.sysml.impl.VariantMembershipImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getVariantMembership() * @generated */ - EReference ACTOR_MEMBERSHIP__OWNED_ACTOR_PARAMETER = eINSTANCE.getActorMembership_OwnedActorParameter(); + EClass VARIANT_MEMBERSHIP = eINSTANCE.getVariantMembership(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.SubjectMembershipImpl Subject Membership}' class. + * The meta object literal for the 'Owned Variant Usage' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.SubjectMembershipImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getSubjectMembership() * @generated */ - EClass SUBJECT_MEMBERSHIP = eINSTANCE.getSubjectMembership(); + EReference VARIANT_MEMBERSHIP__OWNED_VARIANT_USAGE = eINSTANCE.getVariantMembership_OwnedVariantUsage(); /** - * The meta object literal for the 'Owned Subject Parameter' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.VerificationCaseDefinitionImpl Verification Case Definition}' class. * * + * @see org.omg.sysml.lang.sysml.impl.VerificationCaseDefinitionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getVerificationCaseDefinition() * @generated */ - EReference SUBJECT_MEMBERSHIP__OWNED_SUBJECT_PARAMETER = eINSTANCE.getSubjectMembership_OwnedSubjectParameter(); + EClass VERIFICATION_CASE_DEFINITION = eINSTANCE.getVerificationCaseDefinition(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.StakeholderMembershipImpl Stakeholder Membership}' class. + * The meta object literal for the 'Verified Requirement' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.StakeholderMembershipImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getStakeholderMembership() * @generated */ - EClass STAKEHOLDER_MEMBERSHIP = eINSTANCE.getStakeholderMembership(); + EReference VERIFICATION_CASE_DEFINITION__VERIFIED_REQUIREMENT = eINSTANCE.getVerificationCaseDefinition_VerifiedRequirement(); /** - * The meta object literal for the 'Owned Stakeholder Parameter' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.VerificationCaseUsageImpl Verification Case Usage}' class. * * + * @see org.omg.sysml.lang.sysml.impl.VerificationCaseUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getVerificationCaseUsage() * @generated */ - EReference STAKEHOLDER_MEMBERSHIP__OWNED_STAKEHOLDER_PARAMETER = eINSTANCE.getStakeholderMembership_OwnedStakeholderParameter(); + EClass VERIFICATION_CASE_USAGE = eINSTANCE.getVerificationCaseUsage(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.FramedConcernMembershipImpl Framed Concern Membership}' class. + * The meta object literal for the 'Verification Case Definition' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.FramedConcernMembershipImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getFramedConcernMembership() * @generated */ - EClass FRAMED_CONCERN_MEMBERSHIP = eINSTANCE.getFramedConcernMembership(); + EReference VERIFICATION_CASE_USAGE__VERIFICATION_CASE_DEFINITION = eINSTANCE.getVerificationCaseUsage_VerificationCaseDefinition(); /** - * The meta object literal for the 'Owned Concern' reference feature. + * The meta object literal for the 'Verified Requirement' reference list feature. * * * @generated */ - EReference FRAMED_CONCERN_MEMBERSHIP__OWNED_CONCERN = eINSTANCE.getFramedConcernMembership_OwnedConcern(); + EReference VERIFICATION_CASE_USAGE__VERIFIED_REQUIREMENT = eINSTANCE.getVerificationCaseUsage_VerifiedRequirement(); /** - * The meta object literal for the 'Referenced Concern' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ViewDefinitionImpl View Definition}' class. * * + * @see org.omg.sysml.lang.sysml.impl.ViewDefinitionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getViewDefinition() * @generated */ - EReference FRAMED_CONCERN_MEMBERSHIP__REFERENCED_CONCERN = eINSTANCE.getFramedConcernMembership_ReferencedConcern(); + EClass VIEW_DEFINITION = eINSTANCE.getViewDefinition(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.SatisfyRequirementUsageImpl Satisfy Requirement Usage}' class. + * The meta object literal for the 'Satisfied Viewpoint' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.SatisfyRequirementUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getSatisfyRequirementUsage() * @generated */ - EClass SATISFY_REQUIREMENT_USAGE = eINSTANCE.getSatisfyRequirementUsage(); + EReference VIEW_DEFINITION__SATISFIED_VIEWPOINT = eINSTANCE.getViewDefinition_SatisfiedViewpoint(); /** - * The meta object literal for the 'Satisfied Requirement' reference feature. + * The meta object literal for the 'View' reference list feature. * * * @generated */ - EReference SATISFY_REQUIREMENT_USAGE__SATISFIED_REQUIREMENT = eINSTANCE.getSatisfyRequirementUsage_SatisfiedRequirement(); + EReference VIEW_DEFINITION__VIEW = eINSTANCE.getViewDefinition_View(); /** - * The meta object literal for the 'Satisfying Feature' reference feature. + * The meta object literal for the 'View Condition' reference list feature. * * * @generated */ - EReference SATISFY_REQUIREMENT_USAGE__SATISFYING_FEATURE = eINSTANCE.getSatisfyRequirementUsage_SatisfyingFeature(); + EReference VIEW_DEFINITION__VIEW_CONDITION = eINSTANCE.getViewDefinition_ViewCondition(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.AssertConstraintUsageImpl Assert Constraint Usage}' class. + * The meta object literal for the 'View Rendering' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.AssertConstraintUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getAssertConstraintUsage() * @generated */ - EClass ASSERT_CONSTRAINT_USAGE = eINSTANCE.getAssertConstraintUsage(); + EReference VIEW_DEFINITION__VIEW_RENDERING = eINSTANCE.getViewDefinition_ViewRendering(); /** - * The meta object literal for the 'Asserted Constraint' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ViewRenderingMembershipImpl View Rendering Membership}' class. * * + * @see org.omg.sysml.lang.sysml.impl.ViewRenderingMembershipImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getViewRenderingMembership() * @generated */ - EReference ASSERT_CONSTRAINT_USAGE__ASSERTED_CONSTRAINT = eINSTANCE.getAssertConstraintUsage_AssertedConstraint(); + EClass VIEW_RENDERING_MEMBERSHIP = eINSTANCE.getViewRenderingMembership(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.MembershipExposeImpl Membership Expose}' class. + * The meta object literal for the 'Owned Rendering' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.MembershipExposeImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getMembershipExpose() * @generated */ - EClass MEMBERSHIP_EXPOSE = eINSTANCE.getMembershipExpose(); + EReference VIEW_RENDERING_MEMBERSHIP__OWNED_RENDERING = eINSTANCE.getViewRenderingMembership_OwnedRendering(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ExposeImpl Expose}' class. + * The meta object literal for the 'Referenced Rendering' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.ExposeImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getExpose() * @generated */ - EClass EXPOSE = eINSTANCE.getExpose(); + EReference VIEW_RENDERING_MEMBERSHIP__REFERENCED_RENDERING = eINSTANCE.getViewRenderingMembership_ReferencedRendering(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.NamespaceExposeImpl Namespace Expose}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ViewUsageImpl View Usage}' class. * * - * @see org.omg.sysml.lang.sysml.impl.NamespaceExposeImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getNamespaceExpose() + * @see org.omg.sysml.lang.sysml.impl.ViewUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getViewUsage() * @generated */ - EClass NAMESPACE_EXPOSE = eINSTANCE.getNamespaceExpose(); + EClass VIEW_USAGE = eINSTANCE.getViewUsage(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ViewRenderingMembershipImpl View Rendering Membership}' class. + * The meta object literal for the 'Exposed Element' reference list feature. * * - * @see org.omg.sysml.lang.sysml.impl.ViewRenderingMembershipImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getViewRenderingMembership() * @generated */ - EClass VIEW_RENDERING_MEMBERSHIP = eINSTANCE.getViewRenderingMembership(); + EReference VIEW_USAGE__EXPOSED_ELEMENT = eINSTANCE.getViewUsage_ExposedElement(); /** - * The meta object literal for the 'Owned Rendering' reference feature. + * The meta object literal for the 'Satisfied Viewpoint' reference list feature. * * * @generated */ - EReference VIEW_RENDERING_MEMBERSHIP__OWNED_RENDERING = eINSTANCE.getViewRenderingMembership_OwnedRendering(); + EReference VIEW_USAGE__SATISFIED_VIEWPOINT = eINSTANCE.getViewUsage_SatisfiedViewpoint(); /** - * The meta object literal for the 'Referenced Rendering' reference feature. + * The meta object literal for the 'View Condition' reference list feature. * * * @generated */ - EReference VIEW_RENDERING_MEMBERSHIP__REFERENCED_RENDERING = eINSTANCE.getViewRenderingMembership_ReferencedRendering(); + EReference VIEW_USAGE__VIEW_CONDITION = eINSTANCE.getViewUsage_ViewCondition(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.BindingConnectorAsUsageImpl Binding Connector As Usage}' class. + * The meta object literal for the 'View Definition' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.BindingConnectorAsUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getBindingConnectorAsUsage() * @generated */ - EClass BINDING_CONNECTOR_AS_USAGE = eINSTANCE.getBindingConnectorAsUsage(); + EReference VIEW_USAGE__VIEW_DEFINITION = eINSTANCE.getViewUsage_ViewDefinition(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.SuccessionAsUsageImpl Succession As Usage}' class. + * The meta object literal for the 'View Rendering' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.SuccessionAsUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getSuccessionAsUsage() * @generated */ - EClass SUCCESSION_AS_USAGE = eINSTANCE.getSuccessionAsUsage(); + EReference VIEW_USAGE__VIEW_RENDERING = eINSTANCE.getViewUsage_ViewRendering(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ConjugatedPortTypingImpl Conjugated Port Typing}' class. + * The meta object literal for the 'Include As Exposed' operation. * * - * @see org.omg.sysml.lang.sysml.impl.ConjugatedPortTypingImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getConjugatedPortTyping() * @generated */ - EClass CONJUGATED_PORT_TYPING = eINSTANCE.getConjugatedPortTyping(); + EOperation VIEW_USAGE___INCLUDE_AS_EXPOSED__ELEMENT = eINSTANCE.getViewUsage__IncludeAsExposed__Element(); /** - * The meta object literal for the 'Port Definition' reference feature. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ViewpointDefinitionImpl Viewpoint Definition}' class. * * + * @see org.omg.sysml.lang.sysml.impl.ViewpointDefinitionImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getViewpointDefinition() * @generated */ - EReference CONJUGATED_PORT_TYPING__PORT_DEFINITION = eINSTANCE.getConjugatedPortTyping_PortDefinition(); + EClass VIEWPOINT_DEFINITION = eINSTANCE.getViewpointDefinition(); /** - * The meta object literal for the 'Conjugated Port Definition' reference feature. + * The meta object literal for the 'Viewpoint Stakeholder' reference list feature. * * * @generated */ - EReference CONJUGATED_PORT_TYPING__CONJUGATED_PORT_DEFINITION = eINSTANCE.getConjugatedPortTyping_ConjugatedPortDefinition(); + EReference VIEWPOINT_DEFINITION__VIEWPOINT_STAKEHOLDER = eINSTANCE.getViewpointDefinition_ViewpointStakeholder(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.SuccessionFlowUsageImpl Succession Flow Usage}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.ViewpointUsageImpl Viewpoint Usage}' class. * * - * @see org.omg.sysml.lang.sysml.impl.SuccessionFlowUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getSuccessionFlowUsage() + * @see org.omg.sysml.lang.sysml.impl.ViewpointUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getViewpointUsage() * @generated */ - EClass SUCCESSION_FLOW_USAGE = eINSTANCE.getSuccessionFlowUsage(); + EClass VIEWPOINT_USAGE = eINSTANCE.getViewpointUsage(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.FlowDefinitionImpl Flow Definition}' class. + * The meta object literal for the 'Viewpoint Definition' reference feature. * * - * @see org.omg.sysml.lang.sysml.impl.FlowDefinitionImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getFlowDefinition() * @generated */ - EClass FLOW_DEFINITION = eINSTANCE.getFlowDefinition(); + EReference VIEWPOINT_USAGE__VIEWPOINT_DEFINITION = eINSTANCE.getViewpointUsage_ViewpointDefinition(); /** - * The meta object literal for the 'Flow End' reference list feature. + * The meta object literal for the 'Viewpoint Stakeholder' reference list feature. * * * @generated */ - EReference FLOW_DEFINITION__FLOW_END = eINSTANCE.getFlowDefinition_FlowEnd(); + EReference VIEWPOINT_USAGE__VIEWPOINT_STAKEHOLDER = eINSTANCE.getViewpointUsage_ViewpointStakeholder(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.IncludeUseCaseUsageImpl Include Use Case Usage}' class. + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.impl.WhileLoopActionUsageImpl While Loop Action Usage}' class. * * - * @see org.omg.sysml.lang.sysml.impl.IncludeUseCaseUsageImpl - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getIncludeUseCaseUsage() + * @see org.omg.sysml.lang.sysml.impl.WhileLoopActionUsageImpl + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getWhileLoopActionUsage() * @generated */ - EClass INCLUDE_USE_CASE_USAGE = eINSTANCE.getIncludeUseCaseUsage(); + EClass WHILE_LOOP_ACTION_USAGE = eINSTANCE.getWhileLoopActionUsage(); /** - * The meta object literal for the 'Use Case Included' reference feature. + * The meta object literal for the 'Until Argument' reference feature. * * * @generated */ - EReference INCLUDE_USE_CASE_USAGE__USE_CASE_INCLUDED = eINSTANCE.getIncludeUseCaseUsage_UseCaseIncluded(); + EReference WHILE_LOOP_ACTION_USAGE__UNTIL_ARGUMENT = eINSTANCE.getWhileLoopActionUsage_UntilArgument(); /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.VisibilityKind Visibility Kind}' enum. + * The meta object literal for the 'While Argument' reference feature. * * - * @see org.omg.sysml.lang.sysml.VisibilityKind - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getVisibilityKind() * @generated */ - EEnum VISIBILITY_KIND = eINSTANCE.getVisibilityKind(); + EReference WHILE_LOOP_ACTION_USAGE__WHILE_ARGUMENT = eINSTANCE.getWhileLoopActionUsage_WhileArgument(); /** * The meta object literal for the '{@link org.omg.sysml.lang.sysml.FeatureDirectionKind Feature Direction Kind}' enum. @@ -185298,16 +185288,6 @@ interface Literals { */ EEnum REQUIREMENT_CONSTRAINT_KIND = eINSTANCE.getRequirementConstraintKind(); - /** - * The meta object literal for the '{@link org.omg.sysml.lang.sysml.TriggerKind Trigger Kind}' enum. - * - * - * @see org.omg.sysml.lang.sysml.TriggerKind - * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getTriggerKind() - * @generated - */ - EEnum TRIGGER_KIND = eINSTANCE.getTriggerKind(); - /** * The meta object literal for the '{@link org.omg.sysml.lang.sysml.StateSubactionKind State Subaction Kind}' enum. * @@ -185328,6 +185308,26 @@ interface Literals { */ EEnum TRANSITION_FEATURE_KIND = eINSTANCE.getTransitionFeatureKind(); + /** + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.TriggerKind Trigger Kind}' enum. + * + * + * @see org.omg.sysml.lang.sysml.TriggerKind + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getTriggerKind() + * @generated + */ + EEnum TRIGGER_KIND = eINSTANCE.getTriggerKind(); + + /** + * The meta object literal for the '{@link org.omg.sysml.lang.sysml.VisibilityKind Visibility Kind}' enum. + * + * + * @see org.omg.sysml.lang.sysml.VisibilityKind + * @see org.omg.sysml.lang.sysml.impl.SysMLPackageImpl#getVisibilityKind() + * @generated + */ + EEnum VISIBILITY_KIND = eINSTANCE.getVisibilityKind(); + } } //SysMLPackage diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/Usage.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/Usage.java index 4a72dab0d..384dfaad1 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/Usage.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/Usage.java @@ -40,7 +40,7 @@ * nestedConnection = nestedUsage->selectByKind(ConnectorAsUsage) * nestedConstraint = nestedUsage->selectByKind(ConstraintUsage) * ownedNested = nestedUsage->selectByKind(EnumerationUsage) - * nestedFlow = nestedUsage->selectByKind(FlowConnectionUsage) + * nestedFlow = nestedUsage->selectByKind(FlowUsage) * nestedInterface = nestedUsage->selectByKind(ReferenceUsage) * nestedItem = nestedUsage->selectByKind(ItemUsage) * nestedMetadata = nestedUsage->selectByKind(MetadataUsage) @@ -583,7 +583,7 @@ public interface Usage extends Feature { * * * - *

The ConnectorAsUsages that are nestedUsages of this Usage. Note that this list includes BindingConnectorAsUsages, SuccessionAsUsages, and FlowConnectionUsages because these are ConnectorAsUsages even though they are not ConnectionUsages.

+ *

The ConnectorAsUsages that are nestedUsages of this Usage. Note that this list includes BindingConnectorAsUsages, SuccessionAsUsages, and FlowUsages because these are ConnectorAsUsages even though they are not ConnectionUsages.

* * @return the value of the 'Nested Connection' reference list. * @see org.omg.sysml.lang.sysml.SysMLPackage#getUsage_NestedConnection() @@ -1029,7 +1029,7 @@ public interface Usage extends Feature { * * * - *

The MetadataUsages that are nestedUsages of this of this Usage.

+ *

The MetadataUsages that are ownedMembers of this of this Usage.

* * @return the value of the 'Nested Metadata' reference list. * @see org.omg.sysml.lang.sysml.SysMLPackage#getUsage_NestedMetadata() diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/ViewpointDefinition.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/ViewpointDefinition.java index 5d53d59c1..7006c856d 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/ViewpointDefinition.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/ViewpointDefinition.java @@ -14,7 +14,7 @@ * viewpointStakeholder = framedConcern.featureMemberhsip-> * selectByKind(StakeholderMembership). * ownedStakeholderParameter - * specializesFromLibrary('Views::Viewpoint') + * specializesFromLibrary('Views::ViewpointCheck') * * *

diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/ViewpointUsage.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/ViewpointUsage.java index 17a7e308a..e0eaf1ef3 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/ViewpointUsage.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/ViewpointUsage.java @@ -16,7 +16,7 @@ * viewpointStakeholder = framedConcern.featureMemberhsip-> * selectByKind(StakeholderMembership). * ownedStakeholderParameter - * specializesFromLibrary('Views::viewpoints') + * specializesFromLibrary('Views::viewpointChecks') * isComposite and owningType <> null and * (owningType.oclIsKindOf(ViewDefinition) or * owningType.oclIsKindOf(ViewUsage)) implies diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/impl/NamespaceImpl.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/impl/NamespaceImpl.java index 6e869ce79..cad7d29a1 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/impl/NamespaceImpl.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/impl/NamespaceImpl.java @@ -19,7 +19,6 @@ import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList; import org.eclipse.emf.ecore.util.InternalEList; - import org.omg.sysml.lang.sysml.util.DerivedUnionEObjectEList; import org.omg.sysml.lang.sysml.Element; import org.omg.sysml.lang.sysml.Import; diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/impl/SysMLPackageImpl.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/impl/SysMLPackageImpl.java index 00d8972c4..03d5c5afe 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/impl/SysMLPackageImpl.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/impl/SysMLPackageImpl.java @@ -3,7 +3,6 @@ package org.omg.sysml.lang.sysml.impl; import org.eclipse.emf.common.util.URI; - import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EEnum; @@ -12,7 +11,6 @@ import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.impl.EPackageImpl; - import org.omg.sysml.lang.sysml.AcceptActionUsage; import org.omg.sysml.lang.sysml.ActionDefinition; import org.omg.sysml.lang.sysml.ActionUsage; @@ -9080,7 +9078,6 @@ public void createPackageContents() { triggerKindEEnum = createEEnum(TRIGGER_KIND); visibilityKindEEnum = createEEnum(VISIBILITY_KIND); } - /** * * @@ -10027,7 +10024,7 @@ public void initializePackageContents() { initEClass(selectExpressionEClass, SelectExpression.class, "SelectExpression", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEClass(sendActionUsageEClass, SendActionUsage.class, "SendActionUsage", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); - initEReference(getSendActionUsage_PayloadArgument(), this.getExpression(), null, "payloadArgument", null, 1, 1, SendActionUsage.class, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, !IS_ORDERED); + initEReference(getSendActionUsage_PayloadArgument(), this.getExpression(), null, "payloadArgument", null, 0, 1, SendActionUsage.class, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, !IS_ORDERED); initEReference(getSendActionUsage_ReceiverArgument(), this.getExpression(), null, "receiverArgument", null, 0, 1, SendActionUsage.class, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, !IS_ORDERED); initEReference(getSendActionUsage_SenderArgument(), this.getExpression(), null, "senderArgument", null, 0, 1, SendActionUsage.class, IS_TRANSIENT, IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, IS_DERIVED, !IS_ORDERED); diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/impl/TypeImpl.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/impl/TypeImpl.java index 034bfb15b..254c1abef 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/impl/TypeImpl.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/impl/TypeImpl.java @@ -22,7 +22,6 @@ import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList; import org.eclipse.emf.ecore.util.InternalEList; - import org.omg.sysml.lang.sysml.util.DerivedUnionEObjectEList; import org.omg.sysml.lang.sysml.Conjugation; import org.omg.sysml.lang.sysml.Differencing; From 968f72aeb9884b105dcaeb270f128ceb4b10bca1 Mon Sep 17 00:00:00 2001 From: Ed Seidewitz Date: Thu, 21 May 2026 11:15:04 -0700 Subject: [PATCH 4/6] ST6RI-934 Re-generated Xtext artifacts for all Xtext grammars. --- .../AbstractKerMLExpressionsIdeModule.java | 2 +- .../antlr/KerMLExpressionsParser.java | 2 +- .../ui/AbstractKerMLExpressionsUiModule.java | 2 +- ...ExpressionsExecutableExtensionFactory.java | 2 +- .../xtext/ui/internal/XtextActivator.java | 6 +- ...AbstractKerMLExpressionsRuntimeModule.java | 2 +- .../xtext/KerMLExpressions.xtextbin | Bin 12670 -> 12670 bytes ...MLExpressionsStandaloneSetupGenerated.java | 2 +- ...erMLExpressionsAntlrTokenFileProvider.java | 2 +- .../parser/antlr/KerMLExpressionsParser.java | 2 +- .../antlr/internal/InternalKerMLExpressions.g | 2 +- ...AbstractKerMLExpressionsScopeProvider.java | 2 +- ...ractKerMLExpressionsSemanticSequencer.java | 64 +++++++++--------- ...actKerMLExpressionsSyntacticSequencer.java | 2 +- .../KerMLExpressionsGrammarAccess.java | 2 +- .../AbstractKerMLExpressionsValidator.java | 4 +- org.omg.kerml.owl/transforms/SysML2OWL.qvto | 2 +- .../org/omg/kerml/xtext/KerML.xtextbin | Bin 36810 -> 36810 bytes .../AbstractKerMLSemanticSequencer.java | 42 ++++++------ .../xtext/services/KerMLGrammarAccess.java | 17 +++-- .../validation/AbstractKerMLValidator.java | 2 +- .../src/main/resources/model/SysML.ecore | 52 +++++++------- .../src/main/resources/model/SysML.genmodel | 4 +- ...sML (sysml) Language Infrastructure.launch | 2 +- .../org/omg/sysml/xtext/SysML.xtextbin | Bin 61146 -> 61146 bytes .../AbstractSysMLSemanticSequencer.java | 36 +++++----- .../validation/AbstractSysMLValidator.java | 2 +- org.omg.sysml/plugin.xml | 2 +- 28 files changed, 131 insertions(+), 128 deletions(-) diff --git a/org.omg.kerml.expressions.xtext.ide/src-gen/org/omg/kerml/expressions/xtext/ide/AbstractKerMLExpressionsIdeModule.java b/org.omg.kerml.expressions.xtext.ide/src-gen/org/omg/kerml/expressions/xtext/ide/AbstractKerMLExpressionsIdeModule.java index fcb544ac3..4c7c97491 100644 --- a/org.omg.kerml.expressions.xtext.ide/src-gen/org/omg/kerml/expressions/xtext/ide/AbstractKerMLExpressionsIdeModule.java +++ b/org.omg.kerml.expressions.xtext.ide/src-gen/org/omg/kerml/expressions/xtext/ide/AbstractKerMLExpressionsIdeModule.java @@ -1,5 +1,5 @@ /* - * generated by Xtext 2.34.0 + * generated by Xtext 2.41.0 */ package org.omg.kerml.expressions.xtext.ide; diff --git a/org.omg.kerml.expressions.xtext.ide/src-gen/org/omg/kerml/expressions/xtext/ide/contentassist/antlr/KerMLExpressionsParser.java b/org.omg.kerml.expressions.xtext.ide/src-gen/org/omg/kerml/expressions/xtext/ide/contentassist/antlr/KerMLExpressionsParser.java index d256fffc6..6cd4459b5 100644 --- a/org.omg.kerml.expressions.xtext.ide/src-gen/org/omg/kerml/expressions/xtext/ide/contentassist/antlr/KerMLExpressionsParser.java +++ b/org.omg.kerml.expressions.xtext.ide/src-gen/org/omg/kerml/expressions/xtext/ide/contentassist/antlr/KerMLExpressionsParser.java @@ -1,5 +1,5 @@ /* - * generated by Xtext 2.34.0 + * generated by Xtext 2.41.0 */ package org.omg.kerml.expressions.xtext.ide.contentassist.antlr; diff --git a/org.omg.kerml.expressions.xtext.ui/src-gen/org/omg/kerml/expressions/xtext/ui/AbstractKerMLExpressionsUiModule.java b/org.omg.kerml.expressions.xtext.ui/src-gen/org/omg/kerml/expressions/xtext/ui/AbstractKerMLExpressionsUiModule.java index 62864cd36..76d4ee512 100644 --- a/org.omg.kerml.expressions.xtext.ui/src-gen/org/omg/kerml/expressions/xtext/ui/AbstractKerMLExpressionsUiModule.java +++ b/org.omg.kerml.expressions.xtext.ui/src-gen/org/omg/kerml/expressions/xtext/ui/AbstractKerMLExpressionsUiModule.java @@ -1,5 +1,5 @@ /* - * generated by Xtext 2.34.0 + * generated by Xtext 2.41.0 */ package org.omg.kerml.expressions.xtext.ui; diff --git a/org.omg.kerml.expressions.xtext.ui/src-gen/org/omg/kerml/expressions/xtext/ui/KerMLExpressionsExecutableExtensionFactory.java b/org.omg.kerml.expressions.xtext.ui/src-gen/org/omg/kerml/expressions/xtext/ui/KerMLExpressionsExecutableExtensionFactory.java index c8bec0379..dc0113daf 100644 --- a/org.omg.kerml.expressions.xtext.ui/src-gen/org/omg/kerml/expressions/xtext/ui/KerMLExpressionsExecutableExtensionFactory.java +++ b/org.omg.kerml.expressions.xtext.ui/src-gen/org/omg/kerml/expressions/xtext/ui/KerMLExpressionsExecutableExtensionFactory.java @@ -1,5 +1,5 @@ /* - * generated by Xtext 2.34.0 + * generated by Xtext 2.41.0 */ package org.omg.kerml.expressions.xtext.ui; diff --git a/org.omg.kerml.expressions.xtext.ui/src-gen/org/omg/kerml/expressions/xtext/ui/internal/XtextActivator.java b/org.omg.kerml.expressions.xtext.ui/src-gen/org/omg/kerml/expressions/xtext/ui/internal/XtextActivator.java index 50db837c5..87f602f17 100644 --- a/org.omg.kerml.expressions.xtext.ui/src-gen/org/omg/kerml/expressions/xtext/ui/internal/XtextActivator.java +++ b/org.omg.kerml.expressions.xtext.ui/src-gen/org/omg/kerml/expressions/xtext/ui/internal/XtextActivator.java @@ -1,12 +1,12 @@ /* - * generated by Xtext 2.34.0 + * generated by Xtext 2.41.0 */ package org.omg.kerml.expressions.xtext.ui.internal; -import com.google.common.collect.Maps; import com.google.inject.Guice; import com.google.inject.Injector; import java.util.Collections; +import java.util.HashMap; import java.util.Map; import org.apache.log4j.Logger; import org.eclipse.ui.plugin.AbstractUIPlugin; @@ -29,7 +29,7 @@ public class XtextActivator extends AbstractUIPlugin { private static XtextActivator INSTANCE; - private Map injectors = Collections.synchronizedMap(Maps. newHashMapWithExpectedSize(1)); + private Map injectors = Collections.synchronizedMap(new HashMap<>(2)); @Override public void start(BundleContext context) throws Exception { diff --git a/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/AbstractKerMLExpressionsRuntimeModule.java b/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/AbstractKerMLExpressionsRuntimeModule.java index 1fd534d2b..d2571aa9c 100644 --- a/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/AbstractKerMLExpressionsRuntimeModule.java +++ b/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/AbstractKerMLExpressionsRuntimeModule.java @@ -1,5 +1,5 @@ /* - * generated by Xtext 2.34.0 + * generated by Xtext 2.41.0 */ package org.omg.kerml.expressions.xtext; diff --git a/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/KerMLExpressions.xtextbin b/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/KerMLExpressions.xtextbin index 58d41743412f8dad9d4ed55d98e68bc5a9f2ba69..85ad62b599997ce4ef7e2e0e01a8bb3cbf15d97f 100644 GIT binary patch delta 16 XcmeyD^e<^cI5V@Ef$8QbW)(dEK4t~W delta 16 XcmeyD^e<^cI5V@UfzjqDW)(dEK1>D2 diff --git a/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/KerMLExpressionsStandaloneSetupGenerated.java b/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/KerMLExpressionsStandaloneSetupGenerated.java index dced0576c..062df7aea 100644 --- a/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/KerMLExpressionsStandaloneSetupGenerated.java +++ b/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/KerMLExpressionsStandaloneSetupGenerated.java @@ -1,5 +1,5 @@ /* - * generated by Xtext 2.34.0 + * generated by Xtext 2.41.0 */ package org.omg.kerml.expressions.xtext; diff --git a/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/parser/antlr/KerMLExpressionsAntlrTokenFileProvider.java b/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/parser/antlr/KerMLExpressionsAntlrTokenFileProvider.java index 4fa252dbc..7c0bf707c 100644 --- a/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/parser/antlr/KerMLExpressionsAntlrTokenFileProvider.java +++ b/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/parser/antlr/KerMLExpressionsAntlrTokenFileProvider.java @@ -1,5 +1,5 @@ /* - * generated by Xtext 2.34.0 + * generated by Xtext 2.41.0 */ package org.omg.kerml.expressions.xtext.parser.antlr; diff --git a/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/parser/antlr/KerMLExpressionsParser.java b/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/parser/antlr/KerMLExpressionsParser.java index 3d2c15555..54e32b2e6 100644 --- a/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/parser/antlr/KerMLExpressionsParser.java +++ b/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/parser/antlr/KerMLExpressionsParser.java @@ -1,5 +1,5 @@ /* - * generated by Xtext 2.34.0 + * generated by Xtext 2.41.0 */ package org.omg.kerml.expressions.xtext.parser.antlr; diff --git a/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/parser/antlr/internal/InternalKerMLExpressions.g b/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/parser/antlr/internal/InternalKerMLExpressions.g index 7a4b868b6..aa2113f05 100644 --- a/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/parser/antlr/internal/InternalKerMLExpressions.g +++ b/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/parser/antlr/internal/InternalKerMLExpressions.g @@ -1,5 +1,5 @@ /* - * generated by Xtext 2.34.0 + * generated by Xtext 2.41.0 */ grammar InternalKerMLExpressions; diff --git a/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/scoping/AbstractKerMLExpressionsScopeProvider.java b/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/scoping/AbstractKerMLExpressionsScopeProvider.java index c428edb8a..19298dd71 100644 --- a/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/scoping/AbstractKerMLExpressionsScopeProvider.java +++ b/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/scoping/AbstractKerMLExpressionsScopeProvider.java @@ -1,5 +1,5 @@ /* - * generated by Xtext 2.34.0 + * generated by Xtext 2.41.0 */ package org.omg.kerml.expressions.xtext.scoping; diff --git a/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/serializer/AbstractKerMLExpressionsSemanticSequencer.java b/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/serializer/AbstractKerMLExpressionsSemanticSequencer.java index edd083691..8e75bf28f 100644 --- a/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/serializer/AbstractKerMLExpressionsSemanticSequencer.java +++ b/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/serializer/AbstractKerMLExpressionsSemanticSequencer.java @@ -1,5 +1,5 @@ /* - * generated by Xtext 2.34.0 + * generated by Xtext 2.41.0 */ package org.omg.kerml.expressions.xtext.serializer; @@ -684,8 +684,8 @@ protected void sequence_BodyParameterMember(ISerializationContext context, Param */ protected void sequence_BodyParameter(ISerializationContext context, Feature semanticObject) { if (errorAcceptor != null) { - if (transientValues.isValueTransient(semanticObject, SysMLPackage.Literals.ELEMENT__DECLARED_NAME) == ValueTransient.YES) - errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, SysMLPackage.Literals.ELEMENT__DECLARED_NAME)); + if (transientValues.isValueTransient(semanticObject, SysMLPackage.eINSTANCE.getElement_DeclaredName()) == ValueTransient.YES) + errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, SysMLPackage.eINSTANCE.getElement_DeclaredName())); } SequenceFeeder feeder = createSequencerFeeder(context, semanticObject); feeder.accept(grammarAccess.getBodyParameterAccess().getDeclaredNameNameParserRuleCall_0(), semanticObject.getDeclaredName()); @@ -771,11 +771,11 @@ protected void sequence_ConstructorResultMember(ISerializationContext context, R */ protected void sequence_ElementReferenceMember(ISerializationContext context, Membership semanticObject) { if (errorAcceptor != null) { - if (transientValues.isValueTransient(semanticObject, SysMLPackage.Literals.MEMBERSHIP__MEMBER_ELEMENT) == ValueTransient.YES) - errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, SysMLPackage.Literals.MEMBERSHIP__MEMBER_ELEMENT)); + if (transientValues.isValueTransient(semanticObject, SysMLPackage.eINSTANCE.getMembership_MemberElement()) == ValueTransient.YES) + errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, SysMLPackage.eINSTANCE.getMembership_MemberElement())); } SequenceFeeder feeder = createSequencerFeeder(context, semanticObject); - feeder.accept(grammarAccess.getElementReferenceMemberAccess().getMemberElementElementQualifiedNameParserRuleCall_0_1(), semanticObject.eGet(SysMLPackage.Literals.MEMBERSHIP__MEMBER_ELEMENT, false)); + feeder.accept(grammarAccess.getElementReferenceMemberAccess().getMemberElementElementQualifiedNameParserRuleCall_0_1(), semanticObject.eGet(SysMLPackage.eINSTANCE.getMembership_MemberElement(), false)); feeder.finish(); } @@ -861,11 +861,11 @@ protected void sequence_ExpressionBody(ISerializationContext context, Expression */ protected void sequence_FeatureChainMember(ISerializationContext context, Membership semanticObject) { if (errorAcceptor != null) { - if (transientValues.isValueTransient(semanticObject, SysMLPackage.Literals.MEMBERSHIP__MEMBER_ELEMENT) == ValueTransient.YES) - errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, SysMLPackage.Literals.MEMBERSHIP__MEMBER_ELEMENT)); + if (transientValues.isValueTransient(semanticObject, SysMLPackage.eINSTANCE.getMembership_MemberElement()) == ValueTransient.YES) + errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, SysMLPackage.eINSTANCE.getMembership_MemberElement())); } SequenceFeeder feeder = createSequencerFeeder(context, semanticObject); - feeder.accept(grammarAccess.getFeatureChainMemberAccess().getMemberElementFeatureQualifiedNameParserRuleCall_0_0_1(), semanticObject.eGet(SysMLPackage.Literals.MEMBERSHIP__MEMBER_ELEMENT, false)); + feeder.accept(grammarAccess.getFeatureChainMemberAccess().getMemberElementFeatureQualifiedNameParserRuleCall_0_0_1(), semanticObject.eGet(SysMLPackage.eINSTANCE.getMembership_MemberElement(), false)); feeder.finish(); } @@ -923,11 +923,11 @@ protected void sequence_FeatureReferenceExpression(ISerializationContext context */ protected void sequence_FeatureReferenceMember(ISerializationContext context, Membership semanticObject) { if (errorAcceptor != null) { - if (transientValues.isValueTransient(semanticObject, SysMLPackage.Literals.MEMBERSHIP__MEMBER_ELEMENT) == ValueTransient.YES) - errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, SysMLPackage.Literals.MEMBERSHIP__MEMBER_ELEMENT)); + if (transientValues.isValueTransient(semanticObject, SysMLPackage.eINSTANCE.getMembership_MemberElement()) == ValueTransient.YES) + errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, SysMLPackage.eINSTANCE.getMembership_MemberElement())); } SequenceFeeder feeder = createSequencerFeeder(context, semanticObject); - feeder.accept(grammarAccess.getFeatureReferenceMemberAccess().getMemberElementFeatureQualifiedNameParserRuleCall_0_1(), semanticObject.eGet(SysMLPackage.Literals.MEMBERSHIP__MEMBER_ELEMENT, false)); + feeder.accept(grammarAccess.getFeatureReferenceMemberAccess().getMemberElementFeatureQualifiedNameParserRuleCall_0_1(), semanticObject.eGet(SysMLPackage.eINSTANCE.getMembership_MemberElement(), false)); feeder.finish(); } @@ -1013,11 +1013,11 @@ protected void sequence_ImpliesExpressionReference(ISerializationContext context */ protected void sequence_InstantiatedTypeMember(ISerializationContext context, Membership semanticObject) { if (errorAcceptor != null) { - if (transientValues.isValueTransient(semanticObject, SysMLPackage.Literals.MEMBERSHIP__MEMBER_ELEMENT) == ValueTransient.YES) - errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, SysMLPackage.Literals.MEMBERSHIP__MEMBER_ELEMENT)); + if (transientValues.isValueTransient(semanticObject, SysMLPackage.eINSTANCE.getMembership_MemberElement()) == ValueTransient.YES) + errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, SysMLPackage.eINSTANCE.getMembership_MemberElement())); } SequenceFeeder feeder = createSequencerFeeder(context, semanticObject); - feeder.accept(grammarAccess.getInstantiatedTypeMemberAccess().getMemberElementTypeQualifiedNameParserRuleCall_0_0_1(), semanticObject.eGet(SysMLPackage.Literals.MEMBERSHIP__MEMBER_ELEMENT, false)); + feeder.accept(grammarAccess.getInstantiatedTypeMemberAccess().getMemberElementTypeQualifiedNameParserRuleCall_0_0_1(), semanticObject.eGet(SysMLPackage.eINSTANCE.getMembership_MemberElement(), false)); feeder.finish(); } @@ -1173,8 +1173,8 @@ protected void sequence_InvocationExpression_NamedArgumentList_PositionalArgumen */ protected void sequence_LiteralBoolean(ISerializationContext context, LiteralBoolean semanticObject) { if (errorAcceptor != null) { - if (transientValues.isValueTransient(semanticObject, SysMLPackage.Literals.LITERAL_BOOLEAN__VALUE) == ValueTransient.YES) - errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, SysMLPackage.Literals.LITERAL_BOOLEAN__VALUE)); + if (transientValues.isValueTransient(semanticObject, SysMLPackage.eINSTANCE.getLiteralBoolean_Value()) == ValueTransient.YES) + errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, SysMLPackage.eINSTANCE.getLiteralBoolean_Value())); } SequenceFeeder feeder = createSequencerFeeder(context, semanticObject); feeder.accept(grammarAccess.getLiteralBooleanAccess().getValueBooleanValueParserRuleCall_0(), semanticObject.isValue()); @@ -1287,8 +1287,8 @@ protected void sequence_LiteralInfinity(ISerializationContext context, LiteralIn */ protected void sequence_LiteralInteger(ISerializationContext context, LiteralInteger semanticObject) { if (errorAcceptor != null) { - if (transientValues.isValueTransient(semanticObject, SysMLPackage.Literals.LITERAL_INTEGER__VALUE) == ValueTransient.YES) - errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, SysMLPackage.Literals.LITERAL_INTEGER__VALUE)); + if (transientValues.isValueTransient(semanticObject, SysMLPackage.eINSTANCE.getLiteralInteger_Value()) == ValueTransient.YES) + errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, SysMLPackage.eINSTANCE.getLiteralInteger_Value())); } SequenceFeeder feeder = createSequencerFeeder(context, semanticObject); feeder.accept(grammarAccess.getLiteralIntegerAccess().getValueDECIMAL_VALUETerminalRuleCall_0(), semanticObject.getValue()); @@ -1347,8 +1347,8 @@ protected void sequence_LiteralInteger(ISerializationContext context, LiteralInt */ protected void sequence_LiteralReal(ISerializationContext context, LiteralRational semanticObject) { if (errorAcceptor != null) { - if (transientValues.isValueTransient(semanticObject, SysMLPackage.Literals.LITERAL_RATIONAL__VALUE) == ValueTransient.YES) - errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, SysMLPackage.Literals.LITERAL_RATIONAL__VALUE)); + if (transientValues.isValueTransient(semanticObject, SysMLPackage.eINSTANCE.getLiteralRational_Value()) == ValueTransient.YES) + errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, SysMLPackage.eINSTANCE.getLiteralRational_Value())); } SequenceFeeder feeder = createSequencerFeeder(context, semanticObject); feeder.accept(grammarAccess.getLiteralRealAccess().getValueRealValueParserRuleCall_0(), semanticObject.getValue()); @@ -1407,8 +1407,8 @@ protected void sequence_LiteralReal(ISerializationContext context, LiteralRation */ protected void sequence_LiteralString(ISerializationContext context, LiteralString semanticObject) { if (errorAcceptor != null) { - if (transientValues.isValueTransient(semanticObject, SysMLPackage.Literals.LITERAL_STRING__VALUE) == ValueTransient.YES) - errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, SysMLPackage.Literals.LITERAL_STRING__VALUE)); + if (transientValues.isValueTransient(semanticObject, SysMLPackage.eINSTANCE.getLiteralString_Value()) == ValueTransient.YES) + errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, SysMLPackage.eINSTANCE.getLiteralString_Value())); } SequenceFeeder feeder = createSequencerFeeder(context, semanticObject); feeder.accept(grammarAccess.getLiteralStringAccess().getValueSTRING_VALUETerminalRuleCall_0(), semanticObject.getValue()); @@ -1671,11 +1671,11 @@ protected void sequence_OwnedExpressionReference(ISerializationContext context, */ protected void sequence_OwnedFeatureChaining(ISerializationContext context, FeatureChaining semanticObject) { if (errorAcceptor != null) { - if (transientValues.isValueTransient(semanticObject, SysMLPackage.Literals.FEATURE_CHAINING__CHAINING_FEATURE) == ValueTransient.YES) - errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, SysMLPackage.Literals.FEATURE_CHAINING__CHAINING_FEATURE)); + if (transientValues.isValueTransient(semanticObject, SysMLPackage.eINSTANCE.getFeatureChaining_ChainingFeature()) == ValueTransient.YES) + errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, SysMLPackage.eINSTANCE.getFeatureChaining_ChainingFeature())); } SequenceFeeder feeder = createSequencerFeeder(context, semanticObject); - feeder.accept(grammarAccess.getOwnedFeatureChainingAccess().getChainingFeatureFeatureQualifiedNameParserRuleCall_0_1(), semanticObject.eGet(SysMLPackage.Literals.FEATURE_CHAINING__CHAINING_FEATURE, false)); + feeder.accept(grammarAccess.getOwnedFeatureChainingAccess().getChainingFeatureFeatureQualifiedNameParserRuleCall_0_1(), semanticObject.eGet(SysMLPackage.eINSTANCE.getFeatureChaining_ChainingFeature(), false)); feeder.finish(); } @@ -1691,11 +1691,11 @@ protected void sequence_OwnedFeatureChaining(ISerializationContext context, Feat */ protected void sequence_ParameterRedefinition(ISerializationContext context, Redefinition semanticObject) { if (errorAcceptor != null) { - if (transientValues.isValueTransient(semanticObject, SysMLPackage.Literals.REDEFINITION__REDEFINED_FEATURE) == ValueTransient.YES) - errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, SysMLPackage.Literals.REDEFINITION__REDEFINED_FEATURE)); + if (transientValues.isValueTransient(semanticObject, SysMLPackage.eINSTANCE.getRedefinition_RedefinedFeature()) == ValueTransient.YES) + errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, SysMLPackage.eINSTANCE.getRedefinition_RedefinedFeature())); } SequenceFeeder feeder = createSequencerFeeder(context, semanticObject); - feeder.accept(grammarAccess.getParameterRedefinitionAccess().getRedefinedFeatureFeatureQualifiedNameParserRuleCall_0_1(), semanticObject.eGet(SysMLPackage.Literals.REDEFINITION__REDEFINED_FEATURE, false)); + feeder.accept(grammarAccess.getParameterRedefinitionAccess().getRedefinedFeatureFeatureQualifiedNameParserRuleCall_0_1(), semanticObject.eGet(SysMLPackage.eINSTANCE.getRedefinition_RedefinedFeature(), false)); feeder.finish(); } @@ -1939,11 +1939,11 @@ protected void sequence_PrimaryExpression(ISerializationContext context, SelectE */ protected void sequence_ReferenceTyping(ISerializationContext context, FeatureTyping semanticObject) { if (errorAcceptor != null) { - if (transientValues.isValueTransient(semanticObject, SysMLPackage.Literals.FEATURE_TYPING__TYPE) == ValueTransient.YES) - errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, SysMLPackage.Literals.FEATURE_TYPING__TYPE)); + if (transientValues.isValueTransient(semanticObject, SysMLPackage.eINSTANCE.getFeatureTyping_Type()) == ValueTransient.YES) + errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, SysMLPackage.eINSTANCE.getFeatureTyping_Type())); } SequenceFeeder feeder = createSequencerFeeder(context, semanticObject); - feeder.accept(grammarAccess.getReferenceTypingAccess().getTypeTypeQualifiedNameParserRuleCall_0_1(), semanticObject.eGet(SysMLPackage.Literals.FEATURE_TYPING__TYPE, false)); + feeder.accept(grammarAccess.getReferenceTypingAccess().getTypeTypeQualifiedNameParserRuleCall_0_1(), semanticObject.eGet(SysMLPackage.eINSTANCE.getFeatureTyping_Type(), false)); feeder.finish(); } diff --git a/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/serializer/AbstractKerMLExpressionsSyntacticSequencer.java b/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/serializer/AbstractKerMLExpressionsSyntacticSequencer.java index 977d68014..8bb276c17 100644 --- a/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/serializer/AbstractKerMLExpressionsSyntacticSequencer.java +++ b/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/serializer/AbstractKerMLExpressionsSyntacticSequencer.java @@ -1,5 +1,5 @@ /* - * generated by Xtext 2.34.0 + * generated by Xtext 2.41.0 */ package org.omg.kerml.expressions.xtext.serializer; diff --git a/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/services/KerMLExpressionsGrammarAccess.java b/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/services/KerMLExpressionsGrammarAccess.java index ac3d1395a..c0408e2ea 100644 --- a/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/services/KerMLExpressionsGrammarAccess.java +++ b/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/services/KerMLExpressionsGrammarAccess.java @@ -1,5 +1,5 @@ /* - * generated by Xtext 2.34.0 + * generated by Xtext 2.41.0 */ package org.omg.kerml.expressions.xtext.services; diff --git a/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/validation/AbstractKerMLExpressionsValidator.java b/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/validation/AbstractKerMLExpressionsValidator.java index 6078a70f6..48e0b38ee 100644 --- a/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/validation/AbstractKerMLExpressionsValidator.java +++ b/org.omg.kerml.expressions.xtext/src-gen/org/omg/kerml/expressions/xtext/validation/AbstractKerMLExpressionsValidator.java @@ -1,5 +1,5 @@ /* - * generated by Xtext 2.34.0 + * generated by Xtext 2.41.0 */ package org.omg.kerml.expressions.xtext.validation; @@ -13,7 +13,7 @@ public abstract class AbstractKerMLExpressionsValidator extends AbstractDeclarat @Override protected List getEPackages() { List result = new ArrayList(); - result.add(EPackage.Registry.INSTANCE.getEPackage("https://www.omg.org/spec/SysML/20250201")); + result.add(EPackage.Registry.INSTANCE.getEPackage("https://www.omg.org/spec/SysML/20260501")); return result; } } diff --git a/org.omg.kerml.owl/transforms/SysML2OWL.qvto b/org.omg.kerml.owl/transforms/SysML2OWL.qvto index 7273d34c4..6ce798bec 100644 --- a/org.omg.kerml.owl/transforms/SysML2OWL.qvto +++ b/org.omg.kerml.owl/transforms/SysML2OWL.qvto @@ -21,7 +21,7 @@ * *****************************************************************************/ -modeltype SysML uses "https://www.omg.org/spec/SysML/20250201"; +modeltype SysML uses "https://www.omg.org/spec/SysML/20260501"; modeltype OWL uses "http://www.omg.org/spec/SysML/2.0/OWL"; modeltype Ecore uses "http://www.eclipse.org/emf/2002/Ecore"; diff --git a/org.omg.kerml.xtext/src-gen/org/omg/kerml/xtext/KerML.xtextbin b/org.omg.kerml.xtext/src-gen/org/omg/kerml/xtext/KerML.xtextbin index 397ae904b5e0fa4920fe794de075f3762eb897e2..66f195a95416ca3bd74c81c9e07a7c36d7ccf1cc 100644 GIT binary patch delta 18 ZcmX>#pXt#pXt getEPackages() { List result = new ArrayList(super.getEPackages()); - result.add(EPackage.Registry.INSTANCE.getEPackage("https://www.omg.org/spec/SysML/20250201")); + result.add(EPackage.Registry.INSTANCE.getEPackage("https://www.omg.org/spec/SysML/20260501")); return result; } } diff --git a/org.omg.sysml.model/src/main/resources/model/SysML.ecore b/org.omg.sysml.model/src/main/resources/model/SysML.ecore index 29505e1d1..73921612c 100644 --- a/org.omg.sysml.model/src/main/resources/model/SysML.ecore +++ b/org.omg.sysml.model/src/main/resources/model/SysML.ecore @@ -1,13 +1,13 @@ + xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="sysml" nsURI="https://www.omg.org/spec/SysML/20260501" nsPrefix="sysml">

-
+
@@ -291,7 +291,7 @@ -
+
-
+
@@ -736,7 +736,7 @@ -
+
@@ -841,7 +841,7 @@ -
+
@@ -851,7 +851,7 @@ -
+
@@ -915,12 +915,12 @@ -
+
-
+
@@ -1088,7 +1088,7 @@
-
+
@@ -1682,7 +1682,7 @@ -
+
@@ -1988,7 +1988,7 @@ -
+
@@ -2630,7 +2630,7 @@ -
+
@@ -2904,7 +2904,7 @@ -
+
@@ -3009,7 +3009,7 @@ -
+
@@ -3367,7 +3367,7 @@ ordered="false" eType="#//ConjugatedPortDefinition" volatile="true" transient="true" derived="true" eOpposite="#//ConjugatedPortDefinition/originalPortDefinition"> -
+
@@ -3661,7 +3661,7 @@
-
+
@@ -3688,7 +3688,7 @@ -
+
@@ -3837,7 +3837,7 @@ -
+
-
+
+ eType="#//Expression" volatile="true" transient="true" derived="true">
@@ -4826,7 +4826,7 @@ -
+
@@ -4962,7 +4962,7 @@
-
+
@@ -5028,7 +5028,7 @@
-
+
@@ -5469,7 +5469,7 @@ -
+
@@ -5484,7 +5484,7 @@ -
+
diff --git a/org.omg.sysml.model/src/main/resources/model/SysML.genmodel b/org.omg.sysml.model/src/main/resources/model/SysML.genmodel index 1129c3e73..c1ac4fb9a 100644 --- a/org.omg.sysml.model/src/main/resources/model/SysML.genmodel +++ b/org.omg.sysml.model/src/main/resources/model/SysML.genmodel @@ -1,7 +1,7 @@ @@ -29,7 +29,7 @@
- ../../../../../org.omg.sysml/model/SysML.uml + SysML.uml diff --git a/org.omg.sysml.xtext/.launch/Generate SysML (sysml) Language Infrastructure.launch b/org.omg.sysml.xtext/.launch/Generate SysML (sysml) Language Infrastructure.launch index f1ea2d4d6..49d1f1483 100644 --- a/org.omg.sysml.xtext/.launch/Generate SysML (sysml) Language Infrastructure.launch +++ b/org.omg.sysml.xtext/.launch/Generate SysML (sysml) Language Infrastructure.launch @@ -18,7 +18,7 @@ - + diff --git a/org.omg.sysml.xtext/src-gen/org/omg/sysml/xtext/SysML.xtextbin b/org.omg.sysml.xtext/src-gen/org/omg/sysml/xtext/SysML.xtextbin index e25accb398a2d69fd78ca28d121be90e5c48900c..95a70a2089bdeb0afe859dfb0bf47e557876aa15 100644 GIT binary patch delta 18 acmcb0m-*IR<_#^(%w`6ro7 getEPackages() { List result = new ArrayList(super.getEPackages()); - result.add(EPackage.Registry.INSTANCE.getEPackage("https://www.omg.org/spec/SysML/20250201")); + result.add(EPackage.Registry.INSTANCE.getEPackage("https://www.omg.org/spec/SysML/20260501")); return result; } } diff --git a/org.omg.sysml/plugin.xml b/org.omg.sysml/plugin.xml index 4c134f238..bb7c8c5b8 100644 --- a/org.omg.sysml/plugin.xml +++ b/org.omg.sysml/plugin.xml @@ -10,7 +10,7 @@ From aaeaa8bbdd1d3542af669341f92927e06126d011 Mon Sep 17 00:00:00 2001 From: Ed Seidewitz Date: Fri, 22 May 2026 12:00:54 -0700 Subject: [PATCH 5/6] ST6RI-934 Corrected .edit and .editor directories in genmodel. --- org.omg.sysml.model/src/main/resources/model/SysML.genmodel | 5 +++-- org.omg.sysml/model/SysML.genmodel | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/org.omg.sysml.model/src/main/resources/model/SysML.genmodel b/org.omg.sysml.model/src/main/resources/model/SysML.genmodel index c1ac4fb9a..06621cba8 100644 --- a/org.omg.sysml.model/src/main/resources/model/SysML.genmodel +++ b/org.omg.sysml.model/src/main/resources/model/SysML.genmodel @@ -1,8 +1,9 @@ diff --git a/org.omg.sysml/model/SysML.genmodel b/org.omg.sysml/model/SysML.genmodel index c1ac4fb9a..06621cba8 100644 --- a/org.omg.sysml/model/SysML.genmodel +++ b/org.omg.sysml/model/SysML.genmodel @@ -1,8 +1,9 @@ From 3651e87a5b5c1ada01e5e1bba2c08888ab0e0602 Mon Sep 17 00:00:00 2001 From: Ed Seidewitz Date: Fri, 22 May 2026 14:22:22 -0700 Subject: [PATCH 6/6] ST6RI-934 Corrected genModel reference in org.omg.sysml/plugin.xml. --- org.omg.sysml/plugin.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org.omg.sysml/plugin.xml b/org.omg.sysml/plugin.xml index bb7c8c5b8..21f821de5 100644 --- a/org.omg.sysml/plugin.xml +++ b/org.omg.sysml/plugin.xml @@ -12,7 +12,7 @@ + genModel="platform:/plugin/org.omg.sysml/model/SysML.genmodel"/>