From 478658b248cdb887694feca737b283b8395be0a4 Mon Sep 17 00:00:00 2001 From: Ed Seidewitz Date: Fri, 31 Jul 2026 17:53:52 -0400 Subject: [PATCH 1/5] ST6RI-956 Updated all .uml files for the 2026-07 abstract syntax model. --- org.omg.sysml/model/KerML_only.uml | 9017 ++++----- org.omg.sysml/model/KerML_only_xmi.uml | 47 +- org.omg.sysml/model/SysML.uml | 23387 ++++++++++++----------- org.omg.sysml/model/SysML_only.uml | 11555 +++++------ org.omg.sysml/model/SysML_only_xmi.uml | 35 +- org.omg.sysml/model/SysML_xmi.uml | 79 +- 6 files changed, 22139 insertions(+), 21981 deletions(-) diff --git a/org.omg.sysml/model/KerML_only.uml b/org.omg.sysml/model/KerML_only.uml index aa488c8ba..3b3e74a94 100644 --- a/org.omg.sysml/model/KerML_only.uml +++ b/org.omg.sysml/model/KerML_only.uml @@ -1,316 +1,583 @@ - - - - <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> - -<p>The <code>relatedElements</code> of a <code>Relationship</code> are divided into <code>source</code> and <code>target</code> <code>Elements</code>. The <code>Relationship</code> is considered to be directed from the <code>source</code> to the <code>target</code> <code>Elements</code>. An undirected <code>Relationship</code> may have either all <code>source</code> or all <code>target</code> <code>Elements</code>.</p> - -<p>A &quot;relationship <code>Element</code>&quot; in the abstract syntax is generically any <code>Element</code> that is an instance of either <code>Relationship</code> or a direct or indirect specialization of <code>Relationship</code>. Any other kind of <code>Element</code> is a &quot;non-relationship <code>Element</code>&quot;. It is a convention of that non-relationship <code>Elements</code> are <em>only</em> related via reified relationship <code>Elements</code>. Any meta-associations directly between non-relationship <code>Elements</code> must be derived from underlying reified <code>Relationship</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>The <code>relatedElements</code> of a <code>Relationship</code> consist of all of its <code>source</code> <code>Elements</code> followed by all of its <code>target</code> <code>Elements</code>.</p> - - - OCL2.0 - relatedElement = source->union(target) - - - - - - <p>The Elements that are related by this Relationship, derived as the union of the <code>source</code> and <code>target</code> Elements of the Relationship.</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>relatedElements</code> to which this Relationship is considered to be directed.</p> + + + <p>The annotation text for the <code>Comment</code>.</p> - - + + + - - - <p>The <code>relatedElements</c ode> from which this Relationship is considered to be directed.</p> + + + + + <p>The AnnotatingElements that have a certain Element as their <code>annotatedElement</code>.</p> - - - - - - <p>The <tt>relatedElement</tt> of this Relationship that owns the Relationship, if any.</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 <tt>relatedElements</tt> of this Relationship that are owned by the Relationship.</p> + + + <p>The <code>Element</code> that is represented by this <code>TextualRepresentation</code>.</p> + - - + + - - - <p>Whether this Relationship was generated by tooling to meet semantic rules, rather than being directly created by a modeler.</p> + + + <p>The textual representation of the <code>representedElement</code> in the given <code>language</code>.</p> + - - + + + - - - <p>Return whether this Relationship has either an <code>owningRelatedElement</code> or <code>owningRelationship</code> that is a library element.</p> - - - - OCL2.0 - if owningRelatedElement <> null then owningRelatedElement.libraryNamespace() -else if owningRelationship <> null then owningRelationship.libraryNamespace() -else null endif endif - - - - - - - - - - <p>If the <code>owningRelationship</code> of the <code>Relationship</code> is null but its <code>owningRelatedElement</code> is non-null, construct the <code>path</code> using the position of the <code>Relationship</code> in the list of <code>ownedRelationships</code> of its <code>owningRelatedElement</code>. Otherwise, return the <code>path</code> of the <code>Relationship</code> as specified for an <code>Element</code> in general.</p> - - - - OCL2.0 - if owningRelationship = null and owningRelatedElement <> null then - owningRelatedElement.path() + '/' + - owningRelatedElement.ownedRelationship->indexOf(self).toString() - -- A position index shall be converted to a decimal string representation - -- consisting of only decimal digits, with no sign, leading zeros or leading - -- or trailing whitespace. -else self.oclAsType(Element).path() -endif - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <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> + + + <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>ownedElements</code> of an <code>Element</code> are the <code>ownedRelatedElements</code> of its <code>ownedRelationships</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 - ownedElement = ownedRelationship.ownedRelatedElement + (owningAnnotatedElement <> null) = (ownedAnnotatingElement <> null) - - - <p>The <code>owner</code> of an <code>Element</code> is the <code>owningRelatedElement</code> of its <code>owningRelationship</code>.</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 - owner = owningRelationship.owningRelatedElement + ownedAnnotatingElement <> null xor owningAnnotatingElement <> null - - - <p>If this <code>Element</code> does not have an <code>owningNamespace</code>, then its <code>qualifiedName</code> is null. If the <code>owningNamespace</code> of this Element is a root <code>Namespace</code>, then the <code>qualifiedName</code> of the <code>Element</code> is the escaped name of the <code>Element</code> (if any). If the <code>owningNamespace</code> is non-null but not a root <code>Namespace</code>, then the <code>qualifiedName</code> of this <code>Element</code> is constructed from the <code>qualifiedName</code> of the <code>owningNamespace</code> and the escaped name of the <code>Element</code>, unless the <code>qualifiedName</code> of the <code>owningNamespace</code> is null or the escaped name is null, in which case the <code>qualifiedName</code> of this <code>Element</code> is also null. Further, if the <code>owningNamespace</code> has other <code>ownedMembers</code> with the same non-null name as this <code>Element</code>, and this <code>Element</code> is not the first, then the <code>qualifiedName</code> of this <code>Element</code> is null.</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 - qualifiedName = - if owningNamespace = null then null - else if name <> null and - owningNamespace.ownedMember-> - select(m | m.name = name).indexOf(self) <> 1 then null - else if owningNamespace.owner = null then escapedName() - else if owningNamespace.qualifiedName = null or - escapedName() = null then null - else owningNamespace.qualifiedName + '::' + escapedName() - endif endif endif endif + ownedAnnotatingElement = + let ownedAnnotatingElements : Sequence(AnnotatingElement) = + ownedRelatedElement->selectByKind(AnnotatingElement) in + if ownedAnnotatingElements->isEmpty() then null + else ownedAnnotatingElements->first() + endif - - - <p>The <code>documentation</code> of an <code>Element</code> is its <code>ownedElements</code> that are <code>Documentation</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 - documentation = ownedElement->selectByKind(Documentation) + annotatingElement = + if ownedAnnotatingElement <> null then ownedAnnotatingElement + else owningAnnotatingElement + endif - - - <p>The <code>ownedAnnotations</code> of an <code>Element</code> are its <code>ownedRelationships</code> that are <code>Annotations</code>, for which the <code>Element</code> is the <code>annotatedElement</code>.</p> - - - OCL2.0 - ownedAnnotation = ownedRelationship-> - selectByKind(Annotation)-> - select(a | a.annotatedElement = self) - - - - - <p>The <code>name</code> of an <code>Element</code> is given by the result of the <code>effectiveName()</code> operation.</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> + - - OCL2.0 - name = effectiveName() - - - - - <p>If an <code>Element</code> has any <code>ownedRelationships</code> for which <code>isImplied = true</code>, then the <code>Element</code> must also have <code>isImpliedIncluded = true</code>. (Note that an <code>Element</code> <em>can</em> have <code>isImplied = true</code> even if no <code>ownedRelationships</code> have <code>isImplied = true</code>, indicating the <code>Element</code> simply has no implied <code>Relationships</code>.</p> + + + + + + <p>The <code>Element</code> that is annotated by the <code>annotatingElement</code> of this Annotation.</p> + - - OCL2.0 - ownedRelationship->exists(isImplied) implies isImpliedIncluded - - - - - <p>An <code>Element</code> <code>isLibraryElement</code> if <code>libraryNamespace()</code> is not null.</p> + + + + + + <p>The <code>annotatedElement</code> of this <code>Annotation</code>, when it is also the <code>owningRelatedElement</code>.</p> + - - OCL2.0 - isLibraryElement = libraryNamespace() <> null + + + + + + <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 Annotations associated with a certain <code>annotatedElement</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>The <code>shortName</code> of an <code>Element</code> is given by the result of the <code>effectiveShortName()</code> operation.</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 - shortName = effectiveShortName() + annotatedElement = + if annotation->notEmpty() then annotation.annotatedElement + else Sequence{owningNamespace} endif - - - <p>The <code>owningNamespace</code> of an <code>Element</code> is the <code>membershipOwningNamespace</code> of its <code>owningMembership</code> (if any).</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 - owningNamespace = - if owningMembership = null then null - else owningMembership.membershipOwningNamespace - endif + ownedAnnotatingRelationship = ownedRelationship-> + selectByKind(Annotation)-> + select(a | a.annotatedElement <> self) - - - <p>The <code>textualRepresentations</code> of an <code>Element</code> are its <code>ownedElements</code> that are <code>TextualRepresentations</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 - textualRepresentation = ownedElement->selectByKind(TextualRepresentation) + annotation = + if owningAnnotatingRelationship = null then ownedAnnotatingRelationship + else owningAnnotatingRelationship->prepend(owningAnnotatingRelationship) + endif - - - <p>The <code>owningRelationship</code> of this <code>Element</code>, if that <code>Relationship</code> is a <code>Membership</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 Relationship for which this Element is an <tt>ownedRelatedElement</tt>, if any.</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>Namespace</code> that owns this <code>Element</code>, which is the <code>membershipOwningNamespace</code> of the <code>owningMembership</code> of this <code>Element</code>, if any.</p> - + + + <p>The <code>owningRelationship</code> of this <code>AnnotatingRelationship</code>, if it is an <code>Annotation</code></p> - - + + - - - <p>The globally unique identifier for this Element. This is intended to be set by tooling, and it must not change during the lifetime of the Element.</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 Relationships for which this Element is the <tt>owningRelatedElement</tt>.</p> + + + + + + + + + + + + + <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> + +<p>The <code>relatedElements</code> of a <code>Relationship</code> are divided into <code>source</code> and <code>target</code> <code>Elements</code>. The <code>Relationship</code> is considered to be directed from the <code>source</code> to the <code>target</code> <code>Elements</code>. An undirected <code>Relationship</code> may have either all <code>source</code> or all <code>target</code> <code>Elements</code>.</p> + +<p>A &quot;relationship <code>Element</code>&quot; in the abstract syntax is generically any <code>Element</code> that is an instance of either <code>Relationship</code> or a direct or indirect specialization of <code>Relationship</code>. Any other kind of <code>Element</code> is a &quot;non-relationship <code>Element</code>&quot;. It is a convention of that non-relationship <code>Elements</code> are <em>only</em> related via reified relationship <code>Elements</code>. Any meta-associations directly between non-relationship <code>Elements</code> must be derived from underlying reified <code>Relationship</code>.</p> + + + + + <p>The <code>relatedElements</code> of a <code>Relationship</code> consist of all of its <code>source</code> <code>Elements</code> followed by all of its <code>target</code> <code>Elements</code>.</p> - - - - - - <p>The owner of this Element, derived as the <code>owningRelatedElement</code> of the <code>owningRelationship</code> of this Element, if any.</p> + + OCL2.0 + relatedElement = source->union(target) + + + + + + <p>The Elements that are related by this Relationship, derived as the union of the <code>source</code> and <code>target</code> Elements of the Relationship.</p> - - + + - - - <p>The Elements owned by this Element, derived as the <tt>ownedRelatedElements</tt> of the <tt>ownedRelationships</tt> of this Element.</p> + + + <p>The <code>relatedElements</code> to which this Relationship is considered to be directed.</p> - - + + - - - <p>The Documentation owned by this Element.</p> + + + <p>The <code>relatedElements</c ode> from which this Relationship is considered to be directed.</p> - - + + - - - <p>The <code>ownedRelationships</code> of this <code>Element</code> that are <code>Annotations</code>, for which this <code>Element</code> is the <code>annotatedElement</code>.</code> + + + <p>The <tt>relatedElement</tt> of this Relationship that owns the Relationship, if any.</p> - - + + - + + + <p>The <tt>relatedElements</tt> of this Relationship that are owned by the Relationship.</p> + + + + + + + <p>Whether this Relationship was generated by tooling to meet semantic rules, rather than being directly created by a modeler.</p> + + + + + + + <p>Return whether this Relationship has either an <code>owningRelatedElement</code> or <code>owningRelationship</code> that is a library element.</p> + + + + OCL2.0 + if owningRelatedElement <> null then owningRelatedElement.libraryNamespace() +else if owningRelationship <> null then owningRelationship.libraryNamespace() +else null endif endif + + + + + + + + + + <p>If the <code>owningRelationship</code> of the <code>Relationship</code> is null but its <code>owningRelatedElement</code> is non-null, construct the <code>path</code> using the position of the <code>Relationship</code> in the list of <code>ownedRelationships</code> of its <code>owningRelatedElement</code>. Otherwise, return the <code>path</code> of the <code>Relationship</code> as specified for an <code>Element</code> in general.</p> + + + + OCL2.0 + if owningRelationship = null and owningRelatedElement <> null then + owningRelatedElement.path() + '/' + + owningRelatedElement.ownedRelationship->indexOf(self).toString() + -- A position index shall be converted to a decimal string representation + -- consisting of only decimal digits, with no sign, leading zeros or leading + -- or trailing whitespace. +else self.oclAsType(Element).path() +endif + + + + + + + + + + + + <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> + + + + + <p>The <code>ownedElements</code> of an <code>Element</code> are the <code>ownedRelatedElements</code> of its <code>ownedRelationships</code>.</p> + + + OCL2.0 + ownedElement = ownedRelationship.ownedRelatedElement + + + + + <p>The <code>owner</code> of an <code>Element</code> is the <code>owningRelatedElement</code> of its <code>owningRelationship</code>.</p> + + + OCL2.0 + owner = owningRelationship.owningRelatedElement + + + + + <p>If this <code>Element</code> does not have an <code>owningNamespace</code>, then its <code>qualifiedName</code> is null. If the <code>owningNamespace</code> of this Element is a root <code>Namespace</code>, then the <code>qualifiedName</code> of the <code>Element</code> is the escaped name of the <code>Element</code> (if any). If the <code>owningNamespace</code> is non-null but not a root <code>Namespace</code>, then the <code>qualifiedName</code> of this <code>Element</code> is constructed from the <code>qualifiedName</code> of the <code>owningNamespace</code> and the escaped name of the <code>Element</code>, unless the <code>qualifiedName</code> of the <code>owningNamespace</code> is null or the escaped name is null, in which case the <code>qualifiedName</code> of this <code>Element</code> is also null. Further, if the <code>owningNamespace</code> has other <code>ownedMembers</code> with the same non-null name as this <code>Element</code>, and this <code>Element</code> is not the first, then the <code>qualifiedName</code> of this <code>Element</code> is null.</p> + + + OCL2.0 + qualifiedName = + if owningNamespace = null then null + else if name <> null and + owningNamespace.ownedMember-> + select(m | m.name = name).indexOf(self) <> 1 then null + else if owningNamespace.owner = null then escapedName() + else if owningNamespace.qualifiedName = null or + escapedName() = null then null + else owningNamespace.qualifiedName + '::' + escapedName() + endif endif endif endif + + + + + <p>The <code>documentation</code> of an <code>Element</code> is its <code>ownedElements</code> that are <code>Documentation</code>.</p> + + + OCL2.0 + documentation = ownedElement->selectByKind(Documentation) + + + + + <p>The <code>ownedAnnotations</code> of an <code>Element</code> are its <code>ownedRelationships</code> that are <code>Annotations</code>, for which the <code>Element</code> is the <code>annotatedElement</code>.</p> + + + OCL2.0 + ownedAnnotation = ownedRelationship-> + selectByKind(Annotation)-> + select(a | a.annotatedElement = self) + + + + + <p>The <code>name</code> of an <code>Element</code> is given by the result of the <code>effectiveName()</code> operation.</p> + + + OCL2.0 + name = effectiveName() + + + + + <p>If an <code>Element</code> has any <code>ownedRelationships</code> for which <code>isImplied = true</code>, then the <code>Element</code> must also have <code>isImpliedIncluded = true</code>. (Note that an <code>Element</code> <em>can</em> have <code>isImplied = true</code> even if no <code>ownedRelationships</code> have <code>isImplied = true</code>, indicating the <code>Element</code> simply has no implied <code>Relationships</code>.</p> + + + OCL2.0 + ownedRelationship->exists(isImplied) implies isImpliedIncluded + + + + + <p>An <code>Element</code> <code>isLibraryElement</code> if <code>libraryNamespace()</code> is not null.</p> + + + OCL2.0 + isLibraryElement = libraryNamespace() <> null + + + + + + <p>The <code>shortName</code> of an <code>Element</code> is given by the result of the <code>effectiveShortName()</code> operation.</p> + + + OCL2.0 + shortName = effectiveShortName() + + + + + <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 + owningNamespace = + if owningMembership = null then null + else owningMembership.membershipOwningNamespace + endif + + + + + <p>The <code>textualRepresentations</code> of an <code>Element</code> are its <code>ownedElements</code> that are <code>TextualRepresentations</code>.</p> + + + OCL2.0 + textualRepresentation = ownedElement->selectByKind(TextualRepresentation) + + + + + <p>The <code>owningRelationship</code> of this <code>Element</code>, if that <code>Relationship</code> is a <code>Membership</code>.</p> + + + + + + + + <p>The Relationship for which this Element is an <tt>ownedRelatedElement</tt>, if any.</p> + + + + + + + + <p>The <code>Namespace</code> that owns this <code>Element</code>, which is the <code>membershipOwningNamespace</code> of the <code>owningMembership</code> of this <code>Element</code>, if any.</p> + + + + + + + + <p>The globally unique identifier for this Element. This is intended to be set by tooling, and it must not change during the lifetime of the Element.</p> + + + + + + <p>The Relationships for which this Element is the <tt>owningRelatedElement</tt>.</p> + + + + + + + <p>The owner of this Element, derived as the <code>owningRelatedElement</code> of the <code>owningRelationship</code> of this Element, if any.</p> + + + + + + + <p>The Elements owned by this Element, derived as the <tt>ownedRelatedElements</tt> of the <tt>ownedRelationships</tt> of this Element.</p> + + + + + + + + <p>The Documentation owned by this Element.</p> + + + + + + + <p>The <code>ownedRelationships</code> of this <code>Element</code> that are <code>Annotations</code>, for which this <code>Element</code> is the <code>annotatedElement</code>.</code> + + + + + <p>The <code>TextualRepresentations</code> that annotate this <code>Element</code>.</p> @@ -463,6 +730,19 @@ endif endif + + + + + + + + + + + + + <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> @@ -485,15 +765,6 @@ endif endif - - - - <p>The <code>Dependencies</code> that have a certain <code>client</code> <code>Element</code>.</p> - - - - - @@ -503,213 +774,85 @@ endif endif - - - - - <p>A NamespaceImport that has a certain <code>importedNamespace</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>An Import with a certain <code>importedElement</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>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>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>memberElementId</code> of a <code>Membership</code> is the <code>elementId</code> of its <code>memberElement</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 - memberElementId = memberElement.elementId + ownedMemberName = ownedMemberElement.name - - - - <p>The <code>elementId</code> of the <code>memberElement</code>.</p> + + + <p>The <code>ownedMemberShortName</code> of an <code>OwningMembership</code> is the <code>shortName</code> of its <code>ownedMemberElement</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> + + 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 short name of the <code>memberElement</code> relative to the <code>membershipOwningNamespace</code>.</p> + + + <p>The <code>elementId</code> of the <code>ownedMemberElement</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>The <code>shortName</code> of the <code>ownedMemberElement</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>The <code>name</code> of the <code>ownedMemberElement</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>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 - 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))) - + if ownedElement.qualifiedName <> null then + ownedElement.qualifiedName + '/owningMembership' +else self.oclAsType(Relationship).path() +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> - - - - - - - - - + + @@ -764,133 +907,76 @@ endif - - - - <p>A MembershipImport that has a certain <code>importedMembership</code>.</p> + + + + <p>The Namespace that has a certain <code>membership</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><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>The <code>importedElement</code> of a <code>NamespaceImport</code> is its <code>importedNamespace</code>.</p> + + + <p>Indicates a <code>Membership</code> is not visible outside its owning <code>Namespace</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>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>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> - + + + + <p>Indicates that a <code>Membership</code> is publicly visible outside its owning <code>Namespace</code>.</p> - - - OCL2.0 - if excluded->includes(importedNamespace) then Sequence{} -else importedNamespace.visibleMemberships(excluded, isRecursive, isImportAll) - - - - - - - - - - - + - - - <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>An Import with a certain <code>importedElement</code>.</p> - - - - - <p>The <code>shortName</code> of the <code>ownedMemberElement</code>.</p> + + + + + + + + <p>A MembershipImport that has a certain <code>importedMembership</code>.</p> - - - - - - - <p>The <code>name</code> of the <code>ownedMemberElement</code>.</p> - + + + + + + + + <p>The Namespace the has a certain Element as a <code>member</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. + + + + + + + + + <p>The Namespace with a certain <code>importedMembership</code>.</p> - - - OCL2.0 - if ownedElement.qualifiedName <> null then - ownedElement.qualifiedName + '/owningMembership' -else self.oclAsType(Relationship).path() -endif - - - - - - + + + + <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> @@ -1268,473 +1354,229 @@ endif - - - - - <p>The Namespace that has a certain <code>membership</code>.</p> - - - - - - - - - <p>The Namespace with a certain <code>importedMembership</code>.</p> - - - - - - - - - <p>The Namespace the has a certain Element as a <code>member</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>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>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> + + + <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 - annotation = - if owningAnnotatingRelationship = null then ownedAnnotatingRelationship - else owningAnnotatingRelationship->prepend(owningAnnotatingRelationship) - endif + importOwningNamespace.owner = null implies + visibility = VisibilityKind::private - - - - <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 Namespace into which Memberships are imported by this Import, which must be the <code>owningRelatedElement</code> of the Import.</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 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 <code>owningRelationship</code> of this <code>AnnotatingRelationship</code>, if it is an <code>Annotation</code></p> + + + <p>Whether to recursively import Memberships from visible, owned sub-Namespaces.</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>Whether to import memberships without regard to declared visibility.</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>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>The AnnotatingElements that have a certain Element as their <code>annotatedElement</code>.</p> + + + + <p>The Membership with a certain Element as its <code>memberElement</code>.</p> - - + + - - - - <p>The Annotations associated with a certain <code>annotatedElement</code>.</p> + + + + <p>A NamespaceImport that has a certain <code>importedNamespace</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>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 natural or artifical language in which the <code>body</code> text is written.</p> - + + + <p>The <code>importedElement</code> of a <code>NamespaceImport</code> is its <code>importedNamespace</code>.</p> - - - - - - - <p>The <code>Element</code> that is represented by this <code>TextualRepresentation</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>The textual representation of the <code>representedElement</code> in the given <code>language</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>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>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>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>memberElementId</code> of a <code>Membership</code> is the <code>elementId</code> of its <code>memberElement</code>.</p> - + OCL2.0 - (owningAnnotatedElement <> null) = (ownedAnnotatingElement <> null) + memberElementId = memberElement.elementId - - - <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>The <code>elementId</code> of the <code>memberElement</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>The <code>Namespace</code> of which the <code>memberElement</code> becomes a <code>member</code> due to this <code>Membership</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>The short name of the <code>memberElement</code> relative to the <code>membershipOwningNamespace</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>Element</code> that becomes a <code>member</code> of the <code>membershipOwningNamespace</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 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>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>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>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 Subclassifications with a certain <code>superclassifier</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>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>Classifier</code> that owns this <code>Subclassification</code> relationship, which must also be its <code>subclassifier</code>.</p> - - - - - - - - - - - <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>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>ownedSubclassifications</code> of a <code>Classifier</code> are its <code>ownedSpecializations</code> that are <code>Subclassifications</code>.</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> - - - 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 Type with a certain <code>input</code>.</p> - - - - - - - - - - <p>The Types that include this one among their <code>differencingTypes</code>.</p> - - - - - - - - - <p>A Type that owns or inherits a FeatureMembership Relationship with the <code>feature</code>.</p> - - - - - - - - - <p>The Type that inherits the <code>inheritedMembership</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 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><code>Type</code> asserted to be disjoint with the <code>typeDisjoined</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>A <code>typeDisjoined</code> that is also an <code>owningRelatedElement</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> @@ -1775,1474 +1617,1258 @@ endif - - - <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 Type that owns or inherits a FeatureMembership Relationship with the <code>feature</code>.</p> + + + + + + + + + <p>The Disjoinings that identify this Type as their <code>typeDisjoined</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> - - 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 Unionings that identify all these Types as their <code>unioningType</code>.</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> - - - 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> - - - 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><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 - 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><code>Type</code> that partly determines interpretations of <code>typeIntersected</code>, as described in <code>Type::intersectingType</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> + + + + + + + + <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> + - - 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> + + + + <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> + - - 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> + + + + <p>Values of the <code>Feature</code> on each instance of its domain are determined internally to that instance and used externally.</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>. + + + + + + + <p>The Conjugation corresponding to the <code>conjugatedType</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> + + + + + + + + <p>The Conjugations with a certain Type as the <code>originalType</code>.</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>. + + + + + + + + <p>The Type that inherits the <code>inheritedMembership</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> + + + + + + + <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> + - - English - differencingType = ownedDifferencing.differencingType - - - - - <p>A <code>Type</code> cannot be one of its own <code>intersectingTypes</code>.</p> + + + + + + <p><code>Type</code> that partly determines interpretations of <code>typeUnioned</code>, as described in <code>Type::unioningType</code>.</p> + - - English - intersectingType->excludes(self) - - - - - <p>A <code>Type</code> cannot be one of its own <code>differencingTypes</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> + - - 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> + + + + + + <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 - unioningType = ownedUnioning.unioningType - - - - - <p>A <code>Type</code> cannot be one of its own <code>unioningTypes</code>.</p> + + + + + + + + + <p>A Type with a certain <code>output</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 - intersectingType = ownedIntersecting.intersectingType - - - - - A <code>Type</code> must have at most one owned <code>Conjugation</code> <code>Relationship</code>. - - - 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 - 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 - 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 - 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 - 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> - - - 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> - - - 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> - - - 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> - - - OCL2.0 - inheritedFeature = inheritedMemberships-> - selectByKind(FeatureMembership).memberFeature - - - - - A <code>Type</code> must not have exactly one <code>ownedUnioning</code>. - - - OCL2.0 - ownedUnioning->size() <> 1 - - - - - A <code>Type</code> must not have exactly one <code>ownedIntersecting</code>. - - - OCL2.0 - ownedIntersecting->size() <> 1 - - - - - A <code>Type</code> must not have exactly one <code>ownedDifferencing</code>. - - - OCL2.0 - ownedDifferencing->size() <> 1 - - - - - - <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><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>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>Type</code> to be conjugated.</p> - - + + - - - <p>The <code>ownedMemberFeatures</code> of the <code>featureMemberships</code> of this <code>Type</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>ownedMemberFeatures</code> of the <code>ownedFeatureMemberships</code> of this <code>Type</code>.</p> + + + <p>The <code>conjugatedType</code> of this <code>Conjugation</code> that is also its <code>owningRelatedElement</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>The Specializations with a certain <code>specific</code> Type.</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>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>Indicates whether instances of this <code>Type</code> must also be instances of at least one of its specialized <code>Types</code>.</p> + + + + + <p><code>Type</code> asserted to be disjoint with the <code>disjoiningType</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><code>Type</code> asserted to be disjoint with the <code>typeDisjoined</code>.</p> - - - - - - <p>All <code>features</code> of this <code>Type</code> with <code>isEnd = true</code>.</p> - - - + + - - - <p>All <code>endFeatures</code> of this <code>Type</code> that are <code>ownedFeatures</code>.</p> - + + + <p>A <code>typeDisjoined</code> that is also an <code>owningRelatedElement</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> - + + + + + <p>The Specializations with a certain <code>general<code> Type.</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>Indicates whether this <code>Type</code> has an <code>ownedConjugator</code>.</p> - + + + + + + + + <p>The Types that include this one among their <code>unioningTypes</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>A Type that owns or inherits the <code>featureMembership</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>A Type with a certain <code>input</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>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> - - - - - - <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> - + + OCL2.0 + if owningNamespace <> null and owningNamespace.oclIsKindOf(Feature) then + featuringType = + owningNamespace.oclAsType(Feature).featuringType +else + featuringType->isEmpty() +endif + + + + + <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>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> - + + OCL2.0 + specializesFromLibrary('Base::naturals') + + + + + + + + + <p>A Type that has an EndFeatureMembership in which the <code>endFeature</code> is a <code>memberFeature</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><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>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><code>Type</code> with interpretations partly determined by <code>differencingType</code>, as described in <code>Type::differencingType</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><code>Type</code> that partly determines interpretations of <code>typeDifferenced</code>, as described in <code>Type::differencingType</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>A Type that has an <code>inheritedMembership</code> with the <code>inheritedFeature</code> as its <code>memberFeature</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>The Intersectings that identify this Type as their <code>intersectingType</code>.</p> - - - - - - <p>The <code>features</code> of this <code>Type</code> that have a non-null <code>direction</code>.</p> - + + + + + + + + + + + + + + + <p>The Differencings that identify this Type as their <code>differencingType</code>.</p> - - - - - - <p>The visible <code>Memberships</code> of a <code>Type</code> include <code>inheritedMemberships</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> - - - 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> - + + 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> - - - 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> - - - - - 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> - - - - 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 + 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> - - - 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><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 + 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><code>Type</code> that partly determines interpretations of <code>typeUnioned</code>, as described in <code>Type::unioningType</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 Disjoinings that identify this Type as their <code>typeDisjoined</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>The Specializations with a certain <code>general<code> Type.</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> - - - - - - - - <p>The Disjoinings that identify this Type as their <code>disjoiningType</code>.</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> - - - - - - - - <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> - + + 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> - - - - - - <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 + 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>. - - - - - - - <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 + 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> owned by a direct or indirect supertype of this <code>Type</code>.</p> - - - - - - <p>The <code>Type</code> that is the result of applying <code>Conjugation</code> to the <code>originalType</code>.</p> - + + OCL2.0 + featureMembership = ownedFeatureMembership-> + union(inheritedMembership-> + selectByKind(FeatureMembership)-> + select(mem | self.specializes(mem.owningType))) + + + + + <p>The <code>ownedFeatures</code> of a <code>Type</code> are the <code>ownedMemberFeatures</code> of its <code>ownedFeatureMemberships</code>. - - - - - - <p>The <code>conjugatedType</code> of this <code>Conjugation</code> that is also its <code>owningRelatedElement</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> - - - - - - - - <p>The Types that include this one among their <code>intersectingTypes</code>.</p> + + English + differencingType = ownedDifferencing.differencingType + + + + + <p>A <code>Type</code> cannot be one of its own <code>intersectingTypes</code>.</p> - - - - - - - - - <p>A Type that has an <code>inheritedMembership</code> with the <code>inheritedFeature</code> as its <code>memberFeature</code>.</p> + + English + intersectingType->excludes(self) + + + + + <p>A <code>Type</code> cannot be one of its own <code>differencingTypes</code>.</p> - - - - - - - - <p>A Type that owns or inherits the <code>featureMembership</code>.</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> - - - - - - - - - - <p>The Differencings that identify this Type as their <code>differencingType</code>.</p> + + OCL2.0 + unioningType = ownedUnioning.unioningType + + + + + <p>A <code>Type</code> cannot be one of its own <code>unioningTypes</code>.</p> - - - - - - - - - - - - - - - - <p>A Type that has an EndFeatureMembership in which the <code>endFeature</code> is a <code>memberFeature</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> - - - - - - - - <p>The Conjugation corresponding to the <code>conjugatedType</code>.</p> + + OCL2.0 + intersectingType = ownedIntersecting.intersectingType + + + + + A <code>Type</code> must have at most one owned <code>Conjugation</code> <code>Relationship</code>. - - - - - - - <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 + 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> - - - - - - <p><code>Type</code> that partly determines interpretations of <code>typeIntersected</code>, as described in <code>Type::intersectingType</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> - - - - - - - - <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> - + + 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> - - - - - - <p><code>Type</code> that partly determines interpretations of <code>typeDifferenced</code>, as described in <code>Type::differencingType</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> - - - - - - - - <p>The Intersectings that identify this Type as their <code>intersectingType</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 Unionings that identify all these Types as their <code>unioningType</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>The Conjugations with a certain Type as the <code>originalType</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>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 + 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> - + OCL2.0 - if owningNamespace <> null and owningNamespace.oclIsKindOf(Feature) then - featuringType = - owningNamespace.oclAsType(Feature).featuringType -else - featuringType->isEmpty() -endif + inheritedFeature = inheritedMemberships-> + selectByKind(FeatureMembership).memberFeature - - - <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> + + + A <code>Type</code> must not have exactly one <code>ownedUnioning</code>. + + + OCL2.0 + ownedUnioning->size() <> 1 + + + + + A <code>Type</code> must not have exactly one <code>ownedIntersecting</code>. + + + OCL2.0 + ownedIntersecting->size() <> 1 + + + + + A <code>Type</code> must not have exactly one <code>ownedDifferencing</code>. - + OCL2.0 - specializesFromLibrary('Base::naturals') + ownedDifferencing->size() <> 1 - - - - - - <p>The Specializations with a certain <code>specific</code> Type.</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>A Type with a certain <code>output</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 Types that include this one among their <code>unioningTypes</code>.</p> + + + + + + <p>The <code>ownedMemberFeatures</code> of the <code>featureMemberships</code> of this <code>Type</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>The <code>ownedMemberFeatures</code> of the <code>ownedFeatureMemberships</code> of this <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>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>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>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>Values of the <code>Feature</code> on each instance of its domain are determined internally to that instance and used externally.</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><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>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>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>All <code>features</code> of this <code>Type</code> with <code>isEnd = true</code>.</p> + + + + + + + <p>All <code>endFeatures</code> of this <code>Type</code> that are <code>ownedFeatures</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 <code>Feature</code> that is featured by the <code>featuringType</code>. It is the <code>source</code> of the <code>TypeFeaturing</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> + - - + + - - - <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>Conjugation</code> owned by this <code>Type</code> for which the <code>Type</code> is the <code>originalType</code>.</p> + - - + + - - - <p>A <code>featureOfType</code> that is also the <code>owningRelatedElement</code> of this <code>TypeFeaturing</code>.</p> + + + <p>Indicates whether this <code>Type</code> has an <code>ownedConjugator</code>.</p> + - - + - - - - - <p>The <code>ReferenceSubsetting</code> with a certain <code>Feature</code> as the <code>referencedFeature</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><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>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 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>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> + + + + + + <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 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>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> + - - 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 <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> + - - 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 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>Feature</code> that is redefined by the <code>redefiningFeature</code> of this <code>Redefinition</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>The <code>TypeFeaturings</code> for which a certain <code>Type</code> is the <code>featuringType</code>.</p> + + + <p>The <code>features</code> of this <code>Type</code> that have a non-null <code>direction</code>.</p> + - - - - - - - - <p>The <code>Features</code> with a certain other <code>Feature</code> as the <code>crossFeature</code>.</p> + + + + + + <p>The visible <code>Memberships</code> of a <code>Type</code> include <code>inheritedMemberships</code>.</p> + - - - - - - - - <p>The <code>Features</code> that identify a <code>Feature</code> as their <code>featureTarget</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>The <code>Features</code> that are the same as or the <code>chainedFeature</code> for a <code>targetFeature</code>.</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> - - - - - - - - - <p>The Features for which a certain Type is a <code>type</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> - - - - - - - - - <p>The FeatureTypings for which a certain Feature is the <code>typedFeature</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> - - - - - - - - <p>The Subsettings with a certain Feature as the <code>subsettedFeature</code>.</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> - - - - - - - <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 + 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> - - - - - - <p>The <code>Feature</code> that owns this <code>ReferenceSubsetting</code> relationship, which is also its <code>subsettingFeature</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><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 + 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> - - 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> + + + 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> - - - - - - <p>The end <code>Feature</code> that owns this <code>CrossSubsetting</code> relationship and is also its </code>subsettingFeature</code>.</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 Types that include this one among their <code>intersectingTypes</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 Disjoinings that identify this Type as their <code>disjoiningType</code>.</p> - - + + - - - - <p>The Subsettings with a certain Feature as the <code>subsettingFeature</code>.</p> + + + + <p>The Types that include this one among their <code>differencingTypes</code>.</p> - - + + - - - - <p>The FeatureTyping relating this Type to a Feature.</p> + + + + <p>The Features for which a certain Type is a <code>type</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> @@ -3272,172 +2898,189 @@ crossingFeature.owningType.endFeature ->size() > 1 - - - <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 FeatureInvertings that identify this Feature as their <code>invertingFeature</code>.</p> - - - - - - - - - <p>The <code>TypeFeaturings</code> for which a certain <code>Feature</code> is the <code>featureOfType</code>.</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> - - - - - - - <p>Relationship for chainedFeatures.</p> - - - - <p>The <code>FeatureChainings</code> that identify a <code>Feature</code> as their <code>chainingFeature</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 Redefinitions with a certain Feature as the <code>redefinedFeature</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>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><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>subsettedFeature</code> must be accessible by the <code>subsettingFeature</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> - + OCL2.0 - subsettingFeature.canAccess(subsettedFeature) + 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>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>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 - subsettedFeature.isUnique implies subsettingFeature.isUnique + 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 <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>If the <code>redefinedFeature</code> of a <code>Redefinition</code> has <code>isEnd = true</code> and the <code>owningType</code> of the <code>redefiningFeature</code> is an <code>Association</code> or <code>Connector</code>, then the <code>redefiningFeature</code> must have <code>isEnd = true</code>.</p> - + OCL2.0 - subsettedFeature.isConstant and subsettingFeature.isVariable implies - subsettingFeature.isConstant - + redefinedFeature.isEnd and +redefiningFeature.owningType <> null and +(redefiningFeature.owningType.oclIsKindOf(Association) or + redefiningFeature.owningType.oclIsKindOf(Connector)) implies + redefiningFeature.isEnd - - - - <p>The <code>Feature</code> that is subsetted by the <code>subsettingFeature</code> of this <code>Subsetting</code>.</p> + + + + <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 a subset of the <code>subsettedFeature</code> of this <code>Subsetting</code>.</p> + + + <p>The <code>Feature</code> that is redefined by the <code>redefiningFeature</code> of this <code>Redefinition</code>.</p> - - + + - - - <p>A <code>subsettingFeature</code> that is also the <code>owningRelatedElement</code> of this <code>Subsetting</code>.</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>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 an inverse of the <code>invertingFeature</code>.</p> + + + + <p>The FeatureInvertings that identify this Feature as their <code>featureInverted</code>.</p> - - - - - - <p>The <code>Feature</code> that is an inverse of the <code>invertedFeature</code>.</p> + + + + + + + + <p>The Subsettings with a certain Feature as the <code>subsettedFeature</code>.</p> - - - - - - <p>A <code>featureInverted</code> that is also the <code>owningRelatedElement</code> of this <code>FeatureInverting</code>.</p> - + + + + + + + + + <p>The <code>TypeFeaturings</code> for which a certain <code>Type</code> is the <code>featuringType</code>.</p> - - - + + + - - - - <p>A <code>Type</code> that has the <code>multiplicity</code> as an <code>ownedMember</code>.</p> + + + + <p>The Redefinitions with a certain Feature as the <code>redefinedFeature</code>.</p> - - + + - - - - <p>The Feature that owns this Redefinition relationship, which must also be its <code>redefiningFeature</code>.</p> + + + + <p>The Features for which a certain Type is a <code>featuringType</code>.</p> - - + + @@ -4463,7 +4106,7 @@ 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> + <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 <em>not</em> a <code>Multiplicity</code>, <code>MetadataFeature</code>, or <code>BindingConnector</code>, and whose <code>owningMembership</code> is <em>not</em> a <code>FeatureMembership</code> or <code>FeatureValue</code>. If this exists, it is the <code>crossFeature</code> of the end <code>Feature</code>.</p> @@ -4472,13 +4115,16 @@ owningNamespace.oclAsType(Feature).ownedCrossFeature() = self else let ownedMemberFeatures: Sequence(Feature) = ownedMember->selectByKind(Feature)-> - reject(oclIsKindOf(Multiplicity) or + reject(oclIsKindOf(Multiplicity) or oclIsKindOf(MetadataFeature) or - oclIsKindOf(FeatureValue))-> - reject(owningMembership.oclIsKindOf(FeatureMembership)) in + oclIsKindOf(BindingConnector))-> + reject(owningMembership.oclIsKindOf(FeatureMembership) or + owningMembership.oclIsKindOf(FeatureValue)) in if ownedMemberFeatures.isEmpty() then null else ownedMemberFeatures->first() - endif + endif +endif + @@ -4581,22 +4227,54 @@ endif - - - - <p>The FeatureInvertings that identify this Feature as their <code>featureInverted</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>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 an inverse of the <code>invertingFeature</code>.</p> - - + + + + + + <p>The <code>Feature</code> that is an inverse of the <code>invertedFeature</code>.</p> + + + + + + + <p>A <code>featureInverted</code> that is also the <code>owningRelatedElement</code> of this <code>FeatureInverting</code>.</p> + + + + + + + + + + <p>The <code>TypeFeaturings</code> for which a certain <code>Feature</code> is the <code>featureOfType</code>.</p> + + + @@ -4608,306 +4286,345 @@ endif - - - - <p>The Features for which a certain Type is a <code>featuringType</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 FeatureTyping relating this Type to a Feature.</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> + + + + + <p>The Subsettings with a certain Feature as the <code>subsettingFeature</code>.</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> + + + + + + + + <p>The Redefinitions with a certain Feature as the <code>redefiningFeature</code>.</p> - - OCL2.0 - specializesFromLibrary('Links::selfLinks') - - - + + + - - - <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 FeatureTypings for which a certain Feature is the <code>typedFeature</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 - specializesFromLibrary('Occurrences::happensBeforeLinks') - - - + + + - - - - + + + + <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>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 <code>ReferenceSubsetting</code> with a certain <code>Feature</code> as the <code>referencedFeature</code>.</p> + + + - - - - <p>A <code>Connector</code> with a certain <code>defaultFeaturingType</code>.</p> + + + + <p>The <code>Features</code> with a certain other <code>Feature</code> as the <code>crossFeature</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><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>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 - relatedFeature->forAll(f | - if featuringType->isEmpty() then f.isFeaturedWithin(null) - else featuringType->forAll(t | f.isFeaturedWithin(t)) - endif) - - - - - <p>The <code>sourceFeature</code> of a <code>Connector</code> is its first <code>relatedFeature</code> (if any).</p> - - - OCL2.0 - sourceFeature = - if relatedFeature->isEmpty() then null - else relatedFeature->first() - endif - - - - - <p>The <code>targetFeatures</code> of a <code>Connector</code> are the <code>relatedFeatures</code> other than the <code>sourceFeature</code>.</p> - - - OCL2.0 - targetFeature = - if relatedFeature->size() < 2 then OrderedSet{} - else - relatedFeature-> - subSequence(2, relatedFeature->size())-> - asOrderedSet() - endif - - - - - <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 relatedFeature->size() >= 2 - - - - - <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 - 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 - 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> + + + <p>The <code>ownedMemberFeature</code> of an <code>EndFeatureMembership</code> must be an end <code>Feature</code>.</p> - + OCL2.0 - connectorEnds->size() = 2 and -association->exists(oclIsKindOf(AssociationStructure)) implies - specializesFromLibrary('Objects::binaryLinkObjects') + ownedMemberFeature.isEnd - - - <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><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 - connectorEnd->size() = 2 implies - specializesFromLibrary('Links::binaryLinks') + subsettingFeature.canAccess(subsettedFeature) - - - <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>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 - connectorEnds->size() > 2 implies - not specializesFromLibrary('Links::BinaryLink') + subsettedFeature.isUnique implies subsettingFeature.isUnique - - - <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>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 - 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 + subsettedFeature.isConstant and subsettingFeature.isVariable implies + subsettingFeature.isConstant + - - - - - <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>Feature</code> that is subsetted by the <code>subsettingFeature</code> of this <code>Subsetting</code>.</p> - - + + - - - <p>The <code>Associations</code> that type the <code>Connector</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>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>A <code>subsettingFeature</code> that is also the <code>owningRelatedElement</code> of this <code>Subsetting</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><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> + - - + + - - - <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>Feature</code> that owns this <code>ReferenceSubsetting</code> relationship, which is also its <code>subsettingFeature</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>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> + + + + <p>A <code>Classifier</code> is a <code>Type</code> that classifies:</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> + <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>DataType</code> must not specialize a <code>Class</code> or an <code>Association</code>.</p> + + + <p>The <code>ownedSubclassifications</code> of a <code>Classifier</code> are its <code>ownedSpecializations</code> that are <code>Subclassifications</code>.</p> - + OCL2.0 - ownedSpecialization.general-> - forAll(not oclIsKindOf(Class) and - not oclIsKindOf(Association)) + ownedSubclassification = + ownedSpecialization->selectByKind(Subclassification) - - - <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>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::DataValue') + 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>The Subclassifications with a certain <code>superclassifier</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>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>Classifier</code> that owns this <code>Subclassification</code> relationship, which must also be its <code>subclassifier</code>.</p> + + + + + + + + + + <p>The Subclassifications with a certain <code>subclassifier</code>.</p> + + + + @@ -4961,467 +4678,519 @@ endif <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 + isInitial implies featureWithValue.isVariable + + + + + + <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 (at most one) <code>ownedMembership</code> of this Feature that is the FeatureValue that provides the value of the Feature.</p> + + + + + + + + + <p>The FeatureValue that owns the <code>value</code> 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> + + + 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>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 + true + + + + + + + + + + + + + <p>The model-level value of a <code>NullExpression</code> is an empty sequence.</p> + + + + OCL2.0 + Sequence{} + + + + + + + + + + + + <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 - isInitial implies featureWithValue.isVariable + specializesFromLibrary('Performances::literalIntegerEvaluations') - - - - <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><em>Integer</em></code> value that is the result of evaluating this <code>LiteralInteger</code>.</p> - - <p>The <code>Expression</code> that provides the value of the <code>featureWithValue</code> as its <code>result</code>.</p> + + <p>The Integer value that is the result of evaluating this Expression.</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 (at most one) <code>ownedMembership</code> of this Feature that is the FeatureValue that provides the value of the Feature.</p> - - - - - - - - - <p>The FeatureValue that owns the <code>value</code> Expression.</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>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>relatedTypes</code> of an <code>Association</code> are the <code>types</code> of its <code>associationEnds</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::Collection</code></em> from the Kernel Data Type Library.</p> - + OCL2.0 - relatedType = associationEnd.type + arguments->notEmpty() and +not arguments->first().result.specializesFromLibrary('Collections::Collection') implies + result.specializes(arguments->first().result) - - - <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>The <code>operator</code> of an <code>IndexExpression</code> must be <code>"#"</code>.</p> - + OCL2.0 - specializesFromLibrary('Links::Link') + operator = '#' - - - <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>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>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> - - English - oclIsKindOf(Structure) = oclIsKindOf(AssociationStructure) + + OCL2.0 + instantiatedType.feature->collect(f | + result.ownedFeatures->select(redefines(f)).valuation-> + select(v | v <> null).value +) - - - <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>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 - associationEnd->size() = 2 implies - specializesFromLibrary('Links::BinaryLink') + 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>If an <code>Association</code> is concrete (not abstract), then it must have at least two <code>relatedTypes</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 - not isAbstract implies relatedType->size() >= 2 + let features : OrderedSet(Feature) = instantiatedType.feature-> + select(owningMembership.visibility = VisibilityKind::public) in +result.ownedFeature->forAll(f | + f.ownedRedefinition.redefinedFeature-> + intersection(features)->size() = 1) - - - <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>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 - associationEnds->size() > 2 implies - not specializesFromLibrary('Links::BinaryLink') + TBD - - - <p>The <code>sourceType</code> of an <code>Association</code> is its first <code>relatedType</code> (if any).</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 - sourceType = - if relatedType->isEmpty() then null - else relatedType->first() endif + 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 - targetType = - if relatedType->size() < 2 then OrderedSet{} - else - relatedType-> - subSequence(2, relatedType->size())-> - asOrderedSet() - endif + result.specializes(instantiatedType) - - - <p>The <code>ownedEndFeatures</code> of an <code>Association</code> must have exactly one <code>type</code></p>. + + + <p>A <code>ConstructorExpression</code> must not have any <code>ownedFeatures</code> other than its <code>result</code>.</p> - + OCL2.0 - ownedEndFeature->forAll(type->size() = 1) + ownedFeatures->excluding(result)->isEmpty() - - - - - <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>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>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>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>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>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 - specializesFromLibrary('Objects::LinkObject') + 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>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>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 - endFeature->size() = 2 implies - specializesFromLibrary('Objects::BinaryLinkObject') + TBD - - - - - - <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>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 - 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 + instantiatedType.input->collect(inp | + ownedFeatures->select(redefines(inp)).valuation-> + select(v | v <> null).value +) - - - <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>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 - ownedMember->selectByKind(BindingConnector)->exists(b | - b.relatedFeatures->includes(targetFeature) and - b.relatedFeatures->includes(result)) + let parameters : OrderedSet(Feature) = instantiatedType.input in +input->forAll(inp | + inp.ownedRedefinition.redefinedFeature-> + intersection(parameters)->size() = 1) - - - <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>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 - let membership : Membership = - ownedMembership->reject(m | m.oclIsKindOf(ParameterMembership)) in -membership->notEmpty() and -membership->at(1).memberElement.oclIsKindOf(Feature) + 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> parameter of a <code>FeatureReferenceExpression</code> must specialize the <code>referent</code> of the <code>FeatureReferenceExpression</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.owningType() = self and result.specializes(referent) + not instantiatedType.oclIsKindOf(Function) and +not (instantiatedType.oclIsKindOf(Feature) and + instantiatedType.oclAsType(Feature).type->exists(oclIsKindOf(Function))) implies + result.specializes(instantiatedType) - - - <p>A <code>FeatureReferenceExpression</code> must own its <code>result</code> parameter.</p> + + + <p>An <code>InvocationExpression</code> must specialize its <code>instantiatedType</code>.</p> - + OCL2.0 - result.owningType = self + specializes(instantiatedType) - - - - <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>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 - 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>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 + 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 - specializesFromLibrary('Performances::nullEvaluations') + ownedFeature->forAll(f | + f <> result implies + f.direction = FeatureDirectionKind::_'in') - - - - <p>A <code>NullExpression</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>NullExpression</code> is an empty sequence.</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{} - - - - - - + + + + - - - <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>InstantiationExpression</code> that has a certain <code>argument</code> <code>Expression</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>operator</code> of a <code>CollectExpression</code> must be <code>"collect"</code>.</p> + + + <p>The <code>operator</code> of a <code>SelectExpression</code> must be <code>'select'</code>.</p> - + OCL2.0 - operator = 'collect' + 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> + + + OCL2.0 + arguments->notEmpty() implies + result.specializes(arguments->first().result) + + + + - + - - - - + + + + + + + <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> + + + OCL2.0 + specializesFromLibrary('Performances::literalStringEvaluations') + + + + + + <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><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> @@ -5448,6 +5217,22 @@ endif + + + <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') + + + + @@ -5457,32 +5242,6 @@ endif - - - <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> - - - OCL2.0 - specializesFromLibrary('Performances::literalStringEvaluations') - - - - - - <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>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> @@ -5549,27 +5308,144 @@ endif <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>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> + + + 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> + + + + + + + <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>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 - referencedElement.ownedElement-> - select(oclIsKindOf(MetadataFeature) - and annotatedElement->includes(referencedElement))-> - including(metaclassFeature()) + 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>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>FeatureReferenceExpression</code> that has a certain <code>referent</code> <code>Feature</code>.</p> - - + + + + + + + + + @@ -5630,170 +5506,177 @@ endif - - - <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 - 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>FeatureReferenceExpression</code> that has a certain <code>referent</code> <code>Feature</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>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>operator</code> of a <code>SelectExpression</code> must be <code>'select'</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 - operator = 'select' + 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>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>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 - arguments->notEmpty() implies - result.specializes(arguments->first().result) + ownedMember->selectByKind(BindingConnector)->exists(b | + b.relatedFeatures->includes(targetFeature) and + b.relatedFeatures->includes(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> + + + <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.owningType = self + let membership : Membership = + ownedMembership->reject(m | m.oclIsKindOf(ParameterMembership)) in +membership->notEmpty() and +membership->at(1).memberElement.oclIsKindOf(Feature) - - - <p>The <code>instantiatedType</code> of an <code>InstantiationExpression</code> is given by the result of the <code>instantiatedType()</code> operation.</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 - instantiatedType = instantiatedType() + result.owningType() = self and result.specializes(referent) - - - <p>An <code>InstantiationExpression</code> must have an <code>InstantiatedType</code>.</p> + + + <p>A <code>FeatureReferenceExpression</code> must own its <code>result</code> parameter.</p> - + OCL2.0 - instantiatedType() <> null + result.owningType = self - - - - <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 <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 <code>Type</code> that is being instantiated.</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>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> + + + 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> -<p><b>Note.</b> This operation is overridden in the subclass <code>OperatorExpression</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>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>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>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>A <code>LiteralRational</code> must directly or indirectly specialize <em><code>Performances::literalRationalEvaluations</code></em> from the Kernel Semantic Library.</p> - + OCL2.0 - arguments->notEmpty() and -not arguments->first().result.specializesFromLibrary('Collections::Array') implies - result.specializes(arguments->first().result) + specializesFromLibrary('Performances::literalRationalEvaluations') - - - <p>The <code>operator</code> of an <code>IndexExpression</code> must be <code>"#"</code>.</p> + + + + <p>The value whose rational approximation is the result of evaluating this <code>LiteralRational</code>.</p> + - - OCL2.0 - operator = '#' - - - - - - + + <p>The Real value that is the result of evaluating this Expression.</p> + + @@ -5873,1053 +5756,1185 @@ sourceTargetFeature <> null and result.subsetsChain(inputParameters->first(), sourceTargetFeature) and result.owningType = self - - - - - - - - - <p>The <code>Feature</code> that is accessed by this <code>FeatureChainExpression<code>, which is its first non-<code>parameter</code> <code>member</code>.<p> - - - - - - - <p>Return the first <code>ownedFeature</code> of the first owned input <code>parameter</code> of this <code>FeatureChainExpression</code> (if any).</p> - - - - OCL2.0 - let inputParameters : Feature = ownedFeatures-> - select(direction = _'in') in -if inputParameters->isEmpty() or - inputParameters->first().ownedFeature->isEmpty() -then null -else inputParameters->first().ownedFeature->first() -endif - - - - - - - - - - - - - - - - - <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>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 - 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>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 - 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> - - - OCL2.0 - instantiatedType.input->collect(inp | - ownedFeatures->select(redefines(inp)).valuation-> - select(v | v <> null).value -) - - - - - <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 - let parameters : OrderedSet(Feature) = instantiatedType.input in -input->forAll(inp | - inp.ownedRedefinition.redefinedFeature-> - intersection(parameters)->size() = 1) - - - - - <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 - 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>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 - 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> - - - 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> - - - 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 - argument->forAll(modelLevelEvaluable(visited)) and - function.isModelLevelEvaluable - - - - - - - - - - - - - <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>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>Feature</code> that is accessed by this <code>FeatureChainExpression<code>, which is its first non-<code>parameter</code> <code>member</code>.<p> - - + + + + + + <p>Return the first <code>ownedFeature</code> of the first owned input <code>parameter</code> of this <code>FeatureChainExpression</code> (if any).</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) + let inputParameters : Feature = ownedFeatures-> + select(direction = _'in') in +if inputParameters->isEmpty() or + inputParameters->first().ownedFeature->isEmpty() +then null +else inputParameters->first().ownedFeature->first() endif - + + + + - - - - <p>A <code>InstantiationExpression</code> that has a certain <code>argument</code> <code>Expression</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>The <code>operator</code> of a <code>CollectExpression</code> must be <code>"collect"</code>.</p> - - + + OCL2.0 + operator = 'collect' + + + + + + + + + + + + - - - <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>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>LiteralInteger</code> must directly or indirectly specialize <em><code>Performances::literalIntegerEvaluations</code></em> from the Kernel Semantic Library.</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('Performances::literalIntegerEvaluations') + specializesFromLibrary('Objects::LinkObject') - - - - <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 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>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>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>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>The <code>relatedTypes</code> of an <code>Association</code> are the <code>types</code> of its <code>associationEnds</code>.</p> - + OCL2.0 - instantiatedType.feature->collect(f | - result.ownedFeatures->select(redefines(f)).valuation-> - select(v | v <> null).value -) + relatedType = associationEnd.type - - - <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>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 - 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())) + specializesFromLibrary('Links::Link') - - - <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>If an <code>Association</code> is also a kind of <code>Structure</code>, then it must be an <code>AssociationStructure</code>.</p> - + + English + oclIsKindOf(Structure) = oclIsKindOf(AssociationStructure) + + + + + <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 features : OrderedSet(Feature) = instantiatedType.feature-> - select(owningMembership.visibility = VisibilityKind::public) in -result.ownedFeature->forAll(f | - f.ownedRedefinition.redefinedFeature-> - intersection(features)->size() = 1) + associationEnd->size() = 2 implies + specializesFromLibrary('Links::BinaryLink') - - - <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>If an <code>Association</code> is concrete (not abstract), then it must have at least two <code>relatedTypes</code>.</p> - + OCL2.0 - TBD + not isAbstract implies relatedType->size() >= 2 - - - <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>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 + associationEnds->size() > 2 implies + not specializesFromLibrary('Links::BinaryLink') + + + + + <p>The <code>sourceType</code> of an <code>Association</code> is its first <code>relatedType</code> (if any).</p> + + + OCL2.0 + sourceType = + if relatedType->isEmpty() then null + else relatedType->first() endif + + + + + OCL2.0 + targetType = + if relatedType->size() < 2 then OrderedSet{} + else + relatedType-> + subSequence(2, relatedType->size())-> + asOrderedSet() + endif + + + + + <p>The <code>ownedEndFeatures</code> of an <code>Association</code> must have exactly one <code>type</code></p>. + + + OCL2.0 + 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> + - - 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> + + + + + + + + + + + + + <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 - result.specializes(instantiatedType) + ownedMemberParameter.direction = parameterDirection() - - - <p>A <code>ConstructorExpression</code> must not have any <code>ownedFeatures</code> other than its <code>result</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 - ownedFeatures->excluding(result)->isEmpty() + owningType.oclIsKindOf(Behavior) or owningType.oclIsKindOf(Step) or +owningType.owningMembership.oclIsKindOf(ReturnParameterMembership) and + owningType.owningNamespace.oclIsKindOf(ConstructorExpression) - - - - <p>A <code>ConstructorExpression</code> is model-level evaluable if all its argument <code>Expressions</code> are model-level evaluable.</p> + + + + <p>The <code>Feature</code> that is identified as a <code>parameter</code> by this <code>ParameterMembership</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 - argument->forAll(modelLevelEvaluable(visited)) + FeatureDirectionKind::_'in' - - - - - - + + + - - - - <p>The ElementFilterMembership that owns the <code>condition</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>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>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>A <code>Behavior</code> must not specialize a <code>Structure</code>.</p> - - - - - - <p>The <code>libraryNamespace</code> for a <code>LibraryPackage</code> is itself.</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> - - - OCL2.0 - self - - - - - - - - - - - <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> + + 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 - filterCondition = ownedMembership-> - selectByKind(ElementFilterMembership).condition + step = feature->selectByKind(Step) - - - - <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>Steps</code> that make up this <code>Behavior</code>.</p> - - + + - - - <p>Exclude <code>Elements</code> that do not meet all the <code>filterConditions</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> - - - 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> - - - - OCL2.0 - let metadataFeatures: Sequence(AnnotatingElement) = - element.ownedAnnotation.annotatingElement-> - selectByKind(MetadataFeature) in - self.filterCondition->forAll(cond | - metadataFeatures->exists(elem | - cond.checkCondition(elem))) - - - - - - - + + + - - - <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>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>The <code>condition</code> <code>Expression</code> must be model-level evaluable.</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 + specializesFromLibrary('Performances::performances') + + + + + <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 - condition.isModelLevelEvaluable + owningType <> null and + (owningType.oclIsKindOf(Behavior) or + owningType.oclIsKindOf(Step)) implies + specializesFromLibrary('Performances::Performance::enclosedPerformance') - - - <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 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 - condition.result.specializesFromLibrary('ScalarValues::Boolean') + 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>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>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 + owningType <> null and + (owningType.oclIsKindOf(Behavior) or + owningType.oclIsKindOf(Step)) and + self.isComposite implies + specializesFromLibrary('Performances::Performance::subperformance') + + + + + <p>The <code>behaviors</code> of a <code>Step</code> are all its <code>types</code> that are <code>Behaviors</code>.</p> + + + OCL2.0 + behavior = type->selectByKind(Behavior) + + + + + + <p>The <code>Behaviors</code> that type this <code>Step</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 Package that has a certain Expression as a <code>filterCondition</code>.</p> + + + + <p>The Expressions that are typed by a certain <code>function</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>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>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>Function</code> must have exactly one <code>featureMembership</code> (owned or inherited) that is a <code>ResultParameterMembership</code>.</p> - + OCL2.0 - specializesFromLibrary('Objects::Object') + featureMembership-> + selectByKind(ReturnParameterMembership)-> + size() = 1 - - - <p>A <code>Structure</code> must not specialize a <code>Behavior</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 - ownedSpecialization.general->forAll(not oclIsKindOf(Behavior)) + specializesFromLibrary('Performances::Evaluation') - + + + <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 + 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 + result = + let resultParams : Sequence(Feature) = + featureMemberships-> + selectByKind(ReturnParameterMembership). + ownedMemberParameter in + if resultParams->notEmpty() then resultParams->first() + else null + 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 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>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> + + + - - - <p>A <code>Metaclass</code> is a <code>Structure</code> used to type <code>MetadataFeatures</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>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>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 - specializesFromLibrary('Metaobjects::Metaobject') + 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>This is the Function that types the Expression.</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><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 - 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 + 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> which is a kind of <code><em>SemanticMetadata</code>.<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('Metaobjects::SemanticMetadata') + isModelLevelEvaluable - - - - - - - <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> - - - + + OCL2.0 - specializesFromLibrary('KerML::Element') + 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>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>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>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>SuccessionFlow</code> must directly or indirectly specialize the <code>Step</code> <code><em>Transfers::flowTransfersBefore</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('Transfers::flowTransfersBefore') + specializesFromLibrary('Performances::booleanEvaluations') - - + + + + <p>The Predicate that types the Expression.</p> + + + + <p>The <code>Predicate</code> that types this <code>BooleanExpression</code>.</p> + + + + - - - - + + + + - - - - <p>The ItemFlow that has a certain <code>targetInputFeature</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>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 Functions that hasve a certain <code>expression</code> as a step.</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>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>FlowEnd</code> must be an end <code>Feature</code>.</p> + + + <p>The <code>owningType</code> of a <code>ReturnParameterMembership</code> must be a <code>Function</code> or <code>Expression</code>.</p> - + OCL2.0 - isEnd + owningType.oclIsKindOf(Function) or owningType.oclIsKindOf(Expression) - - - <p>A <code>FlowEnd</code> must have exactly one <code>ownedFeature</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>The ResultExpressionMembership that owns the <code>ownedResultExpression</code>.</p> + + + + + + + + + <p>The Functions that have a certain Feature its owned or inherited <code>result</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>The <code>relatedFeatures</code> of a <code>Connector</code> are the referenced <code>Features</code> of its <code>connectorEnds</code>.</p> + + OCL2.0 - ownedFeature->size() = 1 + relatedFeature = connectorEnd.ownedReferenceSubsetting-> + select(s | s <> null).subsettedFeature - - - <p>The <code>owningType</code> of a <code>FlowEnd</code> must be a <code>Flow</code>.</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 - owningType <> null and owningType.oclIsKindOf(Flow) + relatedFeature->forAll(f | + if featuringType->isEmpty() then f.isFeaturedWithin(null) + else featuringType->forAll(t | f.isFeaturedWithin(t)) + endif) - - - - - <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> + + + <p>The <code>sourceFeature</code> of a <code>Connector</code> is its first <code>relatedFeature</code> (if any).</p> - + OCL2.0 - specializesFromLibrary('Transfers::transfers') + sourceFeature = + if relatedFeature->isEmpty() then null + else relatedFeature->first() + endif - - - <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>The <code>targetFeatures</code> of a <code>Connector</code> are the <code>relatedFeatures</code> other than the <code>sourceFeature</code>.</p> - + OCL2.0 - payloadType = - if payloadFeature = null then Sequence{} - else payloadFeature.type + targetFeature = + if relatedFeature->size() < 2 then OrderedSet{} + else + relatedFeature-> + subSequence(2, relatedFeature->size())-> + asOrderedSet() endif - - - <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>If a <code>Connector</code> is concrete (not abstract), then it must have at least two <code>relatedFeatures</code>.</p> - + OCL2.0 - sourceOutputFeature = - if connectorEnd->isEmpty() or - connectorEnd.ownedFeature->isEmpty() - then null - else connectorEnd.ownedFeature->first() - endif + not isAbstract implies relatedFeature->size() >= 2 - - - <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>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 - targetInputFeature = - if connectorEnd->size() < 2 or - connectorEnd->at(2).ownedFeature->isEmpty() - then null - else connectorEnd->at(2).ownedFeature->first() - endif + specializesFromLibrary('Links::links') - - - <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>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 - flowEnd = connectorEnd->selectByKind(FlowEnd) + association->exists(oclIsKindOf(AssociationStructure)) implies + specializesFromLibrary('Objects::linkObjects') - - - <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>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 - payloadFeature = - let payloadFeatures : Sequence(PayloadFeature) = - ownedFeature->selectByKind(PayloadFeature) in - if payloadFeatures->isEmpty() then null - else payloadFeatures->first() - endif + connectorEnds->size() = 2 and +association->exists(oclIsKindOf(AssociationStructure)) implies + specializesFromLibrary('Objects::binaryLinkObjects') + + + + + <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 + connectorEnd->size() = 2 implies + specializesFromLibrary('Links::binaryLinks') - - - <p>A <code>Flow</code> must have at most one <code>ownedFeature</code> that is an <code>PayloadFeature</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 - ownedFeature->selectByKind(PayloadFeature)->size() <= 1 + connectorEnds->size() > 2 implies + not specializesFromLibrary('Links::BinaryLink') - - - <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>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 - ownedEndFeatures->notEmpty() implies - specializesFromLibrary('Transfers::flowTransfers') + 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 type of values transferred, which is the <code>type</code> of the <code>payloadFeature</code> of the <code>Flow</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>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>Associations</code> that type the <code>Connector</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 <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>connectorEnds</code> of this <code>Flow</code> that are <code>FlowEnds</code>.</p> - + + + <p>The source <code>relatedFeature</code> for this <code>Connector</code>. It is the first <code>relatedFeature</code>.</p> - - + + - - - <p>The <code>ownedFeature</code> of the <code>Flow</code> that is a <code>PayloadFeature</code> (if any).</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>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 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 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>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>Succession</code> is a binary <code>Connector</code> that requires its <code>relatedFeatures</code> to happen separately in time.</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>Succession</code> must directly or indirectly specialize the Feature <code><em>Occurrences::happensBeforeLinks</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - redefinesFromLibrary('Transfers::Transfer::payload') + specializesFromLibrary('Occurrences::happensBeforeLinks') - + - - - - + + + + - - - - + + + + <p>A <code>Connector</code> with a certain <code>defaultFeaturingType</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>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>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>BindingConnector</code> must be binary.</p> - + OCL2.0 - specializesFromLibrary('Occurrences::Occurrence') + relatedFeature->size() = 2 - - - <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>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 - ownedSpecialization.general-> - forAll(not oclIsKindOf(DataType)) and -not oclIsKindOf(Association) implies - ownedSpecialization.general-> - forAll(not oclIsKindOf(Association)) + specializesFromLibrary('Links::selfLinks') - + + + + + + + + + + + + + @@ -6928,11 +6943,19 @@ not oclIsKindOf(Association) implies - <p>The <code>bounds</code> of a <code>MultiplicityRange</code> must have the same <code>featuringTypes</code> as the <code>MultiplicityRange</code>.</p> + <p>If the <code>owningType</code> of a <code>MultiplicityRange</code> is a <code>Feature</code>, but not an owned cross <code>Feature</code>, then the <code>bounds</code> of the <code>MultiplicityRange</code> must have the same <code>featuringTypes</code> as the <code>MultiplicityRange</code>. If the <code>owningType</code> is an owned cross <code>Feature</code>, then the <code>bounds</code> must have the same <code>featuringTypes</code> as the owning end <code>Feature</code> of the <code>owningType</code>. (This allows a cross multiplicity to be evaluated in the same context as the multiplicity of the end <code>Feature</code>.)</p> OCL2.0 - bound->forAll(b | b.featuringType = self.featuringType) + let boundsFeaturingType : OrderedSet(Type) = + if owningType <> null and owningType.oclIsKindOf(Feature) and + owningType.oclAsType(Feature).isOwnedCrossFeature() then + owningType.oclAsType(Feature).owningType.oclAsType(Feature).featuringType + else + featuringType + endif in +bound->forAll(b | b.featuringType = boundsFeaturingType) + @@ -7090,698 +7113,692 @@ endif - - - - - - - - - - - - - - - - - - - <p>The ResultExpressionMembership that owns the <code>ownedResultExpression</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>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>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>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>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>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 - if isNegated then - specializesFromLibrary('Performances::falseEvaluations') -else - specializesFromLibrary('Performances::trueEvaluations') -endif + specializesFromLibrary('Objects::Object') - - - - <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 Expressions that are typed by a certain <code>function</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>The <code>owningType</code> of a <code>ReturnParameterMembership</code> must be a <code>Function</code> or <code>Expression</code>.</p> + + + <p>A <code>Structure</code> must not specialize a <code>Behavior</code>.</p> - + OCL2.0 - owningType.oclIsKindOf(Function) or owningType.oclIsKindOf(Expression) + ownedSpecialization.general->forAll(not oclIsKindOf(Behavior)) - - - - <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>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>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>Metaclass</code> is a <code>Structure</code> used to type <code>MetadataFeatures</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>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 - specializesFromLibrary('Performances::booleanEvaluations') + specializesFromLibrary('Metaobjects::Metaobject') - - - - <p>The Predicate that types the Expression.</p> - - - - <p>The <code>Predicate</code> that types this <code>BooleanExpression</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>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>Whether an <code>Expression</code> <code>isModelLevelEvaluable</code> is determined by the <code>modelLevelEvaluable()</code> operation.</p> + + + <p>A <code>MetadataFeature</code> must have exactly one <code>type</code> that is a <code>Metaclass</code>.</p> - + OCL2.0 - isModelLevelEvaluable = modelLevelEvaluable(Set(Element){}) + type->selectByKind(Metaclass).size() = 1 - - - <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>The <code>metaclass</code> of a <code>MetadataFeature</code> must not be abstract.</p> - + OCL2.0 - specializesFromLibrary('Performances::evaluations') + not metaclass.isAbstract - - - <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>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 - owningMembership <> null and -owningMembership.oclIsKindOf(FeatureValue) implies - let featureWithValue : Feature = - owningMembership.oclAsType(FeatureValue).featureWithValue in - featuringType = featureWithValue.featuringType + specializesFromLibrary('Metaobjects::metaobjects') - - - <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>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 - ownedMembership.selectByKind(ResultExpressionMembership)-> - forAll(mem | ownedFeature.selectByKind(BindingConnector)-> - exists(binding | - binding.relatedFeature->includes(result) and - binding.relatedFeature->includes(mem.ownedResultExpression.result))) + 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>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 <code>metaclass</code> of a <code>MetadataFeature</code> is one of its <code>types</code> that is a <code>Metaclass</code>. - + OCL2.0 - result = - let resultParams : Sequence(Feature) = - featureMemberships-> - selectByKind(ReturnParameterMembership). - ownedMemberParameter in - if resultParams->notEmpty() then resultParams->first() - else null - endif - + metaclass = + let metaclassTypes : Sequence(Type) = type->selectByKind(Metaclass) in + if metaclassTypes->isEmpty() then null + else metaClassTypes->first() + endif - - - <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>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 - featureMembership-> - selectByKind(ReturnParameterMembership)-> - size() = 1 + 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>An <code>Expression</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>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>type</code> of this <code>MetadataFeature</code>, which must be a <code>Metaclass</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>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> + + + <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> - - + + 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) - + 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>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>Check if this <code>MetadataFeature</code> has a <code>metaclass</code> which is a kind of <code><em>SemanticMetadata</code>.<p> - - + + OCL2.0 - isModelLevelEvaluable + 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> + + + OCL2.0 - let resultExprs : Sequence(Expression) = - ownedFeatureMembership-> - selectByKind(ResultExpressionMembership). - ownedResultExpression in -if resultExpr->isEmpty() then Sequence{} -else resultExprs->first().evaluate(target) -endif + specializesFromLibrary('KerML::Element') - - - - + + - - - <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>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 - let results: Sequence(Element) = evaluate(target) in - result->size() = 1 and - results->first().oclIsKindOf(LiteralBoolean) and - results->first().oclAsType(LiteralBoolean).value + isSyntactic() - - - + + + - - - <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>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>Function</code> must have exactly one <code>featureMembership</code> (owned or inherited) that is a <code>ResultParameterMembership</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> - + OCL2.0 - featureMembership-> - selectByKind(ReturnParameterMembership)-> - size() = 1 + specializesFromLibrary('Occurrences::Occurrence') - - - <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>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::Evaluation') + ownedSpecialization.general-> + forAll(not oclIsKindOf(DataType)) and +not oclIsKindOf(Association) implies + ownedSpecialization.general-> + forAll(not oclIsKindOf(Association)) - - - <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 Package that has a certain Expression as a <code>filterCondition</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>condition</code> <code>Expression</code> must be model-level evaluable.</p> + + OCL2.0 - ownedMembership.selectByKind(ResultExpressionMembership)-> - forAll(mem | ownedFeature.selectByKind(BindingConnector)-> - exists(binding | - binding.relatedFeature->includes(result) and - binding.relatedFeature->includes(mem.ownedResultExpression.result))) + condition.isModelLevelEvaluable - - - <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>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 - result = - let resultParams : Sequence(Feature) = - featureMemberships-> - selectByKind(ReturnParameterMembership). - ownedMemberParameter in - if resultParams->notEmpty() then resultParams->first() - else null - endif + condition.result.specializesFromLibrary('ScalarValues::Boolean') - - - <p>A <code>Function</code> must have at most one <code>ResultExpressionMembership</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> + + + + + + + + + <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 - membership->selectByKind(ResultExpressionMembership)->size() <= 1 + filterCondition = ownedMembership-> + selectByKind(ElementFilterMembership).condition - - - - <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 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 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>Exclude <code>Elements</code> that do not meet all the <code>filterConditions</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 + 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> - - + + + 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>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>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>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>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 Functions that have a certain Feature its owned or inherited <code>result</code>.</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>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>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>Behavior</code> must not specialize a <code>Structure</code>.</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 - ownedSpecialization.general->forAll(not oclIsKindOf(Structure)) + specializesFromLibrary('Transfers::transfers') - - - <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>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> - - English - specializesFromLibrary('Performances::Performance') + + OCL2.0 + payloadType = + if payloadFeature = null then Sequence{} + else payloadFeature.type + endif - - - <p>The <code>steps</code> of a <code>Behavior</code> are its <code>features</code> that are <code>Steps</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 - step = feature->selectByKind(Step) + sourceOutputFeature = + if connectorEnd->isEmpty() or + connectorEnd.ownedFeature->isEmpty() + then null + else connectorEnd.ownedFeature->first() + endif - - - - <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> + + + <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 - specializesFromLibrary('Performances::performances') + targetInputFeature = + if connectorEnd->size() < 2 or + connectorEnd->at(2).ownedFeature->isEmpty() + then null + else connectorEnd->at(2).ownedFeature->first() + endif - - - <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>The <code>flowEnds</code> of a <code>Flow</code> are all its <code>connectorEnds</code> that are <code>FlowEnds</code>.</p> - + OCL2.0 - owningType <> null and - (owningType.oclIsKindOf(Behavior) or - owningType.oclIsKindOf(Step)) implies - specializesFromLibrary('Performances::Performance::enclosedPerformance') + flowEnd = connectorEnd->selectByKind(FlowEnd) - - - <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>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 - 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') + payloadFeature = + let payloadFeatures : Sequence(PayloadFeature) = + ownedFeature->selectByKind(PayloadFeature) in + if payloadFeatures->isEmpty() then null + else payloadFeatures->first() + endif - - - <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> + + + <p>A <code>Flow</code> must have at most one <code>ownedFeature</code> that is an <code>PayloadFeature</code>.</p> - + OCL2.0 - owningType <> null and - (owningType.oclIsKindOf(Behavior) or - owningType.oclIsKindOf(Step)) and - self.isComposite implies - specializesFromLibrary('Performances::Performance::subperformance') + ownedFeature->selectByKind(PayloadFeature)->size() <= 1 - - - <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>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 - behavior = type->selectByKind(Behavior) + ownedEndFeatures->notEmpty() implies + specializesFromLibrary('Transfers::flowTransfers') - - - - <p>The <code>Behaviors</code> that type this <code>Step</code>.</p> + + + + + <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>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 <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 <code>connectorEnds</code> of this <code>Flow</code> that are <code>FlowEnds</code>.</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>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>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>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> + + + <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 - ownedMemberParameter.direction = parameterDirection() + specializesFromLibrary('Transfers::flowTransfersBefore') - - - <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 ItemFlow that has a certain <code>sourceOutputFeature</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>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 - owningType.oclIsKindOf(Behavior) or owningType.oclIsKindOf(Step) or -owningType.owningMembership.oclIsKindOf(ReturnParameterMembership) and - owningType.owningNamespace.oclIsKindOf(ConstructorExpression) + redefinesFromLibrary('Transfers::Transfer::payload') - - - - <p>The <code>Feature</code> that is identified as a <code>parameter</code> by this <code>ParameterMembership</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> - - - - - - <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 + isEnd + + + + + <p>A <code>FlowEnd</code> must have exactly one <code>ownedFeature</code>.</p> - - - OCL2.0 - FeatureDirectionKind::_'in' - - - - - - - + + OCL2.0 + ownedFeature->size() = 1 + + + + + <p>The <code>owningType</code> of a <code>FlowEnd</code> must be a <code>Flow</code>.</p> + + + OCL2.0 + owningType <> null and owningType.oclIsKindOf(Flow) + + + + + + + + + diff --git a/org.omg.sysml/model/KerML_only_xmi.uml b/org.omg.sysml/model/KerML_only_xmi.uml index 49bd7aa35..9a0f5e911 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. @@ -1824,12 +1824,14 @@ endif - <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> + <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> owned by a direct or indirect supertype of this <code>Type</code>.</p> OCL2.0 - featureMembership = ownedFeatureMembership->union( - inheritedMembership->selectByKind(FeatureMembership)) + featureMembership = ownedFeatureMembership-> + union(inheritedMembership-> + selectByKind(FeatureMembership)-> + select(mem | self.specializes(mem.owningType))) @@ -3012,11 +3014,15 @@ featuringTypes->forAll(t | - <p>If the redefinedFeature of a Redefinition has isEnd = true, then the redefiningFeature must have isEnd = true.</p> + <p>If the <code>redefinedFeature</code> of a <code>Redefinition</code> has <code>isEnd = true</code> and the <code>owningType</code> of the <code>redefiningFeature</code> is an <code>Association</code> or <code>Connector</code>, then the <code>redefiningFeature</code> must have <code>isEnd = true</code>.</p> OCL2.0 - redefinedFeature.isEnd implies redefiningFeature.isEnd + redefinedFeature.isEnd and +redefiningFeature.owningType <> null and +(redefiningFeature.owningType.oclIsKindOf(Association) or + redefiningFeature.owningType.oclIsKindOf(Connector)) implies + redefiningFeature.isEnd @@ -4115,7 +4121,7 @@ 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> + <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 <em>not</em> a <code>Multiplicity</code>, <code>MetadataFeature</code>, or <code>BindingConnector</code>, and whose <code>owningMembership</code> is <em>not</em> a <code>FeatureMembership</code> or <code>FeatureValue</code>. If this exists, it is the <code>crossFeature</code> of the end <code>Feature</code>.</p> @@ -4124,13 +4130,16 @@ owningNamespace.oclAsType(Feature).ownedCrossFeature() = self else let ownedMemberFeatures: Sequence(Feature) = ownedMember->selectByKind(Feature)-> - reject(oclIsKindOf(Multiplicity) or + reject(oclIsKindOf(Multiplicity) or oclIsKindOf(MetadataFeature) or - oclIsKindOf(FeatureValue))-> - reject(owningMembership.oclIsKindOf(FeatureMembership)) in + oclIsKindOf(BindingConnector))-> + reject(owningMembership.oclIsKindOf(FeatureMembership) or + owningMembership.oclIsKindOf(FeatureValue)) in if ownedMemberFeatures.isEmpty() then null else ownedMemberFeatures->first() - endif + endif +endif + @@ -5919,12 +5928,12 @@ endif - <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>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::Collection</code></em> from the Kernel Data Type Library.</p> OCL2.0 arguments->notEmpty() and -not arguments->first().result.specializesFromLibrary('Collections::Array') implies +not arguments->first().result.specializesFromLibrary('Collections::Collection') implies result.specializes(arguments->first().result) @@ -6629,11 +6638,19 @@ endif - <p>The <code>bounds</code> of a <code>MultiplicityRange</code> must have the same <code>featuringTypes</code> as the <code>MultiplicityRange</code>.</p> + <p>If the <code>owningType</code> of a <code>MultiplicityRange</code> is a <code>Feature</code>, but not an owned cross <code>Feature</code>, then the <code>bounds</code> of the <code>MultiplicityRange</code> must have the same <code>featuringTypes</code> as the <code>MultiplicityRange</code>. If the <code>owningType</code> is an owned cross <code>Feature</code>, then the <code>bounds</code> must have the same <code>featuringTypes</code> as the owning end <code>Feature</code> of the <code>owningType</code>. (This allows a cross multiplicity to be evaluated in the same context as the multiplicity of the end <code>Feature</code>.)</p> OCL2.0 - bound->forAll(b | b.featuringType = self.featuringType) + let boundsFeaturingType : OrderedSet(Type) = + if owningType <> null and owningType.oclIsKindOf(Feature) and + owningType.oclAsType(Feature).isOwnedCrossFeature() then + owningType.oclAsType(Feature).owningType.oclAsType(Feature).featuringType + else + featuringType + endif in +bound->forAll(b | b.featuringType = boundsFeaturingType) + diff --git a/org.omg.sysml/model/SysML.uml b/org.omg.sysml/model/SysML.uml index 640203ffa..0724f0ebe 100644 --- a/org.omg.sysml/model/SysML.uml +++ b/org.omg.sysml/model/SysML.uml @@ -1,7006 +1,6734 @@ - - - - - <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>FeatureReferenceExpression</code> that has a certain <code>referent</code> <code>Feature</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>ownedSubclassifications</code> of a <code>Classifier</code> are its <code>ownedSpecializations</code> that are <code>Subclassifications</code>.</p> + + + <p>The <code>operator</code> of a <code>SelectExpression</code> must be <code>'select'</code>.</p> - + OCL2.0 - ownedSubclassification = - ownedSpecialization->selectByKind(Subclassification) + operator = 'select' - - - <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>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 - multiplicity <> null implies multiplicity.featuringType->isEmpty() + arguments->notEmpty() implies + result.specializes(arguments->first().result) - - - - <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 Subclassifications with a certain <code>superclassifier</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>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>Classifier</code> that owns this <code>Subclassification</code> relationship, which must also be its <code>subclassifier</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>The Subclassifications with a certain <code>subclassifier</code>.</p> - - - - - - - - - <p>The Features for which a certain Type is a <code>type</code>.</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>Relationship for chainedFeatures.</p> - - - <p>The <code>FeatureChainings</code> that identify a <code>Feature</code> as their <code>chainingFeature</code>.</p> - - - - - - - - - <p>The Feature that owns this Redefinition relationship, which must also be its <code>redefiningFeature</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><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>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>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> + + + <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 - 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) + 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>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>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 - crossingFeature.isEnd and -crossingFeature.owningType<>null and -crossingFeature.owningType.endFeature ->size() > 1 + ownedMember->selectByKind(BindingConnector)->exists(b | + b.relatedFeatures->includes(targetFeature) and + b.relatedFeatures->includes(result)) - - - - <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 <code>Features</code> with a certain other <code>Feature</code> as the <code>crossFeature</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> + + + <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 - subsettingFeature.canAccess(subsettedFeature) + let membership : Membership = + ownedMembership->reject(m | m.oclIsKindOf(ParameterMembership)) in +membership->notEmpty() and +membership->at(1).memberElement.oclIsKindOf(Feature) - - - <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>result</code> parameter of a <code>FeatureReferenceExpression</code> must specialize the <code>referent</code> of the <code>FeatureReferenceExpression</code>.</p> - + OCL2.0 - subsettedFeature.isUnique implies subsettingFeature.isUnique + result.owningType() = self and result.specializes(referent) - - - <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>A <code>FeatureReferenceExpression</code> must own its <code>result</code> parameter.</p> - + OCL2.0 - subsettedFeature.isConstant and subsettingFeature.isVariable implies - subsettingFeature.isConstant - + result.owningType = self - - - - <p>The <code>Feature</code> that is subsetted by the <code>subsettingFeature</code> of this <code>Subsetting</code>.</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>The <code>Feature</code> that is a subset of the <code>subsettedFeature</code> of this <code>Subsetting</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> - - - - - - <p>A <code>subsettingFeature</code> that is also the <code>owningRelatedElement</code> of this <code>Subsetting</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> + +<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>The Redefinitions with a certain Feature as the <code>redefinedFeature</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><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><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>A <code>LiteralBoolean</code> must directly or indirectly specialize <em><code>Performances::literalBooleanEvaluations</code></em> from the Kernel Semantic Library.</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> + + OCL2.0 + specializesFromLibrary('Performances::literalBooleanEvaluations') + + + + + + <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>The <code>TypeFeaturings</code> for which a certain <code>Type</code> is the <code>featuringType</code>.</p> - - - - - - - - - - - - - - - <p>The FeatureInvertings that identify this Feature as their <code>invertingFeature</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>The <code>TypeFeaturings</code> for which a certain <code>Feature</code> is the <code>featureOfType</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>The Redefinitions with a certain Feature as the <code>redefiningFeature</code>.</p> + + <p>The Integer value that is the result of evaluating this Expression.</p> + - - - + + - - - - <p>A <code>Type</code> that has the <code>multiplicity</code> as an <code>ownedMember</code>.</p> + + + + <p>The <code>MetadataAccessExpressions</code> having a certain <code>Element</code> as their <code>referencedElement</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>A <code>LiteralExpression</code> is an <code>Expression</code> that provides a basic <code><em>DataValue</em></code> as a result.</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>LiteralExpression</code> is always model-level evaluable.</p> - - - - - - <p>A <code>featureOfType</code> that is also the <code>owningRelatedElement</code> of this <code>TypeFeaturing</code>.</p> - - - - - - - - - <p>The FeatureInvertings that identify this Feature as their <code>featureInverted</code>.</p> - - - - - - - - - <p>The <code>CrossSubsetting</code> with a certain <code>Feature</code> as the <code>crossedFeature</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 an inverse of the <code>invertingFeature</code>.</p> - - - - - - - <p>The <code>Feature</code> that is an inverse of the <code>invertedFeature</code>.</p> - - - - - - - <p>A <code>featureInverted</code> that is also the <code>owningRelatedElement</code> of this <code>FeatureInverting</code>.</p> - - - - - - - - - - <p>The <code>ReferenceSubsetting</code> with a certain <code>Feature</code> as the <code>referencedFeature</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)) + isModelLevelEvaluable = true - - - <p>If the redefinedFeature of a Redefinition has isEnd = true, then the redefiningFeature must have isEnd = true.</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 - redefinedFeature.isEnd implies redefiningFeature.isEnd + specializesFromLibrary('Performances::literalEvaluations') - - - - <p>The <code>Feature</code> that is redefining the <code>redefinedFeature</code> of this <code>Redefinition</code>.</p> - + + + + <p>A <code>LiteralExpression</code> is always model-level evaluable.</p> - - - - - - <p>The <code>Feature</code> that is redefined by the <code>redefiningFeature</code> of this <code>Redefinition</code>.</p> - + + + OCL2.0 + true + + + + + + + + + + + + + <p>The model-level value of a <code>LiteralExpression</code> is itself.</p> - - - + + + OCL2.0 + Sequence{self} + + + + + + + + - - - <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>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 <code>ownedRedefinitions</code> of a <code>Feature</code> are its <code>ownedSubsettings</code> that are <code>Redefinitions</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 - ownedRedefinition = ownedSubsetting->selectByKind(Redefinition) + let sourceTargetFeature : Feature = sourceTargetFeature() in +sourceTargetFeature <> null and +sourceTargetFeature.redefinesFromLibrary('ControlFunctions::\'.\'::source::target') - - - <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 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 - ownedTypeFeaturing = ownedRelationship->selectByKind(TypeFeaturing)-> - select(tf | tf.featureOfType = self) + let sourceTargetFeature : Feature = sourceTargetFeature() in +sourceTargetFeature <> null and +sourceTargetFeature.redefines(targetFeature) - - - <p>The <code>ownedSubsettings</code> of a <code>Feature</code> are its <code>ownedSpecializations</code> that are <code>Subsettings</code>.</p> + + + <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 - ownedSubsetting = ownedSpecialization->selectByKind(Subsetting) + 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>ownedTypings</code> of a <code>Feature</code> are its <code>ownedSpecializations</code> that are <code>FeatureTypings</code>.</p> + + + <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 - ownedTyping = ownedGeneralization->selectByKind(FeatureTyping) + argument->notEmpty() implies + targetFeature.isFeaturedWithin(argument->first().result) - - - <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>operator</code> of a <code>FeatureChainExpression</code> must be <code>"."</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))) + operator = '.' - - - <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>result</code> parameter of a <code>FeatureChainExpression</code> must specialize the feature chain of the <code>FeatureChainExpression</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> - - - OCL2.0 - specializesFromLibrary('Base::things') + 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 - - - <p>A <code>Feature</code> cannot be one of its own <code>chainingFeatures</code>.</p> + + + + + + + + <p>The <code>Feature</code> that is accessed by this <code>FeatureChainExpression<code>, which is its first non-<code>parameter</code> <code>member</code>.<p> - - English - chainingFeature->excludes(self) - - - - - <p>The <code>ownedFeatureChainings</code> of a <code>Feature</code> are the <code>ownedRelationships</code> that are <code>FeatureChainings</code>.</p> + + + + + + <p>Return the first <code>ownedFeature</code> of the first owned input <code>parameter</code> of this <code>FeatureChainExpression</code> (if any).</p> - - OCL2.0 - ownedFeatureChaining = ownedRelationship->selectByKind(FeatureChaining) - - - - - <p>The <code>chainingFeatures</code> of a <code>Feature</code> are the <code>chainingFeatures</code> of its <code>ownedFeatureChainings</code>.</p> + + + OCL2.0 + let inputParameters : Feature = ownedFeatures-> + select(direction = _'in') in +if inputParameters->isEmpty() or + inputParameters->first().ownedFeature->isEmpty() +then null +else inputParameters->first().ownedFeature->first() +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>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 - chainingFeature = ownedFeatureChaining.chainingFeature + specializesFromLibrary('Performances::metadataAccessEvaluations') - - - A <code>Feature</code> must have either no <code>chainingFeatures</code> or more than one. + + + <p>A <code>MetadataAccessExpression</code> must have at least one <code>ownedMember</code> that is not a <code>FeatureMembership</code>.</p> - + OCL2.0 - chainingFeature->size() <> 1 + ownedMembership->exists(not oclIsKindOf(FeatureMembership)) - - - <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 <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 - 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)) + referencedElement = + let elements : Sequence(Element) = ownedMembership-> + reject(oclIsKindOf(FeatureMembership)).memberElement in + if elements->isEmpty() then null + else elements->first() + endif - - - <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>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>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> + + OCL2.0 - direction = null and -ownedSpecializations->forAll(isImplied) implies - ownedMembership-> - selectByKind(FeatureValue)-> - forAll(fv | specializes(fv.value.result)) + specializesFromLibrary('Performances::literalStringEvaluations') - - - <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>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>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 - isEnd and owningType <> null and -(owningType.oclIsKindOf(Association) or - owningType.oclIsKindOf(Connector)) implies - specializesFromLibrary('Links::Link::participant') + result.owningType = self - - - <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>instantiatedType</code> of an <code>InstantiationExpression</code> is given by the result of the <code>instantiatedType()</code> operation.</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') + instantiatedType = instantiatedType() - - - <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>An <code>InstantiationExpression</code> must have an <code>InstantiatedType</code>.</p> - + OCL2.0 - ownedTyping.type->exists(selectByKind(Class)) implies - specializesFromLibrary('Occurrences::occurrences') + instantiatedType() <> null - - - <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 <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 <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>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>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 - 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') + instantiatedType.feature->collect(f | + result.ownedFeatures->select(redefines(f)).valuation-> + select(v | v <> null).value +) - - - <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> + + + <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 - ownedTyping.type->exists(selectByKind(DataType)) implies - specializesFromLibrary('Base::dataValues') + 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>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> + + + <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 - 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')) - + let features : OrderedSet(Feature) = instantiatedType.feature-> + select(owningMembership.visibility = VisibilityKind::public) in +result.ownedFeature->forAll(f | + f.ownedRedefinition.redefinedFeature-> + intersection(features)->size() = 1) - - - <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 <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 - 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))) + TBD - - - <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 <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 - ownedTyping.type->exists(selectByKind(Structure)) implies - specializesFromLibrary('Objects::objects') + specializes('Performances::constructorEvaluations') - - - <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>The <code>result</code> of a <code>ConstructorExpression</code> must specialize the <code>instantiatedType</code> of the <code>ConstructorExpression</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) + result.specializes(instantiatedType) - - - <p>The <code>ownedFeatureInvertings</code> of a <code>Feature</code> are its <code>ownedRelationships</code> that are <code>FeatureInvertings</code>.</p> + + + <p>A <code>ConstructorExpression</code> must not have any <code>ownedFeatures</code> other than its <code>result</code>.</p> - + OCL2.0 - ownedFeatureInverting = ownedRelationship->selectByKind(FeatureInverting)-> - select(fi | fi.featureInverted = self) + ownedFeatures->excluding(result)->isEmpty() - - - 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>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>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 - featuringType = - let featuringTypes : OrderedSet(Type) = - typeFeaturing.type->asOrderedSet() in - if chainingFeature->isEmpty() then featuringTypes - else - featuringTypes-> - union(chainingFeature->first().featuringType)-> - asOrderedSet() - endif + 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>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>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 - ownedReferenceSubsetting = - let referenceSubsettings : OrderedSet(ReferenceSubsetting) = - ownedSubsetting->selectByKind(ReferenceSubsetting) in - if referenceSubsettings->isEmpty() then null - else referenceSubsettings->first() endif + TBD - - - <p>A <code>Feature</code> must have at most one <code>ownedSubsetting</code> that is an <code>ReferenceSubsetting</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 - ownedSubsetting->selectByKind(ReferenceSubsetting)->size() <= 1 + instantiatedType.input->collect(inp | + ownedFeatures->select(redefines(inp)).valuation-> + select(v | v <> null).value +) - - - <p>Each <code>chainingFeature</code> (other than the first) must be featured within the previous <code>chainingFeature</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 - Sequence{2..chainingFeature->size()}->forAll(i | - chainingFeature->at(i).isFeaturedWithin(chainingFeature->at(i-1))) - + let parameters : OrderedSet(Feature) = instantiatedType.input in +input->forAll(inp | + inp.ownedRedefinition.redefinedFeature-> + intersection(parameters)->size() = 1) - - - <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> + + + <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 - 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') + 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>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>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 - featureTarget = if chainingFeature->isEmpty() then self else chainingFeature->last() endif + not instantiatedType.oclIsKindOf(Function) and +not (instantiatedType.oclIsKindOf(Feature) and + instantiatedType.oclAsType(Feature).type->exists(oclIsKindOf(Function))) implies + result.specializes(instantiatedType) - - - <p>The <code>ownedCrossSubsetting</code> of a <code>Feature</code> is the <code>ownedSubsetting</code> that is a <code>CrossSubsetting</code>, if any.</p> + + + <p>An <code>InvocationExpression</code> must specialize its <code>instantiatedType</code>.</p> - + OCL2.0 - ownedCrossSubsetting = - let crossSubsettings: Sequence(CrossSubsetting) = - ownedSubsetting->selectByKind(CrossSubsetting) in - if crossSubsettings->isEmpty() then null - else crossSubsettings->first() - endif + specializes(instantiatedType) - - - <p>If a <code>Feature</code> has <code>isEnd = true</code>, then it must have multiplicity <code>1..1</code>.</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 - isEnd implies - multiplicities().allSuperTypes()->flatten()-> - selectByKind(MultiplicityRange)->exists(hasBounds(1,1)) + instantiatedType.oclIsKindOf(Behavior) or +instantiatedType.oclIsKindOf(Feature) and + instantiatedType.type->exists(oclIsKindOf(Behavior)) and + instantiatedType.type->size(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>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 - crossFeature <> null implies - crossFeature.type->asSet() = type->asSet() + ownedFeature->forAll(f | + f <> result implies + f.direction = FeatureDirectionKind::_'in') - - - <p>A <code>Feature</code> must have at most one <code>ownedSubsetting</code> that is a <code>CrossSubsetting</code>.</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 - 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> + + + OCL2.0 + argument->forAll(modelLevelEvaluable(visited)) and + function.isModelLevelEvaluable + + + + + + + + + + + + + <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 - 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>A <code>InstantiationExpression</code> that has a certain <code>argument</code> <code>Expression</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>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 - isOwnedCrossFeature() implies - ownedSubsetting.subsettedFeature->includesAll( - owner.oclAsType(Feature).ownedRedefinition.redefinedFeature-> - select(crossFeature <> null).crossFeature) + operator = 'collect' - - - <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>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 - crossFeature <> null implies - ownedRedefinition.redefinedFeature.crossFeature-> - forAll(f | f <> null implies crossFeature.specializes(f)) + specializesFromLibrary('Performances::nullEvaluations') - - - <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>A <code>NullExpression</code> is always model-level evaluable.</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> + + + OCL2.0 + true + + + + + + + + + + + + + <p>The model-level value of a <code>NullExpression</code> is an empty sequence.</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 + + + OCL2.0 + Sequence{} + + + + + + + + + + + + <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 + + + + + + + + <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::Collection</code></em> from the Kernel Data Type Library.</p> + + + OCL2.0 + arguments->notEmpty() and +not arguments->first().result.specializesFromLibrary('Collections::Collection') implies + result.specializes(arguments->first().result) - - - <p>A <code>Feature</code> with <code>isEnd = true</code> must have no direction.</p> + + + <p>The <code>operator</code> of an <code>IndexExpression</code> must be <code>"#"</code>.</p> - + OCL2.0 - isEnd implied direction = null + operator = '#' - - - <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>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 - owningFeatureMembership <> null implies - featuringTypes->exists(t | isFeaturingType(t)) + specializesFromLibrary('Performances::literalRationalEvaluations') - - - <p>A <code>Feature</code> with <code>isConstant = true</code> must have <code>isVariable = true</code>. + + + + <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>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>If the <code>owningType</code> of a <code>MultiplicityRange</code> is a <code>Feature</code>, but not an owned cross <code>Feature</code>, then the <code>bounds</code> of the <code>MultiplicityRange</code> must have the same <code>featuringTypes</code> as the <code>MultiplicityRange</code>. If the <code>owningType</code> is an owned cross <code>Feature</code>, then the <code>bounds</code> must have the same <code>featuringTypes</code> as the owning end <code>Feature</code> of the <code>owningType</code>. (This allows a cross multiplicity to be evaluated in the same context as the multiplicity of the end <code>Feature</code>.)</p> + + OCL2.0 - isConstant implies isVariable + let boundsFeaturingType : OrderedSet(Type) = + if owningType <> null and owningType.oclIsKindOf(Feature) and + owningType.oclAsType(Feature).isOwnedCrossFeature() then + owningType.oclAsType(Feature).owningType.oclAsType(Feature).featuringType + else + featuringType + endif in +bound->forAll(b | b.featuringType = boundsFeaturingType) + - - - <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> + + + <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 - isVariable implies - owningType <> null and - owningType.specializes('Occurrences::Occurrence') + bound->forAll(b | + b.result.specializesFromLibrary('ScalarValues::Integer') and + let value : UnlimitedNatural = valueOf(b) in + value <> null implies value >= 0 +) - - - <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> + + + <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 - isEnd implies not (isDerived or isAbstract or isComposite or isPortion) + lowerBound = + let ownedExpressions : Sequence(Expression) = + ownedMember->selectByKind(Expression) in + if ownedExpressions->size() < 2 then null + else ownedExpressions->first() + endif - - - <p>A <code>Feature</code> with <code>isEnd = true</code> and <code>isVariable = true</code> must have <code>isConstant = true</code>.</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 - isEnd and isVariable implies isConstant + 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 <code>Type</code> that is the <code>owningType</code> of the <code>owningFeatureMembership</code> of this <code>Feature</code>.</p> - - - - - - - <p>Whether or not values for this <code>Feature</code> must have no duplicates or not.</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>Whether an order exists for the values of this <code>Feature</code> or not.</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><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> + + 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>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>Expression</code> whose result is the upper bound of the <code>MultiplicityRange</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 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>The <code>FeatureMembership</code> that owns this <code>Feature</code> as an <code>ownedMemberFeature</code>, determining its <code>owningType</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>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>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>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>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> + + + <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 - type.directionOf(self) + valueOf(upperBound) = upper and +let lowerValue: UnlimitedNatural = valueOf(lowerBound) in +(lowerValue = lower or + lowerValue = null and + (lower = upper or + lower = 0 and upper = *)) + - - - - + + - - - - <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 - 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 - 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> + + + <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 ownedRedefinition->isEmpty() then + if bound = null or not bound.isModelLevelEvaluable then null else - ownedRedefinition->at(1).redefinedFeature -endif + 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 - - - - - - - - - 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 - 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 - 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> - - - - 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> - - - - 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> - - - - - 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> - - - - 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 - 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> - - - - 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 - 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 - 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>The Subsettings with a certain Feature as the <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>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>The <code>ownedMemberFeature</code> of an <code>EndFeatureMembership</code> must be an end <code>Feature</code>.</p> + + + <p>A <code>DataType</code> must not specialize a <code>Class</code> or an <code>Association</code>.</p> - + OCL2.0 - ownedMemberFeature.isEnd + ownedSpecialization.general-> + forAll(not oclIsKindOf(Class) and + not oclIsKindOf(Association)) - - - - - - - - - <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 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>A <code>typedFeature</code> that is also the <code>owningRelatedElement</code> of this <code>FeatureTyping</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 + specializesFromLibrary('Base::DataValue') + + + - - - - <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 Features for which a certain Type is a <code>featuringType</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>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>The <code>Feature</code> that is referenced by the <code>referencingFeature</code> of this <code>ReferenceSubsetting</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>The <code>Feature</code> that owns this <code>ReferenceSubsetting</code> relationship, which is also its <code>subsettingFeature</code>.</p> - + + OCL2.0 + specializesFromLibrary('Performances::performances') + + + + + <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>The Subsettings with a certain Feature as the <code>subsettedFeature</code>.</p> + + OCL2.0 + owningType <> null and + (owningType.oclIsKindOf(Behavior) or + owningType.oclIsKindOf(Step)) implies + specializesFromLibrary('Performances::Performance::enclosedPerformance') + + + + + <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>The FeatureTypings for which a certain Feature is the <code>typedFeature</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> + + + OCL2.0 + owningType <> null and + (owningType.oclIsKindOf(Behavior) or + owningType.oclIsKindOf(Step)) and + self.isComposite implies + specializesFromLibrary('Performances::Performance::subperformance') + + + + + <p>The <code>behaviors</code> of a <code>Step</code> are all its <code>types</code> that are <code>Behaviors</code>.</p> + + + OCL2.0 + behavior = type->selectByKind(Behavior) + + + + + + <p>The <code>Behaviors</code> that type this <code>Step</code>.</p> - - - - - - - - <p>The FeatureTyping relating this Type to a Feature.</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>A Type that has an EndFeatureMembership in which the <code>endFeature</code> is a <code>memberFeature</code>.</p> - - - + + + + - - - - - <p>The Specializations with a certain <code>general<code> Type.</p> - - - + + + + - - - - - <p>A Type that owns or inherits a FeatureMembership Relationship with 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>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><code>Type</code> with interpretations partly determined by <code>unioningType</code>, as described in <code>Type::unioningType</code>.</p> + + + <p>A <code>Behavior</code> must not specialize a <code>Structure</code>.</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') + + + + + <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><code>Type</code> that partly determines interpretations of <code>typeUnioned</code>, as described in <code>Type::unioningType</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><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>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>Type</code> to be conjugated.</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> - - - - - - <p>The <code>Type</code> that is the result of applying <code>Conjugation</code> to the <code>originalType</code>.</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 <code>conjugatedType</code> of this <code>Conjugation</code> that is also its <code>owningRelatedElement</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 Specializations with a certain <code>specific</code> Type.</p> - - - - - - - - - <p>The Intersectings that identify this Type as their <code>intersectingType</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>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>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>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> + + + <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 owningNamespace <> null and owningNamespace.oclIsKindOf(Feature) then - featuringType = - owningNamespace.oclAsType(Feature).featuringType + if isNegated then + specializesFromLibrary('Performances::falseEvaluations') else - featuringType->isEmpty() + specializesFromLibrary('Performances::trueEvaluations') endif - - - <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 - specializesFromLibrary('Base::naturals') - - - - - - - - - - <p>The Types that include this one among their <code>intersectingTypes</code>.</p> - - - - - - - - - - - - - - - - <p>The Type that inherits the <code>inheritedMembership</code>.</p> + + + + <p>Whether this <code>Invariant</code> is asserted to be false rather than true.</p> + - - - + + + - - - - <p>The Conjugation corresponding to the <code>conjugatedType</code>.</p> + + + + <p>The Functions that hasve a certain <code>expression</code> as a step.</p> - - + + - - - - <p>The Disjoinings that identify this Type as their <code>typeDisjoined</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>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>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>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><code>Type</code> asserted to be disjoint with the <code>disjoiningType</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><code>Type</code> asserted to be disjoint with the <code>typeDisjoined</code>.</p> + + OCL2.0 + specializesFromLibrary('Performances::booleanEvaluations') + + + + + + <p>The Predicate that types the Expression.</p> - - - - - - <p>A <code>typeDisjoined</code> that is also an <code>owningRelatedElement</code>.</p> + + <p>The <code>Predicate</code> that types this <code>BooleanExpression</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>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>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>owningType</code> of a <code>ResultExpressionMembership</code> must be a <code>Function</code> or <code>Expression</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> + + 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>Values of the <code>Feature</code> on each instance of its domain are determined internally to that instance and used externally.</p> - + + + + + + + + <p>The Expressions that have a certain Feature its owned or inherited <code>result</code>.</p> - + + + - - - - <p>A Type that owns or inherits the <code>featureMembership</code>.</p> + + + + <p>The Functions that have a certain Feature its owned or inherited <code>result</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>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>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>owningType</code> of a <code>ReturnParameterMembership</code> must be a <code>Function</code> or <code>Expression</code>.</p> - + OCL2.0 - ownedSpecialization = ownedRelationship->selectByKind(Specialization)-> - select(s | s.special = self) - + owningType.oclIsKindOf(Function) or owningType.oclIsKindOf(Expression) - - - <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>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> + + OCL2.0 - multiplicity = - let ownedMultiplicities: Sequence(Multiplicity) = - ownedMember->selectByKind(Multiplicity) in - if ownedMultiplicities->isEmpty() then null - else ownedMultiplicities->first() - endif + featureMembership-> + selectByKind(ReturnParameterMembership)-> + size() = 1 - - - <p>The <code>ownedFeatureMemberships</code> of a <code>Type</code> are its <code>ownedMemberships</code> that are <code>FeatureMemberships</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 - ownedFeatureMembership = ownedRelationship->selectByKind(FeatureMembership) + specializesFromLibrary('Performances::Evaluation') - - - <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>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 - ownedConjugator = - let ownedConjugators: Sequence(Conjugator) = - ownedRelationship->selectByKind(Conjugation) in - if ownedConjugators->isEmpty() then null - else ownedConjugators->at(1) endif + ownedMembership.selectByKind(ResultExpressionMembership)-> + forAll(mem | ownedFeature.selectByKind(BindingConnector)-> + exists(binding | + binding.relatedFeature->includes(result) and + binding.relatedFeature->includes(mem.ownedResultExpression.result))) - - - <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>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 - output = feature->select(f | - let direction: FeatureDirectionKind = directionOf(f) in - direction = FeatureDirectionKind::out or - direction = FeatureDirectionKind::inout) + result = + let resultParams : Sequence(Feature) = + featureMemberships-> + selectByKind(ReturnParameterMembership). + ownedMemberParameter in + if resultParams->notEmpty() then resultParams->first() + else null + endif - - - <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>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 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>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> + + + + + + + <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>Whether an <code>Expression</code> <code>isModelLevelEvaluable</code> is determined by the <code>modelLevelEvaluable()</code> operation.</p> - + OCL2.0 - input = feature->select(f | - let direction: FeatureDirectionKind = directionOf(f) in - direction = FeatureDirectionKind::_'in' or - direction = FeatureDirectionKind::inout) + isModelLevelEvaluable = modelLevelEvaluable(Set(Element){}) - - - <p>The <code>inheritedMemberships<code> of a <code>Type</code> are determined by the <code>inheritedMemberships()</code> operation.</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 - inheritedMembership = inheritedMemberships(Set{}, Set{}, false) + specializesFromLibrary('Performances::evaluations') - - - <p>A <code>Type</code> must directly or indirectly specialize <code><em>Base::Anything</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('Base::Anything') + owningMembership <> null and +owningMembership.oclIsKindOf(FeatureValue) implies + let featureWithValue : Feature = + owningMembership.oclAsType(FeatureValue).featureWithValue in + featuringType = featureWithValue.featuringType - - - <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>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 - directedFeature = feature->select(f | directionOf(f) <> null) + ownedMembership.selectByKind(ResultExpressionMembership)-> + forAll(mem | ownedFeature.selectByKind(BindingConnector)-> + exists(binding | + binding.relatedFeature->includes(result) and + binding.relatedFeature->includes(mem.ownedResultExpression.result))) - - - <p>The <code>features</code> of a <code>Type</code> are the <code>ownedMemberFeatures</code> of its <code>featureMemberships</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 - feature = featureMembership.ownedMemberFeature + result = + let resultParams : Sequence(Feature) = + featureMemberships-> + selectByKind(ReturnParameterMembership). + ownedMemberParameter in + if resultParams->notEmpty() then resultParams->first() + else null + endif + - - - <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> + + + <p>An <code>Expression</code> must have exactly one <code>featureMembership</code> (owned or inherited) that is a <code>ResultParameterMembership</code>.</p> - + OCL2.0 - featureMembership = ownedFeatureMembership->union( - inheritedMembership->selectByKind(FeatureMembership)) + featureMembership-> + selectByKind(ReturnParameterMembership)-> + size() = 1 - - - <p>The <code>ownedFeatures</code> of a <code>Type</code> are the <code>ownedMemberFeatures</code> of its <code>ownedFeatureMemberships</code>. + + + <p>An <code>Expression</code> must have at most one <code>ResultExpressionMembership</code>.</p> - - English - ownedFeature = ownedFeatureMembership.ownedMemberFeature + + OCL2.0 + membership->selectByKind(ResultExpressionMembership)->size() <= 1 - - - <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>The <code>Function</code> that types this <code>Expression</code>.</p> + - - English - differencingType = ownedDifferencing.differencingType + + <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>The ResultExpressionMembership that owns the <code>ownedResultExpression</code>.</p> + + + + + + + + + <p>The Expressions that are typed by a certain <code>function</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>Type</code> cannot be one of its own <code>intersectingTypes</code>.</p> + + + + + + + + + + + + <p>A <code>Connector</code> with a certain <code>defaultFeaturingType</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>The <code>relatedFeatures</code> of a <code>Connector</code> are the referenced <code>Features</code> of its <code>connectorEnds</code>.</p> - - English - intersectingType->excludes(self) + + OCL2.0 + relatedFeature = connectorEnd.ownedReferenceSubsetting-> + select(s | s <> null).subsettedFeature - - - <p>A <code>Type</code> cannot be one of its own <code>differencingTypes</code>.</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> - - English - differencingType->excludes(self) + + OCL2.0 + relatedFeature->forAll(f | + if featuringType->isEmpty() then f.isFeaturedWithin(null) + else featuringType->forAll(t | f.isFeaturedWithin(t)) + endif) - - - <p>The <code>unioningTypes</code> of a <code>Type</code> are the <code>unioningTypes</code> of its <code>ownedUnionings</code>.<p> + + + <p>The <code>sourceFeature</code> of a <code>Connector</code> is its first <code>relatedFeature</code> (if any).</p> - + OCL2.0 - unioningType = ownedUnioning.unioningType + sourceFeature = + if relatedFeature->isEmpty() then null + else relatedFeature->first() + endif - - - <p>A <code>Type</code> cannot be one of its own <code>unioningTypes</code>.</p> + + + <p>The <code>targetFeatures</code> of a <code>Connector</code> are the <code>relatedFeatures</code> other than the <code>sourceFeature</code>.</p> - - English - unioningType->excludes(self) + + OCL2.0 + targetFeature = + if relatedFeature->size() < 2 then OrderedSet{} + else + relatedFeature-> + subSequence(2, relatedFeature->size())-> + asOrderedSet() + endif - - - <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>Connector</code> is concrete (not abstract), then it must have at least two <code>relatedFeatures</code>.</p> - + OCL2.0 - intersectingType = ownedIntersecting.intersectingType + not isAbstract implies relatedFeature->size() >= 2 - - - A <code>Type</code> must have at most one owned <code>Conjugation</code> <code>Relationship</code>. + + + <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 - ownedRelationship->selectByKind(Conjugation)->size() <= 1 + specializesFromLibrary('Links::links') - - - <p>A <code>Type</code> may have at most one <code>ownedMember</code> that is a <code>Multiplicity</code>.</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 - ownedMember->selectByKind(Multiplicity)->size() <= 1 + association->exists(oclIsKindOf(AssociationStructure)) implies + specializesFromLibrary('Objects::linkObjects') - - - <p>The <code>endFeatures</code> of a <code>Type</code> are all its <code>features</code> for which <code>isEnd = true</code>.</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 - endFeature = feature->select(isEnd) + connectorEnds->size() = 2 and +association->exists(oclIsKindOf(AssociationStructure)) implies + specializesFromLibrary('Objects::binaryLinkObjects') - - - <p>The <code>ownedDisjoinings</code> of a <code>Type</code> are the <code>ownedRelationships</code> that are <code>Disjoinings</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 - ownedDisjoining = - ownedRelationship->selectByKind(Disjoining) + connectorEnd->size() = 2 implies + specializesFromLibrary('Links::binaryLinks') - - - <p>The <code>ownedUnionings</code> of a <code>Type</code> are the <code>ownedRelationships</code> that are <code>Unionings</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 - ownedUnioning = - ownedRelationship->selectByKind(Unioning) + connectorEnds->size() > 2 implies + not specializesFromLibrary('Links::BinaryLink') - - - <p>The <code>ownedIntersectings</code> of a <code>Type</code> are the <code>ownedRelationships</code> that are <code>Intersectings</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 - ownedRelationship->selectByKind(Intersecting) + 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>ownedDifferencings</code> of a <code>Type</code> are its <code>ownedRelationships</code> that are <code>Differencings</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 - ownedDifferencing = - ownedRelationship->selectByKind(Differencing) + relatedFeature->size() = 2 - - - <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>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 - ownedEndFeature = ownedFeature->select(isEnd) + specializesFromLibrary('Links::selfLinks') - - - <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>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>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> - + OCL2.0 - inheritedFeature = inheritedMemberships-> - selectByKind(FeatureMembership).memberFeature + 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) - - - A <code>Type</code> must not have exactly one <code>ownedUnioning</code>. + + + <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> - + OCL2.0 - ownedUnioning->size() <> 1 + featureWithValue.redefinition.redefinedFeature-> + closure(redefinition.redefinedFeature).valuation-> + forAll(isDefault) - - - A <code>Type</code> must not have exactly one <code>ownedIntersecting</code>. + + + <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 - ownedIntersecting->size() <> 1 + isInitial implies featureWithValue.isVariable - - - A <code>Type</code> must not have exactly one <code>ownedDifferencing</code>. + + + + <p>The Feature to be provided a value.</p> - - OCL2.0 - ownedDifferencing->size() <> 1 - - - - - - <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>Feature</code> to be provided a value.</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 Expression that provides the value as a result.</p> - - - - - - <p>The <code>ownedMemberFeatures</code> of the <code>featureMemberships</code> of this <code>Type</code>.</p> + + <p>The <code>Expression</code> that provides the value of the <code>featureWithValue</code> as its <code>result</code>.</p> - - + + - - - <p>The <code>ownedMemberFeatures</code> of the <code>ownedFeatureMemberships</code> of this <code>Type</code>.</p> - + + + <p>Whether this <code>FeatureValue</code> specifies a bound value or an initial value for the <code>featureWithValue</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>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>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>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> - - - - - - <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 + specializesFromLibrary('Objects::Object') + + + + + <p>A <code>Structure</code> must not specialize a <code>Behavior</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 + ownedSpecialization.general->forAll(not oclIsKindOf(Behavior)) + + + + + + + <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>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>All <code>features</code> of this <code>Type</code> with <code>isEnd = true</code>.</p> + + OCL2.0 + specializesFromLibrary('Occurrences::Occurrence') + + + + + <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>All <code>endFeatures</code> of this <code>Type</code> that are <code>ownedFeatures</code>.</p> + + OCL2.0 + ownedSpecialization.general-> + forAll(not oclIsKindOf(DataType)) and +not oclIsKindOf(Association) implies + ownedSpecialization.general-> + forAll(not oclIsKindOf(Association)) + + + + + + + <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> - - - - - - <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 + specializesFromLibrary('Transfers::transfers') + + + + + <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>Conjugation</code> owned by this <code>Type</code> for which the <code>Type</code> is the <code>originalType</code>.</p> - + + OCL2.0 + payloadType = + if payloadFeature = null then Sequence{} + else payloadFeature.type + endif + + + + + <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 + sourceOutputFeature = + if connectorEnd->isEmpty() or + connectorEnd.ownedFeature->isEmpty() + then null + else connectorEnd.ownedFeature->first() + endif + + + + + <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>Indicates whether this <code>Type</code> has an <code>ownedConjugator</code>.</p> - + + OCL2.0 + targetInputFeature = + if connectorEnd->size() < 2 or + connectorEnd->at(2).ownedFeature->isEmpty() + then null + else connectorEnd->at(2).ownedFeature->first() + endif + + + + + <p>The <code>flowEnds</code> of a <code>Flow</code> are all its <code>connectorEnds</code> that are <code>FlowEnds</code>.</p> - - - - - <p>All the <code>memberFeatures</code> of the <code>inheritedMemberships</code> of this <code>Type</code> that are <code>FeatureMemberships</code>.</p> - + + OCL2.0 + flowEnd = connectorEnd->selectByKind(FlowEnd) + + + + + <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>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> + + OCL2.0 + payloadFeature = + let payloadFeatures : Sequence(PayloadFeature) = + ownedFeature->selectByKind(PayloadFeature) in + if payloadFeatures->isEmpty() then null + else payloadFeatures->first() + endif + + + + + <p>A <code>Flow</code> must have at most one <code>ownedFeature</code> that is an <code>PayloadFeature</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> - + + OCL2.0 + ownedFeature->selectByKind(PayloadFeature)->size() <= 1 + + + + + <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>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> + + 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 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>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>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>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 <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>connectorEnds</code> of this <code>Flow</code> that are <code>FlowEnds</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 <code>ownedFeature</code> of the <code>Flow</code> that is a <code>PayloadFeature</code> (if any).</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>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 <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>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>The <code>features</code> of this <code>Type</code> that have a non-null <code>direction</code>.</p> - + + OCL2.0 + specializesFromLibrary('Transfers::flowTransfersBefore') + + + + + + + + + + + + + + + <p>The ItemFlow that has a certain <code>targetInputFeature</code>.</p> - - - - - - <p>The visible <code>Memberships</code> of a <code>Type</code> include <code>inheritedMemberships</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 - 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> - + + 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> + + + + <p>A <code>FlowEnd</code> must be an end <code>Feature</code>.</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 + isEnd + + + + + <p>A <code>FlowEnd</code> must have exactly one <code>ownedFeature</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 + ownedFeature->size() = 1 + + + + + <p>The <code>owningType</code> of a <code>FlowEnd</code> must be a <code>Flow</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 + owningType <> null and owningType.oclIsKindOf(Flow) + + + + + + + + <p>The ItemFlow that has a certain <code>sourceOutputFeature</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> + + + + + + + <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 Package that has a certain Expression as a <code>filterCondition</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> + + + + + + + <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 + 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> - - - 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> + + + + + + <p>Exclude <code>Elements</code> that do not meet all the <code>filterConditions</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 + self.oclAsType(Namespace).importedMemberships(excluded)-> + select(m | self.includeAsMember(m.memberElement)) - - - - + + + - - - + + + - - - <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>Determine whether the given <code>element</code> meets all the <code>filterConditions</code>.</p> - - + + OCL2.0 - if isConjugated then Sequence{conjugator.originalType} -else if not excludeImplied then ownedSpecialization.general -else ownedSpecialization->reject(isImplied).general -endif -endif + let metadataFeatures: Sequence(AnnotatingElement) = + element.ownedAnnotation.annotatingElement-> + selectByKind(MetadataFeature) in + self.filterCondition->forAll(cond | + metadataFeatures->exists(elem | + cond.checkCondition(elem))) - + + - - - - - - - <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>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 - OrderedSet{self}->closure(supertypes(false)) + self - - - + + + - - - <p>Check whether this <code>Type</code> is a direct or indirect specialization of the given <code>supertype<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>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> + + + OCL2.0 + 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>The ElementFilterMembership that owns the <code>condition</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>A <code>MetadataFeature</code> must have exactly one <code>type</code> that is a <code>Metaclass</code>.</p> + + + OCL2.0 + type->selectByKind(Metaclass).size() = 1 + + + + + <p>The <code>metaclass</code> of a <code>MetadataFeature</code> must not be abstract.</p> + + + OCL2.0 + not metaclass.isAbstract + + + + + <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 + specializesFromLibrary('Metaobjects::metaobjects') + + + + + <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 + 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>The <code>metaclass</code> of a <code>MetadataFeature</code> is one of its <code>types</code> that is a <code>Metaclass</code>. + + + OCL2.0 + metaclass = + let metaclassTypes : Sequence(Type) = type->selectByKind(Metaclass) in + if metaclassTypes->isEmpty() then null + else metaClassTypes->first() + 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> + + + 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))) + + + + + <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 + 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>type</code> of this <code>MetadataFeature</code>, which must be a <code>Metaclass</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> + + + OCL2.0 - if isConjugated then - ownedConjugator.originalType.specializes(supertype) + let selectedFeatures : Sequence(Feature) = feature-> + select(closure(ownedRedefinition.redefinedFeature)-> + includes(baseFeature)) in +if selectedFeatures->isEmpty() then null else - allSupertypes()->includes(supertype) -endif + 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 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>Check if this <code>MetadataFeature</code> has a <code>metaclass</code> which is a kind of <code><em>SemanticMetadata</code>.<p> - - + + OCL2.0 - let mem : Membership = resolveGlobal(libraryTypeName) in -mem <> null and mem.memberElement.oclIsKindOf(Type) and -specializes(mem.memberElement.oclAsType(Type)) + specializesFromLibrary('Metaobjects::SemanticMetadata') - - - - + - - - <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>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> - - + + OCL2.0 - specializes(otherType) + specializesFromLibrary('KerML::Element') - - + - - - <p>Return the owned or inherited <code>Multiplicities</code> for this <code>Type<./code>.</p> + + + <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 - 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 + isSyntactic() - - - + + + - - - - <p>The Differencings that identify this Type as their <code>differencingType</code>.</p> - - - - - - - - - <p>The Types that include this one among their <code>differencingTypes</code>.</p> + + + <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> - - - + + OCL2.0 + specializesFromLibrary('Metaobjects::Metaobject') + + + - - - - <p>The Conjugations with a certain Type as the <code>originalType</code>.</p> + + + + <p>The MetadataFeatures whose <code>type</code> is a certain Metaclass.</p> - - + + - - - - <p>A Type that has an <code>inheritedMembership</code> with the <code>inheritedFeature</code> as its <code>memberFeature</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>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><code>Type</code> with interpretations partly determined by <code>intersectingType</code>, as described in <code>Type::intersectingType</code>.</p> - + + + <p>The <code>relatedTypes</code> of an <code>Association</code> are the <code>types</code> of its <code>associationEnds</code>.</p> - - - - - - <p><code>Type</code> that partly determines interpretations of <code>typeIntersected</code>, as described in <code>Type::intersectingType</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>The Types that include this one among their <code>unioningTypes</code>.</p> + + OCL2.0 + specializesFromLibrary('Links::Link') + + + + + <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 Type with a certain <code>input</code>.</p> + + English + oclIsKindOf(Structure) = oclIsKindOf(AssociationStructure) + + + + + <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><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 + associationEnd->size() = 2 implies + specializesFromLibrary('Links::BinaryLink') + + + + + <p>If an <code>Association</code> is concrete (not abstract), then it must have at least two <code>relatedTypes</code>.</p> + + + OCL2.0 + not isAbstract implies relatedType->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> + + + OCL2.0 + associationEnds->size() > 2 implies + not specializesFromLibrary('Links::BinaryLink') + + + + + <p>The <code>sourceType</code> of an <code>Association</code> is its first <code>relatedType</code> (if any).</p> + + + OCL2.0 + sourceType = + if relatedType->isEmpty() then null + else relatedType->first() endif + + + + + OCL2.0 + targetType = + if relatedType->size() < 2 then OrderedSet{} + else + relatedType-> + subSequence(2, relatedType->size())-> + asOrderedSet() + endif + + + + + <p>The <code>ownedEndFeatures</code> of an <code>Association</code> must have exactly one <code>type</code></p>. + + + OCL2.0 + 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> + - - 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 source <code>relatedType</code> for this <code>Association</code>. It is the first <code>relatedType</code> of the <code>Association</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 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>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>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><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>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>Type</code> with interpretations partly determined by <code>differencingType</code>, as described in <code>Type::differencingType</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><code>Type</code> that partly determines interpretations of <code>typeDifferenced</code>, as described in <code>Type::differencingType</code>.</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>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><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>Type</code> that owns this <code>FeatureMembership</code>.</p> + + + + <p>The more <code>general</code> Classifier in this <code>Subclassification</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>The more specific <code>Classifier</code> in this <code>Subclassification</code>.</p> - - + + - - - - - <p>A Type with a certain <code>output</code>.</p> - - - - - - - - - <p>The Disjoinings that identify this Type as their <code>disjoiningType</code>.</p> - - - - - - - - - <p>The Unionings that identify all these Types as their <code>unioningType</code>.</p> + + + <p>The <code>Classifier</code> that owns this <code>Subclassification</code> relationship, which must also be its <code>subclassifier</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> + + + <p>A <code>Classifier</code> is a <code>Type</code> that classifies:</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> + <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>DataType</code> must not specialize a <code>Class</code> or an <code>Association</code>.</p> + + + <p>The <code>ownedSubclassifications</code> of a <code>Classifier</code> are its <code>ownedSpecializations</code> that are <code>Subclassifications</code>.</p> - + OCL2.0 - ownedSpecialization.general-> - forAll(not oclIsKindOf(Class) and - not oclIsKindOf(Association)) + ownedSubclassification = + ownedSpecialization->selectByKind(Subclassification) - - - <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>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::DataValue') + 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>The Subclassifications with a certain <code>subclassifier</code>.</p> + + + + + + + + + <p>The Subclassifications with a certain <code>superclassifier</code>.</p> + + + + + + + + + + <p>The Type that inherits the <code>inheritedMembership</code>.</p> + + + + + + + + + <p>The Types that include this one among their <code>differencingTypes</code>.</p> + + + + + + + + + <p>A Type that owns or inherits a FeatureMembership Relationship with the <code>feature</code>.</p> + + + - - - - + + + + <p>The Disjoinings that identify this Type as their <code>typeDisjoined</code>.</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>The Conjugations with a certain Type as the <code>originalType</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>A <code>Behavior</code> must not specialize a <code>Structure</code>.</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') - - - - - <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><code>Type</code> with interpretations partly determined by <code>intersectingType</code>, as described in <code>Type::intersectingType</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><code>Type</code> that partly determines interpretations of <code>typeIntersected</code>, as described in <code>Type::intersectingType</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>Return the required value of the <code>direction</code> of the <code>ownedMemberParameter</code>. By default, this is <code>in</code>.</p> + + + + <p>The Conjugation corresponding to the <code>conjugatedType</code>.</p> - - - OCL2.0 - FeatureDirectionKind::_'in' - - - - - - - + + + - - - <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><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>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 - specializesFromLibrary('Performances::performances') - - - - - <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 - owningType <> null and - (owningType.oclIsKindOf(Behavior) or - owningType.oclIsKindOf(Step)) implies - specializesFromLibrary('Performances::Performance::enclosedPerformance') - - - - - <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 - 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> + + + <p>The <code>specific</code> <code>Type</code> of a <code>Specialization</code> cannot be a conjugated <code>Type</code>.</p> - + OCL2.0 - owningType <> null and - (owningType.oclIsKindOf(Behavior) or - owningType.oclIsKindOf(Step)) and - self.isComposite implies - specializesFromLibrary('Performances::Performance::subperformance') + not specific.isConjugated - - - <p>The <code>behaviors</code> of a <code>Step</code> are all its <code>types</code> that are <code>Behaviors</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 - behavior = type->selectByKind(Behavior) - - - - - - <p>The <code>Behaviors</code> that type this <code>Step</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>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>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>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>The MetadataFeatures whose <code>type</code> is a certain Metaclass.</p> + + + + + <p>The Specializations with a certain <code>general<code> Type.</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>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>MetadataFeature</code> must have exactly one <code>type</code> that is a <code>Metaclass</code>.</p> - - - OCL2.0 - type->selectByKind(Metaclass).size() = 1 - - - - - <p>The <code>metaclass</code> of a <code>MetadataFeature</code> must not be abstract.</p> - - - OCL2.0 - not metaclass.isAbstract - - - - - <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 - specializesFromLibrary('Metaobjects::metaobjects') - - - - - <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>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> - + 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) + ownedSpecialization = ownedRelationship->selectByKind(Specialization)-> + select(s | s.special = self) + - - - <p>The <code>metaclass</code> of a <code>MetadataFeature</code> is one of its <code>types</code> that is a <code>Metaclass</code>. + + + <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> - + OCL2.0 - metaclass = - let metaclassTypes : Sequence(Type) = type->selectByKind(Metaclass) in - if metaclassTypes->isEmpty() then null - else metaClassTypes->first() + multiplicity = + let ownedMultiplicities: Sequence(Multiplicity) = + ownedMember->selectByKind(Multiplicity) in + if ownedMultiplicities->isEmpty() then null + else ownedMultiplicities->first() 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>The <code>ownedFeatureMemberships</code> of a <code>Type</code> are its <code>ownedMemberships</code> that are <code>FeatureMemberships</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))) + ownedFeatureMembership = ownedRelationship->selectByKind(FeatureMembership) - - - <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>The <code>ownedConjugator</code> of a <code>Type</code> is the its single <code>ownedRelationship</code> that is a <code>Conjugation</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 + ownedConjugator = + let ownedConjugators: Sequence(Conjugator) = + ownedRelationship->selectByKind(Conjugation) in + if ownedConjugators->isEmpty() then null + else ownedConjugators->at(1) endif - - - - - <p>The <code>type</code> of this <code>MetadataFeature</code>, which must be a <code>Metaclass</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> - - - - 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> - - - - 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> - - - - 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> + + + <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> - - - English - No OCL - - - - - OCL2.0 - isSyntactic() - - - - - - - - - - - <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> + + 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> - + OCL2.0 - specializesFromLibrary('Metaobjects::Metaobject') + input = feature->select(f | + let direction: FeatureDirectionKind = directionOf(f) in + direction = FeatureDirectionKind::_'in' or + direction = FeatureDirectionKind::inout) - - - - - <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> + + + <p>The <code>inheritedMemberships<code> of a <code>Type</code> are determined by the <code>inheritedMemberships()</code> operation.</p> - + OCL2.0 - relatedType = associationEnd.type + inheritedMembership = inheritedMemberships(Set{}, Set{}, false) - - - <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>Type</code> must directly or indirectly specialize <code><em>Base::Anything</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - specializesFromLibrary('Links::Link') + specializesFromLibrary('Base::Anything') - - - <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>directedFeatures</code> of a <code>Type</code> are those <code>features</code> for which the <code>direction</code> is non-null.</p> - - English - oclIsKindOf(Structure) = oclIsKindOf(AssociationStructure) + + OCL2.0 + directedFeature = feature->select(f | directionOf(f) <> null) - - - <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>features</code> of a <code>Type</code> are the <code>ownedMemberFeatures</code> of its <code>featureMemberships</code>. - + OCL2.0 - associationEnd->size() = 2 implies - specializesFromLibrary('Links::BinaryLink') + feature = featureMembership.ownedMemberFeature - - - <p>If an <code>Association</code> is concrete (not abstract), then it must have at least two <code>relatedTypes</code>.</p> + + + <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> owned by a direct or indirect supertype of this <code>Type</code>.</p> - + OCL2.0 - not isAbstract implies relatedType->size() >= 2 + featureMembership = ownedFeatureMembership-> + union(inheritedMembership-> + selectByKind(FeatureMembership)-> + select(mem | self.specializes(mem.owningType))) - - - <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>The <code>ownedFeatures</code> of a <code>Type</code> are the <code>ownedMemberFeatures</code> of its <code>ownedFeatureMemberships</code>. - + + 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> + + + English + differencingType = ownedDifferencing.differencingType + + + + + <p>A <code>Type</code> cannot be one of its own <code>intersectingTypes</code>.</p> + + + English + intersectingType->excludes(self) + + + + + <p>A <code>Type</code> cannot be one of its own <code>differencingTypes</code>.</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 - associationEnds->size() > 2 implies - not specializesFromLibrary('Links::BinaryLink') + unioningType = ownedUnioning.unioningType - - - <p>The <code>sourceType</code> of an <code>Association</code> is its first <code>relatedType</code> (if any).</p> + + + <p>A <code>Type</code> cannot be one of its own <code>unioningTypes</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 - sourceType = - if relatedType->isEmpty() then null - else relatedType->first() endif + intersectingType = ownedIntersecting.intersectingType - - + + + A <code>Type</code> must have at most one owned <code>Conjugation</code> <code>Relationship</code>. + + OCL2.0 - targetType = - if relatedType->size() < 2 then OrderedSet{} - else - relatedType-> - subSequence(2, relatedType->size())-> - asOrderedSet() - endif + ownedRelationship->selectByKind(Conjugation)->size() <= 1 - - - <p>The <code>ownedEndFeatures</code> of an <code>Association</code> must have exactly one <code>type</code></p>. + + + <p>A <code>Type</code> may have at most one <code>ownedMember</code> that is a <code>Multiplicity</code>.</p> - + OCL2.0 - ownedEndFeature->forAll(type->size() = 1) + ownedMember->selectByKind(Multiplicity)->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 <code>endFeatures</code> of a <code>Type</code> are all its <code>features</code> for which <code>isEnd = true</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> - + + 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> - - - - - - <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 + 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> - - - - - - <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> - + + 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>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 + ownedRelationship->selectByKind(Intersecting) + + + + + <p>The <code>ownedDifferencings</code> of a <code>Type</code> are its <code>ownedRelationships</code> that are <code>Differencings</code>.</p> - + OCL2.0 - specializesFromLibrary('Objects::LinkObject') + ownedDifferencing = + ownedRelationship->selectByKind(Differencing) - - - <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>ownedEndFeatures</code> of a <code>Type</code> are all its <code>ownedFeatures</code> for which <code>isEnd = true</code>.</p> - + OCL2.0 - endFeature->size() = 2 implies - specializesFromLibrary('Objects::BinaryLinkObject') + ownedEndFeature = ownedFeature->select(isEnd) - - - - - - - - - - - - <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> + + + <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> - + OCL2.0 - specializesFromLibrary('Performances::literalIntegerEvaluations') + inheritedFeature = inheritedMemberships-> + selectByKind(FeatureMembership).memberFeature - - - - - <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> + + + A <code>Type</code> must not have exactly one <code>ownedUnioning</code>. - + OCL2.0 - specializesFromLibrary('Performances::metadataAccessEvaluations') + ownedUnioning->size() <> 1 - - - <p>A <code>MetadataAccessExpression</code> must have at least one <code>ownedMember</code> that is not a <code>FeatureMembership</code>.</p> + + + A <code>Type</code> must not have exactly one <code>ownedIntersecting</code>. - + OCL2.0 - ownedMembership->exists(not oclIsKindOf(FeatureMembership)) + ownedIntersecting->size() <> 1 - - - <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> + + + A <code>Type</code> must not have exactly one <code>ownedDifferencing</code>. - + OCL2.0 - referencedElement = - let elements : Sequence(Element) = ownedMembership-> - reject(oclIsKindOf(FeatureMembership)).memberElement in - if elements->isEmpty() then null - else elements->first() - endif + ownedDifferencing->size() <> 1 - - - - <p>The <code>Element</code> whose metadata is being accessed.</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>A <code>MetadataAccessExpression</code> is always model-level evaluable.</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> + - - - 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 <code>ownedMemberFeatures</code> of the <code>featureMemberships</code> of this <code>Type</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 <code>ownedMemberFeatures</code> of the <code>ownedFeatureMemberships</code> of this <code>Type</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>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>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> + + + + + + <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 - specializesFromLibrary('Performances::literalEvaluations') - - - - - - <p>A <code>LiteralExpression</code> is always model-level evaluable.</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>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>All <code>features</code> of this <code>Type</code> with <code>isEnd = true</code>.</p> + + + + + + + <p>All <code>endFeatures</code> of this <code>Type</code> that are <code>ownedFeatures</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> + + + + + + + + <p>A <code>Conjugation</code> owned by this <code>Type</code> for which the <code>Type</code> is the <code>originalType</code>.</p> + + + + + + + + <p>Indicates whether this <code>Type</code> has an <code>ownedConjugator</code>.</p> + - - - OCL2.0 - true - - - - - - - - - - - - - <p>The model-level value of a <code>LiteralExpression</code> is itself.</p> + + + + + <p>All the <code>memberFeatures</code> of the <code>inheritedMemberships</code> of this <code>Type</code> that are <code>FeatureMemberships</code>.</p> + - - - OCL2.0 - Sequence{self} - - - - - - - - - - - - - <p>A <code>InstantiationExpression</code> that has a certain <code>argument</code> <code>Expression</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>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>operator</code> of a <code>SelectExpression</code> must be <code>'select'</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> + - - 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>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> + - - OCL2.0 - arguments->notEmpty() implies - result.specializes(arguments->first().result) - - - - - - + + - - - - <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>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> + - - 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> + + + + + + <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> + - - 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> + + + + + + <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> + - - 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> - + + + + + + <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> - - 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> + + + + + + <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> + - - 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> + + + + + + <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> + - - 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 - - - - - - + + - - - <p>The <code>Feature</code> that is accessed by this <code>FeatureChainExpression<code>, which is its first non-<code>parameter</code> <code>member</code>.<p> + + + <p>The <code>features</code> of this <code>Type</code> that have a non-null <code>direction</code>.</p> + - - + + - - - <p>Return the first <code>ownedFeature</code> of the first owned input <code>parameter</code> of this <code>FeatureChainExpression</code> (if any).</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> + - - + + OCL2.0 - let inputParameters : Feature = ownedFeatures-> - select(direction = _'in') in -if inputParameters->isEmpty() or - inputParameters->first().ownedFeature->isEmpty() -then null -else inputParameters->first().ownedFeature->first() -endif + removeRedefinedFeatures( + inheritableMemberships(excludedNamespaces, excludedTypes, excludeImplied)) - - - + + + + + + + + + + + + + + - - - - - <p>A <code>FeatureReferenceExpression</code> that has a certain <code>referent</code> <code>Feature</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>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>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 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 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 + 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>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>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> -<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> +<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 - instantiatedType = instantiatedType() - - - - - <p>An <code>InstantiationExpression</code> must have an <code>InstantiatedType</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 - 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 + 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> + - - - - - - <p>The <code>Type</code> that is being instantiated.</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> - - - - - - <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 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 - 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 isConjugated then Sequence{conjugator.originalType} +else if not excludeImplied then ownedSpecialization.general +else ownedSpecialization->reject(isImplied).general +endif endif - - - + + + + + + - - - - <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>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> - - - 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>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 - 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> + + + <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> - - + + OCL2.0 - argument->forAll(modelLevelEvaluable(visited)) + 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> + + + + OCL2.0 + if isConjugated then + ownedConjugator.originalType.specializes(supertype) +else + allSupertypes()->includes(supertype) +endif + + + + + - - - - <p>A <code>NullExpression</code> is an <code>Expression</code> that results in a null value.</p> + + + <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>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 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 - true + 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 model-level value of a <code>NullExpression</code> is an empty sequence.</p> + + + + + <p>A Type that has an <code>inheritedMembership</code> with the <code>inheritedFeature</code> as its <code>memberFeature</code>.</p> + + + + + + + + + + + + + + + + <p>A Type that has an EndFeatureMembership in which the <code>endFeature</code> is a <code>memberFeature</code>.</p> - - - OCL2.0 - Sequence{} - - - - - - - - + + + - - - <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><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>A <code>LiteralInteger</code> must directly or indirectly specialize <em><code>Performances::literalIntegerEvaluations</code></em> from the Kernel Semantic Library.</p> + + + <p>Values of the <code>Feature</code> on each instance of its domain are determined externally to that instance and used internally.</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>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 Integer value that is the result of evaluating this Expression.</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>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>A Type with a certain <code>output</code>.</p> - - OCL2.0 - operator = 'collect' - - - - - - - + + + - - - <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>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>A <code>LiteralBoolean</code> must directly or indirectly specialize <em><code>Performances::literalBooleanEvaluations</code></em> from the Kernel Semantic Library.</p> - - - OCL2.0 - specializesFromLibrary('Performances::literalBooleanEvaluations') - - - - - - <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>The <code>Type</code> that owns this <code>FeatureMembership</code>.</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> - - - OCL2.0 - specializesFromLibrary('Performances::literalStringEvaluations') - - - - - - <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>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>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 - arguments->notEmpty() and -not arguments->first().result.specializesFromLibrary('Collections::Array') implies - result.specializes(arguments->first().result) - - - - - <p>The <code>operator</code> of an <code>IndexExpression</code> must be <code>"#"</code>.</p> + + + + <p>The Disjoinings that identify this Type as their <code>disjoiningType</code>.</p> - - OCL2.0 - operator = '#' - - - - - - - + + + - - - <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 Type that owns or inherits the <code>featureMembership</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> + + + + + + + + <p>The Differencings that identify this Type as their <code>differencingType</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> + + + + + + + + <p>The Intersectings that identify this Type as their <code>intersectingType</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> + + + + + + + <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 - result.owningType() = self and result.specializes(referent) + if owningNamespace <> null and owningNamespace.oclIsKindOf(Feature) then + featuringType = + owningNamespace.oclAsType(Feature).featuringType +else + featuringType->isEmpty() +endif - - - <p>A <code>FeatureReferenceExpression</code> must own its <code>result</code> parameter.</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 - result.owningType = self + specializesFromLibrary('Base::naturals') - - - - <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 Types that include this one among their <code>unioningTypes</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> + + + + + + + + <p>A Type with a certain <code>input</code>.</p> + + + + + + + + + + <p>The Unionings that identify all these Types as their <code>unioningType</code>.</p> + + + + + + + + + <p>The Types that include this one among their <code>intersectingTypes</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>differencingType</code>, as described in <code>Type::differencingType</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> - -<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><code>Type</code> that partly determines interpretations of <code>typeDifferenced</code>, as described in <code>Type::differencingType</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>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><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 <code>LiteralRational</code> must directly or indirectly specialize <em><code>Performances::literalRationalEvaluations</code></em> from the Kernel Semantic Library.</p> - - - OCL2.0 - specializesFromLibrary('Performances::literalRationalEvaluations') - - - - - - <p>The value whose rational approximation is the result of evaluating this <code>LiteralRational</code>.</p> + + + + <p><code>Type</code> with interpretations partly determined by <code>unioningType</code>, as described in <code>Type::unioningType</code>.</p> - - <p>The Real value that is the result of evaluating this Expression.</p> + + + + + + <p><code>Type</code> that partly determines interpretations of <code>typeUnioned</code>, as described in <code>Type::unioningType</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><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>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>Type</code> to be conjugated.</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)) - - - - - <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>The <code>Type</code> that is the result of applying <code>Conjugation</code> to the <code>originalType</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>The <code>conjugatedType</code> of this <code>Conjugation</code> that is also its <code>owningRelatedElement</code>.</p> + - - OCL2.0 - instantiatedType.input->collect(inp | - ownedFeatures->select(redefines(inp)).valuation-> - select(v | v <> null).value -) - - - - - <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 Specializations with a certain <code>specific</code> Type.</p> - - OCL2.0 - let parameters : OrderedSet(Feature) = instantiatedType.input in -input->forAll(inp | - inp.ownedRedefinition.redefinedFeature-> - intersection(parameters)->size() = 1) - - - - - <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 FeatureInvertings that identify this Feature as their <code>invertingFeature</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())) - - - - - <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><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 instantiatedType.oclIsKindOf(Function) and -not (instantiatedType.oclIsKindOf(Feature) and - instantiatedType.oclAsType(Feature).type->exists(oclIsKindOf(Function))) implies - result.specializes(instantiatedType) + subsettingFeature.canAccess(subsettedFeature) - - - <p>An <code>InvocationExpression</code> must specialize its <code>instantiatedType</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 - specializes(instantiatedType) + subsettedFeature.isUnique implies subsettingFeature.isUnique - - - <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>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 - instantiatedType.oclIsKindOf(Behavior) or -instantiatedType.oclIsKindOf(Feature) and - instantiatedType.type->exists(oclIsKindOf(Behavior)) and - instantiatedType.type->size(1) + subsettedFeature.isConstant and subsettingFeature.isVariable implies + subsettingFeature.isConstant + - - - <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>Feature</code> that is subsetted by the <code>subsettingFeature</code> of this <code>Subsetting</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>The <code>Feature</code> that is a subset of the <code>subsettedFeature</code> of this <code>Subsetting</code>.</p> - - - OCL2.0 - argument->forAll(modelLevelEvaluable(visited)) and - function.isModelLevelEvaluable - - - - - - - - - - - - - <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>A <code>subsettingFeature</code> that is also the <code>owningRelatedElement</code> of this <code>Subsetting</code>.</p> + - - - - - - + + + - - - - <p>The <code>MetadataAccessExpressions</code> having a certain <code>Element</code> as their <code>referencedElement</code>.</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>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 - specializesFromLibrary('Objects::Object') - - - - - <p>A <code>Structure</code> must not specialize a <code>Behavior</code>.</p> + + + + <p>The <code>CrossSubsetting</code> with a certain <code>Feature</code> as the <code>crossedFeature</code>.</p> - - OCL2.0 - ownedSpecialization.general->forAll(not oclIsKindOf(Behavior)) - - - - - - - - + + - - - - + + + + <p>The FeatureTypings for which a certain Feature is the <code>typedFeature</code>.</p> + + + + - - - - <p>A <code>Connector</code> with a certain <code>defaultFeaturingType</code>.</p> + + + + + <p>The <code>TypeFeaturings</code> for which a certain <code>Feature</code> is the <code>featureOfType</code>.</p> - - + + - - - - + + + + <p>The Feature that owns this Redefinition relationship, which must also be its <code>redefiningFeature</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>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> + + + + <p>The Redefinitions with a certain Feature as the <code>redefiningFeature</code>.</p> - - OCL2.0 - relatedFeature->forAll(f | - if featuringType->isEmpty() then f.isFeaturedWithin(null) - else featuringType->forAll(t | f.isFeaturedWithin(t)) - endif) - - - - - <p>The <code>sourceFeature</code> of a <code>Connector</code> is its first <code>relatedFeature</code> (if any).</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 - sourceFeature = - if relatedFeature->isEmpty() then null - else relatedFeature->first() - endif + ownedMemberFeature.isEnd - - - <p>The <code>targetFeatures</code> of a <code>Connector</code> are the <code>relatedFeatures</code> other than the <code>sourceFeature</code>.</p> + + + + + + + + + + <p>The Features for which a certain Type is a <code>featuringType</code>.</p> - - OCL2.0 - targetFeature = - if relatedFeature->size() < 2 then OrderedSet{} - else - relatedFeature-> - subSequence(2, relatedFeature->size())-> - asOrderedSet() - endif - - - - - <p>If a <code>Connector</code> is concrete (not abstract), then it must have at least two <code>relatedFeatures</code>.</p> + + + + + + + + + + <p>The Features for which a certain Type is a <code>type</code>.</p> - - OCL2.0 - not isAbstract implies relatedFeature->size() >= 2 - - - - - <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 Redefinitions with a certain Feature as the <code>redefinedFeature</code>.</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> + + + + + + + + <p>The <code>ReferenceSubsetting</code> with a certain <code>Feature</code> as the <code>referencedFeature</code>.</p> - - OCL2.0 - 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> + + + + + + + <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 - connectorEnds->size() = 2 and -association->exists(oclIsKindOf(AssociationStructure)) implies - specializesFromLibrary('Objects::binaryLinkObjects') + 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>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>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 - connectorEnd->size() = 2 implies - specializesFromLibrary('Links::binaryLinks') + 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 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>If the <code>redefinedFeature</code> of a <code>Redefinition</code> has <code>isEnd = true</code> and the <code>owningType</code> of the <code>redefiningFeature</code> is an <code>Association</code> or <code>Connector</code>, then the <code>redefiningFeature</code> must have <code>isEnd = true</code>.</p> - + OCL2.0 - connectorEnds->size() > 2 implies - not specializesFromLibrary('Links::BinaryLink') + redefinedFeature.isEnd and +redefiningFeature.owningType <> null and +(redefiningFeature.owningType.oclIsKindOf(Association) or + redefiningFeature.owningType.oclIsKindOf(Connector)) implies + redefiningFeature.isEnd - - - <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>Feature</code> that is redefining the <code>redefinedFeature</code> of this <code>Redefinition</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>Feature</code> that is redefined by the <code>redefiningFeature</code> of this <code>Redefinition</code>.</p> - - + + - - - <p>The <code>Associations</code> that type the <code>Connector</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> - - + + - - - <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 owns this <code>ReferenceSubsetting</code> relationship, which is also its <code>subsettingFeature</code>.</p> + - - + + - - - <p>The source <code>relatedFeature</code> for this <code>Connector</code>. It is the first <code>relatedFeature</code>.</p> + + + + + <p>The <code>Features</code> with a certain other <code>Feature</code> as the <code>crossFeature</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 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>Feature</code> whose values are partly determined by values of the <code>chainingFeature</code>, as described in <code>Feature::chainingFeature</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 FeatureTyping relating this Type to a Feature.</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>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>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>ownedRedefinitions</code> of a <code>Feature</code> are its <code>ownedSubsettings</code> that are <code>Redefinitions</code>.</p> - + OCL2.0 - specializesFromLibrary('Occurrences::happensBeforeLinks') + ownedRedefinition = ownedSubsetting->selectByKind(Redefinition) - - - - - <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>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 - relatedFeature->size() = 2 + ownedTypeFeaturing = ownedRelationship->selectByKind(TypeFeaturing)-> + select(tf | tf.featureOfType = self) - - - <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>ownedSubsettings</code> of a <code>Feature</code> are its <code>ownedSpecializations</code> that are <code>Subsettings</code>.</p> - + OCL2.0 - specializesFromLibrary('Links::selfLinks') + ownedSubsetting = ownedSpecialization->selectByKind(Subsetting) - - - - - - - - - - - - - - - - - - <p>The FeatureValue that owns the <code>value</code> 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>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>ownedTypings</code> of a <code>Feature</code> are its <code>ownedSpecializations</code> that are <code>FeatureTypings</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) + ownedTyping = ownedGeneralization->selectByKind(FeatureTyping) - - - <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>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 - featureWithValue.redefinition.redefinedFeature-> - closure(redefinition.redefinedFeature).valuation-> - forAll(isDefault) + 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>FeatureValue</code> has <code>isInitial = true</code>, then its <code>featureWithValue</code> must have <code>isVariable = true</code>.</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 - isInitial implies featureWithValue.isVariable + multiplicity <> null implies multiplicity.featuringType = featuringType - - - - <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>A <code>Feature</code> must directly or indirectly specialize <code><em>Base::things</em></code> 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('Base::things') + + + + + <p>A <code>Feature</code> cannot be one of its own <code>chainingFeatures</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> + + English + chainingFeature->excludes(self) + + + + + <p>The <code>ownedFeatureChainings</code> of a <code>Feature</code> are the <code>ownedRelationships</code> that are <code>FeatureChainings</code>.</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 + ownedFeatureChaining = ownedRelationship->selectByKind(FeatureChaining) + + + + + <p>The <code>chainingFeatures</code> of a <code>Feature</code> are the <code>chainingFeatures</code> of its <code>ownedFeatureChainings</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 + chainingFeature = ownedFeatureChaining.chainingFeature + + + + + A <code>Feature</code> must have either no <code>chainingFeatures</code> or more than one. - + OCL2.0 - bound->forAll(b | b.featuringType = self.featuringType) + chainingFeature->size() <> 1 - - - <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>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> - + OCL2.0 - bound->forAll(b | - b.result.specializesFromLibrary('ScalarValues::Integer') and - let value : UnlimitedNatural = valueOf(b) in - value <> null implies value >= 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>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>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> - + OCL2.0 - lowerBound = - let ownedExpressions : Sequence(Expression) = - ownedMember->selectByKind(Expression) in - if ownedExpressions->size() < 2 then null - else ownedExpressions->first() - endif + direction = null and +ownedSpecializations->forAll(isImplied) implies + ownedMembership-> + selectByKind(FeatureValue)-> + forAll(fv | specializes(fv.value.result)) - - - <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>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> - + 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 + isEnd and owningType <> null and +(owningType.oclIsKindOf(Association) or + owningType.oclIsKindOf(Connector)) implies + specializesFromLibrary('Links::Link::participant') - - - <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>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>. - + OCL2.0 - bound = - if upperBound = null then Sequence{} - else if lowerBound = null then Sequence{upperBound} - else Sequence{lowerBound, upperBound} - endif endif + 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>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>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 - 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 + ownedTyping.type->exists(selectByKind(Class)) implies + specializesFromLibrary('Occurrences::occurrences') - - - - <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>Expression</code> whose result is the upper bound of the <code>MultiplicityRange</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> + + + <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>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 + 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 - 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 + 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 - 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>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>Whether an <code>Expression</code> <code>isModelLevelEvaluable</code> is determined by the <code>modelLevelEvaluable()</code> operation.</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::target::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> - + OCL2.0 - isModelLevelEvaluable = modelLevelEvaluable(Set(Element){}) + 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>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>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 - specializesFromLibrary('Performances::evaluations') + ownedTyping.type->exists(selectByKind(Structure)) implies + specializesFromLibrary('Objects::objects') - - - <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>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 - owningMembership <> null and -owningMembership.oclIsKindOf(FeatureValue) implies - let featureWithValue : Feature = - owningMembership.oclAsType(FeatureValue).featureWithValue in - featuringType = featureWithValue.featuringType + 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>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>The <code>ownedFeatureInvertings</code> of a <code>Feature</code> are its <code>ownedRelationships</code> that are <code>FeatureInvertings</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))) + ownedFeatureInverting = ownedRelationship->selectByKind(FeatureInverting)-> + select(fi | fi.featureInverted = self) - - - <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> + + + 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 - result = - let resultParams : Sequence(Feature) = - featureMemberships-> - selectByKind(ReturnParameterMembership). - ownedMemberParameter in - if resultParams->notEmpty() then resultParams->first() - else null - endif - + featuringType = + let featuringTypes : OrderedSet(Type) = + typeFeaturing.type->asOrderedSet() in + if chainingFeature->isEmpty() then featuringTypes + else + featuringTypes-> + union(chainingFeature->first().featuringType)-> + asOrderedSet() + endif - - - <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>ownedReferenceSubsetting</code> of a <code>Feature</code> is the first +<code>ownedSubsetting</code> that is a <code>ReferenceSubsetting</code> (if any).</p> - + OCL2.0 - featureMembership-> - selectByKind(ReturnParameterMembership)-> - size() = 1 + ownedReferenceSubsetting = + let referenceSubsettings : OrderedSet(ReferenceSubsetting) = + ownedSubsetting->selectByKind(ReferenceSubsetting) in + if referenceSubsettings->isEmpty() then null + else referenceSubsettings->first() endif - - - <p>An <code>Expression</code> must have at most one <code>ResultExpressionMembership</code>.</p> + + + <p>A <code>Feature</code> must have at most one <code>ownedSubsetting</code> that is an <code>ReferenceSubsetting</code>.</p> - + OCL2.0 - membership->selectByKind(ResultExpressionMembership)->size() <= 1 + ownedSubsetting->selectByKind(ReferenceSubsetting)->size() <= 1 - - - - <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> + + + <p>Each <code>chainingFeature</code> (other than the first) must be featured within the previous <code>chainingFeature</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 + Sequence{2..chainingFeature->size()}->forAll(i | + chainingFeature->at(i).isFeaturedWithin(chainingFeature->at(i-1))) + + + + + <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 - let results: Sequence(Element) = evaluate(target) in - result->size() = 1 and - results->first().oclIsKindOf(LiteralBoolean) and - results->first().oclAsType(LiteralBoolean).value - - - - - - - - - - - <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> + + 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> - + OCL2.0 - featureMembership-> - selectByKind(ReturnParameterMembership)-> - size() = 1 + featureTarget = if chainingFeature->isEmpty() then self else chainingFeature->last() endif - - - <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>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 - specializesFromLibrary('Performances::Evaluation') + ownedCrossSubsetting = + let crossSubsettings: Sequence(CrossSubsetting) = + ownedSubsetting->selectByKind(CrossSubsetting) in + if crossSubsettings->isEmpty() then null + else crossSubsettings->first() + endif - - - <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>If a <code>Feature</code> has <code>isEnd = true</code>, then it must have multiplicity <code>1..1</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))) + isEnd implies + multiplicities().allSuperTypes()->flatten()-> + selectByKind(MultiplicityRange)->exists(hasBounds(1,1)) - - - <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>crossFeature</code> of a <code>Feature</code> must have the same <code>types</code> as the <code>Feature</code>.</p> - + OCL2.0 - result = - let resultParams : Sequence(Feature) = - featureMemberships-> - selectByKind(ReturnParameterMembership). - ownedMemberParameter in - if resultParams->notEmpty() then resultParams->first() - else null - endif + crossFeature <> null implies + crossFeature.type->asSet() = type->asSet() - - - <p>A <code>Function</code> must have at most one <code>ResultExpressionMembership</code>.</p> + + + <p>A <code>Feature</code> must have at most one <code>ownedSubsetting</code> that is a <code>CrossSubsetting</code>.</p> - + OCL2.0 - membership->selectByKind(ResultExpressionMembership)->size() <= 1 + ownedSubsetting->selectByKind(CrossSubsetting)->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 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>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> - - - - - - - <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> + + + <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> - + OCL2.0 - specializesFromLibrary('Performances::BooleanEvaluation') + 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>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>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> - + OCL2.0 - owningType.oclIsKindOf(Function) or owningType.oclIsKindOf(Expression) + isOwnedCrossFeature() implies + owner.oclAsType(Feature).type->forAll(t | self.specializes(t)) - - - - <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>The Functions that have a certain Feature its owned or inherited <code>result</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>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>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> - + OCL2.0 - specializesFromLibrary('Performances::booleanEvaluations') + isOwnedCrossFeature() implies + ownedSubsetting.subsettedFeature->includesAll( + owner.oclAsType(Feature).ownedRedefinition.redefinedFeature-> + select(crossFeature <> null).crossFeature) - - - - <p>The Predicate that types the Expression.</p> - - - - <p>The <code>Predicate</code> that types this <code>BooleanExpression</code>.</p> - - - - - - - - - <p>The Functions that hasve a certain <code>expression</code> as a step.</p> + + + <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 ResultExpressionMembership that owns the <code>ownedResultExpression</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>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 + 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> - + + 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 - owningType.oclIsKindOf(Function) or owningType.oclIsKindOf(Expression) + isPortion implies not isVariable - - - - <p>The <code>Expression</code> that provides the result for the owner of the <code>ResultExpressionMembership</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>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>Feature</code> with <code>isEnd = true</code> must have no direction.</p> - + OCL2.0 - if isNegated then - specializesFromLibrary('Performances::falseEvaluations') -else - specializesFromLibrary('Performances::trueEvaluations') -endif + isEnd implied direction = null - - - - <p>Whether this <code>Invariant</code> is asserted to be false rather than true.</p> - - - - - - - - - - <p>The Expressions that have a certain Feature its owned or inherited <code>result</code>.</p> - - - - - - - - - <p>The Expressions that are typed by a certain <code>function</code>.</p> - - - - - - - - - <p>The ItemFlow that has a certain <code>sourceOutputFeature</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> + + + <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 - isEnd + owningFeatureMembership <> null implies + featuringTypes->exists(t | isFeaturingType(t)) - - - <p>A <code>FlowEnd</code> must have exactly one <code>ownedFeature</code>.</p> + + + <p>A <code>Feature</code> with <code>isConstant = true</code> must have <code>isVariable = true</code>. - + OCL2.0 - ownedFeature->size() = 1 + isConstant implies isVariable - - - <p>The <code>owningType</code> of a <code>FlowEnd</code> must be a <code>Flow</code>.</p> + + + <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 - owningType <> null and owningType.oclIsKindOf(Flow) + isVariable implies + owningType <> null and + owningType.specializes('Occurrences::Occurrence') - - - - - <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> + + + <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 - specializesFromLibrary('Transfers::transfers') + isEnd implies not (isDerived or isAbstract or isComposite or isPortion) - - - <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>Feature</code> with <code>isEnd = true</code> and <code>isVariable = true</code> must have <code>isConstant = true</code>.</p> - + OCL2.0 - payloadType = - if payloadFeature = null then Sequence{} - else payloadFeature.type - endif + isEnd and isVariable implies isConstant - - - <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>The <code>Type</code> that is the <code>owningType</code> of the <code>owningFeatureMembership</code> of this <code>Feature</code>.</p> + + + + + + + <p>Whether or not values for this <code>Feature</code> must have no duplicates or not.</p> + + + + + + + + <p>Whether an order exists for the values of this <code>Feature</code> or not.</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 <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>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 <code>FeatureMembership</code> that owns this <code>Feature</code> as an <code>ownedMemberFeature</code>, determining its <code>owningType</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>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>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> - - OCL2.0 - sourceOutputFeature = - if connectorEnd->isEmpty() or - connectorEnd.ownedFeature->isEmpty() - then null - else connectorEnd.ownedFeature->first() - endif - - - - - <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>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> - - OCL2.0 - targetInputFeature = - if connectorEnd->size() < 2 or - connectorEnd->at(2).ownedFeature->isEmpty() - then null - else connectorEnd->at(2).ownedFeature->first() - endif - - - - - <p>The <code>flowEnds</code> of a <code>Flow</code> are all its <code>connectorEnds</code> that are <code>FlowEnds</code>.</p> + + + + + + <p>Whether the values of this <code>Feature</code> can always be computed from the values of other <code>Features</code>.</p> + - - OCL2.0 - flowEnd = connectorEnd->selectByKind(FlowEnd) - - - - - <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>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> - - OCL2.0 - payloadFeature = - let payloadFeatures : Sequence(PayloadFeature) = - ownedFeature->selectByKind(PayloadFeature) in - if payloadFeatures->isEmpty() then null - else payloadFeatures->first() - endif - - - - - <p>A <code>Flow</code> must have at most one <code>ownedFeature</code> that is an <code>PayloadFeature</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> - - OCL2.0 - ownedFeature->selectByKind(PayloadFeature)->size() <= 1 - - - - - <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>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> - - 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>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>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>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>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>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 <code>connectorEnds</code> of this <code>Flow</code> that are <code>FlowEnds</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 <code>ownedFeature</code> of the <code>Flow</code> that is a <code>PayloadFeature</code> (if any).</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 <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 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>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 + 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 + 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 + 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> - - - - - - - <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 + 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 - redefinesFromLibrary('Transfers::Transfer::payload') - - - - - - - - - - - - - <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 + 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> - - OCL2.0 - specializesFromLibrary('Transfers::flowTransfersBefore') - - - - - - - - - <p>The ItemFlow that has a certain <code>targetInputFeature</code>.</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> - - - - - - - - - - - - - <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> + + + 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> - - - - <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('Occurrences::Occurrence') - - - - - <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 + 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> - - OCL2.0 - ownedSpecialization.general-> - forAll(not oclIsKindOf(DataType)) and -not oclIsKindOf(Association) implies - ownedSpecialization.general-> - forAll(not oclIsKindOf(Association)) - - - - - - - <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> + + + 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> - - - - - - <p>The <code>libraryNamespace</code> for a <code>LibraryPackage</code> is itself.</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> - - + + OCL2.0 - self + owningNamespace <> null and +owningNamespace.oclIsKindOf(Feature) and +owningNamespace.oclAsType(Feature).ownedCrossFeature() = self - - - + + - - - - <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>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 <em>not</em> a <code>Multiplicity</code>, <code>MetadataFeature</code>, or <code>BindingConnector</code>, and whose <code>owningMembership</code> is <em>not</em> a <code>FeatureMembership</code> or <code>FeatureValue</code>. If this exists, it is the <code>crossFeature</code> of the end <code>Feature</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> + + + 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(BindingConnector))-> + reject(owningMembership.oclIsKindOf(FeatureMembership) or + owningMembership.oclIsKindOf(FeatureValue)) in + if ownedMemberFeatures.isEmpty() then null + else ownedMemberFeatures->first() + endif +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> - - - - - - <p>Exclude <code>Elements</code> that do not meet all the <code>filterConditions</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 - self.oclAsType(Namespace).importedMemberships(excluded)-> - select(m | self.includeAsMember(m.memberElement)) + 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>Determine whether the given <code>element</code> meets all the <code>filterConditions</code>.</p> + + + <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 metadataFeatures: Sequence(AnnotatingElement) = - element.ownedAnnotation.annotatingElement-> - selectByKind(MetadataFeature) in - self.filterCondition->forAll(cond | - metadataFeatures->exists(elem | - cond.checkCondition(elem))) + 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><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>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> - - - OCL2.0 - 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>The ElementFilterMembership that owns the <code>condition</code>.</p> - - - - - - - - - <p>The Package that has a certain Expression as a <code>filterCondition</code>.</p> - - - - - - - - - <p>The Namespace with a certain <code>importedMembership</code>.</p> - - - - - - - - - <p>The Namespace that has a certain <code>membership</code>.</p> - - - - - - - - - <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> - + + + <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 - if excluded->includes(importedNamespace) then Sequence{} -else importedNamespace.visibleMemberships(excluded, isRecursive, isImportAll) + 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>A MembershipImport that has a certain <code>importedMembership</code>.</p> - - - - - - - - - - <p>The Membership with a certain Element as its <code>memberElement</code>.</p> - - - - - - - - - <p>A NamespaceImport that has a certain <code>importedNamespace</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><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>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>Feature</code> that has a <code>type</code> determined by this <code>FeatureTyping</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>Type</code> that is being applied by this <code>FeatureTyping</code>.</p> - - + + - - - <p>The short name of the <code>memberElement</code> relative to the <code>membershipOwningNamespace</code>.</p> + + + <p>A <code>typedFeature</code> that is also the <code>owningRelatedElement</code> of this <code>FeatureTyping</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>A <code>Type</code> that has the <code>multiplicity</code> as an <code>ownedMember</code>.</p> - - - - - - <p>The name of the <code>memberElement</code> relative to the <code>membershipOwningNamespace</code>.</p> + + + + + + + + <p>The Subsettings with a certain Feature as the <code>subsettedFeature</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 an inverse of the <code>invertingFeature</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>The <code>Feature</code> that is an inverse of the <code>invertedFeature</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>featureInverted</code> that is also the <code>owningRelatedElement</code> of this <code>FeatureInverting</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>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> + + + <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>A <code>Namespace</code> can provide names for its <code>members</code> via the <code>memberNames</code> and <code>memberShortNames</code> specified by the <code>Memberships</code> in the <code>Namespace</code>. If a <code>Membership</code> specifies a <code>memberName</code> and/or <code>memberShortName</code>, then those are names of the corresponding <code>memberElement</code> relative to the <code>Namespace</code>. For an <code>OwningMembership</code>, the <code>ownedMemberName</code> and <code>ownedMemberShortName</code> are given by the <code>Element</code> <code>name</code> and <code>shortName</code>. Note that the same <code>Element</code> may be the <code>memberElement</code> of multiple <code>Memberships</code> in a <code>Namespace</code> (though it may be owned at most once), each of which may define a separate alias for the <code>Element</code> relative to the <code>Namespace</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>All <code>memberships</code> of a <code>Namespace</code> must be distinguishable from each other.</p> - - - OCL2.0 - membership->forAll(m1 | - membership->forAll(m2 | - m1 <> m2 implies m1.isDistinguishableFrom(m2))) - - - - - <p>The <code>members</code> of a <code>Namespace</code> are the <code>memberElements</code> of all its <code>memberships</code>.</p> - - - OCL2.0 - member = membership.memberElement - - - - - <p>The <code>ownedMembers</code> of a <code>Namespace</code> are the <code>ownedMemberElements</code> of all its <code>ownedMemberships</code> that are <code>OwningMemberships</code>. - - - OCL2.0 - ownedMember = ownedMembership->selectByKind(OwningMembership).ownedMemberElement - - - - - <p>The <code>importedMemberships</code> of a <code>Namespace</code> are derived using the <code>importedMemberships()</code> operation, with no initially <code>excluded</code> <code>Namespaces</code>.</p> - - - OCL2.0 - importedMembership = importedMemberships(Set{}) - - - - - <p>The <code>ownedImports</code> of a <code>Namespace</code> are all its <code>ownedRelationships</code> that are <code>Imports</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 - ownedImport = ownedRelationship->selectByKind(Import) + 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>ownedMemberships</code> of a <code>Namespace</code> are all its <code>ownedRelationships</code> that are <code>Memberships</code>.</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 - ownedMembership = ownedRelationship->selectByKind(Membership) + crossingFeature.isEnd and +crossingFeature.owningType<>null and +crossingFeature.owningType.endFeature ->size() > 1 - - - - <p>All <code>Memberships</code> in this <code>Namespace</code>, including (at least) the union of <code>ownedMemberships</code> and <code>importedMemberships</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 <code>ownedRelationships</code> of this <code>Namespace</code> that are <code>Imports</code>, for which the <code>Namespace</code> is the <code>importOwningNamespace</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 set of all member <code>Elements</code> of this <code>Namespace</code>, which are the <code>memberElements</code> of all <code>memberships</code> of the <code>Namespace</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 owned <code>members</code> of this <code>Namespace</code>, which are the <cpde><code>ownedMemberElements</code> of the <code>ownedMemberships</code> of the <code>Namespace</code>.</p> - + + + + + + + + <p>The Subsettings with a certain Feature as the <code>subsettingFeature</code>.</p> - - - - - - <p>The <code>ownedRelationships</code> of this <code>Namespace</code> that are <code>Memberships</code>, for which the <code>Namespace</code> is the <code>membershipOwningNamespace</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 <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>Memberships</code> in this <code>Namespace</code> that result from the <code>ownedImports</code> of this <code>Namespace</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>Return the names of the given <code>element</code> as it is known in this <code>Namespace</code>.</p> - - - - - OCL2.0 - let elementMemberships : Sequence(Membership) = - memberships->select(memberElement = element) in -memberships.memberShortName-> - union(memberships.memberName)-> - asSet() - - - - - - - - - - - - <p>Returns this visibility of <code>mem</code> relative to this <code>Namespace</code>. If <code>mem</code> is an <code>importedMembership</code>, this is the <code>visibility</code> of its Import. Otherwise it is the <code>visibility</code> of the <code>Membership</code> itself.</p> - + + + <p>A <code>featureOfType</code> that is also the <code>owningRelatedElement</code> of this <code>TypeFeaturing</code>.</p> - - - OCL2.0 - if importedMembership->includes(mem) then - ownedImport-> - select(importedMemberships(Set{})->includes(mem)). - first().visibility -else if memberships->includes(mem) then - mem.visibility -else - VisibilityKind::private -endif - - - - - - - - <p>If <code>includeAll = true</code>, then return all the <code>Memberships</code> of this <code>Namespace</code>. Otherwise, return only the publicly visible <code>Memberships</code> of this <code>Namespace</code>, including <code>ownedMemberships</code> that have a <code>visibility</code> of <code>public</code> and <code>Memberships</code> imported with a <code>visibility</code> of <code>public</code>. If <code>isRecursive = true</code>, also recursively include all visible <code>Memberships</code> of any <code>public</code> owned <code>Namespaces</code>, or, if <code>IncludeAll = true</code>, all <code>Memberships</code> of all owned <code>Namespaces</code>. When computing imported <code>Memberships</code>, ignore this <code>Namespace</code> and any <code>Namespaces</code> in the given <code>excluded</code> set.</p> - + + + + + + + + <p>The FeatureInvertings that identify this Feature as their <code>featureInverted</code>.</p> - - - OCL2.0 - let visibleMemberships : OrderedSet(Membership) = - if includeAll then membershipsOfVisibility(null, excluded) - else membershipsOfVisibility(VisibilityKind::public, excluded) - endif in -if not isRecursive then visibleMemberships -else visibleMemberships->union(ownedMember-> - selectAsKind(Namespace). - select(includeAll or owningMembership.visibility = VisibilityKind::public)-> - visibleMemberships(excluded->including(self), true, includeAll)) -endif - - - - - - - - - - - - - - - - - - - - - <p>Derive the imported <code>Memberships</code> of this <code>Namespace</code> as the <code>importedMembership</code> of all <code>ownedImports</code>, excluding those Imports whose <code>importOwningNamespace</code> is in the <code>excluded</code> set, and excluding <code>Memberships</code> that have distinguisibility collisions with each other or with any <code>ownedMembership</code>.</p> - + + + + + + + <p>Relationship for chainedFeatures.</p> + + + + <p>The <code>FeatureChainings</code> that identify a <code>Feature</code> as their <code>chainingFeature</code>.</p> - - - OCL2.0 - ownedImport.importedMemberships(excluded->including(self)) - - - - - - - - - - - - - - <p>If <code>visibility</code> is not null, return the <code>Memberships</code> of this <code>Namespace</code> with the given <code>visibility</code>, including <code>ownedMemberships</code> with the given <code>visibility</code> and <code>Memberships</code> imported with the given <code>visibility</code>. If <code>visibility</code> is null, return all <code>ownedMemberships</code> and imported <code>Memberships</code> regardless of visibility. When computing imported <code>Memberships</code>, ignore this <code>Namespace</code> and any <code>Namespaces</code> in the given <code>excluded</code> set.</p> + + + + + + + + + <p>The <code>TypeFeaturings</code> for which a certain <code>Type</code> is the <code>featuringType</code>.</p> - - - OCL2.0 - ownedMembership-> - select(mem | visibility = null or mem.visibility = visibility)-> - union(ownedImport-> - select(imp | visibility = null or imp.visibility = visibility). - importedMemberships(excluded->including(self))) - - - - - - - - - - - - - - - - - - <p>Resolve the given qualified name to the named <code>Membership</code> (if any), starting with this <code>Namespace</code> as the local scope. The qualified name string must conform to the concrete syntax of the KerML textual notation. According to the KerML name resolution rules every qualified name will resolve to either a single <code>Membership</code>, or to none.</p> + + + + + + + + + + + + + + + + + <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> + +<p>The <code>relatedElements</code> of a <code>Relationship</code> are divided into <code>source</code> and <code>target</code> <code>Elements</code>. The <code>Relationship</code> is considered to be directed from the <code>source</code> to the <code>target</code> <code>Elements</code>. An undirected <code>Relationship</code> may have either all <code>source</code> or all <code>target</code> <code>Elements</code>.</p> + +<p>A &quot;relationship <code>Element</code>&quot; in the abstract syntax is generically any <code>Element</code> that is an instance of either <code>Relationship</code> or a direct or indirect specialization of <code>Relationship</code>. Any other kind of <code>Element</code> is a &quot;non-relationship <code>Element</code>&quot;. It is a convention of that non-relationship <code>Elements</code> are <em>only</em> related via reified relationship <code>Elements</code>. Any meta-associations directly between non-relationship <code>Elements</code> must be derived from underlying reified <code>Relationship</code>.</p> + + + + <p>The <code>relatedElements</code> of a <code>Relationship</code> consist of all of its <code>source</code> <code>Elements</code> followed by all of its <code>target</code> <code>Elements</code>.</p> - - - OCL2.0 - let qualification : String = qualificationOf(qualifiedName) in -let name : String = unqualifiedNameOf(qualifiedName) in -if qualification = null then resolveLocal(name) -else if qualification = '$' then resolveGlobal(name) -else - let namespaceMembership : Membership = resolve(qualification) in - if namespaceMembership = null or - not namespaceMembership.memberElement.oclIsKindOf(Namespace) - then null - else - namespaceMembership.memberElement.oclAsType(Namespace). - resolveVisible(name) - endif -endif endif - - - - - - - - - - - - - <p>Resolve the given qualified name to the named <code>Membership</code> (if any) in the effective global <code>Namespace</code> that is the outermost naming scope. The qualified name string must conform to the concrete syntax of the KerML textual notation.</p> - + + OCL2.0 + relatedElement = source->union(target) + + + + + + <p>The Elements that are related by this Relationship, derived as the union of the <code>source</code> and <code>target</code> Elements of the Relationship.</p> - - - English - No OCL - - - - - - - - - - - - - <p>Resolve a simple <code>name</code> starting with this <code>Namespace</code> as the local scope, and continuing with containing outer scopes as necessary. However, if this <code>Namespace</code> is a root <code>Namespace</code>, then the resolution is done directly in global scope.</p> + + + + + + <p>The <code>relatedElements</code> to which this Relationship is considered to be directed.</p> - - + + + + + + <p>The <code>relatedElements</c ode> from which this Relationship is considered to be directed.</p> + + + + + + + <p>The <tt>relatedElement</tt> of this Relationship that owns the Relationship, if any.</p> + + + + + + + <p>The <tt>relatedElements</tt> of this Relationship that are owned by the Relationship.</p> + + + + + + + <p>Whether this Relationship was generated by tooling to meet semantic rules, rather than being directly created by a modeler.</p> + + + + + + + <p>Return whether this Relationship has either an <code>owningRelatedElement</code> or <code>owningRelationship</code> that is a library element.</p> + + + OCL2.0 - if owningNamespace = null then resolveGlobal(name) -else - let memberships : Membership = membership-> - select(memberShortName = name or memberName = name) in - if memberships->notEmpty() then memberships->first() - else owningNamespace.resolveLocal(name) - endif -endif + if owningRelatedElement <> null then owningRelatedElement.libraryNamespace() +else if owningRelationship <> null then owningRelationship.libraryNamespace() +else null endif endif - - - - - - + + + - - - <p>Resolve a simple name from the visible <code>Memberships</code> of this <code>Namespace</code>.</p> - + + + <p>If the <code>owningRelationship</code> of the <code>Relationship</code> is null but its <code>owningRelatedElement</code> is non-null, construct the <code>path</code> using the position of the <code>Relationship</code> in the list of <code>ownedRelationships</code> of its <code>owningRelatedElement</code>. Otherwise, return the <code>path</code> of the <code>Relationship</code> as specified for an <code>Element</code> in general.</p> - - + + OCL2.0 - let memberships : Sequence(Membership) = - visibleMemberships(Set{}, false, false)-> - select(memberShortName = name or memberName = name) in -if memberships->isEmpty() then null -else memberships->first() + if owningRelationship = null and owningRelatedElement <> null then + owningRelatedElement.path() + '/' + + owningRelatedElement.ownedRelationship->indexOf(self).toString() + -- A position index shall be converted to a decimal string representation + -- consisting of only decimal digits, with no sign, leading zeros or leading + -- or trailing whitespace. +else self.oclAsType(Element).path() endif - + - - - - - - - <p>Return a string with valid KerML syntax representing the qualification part of a given <code>qualifiedName</code>, that is, a qualified name with all the segment names of the given name except the last. If the given <code>qualifiedName</code> has only one segment, then return null.</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> + + + + + <p>The <code>ownedElements</code> of an <code>Element</code> are the <code>ownedRelatedElements</code> of its <code>ownedRelationships</code>.</p> - - - English - No OCL - - - - - - - - - - - - - - <p>Return the simple name that is the last segment name of the given <code>qualifiedName</code>. If this segment name has the form of a KerML unrestricted name, then "unescape" it by removing the surrounding single quotes and replacing all escape sequences with the specified character.</p> + + OCL2.0 + ownedElement = ownedRelationship.ownedRelatedElement + + + + + <p>The <code>owner</code> of an <code>Element</code> is the <code>owningRelatedElement</code> of its <code>owningRelationship</code>.</p> + + + OCL2.0 + owner = owningRelationship.owningRelatedElement + + + + + <p>If this <code>Element</code> does not have an <code>owningNamespace</code>, then its <code>qualifiedName</code> is null. If the <code>owningNamespace</code> of this Element is a root <code>Namespace</code>, then the <code>qualifiedName</code> of the <code>Element</code> is the escaped name of the <code>Element</code> (if any). If the <code>owningNamespace</code> is non-null but not a root <code>Namespace</code>, then the <code>qualifiedName</code> of this <code>Element</code> is constructed from the <code>qualifiedName</code> of the <code>owningNamespace</code> and the escaped name of the <code>Element</code>, unless the <code>qualifiedName</code> of the <code>owningNamespace</code> is null or the escaped name is null, in which case the <code>qualifiedName</code> of this <code>Element</code> is also null. Further, if the <code>owningNamespace</code> has other <code>ownedMembers</code> with the same non-null name as this <code>Element</code>, and this <code>Element</code> is not the first, then the <code>qualifiedName</code> of this <code>Element</code> is null.</p> + + + OCL2.0 + qualifiedName = + if owningNamespace = null then null + else if name <> null and + owningNamespace.ownedMember-> + select(m | m.name = name).indexOf(self) <> 1 then null + else if owningNamespace.owner = null then escapedName() + else if owningNamespace.qualifiedName = null or + escapedName() = null then null + else owningNamespace.qualifiedName + '::' + escapedName() + endif endif endif endif + + + + + <p>The <code>documentation</code> of an <code>Element</code> is its <code>ownedElements</code> that are <code>Documentation</code>.</p> + + + OCL2.0 + documentation = ownedElement->selectByKind(Documentation) + + + + + <p>The <code>ownedAnnotations</code> of an <code>Element</code> are its <code>ownedRelationships</code> that are <code>Annotations</code>, for which the <code>Element</code> is the <code>annotatedElement</code>.</p> + + + OCL2.0 + ownedAnnotation = ownedRelationship-> + selectByKind(Annotation)-> + select(a | a.annotatedElement = self) + + + + + <p>The <code>name</code> of an <code>Element</code> is given by the result of the <code>effectiveName()</code> operation.</p> + + + OCL2.0 + name = effectiveName() + + + + + <p>If an <code>Element</code> has any <code>ownedRelationships</code> for which <code>isImplied = true</code>, then the <code>Element</code> must also have <code>isImpliedIncluded = true</code>. (Note that an <code>Element</code> <em>can</em> have <code>isImplied = true</code> even if no <code>ownedRelationships</code> have <code>isImplied = true</code>, indicating the <code>Element</code> simply has no implied <code>Relationships</code>.</p> + + + OCL2.0 + ownedRelationship->exists(isImplied) implies isImpliedIncluded + + + + + <p>An <code>Element</code> <code>isLibraryElement</code> if <code>libraryNamespace()</code> is not null.</p> - - - English - No OCL - - - - - - - - - - - - - <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> + + OCL2.0 + isLibraryElement = libraryNamespace() <> null - - - - <p>The <code>ownedMemberName</code> of an <code>OwningMembership</code> is the <code>name</code> of its <code>ownedMemberElement</code>.</p> + + + + + <p>The <code>shortName</code> of an <code>Element</code> is given by the result of the <code>effectiveShortName()</code> operation.</p> - + OCL2.0 - ownedMemberName = ownedMemberElement.name + shortName = effectiveShortName() - - - <p>The <code>ownedMemberShortName</code> of an <code>OwningMembership</code> is the <code>shortName</code> of its <code>ownedMemberElement</code>.</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 - ownedMemberShortName = ownedMemberElement.shortName + owningNamespace = + if owningMembership = null then null + else owningMembership.membershipOwningNamespace + endif - - - - <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>textualRepresentations</code> of an <code>Element</code> are its <code>ownedElements</code> that are <code>TextualRepresentations</code>.</p> + + + OCL2.0 + textualRepresentation = ownedElement->selectByKind(TextualRepresentation) + + + + + <p>The <code>owningRelationship</code> of this <code>Element</code>, if that <code>Relationship</code> is a <code>Membership</code>.</p> - - + + - - - <p>The <code>elementId</code> of the <code>ownedMemberElement</code>.</p> + + + <p>The Relationship for which this Element is an <tt>ownedRelatedElement</tt>, if any.</p> + - + + - - - <p>The <code>shortName</code> of the <code>ownedMemberElement</code>.</p> + + + <p>The <code>Namespace</code> that owns this <code>Element</code>, which is the <code>membershipOwningNamespace</code> of the <code>owningMembership</code> of this <code>Element</code>, if any.</p> + - - - + + - - - <p>The <code>name</code> of the <code>ownedMemberElement</code>.</p> - + + + <p>The globally unique identifier for this Element. This is intended to be set by tooling, and it must not change during the lifetime of the Element.</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. + + + <p>The Relationships for which this Element is the <tt>owningRelatedElement</tt>.</p> - - - OCL2.0 - if ownedElement.qualifiedName <> null then - ownedElement.qualifiedName + '/owningMembership' -else self.oclAsType(Relationship).path() -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>The owner of this Element, derived as the <code>owningRelatedElement</code> of the <code>owningRelationship</code> of this Element, if any.</p> + + + + + + + <p>The Elements owned by this Element, derived as the <tt>ownedRelatedElements</tt> of the <tt>ownedRelationships</tt> of this Element.</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 Documentation owned by this Element.</p> + + + + + + + <p>The <code>ownedRelationships</code> of this <code>Element</code> that are <code>Annotations</code>, for which this <code>Element</code> is the <code>annotatedElement</code>.</code> + + + + + + + <p>The <code>TextualRepresentations</code> that annotate this <code>Element</code>.</p> + + + + + + + <p>Various alternative identifiers for this Element. Generally, these will be set by tools.</p> + + + + + + + + <p>An optional alternative name for the <code>Element</code> that is intended to be shorter or in some way more succinct than its primary <code>name</code>. It may act as a modeler-specified identifier for the <code>Element</code>, though it is then the responsibility of the modeler to maintain the uniqueness of this identifier within a model or relative to some other context.</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 declared name of this <code>Element</code>.</p> - + + + - - - <p>Whether to recursively import Memberships from visible, owned sub-Namespaces.</p> + + + <p>The short name to be used for this <code>Element</code> during name resolution within its <code>owningNamespace</code>. This is derived using the <code>effectiveShortName()</code> operation. By default, it is the same as the <code>declaredShortName</code>, but this is overridden for certain kinds of <code>Elements</code> to compute a <code>shortName</code> even when the <code>declaredName</code> is null.</p> - - + + + - - - <p>Whether to import memberships without regard to declared visibility.</p> - + + + <p>The name to be used for this <code>Element</code> during name resolution within its <code>owningNamespace</code>. This is derived using the <code>effectiveName()</code> operation. By default, it is the same as the <code>declaredName</code>, but this is overridden for certain kinds of <code>Elements</code> to compute a <code>name</code> even when the <code>declaredName</code> is null.</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>The full ownership-qualified name of this <code>Element</code>, represented in a form that is valid according to the KerML textual concrete syntax for qualified names (including use of unrestricted name notation and escaped characters, as necessary). The <code>qualifiedName</code> is null if this <code>Element</code> has no <code>owningNamespace</code> or if there is not a complete ownership chain of named <code>Namespaces</code> from a root <code>Namespace</code> to this <code>Element</code>. If the <code>owningNamespace</code> has other <code>Elements</code> with the same name as this one, then the <code>qualifiedName</code> is null for all such <code>Elements</code> other than the first.</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>Whether all necessary implied Relationships have been included in the <code>ownedRelationships</code> of this Element. This property may be true, even if there are not actually any <code>ownedRelationships</code> with <code>isImplied = true</code>, meaning that no such Relationships are actually implied for this Element. However, if it is false, then <code>ownedRelationships</code> may <em>not</em> contain any implied Relationships. That is, either <em>all</em> required implied Relationships must be included, or none of them.</p> + + + + + + + <p>Whether this Element is contained in the ownership tree of a library model.</p> + + + + + + <p>Return <code>name</code>, if that is not null, otherwise the <code>shortName</code>, if that is not null, otherwise null. If the returned value is non-null, it is returned as-is if it has the form of a basic name, or, otherwise, represented as a restricted name according to the lexical structure of the KerML textual notation (i.e., surrounded by single quote characters and with special characters escaped).</p> - - - - - - - + + + + - - - - - - <p>The Namespace the has a certain Element as a <code>member</code>.</p> - - - - - - - - <p>A <code>MembershipImport</code> is an <code>Import</code> that imports its <code>importedMembership</code> into the <code>importOwningNamespace</code>. If <code>isRecursive = true</code> and the <code>memberElement</code> of the <code>importedMembership</code> is a <code>Namespace</code>, then the equivalent of a recursive <code>NamespaceImport</code> is also performed on that <code>Namespace</code>.</p> - - - - - <p>The <code>importedElement</code> of a <code>MembershipImport</code> is the <code>memberElement</code> of its <code>importedMembership</code>.</p> + + + <p>Return an effective <code>shortName</code> for this <code>Element</code>. By default this is the same as its <code>declaredShortName</code>.</p> - - OCL2.0 - importedElement = importedMembership.memberElement - - - - - - <p>The <code>Membership</code> to be imported.</p> - + + + OCL2.0 + declaredShortName + + + + + + + + + + + <p>Return an effective <code>name</code> for this <code>Element</code>. By default this is the same as its <code>declaredName</code>.</p> - - - - - - <p>Returns at least the <code>importedMembership</code>. If <code>isRecursive = true</code> and the <code>memberElement</code> of the <code>importedMembership</code> is a <code>Namespace</code>, then <code>Memberships</code> are also recursively imported from that <code>Namespace</code>.</p> - + + + OCL2.0 + declaredName + + + + + + + + + + + <p>By default, return the library Namespace of the <code>owningRelationship</code> of this Element, if it has one.</p> - - + + OCL2.0 - if not isRecursive or - not importedElement.oclIsKindOf(Namespace) or - excluded->includes(importedElement) -then Sequence{importedMembership} -else importedElement.oclAsType(Namespace). - visibleMemberships(excluded, true, importAll)-> - prepend(importedMembership) -endif + if owningRelationship <> null then owningRelationship.libraryNamespace() +else null endif - - - + + + - - - + + + + <p>Return a unique description of the location of this <code>Element</code> in the containment structure rooted in a root <code>Namespace</code>. If the <code>Element</code> has a non-null <code>qualifiedName</code>, then return that. Otherwise, if it has an <code>owningRelationship</code>, then return the string constructed by appending to the <code>path</code> of it's <code>owningRelationship</code> the character <code>/</code> followed by the string representation of its position in the list of <code>ownedRelatedElements</code> of the <code>owningRelationship</code> (indexed starting at 1). Otherwise, return the empty string.</p> + +<p>(Note that this operation is overridden for <code>Relationships</code> to use <code>owningRelatedElement</code> when appropriate.)</p> + + + + OCL2.0 + if qualifiedName <> null then qualifiedName +else if owningRelationship <> null then + owningRelationship.path() + '/' + + owningRelationship.ownedRelatedElement->indexOf(self).toString() + -- A position index shall be converted to a decimal string representation + -- consisting of only decimal digits, with no sign, leading zeros or leading + -- or trailing whitespace. +else '' +endif endif + + + + - - - - <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 <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>Indicates a <code>Membership</code> is not visible outside its owning <code>Namespace</code>.</p> + + + + <p>The <code>Element</code> or <code>Elements</code> dependent on the <code>supplier</code> <code>Elements</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>The <code>Element</code> or <code>Elements</code> on which the <code>client</code> <code>Elements</code> depend in some respect.</p> - - - - <p>Indicates that a <code>Membership</code> is publicly visible outside its owning <code>Namespace</code>.</p> + + + + + + + + <p>The <code>Dependencies</code> that have a certain <code>supplier</code> <code>Element</code>.</p> - + + + + + + + + <p>The <code>Dependencies</code> that have a certain <code>client</code> <code>Element</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> @@ -7068,27 +6796,80 @@ endif <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 textual representation of the <code>representedElement</code> in the given <code>language</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>The Annotations associated with a certain <code>annotatedElement</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> @@ -7113,6 +6894,30 @@ endif + + + <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>The AnnotatingElements that have a certain Element as their <code>annotatedElement</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> @@ -7202,812 +7007,918 @@ endif - - - - <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>The Membership with a certain Element as its <code>memberElement</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>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 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>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>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>&nbsp;</p> - - - - <p>The natural or artifical language in which the <code>body</code> text is written.</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 is represented by this <code>TextualRepresentation</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 textual representation of the <code>representedElement</code> in the given <code>language</code>.</p> + + + <p>The name of the <code>memberElement</code> relative to the <code>membershipOwningNamespace</code>.</p> - - + + - - - - - <p>The <code>Dependencies</code> that have a certain <code>client</code> <code>Element</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>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>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>Element</code> or <code>Elements</code> dependent on the <code>supplier</code> <code>Elements</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>The <code>Element</code> or <code>Elements</code> on which the <code>client</code> <code>Elements</code> depend in some respect.</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>The Namespace with a certain <code>importedMembership</code>.</p> - - - + + + - - - - <p>The <code>Dependencies</code> that have a certain <code>supplier</code> <code>Element</code>.</p> + + + + + + <p>A MembershipImport that has a certain <code>importedMembership</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> + + + <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>The <code>ownedElements</code> of an <code>Element</code> are the <code>ownedRelatedElements</code> of its <code>ownedRelationships</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 - ownedElement = ownedRelationship.ownedRelatedElement + importOwningNamespace.owner = null implies + visibility = VisibilityKind::private - - - <p>The <code>owner</code> of an <code>Element</code> is the <code>owningRelatedElement</code> of its <code>owningRelationship</code>.</p> + + + + <p>The Namespace into which Memberships are imported by this Import, which must be the <code>owningRelatedElement</code> of the Import.</p> + - - OCL2.0 - owner = owningRelationship.owningRelatedElement - - - - - <p>If this <code>Element</code> does not have an <code>owningNamespace</code>, then its <code>qualifiedName</code> is null. If the <code>owningNamespace</code> of this Element is a root <code>Namespace</code>, then the <code>qualifiedName</code> of the <code>Element</code> is the escaped name of the <code>Element</code> (if any). If the <code>owningNamespace</code> is non-null but not a root <code>Namespace</code>, then the <code>qualifiedName</code> of this <code>Element</code> is constructed from the <code>qualifiedName</code> of the <code>owningNamespace</code> and the escaped name of the <code>Element</code>, unless the <code>qualifiedName</code> of the <code>owningNamespace</code> is null or the escaped name is null, in which case the <code>qualifiedName</code> of this <code>Element</code> is also null. Further, if the <code>owningNamespace</code> has other <code>ownedMembers</code> with the same non-null name as this <code>Element</code>, and this <code>Element</code> is not the first, then the <code>qualifiedName</code> of this <code>Element</code> is null.</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> + - - OCL2.0 - qualifiedName = - if owningNamespace = null then null - else if name <> null and - owningNamespace.ownedMember-> - select(m | m.name = name).indexOf(self) <> 1 then null - else if owningNamespace.owner = null then escapedName() - else if owningNamespace.qualifiedName = null or - escapedName() = null then null - else owningNamespace.qualifiedName + '::' + escapedName() - endif endif endif endif - - - - - <p>The <code>documentation</code> of an <code>Element</code> is its <code>ownedElements</code> that are <code>Documentation</code>.</p> + + + + + <p>Whether to recursively import Memberships from visible, owned sub-Namespaces.</p> - - OCL2.0 - documentation = ownedElement->selectByKind(Documentation) - - - - - <p>The <code>ownedAnnotations</code> of an <code>Element</code> are its <code>ownedRelationships</code> that are <code>Annotations</code>, for which the <code>Element</code> is the <code>annotatedElement</code>.</p> + + + + + + <p>Whether to import memberships without regard to declared visibility.</p> + - - OCL2.0 - ownedAnnotation = ownedRelationship-> - selectByKind(Annotation)-> - select(a | a.annotatedElement = self) - - - - - <p>The <code>name</code> of an <code>Element</code> is given by the result of the <code>effectiveName()</code> operation.</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>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> + +<p>A <code>Namespace</code> can provide names for its <code>members</code> via the <code>memberNames</code> and <code>memberShortNames</code> specified by the <code>Memberships</code> in the <code>Namespace</code>. If a <code>Membership</code> specifies a <code>memberName</code> and/or <code>memberShortName</code>, then those are names of the corresponding <code>memberElement</code> relative to the <code>Namespace</code>. For an <code>OwningMembership</code>, the <code>ownedMemberName</code> and <code>ownedMemberShortName</code> are given by the <code>Element</code> <code>name</code> and <code>shortName</code>. Note that the same <code>Element</code> may be the <code>memberElement</code> of multiple <code>Memberships</code> in a <code>Namespace</code> (though it may be owned at most once), each of which may define a separate alias for the <code>Element</code> relative to the <code>Namespace</code>.</p> + + + + + <p>All <code>memberships</code> of a <code>Namespace</code> must be distinguishable from each other.</p> + + OCL2.0 - name = effectiveName() + membership->forAll(m1 | + membership->forAll(m2 | + m1 <> m2 implies m1.isDistinguishableFrom(m2))) - - - <p>If an <code>Element</code> has any <code>ownedRelationships</code> for which <code>isImplied = true</code>, then the <code>Element</code> must also have <code>isImpliedIncluded = true</code>. (Note that an <code>Element</code> <em>can</em> have <code>isImplied = true</code> even if no <code>ownedRelationships</code> have <code>isImplied = true</code>, indicating the <code>Element</code> simply has no implied <code>Relationships</code>.</p> + + + <p>The <code>members</code> of a <code>Namespace</code> are the <code>memberElements</code> of all its <code>memberships</code>.</p> - + OCL2.0 - ownedRelationship->exists(isImplied) implies isImpliedIncluded + member = membership.memberElement - - - <p>An <code>Element</code> <code>isLibraryElement</code> if <code>libraryNamespace()</code> is not null.</p> + + + <p>The <code>ownedMembers</code> of a <code>Namespace</code> are the <code>ownedMemberElements</code> of all its <code>ownedMemberships</code> that are <code>OwningMemberships</code>. - + OCL2.0 - isLibraryElement = libraryNamespace() <> null - + ownedMember = ownedMembership->selectByKind(OwningMembership).ownedMemberElement - - - <p>The <code>shortName</code> of an <code>Element</code> is given by the result of the <code>effectiveShortName()</code> operation.</p> + + + <p>The <code>importedMemberships</code> of a <code>Namespace</code> are derived using the <code>importedMemberships()</code> operation, with no initially <code>excluded</code> <code>Namespaces</code>.</p> - + OCL2.0 - shortName = effectiveShortName() + importedMembership = importedMemberships(Set{}) - - - <p>The <code>owningNamespace</code> of an <code>Element</code> is the <code>membershipOwningNamespace</code> of its <code>owningMembership</code> (if any).</p> + + + <p>The <code>ownedImports</code> of a <code>Namespace</code> are all its <code>ownedRelationships</code> that are <code>Imports</code>.</p> - + OCL2.0 - owningNamespace = - if owningMembership = null then null - else owningMembership.membershipOwningNamespace - endif + ownedImport = ownedRelationship->selectByKind(Import) - - - <p>The <code>textualRepresentations</code> of an <code>Element</code> are its <code>ownedElements</code> that are <code>TextualRepresentations</code>.</p> + + + <p>The <code>ownedMemberships</code> of a <code>Namespace</code> are all its <code>ownedRelationships</code> that are <code>Memberships</code>.</p> - + OCL2.0 - textualRepresentation = ownedElement->selectByKind(TextualRepresentation) + ownedMembership = ownedRelationship->selectByKind(Membership) - - - <p>The <code>owningRelationship</code> of this <code>Element</code>, if that <code>Relationship</code> is a <code>Membership</code>.</p> - - - - - - - - <p>The Relationship for which this Element is an <tt>ownedRelatedElement</tt>, if any.</p> - - - - - - - - <p>The <code>Namespace</code> that owns this <code>Element</code>, which is the <code>membershipOwningNamespace</code> of the <code>owningMembership</code> of this <code>Element</code>, if any.</p> - - - - - - - - <p>The globally unique identifier for this Element. This is intended to be set by tooling, and it must not change during the lifetime of the Element.</p> - - - - - - <p>The Relationships for which this Element is the <tt>owningRelatedElement</tt>.</p> - - - - - - - <p>The owner of this Element, derived as the <code>owningRelatedElement</code> of the <code>owningRelationship</code> of this Element, if any.</p> - - - - - - - <p>The Elements owned by this Element, derived as the <tt>ownedRelatedElements</tt> of the <tt>ownedRelationships</tt> of this Element.</p> + + + + <p>All <code>Memberships</code> in this <code>Namespace</code>, including (at least) the union of <code>ownedMemberships</code> and <code>importedMemberships</code>.</p> - - + + - - - <p>The Documentation owned by this Element.</p> + + + <p>The <code>ownedRelationships</code> of this <code>Namespace</code> that are <code>Imports</code>, for which the <code>Namespace</code> is the <code>importOwningNamespace</code>.</p> + - - + + - - - <p>The <code>ownedRelationships</code> of this <code>Element</code> that are <code>Annotations</code>, for which this <code>Element</code> is the <code>annotatedElement</code>.</code> + + + <p>The set of all member <code>Elements</code> of this <code>Namespace</code>, which are the <code>memberElements</code> of all <code>memberships</code> of the <code>Namespace</code>.</p> + - - + + - - - <p>The <code>TextualRepresentations</code> that annotate this <code>Element</code>.</p> + + + <p>The owned <code>members</code> of this <code>Namespace</code>, which are the <cpde><code>ownedMemberElements</code> of the <code>ownedMemberships</code> of the <code>Namespace</code>.</p> + - - + + - - - <p>Various alternative identifiers for this Element. Generally, these will be set by tools.</p> + + + <p>The <code>ownedRelationships</code> of this <code>Namespace</code> that are <code>Memberships</code>, for which the <code>Namespace</code> is the <code>membershipOwningNamespace</code>.</p> + - - - + + - - - <p>An optional alternative name for the <code>Element</code> that is intended to be shorter or in some way more succinct than its primary <code>name</code>. It may act as a modeler-specified identifier for the <code>Element</code>, though it is then the responsibility of the modeler to maintain the uniqueness of this identifier within a model or relative to some other context.</p> + + + <p>The <code>Memberships</code> in this <code>Namespace</code> that result from the <code>ownedImports</code> of this <code>Namespace</code>.</p> - - - + + - - - <p>The declared name of this <code>Element</code>.</p> + + + <p>Return the names of the given <code>element</code> as it is known in this <code>Namespace</code>.</p> - - - - - - - <p>The short name to be used for this <code>Element</code> during name resolution within its <code>owningNamespace</code>. This is derived using the <code>effectiveShortName()</code> operation. By default, it is the same as the <code>declaredShortName</code>, but this is overridden for certain kinds of <code>Elements</code> to compute a <code>shortName</code> even when the <code>declaredName</code> is null.</p> + + + OCL2.0 + let elementMemberships : Sequence(Membership) = + memberships->select(memberElement = element) in +memberships.memberShortName-> + union(memberships.memberName)-> + asSet() + + + + + + + + + + + + <p>Returns this visibility of <code>mem</code> relative to this <code>Namespace</code>. If <code>mem</code> is an <code>importedMembership</code>, this is the <code>visibility</code> of its Import. Otherwise it is the <code>visibility</code> of the <code>Membership</code> itself.</p> + - - - - - - - <p>The name to be used for this <code>Element</code> during name resolution within its <code>owningNamespace</code>. This is derived using the <code>effectiveName()</code> operation. By default, it is the same as the <code>declaredName</code>, but this is overridden for certain kinds of <code>Elements</code> to compute a <code>name</code> even when the <code>declaredName</code> is null.</p> + + + OCL2.0 + if importedMembership->includes(mem) then + ownedImport-> + select(importedMemberships(Set{})->includes(mem)). + first().visibility +else if memberships->includes(mem) then + mem.visibility +else + VisibilityKind::private +endif + + + + + + + + <p>If <code>includeAll = true</code>, then return all the <code>Memberships</code> of this <code>Namespace</code>. Otherwise, return only the publicly visible <code>Memberships</code> of this <code>Namespace</code>, including <code>ownedMemberships</code> that have a <code>visibility</code> of <code>public</code> and <code>Memberships</code> imported with a <code>visibility</code> of <code>public</code>. If <code>isRecursive = true</code>, also recursively include all visible <code>Memberships</code> of any <code>public</code> owned <code>Namespaces</code>, or, if <code>IncludeAll = true</code>, all <code>Memberships</code> of all owned <code>Namespaces</code>. When computing imported <code>Memberships</code>, ignore this <code>Namespace</code> and any <code>Namespaces</code> in the given <code>excluded</code> set.</p> + - - - - - - - <p>The full ownership-qualified name of this <code>Element</code>, represented in a form that is valid according to the KerML textual concrete syntax for qualified names (including use of unrestricted name notation and escaped characters, as necessary). The <code>qualifiedName</code> is null if this <code>Element</code> has no <code>owningNamespace</code> or if there is not a complete ownership chain of named <code>Namespaces</code> from a root <code>Namespace</code> to this <code>Element</code>. If the <code>owningNamespace</code> has other <code>Elements</code> with the same name as this one, then the <code>qualifiedName</code> is null for all such <code>Elements</code> other than the first.</p> + + + OCL2.0 + let visibleMemberships : OrderedSet(Membership) = + if includeAll then membershipsOfVisibility(null, excluded) + else membershipsOfVisibility(VisibilityKind::public, excluded) + endif in +if not isRecursive then visibleMemberships +else visibleMemberships->union(ownedMember-> + selectAsKind(Namespace). + select(includeAll or owningMembership.visibility = VisibilityKind::public)-> + visibleMemberships(excluded->including(self), true, includeAll)) +endif + + + + + + + + + + + + + + + + + + + + + <p>Derive the imported <code>Memberships</code> of this <code>Namespace</code> as the <code>importedMembership</code> of all <code>ownedImports</code>, excluding those Imports whose <code>importOwningNamespace</code> is in the <code>excluded</code> set, and excluding <code>Memberships</code> that have distinguisibility collisions with each other or with any <code>ownedMembership</code>.</p> + - - - - - - - <p>Whether all necessary implied Relationships have been included in the <code>ownedRelationships</code> of this Element. This property may be true, even if there are not actually any <code>ownedRelationships</code> with <code>isImplied = true</code>, meaning that no such Relationships are actually implied for this Element. However, if it is false, then <code>ownedRelationships</code> may <em>not</em> contain any implied Relationships. That is, either <em>all</em> required implied Relationships must be included, or none of them.</p> + + + OCL2.0 + ownedImport.importedMemberships(excluded->including(self)) + + + + + + + + + + + + + + <p>If <code>visibility</code> is not null, return the <code>Memberships</code> of this <code>Namespace</code> with the given <code>visibility</code>, including <code>ownedMemberships</code> with the given <code>visibility</code> and <code>Memberships</code> imported with the given <code>visibility</code>. If <code>visibility</code> is null, return all <code>ownedMemberships</code> and imported <code>Memberships</code> regardless of visibility. When computing imported <code>Memberships</code>, ignore this <code>Namespace</code> and any <code>Namespaces</code> in the given <code>excluded</code> set.</p> - - - - - - <p>Whether this Element is contained in the ownership tree of a library model.</p> + + + OCL2.0 + ownedMembership-> + select(mem | visibility = null or mem.visibility = visibility)-> + union(ownedImport-> + select(imp | visibility = null or imp.visibility = visibility). + importedMemberships(excluded->including(self))) + + + + + + + + + + + + + + + + + + <p>Resolve the given qualified name to the named <code>Membership</code> (if any), starting with this <code>Namespace</code> as the local scope. The qualified name string must conform to the concrete syntax of the KerML textual notation. According to the KerML name resolution rules every qualified name will resolve to either a single <code>Membership</code>, or to none.</p> + - - - - - <p>Return <code>name</code>, if that is not null, otherwise the <code>shortName</code>, if that is not null, otherwise null. If the returned value is non-null, it is returned as-is if it has the form of a basic name, or, otherwise, represented as a restricted name according to the lexical structure of the KerML textual notation (i.e., surrounded by single quote characters and with special characters escaped).</p> + + + OCL2.0 + let qualification : String = qualificationOf(qualifiedName) in +let name : String = unqualifiedNameOf(qualifiedName) in +if qualification = null then resolveLocal(name) +else if qualification = '$' then resolveGlobal(name) +else + let namespaceMembership : Membership = resolve(qualification) in + if namespaceMembership = null or + not namespaceMembership.memberElement.oclIsKindOf(Namespace) + then null + else + namespaceMembership.memberElement.oclAsType(Namespace). + resolveVisible(name) + endif +endif endif + + + + + + + + + + + + + <p>Resolve the given qualified name to the named <code>Membership</code> (if any) in the effective global <code>Namespace</code> that is the outermost naming scope. The qualified name string must conform to the concrete syntax of the KerML textual notation.</p> + - + + + English + No OCL + + + - - + + + + - - - <p>Return an effective <code>shortName</code> for this <code>Element</code>. By default this is the same as its <code>declaredShortName</code>.</p> + + + <p>Resolve a simple <code>name</code> starting with this <code>Namespace</code> as the local scope, and continuing with containing outer scopes as necessary. However, if this <code>Namespace</code> is a root <code>Namespace</code>, then the resolution is done directly in global scope.</p> + - - + + OCL2.0 - declaredShortName + if owningNamespace = null then resolveGlobal(name) +else + let memberships : Membership = membership-> + select(memberShortName = name or memberName = name) in + if memberships->notEmpty() then memberships->first() + else owningNamespace.resolveLocal(name) + endif +endif - + - - + + + + - - - <p>Return an effective <code>name</code> for this <code>Element</code>. By default this is the same as its <code>declaredName</code>.</p> + + + <p>Resolve a simple name from the visible <code>Memberships</code> of this <code>Namespace</code>.</p> + - - + + OCL2.0 - declaredName + let memberships : Sequence(Membership) = + visibleMemberships(Set{}, false, false)-> + select(memberShortName = name or memberName = name) in +if memberships->isEmpty() then null +else memberships->first() +endif - + - - + + + + - - - <p>By default, return the library Namespace of the <code>owningRelationship</code> of this Element, if it has one.</p> + + + <p>Return a string with valid KerML syntax representing the qualification part of a given <code>qualifiedName</code>, that is, a qualified name with all the segment names of the given name except the last. If the given <code>qualifiedName</code> has only one segment, then return null.</p> - - - OCL2.0 - if owningRelationship <> null then owningRelationship.libraryNamespace() -else null endif + + + English + No OCL - - - + + + + + + + - - - <p>Return a unique description of the location of this <code>Element</code> in the containment structure rooted in a root <code>Namespace</code>. If the <code>Element</code> has a non-null <code>qualifiedName</code>, then return that. Otherwise, if it has an <code>owningRelationship</code>, then return the string constructed by appending to the <code>path</code> of it's <code>owningRelationship</code> the character <code>/</code> followed by the string representation of its position in the list of <code>ownedRelatedElements</code> of the <code>owningRelationship</code> (indexed starting at 1). Otherwise, return the empty string.</p> - -<p>(Note that this operation is overridden for <code>Relationships</code> to use <code>owningRelatedElement</code> when appropriate.)</p> + + + <p>Return the simple name that is the last segment name of the given <code>qualifiedName</code>. If this segment name has the form of a KerML unrestricted name, then "unescape" it by removing the surrounding single quotes and replacing all escape sequences with the specified character.</p> - - - OCL2.0 - if qualifiedName <> null then qualifiedName -else if owningRelationship <> null then - owningRelationship.path() + '/' + - owningRelationship.ownedRelatedElement->indexOf(self).toString() - -- A position index shall be converted to a decimal string representation - -- consisting of only decimal digits, with no sign, leading zeros or leading - -- or trailing whitespace. -else '' -endif endif + + + English + No OCL - + + + + - - - - - - - - - - - - - + + + + <p>A NamespaceImport that has a certain <code>importedNamespace</code>.</p> + + + - - - - - - <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> - -<p>The <code>relatedElements</code> of a <code>Relationship</code> are divided into <code>source</code> and <code>target</code> <code>Elements</code>. The <code>Relationship</code> is considered to be directed from the <code>source</code> to the <code>target</code> <code>Elements</code>. An undirected <code>Relationship</code> may have either all <code>source</code> or all <code>target</code> <code>Elements</code>.</p> - -<p>A &quot;relationship <code>Element</code>&quot; in the abstract syntax is generically any <code>Element</code> that is an instance of either <code>Relationship</code> or a direct or indirect specialization of <code>Relationship</code>. Any other kind of <code>Element</code> is a &quot;non-relationship <code>Element</code>&quot;. It is a convention of that non-relationship <code>Elements</code> are <em>only</em> related via reified relationship <code>Elements</code>. Any meta-associations directly between non-relationship <code>Elements</code> must be derived from underlying reified <code>Relationship</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> - - - <p>The <code>relatedElements</code> of a <code>Relationship</code> consist of all of its <code>source</code> <code>Elements</code> followed by all of its <code>target</code> <code>Elements</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 - relatedElement = source->union(target) + ownedMemberName = ownedMemberElement.name - - - - <p>The Elements that are related by this Relationship, derived as the union of the <code>source</code> and <code>target</code> Elements of the Relationship.</p> + + + <p>The <code>ownedMemberShortName</code> of an <code>OwningMembership</code> is the <code>shortName</code> of its <code>ownedMemberElement</code>.</p> - - - - - - <p>The <code>relatedElements</code> to which this Relationship is considered to be directed.</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>relatedElements</c ode> from which this Relationship is considered to be directed.</p> - - - + + - - - <p>The <tt>relatedElement</tt> of this Relationship that owns the Relationship, if any.</p> + + + <p>The <code>elementId</code> of the <code>ownedMemberElement</code>.</p> - - + - - - <p>The <tt>relatedElements</tt> of this Relationship that are owned by the Relationship.</p> + + + <p>The <code>shortName</code> of the <code>ownedMemberElement</code>.</p> - - + + + - - - <p>Whether this Relationship was generated by tooling to meet semantic rules, rather than being directly created by a modeler.</p> + + + <p>The <code>name</code> of the <code>ownedMemberElement</code>.</p> + - - + + + - - - <p>Return whether this Relationship has either an <code>owningRelatedElement</code> or <code>owningRelationship</code> that is a library element.</p> - - - - OCL2.0 - if owningRelatedElement <> null then owningRelatedElement.libraryNamespace() -else if owningRelationship <> null then owningRelationship.libraryNamespace() -else null endif endif - - - - - - - - - - <p>If the <code>owningRelationship</code> of the <code>Relationship</code> is null but its <code>owningRelatedElement</code> is non-null, construct the <code>path</code> using the position of the <code>Relationship</code> in the list of <code>ownedRelationships</code> of its <code>owningRelatedElement</code>. Otherwise, return the <code>path</code> of the <code>Relationship</code> as specified for an <code>Element</code> in general.</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 owningRelationship = null and owningRelatedElement <> null then - owningRelatedElement.path() + '/' + - owningRelatedElement.ownedRelationship->indexOf(self).toString() - -- A position index shall be converted to a decimal string representation - -- consisting of only decimal digits, with no sign, leading zeros or leading - -- or trailing whitespace. -else self.oclAsType(Element).path() + if ownedElement.qualifiedName <> null then + ownedElement.qualifiedName + '/owningMembership' +else self.oclAsType(Relationship).path() endif - + - - - - - + + + + <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>The AssignmentActionUsages that gave a certain <code>referent</code> Expression.</p> + + + + <p>The Namespace the has a certain Element as a <code>member</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>MembershipImport</code> is an <code>Import</code> that imports its <code>importedMembership</code> into the <code>importOwningNamespace</code>. If <code>isRecursive = true</code> and the <code>memberElement</code> of the <code>importedMembership</code> is a <code>Namespace</code>, then the equivalent of a recursive <code>NamespaceImport</code> is also performed on that <code>Namespace</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> + + + <p>The <code>importedElement</code> of a <code>MembershipImport</code> is the <code>memberElement</code> of its <code>importedMembership</code>.</p> - + OCL2.0 - targetConnector->selectByKind(Succession)-> - collect(connectorEnd->at(1))-> - forAll(sourceMult | - multiplicityHasBounds(sourceMult, 0, 1)) + importedElement = importedMembership.memberElement - - - <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>Membership</code> to be imported.</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> + + + + + + <p>Returns at least the <code>importedMembership</code>. If <code>isRecursive = true</code> and the <code>memberElement</code> of the <code>importedMembership</code> is a <code>Namespace</code>, then <code>Memberships</code> are also recursively imported from that <code>Namespace</code>.</p> + - - OCL2.0 - specializesFromLibrary('Actions::Action::merges') - - - + + + OCL2.0 + if not isRecursive or + not importedElement.oclIsKindOf(Namespace) or + excluded->includes(importedElement) +then Sequence{importedMembership} +else importedElement.oclAsType(Namespace). + visibleMemberships(excluded, true, importAll)-> + prepend(importedMembership) +endif + + + + + + + + + + + - - - - <p>The <code>ForLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>seqArgument</code>.</p> + + + + <p>An Import with a certain <code>importedElement</code>.</p> - - + + - - - - <p>The <code>LoopActionUsage</code> that has a certain <code>ActionUsage</code> as its <code>bodyAction</code>.</p> + + + + <p>The Namespace that has a certain <code>membership</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 - 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::DecisionPerformance::outgoingHBLink'))) - - - - - - - - <p>The <code>SendActionUsage</code> that has a certain <code>Expression</code> as its <code>senderArgument</code>.</p> + + + + <p>The <code>FlowUsages<code> that have a certain <code>Interaction</code> as their <code>flowDefinition</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>A <code>SuccessionFlowUsage</code> is a <code>FlowUsage</code> that is also a KerML <code>SuccessionFlow</code>.</p> - - - <p>The <code>seqArgument</code> of a <code>ForLoopActionUsage</code> is its first argument <code>Expression</code>.</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> + + + <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 - isSubactionUsage() implies - specializesFromLibrary('Actions::Action::forLoops') + specializesFromLibrary('Flows::successionFlows') - - - <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 <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 - loopVariable <> null and -loopVariable.redefinesFromLibrary('Actions::ForLoopAction::var') + specializesFromLibrary('Flows::MessageAction') - - - <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>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 - specializesFromLibrary('Actions::forLoopActions') + flowEnd->size() = 2 implies + specializesFromLibrary('Flows::Message') - - - <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>A <code>FlowDefinition</code> may not have more than two <code>flowEnds</code>.</p> - + OCL2.0 - loopVariable = - if ownedFeature->isEmpty() or - not ownedFeature->first().oclIsKindOf(ReferenceUsage) then - null - else - ownedFeature->first().oclAsType(ReferenceUsage) - endif + flowEnd->size() <= 2 - - - <p>The first <code>ownedFeature</code> of a <code>ForLoopActionUsage</code> must be a <code>ReferenceUsage</code>.</p> + + + + + <p>The <code>Usages</code> that define the things related by the <code>FlowDefinition</code>.</p> - + + + + + + + + <p>The <code>FlowDefinitions<code> that have a certain Usage as <code>flowEnd</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 - ownedFeature->notEmpty() and -ownedFeature->at(1).oclIsKindOf(ReferenceUsage) - + specializesFromLibrary('Flows::messages') - - - <p>A <code>ForLoopActionUsage</code> must have two owned <code>input</code> <code>parameters</code>.</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 - inputParameters()->size() = 2 + ownedEndFeatures->notEmpty() implies + specializesFromLibrary('Flows::flows') - - - - <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>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 <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 Activities that feature a certain ActionUsage.</p> - - - + + + @@ -8050,35 +7961,85 @@ ownedFeature->at(1).oclIsKindOf(ReferenceUsage) - - - - + + + <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>The <code>SendActionUsage</code> that has a certain <code>Expression<code> as its <code>receiverArgument</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>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>A <code>JoinNode</code> may have at most one outgoing <code>Succession</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> - + OCL2.0 - sourceConnector->selectByKind(Succession)->size() <= 1 + specializesFromLibrary('Actions::Action') - - - <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>actions</code> of a <code>ActionDefinition</code> are those of its <code>usages</code> that are <code>ActionUsages</code>.</p> - + OCL2.0 - specializesFromLibrary('Actions::Action::join') + 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 <code>ForLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>seqArgument</code>.</p> + + + + + + + + + <p>The IfActionUsage that has a certain ActionUsage as its <code>elseAction</code>.</p> + + + + @@ -8116,151 +8077,73 @@ ownedFeature->at(1).oclIsKindOf(ReferenceUsage) <p>The AcceptActionUsage that owns the <code>payloadParameter</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 - 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>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 AssignmentActionUsage that has a certain Expression as its <code>targetArgument</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 <code>IfActionUsage</code> that has a certain <code>Expression</code> as its <code>ifArgument</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>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 - owningFeatureMembership <> null and -(owningFeatureMembership.oclIsKindOf(StateSubactionMembership) or - owningFeatureMembership.oclIsKindOf(TransitionFeatureMembership)) implies - payloadArgument <> null + targetConnector->selectByKind(Succession)->size() <= 1 - - - <p>The <code>receiverArgument</code> of a <code>SendActionUsage</code> is its third argument <code>Expression</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 - receiverArgument = argument(3) + sourceConnector->selectAsKind(Succession)-> + collect(connectorEnd->at(2))-> + forAll(targetMult | + multiplicityHasBounds(targetMult, 0, 1)) - - - <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>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 - isSubactionUsage() implies - specializesFromLibrary('Actions::Action::acceptSubactions') + specializesFromLibrary('Actions::Action::decisions') - - - <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>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 - specializesFromLibrary('Actions::sendActions') + sourceConnector->selectByKind(Succession)-> + forAll(subsetsChain(self, + resolveGlobal('ControlPerformances::DecisionPerformance::outgoingHBLink'))) - - - - <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> - - - - - + @@ -8344,228 +8227,92 @@ endif - - - - <p>The ActionUsages being typed by a certain Behavior.</p> - - - - - - - - - <p>The <code>IfActionUsage</code> that has a certain <code>Expression</code> as its <code>ifArgument</code>.</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>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>valueArgument</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>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 <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 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> + + + <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 - 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 + referencedFeatureTarget() <> null implies + referencedFeatureTarget().oclIsKindOf(ActionUsage) - - - - - <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>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>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> + + + <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 inputParameters()->size() < i then null -else inputParameters()->at(i) + if performedAction <> self then performedAction +else self.oclAsType(Usage).namingFeature() 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>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 - 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 + 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 - isComposite and owningType <> null and -(owningType.oclIsKindOf(ActionDefinition) or - owningType.oclIsKindOf(ActionUsage)) and -(owningFeatureMembership.oclIsKindOf(StateSubactionMembership) implies - owningFeatureMembership.oclAsType(StateSubactionMembership).kind = - StateSubactionKind::do) - - - - - - + + OCL2.0 + specializesFromLibrary('Actions::Action::forks') + + + @@ -8709,182 +8456,219 @@ targetParameter.ownedFeature->first().ownedFeature->first().redefines(referent)< - - - - <p>The <code>WhileLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>whileArgument</code>.</p> - - - - - - - - - The <code>ForLoopActionUsage</code> that has a certain <code>ReferenceUsage</code> as its <code>loopVariable</code>. - - - - - - - - <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>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>All outgoing <code>Successions</code> from a <code>ControlNode</code> must have a source <code>multiplicity</code> of <code>1..1</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 - sourceConnector->selectByKind(Succession)-> - collect(connectorEnd->at(1).multiplicity)-> - forAll(sourceMult | - multiplicityHasBounds(sourceMult, 1, 1)) + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::subactions') - - - <p>The <code>owningType</code> of a <code>ControlNode</code> must be an <code>ActionDefinition</code> or <code>ActionUsage</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 - owningType <> null and -(owningType.oclIsKindOf(ActionDefinition) or - owningType.oclIsKindOf(ActionUsage)) + specializesFromLibrary('Actions::actions') - - - <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>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 - targetConnector->selectByKind(Succession)-> - collect(connectorEnd->at(2).multiplicity)-> - forAll(targetMult | - multiplicityHasBounds(targetMult, 1, 1)) + isComposite and owningType <> null and +(owningType.oclIsKindOf(PartDefinition) or + owningType.oclIsKindOf(PartUsage)) implies + specializesFromLibrary('Parts::Part::ownedActions') - - - <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>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 - specializesFromLibrary('Action::Action::controls') + 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>A <code>ControlNode</code> must be composite.</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 - 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>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 - mult <> null and -if mult.oclIsKindOf(MultiplicityRange) then - mult.oclAsType(MultiplicityRange).hasBounds(lower, upper) + if inputParameter(i) = null then null else - mult.allSuperTypes()->exists( - oclisKindOf(MultiplicityRange) and - oclAsType(MultiplicityRange).hasBounds(lower, upper) + 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 PerformActionUsages that have a certain ActionUsage as their <code>performedAction</code>.</p> + + + + <p>The <code>SendActionUsage</code> that has a certain <code>Expression</code> as its <code>senderArgument</code>.</p> - - + + - - - - <p>The AssignmentActionUsage that has a certain Expression as its <code>targetArgument</code>.</p> + + + + <p>The <code>WhileLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>untilArgument</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> + + + + + + + + + + <p>The <code>WhileLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>whileArgument</code>.</p> - - OCL2.0 - specializesFromLibrary('Actions::Action::forks') - - - + + + - - - - <p>The <code>SendActionUsage</code> that has a certain <code>Expression<code> as its <code>receiverArgument</code>.</p> + + + + <p>The <code>TerminateActionUsage</code> that has a certain <code>Expression</code> as its <code>terminatedOccurrenceArgument</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>The AssignmentActionUsages that gave a certain <code>referent</code> Expression.</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 <code>LoopActionUsage</code> that has a certain <code>ActionUsage</code> as its <code>bodyAction</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> + + + + + + + + The <code>ForLoopActionUsage</code> that has a certain <code>ReferenceUsage</code> as its <code>loopVariable</code>. - + + + @@ -8961,49 +8745,13 @@ endif - - - - <p>The <code>TerminateActionUsage</code> that has a certain <code>Expression</code> as its <code>terminatedOccurrenceArgument</code>.</p> - - - - - - - - - <p>The AssignmentActionUsage that has a certain Expression as its <code>valueArgument</code>.</p> - - - - - - - - - <p>The IfActionUsage that has a certain ActionUsage as its <code>elseAction</code>.</p> - - - - - - - - - <p>The AcceptActionUsage that has a certain Expression as its <code>receiverArgument</code>.</p> - - - - - - - - - <p>The <code>IfActionUsage</code> that has a certain <code>ActionUsage</code> as its <code>thenAction</code>.</p> + + + + <p>The <code>SendActionUsage</code> that has a certain <code>Expression</code> as its <code>itemsArgument</code>.</p> - - + + @@ -9109,9 +8857,51 @@ endif <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 AcceptActionUsage that has a certain Expression as its <code>receiverArgument</code>.</p> + + + + + + + + + <p>The PerformActionUsages that have a certain ActionUsage as their <code>performedAction</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 + sourceConnector->selectByKind(Succession)->size() <= 1 + + + + + <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') + + + @@ -9120,7 +8910,7 @@ endif - <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>An <code>AcceptUsageAction</code> must have at least one 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 @@ -9244,3671 +9034,4389 @@ owningType.oclAsType(TransitionUsage).triggerAction->includes(self) - - - <p>A <code>UseCaseUsage</code> is a <code>Usage</code> of a <code>UseCaseDefinition</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 ActionUsages being typed by a certain Behavior.</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 + 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>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>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 + 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> + + + 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::sendSubactions') + + + + + <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 <code>IfActionUsage</code> that has a certain <code>ActionUsage</code> as its <code>thenAction</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>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>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 - includedUseCase = ownedUseCase-> - selectByKind(IncludeUseCaseUsage). - useCaseIncluded + sourceConnector->selectByKind(Succession)-> + collect(connectorEnd->at(1).multiplicity)-> + forAll(sourceMult | + multiplicityHasBounds(sourceMult, 1, 1)) - - - <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 <code>owningType</code> of a <code>ControlNode</code> must be an <code>ActionDefinition</code> or <code>ActionUsage</code>.</p> - + OCL2.0 - specializesFromLibrary('UseCases::useCases') + owningType <> null and +(owningType.oclIsKindOf(ActionDefinition) or + owningType.oclIsKindOf(ActionUsage)) - - - <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>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 - isComposite and owningType <> null and -(owningType.oclIsKindOf(UseCaseDefinition) or - owningType.oclIsKindOf(UseCaseUsage)) implies - specializesFromLibrary('UseCases::UseCase::subUseCases') + targetConnector->selectByKind(Succession)-> + collect(connectorEnd->at(2).multiplicity)-> + forAll(targetMult | + multiplicityHasBounds(targetMult, 1, 1)) - - - - <p>The <code>UseCaseDefinition</code> that is the <code>definition</code> of this <code>UseCaseUsage</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 <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> + + OCL2.0 + specializesFromLibrary('Action::Action::controls') + + + + + <p>A <code>ControlNode</code> must be composite.</p> - - - - - - - - <p>The UseCaseDefinition that includes a certain <code>includedUseCase</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>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>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>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>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 - includedUseCase = ownedUseCase-> - selectByKind(IncludeUseCaseUsage). - useCaseIncluded + 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>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>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 - specializesFromLibrary('UseCases::UseCase') + owningType <> null and +(owningType.oclIsKindOf(ItemDefinition) or + owningType.oclIsKindOf(ItemUsage)) implies + specializesFromLibrary('Items::Item::checkedConstraints') - - - - <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 (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 UseCaseUsage that includes a certain <code>includedUseCase</code>.</p> - - - - - - - - - <p>The IncludeUseCaseUsages that have a certain UseCaseUsage as their <code>includedUseCase</code>.</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 UseCaseUsages being typed by a certain UseCaseDefinition.</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>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>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>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>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 - owningType <> null and -(owningType.oclIsKindOf(UseCaseDefinition) or - owningType.oclIsKindOf(UseCaseUsage) implies - specializesFromLibrary('UseCases::UseCase::includedUseCases') + assertedConstraint = + if referencedFeatureTarget() = null then self + else if referencedFeatureTarget().oclIsKindOf(ConstraintUsage) then + referencedFeatureTarget().oclAsType(ConstraintUsage) + else null + endif endif - - - <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>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 isNegated then + specializesFromLibrary('Constraints::negatedConstraintChecks') +else + specializesFromLibrary('Constraints::assertedConstraintChecks') +endif + + + + + <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 referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(UseCaseUsage) + referencedFeatureTarget().oclIsKindOf(ConstraintUsage) - - - - - <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>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 StateDefinitions with a certain <tt>doAction</tt>.</p> - - - - - - - - - <p>The ExhibitStateUsages that have a certain StateUsage as their <tt>exhibitedState</tt>.</p> - - - - - - - - - <p>The StateUsages with a certain <tt>exitAction</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>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>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>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 + specializesFromLibrary('Constraints::ConstraintCheck') + + + + - - - - <p>The StateDefinitions with a certain <tt>entryAction</tt>.</p> + + + + <p>The ConstraintUsages typed by a certain Predicate.</p> - - + + - - - - <p>The StateUsages with a certain <tt>doAction</tt>.</p> + + + + <p>The AssertConstraintUsages that have a certain ConstraintUsage as their <tt>assertedConstraint</tt>.</p> - - + + - - - - <p>The StateDefinitions featuring a certain StateUsage.</p> + + + + <p>The RequirementVerificationMembership that has a certain RequirementUsage as its <code>verifiedRequirement</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>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>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 <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>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>A <code>RequirementVerificationMembership</code> must have <code>kind = requirement</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 + kind = RequirementConstraintKind::requirement - - - <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>owningType</code> of a <code>RequirementVerificationMembership</code> must a <code>RequirementUsage</code> that is owned by an <code>ObjectiveMembership</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 + owningType.oclIsKindOf(RequirementUsage) and +owningType.owningFeatureMembership <> null and +owningType.owningFeatureMembership.oclIsKindOf(ObjectiveMembership) - - - <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 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> - - 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>kind</code> of a <code>RequirementVerificationMembership</code> must be <code>requirement</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>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>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 - exitAction = - let exitMemberships : Sequence(StateSubactionMembership) = - ownedMembership-> - selectByKind(StateSubactionMembership)-> - select(kind = StateSubactionKind::exit) in - if exitMemberships->isEmpty() then null - else exitMemberships->at(1) + verifiedRequirement = + if objectiveRequirement = null then OrderedSet{} + else + objectiveRequirement.featureMembership-> + selectByKind(RequirementVerificationMembership). + verifiedRequirement->asOrderedSet() 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>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('States::stateActions') + specializesFromLibrary('VerificationCases::VerificationCase') - - - <p>A <code>StateUsage</code> must not have more than one owned <code>StateSubactionMembership</code> of each <code>kind</code>.</p> + + + + <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> + + OCL2.0 - ownedMembership-> - selectByKind(StateSubactionMembership)-> - isUnique(kind) + verifiedRequirement = + if objectiveRequirement = null then OrderedSet{} + else + objectiveRequirement.featureMembership-> + selectByKind(RequirementVerificationMembership). + verifiedRequirement->asOrderedSet() + endif - - - <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>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 - isSubstateUsage(true) implies - specializesFromLibrary('States::StateAction::substates') + specializesFromLibrary('VerificationCases::verificationCases') - - - <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> + + + 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(PartDefinition) or - owningType.oclIsKindOf(PartUsage)) implies - specializesFromLibrary('Parts::Part::ownedStates') + (owningType.oclIsKindOf(VerificationCaseDefinition) or + owningType.oclIsKindOf(VerificationCaseUsage)) implies + specializesFromLibrary('VerificationCases::VerificationCase::subVerificationCases') - - - - <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>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>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>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>VerificationCase</code> that is the <code>definition</code> of this <code>VerificationCaseUsage</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>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>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 that is guarded by a certain Expression.</p> + + + + <p>The VerificationUsages that are defined by a certain <code>verificationCaseDefinition</code>.</p> - - + + - - - - <p>The TransitionFeatureMembership that owns a certain Step (if any).</p> + + + + <p>The RequirementVerificationMembership that owns a certain RequirementUsage as its <code>ownedRequirement</code>.</p> - - + + - - - - <p>The TransitionUsage that is triggered by a certain AcceptActionUsage.</p> + + + + <p>The VerificationCaseUsages that verify a certain <code>verifiedRequirement</code>.</p> - - + + - - - - <p>The Transition that owns a certain Succession.</p> + + + + <p>The VerificationCaseDefinitions that verify a certain <code>verifiedRequirement</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 - specializesFromLibrary('States::StateAction') - - - - - <p>A <code>StateDefinition</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>The <code>states</code> of a <code>StateDefinition</code> are those of its <code>actions</code> that are <code>StateUsages</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> - - - 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>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> - + 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 + owningType.oclIsType(RequirementDefinition) or +owningType.oclIsType(RequiremenCaseRequirementDefinition) or +owningType.oclIsType(CaseDefinition) or +owningType.oclIsType(CaseUsage) + - - - <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>The <code>Usage</code< that is the <code>ownedMemberParameter</code> of this <code>SubjectMembership</code>.</p> - - OCL2.0 - isParallel implies - ownedAction.incomingTransition->isEmpty() and - ownedAction.outgoingTransition->isEmpty() - - - - - <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>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>FramedConcernMembership</code> must have <code>kind = requirement</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 + kind = RequirementConstraintKind::requirement - - - - <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>kind</code> of an <code>FramedConcernMembership</code> must be <code>requirement</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>ConcernUsage</code> that is the <code>ownedConstraint</code> of this <code>FramedConcernMembership</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>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>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 RequirementDefinitions that have a certain Usage as their <code>subjectParameter</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>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 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 - 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>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 an <code>ActorMembership</code> must be a <code>RequirementDefinition</code>, <code>RequirementUsage</code>, <code>CaseDefinition</code>, or <code>CaseUsage</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(RequirementUsage) or +owningType.oclIsKindOf(RequirementDefinition) or +owningType.oclIsKindOf(CaseDefinition) or +owningType.oclIsKindOf(CaseUsage) - - - <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 - specializesFromLibrary('Actions::transitionActions') - - - - - <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>PartUsage</code> specifying the actor.</p> - - OCL2.0 - source = - let sourceFeature : Feature = sourceFeature() in - if sourceFeature = null then null - else sourceFeature.featureTarget.oclAsType(ActionUsage) - - - - - <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>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>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 - 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 - + text = documentation.body - - - <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>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 - triggerAction = ownedFeatureMembership-> - selectByKind(TransitionFeatureMembership)-> - select(kind = TransitionFeatureKind::trigger).transitionFeature-> - selectByKind(AcceptActionUsage) + assumedConstraint = ownedFeatureMembership-> + selectByKind(RequirementConstraintMembership)-> + select(kind = RequirementConstraintKind::assumption). + ownedConstraint - - - <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>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 - let successions : Sequence(Successions) = - ownedMember->selectByKind(Succession) in -successions->notEmpty() and -successions->at(1).targetFeature.featureTarget-> - forAll(oclIsKindOf(ActionUsage)) + requiredConstraint = ownedFeatureMembership-> + selectByKind(RequirementConstraintMembership)-> + select(kind = RequirementConstraintKind::requirement). + ownedConstraint - - - <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>subjectParameter</code> of a <code>RequirementDefinition</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p> - + OCL2.0 - guardExpression = ownedFeatureMembership-> - selectByKind(TransitionFeatureMembership)-> - select(kind = TransitionFeatureKind::trigger).transitionFeature-> - selectByKind(Expression) + subjectParameter = + let subjects : OrderedSet(SubjectMembership) = + featureMembership->selectByKind(SubjectMembership) in + if subjects->isEmpty() then null + else subjects->first().ownedSubjectParameter + endif - - - <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>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 - triggerAction->forAll(specializesFromLibrary('Actions::TransitionAction::accepter') and -guardExpression->forAll(specializesFromLibrary('Actions::TransitionAction::guard') and -effectAction->forAll(specializesFromLibrary('Actions::TransitionAction::effect')) + framedConcern = featureMembership-> + selectByKind(FramedConcernMembership). + ownedConcern - - - <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>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 - triggerAction = ownedFeatureMembership-> - selectByKind(TransitionFeatureMembership)-> - select(kind = TransitionFeatureKind::trigger).transitionFeatures-> - selectByKind(AcceptActionUsage) + actorParameter = featureMembership-> + selectByKind(ActorMembership). + ownedActorParameter - - - <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>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 - succession.sourceFeature = source + stakeholderParameter = featureMembership-> + selectByKind(StakholderMembership). + ownedStakeholderParameter - - - <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 <code>RequirementDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> - + OCL2.0 - ownedMember->selectByKind(BindingConnector)->exists(b | - b.relatedFeatures->includes(source) and - b.relatedFeatures->includes(inputParameter(1))) + featureMembership-> + selectByKind(SubjectMembership)-> + size() <= 1 - - - <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>subjectParameter</code> of a <code>RequirementDefinition</code> must be its first <code>input</code>.</p> - + OCL2.0 - triggerAction->notEmpty() implies - let payloadParameter : Feature = inputParameter(2) in - payloadParameter <> null and - payloadParameter.subsetsChain(triggerAction->at(1), triggerPayloadParameter()) + input->notEmpty() and input->first() = subjectParameter - - - <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>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 - ownedMember->selectByKind(BindingConnector)->exists(b | - b.relatedFeatures->includes(succession) and - b.relatedFeatures->includes(resolveGlobal( - 'TransitionPerformances::TransitionPerformance::transitionLink'))) + specializesFromLibrary('Requirements::RequirementCheck') - - - <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>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>The SubjectMembership that owns a particular Parameter as its <code>ownedSubjectParameter</code>.</p> + + + + + + + + + <p>The SatisfyRequirementUsages that have a certain Feature as their <tt>satisfyingFeature</tt>.</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 - if triggerAction->isEmpty() then - inputParameters()->size() >= 1 -else - inputParameters()->size() >= 2 -endif - + specializesFromLibrary('Requirements::ConcernCheck') - - - <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 RequirementConstraintMembership that owns a certain ConstraintUsage as its <code>ownedConstraint</code>.</p> - + + + + + + + + <p>The RequirementConstraintMembership that has a certain ConstraintUsage as its <code>referencedConstraint</code>.</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 - succession = ownedMember->selectByKind(Succession)->at(1) + specializesFromLibrary('Requirements::concernChecks') - - - <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>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 - source <> null and not source.oclIsKindOf(StateUsage) implies - triggerAction->isEmpty() + owningFeatureMembership <> null and +owningFeatureMembership.oclIsKindOf(FramedConcernMembership) implies + specializesFromLibrary('Requirements::RequirementCheck::concerns') - - - - <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 ConcernDefinition that is the single type of this ConcernUsage.</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 RequirementUsage that has a certain ConstraintUsage as a <code>requiredConstraint</code> (if any).</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 RequirementUsages that have a certain PartUsage as an <code>actorParameter</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>The RequirementDefinition that addresses a certain <code>addressedConcern</code>.</p> - - - - - - <p>Return the <code>payloadParameter</code> of the <code>triggerAction</code> of this <code>TransitionUsage</code>, if it has one.</p> + + + + + + + + <p>The RequirementUsages typed by a certain RequirementDefinition.</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> + + + + + + + + <p>The RequirementUsage that addresses a certain <code>addressedConcern</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 TransitionUsage outgoing from a certain source <tt>ActionUsage</tt>.</p> + + + + <p>The RequirementDefinition that has a certain ConstraintUsage as an <code>assumedConstraint</code> (if any).</p> - - + + - - - - <p>The TransitionUsage that has a certain <tt>effectAction</tt>.</p> + + + + + + + + + + <p>TheStakehplderMembership that has a certain PartUsage as its <code>ownedStakeholderParameter</code>.</p> - - + + - - - - <p>The TransitionUsage incoming to a certain target <tt>ActionUsage</tt>.</p> + + + + <p>The RequirementDefinitions that have a certain PartUsage as an <code>actorParameter</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>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>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>owningType</code> of a <code>StakeholderMembership</code> must be a <code>RequirementDefinition</code> or <code>RequirementUsage</code>.</p> - + OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(PartDefinition) or - owningType.oclIsKindOf(PartUsage)) implies - specializesFromLibrary('Parts::Part::exhibitedStates') + owningType.oclIsKindOf(RequirementUsage) or +owningType.oclIsKindOf(RequirementDefinition) - - - <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>PartUsage</code> specifying the stakeholder.</p> - + + + + + + + + <p>The AddressedConcernMembership that owns a certain ConcernUsage as its <code>ownedConcern</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 + 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>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 + ownedMember->selectByKind(BindingConnector)-> + select(b | + b.relatedElement->includes(subjectParameter) and + b.relatedElement->exists(r | r <> subjectParameter))-> + size() = 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> + + OCL2.0 referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(StateUsage) + referencedFeatureTarget().oclIsKindOf(RequirementUsage) - - - - - <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>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 + if isNegated then + specializesFromLibrary('Requirements::notSatisfiedRequirementChecks') +else + specializesFromLibrary('Requirements::satisfiedRequirementChecks') +endif + + + + + + + <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 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 <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 StateUsages with a certain <tt>entryAction</tt>.</p> + + + + <p>The RequirementUsage that has a certain ConstraintUsage as an <cod>assumedConstraint</code> (if any).</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>RequirementUsage</code> is a <code>Usage</code> of a <code>RequirementDefinition</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>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 - owningType.oclIsKindOf(StateDefinition) or -owningType.oclIsKindOf(StateUsage) + actorParameter = featureMembership-> + selectByKind(ActorMembership). + ownedActorParameter - - - - <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>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> that is the <code>ownedMemberFeature</code> of this <code>StateSubactionMembership</code>.</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 StateDefinitions with a certain <tt>exitAction</tt>.</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>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 + 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> - + OCL2.0 - kind = TransitionFeatureKind::trigger implies - transitionFeature.oclIsKindOf(AcceptActionUsage) + stakeholderParameter = featureMembership-> + selectByKind(AStakholderMembership). + ownedStakeholderParameter - - - <p>The <code>owningType</code> of a <code>TransitionFeatureMembership</code> must be a <code>TransitionUsage</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 - owningType.oclIsKindOf(TransitionUsage) + subjectParameter = + let subjects : OrderedSet(SubjectMembership) = + featureMembership->selectByKind(SubjectMembership) in + if subjects->isEmpty() then null + else subjects->first().ownedSubjectParameter + endif - - - <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>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 - 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) + text = documentation.body - - - <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>A <code>RequirementDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> - + OCL2.0 - kind = TransitionFeatureKind::effect implies - transitionFeature.oclIsKindOf(ActionUsage) + featureMembership-> + selectByKind(SubjectMembership)-> + size() <= 1 - - - - <p>Whether this <code>TransitionFeatureMembership </code> is for a <code>trigger</code>, <code>guard</code> or <code>effect</code>.</p> + + + <p>The <code>subjectParameter</code> of a <code>RequirementUsage</code> must be its first <code>input</code>.</p> - - - - <p>The <code>Step</code> that is the <code>ownedMemberFeature</code> of this <code>TransitionFeatureMembership</code>.</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 StateSubactionMembership that is the owner of a certain ActionUsage (if any).</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> but is <em>not</em> owned via a <code>RequirementConstraintMembership</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 RequirementVerificationMembership that owns a certain RequirementUsage as its <code>ownedRequirement</code>.</p> + + OCL2.0 + isComposite and owningType <> null and + (owningType.oclIsKindOf(RequirementDefinition) or + owningType.oclIsKindOf(RequirementUsage)) and + not owningFeatureMembership.oclIsKindOf(RequirementConstraintMembership) 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>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> + + 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(Feature) and + gen.oclAsType(Feature).featureTarget.oclIsKindOf(CaseUsage) implies + redefines(gen.oclAsType(Feature).featureTarget. + 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> - + OCL2.0 - kind = RequirementConstraintKind::requirement + owningFeatureMembership <> null and +owningFeatureMembership.oclIsKindOf(RequirementVerificationMembership) implies + specializesFromLibrary('VerificationCases::VerificationCase::obj::requirementVerifications') - - - <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>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> - - 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>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 <code>kind</code> of a <code>RequirementVerificationMembership</code> must be <code>requirement</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 <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 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>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> + + + <p>The <code>parameter</code> of this <code>RequirementUsage</code> that represents its subject.</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> + + + + + + <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> - - 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 <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 VerificationCaseDefinitions that verify a certain <code>verifiedRequirement</code>.</p> + + + + <p>The ConcernUsages that are typed by a certain <code>concernDefinition</code>.</p> - - + + - - - <p>A <code>VerificationCaseUsage</code> is a </code>Usage</code> of a <code>VerificationCaseDefinition</code>.</p> + + + + <p>The RequirementDefinition that has a certain ConstraintUsage as a <code>requiredConstraint</code> (if any).</p> + + + + + + + + + <p>The RequirementUsages that have a certain Usage as their <code>subjectParameter</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>verifiedRequirements</code> of a <code>VerificationCaseUsage</code> are the <code>verifiedRequirements</code> of its <code>RequirementVerificationMemberships</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 - verifiedRequirement = - if objectiveRequirement = null then OrderedSet{} - else - objectiveRequirement.featureMembership-> - selectByKind(RequirementVerificationMembership). - verifiedRequirement->asOrderedSet() - endif + 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>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>owningType</code> of a <code>RequirementConstraintMembership</code> must be a <code>RequirementDefinition</code> or a <code>RequirementUsage</code>.</p> - + OCL2.0 - specializesFromLibrary('VerificationCases::verificationCases') + owningType.oclIsKindOf(RequirementDefinition) or +owningType.oclIsKindOf(RequirementUsage) - - - 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>ownedConstraint</code> of a <code>RequirementConstraintMembership</code> must be composite.</p> - + OCL2.0 - isComposite and owningType <> null and - (owningType.oclIsKindOf(VerificationCaseDefinition) or - owningType.oclIsKindOf(VerificationCaseUsage)) implies - specializesFromLibrary('VerificationCases::VerificationCase::subVerificationCases') + ownedConstraint.isComposite - - - - <p>The <code>VerificationCase</code> that is the <code>definition</code> of this <code>VerificationCaseUsage</code>.</p> + + + + <p>Whether the <code>RequirementConstraintMembership</code> is for an assumed or required <code>ConstraintUsage</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>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 VerificationCaseUsages that verify a certain <code>verifiedRequirement</code>.</p> + + + + <p>The SatifyRequirementUsages that have a certain RequirementUsage as their <tt>satisfiedRequirement</tt>.</p> - - + + - - - - <p>The VerificationUsages that are defined by a certain <code>verificationCaseDefinition</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 ActorMembership that has a certain PartUsage as its <code>ownedActorParameter</code>.</p> + + + - - - - <p>The RequirementVerificationMembership that has a certain RequirementUsage as its <code>verifiedRequirement</code>.</p> + + + + <p>The Definition that owns the <code>ownedCalculation</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>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>The <code>itemDefinitions</code> of an <code>ItemUsage</code> are those <code>occurrenceDefinitions</code> that are <code>Structures</code>.</p> - - - OCL2.0 - itemDefinition = occurrenceDefinition->selectByKind(Structure) - - - - - <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>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 - specializesFromLibrary('Items::items') + specializesFromLibrary('Calculations::calculations') - - - <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 -(owningType.oclIsKindOf(ItemDefinition) or - owningType.oclIsKindOf(ItemUsage)) implies - specializesFromLibrary('Items::Item::subitem') + owningType <> null and +(owningType.oclIsKindOf(CalculationDefinition) or + owningType.oclIsKindOf(CalculationUsage)) implies + specializesFromLibrary('Calculations::Calculation::subcalculations') - - - - <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 <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>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>CalculationDefinition</code> is an <coed>ActionDefinition</code> that also defines a <code>Function</code> producing a <code>result</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>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('Items::Item') + 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>The PortConjugation that relates a certain PortDefinition to its ConjugatedPortDefinition (if any).</p> + + + + <p>The CalculationUsage being typed by a certain Function.</p> - - + + - - - - <p>The ConjugatedPortTypings whose <code>portDefinition</code> is a certain PortDefinition.</p> + + + + <p>The Usage in which the <code>nestedCalculation<code> is nested.</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 CalculationDefinitions that feature a certain CalculationUsage.</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> - - - OCL2.0 - ownedPortConjugator.originalPortDefinition = originalPortDefinition - - - - - <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>The CaseDefinitions that have a certain PartUsage as an <code>actorParameter</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>The ObjectMembership that owns a particular RequirementUsage as its <code>ownedObjectiveRequirement</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> + + + + + + + + + + + + + + <p>The CaseUsages that have a certain PartUsage as an <code>actorParameter</code>.</p> - - - OCL2.0 - let originalName : String = originalPortDefinition.name in -if originalName = null then null -else '~' + originalName -endif - - - - - - - - + + + - - - <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 CaseDefinitions that have a certain RequirementUsage as their <code>objectiveRequirement</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>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 - ownedUsage-> - reject(oclIsKindOf(PortUsage))-> - forAll(not isComposite) + objectiveRequirement = + let objectives: OrderedSet(RequirementUsage) = + featureMembership-> + selectByKind(ObjectiveMembership). + ownedRequirement in + if objectives->isEmpty() then null + else objectives->first().ownedObjectiveRequirement + endif - - - <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>A <code>CaseDefinition</code> must have at most one <code>featureMembership</code> that is a <code>ObjectiveMembership</code>.</p> - + OCL2.0 - not oclIsKindOf(ConjugatedPortDefinition) implies - ownedMember-> - selectByKind(ConjugatedPortDefinition)-> - size() = 1 + featureMembership-> + selectByKind(ObjectiveMembership)-> + 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>subjectParameter</code> of a <code>CaseDefinition</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p> - + OCL2.0 - specializesFromLibrary('Ports::Port') + subjectParameter = + let subjectMems : OrderedSet(SubjectMembership) = + featureMembership->selectByKind(SubjectMembership) in + if subjectMems->isEmpty() then null + else subjectMems->first().ownedSubjectParameter + endif - - - - - <p>The <code>ConjugatedPortDefinition</code> that is conjugate to this <code>PortDefinition</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>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 - nestedUsage-> - reject(oclIsKindOf(PortUsage))-> - forAll(not isComposite) + actorParameter = featureMembership-> + selectByKind(ActorMembership). + ownedActorParameter - - - <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>A <code>CaseDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> - - OCL2.0 - specializesFromLibrary('Ports::ports') + + English + featureMembership->selectByKind(SubjectMembership)->size() <= 1 - - - <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>subjectParameter</code> of a <code>CaaseDefinition</code> must be its first <code>input</code>.</p> - + OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(PortDefinition) or - owningType.oclIsKindOf(PortUsage)) implies - specializesFromLibrary('Ports::Port::subports') + input->notEmpty() and input->first() = subjectParameter - - - <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>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 - owningType = null or -not owningType.oclIsKindOf(PortDefinition) and -not owningType.oclIsKindOf(PortUsage) implies - isReference + specializesFromLibrary('Cases::Case') - - - <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>RequirementUsage</code> representing the objective of this <code>CaseDefinition</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>parameter</code> of this <code>CaseDefinition</code> that represents its subject.</p> - - + + - - - - - <p>The ConjugatedPortTypings whose <code>conjugatedPortDefinition</code> a certain ConjugatedPortDefinition.</p> + + + <p>The <code>parameters</code> of this <code>CaseDefinition</code> that represent actors involved in the case.</p> - - - + + + - - - - <p>The PortUsages that are typed by a certain PortDefinition.</p> + + + + <p>The Usage in which the <code>nestedCase</code> is nested.</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>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>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>owningType</code> of an <code>ObjectiveMembership</code> must be a <code>CaseDefinition</code> or <code>CaseUsage</code>.</p> - + OCL2.0 - portDefinition = conjugatedPortDefinition.originalPortDefinition + owningType.oclIsType(CaseDefinition) or +owningType.oclIsType(CaseUsage) + - - - - <p>The <code>originalPortDefinition</code> of the <code>conjugatedPortDefinition</code> of this <code>ConjugatedPortTyping</code>.</p> + + + <p>The <code>ownedObjectiveRequirement</code> of an <code>ObjectiveMembership</code> must be composite.</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 + ownedObjectiveRequirement.isComposite + + + + + + <p>The RequirementUsage that is the <code>ownedMemberFeature</code> of this RequirementUsage.</p> - - + + - - - - <p>The PartUsages typed by a certain PartDefinition.</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 + 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>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 + 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> - + OCL2.0 - itemDefinition->selectByKind(PartDefinition) + featureMembership-> + selectByKind(SubjectMembership)-> + size() <= 1 - - - <p>At least one of the <code>itemDefinitions</code> of a <code>PartUsage</code> must be a <code>PartDefinition</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 - partDefinition->notEmpty() + actorParameter = featureMembership-> + selectByKind(ActorMembership). + ownedActorParameter - - - <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>The <code>subjectParameter</code> of a <code>CaseUsage</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p> - + OCL2.0 - specializesFromLibrary('Parts::parts') + subjectParameter = + let subjects : OrderedSet(SubjectMembership) = + featureMembership->selectByKind(SubjectMembership) in + if subjects->isEmpty() then null + else subjects->first().ownedSubjectParameter + endif - - - <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>The <code>subjectParameter</code> of a <code>CaseUsage</code> must be its first <code>input</code>.</p> - + OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(ItemDefinition) or - owningType.oclIsKindOf(ItemUsage)) implies - specializesFromLibrary('Items::Item::subparts') + input->notEmpty() and input->first() = subjectParameter - - - <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>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 - 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') + specializesFromLibrary('Cases::cases') - - - <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> + + + <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 - owningFeatureMembership <> null and -owningFeatureMembership.oclIsKindOf(StakeholderMembership) implies - specializesFromLibrary('Requirements::RequirementCheck::stakeholders') + isComposite and owningType <> null and + (owningType.oclIsKindOf(CaseDefinition) or + owningType.oclIsKindOf(CaseUsage)) implies + specializesFromLibrary('Cases::Case::subcases') - - - - <p>The <code>itemDefinitions</code> of this PartUsage that are PartDefinitions.</p> + + + + <p>The <code>RequirementUsage</code> representing the objective of this <code>CaseUsage</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>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>The CaseUsages being typed by a certain CaseDefinition.</p> + + + + + + + + + <p>The CaseDefinitions that have a certain Usage as their <code>subjectParameter</code>.</p> + + + + + + + + + <p>The CaseUsages that have a certain Usage as their <code>subjectParameter</code>.</p> + + + + + + + + + <p>The AnalysisCaseDefinitions that have a certain Expression as their <code>resultExpression</code>.</p> + + + + + + + + <p>An <code>AnalysisCaseUsage</code> is a <code>Usage</code> of an <code>AnalysisCaseDefinition</code>.</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>resultExpression</code> of a <code>AnalysisCaseUsage</code> is the <code>ownedResultExpression</code> of its <code>ResultExpressionMembership</code>, if any.</p> - + OCL2.0 - specializesFromLibrary('Parts::Part') + resultExpression = + let results : OrderedSet(ResultExpressionMembership) = + featureMembersip-> + selectByKind(ResultExpressionMembership) in + if results->isEmpty() then null + else results->first().ownedResultExpression + endif - - - - - <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>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 - objectiveRequirement = - let objectives: OrderedSet(RequirementUsage) = - featureMembership-> - selectByKind(ObjectiveMembership). - ownedRequirement in - if objectives->isEmpty() then null - else objectives->first().ownedObjectiveRequirement - endif + specializesFromLibrary('AnalysisCases::analysisCases') - - - <p>A <code>CaseDefinition</code> must have at most one <code>featureMembership</code> that is a <code>ObjectiveMembership</code>.</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 - featureMembership-> - selectByKind(ObjectiveMembership)-> - size() <= 1 + isComposite and owningType <> null and + (owningType.oclIsKindOf(AnalysisCaseDefinition) or + owningType.oclIsKindOf(AnalysisCaseUsage)) implies + specializesFromLibrary('AnalysisCases::AnalysisCase::subAnalysisCases') - - - <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>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 AnalysisCaseUsages that have a certain Expression as their <code>resultExpression</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 - subjectParameter = - let subjectMems : OrderedSet(SubjectMembership) = - featureMembership->selectByKind(SubjectMembership) in - if subjectMems->isEmpty() then null - else subjectMems->first().ownedSubjectParameter + resultExpression = + let results : OrderedSet(ResultExpressionMembership) = + featureMembersip-> + selectByKind(ResultExpressionMembership) in + if results->isEmpty() then null + else results->first().ownedResultExpression 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> + + + <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 - actorParameter = featureMembership-> - selectByKind(ActorMembership). - ownedActorParameter + specializesFromLibrary('AnalysisCases::AnalysisCase') - - - <p>A <code>CaseDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</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> + - - English - featureMembership->selectByKind(SubjectMembership)->size() <= 1 - - - - - <p>The <code>subjectParameter</code> of a <code>CaaseDefinition</code> must be its first <code>input</code>.</p> + + + + + + + + <p>The AnalysisCaseUsages being typed by a certain AnalysisCaseDefinition.</p> - + + + + + + + + <p>The UseCaseUsage that includes a certain <code>includedUseCase</code>.</p> + + + + + + + + + <p>The UseCaseDefinition 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>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 - input->notEmpty() and input->first() = subjectParameter + includedUseCase = ownedUseCase-> + selectByKind(IncludeUseCaseUsage). + useCaseIncluded - - - <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>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('Cases::Case') + specializesFromLibrary('UseCases::UseCase') - - - - <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 <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>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>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>The <code>owningType</code> of an <code>ObjectiveMembership</code> must be a <code>CaseDefinition</code> or <code>CaseUsage</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.oclIsType(CaseDefinition) or -owningType.oclIsType(CaseUsage) - + owningType <> null and +(owningType.oclIsKindOf(UseCaseDefinition) or + owningType.oclIsKindOf(UseCaseUsage) implies + specializesFromLibrary('UseCases::UseCase::includedUseCases') - - - <p>The <code>ownedObjectiveRequirement</code> of an <code>ObjectiveMembership</code> must be composite.</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 - ownedObjectiveRequirement.isComposite + referencedFeatureTarget() <> null implies + referencedFeatureTarget().oclIsKindOf(UseCaseUsage) - - - - <p>The RequirementUsage that is the <code>ownedMemberFeature</code> of this RequirementUsage.</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> - - + + - - - - <p>The CaseUsages that have a certain PartUsage as an <code>actorParameter</code>.</p> + + + + <p>The UseCaseUsages being typed by a certain UseCaseDefinition.</p> - - + + - - - - <p>The CaseUsages being typed by a certain CaseDefinition.</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>The CaseDefinitions that have a certain RequirementUsage as their <code>objectiveRequirement</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 CaseUsages that have a certain Usage as their <code>subjectParameter</code>.</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 CaseDefinitions that have a certain Usage as their <code>subjectParameter</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 ObjectMembership that owns a particular RequirementUsage as its <code>ownedObjectiveRequirement</code>.</p> + + + + <p>The IncludeUseCaseUsages that have a certain UseCaseUsage as their <code>includedUseCase</code>.</p> - - + + - - - - <p>The Usage in which the <code>nestedCase</code> is nested.</p> + + + + <p>The PartUsages typed by a certain PartDefinition.</p> - - - - - - - - + + - - - - <p>The CaseDefinitions that have a certain PartUsage as an <code>actorParameter</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>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('Parts::Part') + + + - - - <p>A <code>CaseUsage</code> is a <code>Usage</code> of a <code>CaseDefinition</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>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>partDefinitions</code> of an <code>PartUsage</code> are those <code>itemDefinitions</code> that are <code>PartDefinitions</code>.</p> - + OCL2.0 - objectiveRequirement = - let objectives: OrderedSet(RequirementUsage) = - featureMembership-> - selectByKind(ObjectiveMembership). - ownedRequirement in - if objectives->isEmpty() then null - else objectives->first().ownedObjectiveRequirement - endif + itemDefinition->selectByKind(PartDefinition) - - - <p>A <code>CaseUsage</code> must have at most one <code>featureMembership</code> that is a <code>ObjectiveMembership</code>.</p> + + + <p>At least one of the <code>itemDefinitions</code> of a <code>PartUsage</code> must be a <code>PartDefinition</code>.</p> - + OCL2.0 - featureMembership-> - selectByKind(ObjectiveMembership)-> - size() <= 1 + partDefinition->notEmpty() - - - <p>A <code>CaseUsage</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</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 - featureMembership-> - selectByKind(SubjectMembership)-> - size() <= 1 + specializesFromLibrary('Parts::parts') - - - <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>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> - + OCL2.0 - actorParameter = featureMembership-> - selectByKind(ActorMembership). - ownedActorParameter + isComposite and owningType <> null and +(owningType.oclIsKindOf(ItemDefinition) or + owningType.oclIsKindOf(ItemUsage)) implies + specializesFromLibrary('Items::Item::subparts') - - - <p>The <code>subjectParameter</code> of a <code>CaseUsage</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p> + + + <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 - subjectParameter = - let subjects : OrderedSet(SubjectMembership) = - featureMembership->selectByKind(SubjectMembership) in - if subjects->isEmpty() then null - else subjects->first().ownedSubjectParameter - endif + 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>subjectParameter</code> of a <code>CaseUsage</code> must be its first <code>input</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 - input->notEmpty() and input->first() = subjectParameter + owningFeatureMembership <> null and +owningFeatureMembership.oclIsKindOf(StakeholderMembership) implies + specializesFromLibrary('Requirements::RequirementCheck::stakeholders') - - - <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>itemDefinitions</code> of this PartUsage that are PartDefinitions.</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('Cases::cases') + specializesFromLibrary('Connections::connections') - - - <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>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 - isComposite and owningType <> null and - (owningType.oclIsKindOf(CaseDefinition) or - owningType.oclIsKindOf(CaseUsage)) implies - specializesFromLibrary('Cases::Case::subcases') + ownedEndFeature->size() = 2 implies + specializesFromLibrary('Connections::binaryConnections') - - - - <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>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 ViewUsage that owns a certain <code>rendering</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>The ViewDefinition that owns a certain <code>satisfiedViewpoint</code>.</p> + + + + <p>The ConnectionDefinitions that have a certain Usage as an <code>connectionEnd</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>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>An <code>Expose</code> always imports all <code>Elements</code>, regardless of visibility.</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> - + OCL2.0 - isImportAll + specializesFromLibrary('Connections::Connection') - - - <p>The <code>importOwningNamespace</code> of an <code>Expose</code> must be a <code>ViewUsage</code>.</p> + + + <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> - + OCL2.0 - importOwningNamespace.oclIsType(ViewUsage) + ownedEndFeature->size() = 2 implies + specializesFromLibrary('Connections::BinaryConnection') - - - <p>An <code>Expose</code> always has <code>protected</code> visibility.</p> + + + <p>A <code>ConnectionDefinition</code> must have <code>isSufficient = true</code>.</p> - + OCL2.0 - visibility = VisibilityKind::protected + isSufficient - - - - <p>An <code>Expose</code> always has <code>protected</code> visibility.</p> + + + + + <p>The <code>Usages</code> that define the things related by the <code>ConnectionDefinition</code>.</p> - + + - - - <p>An <code>Expose</code> always imports all <code>Elements</code>, regardless of visibility (<code>isImportAll = true</code>).</p> + + + <p>A <code>ConnectionDefinition</code> always has <code>isSufficient = true</code>.</p> - + - - - - <p>The ViewDefinition that owns a certain <code>viewCondition</code>.</p> + + + + <p>The ConnectionUsages that have a certain AssociationStructure as their <code>connectionDefinition</code>.</p> - - + + - - - - <p>The RenderingUsages defined by a certain <code>renderingDefinition</code>.</p> - - - - + + + <p>A <code>SuccessionAsUsage</code> is both a <code>ConnectorAsUsage</code> and a <code>Succession</code>.<p> + + + - - - <p>A <code>ViewpointUsage</code> is a <code>Usage</code> of a <code>ViewpointDefinition</code>.</p> - - + + + <p>A <code>BindingConnectorAsUsage</code> is both a <code>BindingConnector</code> and a <code>ConnectorAsUsage</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 - viewpointStakeholder = framedConcern.featureMemberhsip-> - selectByKind(StakeholderMembership). - ownedStakeholderParameter - - - - - <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::viewpointChecks') - - - - - <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>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 - isComposite and owningType <> null and -(owningType.oclIsKindOf(ViewDefinition) or - owningType.oclIsKindOf(ViewUsage)) implies - specializesFromLibrary('Views::View::viewpointSatisfactions') + isVariation - - - - <p>The <code>ViewpointDefinition</code> that is the <code>definition</code> of this <code>ViewpointUsage<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>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 EnumerationDefinition is considered semantically to be a variation whose allowed variants are its <code>enumerationValues</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 ViewpointUsage that has a certain <code>viewpointStakeholder</code>.</p> + + + + <p>The EnumerationDefinition that owns a certain <code>enumeratedValue</code>.</p> - - + + - - - - + + + + <p>The EnumerationUsages that are typed by a certain EnumerationDefinition.</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>InterfaceUsage</code> is a Usage of an <code>InterfaceDefinition</code> to represent an interface connecting parts of a system through specific ports.</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>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 - exposedElement = ownedImport->selectByKind(Expose). - importedMemberships(Set{}).memberElement-> - select(elm | includeAsExposed(elm))-> - asOrderedSet() + ownedEndFeature->size() = 2 implies + specializesFromLibrary('Interfaces::binaryInterfaces') - - - <p>The <code>satisfiedViewpoints</code> of a <code>ViewUsage</code> are its <code>ownedRequirements</code> that are composite <code>ViewpointUsages</code>. + + + <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 + specializesFromLibrary('Interfaces::interfaces') + + + + + + <p>The <code>InterfaceDefinitions</code> that type this <code>InterfaceUsage</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 - satisfiedViewpoint = ownedRequirement-> - selectByKind(ViewpointUsage)-> - select(isComposite) + specializesFromLibrary('Interfaces::Interface') - - - <p>The <code>viewConditions</code> of a <code>ViewUsage</code> are the <code>conditions</code> of its owned <code>ElementFilterMemberships</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 - viewCondition = ownedMembership-> - selectByKind(ElementFilterMembership). - condition + ownedEndFeature->size() = 2 implies + specializesFromLibrary('Interfaces::BinaryInterface') - - - <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>PortUsages</code> that are the <code>connectionEnds</code> of this <code>InterfaceDefinition</code>. + + - + + + + + + + + <p>The InterfaceDefinitions that have a certain PortUsage as an <code>interfaceEnd</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> + + 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>A <code>ViewUsage</code> must have at most one <code>ViewRenderingMembership</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 - featureMembership-> - selectByKind(ViewRenderingMembership)-> - size() <= 1 + referencedFeatureTarget() <> null implies + referencedFeatureTarget().oclIsKindOf(OccurrenceUsage) - - - <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 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 - specializesFromLibrary('Views::views') + owningType <> null and +(owningType.oclIsKindOf(OccurrenceDefinition) or + owningType.oclIsKindOf(OccurrenceUsage)) implies + specializesFromLibrary('Occurrences::Occurrence::timeEnclosedOccurrences') - - - <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>An <code>EventOccurrenceUsage</code> must be referential.</p> - + OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(ViewDefinition) or - owningType.oclIsKindOf(ViewUsage)) implies - specializesFromLibrary('Views::View::subviews') + isReference - - - - <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>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>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>Always true for an <code>EventOccurrenceUsage</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><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>Determine whether the given <code>element</code> meets all the owned and inherited <code>viewConditions</code>.</p> + + + + <p>A snapshot of an <code>Occurrence</code> (a time slice with zero duration).</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>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>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>The <code>views</code> of a <code>ViewDefinition</code> are all its <code>usages</code> that are <code>ViewUsages</code>.</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 - view = usage->selectByKind(ViewUsage) + isIndividual implies specializesFromLibrary('Occurrences::Life') - - - <p>The <code>satisfiedViewpoints</code> of a <code>ViewDefinition</code> are its <code>ownedRequirements</code> that are composite <code>ViewpointUsages</code>. + + + <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 - satisfiedViewpoint = ownedRequirement-> - selectByKind(ViewpointUsage)-> - select(isComposite) + isIndividual implies + multiplicity <> null and + multiplicity.specializesFromLibrary('Base::zeroOrOne') - - - <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>Whether this <code>OccurrenceDefinition</code> is constrained to represent at most one thing.</p> - - OCL2.0 - viewRendering = - let renderings: OrderedSet(ViewRenderingMembership) = - featureMembership->selectByKind(ViewRenderingMembership) in - if renderings->isEmpty() then null - else renderings->first().referencedRendering - endif + + + + + + + + <p>The <code>OccurrenceUsage</code> that has a certain <code>individualDefinition</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> + + + OCL2.0 + individualDefinition = + let individualDefinitions : OrderedSet(OccurrenceDefinition) = + occurrenceDefinition-> + selectByKind(OccurrenceDefinition)-> + select(isIndividual) in + if individualDefinitions->isEmpty() then null + else individualDefinitions->first() 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>OccurrenceUsage</code> has <code>isIndividual = true</code>, then it must have an <code>individualDefinition</code>.</p> - + OCL2.0 - viewCondition = ownedMembership-> - selectByKind(ElementFilterMembership). - condition + isIndividual implies individualDefinition <> null - - - <p>A <code>ViewDefinition</code> must have at most one <code>ViewRenderingMembership</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 - featureMembership-> - selectByKind(ViewRenderingMembership)-> - size() <= 1 + specializesFromLibrary('Occurrences::occurrences') - - - </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>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 - specializesFromLibrary('Views::View') + 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>The <code>usages</code> of this <code>ViewDefinition</code> that are <code>ViewUsages</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 ViewpointDefinition that has a certain <code>viewpointStakeholder</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> + + + <p>An <code>OccurrenceUsage</code> must have at most one <code>occurrenceDefinition</code> with <code>isIndividual = true</code>.</p> - + OCL2.0 - viewpointStakeholder = framedConcern.featureMemberhsip-> - selectByKind(StakeholderMembership). - ownedStakeholderParameter + occurrenceDefinition-> + selectByKind(OccurrenceDefinition)-> + select(isIndividual).size() <= 1 - - - <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>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 - specializesFromLibrary('Views::ViewpointCheck') + portionKind = PortionKind::snapshot implies + specializesFromLibrary('Occurrences::Occurrence::snapshots') - - - - <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>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>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>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 - specializesFromLibrary('Views::renderings') + portionKind = PortionKind::timeslice implies + specializesFromLibrary('Occurrences::Occurrence::timeSlices') - - - <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>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 - owningType <> null and -(owningType.oclIsKindOf(RenderingDefinition) or - owningType.oclIsKindOf(RenderingUsage)) implies - specializesFromLibrary('Views::Rendering::subrenderings') + portionKind <> null implies + owningType <> null and + (owningType.oclIsKindOf(OccurrenceDefinition) or + owningType.oclIsKindOf(OccurrenceUsage)) - - - <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>If an <code>OccurrenceUsage</code> has a non-null <code>portionKind</code>, then it must have <code>isPortion = true</code>.</p> - + OCL2.0 - owningFeatureMembership <> null and -owningFeatureMembership.oclIsKindOf(ViewRenderingMembership) implies - redefinesFromLibrary('Views::View::viewRendering') + portionKind <> null implies isPortion - - - - <p>The <code>RenderingDefinition</code> that is the <code>definition</code> of this <code>RenderingUsage</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 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>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>satisfiedViewpoint</code>.</p> + + + + <p>The <code>OccurrenceUsages</code> being typed by a certain <code>Class</code>.</p> - - + + - - - - <p>The ViewDefinitions that feature a certain ViewUsage.</p> + + + + <p>The EventOccurrenceUsages that reference a certain <code>eventOccurrence</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>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>renderings</code> of a <code>RenderingDefinition</code> are all its <code>usages</code> that are <code>RenderingUsages</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 - rendering = usages->selectByKind(RenderingUsage) + conjugatedPortDefinition = +let conjugatedPortDefinitions : OrderedSet(ConjugatedPortDefinition) = + ownedMember->selectByKind(ConjugatedPortDefinition) in +if conjugatedPortDefinitions->isEmpty() then null +else conjugatedPortDefinitions->first() +endif - - - <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>ownedUsages</code> of a <code>PortDefinition</code> that are not <code>PortUsages</code> must not be composite.</p> - + OCL2.0 - specializesFromLibrary('Views::Rendering') + ownedUsage-> + reject(oclIsKindOf(PortUsage))-> + forAll(not isComposite) - - - - <p>The <code>usages</code> of a <code>RenderingDefinition</code> that are <code>RenderingUsages</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>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 - 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 + not oclIsKindOf(ConjugatedPortDefinition) implies + ownedMember-> + selectByKind(ConjugatedPortDefinition)-> + 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>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 - owningType.oclIsKindOf(ViewDefinition) or -owningType.oclIsKindOf(ViewUsage) + specializesFromLibrary('Ports::Port') - - - - <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>ConjugatedPortDefinition</code> that is conjugate to this <code>PortDefinition</code>.</p> - - + + - - - - <p>The RenderingDefinitions that feature a certain <code>rendering</code>.</p> - - - - - - - - - <p>The ViewUsages that have a certain <code>ViewDefinition</code>.</p> - - - - - - - - - <p>The ViewDefinition that owns a certain <code>rendering</code>.</p> - - - - - - - - - <p>A ViewUsage exposing a certain <code>exposedElement</code>.</p> - - - - - - - - - <p>The ViewUsage that owns a certain <code>viewCondition</code>.</p> + + + + <p>The PortUsages that are typed by a certain PortDefinition.</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>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>All <code>features</code> of an <code>AttributeDefinition</code> must be 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 - feature->forAll(not isComposite) + nestedUsage-> + reject(oclIsKindOf(PortUsage))-> + forAll(not isComposite) - - - - - - <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>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 - isReference + specializesFromLibrary('Ports::ports') - - - <p>All <code>features</code> of an <code>AttributeUsage</code> must be non-composite.</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 - feature->forAll(not isComposite) + isComposite and owningType <> null and +(owningType.oclIsKindOf(PortDefinition) or + owningType.oclIsKindOf(PortUsage)) implies + specializesFromLibrary('Ports::Port::subports') - - - <p>An <code>AttributeUsage</code> must directly or indirectly specialize <code><em>Base::dataValues</em></code> from the Kernel Semantic 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('Base::dataValues') + owningType = null or +not owningType.oclIsKindOf(PortDefinition) and +not owningType.oclIsKindOf(PortUsage) implies + isReference - - - - <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 AttributeUsages that are typed by a certain DataType.</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> - - - - - - - <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> + + 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 EnumerationUsages that are typed by a certain EnumerationDefinition.</p> + + + + + + <p>The ConjugatedPortTypings whose <code>portDefinition</code> is a certain PortDefinition.</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>. - - - - - - <p>An EnumerationDefinition is considered semantically to be a variation whose allowed variants are its <code>enumerationValues</code>.</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 EnumerationDefinition that owns a certain <code>enumeratedValue</code>.</p> - - - - - - - - - <p>The Definition that owns the <code>ownedItem</code>.</p> - - - - - - - - - <p>The Definitions that have a certain Usage as a <code>flow</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>The Usage in which the <code>nestedConstraint</code> is nested.</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 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>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 Usages that have a certain Classifier as a <code>definition</code>.</p> + + + + + + <p>The <code>ConjugatedPortDefinition</code> that is conjugate to the <code>originalPortDefinition</code>.</p> - - - + + + - - - - <p>The Definition that owns a certain <code>ownedRendering</code>.</p> + + + + <p>The ConjugatedPortTypings whose <code>conjugatedPortDefinition</code> a certain ConjugatedPortDefinition.</p> - - + + - - - - - <p>The Definition that owns the <code>ownedUseCase</code>.</p> + + + + <p>The PortConjugation that relates a certain PortDefinition to its ConjugatedPortDefinition (if any).</p> - - + + - - - - <p>The Definition that owns the <code>ownedConstraint</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 Usage that owns a certain <code>nestedView</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 Definition that owns the <code>ownedEnumeration</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 Usages that have a certain Usage as a <code>flow</code>.</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 + specializesFromLibrary('Items::Item') + + + + - - - <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>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 a <code>Definition</code> is a variation, then all it must not have any <code>ownedFeatureMemberships</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 - isVariation implies ownedFeatureMembership->isEmpty() + itemDefinition = occurrenceDefinition->selectByKind(Structure) - - - <p>The <code>variants</code> of a <code>Definition</code> are the <code>ownedVariantUsages</code> of its <code>variantMemberships</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 - variant = variantMembership.ownedVariantUsage + specializesFromLibrary('Items::items') - - - <p>The <code>variantMemberships</code> of a <code>Definition</code> are those <code>ownedMemberships</code> that are <code>VariantMemberships</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 - variantMembership = ownedMembership->selectByKind(VariantMembership) + isComposite and owningType <> null and +(owningType.oclIsKindOf(ItemDefinition) or + owningType.oclIsKindOf(ItemUsage)) implies + specializesFromLibrary('Items::Item::subitem') - - - <p>A variation <code>Definition</code> may not specialize any other variation <code>Definition</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>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 - isVariation implies - not ownedSpecialization.specific->exists( - oclIsKindOf(Definition) and - oclAsType(Definition).isVariation) + feature->forAll(not isComposite) - - - <p>The <code>usages</code> of a <code>Definition</code> are all its <code>features</code> that are <code>Usages</code>.</p> + + + + + + + <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> + + OCL2.0 - usage = feature->selectByKind(Usage) + isReference - - - <p>The <code>directedUsages</code> of a <code>Definition</code> are all its <code>directedFeatures</code> that are <code>Usages</code>.</p> + + + <p>All <code>features</code> of an <code>AttributeUsage</code> must be non-composite.</p> - + OCL2.0 - directedUsage = directedFeature->selectByKind(Usage) + feature->forAll(not isComposite) - - - <p>The <code>ownedUsages</code> of a <code>Definition</code> are all its <code>ownedFeatures</code> that are <code>Usages</code>.</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 - ownedUsage = ownedFeature->selectByKind(Usage) + specializesFromLibrary('Base::dataValues') - - - <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>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>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 - ownedAttribute = ownedUsage->selectByKind(AttributeUsage) + specializesFromLibrary('Metadata::metadataItems') - - - <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>MetadataDefinition</code> that is the <code>definition</code> of this <code>MetadataUsage</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 - ownedReference = ownedUsage->selectByKind(ReferenceUsage) + specializesFromLibrary('Metadata::MetadataItem') - - - <p>The <code>ownedEnumerations</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>EnumerationUsages</code>.</p> + + + + + + + <p>The StateSubactionMembership that is the owner of a certain ActionUsage (if any).</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>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>The ExhibitStateUsages that have a certain StateUsage as their <tt>exhibitedState</tt>.</p> + + + + + + + + + <p>The StateDefinitions featuring a certain StateUsage.</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 - ownedEnumeration = ownedUsage->selectByKind(EnumerationUsage) + 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>ownedOccurrences</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>OccurrenceUsages</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 + 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>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 - ownedOccurrence = ownedUsage->selectByKind(OccurrenceUsage) + specializesFromLibrary('Actions::transitionActions') - - - <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>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 - ownedItem = ownedUsage->selectByKind(ItemUsage) + source = + let sourceFeature : Feature = sourceFeature() in + if sourceFeature = null then null + else sourceFeature.featureTarget.oclAsType(ActionUsage) - - - <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>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 - ownedPart = ownedUsage->selectByKind(PartUsage) + 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>ownedPorts</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>PortUsages</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 - ownedPort = ownedUsage->selectByKind(PortUsage) + triggerAction = ownedFeatureMembership-> + selectByKind(TransitionFeatureMembership)-> + select(kind = TransitionFeatureKind::trigger).transitionFeature-> + selectByKind(AcceptActionUsage) - - - <p>The <code>ownedConnections</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ConnectorAsUsages</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 - ownedConnection = ownedUsage->selectByKind(ConnectorAsUsage) + let successions : Sequence(Successions) = + ownedMember->selectByKind(Succession) in +successions->notEmpty() and +successions->at(1).targetFeature.featureTarget-> + forAll(oclIsKindOf(ActionUsage)) - - - <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> 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 - ownedFlow = ownedUsage->selectByKind(FlowUsage) + guardExpression = ownedFeatureMembership-> + selectByKind(TransitionFeatureMembership)-> + select(kind = TransitionFeatureKind::trigger).transitionFeature-> + selectByKind(Expression) - - - <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>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 - ownedInterface = ownedUsage->selectByKind(ReferenceUsage) + triggerAction->forAll(specializesFromLibrary('Actions::TransitionAction::accepter') and +guardExpression->forAll(specializesFromLibrary('Actions::TransitionAction::guard') and +effectAction->forAll(specializesFromLibrary('Actions::TransitionAction::effect')) - - - <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>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 - ownedAllocation = ownedUsage->selectByKind(AllocationUsage) + triggerAction = ownedFeatureMembership-> + selectByKind(TransitionFeatureMembership)-> + select(kind = TransitionFeatureKind::trigger).transitionFeatures-> + selectByKind(AcceptActionUsage) - - - <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>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 - ownedAction = ownedUsage->selectByKind(ActionUsage) + succession.sourceFeature = source - - - <p>The <code>ownedStates</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>StateUsages</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 - ownedState = ownedUsage->selectByKind(StateUsage) + ownedMember->selectByKind(BindingConnector)->exists(b | + b.relatedFeatures->includes(source) and + b.relatedFeatures->includes(inputParameter(1))) - - - <p>The <code>ownedTransitions</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>TransitionUsages</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 - ownedTransition = ownedUsage->selectByKind(TransitionUsage) + triggerAction->notEmpty() implies + let payloadParameter : Feature = inputParameter(2) in + payloadParameter <> null and + payloadParameter.subsetsChain(triggerAction->at(1), triggerPayloadParameter()) - - - <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 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 - ownedCalculation = ownedUsage->selectByKind(CalculationUsage) + ownedMember->selectByKind(BindingConnector)->exists(b | + b.relatedFeatures->includes(succession) and + b.relatedFeatures->includes(resolveGlobal( + 'TransitionPerformances::TransitionPerformance::transitionLink'))) - - - <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>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 - ownedConstraint = ownedUsage->selectByKind(ConstraintUsage) + if triggerAction->isEmpty() then + inputParameters()->size() >= 1 +else + inputParameters()->size() >= 2 +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>succession</code> of a <code>TransitionUsage</code> is its first <code>ownedMember</code> that is a <code>Succession</code>.</p> - + OCL2.0 - ownedRequirement = ownedUsage->selectByKind(RequirementUsage) + succession = ownedMember->selectByKind(Succession)->at(1) - - - <p>The <code>ownedConcerns</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ConcernUsages</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 - ownedConcern = ownedUsage->selectByKind(ConcernUsage) + source <> null and not source.oclIsKindOf(StateUsage) implies + triggerAction->isEmpty() - - - <p>The <code>ownedCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>CaseUsages</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 - 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 + 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> - - 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> + + + + + + + + <p>The Transition that owns a certain Succession.</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 - 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>ownedMembers</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 = ownedMember->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>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>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>InterfaceUsages</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>AllocationUsages</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 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>ActionUsages</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>StateUsages</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>TransitionUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + <p>The TransitionUsage that is guarded by a certain Expression.</p> - - - - - - <p>The <code>CalculationUsages</code> that are <code>ownedUsages</code> of this <code>Definition</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>ConstraintUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - + + + + <p>Indicates that the <code>action</code> of a <code>StateSubactionMembership</code> is a <code>doAction</code>.</p> - - - - - - <p>The <code>RequirementUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + <p>Indicates that the <code>action</code> of a <code>StateSubactionMembership</code> is an <code>exitAction</code>.</p> - - - - - - <p>The <code>ConcernUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + + <p>The TransitionUsage outgoing from a certain source <tt>ActionUsage</tt>.</p> - - - - - - <p>The code>CaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + + + + <p>The StateDefinitions with a certain <tt>doAction</tt>.</p> - - - - - - <p>The <code>AnalysisCaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + + + + <p>The StateUsages with a certain <tt>entryAction</tt>.</p> - - - - - - <p>The <code>VerificationCaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + + + + <p>The TransitionUsage incoming to a certain target <tt>ActionUsage</tt>.</p> - - - - - - <p>The <code>UseCaseUsages</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>ViewUsages</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>ViewpointUsages</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>RenderingUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + <p>The StateUsages 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>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 + kind = TransitionFeatureKind::trigger implies + transitionFeature.oclIsKindOf(AcceptActionUsage) + + + + + <p>The <code>owningType</code> of a <code>TransitionFeatureMembership</code> must be a <code>TransitionUsage</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> + + + 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> + + + 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>MetadataUsages</code> that are <code>ownedMembers</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>Usage</code> that owns the <code>nestedFlow</code>.</p> + + + + <p>The TransitionFeatureMembership that owns a certain Step (if any).</p> - - + + - - - - <p>The Definition that owns a certain <code>ownedView</code>.</p> + + + + <p>The StateDefinitions with a certain <tt>entryAction</tt>.</p> - - + + - - - - <p>The Usage that owns the <code>nestedAllocation</code>.</p> + + + + <p>The TransitionUsage that is triggered by a certain AcceptActionUsage.</p> - - + + - - - - <p>The Definition that owns the <code>ownedPort</code>.</p> + + + + <p>The StateUsages with a certain <tt>doAction</tt>.</p> - - + + - - - - <p>The Usage that owns a certain <code>nestedViewpoint</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>Definition</code> that owns the <code>ownedFlow</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 VariantMembership that owns this Usage, if the Usage represents a variant in the context of some variation point Definition or Usage.</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 Usage that owns a certain <code>nestedRendering</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 in which the <code>nestedItem</code> is nested.</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 Definition that owns the <code>ownedAction</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 owning Definition of this VariantMembership, which must have <code>isVariation</code> = true.</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>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 + 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> + + + 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>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> - - OCL2.0 - isReference - - - - - - <p>Always <code>true</code> for a <code>ReferenceUsage</code>.</code> + + + + + + <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>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>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>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>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 - 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 + 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 Usage that owns the <code>nestedReference</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>The <code>owningType</code> of a <code>StateSubactionMembership</code> must be a <code>StateDefinition</code> or a <code>StateUsage</code>.</p> - - - - - - - - <p>The owning Definition of this VariantMembership, which must have <code>isVariation</code> = true.</p> + + OCL2.0 + owningType.oclIsKindOf(StateDefinition) or +owningType.oclIsKindOf(StateUsage) + + + + + + <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>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 StateDefinitions with a certain <tt>exitAction</tt>.</p> - - + + - - - - <p>The Usage in which the <code>nestedState</code> is nested.</p> + + + + <p>The TransitionUsage that has a certain <tt>effectAction</tt>.</p> - - + + @@ -12920,140 +13428,49 @@ endif - - - - <p>The Usage in which the <code>nestedRequirement</code> is nested.</p> - - - - - - - - - <p>The Usage in which the <code>nestedAttribute</code> is nested.</p> - - - - - - - - - <p>The Definition that owns the <code>ownedAnalysisCase</code>.</p> - - - - - - - - - <p>The Usage in which the <code>nestedInterface</code> is nested.</p> - - - - - - - - - <p>The Definition that owns the <code>ownedOccurrence</code>.</p> - - - - - - - - - <p>The Definition that owns a certain <code>ownedVerificationCase</code>.</p> - - - - - - - - - <p>The Definition that owns the <code>ownedState</code>.</p> - - - - - - - - - <p>The Usage that owns a certain <code>nestedVerificationCase</code>.</p> - - - - - - - - - <p>The Definition that owns the <code>ownedMetadata</code>.</p> - - - - - - - - - <p>The Usage that owns the <code>nestedConcern</code>.</p> - - - - - - - - - <p>The Definition that owns the <code>ownedAllocation</code>.</p> - - - - - - - - - <p>The Usage in which the <code>nestedMetadata</code> is nested.</p> - - - - - - - - - <p>The Usage in which the <code>nestedOccurrence</code> is nested.</p> + + + + <p>The Usage that owns a certain <code>nestedViewpoint</code>.</p> - - + + - - - - <p>The Definition that owns the <code>ownedConnection</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 Definition that owns the <code>ownedReference</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> + + + + @@ -13265,7 +13682,7 @@ endif OCL2.0 - nestedMetadata = nestedUsage->selectByKind(MetadataUsage) + nestedMetadata = ownedMember->selectByKind(MetadataUsage) @@ -13759,2228 +14176,1850 @@ endif - - - - <p>The Definition that owns a certain <code>ownedViewpoint</code>.</p> - - - - - - - - - <p>The ItemUsages being typed by a certain Structure.</p> - - - - - - - - - <p>The Usage in which the <code>nestedPart</code> is nested.</p> - - - - - - - - - <p>The Usage in which the <code>nestedAnalysisCase</code> is nested.</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>The Definition that owns the <code>ownedInterface</code>.</p> + + + + <p>The <code>Definition</code> that owns the <code>ownedFlow</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>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>The <code>membershipOwningNamespace</code> of a <code>VariantMembership</code> must be a variation-point <code>Definition</code> or <code>Usage</code>.</p> + + + <p>A <code>ReferenceUsage</code> is always referential.</p> - + OCL2.0 - membershipOwningNamespace.oclIsKindOf(Definition) and - membershipOwningNamespace.oclAsType(Definition).isVariation or -membershipOwningNamespace.oclIsKindOf(Usage) and - membershipOwningNamespace.oclAsType(Usage).isVariation - + isReference - - - - <p>The <code>Usage</code> that represents a variant in the context of the <code>owningVariationDefinition</code> or <code>owningVariationUsage</code>.</p> + + + + <p>Always <code>true</code> for a <code>ReferenceUsage</code>.</code> - - + + - - - - - <p>The Definition that owns the <code>ownedAttribute</code>.</p> - - - - - - - - - <p>The Usage in which the <code>nestedPort</code> is nested (if any).</p> - - - - - - - - - <p>The Definition that owns the <code>ownedPart</code>.</p> - - - - - - - - - <p>The Usage in which the <code>nestedUseCase</code> is nested.</p> - - - - - - - - - <p>The Definition that owns the <code>ownedConcern</code>.</p> - - - - - - - - - <p>The Definition that owns the <code>ownedRequirement</code>.</p> - - - - - - - - - <p>The Definition that owns the <code>ownedTransition</code>.</p> - - - - - - - - - <p>The Usages that feature a certain Usage.</p> - - - - - - - - - <p>The Definitions that feature a certain Usage.</p> - - - - - - - - - <p>The Usage in which the <code>nestedTransition</code> is nested.</p> - - - - - - - - - <p>The Usage that owns the <code>nestedEnumeration</code>.</p> - - - - - - - - - <p>The Usage in which the <code>nestedUsage</code> is nested.</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 + 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 this CaseUsage (if any).</p> - - - - <p>The Definition that owns the <code>ownedCase</code>.</p> - - - + + + + <p>The Usage that owns the <code>nestedReference</code>.</p> + + + - - - - <p>The Usage in which the <code>nestedCalculation<code> is nested.</p> + + + + <p>The Usage that owns a certain <code>nestedVerificationCase</code>.</p> - - + + - - - - <p>The CalculationUsage being typed by a certain Function.</p> + + + + <p>The Definition that owns a certain <code>ownedVerificationCase</code>.</p> - - + + - - - - <p>The CalculationDefinitions that feature a certain CalculationUsage.</p> + + + + <p>The Definition that owns the <code>ownedMetadata</code>.</p> - - + + - - - - <p>The Definition that owns the <code>ownedCalculation</code>.</p> + + + + <p>The Usage in which the <code>nestedInterface</code> is nested.</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>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>CalculationUsage</code> must specialize directly or indirectly the <code>CalculationUsage</code> <em><code>Calculations::calculations</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('Calculations::calculations') + 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 - owningType <> null and -(owningType.oclIsKindOf(CalculationDefinition) or - owningType.oclIsKindOf(CalculationUsage)) implies - specializesFromLibrary('Calculations::Calculation::subcalculations') + variant = variantMembership.ownedVariantUsage - - - - - <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>variantMemberships</code> of a <code>Definition</code> are those <code>ownedMemberships</code> that are <code>VariantMemberships</code>.</p> - - - - - - <p>A <code>CalculationUsage</code> is not model-level evaluable.</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 - false - - - - - - - - - - - - - - <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 + 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 - specializesFromLibrary('Calculations::Calculation') + usage = feature->selectByKind(Usage) - - - <p>The <code>calculations</code> of a <code>CalculationDefinition</code> are those of its <code>actions</code> that are <code>CalculationUsages</code>.</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 - calculation = action->selectByKind(CalculationUsage) + directedUsage = directedFeature->selectByKind(Usage) - - - - - <p>The <code>actions</code> of this <code>CalculationDefinition</code> that are <code>CalculationUsages</code>.</p> + + + <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>FlowUsages<code> that have a certain <code>Interaction</code> as their <code>flowDefinition</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>The <code>FlowDefinitions<code> that have a certain Usage as <code>flowEnd</code>.</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> - - - - - - - <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 + 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> + + + 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 + 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> + + + 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> + + + 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> + + + 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 - specializesFromLibrary('Flows::messages') + ownedConnection = ownedUsage->selectByKind(ConnectorAsUsage) - - - <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>ownedFlows</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>FlowUsages</code>.</p> - + OCL2.0 - ownedEndFeatures->notEmpty() implies - specializesFromLibrary('Flows::flows') + ownedFlow = ownedUsage->selectByKind(FlowUsage) - - - - - - <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> + + + <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('Flows::successionFlows') + ownedInterface = ownedUsage->selectByKind(ReferenceUsage) - - - - - - <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> + + + <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('Flows::MessageAction') + ownedAllocation = ownedUsage->selectByKind(AllocationUsage) - - - <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>ownedActions</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ActionUsages</code>.</p> - + OCL2.0 - flowEnd->size() = 2 implies - specializesFromLibrary('Flows::Message') + ownedAction = ownedUsage->selectByKind(ActionUsage) - - - <p>A <code>FlowDefinition</code> may not have more than two <code>flowEnds</code>.</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 - flowEnd->size() <= 2 + ownedState = ownedUsage->selectByKind(StateUsage) - - - - - <p>The <code>Usages</code> that define the things related by the <code>FlowDefinition</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> - - - - - - - <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> + + + <p>The <code>ownedTransitions</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>TransitionUsages</code>.</p> - + OCL2.0 - specializesFromLibrary('Connections::connections') + ownedTransition = ownedUsage->selectByKind(TransitionUsage) - - - <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>The <code>ownedCalculations</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>CalculationUsages</code>.</p> - + OCL2.0 - ownedEndFeature->size() = 2 implies - specializesFromLibrary('Connections::binaryConnections') + ownedCalculation = ownedUsage->selectByKind(CalculationUsage) - - - - - <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>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 ConnectionDefinitions that have a certain Usage as an <code>connectionEnd</code>.</p> - - - - - - - - - <p>The ConnectionUsages that have a certain AssociationStructure as their <code>connectionDefinition</code>.</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 <code>ownedConstraints</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ConstraintUsages</code>.</p> - + OCL2.0 - specializesFromLibrary('Connections::Connection') + ownedConstraint = ownedUsage->selectByKind(ConstraintUsage) - - - <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>ownedRequirements</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>RequirementUsages</code>.</p> - + OCL2.0 - ownedEndFeature->size() = 2 implies - specializesFromLibrary('Connections::BinaryConnection') + ownedRequirement = ownedUsage->selectByKind(RequirementUsage) - - - <p>A <code>ConnectionDefinition</code> must have <code>isSufficient = true</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 - isSufficient + ownedConcern = ownedUsage->selectByKind(ConcernUsage) - - - - - <p>The <code>Usages</code> that define the things related by the <code>ConnectionDefinition</code>.</p> + + + <p>The <code>ownedCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>CaseUsages</code>.</p> - - - - - - <p>A <code>ConnectionDefinition</code> always has <code>isSufficient = true</code>.</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> - - - - - - - <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> + + 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 - resultExpression = - let results : OrderedSet(ResultExpressionMembership) = - featureMembersip-> - selectByKind(ResultExpressionMembership) in - if results->isEmpty() then null - else results->first().ownedResultExpression - endif + 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 + ownedUseCase = ownedUsage->selectByKind(UseCaseUsage) - - - <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 <code>ownedViews</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ViewUsages</code>.</p> - + OCL2.0 - specializesFromLibrary('AnalysisCases::analysisCases') + ownedView = ownedUsage->selectByKind(ViewUsage) - - - <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>ownedViewpoints</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ViewpointUsages</code>.</p> - + OCL2.0 - isComposite and owningType <> null and - (owningType.oclIsKindOf(AnalysisCaseDefinition) or - owningType.oclIsKindOf(AnalysisCaseUsage)) implies - specializesFromLibrary('AnalysisCases::AnalysisCase::subAnalysisCases') + ownedViewpoint = ownedUsage->selectByKind(ViewpointUsage) - - - - <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 <code>ownedRenderings</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>RenderingUsages</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 + 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 - resultExpression = - let results : OrderedSet(ResultExpressionMembership) = - featureMembersip-> - selectByKind(ResultExpressionMembership) in - if results->isEmpty() then null - else results->first().ownedResultExpression - endif + ownedMetadata = ownedMember->selectByKind(MetadataUsage) - - - <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>If a <code>Definition</code> is a variation, then it must be abstract.</p> - + OCL2.0 - specializesFromLibrary('AnalysisCases::AnalysisCase') + isVariation implies isAbstract - - - - <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>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 AnalysisCaseUsages that have a certain Expression as their <code>resultExpression</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 AnalysisCaseUsages being typed by a certain AnalysisCaseDefinition.</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 AnalysisCaseDefinitions that have a certain Expression as their <code>resultExpression</code>.</p> + + + + + + <p>The <code>Usages</code> that are <code>features</code> of this <code>Definition</code> (not necessarily owned).</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>The <code>usages</code> of this <code>Definition</code> that are <code>directedFeatures</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> - - OCL2.0 - specializesFromLibrary('Constraints::ConstraintCheck') - - - - - - - - <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>Usages</code> that are <code>ownedFeatures</code> of this <code>Definition</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>ReferenceUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - OCL2.0 - if isNegated then - specializesFromLibrary('Constraints::negatedConstraintChecks') -else - specializesFromLibrary('Constraints::assertedConstraintChecks') -endif - - - - - <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>The <code>AttributeUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.<p> - - OCL2.0 - referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(ConstraintUsage) - - - - - - - <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>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 ConstraintUsages typed by a certain Predicate.</p> + + + <p>The <code>InterfaceUsages</code> that are <code>ownedUsages</code> of this <code>Definition</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>AllocationUsages</code> that are <code>ownedUsages</code> of this <code>Definition</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 are <code>ownedUsages</code> of this <code>Definition</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>StateUsages</code> that are <code>ownedUsages</code> of this <code>Definition</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>The <code>TransitionUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</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>CalculationUsages</code> that are <code>ownedUsages</code> of this <code>Definition</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> + + + + + + <p>The <code>ConstraintUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + - - - OCL2.0 - false - - - - - - - - - - - - - - - <p>The AssertConstraintUsages that have a certain ConstraintUsage as their <tt>assertedConstraint</tt>.</p> + + + + + + <p>The <code>RequirementUsages</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>ConcernUsages</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>CaseUsages</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>AnalysisCaseUsages</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>VerificationCaseUsages</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>UseCaseUsages</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>ViewUsages</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> + + + + + + <p>The <code>ViewpointUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</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>RenderingUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - + + - - - <p>Always true for an <code>EventOccurrenceUsage</code>.</p> + + + <p>The <code>MetadataUsages</code> that are <code>ownedMembers</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 Usage in which the <code>nestedRequirement</code> is nested.</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 Definition that owns the <code>ownedEnumeration</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 Definition that owns the <code>ownedConcern</code>.</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 Definition that owns the <code>ownedInterface</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>The Definition that owns the <code>ownedState</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 Usage that owns a certain <code>nestedView</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 that owns the <code>nestedEnumeration</code>.</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 Usages that have a certain Usage as a <code>flow</code>.</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> + + - - 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 Definitions that have a certain Usage as a <code>flow</code>.</p> - - - - - - <p>The at most one <code>occurrenceDefinition</code> that has <code>isIndividual = true</code>.</p> + + + + + + + + <p>The Definition that owns the <code>ownedPart</code>.</p> - - - - - - <p>Whether this <code>OccurrenceUsage</code> represents the usage of the specific individual represented by its <code>individualDefinition</code>.</p> + + + + + + + + <p>The Usage in which the <code>nestedUseCase</code> is nested.</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>ownedPort</code>.</p> + + + + + + + + + <p>The owning Definition of this VariantMembership, which must have <code>isVariation</code> = true.</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> + + + + <p>The <code>Usage</code> that owns the <code>nestedFlow</code>.</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 Usage in which the <code>nestedMetadata</code> is nested.</p> - - - + + + - - - - <p>The EventOccurrenceUsages that reference a certain <code>eventOccurrence</code>.</p> + + + + <p>The Definitions that feature a certain Usage.</p> - - + + - - - - <p>The <code>OccurrenceUsage</code> that has a certain <code>individualDefinition</code>.</p> + + + + + <p>The Definition that owns a certain <code>ownedRendering</code>.</p> - - + + - - - - <p>The InterfaceDefinitions that have a certain PortUsage as an <code>interfaceEnd</code>.</p> + + + + <p>The ItemUsages being typed by a certain Structure.</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> + + + + <p>The owning Definition of this VariantMembership, which must have <code>isVariation</code> = true.</p> - - OCL2.0 - ownedEndFeature->size() = 2 implies - specializesFromLibrary('Interfaces::binaryInterfaces') - - - - - <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 Definition that owns a certain <code>ownedView</code>.</p> - - OCL2.0 - specializesFromLibrary('Interfaces::interfaces') - - - - - - <p>The <code>InterfaceDefinitions</code> that type this <code>InterfaceUsage</code>.</p> + + + + + + + + <p>The Definition that owns the <code>ownedAnalysisCase</code>.</p> - - - + + + - - - - <p>The InterfaceUsages typed by a certain InterfaceDefinition.</p> + + + + <p>The Usages that feature a certain Usage.</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>The Definition that owns the <code>ownedOccurrence</code>.</p> - - OCL2.0 - specializesFromLibrary('Interfaces::Interface') - - - - - <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 Usage in which the <code>nestedUsage</code> is nested.</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>The Usage in which the <code>nestedTransition</code> is nested.</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>The Definition that owns the <code>ownedRequirement</code>.</p> - - OCL2.0 - 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>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>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 - ownedMember->selectByKind(BindingConnector)-> - select(b | - b.relatedElement->includes(subjectParameter) and - b.relatedElement->exists(r | r <> subjectParameter))-> - size() = 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>The Definition that owns the <code>ownedAttribute</code>.</p> - - OCL2.0 - referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(RequirementUsage) - - - - - <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>The Usage that owns a certain <code>nestedRendering</code>.</p> - - OCL2.0 - if isNegated then - specializesFromLibrary('Requirements::notSatisfiedRequirementChecks') -else - specializesFromLibrary('Requirements::satisfiedRequirementChecks') -endif - - - - - - - <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 Definition that owns the <code>ownedConstraint</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 Usage in which the <code>nestedConstraint</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>The Definition that owns this CaseUsage (if any).</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 Definition that owns the <code>ownedCase</code>.</p> - - OCL2.0 - specializesFromLibrary('Requirements::ConcernCheck') - - - + + + - - - - <p>The ConcernUsages that are typed by a certain <code>concernDefinition</code>.</p> + + + + <p>The Usage in which the <code>nestedAnalysisCase</code> is nested.</p> - - + + - - - - <p>The SatifyRequirementUsages that have a certain RequirementUsage as their <tt>satisfiedRequirement</tt>.</p> + + + + <p>The Definition that owns the <code>ownedUseCase</code>.</p> - - + + - - - - <p>The RequirementUsage that addresses a certain <code>addressedConcern</code>.</p> + + + + <p>The Usage that owns the <code>nestedAllocation</code>.</p> - - + + - - - - <p>TheStakehplderMembership that has a certain PartUsage as its <code>ownedStakeholderParameter</code>.</p> + + + + <p>The Usage in which the <code>nestedPart</code> is nested.</p> - - + + - - - - <p>The SubjectMembership that owns a particular Parameter as its <code>ownedSubjectParameter</code>.</p> + + + + <p>The Definition that owns a certain <code>ownedViewpoint</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> + + + + <p>The Usage in which the <code>nestedState</code> is nested.</p> - - OCL2.0 - owningType.oclIsKindOf(RequirementUsage) or -owningType.oclIsKindOf(RequirementDefinition) - - - - - - <p>The <code>PartUsage</code> specifying the stakeholder.</p> + + + + + + + + <p>The Usage in which the <code>nestedOccurrence</code> is nested.</p> - - - + + + - - - - + + + + <p>The Definition that owns the <code>ownedReference</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 Definition that owns the <code>ownedAction</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 Usage in which the <code>nestedItem</code> is nested.</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>ownedTransition</code>.</p> + + + + + + + + + <p>The Usage in which the <code>nestedAttribute</code> is nested.</p> + + + + + + + + + <p>The Definition that owns the <code>ownedAllocation</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 Usages that have a certain Classifier as a <code>definition</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 Usage that owns the <code>nestedConcern</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 Usage in which the <code>nestedPort</code> is nested (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>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 Definition that owns the <code>ownedItem</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 Definition that owns the <code>ownedConnection</code>.</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>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 - input->notEmpty() and input->first() = subjectParameter + allocation = usage->selectAsKind(AllocationUsage) - - - <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>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('Requirements::requirementChecks') + specializesFromLibrary('Allocations::Allocation') - - - <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 <code>AllocationUsages</code> that refine the allocation mapping defined by this <code>AllocationDefinition</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 AllocationDefinitions that feature a certain <code>allocation</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(Feature) and - gen.oclAsType(Feature).featureTarget.oclIsKindOf(CaseUsage) implies - redefines(gen.oclAsType(Feature).featureTarget. - 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>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> - + OCL2.0 - owningFeatureMembership <> null and -owningFeatureMembership.oclIsKindOf(RequirementVerificationMembership) implies - specializesFromLibrary('VerificationCases::VerificationCase::obj::requirementVerifications') + specializesFromLibrary('Allocations::allocations') - - - - <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>AllocationDefinitions</code> that are the types of this <code>AllocationUsage</code>.</p> - - + + - - - <p>The <code>parameters</code> of this <code>RequirementUsage</code> that represent actors involved in the requirement.</p> + + + + + <p>The AllocationUsages that have a certain AllocationDefinition as their <code>allocationDefinition</code>.</p> - - - - - - <p>The <code>parameters</code> of this <code>RequirementUsage</code> that represent stakeholders for the requirement.</p> + + + + + + + + <p>The ViewpointUsage that has a certain <code>viewpointStakeholder</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>The ViewUsage that owns a certain <code>satisfiedViewpoint</code>.</p> - - - - <p>Indicates that a member <code>ConstraintUsage</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage</code>represents an requirement.</p> + + + + + + + + <p>A ViewUsage exposing a certain <code>exposedElement</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>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 <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 ViewDefinition that owns a certain <code>viewCondition</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 - 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 + isImportAll - - - <p>The <code>owningType</code> of a <code>RequirementConstraintMembership</code> must be a <code>RequirementDefinition</code> or a <code>RequirementUsage</code>.</p> + + + <p>The <code>importOwningNamespace</code> of an <code>Expose</code> must be a <code>ViewUsage</code>.</p> - + OCL2.0 - owningType.oclIsKindOf(RequirementDefinition) or -owningType.oclIsKindOf(RequirementUsage) + importOwningNamespace.oclIsType(ViewUsage) - - - <p>The <code>ownedConstraint</code> of a <code>RequirementConstraintMembership</code> must be composite.</p> + + + <p>An <code>Expose</code> always has <code>protected</code> visibility.</p> - + OCL2.0 - ownedConstraint.isComposite + visibility = VisibilityKind::protected - - - - <p>Whether the <code>RequirementConstraintMembership</code> is for an assumed or required <code>ConstraintUsage</code>.</p> + + + + <p>An <code>Expose</code> always has <code>protected</code> visibility.</p> + - - - <p>The <code>ConstraintUsage</code> that is the <code>ownedMemberFeature</code> of this <code>RequirementConstraintMembership</code>.</p> + + + <p>An <code>Expose</code> always imports all <code>Elements</code>, regardless of visibility (<code>isImportAll = true</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 ViewUsage that owns a certain <code>viewCondition</code>.</p> - - - + + + - - - - <p>The AddressedConcernMembership that owns a certain ConcernUsage as its <code>ownedConcern</code>.</p> + + + + + + + + + + <p>The ViewpointDefinition that has a certain <code>viewpointStakeholder</code>.</p> - - + + - - - <p>A <code>ConcernUsage</code> is a <code>Usage</code> of a <code>ConcernDefinition</code>.</p> + + + <p>A <code>ViewpointUsage</code> is a <code>Usage</code> of a <code>ViewpointDefinition</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>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 - specializesFromLibrary('Requirements::concernChecks') + viewpointStakeholder = framedConcern.featureMemberhsip-> + selectByKind(StakeholderMembership). + ownedStakeholderParameter - - - <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>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 - owningFeatureMembership <> null and -owningFeatureMembership.oclIsKindOf(FramedConcernMembership) implies - specializesFromLibrary('Requirements::RequirementCheck::concerns') + specializesFromLibrary('Views::viewpointChecks') - - - - <p>The ConcernDefinition that is the single type of this ConcernUsage.</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 + 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 <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 RequirementUsages that have a certain PartUsage as an <code>actorParameter</code>.</p> + + + + <p>The RenderingDefinitions that feature a certain <code>rendering</code>.</p> - - + + + + + + + + <p>The ViewUsages that have a certain <code>ViewDefinition</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 ViewUsage that owns a certain <code>rendering</code>.</p> + + + - - - - <p>The SatisfyRequirementUsages that have a certain Feature as their <tt>satisfyingFeature</tt>.</p> + + + + <p>The RenderingUsages defined by a certain <code>renderingDefinition</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>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>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 - text = documentation.body - - - - - <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 - assumedConstraint = ownedFeatureMembership-> - selectByKind(RequirementConstraintMembership)-> - select(kind = RequirementConstraintKind::assumption). - 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> + + + <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 - subjectParameter = - let subjects : OrderedSet(SubjectMembership) = - featureMembership->selectByKind(SubjectMembership) in - if subjects->isEmpty() then null - else subjects->first().ownedSubjectParameter - endif + viewpointStakeholder = framedConcern.featureMemberhsip-> + selectByKind(StakeholderMembership). + ownedStakeholderParameter - - - <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>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 - framedConcern = featureMembership-> - selectByKind(FramedConcernMembership). - ownedConcern + specializesFromLibrary('Views::ViewpointCheck') - - - <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>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> - - 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 ViewDefinition that owns a certain <code>satisfiedViewpoint</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>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>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 - featureMembership-> - selectByKind(SubjectMembership)-> - size() <= 1 + specializesFromLibrary('Views::renderings') - - - <p>The <code>subjectParameter</code> of a <code>RequirementDefinition</code> must be its first <code>input</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 - input->notEmpty() and input->first() = subjectParameter + owningType <> null and +(owningType.oclIsKindOf(RenderingDefinition) or + owningType.oclIsKindOf(RenderingUsage)) implies + specializesFromLibrary('Views::Rendering::subrenderings') - - - <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>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('Requirements::RequirementCheck') + owningFeatureMembership <> null and +owningFeatureMembership.oclIsKindOf(ViewRenderingMembership) implies + redefinesFromLibrary('Views::View::viewRendering') - - - - <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>RenderingDefinition</code> that is the <code>definition</code> of this <code>RenderingUsage</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 naming <code>Feature</code> of a <code>RenderingUsage</code> that is owned via a <code>ViewRenderingMembership</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(ViewRenderingMembership) and + ownedReferenceSubsetting <> null then + ownedReferenceSubsetting.referencedFeature.featureTarget +else + self.oclAsType(OccurrenceUsage).namingFeature() +endif + + + + + + + - - - <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>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>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>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 + 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>The <code>owningType</code> of a <code>ViewRenderingMembership</code> must be a <code>ViewDefinition</code> or a <code>ViewUsage</code>.</p> - + OCL2.0 - owningType.oclIsKindOf(RequirementUsage) or -owningType.oclIsKindOf(RequirementDefinition) or -owningType.oclIsKindOf(CaseDefinition) or -owningType.oclIsKindOf(CaseUsage) - + owningType.oclIsKindOf(ViewDefinition) or +owningType.oclIsKindOf(ViewUsage) - - - - <p>The <code>PartUsage</code> specifying the actor.</p> + + + + <p>The owned <code>RenderingUsage</code> that is either itself the <code>referencedRendering</code> or subsets the <code>referencedRendering</code>. - - + + - - - - - <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 RequirementConstraintMembership that owns a certain ConstraintUsage as its <code>ownedConstraint</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> - - - + + + - - - - <p>The RequirementDefinition that addresses a certain <code>addressedConcern</code>.</p> - - - + + + + - - - - <p>The RequirementDefinitions that have a certain Usage as their <code>subjectParameter</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> - - - - - - - - <p>The AddressedConcernMembership that has a certain ConcernUsage as its <code>addressedConcern</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 ActorMembership that has a certain PartUsage as its <code>ownedActorParameter</code>.</p> + + OCL2.0 + specializesFromLibrary('Views::Rendering') + + + + + + <p>The <code>usages</code> of a <code>RenderingDefinition</code> that are <code>RenderingUsages</code>.</p> - - - + + + - - - - <p>The RequirementUsages typed by a certain RequirementDefinition.</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> - - - - - - - - <p>The RequirementUsage that has a certain ConstraintUsage as a <code>requiredConstraint</code> (if any).</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>The RequirementDefinitions that have a certain PartUsage as an <code>actorParameter</code>.</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>The RequirementUsages that have a certain Usage as their <code>subjectParameter</code>.</p> + + OCL2.0 + viewRendering = + let renderings: OrderedSet(ViewRenderingMembership) = + featureMembership->selectByKind(ViewRenderingMembership) in + if renderings->isEmpty() then null + else renderings->first().referencedRendering + endif + + + + + <p>The <code>viewConditions</code> of a <code>ViewDefinition</code> are the <code>conditions</code> of its owned <code>ElementFilterMemberships</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 + viewCondition = ownedMembership-> + selectByKind(ElementFilterMembership). + condition + + + + + <p>A <code>ViewDefinition</code> must have at most one <code>ViewRenderingMembership</code>.</p> - + OCL2.0 - kind = RequirementConstraintKind::requirement + featureMembership-> + selectByKind(ViewRenderingMembership)-> + size() <= 1 - - - - <p>The <code>kind</code> of an <code>FramedConcernMembership</code> must be <code>requirement</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> - - - - - <p>The <code>ConcernUsage</code> that is the <code>ownedConstraint</code> of this <code>FramedConcernMembership</code>.</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>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 composite <code>ownedRequirements</code> of this <code>ViewDefinition</code> that are <code>ViewpointUsages</code> for viewpoints satisfied by the <code>ViewDefinition</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>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> - - 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>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 RequirementConstraintMembership that has a certain ConstraintUsage as its <code>referencedConstraint</code>.</p> + + + + <p>The ViewDefinition that owns a certain <code>rendering</code>.</p> - - + + - - - - <p>The RequirementUsage that has a certain ConstraintUsage as an <cod>assumedConstraint</code> (if any).</p> + + + + <p>The ViewDefinitions that feature a certain ViewUsage.</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>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>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 <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('Allocations::allocations') + exposedElement = ownedImport->selectByKind(Expose). + importedMemberships(Set{}).memberElement-> + select(elm | includeAsExposed(elm))-> + asOrderedSet() - - - - <p>The <code>AllocationDefinitions</code> that are the types of this <code>AllocationUsage</code>.</p> - - - - - - - - - <p>The AllocationDefinitions that feature a certain <code>allocation</code>.</p> - - - - - - - - - <p>The AllocationUsages that have a certain AllocationDefinition as their <code>allocationDefinition</code>.</p> + + + <p>The <code>satisfiedViewpoints</code> of a <code>ViewUsage</code> are its <code>ownedRequirements</code> that are composite <code>ViewpointUsages</code>. - - - - - - - <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 + satisfiedViewpoint = ownedRequirement-> + selectByKind(ViewpointUsage)-> + select(isComposite) + + + + + <p>The <code>viewConditions</code> of a <code>ViewUsage</code> are the <code>conditions</code> of its owned <code>ElementFilterMemberships</code>.</p> - + OCL2.0 - allocation = usage->selectAsKind(AllocationUsage) + viewCondition = ownedMembership-> + selectByKind(ElementFilterMembership). + condition - - - <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>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 - specializesFromLibrary('Allocations::Allocation') + viewRendering = + let renderings: OrderedSet(ViewRenderingMembership) = + featureMembership->selectByKind(ViewRenderingMembership) in + if renderings->isEmpty() then null + else renderings->first().referencedRendering + endif - - - - <p>The <code>AllocationUsages</code> that refine the allocation mapping defined by this <code>AllocationDefinition</code>.</p> + + + <p>A <code>ViewUsage</code> must have at most one <code>ViewRenderingMembership</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 + 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('Metadata::MetadataItem') + specializesFromLibrary('Views::views') - - - - - - - - - - - - <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> + + + <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 - specializesFromLibrary('Metadata::metadataItems') + owningType <> null and +(owningType.oclIsKindOf(ViewDefinition) or + owningType.oclIsKindOf(ViewUsage)) implies + specializesFromLibrary('Views::View::subviews') - - - - - <p>The <code>MetadataDefinition</code> that is the <code>definition</code> of this <code>MetadataUsage</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))) + + + + + + + diff --git a/org.omg.sysml/model/SysML_only.uml b/org.omg.sysml/model/SysML_only.uml index f51dece00..1fcb75229 100644 --- a/org.omg.sysml/model/SysML_only.uml +++ b/org.omg.sysml/model/SysML_only.uml @@ -1,3188 +1,3357 @@ - - - - - <p>The RenderingUsages defined by a certain <code>renderingDefinition</code>.</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 + specializesFromLibrary('Items::Item') + + + + + + - - - <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>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>An <code>Expose</code> always imports all <code>Elements</code>, regardless of visibility.</p> + + + <p>The <code>itemDefinitions</code> of an <code>ItemUsage</code> are those <code>occurrenceDefinitions</code> that are <code>Structures</code>.</p> - + OCL2.0 - isImportAll + itemDefinition = occurrenceDefinition->selectByKind(Structure) - - - <p>The <code>importOwningNamespace</code> of an <code>Expose</code> must be a <code>ViewUsage</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 - importOwningNamespace.oclIsType(ViewUsage) + specializesFromLibrary('Items::items') - - - <p>An <code>Expose</code> always has <code>protected</code> visibility.</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 - visibility = VisibilityKind::protected + isComposite and owningType <> null and +(owningType.oclIsKindOf(ItemDefinition) or + owningType.oclIsKindOf(ItemUsage)) implies + specializesFromLibrary('Items::Item::subitem') - - - - - - <p>An <code>Expose</code> always has <code>protected</code> visibility.</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>Expose</code> always imports all <code>Elements</code>, regardless of visibility (<code>isImportAll = true</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 + 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>An EnumerationDefinition is considered semantically to be a variation whose allowed variants are its <code>enumerationValues</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 EnumerationDefinition that owns a certain <code>enumeratedValue</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 EnumerationUsages that are typed by a certain EnumerationDefinition.</p> + + + + + + + + + <p>The TransitionUsage incoming to a certain target <tt>ActionUsage</tt>.</p> + + + + + + + + + <p>The TransitionUsage that is triggered by a certain AcceptActionUsage.</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>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>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 - exposedElement = ownedImport->selectByKind(Expose). - importedMemberships(Set{}).memberElement-> - select(elm | includeAsExposed(elm))-> - asOrderedSet() + owningType <> null and +(owningType.oclIsKindOf(PartDefinition) or + owningType.oclIsKindOf(PartUsage)) implies + specializesFromLibrary('Parts::Part::exhibitedStates') - - - <p>The <code>satisfiedViewpoints</code> of a <code>ViewUsage</code> are its <code>ownedRequirements</code> that are composite <code>ViewpointUsages</code>. + + + <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 - satisfiedViewpoint = ownedRequirement-> - selectByKind(ViewpointUsage)-> - select(isComposite) + referencedFeatureTarget() <> null implies + referencedFeatureTarget().oclIsKindOf(StateUsage) - - - <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>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>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> + + OCL2.0 - viewCondition = ownedMembership-> - selectByKind(ElementFilterMembership). - condition + 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>viewRendering</code> of a <code>ViewUsage</code> is the <code>referencedRendering</code> of its owned <code>ViewRenderingMembership<code>, if any.</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 - viewRendering = - let renderings: OrderedSet(ViewRenderingMembership) = - featureMembership->selectByKind(ViewRenderingMembership) in - if renderings->isEmpty() then null - else renderings->first().referencedRendering + entryAction = + let entryMemberships : Sequence(StateSubactionMembership) = + ownedMembership-> + selectByKind(StateSubactionMembership)-> + select(kind = StateSubactionKind::entry) in + if entryMemberships->isEmpty() then null + else entryMemberships->at(1) endif - - - <p>A <code>ViewUsage</code> must have at most one <code>ViewRenderingMembership</code>.</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 - featureMembership-> - selectByKind(ViewRenderingMembership)-> - size() <= 1 + isParallel implies + nestedAction.incomingTransition->isEmpty() and + nestedAction.outgoingTransition->isEmpty() - - - <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>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 - specializesFromLibrary('Views::views') + isSubstateUsage(false) implies + specializesFromLibrary('States::StateAction::exclusiveStates') - - - <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>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 - owningType <> null and -(owningType.oclIsKindOf(ViewDefinition) or - owningType.oclIsKindOf(ViewUsage)) implies - specializesFromLibrary('Views::View::subviews') + 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>ViewDefinition</code> that is the <code>definition</code> of this <code>ViewUsage</code>.</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('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> + + + 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>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>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>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>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>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>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>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>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>Determine whether the given <code>element</code> meets all the owned and inherited <code>viewConditions</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 - let metadataFeatures: Sequence(AnnotatingElement) = - element.ownedAnnotation.annotatingElement-> - select(oclIsKindOf(MetadataFeature)) in -self.membership->selectByKind(ElementFilterMembership). - condition->forAll(cond | - metadataFeatures->exists(elem | - cond.checkCondition(elem))) + 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 ViewpointDefinition that has a certain <code>viewpointStakeholder</code>.</p> - - - - - - - - - <p>The ViewUsage that owns a certain <code>rendering</code>.</p> - - - - - - - - - <p>The ViewDefinition that owns a certain <code>rendering</code>.</p> - - - - - - - - <p>A <code>ViewpointUsage</code> is a <code>Usage</code> of a <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>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>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 - viewpointStakeholder = framedConcern.featureMemberhsip-> - selectByKind(StakeholderMembership). - ownedStakeholderParameter + 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>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> + + + <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 - specializesFromLibrary('Views::viewpointChecks') + 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>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>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 - isComposite and owningType <> null and -(owningType.oclIsKindOf(ViewDefinition) or - owningType.oclIsKindOf(ViewUsage)) implies - specializesFromLibrary('Views::View::viewpointSatisfactions') + specializesFromLibrary('Actions::transitionActions') - - - - <p>The <code>ViewpointDefinition</code> that is the <code>definition</code> of this <code>ViewpointUsage<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>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> + + + <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 - viewpointStakeholder = framedConcern.featureMemberhsip-> - selectByKind(StakeholderMembership). - ownedStakeholderParameter + source = + let sourceFeature : Feature = sourceFeature() in + if sourceFeature = null then null + else sourceFeature.featureTarget.oclAsType(ActionUsage) - - - <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>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 - specializesFromLibrary('Views::ViewpointCheck') + 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>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>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> + + + <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 - rendering = usages->selectByKind(RenderingUsage) + triggerAction = ownedFeatureMembership-> + selectByKind(TransitionFeatureMembership)-> + select(kind = TransitionFeatureKind::trigger).transitionFeature-> + selectByKind(AcceptActionUsage) - - - <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>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 - specializesFromLibrary('Views::Rendering') + let successions : Sequence(Successions) = + ownedMember->selectByKind(Succession) in +successions->notEmpty() and +successions->at(1).targetFeature.featureTarget-> + forAll(oclIsKindOf(ActionUsage)) - - - - <p>The <code>usages</code> of a <code>RenderingDefinition</code> that are <code>RenderingUsages</code>.</p> - - - - - - - - - <p>The ViewDefinition that owns a certain <code>viewCondition</code>.</p> - - - - - - - - - - p>The ViewUsage that owns a certain <code>satisfiedViewpoint</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 ViewUsage that owns a certain <code>viewCondition</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> - - - - - - - - <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 + guardExpression = ownedFeatureMembership-> + selectByKind(TransitionFeatureMembership)-> + select(kind = TransitionFeatureKind::trigger).transitionFeature-> + selectByKind(Expression) + + + + + <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 - view = usage->selectByKind(ViewUsage) + triggerAction->forAll(specializesFromLibrary('Actions::TransitionAction::accepter') and +guardExpression->forAll(specializesFromLibrary('Actions::TransitionAction::guard') and +effectAction->forAll(specializesFromLibrary('Actions::TransitionAction::effect')) - - - <p>The <code>satisfiedViewpoints</code> of a <code>ViewDefinition</code> are its <code>ownedRequirements</code> that are composite <code>ViewpointUsages</code>. + + + <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 - satisfiedViewpoint = ownedRequirement-> - selectByKind(ViewpointUsage)-> - select(isComposite) + triggerAction = ownedFeatureMembership-> + selectByKind(TransitionFeatureMembership)-> + select(kind = TransitionFeatureKind::trigger).transitionFeatures-> + selectByKind(AcceptActionUsage) - - - <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>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 - viewRendering = - let renderings: OrderedSet(ViewRenderingMembership) = - featureMembership->selectByKind(ViewRenderingMembership) in - if renderings->isEmpty() then null - else renderings->first().referencedRendering - endif + succession.sourceFeature = source - - - <p>The <code>viewConditions</code> of a <code>ViewDefinition</code> are the <code>conditions</code> of its owned <code>ElementFilterMemberships</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 - viewCondition = ownedMembership-> - selectByKind(ElementFilterMembership). - condition + ownedMember->selectByKind(BindingConnector)->exists(b | + b.relatedFeatures->includes(source) and + b.relatedFeatures->includes(inputParameter(1))) - - - <p>A <code>ViewDefinition</code> must have at most one <code>ViewRenderingMembership</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 - featureMembership-> - selectByKind(ViewRenderingMembership)-> - size() <= 1 + triggerAction->notEmpty() implies + let payloadParameter : Feature = inputParameter(2) in + payloadParameter <> null and + payloadParameter.subsetsChain(triggerAction->at(1), triggerPayloadParameter()) - - - </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>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 - specializesFromLibrary('Views::View') + ownedMember->selectByKind(BindingConnector)->exists(b | + b.relatedFeatures->includes(succession) and + b.relatedFeatures->includes(resolveGlobal( + 'TransitionPerformances::TransitionPerformance::transitionLink'))) - - - - <p>The <code>usages</code> of this <code>ViewDefinition</code> that are <code>ViewUsages</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> - - - - - - <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> + + OCL2.0 + if triggerAction->isEmpty() then + inputParameters()->size() >= 1 +else + inputParameters()->size() >= 2 +endif + + + + + + <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 + 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() + + + + + + <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>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 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>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 <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>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>The StateDefinitions featuring a certain StateUsage.</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 - - - - - <p>The <code>owningType</code> of a <code>ViewRenderingMembership</code> must be a <code>ViewDefinition</code> or a <code>ViewUsage</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>The <code>owningType</code> of a <code>StateSubactionMembership</code> must be a <code>StateDefinition</code> or a <code>StateUsage</code>.</p> - + OCL2.0 - owningType.oclIsKindOf(ViewDefinition) or -owningType.oclIsKindOf(ViewUsage) + owningType.oclIsKindOf(StateDefinition) or +owningType.oclIsKindOf(StateUsage) - + - - - <p>The owned <code>RenderingUsage</code> that is either itself the <code>referencedRendering</code> or subsets the <code>referencedRendering</code>. + + + <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>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>ActionUsage</code> that is the <code>ownedMemberFeature</code> of this <code>StateSubactionMembership</code>.</p> - - + + + - - - - + + + + <p>The TransitionFeatureMembership that owns a certain Step (if any).</p> + + + + - - - - <p>The ViewUsages that have a certain <code>ViewDefinition</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>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 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>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>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>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>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 - specializesFromLibrary('Views::renderings') + kind = TransitionFeatureKind::trigger implies + transitionFeature.oclIsKindOf(AcceptActionUsage) - - - <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>owningType</code> of a <code>TransitionFeatureMembership</code> must be a <code>TransitionUsage</code>.</p> - + OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(RenderingDefinition) or - owningType.oclIsKindOf(RenderingUsage)) implies - specializesFromLibrary('Views::Rendering::subrenderings') + owningType.oclIsKindOf(TransitionUsage) - - - <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>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 - owningFeatureMembership <> null and -owningFeatureMembership.oclIsKindOf(ViewRenderingMembership) implies - redefinesFromLibrary('Views::View::viewRendering') + 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>The <code>RenderingDefinition</code> that is the <code>definition</code> of this <code>RenderingUsage</code>.</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> - - - - - - - - <p>The RenderingDefinitions that feature a certain <code>rendering</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>A ViewUsage exposing a certain <code>exposedElement</code>.</p> + + + + <p>The <code>Step</code> that is the <code>ownedMemberFeature</code> of this <code>TransitionFeatureMembership</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> + + + + <p>The StateDefinitions with a certain <tt>exitAction</tt>.</p> - - + + - - - - <p>The ViewDefinitions that feature a certain ViewUsage.</p> + + + + <p>The StateUsages with a certain <tt>exitAction</tt>.</p> - - + + - - - - <p>The ViewpointUsage that has a certain <code>viewpointStakeholder</code>.</p> + + + + <p>The StateUsages with a certain <tt>doAction</tt>.</p> - - + + - - - - <p>The VerificationUsages that are defined by a certain <code>verificationCaseDefinition</code>.</p> + + + + <p>The Transition that owns a certain Succession.</p> - - + + + - - - - <p>The RequirementVerificationMembership that owns a certain RequirementUsage as its <code>ownedRequirement</code>.</p> + + + + <p>The StateSubactionMembership that is the owner of a certain ActionUsage (if any).</p> - - + + + - - - <p>A <code>VerificationCaseUsage</code> is a </code>Usage</code> of a <code>VerificationCaseDefinition</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>The <code>verifiedRequirements</code> of a <code>VerificationCaseUsage</code> are the <code>verifiedRequirements</code> of its <code>RequirementVerificationMemberships</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 - verifiedRequirement = - if objectiveRequirement = null then OrderedSet{} - else - objectiveRequirement.featureMembership-> - selectByKind(RequirementVerificationMembership). - verifiedRequirement->asOrderedSet() - endif + specializesFromLibrary('States::StateAction') - - - <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>A <code>StateDefinition</code> must not have more than one owned <code>StateSubactionMembership</code> of each <code>kind</code>.</p> - + OCL2.0 - specializesFromLibrary('VerificationCases::verificationCases') + ownedMembership-> + selectByKind(StateSubactionMembership)-> + isUnique(kind) - - - 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>states</code> of a <code>StateDefinition</code> are those of its <code>actions</code> that are <code>StateUsages</code>.</p> - + OCL2.0 - isComposite and owningType <> null and - (owningType.oclIsKindOf(VerificationCaseDefinition) or - owningType.oclIsKindOf(VerificationCaseUsage)) implies - specializesFromLibrary('VerificationCases::VerificationCase::subVerificationCases') + state = action->selectByKind(StateUsage) - - - - <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 VerificationCaseUsages that verify a certain <code>verifiedRequirement</code>.</p> - - - - - - - - - <p>The VerificationCaseDefinitions 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>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 - kind = RequirementConstraintKind::requirement + 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>owningType</code> of a <code>RequirementVerificationMembership</code> must a <code>RequirementUsage</code> that is owned by an <code>ObjectiveMembership</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 - owningType.oclIsKindOf(RequirementUsage) and -owningType.owningFeatureMembership <> null and -owningType.owningFeatureMembership.oclIsKindOf(ObjectiveMembership) + 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 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>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 + isParallel implies + ownedAction.incomingTransition->isEmpty() and + ownedAction.outgoingTransition->isEmpty() + + + + + <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 + 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>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>kind</code> of a <code>RequirementVerificationMembership</code> must be <code>requirement</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>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>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 RequirementVerificationMembership that has a certain RequirementUsage as its <code>verifiedRequirement</code>.</p> + + + + <p>The StateUsages with a certain <tt>entryAction</tt>.</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 StateDefinitions with a certain <tt>entryAction</tt>.</p> + + + + + + + + + <p>The TransitionUsage outgoing from a certain source <tt>ActionUsage</tt>.</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>verifiedRequirements</code> of a <code>VerificationCaseDefinition</code> are the <code>verifiedRequirements</code> of its <code>RequirementVerificationMemberships</code>.</p> + + + <p>Indicates that the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is a <code>triggerAction</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> + + + + <p>Indicates that the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is a <code>guardExpression</code>.</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>Indicates that the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is an <code>effectAction</code>.</p> - - - + - - - - <p>The Definition that owns the <code>ownedCalculation</code>.</p> + + + + <p>The TransitionUsage that has a certain <tt>effectAction</tt>.</p> - - + + + - - - - <p>The CalculationDefinitions that feature a certain CalculationUsage.</p> + + + + <p>The ExhibitStateUsages that have a certain StateUsage as their <tt>exhibitedState</tt>.</p> - - - - + + - - - - <p>The CalculationUsage being typed by a certain Function.</p> + + + + <p>The TransitionUsage that is guarded by a certain Expression.</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>doAction</tt>.</p> + + + + + + + + + <p>The UseCaseUsage that includes a certain <code>includedUseCase</code>.</p> + + + + + + + + + <p>The UseCaseUsages being typed by a certain UseCaseDefinition.</p> + + + + + + + + <p>A <code>UseCaseUsage</code> is a <code>Usage</code> of a <code>UseCaseDefinition</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> + + + <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 - specializesFromLibrary('Calculations::Calculation') + includedUseCase = ownedUseCase-> + selectByKind(IncludeUseCaseUsage). + useCaseIncluded - - - <p>The <code>calculations</code> of a <code>CalculationDefinition</code> are those of its <code>actions</code> that are <code>CalculationUsages</code>.</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 - calculation = action->selectByKind(CalculationUsage) + specializesFromLibrary('UseCases::useCases') - - - - - - - <p>The <code>actions</code> of this <code>CalculationDefinition</code> that are <code>CalculationUsages</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 + 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 Usage in which the <code>nestedCalculation<code> is nested.</p> + + + + <p>The UseCaseDefinition that includes a certain <code>includedUseCase</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>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>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>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('Calculations::calculations') + 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 - owningType <> null and -(owningType.oclIsKindOf(CalculationDefinition) or - owningType.oclIsKindOf(CalculationUsage)) implies - specializesFromLibrary('Calculations::Calculation::subcalculations') + referencedFeatureTarget() <> null implies + referencedFeatureTarget().oclIsKindOf(UseCaseUsage) - - - - - - - <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>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>CalculationUsage</code> is not model-level evaluable.</p> - - - - OCL2.0 - false - - - - - - - - - - - - - - - - - <p>The AnalysisCaseUsages being typed by a certain AnalysisCaseDefinition.</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 IncludeUseCaseUsages that have a certain UseCaseUsage as their <code>includedUseCase</code>.</p> - - - - + + - - - <p>An <code>AnalysisCaseUsage</code> is a <code>Usage</code> of an <code>AnalysisCaseDefinition</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>resultExpression</code> of a <code>AnalysisCaseUsage</code> is the <code>ownedResultExpression</code> of its <code>ResultExpressionMembership</code>, if any.</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 - resultExpression = - let results : OrderedSet(ResultExpressionMembership) = - featureMembersip-> - selectByKind(ResultExpressionMembership) in - if results->isEmpty() then null - else results->first().ownedResultExpression - endif + includedUseCase = ownedUseCase-> + selectByKind(IncludeUseCaseUsage). + useCaseIncluded - - - <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>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('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 - isComposite and owningType <> null and - (owningType.oclIsKindOf(AnalysisCaseDefinition) or - owningType.oclIsKindOf(AnalysisCaseUsage)) implies - specializesFromLibrary('AnalysisCases::AnalysisCase::subAnalysisCases') + specializesFromLibrary('UseCases::UseCase') - - - - <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 <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>An <code>AnalysisCaseDefinition</code> is a <code>CaseDefinition</code> for the case of carrying out an analysis.</p> + + + <p>A <code>SuccessionFlowUsage</code> is a <code>FlowUsage</code> that is also a KerML <code>SuccessionFlow</code>.</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 - resultExpression = - let results : OrderedSet(ResultExpressionMembership) = - featureMembersip-> - selectByKind(ResultExpressionMembership) in - if results->isEmpty() then null - else results->first().ownedResultExpression - 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>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('AnalysisCases::AnalysisCase') + specializesFromLibrary('Flows::successionFlows') - - - - <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 CaseUsages that have a certain PartUsage as an <code>actorParameter</code>.</p> + + + + <p>The <code>FlowDefinitions<code> that have a certain Usage as <code>flowEnd</code>.</p> - - - - + + + - - - - <p>The ObjectMembership that owns a particular RequirementUsage as its <code>ownedObjectiveRequirement</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> - - - - - - - - - <p>The CaseDefinitions that have a certain RequirementUsage as their <code>objectiveRequirement</code>.</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> - - - - - - - - - <p>The CaseUsages that have a certain Usage as their <code>subjectParameter</code>.</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>The CaseDefinitions that have a certain Usage as their <code>subjectParameter</code>.</p> + + + + <p>The <code>FlowUsages<code> that have a certain <code>Interaction</code> as their <code>flowDefinition</code>.</p> - - - - + + - - - <p>A <code>CaseUsage</code> is a <code>Usage</code> of a <code>CaseDefinition</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>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>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 - objectiveRequirement = - let objectives: OrderedSet(RequirementUsage) = - featureMembership-> - selectByKind(ObjectiveMembership). - ownedRequirement in - if objectives->isEmpty() then null - else objectives->first().ownedObjectiveRequirement - endif + specializesFromLibrary('Flows::MessageAction') - - - <p>A <code>CaseUsage</code> must have at most one <code>featureMembership</code> that is a <code>ObjectiveMembership</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 - featureMembership-> - selectByKind(ObjectiveMembership)-> - size() <= 1 + flowEnd->size() = 2 implies + specializesFromLibrary('Flows::Message') - - - <p>A <code>CaseUsage</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> + + + <p>A <code>FlowDefinition</code> may not have more than two <code>flowEnds</code>.</p> - + OCL2.0 - featureMembership-> - selectByKind(SubjectMembership)-> - size() <= 1 + flowEnd->size() <= 2 - - - <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>Usages</code> that define the things related by the <code>FlowDefinition</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 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>The <code>resultExpression</code> of a <code>AnalysisCaseUsage</code> is the <code>ownedResultExpression</code> of its <code>ResultExpressionMembership</code>, if any.</p> + + OCL2.0 - subjectParameter = - let subjects : OrderedSet(SubjectMembership) = - featureMembership->selectByKind(SubjectMembership) in - if subjects->isEmpty() then null - else subjects->first().ownedSubjectParameter + resultExpression = + let results : OrderedSet(ResultExpressionMembership) = + featureMembersip-> + selectByKind(ResultExpressionMembership) in + if results->isEmpty() then null + else results->first().ownedResultExpression endif - - - <p>The <code>subjectParameter</code> of a <code>CaseUsage</code> must be its first <code>input</code>.</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 - input->notEmpty() and input->first() = subjectParameter + specializesFromLibrary('AnalysisCases::analysisCases') - - - <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>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('Cases::cases') + isComposite and owningType <> null and + (owningType.oclIsKindOf(AnalysisCaseDefinition) or + owningType.oclIsKindOf(AnalysisCaseUsage)) implies + specializesFromLibrary('AnalysisCases::AnalysisCase::subAnalysisCases') - - - <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>AnalysisCaseDefinition</code> that is the <code>definition</code> of this <code>AnalysisCaseUsage</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 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>Expression</code> used to compute the <code>result</code> of the <code>AnalysisCaseUsage</code>, owned via a <code>ResultExpressionMembership</code>.</p> - - - - + + + + - - - - - - - - - - <p>The Usage in which the <code>nestedCase</code> is nested.</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>AnalysisCaseDefinition</code> is a <code>CaseDefinition</code> for the case of carrying out an analysis.</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>resultExpression</code> of a <code>AnalysisCaseDefinition</code> is the <code>ownedResultExpression</code> of its <code>ResultExpressionMembership</code>, if any.</p> - + OCL2.0 - owningType.oclIsType(CaseDefinition) or -owningType.oclIsType(CaseUsage) - + resultExpression = + let results : OrderedSet(ResultExpressionMembership) = + featureMembersip-> + selectByKind(ResultExpressionMembership) in + if results->isEmpty() then null + else results->first().ownedResultExpression + endif - - - <p>The <code>ownedObjectiveRequirement</code> of an <code>ObjectiveMembership</code> must be composite.</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 - ownedObjectiveRequirement.isComposite + specializesFromLibrary('AnalysisCases::AnalysisCase') - - - - - - <p>The RequirementUsage that is the <code>ownedMemberFeature</code> of this RequirementUsage.</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 CaseDefinitions that have a certain PartUsage as an <code>actorParameter</code>.</p> + + + + <p>The AnalysisCaseUsages that have a certain Expression as their <code>resultExpression</code>.</p> - - - - + + + - - - - <p>The CaseUsages being typed by a certain CaseDefinition.</p> + + + + <p>The AssignmentActionUsages that gave a certain <code>referent</code> Expression.</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>TerminateActionUsage</code> that has a certain <code>Expression</code> as its <code>terminatedOccurrenceArgument</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>objectiveRequirement</code> of a <code>CaseDefinition</code> is the <code>ownedObjectiveRequirement</code> of its <case>ObjectiveMembership</code>, 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> - + OCL2.0 - objectiveRequirement = - let objectives: OrderedSet(RequirementUsage) = - featureMembership-> - selectByKind(ObjectiveMembership). - ownedRequirement in - if objectives->isEmpty() then null - else objectives->first().ownedObjectiveRequirement + thenAction = + let parameter : Feature = inputParameter(2) in + if parameter <> null and parameter.oclIsKindOf(ActionUsage) then + parameter.oclAsType(ActionUsage) + else + null endif - - - <p>A <code>CaseDefinition</code> must have at most one <code>featureMembership</code> that is a <code>ObjectiveMembership</code>.</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> - + OCL2.0 - featureMembership-> - selectByKind(ObjectiveMembership)-> - size() <= 1 + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::ifSubactions') - - - <p>The <code>subjectParameter</code> of a <code>CaseDefinition</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p> + + + <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 - subjectParameter = - let subjectMems : OrderedSet(SubjectMembership) = - featureMembership->selectByKind(SubjectMembership) in - if subjectMems->isEmpty() then null - else subjectMems->first().ownedSubjectParameter - endif + if elseAction = null then + specializesFromLibrary('Actions::ifThenActions') +else + specializesFromLibrary('Actions::ifThenElseActions') +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> + + + <p>The <code>ifArgument</code> of an <code>ifActionUsage</code> is its first <code>parameter</code>, which must be an <code>Expression</code>.</p> - + OCL2.0 - actorParameter = featureMembership-> - selectByKind(ActorMembership). - ownedActorParameter + ifArgument = + let parameter : Feature = inputParameter(1) in + if parameter <> null and parameter.oclIsKindOf(Expression) then + parameter.oclAsType(Expression) + else + null + endif - - - <p>A <code>CaseDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> + + + <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> - - English - featureMembership->selectByKind(SubjectMembership)->size() <= 1 + + OCL2.0 + elseAction = + let parameter : Feature = inputParameter(3) in + if parameter <> null and parameter.oclIsKindOf(ActionUsage) then + parameter.oclAsType(ActionUsage) + else + null + endif - - - <p>The <code>subjectParameter</code> of a <code>CaaseDefinition</code> must be its first <code>input</code>.</p> + + + <p>An <code>IfActionUsage</code> must have at least two owned <code>input</code> <code>parameters</code>.</p> - + OCL2.0 - input->notEmpty() and input->first() = subjectParameter + inputParameters()->size() >= 2 - - - <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>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>parameter</code> of this <code>CaseDefinition</code> that represents its subject.</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>parameters</code> of this <code>CaseDefinition</code> that represent actors involved in the case.</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 ConnectionDefinitions that have a certain Usage as an <code>connectionEnd</code>.</p> + + + + <p>The <code>IfActionUsage</code> that has a certain <code>Expression</code> as its <code>ifArgument</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>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>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>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('Connections::connections') + specializesFromLibrary('Actions::Action') - - - <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> The <code>actions</code> of a <code>ActionDefinition</code> are those of its <code>usages</code> that are <code>ActionUsages</code>.</p> - + OCL2.0 - ownedEndFeature->size() = 2 implies - specializesFromLibrary('Connections::binaryConnections') + action = usage->selectByKind(ActionUsage) - - - - - <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>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>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><code>TriggerKind</code> enumerates the kinds of triggers that can be represented by a <code>TriggerInvocationExpression</code>.</p> - - - - - - - - - <p>The ConnectionUsages that have a certain AssociationStructure as their <code>connectionDefinition</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>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>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>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 - specializesFromLibrary('Connections::Connection') + 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>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>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 - ownedEndFeature->size() = 2 implies - specializesFromLibrary('Connections::BinaryConnection') + kind = TriggerKind::at implies + argument->notEmpty() and + argument->at(1).result.specializesFromLibrary('Time::TimeInstantValue') - - - <p>A <code>ConnectionDefinition</code> must have <code>isSufficient = true</code>.</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 - isSufficient + 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>The <code>Usages</code> that define the things related by the <code>ConnectionDefinition</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>A <code>ConnectionDefinition</code> always has <code>isSufficient = true</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>A <code>BindingConnectorAsUsage</code> is both a <code>BindingConnector</code> and a <code>ConnectorAsUsage</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>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>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>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('States::StateAction') + specializesFromLibrary('Actions::terminateActions') - - - <p>A <code>StateDefinition</code> must not have more than one owned <code>StateSubactionMembership</code> of each <code>kind</code>.</p> + + + <p>The <code>terminatedOccurrenceArgument</code> of a <code>TerminateActionUsage</code> is its first argument.</p> - + OCL2.0 - ownedMembership-> - selectByKind(StateSubactionMembership)-> - isUnique(kind) + terminatedOccurrenceArgument = argument(1) - - - <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 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 - state = action->selectByKind(StateUsage) + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::terminateSubactions') - - - <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>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>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 - doAction = - let doMemberships : Sequence(StateSubactionMembership) = - ownedMembership-> - selectByKind(StateSubactionMembership)-> - select(kind = StateSubactionKind::do) in - if doMemberships->isEmpty() then null - else doMemberships->at(1) - endif + sourceConnector->selectAsKind(Succession)->size() <= 1 - - - <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>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 - entryAction = - let entryMemberships : Sequence(StateSubactionMembership) = - ownedMembership-> - selectByKind(StateSubactionMembership)-> - select(kind = StateSubactionKind::entry) in - if entryMemberships->isEmpty() then null - else entryMemberships->at(1) - endif + targetConnector->selectByKind(Succession)-> + collect(connectorEnd->at(1))-> + forAll(sourceMult | + multiplicityHasBounds(sourceMult, 0, 1)) - - - <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>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 - isParallel implies - ownedAction.incomingTransition->isEmpty() and - ownedAction.outgoingTransition->isEmpty() + targetConnector->selectByKind(Succession)-> + forAll(subsetsChain(self, + resolveGlobal('ControlPerformances::MergePerformance::incomingHBLink'))) - - - <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>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 - exitAction = - let exitMemberships : Sequence(StateSubactionMembership) = - ownedMembership-> - selectByKind(StateSubactionMembership)-> - select(kind = StateSubactionKind::exit) in - if exitMemberships->isEmpty() then null - else exitMemberships->at(1) - endif + specializesFromLibrary('Actions::Action::merges') - - - - <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 StateDefinitions with a certain <tt>doAction</tt>.</p> - - - - + - - - - <p>The TransitionUsage that has a certain <tt>effectAction</tt>.</p> + + + + <p>The <code>ForLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>seqArgument</code>.</p> - - - + + - - - - <p>The TransitionFeatureMembership that owns a certain Step (if any).</p> + + + + <p>The IfActionUsage that has a certain ActionUsage as its <code>elseAction</code>.</p> - - - + + - - - - <p>The TransitionUsage that is guarded by a certain Expression.</p> + + + + <p>The <code>IfActionUsage</code> that has a certain <code>ActionUsage</code> as its <code>thenAction</code>.</p> - - - + + - - - - <p>The TransitionUsage outgoing from a certain source <tt>ActionUsage</tt>.</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 StateDefinitions with a certain <tt>entryAction</tt>.</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> - - - - - - - - <p>The TransitionUsage incoming to a certain target <tt>ActionUsage</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>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> + + 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> - - - - - <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> + + 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 - doAction = - let doMemberships : Sequence(StateSubactionMembership) = - ownedMembership-> - selectByKind(StateSubactionMembership)-> - select(kind = StateSubactionKind::do) in - if doMemberships->isEmpty() then null - else doMemberships->at(1) - endif + specializesFromLibrary('Actions::forLoopActions') - - - <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>loopVariable</code> of a <code>ForLoopActionUsage</code> is its first <code>ownedFeature</code>, which must be a <code>ReferenceUsage</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) + loopVariable = + if ownedFeature->isEmpty() or + not ownedFeature->first().oclIsKindOf(ReferenceUsage) then + null + else + ownedFeature->first().oclAsType(ReferenceUsage) 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 first <code>ownedFeature</code> of a <code>ForLoopActionUsage</code> must be a <code>ReferenceUsage</code>.</p> - + OCL2.0 - isParallel implies - nestedAction.incomingTransition->isEmpty() and - nestedAction.outgoingTransition->isEmpty() + ownedFeature->notEmpty() and +ownedFeature->at(1).oclIsKindOf(ReferenceUsage) + - - - <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>A <code>ForLoopActionUsage</code> must have two owned <code>input</code> <code>parameters</code>.</p> - + OCL2.0 - isSubstateUsage(false) implies - specializesFromLibrary('States::StateAction::exclusiveStates') + inputParameters()->size() = 2 - - - <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>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>The PerformActionUsages that have a certain ActionUsage as their <code>performedAction</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 - exitAction = - let exitMemberships : Sequence(StateSubactionMembership) = - ownedMembership-> - selectByKind(StateSubactionMembership)-> - select(kind = StateSubactionKind::exit) in - if exitMemberships->isEmpty() then null - else exitMemberships->at(1) - endif + sourceConnector->selectByKind(Succession)-> + collect(connectorEnd->at(1).multiplicity)-> + forAll(sourceMult | + multiplicityHasBounds(sourceMult, 1, 1)) - - - <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>owningType</code> of a <code>ControlNode</code> must be an <code>ActionDefinition</code> or <code>ActionUsage</code>.</p> - + OCL2.0 - specializesFromLibrary('States::stateActions') + owningType <> null and +(owningType.oclIsKindOf(ActionDefinition) or + owningType.oclIsKindOf(ActionUsage)) - - - <p>A <code>StateUsage</code> must not have more than one owned <code>StateSubactionMembership</code> of each <code>kind</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 - ownedMembership-> - selectByKind(StateSubactionMembership)-> - isUnique(kind) + targetConnector->selectByKind(Succession)-> + collect(connectorEnd->at(2).multiplicity)-> + forAll(targetMult | + multiplicityHasBounds(targetMult, 1, 1)) - - - <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>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 - isSubstateUsage(true) implies - specializesFromLibrary('States::StateAction::substates') + specializesFromLibrary('Action::Action::controls') - - - <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>A <code>ControlNode</code> must be composite.</p> - + OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(PartDefinition) or - owningType.oclIsKindOf(PartUsage)) implies - specializesFromLibrary('Parts::Part::ownedStates') + isComposite - - - - <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>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>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>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>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>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>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) + 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 StateDefinitions with a certain <tt>exitAction</tt>.</p> - - - - - - - - - <p>The Transition that owns a certain Succession.</p> - - - - - - - - - - <p>The StateSubactionMembership that is the owner of a certain ActionUsage (if any).</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>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>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 - 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>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>bodyAction</code> of a <code>LoopActionUsage</code> is its second input <code>parameter</code>, which must be an <code>Action</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') + bodyAction = + let parameter : Feature = inputParameter(2) in + if parameter <> null and parameter.oclIsKindOf(Action) then + parameter.oclAsType(Action) + else + null + endif - - - <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>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 - specializesFromLibrary('Actions::transitionActions') - - - - - <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>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 one 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 - source = - let sourceFeature : Feature = sourceFeature() in - if sourceFeature = null then null - else sourceFeature.featureTarget.oclAsType(ActionUsage) + inputParameters()->notEmpty() - - - <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>receiverArgument</code> of an <code>AcceptUsageAction</code> is its second argument <code>Expression</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 - + receiverArgument = argument(2) - - - <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>payloadArgument</code> of an <code>AcceptUsageAction</code> is its first argument <code>Expression</code>.</p> - + OCL2.0 - triggerAction = ownedFeatureMembership-> - selectByKind(TransitionFeatureMembership)-> - select(kind = TransitionFeatureKind::trigger).transitionFeature-> - selectByKind(AcceptActionUsage) + payloadArgument = argument(1) - - - <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>payloadParameter</code> of an <code>AcceptActionUsage<code> is its first <code>parameter</code>.</p> - + OCL2.0 - let successions : Sequence(Successions) = - ownedMember->selectByKind(Succession) in -successions->notEmpty() and -successions->at(1).targetFeature.featureTarget-> - forAll(oclIsKindOf(ActionUsage)) + payloadParameter = + if parameter->isEmpty() then null + else parameter->first() 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>Expressions</code>.</p> + + + <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 - guardExpression = ownedFeatureMembership-> - selectByKind(TransitionFeatureMembership)-> - select(kind = TransitionFeatureKind::trigger).transitionFeature-> - selectByKind(Expression) + not isTriggerAction() implies + specializesFromLibrary('Actions::acceptActions') - - - <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>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> - + OCL2.0 - triggerAction->forAll(specializesFromLibrary('Actions::TransitionAction::accepter') and -guardExpression->forAll(specializesFromLibrary('Actions::TransitionAction::guard') and -effectAction->forAll(specializesFromLibrary('Actions::TransitionAction::effect')) + isSubactionUsage() and not isTriggerAction() implies + specializesFromLibrary('Actions::Action::acceptSubactions') - - - <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>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 - triggerAction = ownedFeatureMembership-> - selectByKind(TransitionFeatureMembership)-> - select(kind = TransitionFeatureKind::trigger).transitionFeatures-> - selectByKind(AcceptActionUsage) + isTriggerAction() implies + specializesFromLibrary('Actions::TransitionAction::accepter') - - - <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>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 - succession.sourceFeature = source + 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>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 - ownedMember->selectByKind(BindingConnector)->exists(b | - b.relatedFeatures->includes(source) and - b.relatedFeatures->includes(inputParameter(1))) - - - - - <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 - triggerAction->notEmpty() implies - let payloadParameter : Feature = inputParameter(2) in - payloadParameter <> null and - payloadParameter.subsetsChain(triggerAction->at(1), triggerPayloadParameter()) - - - - - <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 - ownedMember->selectByKind(BindingConnector)->exists(b | - b.relatedFeatures->includes(succession) and - b.relatedFeatures->includes(resolveGlobal( - 'TransitionPerformances::TransitionPerformance::transitionLink'))) - - - - - <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 - if triggerAction->isEmpty() then - inputParameters()->size() >= 1 -else - inputParameters()->size() >= 2 -endif - - - - - - <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 - 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() - - - - - - <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>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>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>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 <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>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>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> + + + <p>Check if this <code>AcceptActionUsage</code> is the <code>triggerAction</code> of a <code>TransitionUsage</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 + owningType <> null and +owningType.oclIsKindOf(TransitionUsage) and +owningType.oclAsType(TransitionUsage).triggerAction->includes(self) - - - - + + - - - <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>A <code>DecisionNode</code> is a <code>ControlNode</code> that makes a selection from its outgoing <code>Successions</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>A <code>DecisionNode</code> may have at most one incoming <code>Succession</code>.</p> - + OCL2.0 - kind = TransitionFeatureKind::trigger implies - transitionFeature.oclIsKindOf(AcceptActionUsage) + targetConnector->selectByKind(Succession)->size() <= 1 - - - <p>The <code>owningType</code> of a <code>TransitionFeatureMembership</code> must be a <code>TransitionUsage</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 - owningType.oclIsKindOf(TransitionUsage) + sourceConnector->selectAsKind(Succession)-> + collect(connectorEnd->at(2))-> + forAll(targetMult | + multiplicityHasBounds(targetMult, 0, 1)) - - - <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 <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 - 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) + specializesFromLibrary('Actions::Action::decisions') - - - <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>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 - kind = TransitionFeatureKind::effect implies - transitionFeature.oclIsKindOf(ActionUsage) + sourceConnector->selectByKind(Succession)-> + forAll(subsetsChain(self, + resolveGlobal('ControlPerformances::DecisionPerformance::outgoingHBLink'))) - - - - - - <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>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>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>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>JoinNode</code> may have at most one outgoing <code>Succession</code>.</p> - + OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(PartDefinition) or - owningType.oclIsKindOf(PartUsage)) implies - specializesFromLibrary('Parts::Part::exhibitedStates') + sourceConnector->selectByKind(Succession)->size() <= 1 - - - <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>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 - referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(StateUsage) + specializesFromLibrary('Actions::Action::join') - - - - - <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 StateUsages with a certain <tt>entryAction</tt>.</p> + + + + <p>The AssignmentActionUsage that has a certain Expression as its <code>valueArgument</code>.</p> - - + + - - - - <p>The ExhibitStateUsages that have a certain StateUsage as their <tt>exhibitedState</tt>.</p> + + + + <p>The AcceptActionUsage that has a certain Expression as its <code>receiverArgument</code>.</p> - - + + - - - - <p>The StateUsages with a certain <tt>doAction</tt>.</p> + + + + <p>The <code>SendActionUsage</code> that has a certain <code>Expression<code> as its <code>receiverArgument</code>.</p> - - + + - - - - <p>The TransitionUsage that is triggered by a certain AcceptActionUsage.</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 StateDefinitions featuring a certain StateUsage.</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 StateUsages with a certain <tt>exitAction</tt>.</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>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 + 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> - + OCL2.0 - owningType.oclIsKindOf(StateDefinition) or -owningType.oclIsKindOf(StateUsage) + whileArgument = + let parameter : Feature = inputParameter(1) in + if parameter <> null and parameter.oclIsKindOf(Expression) then + parameter.oclAsType(Expression) + else + null + endif + - - - - - - <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>WhileLoopActionUsage</code> must have at least two owned <code>input</code> <code>parameters</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>ActionUsage</code> that is the <code>ownedMemberFeature</code> of this <code>StateSubactionMembership</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>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>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>The <code>WhileLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>untilArgument</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>SendActionUsage</code> that has a certain <code>Expression</code> as its <code>itemsArgument</code>.</p> - + + + - - - - <p>The EventOccurrenceUsages that reference a certain <code>eventOccurrence</code>.</p> + + + + <p>The <code>LoopActionUsage</code> that has a certain <code>ActionUsage</code> as its <code>bodyAction</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>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>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 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 - isIndividual implies specializesFromLibrary('Occurrences::Life') + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::subactions') - - - <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>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 - isIndividual implies - multiplicity <> null and - multiplicity.specializesFromLibrary('Base::zeroOrOne') + specializesFromLibrary('Actions::actions') - - - - - - - <p>Whether this <code>OccurrenceDefinition</code> is constrained to represent at most one thing.</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>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 - eventOccurrence = - if referencedFeatureTarget() = null then self - else if referencedFeatureTarget().oclIsKindOf(OccurrenceUsage) then - referencedFeatureTarget().oclAsType(OccurrenceUsage) - else null - endif endif + isComposite and owningType <> null and +(owningType.oclIsKindOf(PartDefinition) or + owningType.oclIsKindOf(PartUsage)) implies + specializesFromLibrary('Parts::Part::ownedActions') - - - <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>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 - referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(OccurrenceUsage) + 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>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>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 - owningType <> null and -(owningType.oclIsKindOf(OccurrenceDefinition) or - owningType.oclIsKindOf(OccurrenceUsage)) implies - specializesFromLibrary('Occurrences::Occurrence::timeEnclosedOccurrences') - - - - - <p>An <code>EventOccurrenceUsage</code> must be referential.</p> + + + + + + + + + <p>Return the owned input <code>parameters</code> of this <code>ActionUsage</code>.</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> + + + 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>Always true for an <code>EventOccurrenceUsage</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 <code>OccurrenceUsage</code> that has a certain <code>individualDefinition</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>OccurrenceUsages</code> being typed by a certain <code>Class</code>.</p> + + + + <p>The AcceptActionUsage that owns the <code>payloadParameter</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 <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>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>senderArgument</code> of a <code>SendActionUsage</code> is its second argument <code>Expression</code>.</p> - + OCL2.0 - individualDefinition = - let individualDefinitions : OrderedSet(OccurrenceDefinition) = - occurrenceDefinition-> - selectByKind(OccurrenceDefinition)-> - select(isIndividual) in - if individualDefinitions->isEmpty() then null - else individualDefinitions->first() endif + senderArgument = argument(2) - - - <p>If an <code>OccurrenceUsage</code> has <code>isIndividual = true</code>, then it must have an <code>individualDefinition</code>.</p> + + + <p>The <code>payloadArgument</code> of a <code>SendActionUsage</code> is its first argument <code>Expression</code>.</p> - + OCL2.0 - isIndividual implies individualDefinition <> null + payloadArgument = argument(1) - - - <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>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 - 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>. + 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> - + 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') + receiverArgument = argument(3) - - - <p>An <code>OccurrenceUsage</code> must have at most one <code>occurrenceDefinition</code> with <code>isIndividual = true</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> - + OCL2.0 - occurrenceDefinition-> - selectByKind(OccurrenceDefinition)-> - select(isIndividual).size() <= 1 + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::sendSubactions') - - - <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>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 - portionKind = PortionKind::snapshot implies - specializesFromLibrary('Occurrences::Occurrence::snapshots') + specializesFromLibrary('Actions::sendActions') - - - <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>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>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 - portionKind = PortionKind::timeslice implies - specializesFromLibrary('Occurrences::Occurrence::timeSlices') + specializesFromLibrary('Actions::assignmentActions') - - - <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 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 - portionKind <> null implies - owningType <> null and - (owningType.oclIsKindOf(OccurrenceDefinition) or - owningType.oclIsKindOf(OccurrenceUsage)) + let targetParameter : Feature = inputParameter(1) in +targetParameter <> null and +targetParameter.ownedFeature->notEmpty() and +targetParameter.ownedFeature->first(). + redefinesFromLibrary('AssignmentAction::target::startingAt') - - - <p>If an <code>OccurrenceUsage</code> has a non-null <code>portionKind</code>, then it must have <code>isPortion = true</code>.</p> + + + <p>The <code>valueExpression</code> of a <code>AssignmentActionUsage</code> is its second argument <code>Expression</code>.</p> - + OCL2.0 - portionKind <> null implies isPortion + valueExpression = argument(2) - - - - <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 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>targetArgument</code> of a <code>AssignmentActionUsage</code> is its first argument <code>Expression</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 + 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 - ownedEndFeature->size() = 2 implies - specializesFromLibrary('Interfaces::binaryInterfaces') + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::assignments') - - - <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 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('Interfaces::interfaces') + 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>InterfaceDefinitions</code> that type this <code>InterfaceUsage</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>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 + 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> - + OCL2.0 - specializesFromLibrary('Interfaces::Interface') + 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>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>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 - ownedEndFeature->size() = 2 implies - specializesFromLibrary('Interfaces::BinaryInterface') + ownedMembership->exists( + not oclIsKindOf(OwningMembership) and + memberElement.oclIsKindOf(Feature) and + not memberElement.oclIsKindOf(MetadataFeature)) - - - - <p>The <code>PortUsages</code> that are the <code>connectionEnds</code> of this <code>InterfaceDefinition</code>. - - + + + <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>The InterfaceDefinitions that have a certain PortUsage as an <code>interfaceEnd</code>.</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 InterfaceUsages typed by a certain InterfaceDefinition.</p> + + + + <p>The Activities that feature a certain ActionUsage.</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 <code>WhileLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>whileArgument</code>.</p> - + + + - - - - <p>The SatisfyRequirementUsages that have a certain Feature as their <tt>satisfyingFeature</tt>.</p> + + + + <p>The ActionUsages being typed by a certain Behavior.</p> - - + + + + - - - - <p>The RequirementDefinitions that have a certain PartUsage as an <code>actorParameter</code>.</p> + + + + <p>The <code>SendActionUsage</code> that has a certain <code>Expression</code> as its <code>senderArgument</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>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>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>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 - owningType.oclIsKindOf(RequirementUsage) or -owningType.oclIsKindOf(RequirementDefinition) or -owningType.oclIsKindOf(CaseDefinition) or -owningType.oclIsKindOf(CaseUsage) - + referencedFeatureTarget() <> null implies + referencedFeatureTarget().oclIsKindOf(ActionUsage) - - - - - - <p>The <code>PartUsage</code> specifying the actor.</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> + + + <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.oclIsKindOf(RequirementUsage) or -owningType.oclIsKindOf(RequirementDefinition) + owningType <> null and +(owningType.oclIsKindOf(PartDefinition) or + owningType.oclIsKindOf(PartUsage)) implies + specializesFromLibrary('Parts::Part::performedActions') - - - - - - <p>The <code>PartUsage</code> specifying the stakeholder.</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 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>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>The AssignmentActionUsage that has a certain Expression as its <code>targetArgument</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>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>A <code>ForkNode</code> may have at most one incoming <code>Succession</code>.</p> - + OCL2.0 - specializesFromLibrary('Requirements::ConcernCheck') + targetConnector->selectByKind(Succession)->size() <= 1 - - - - - - <p>The RequirementConstraintMembership that has a certain ConstraintUsage as its <code>referencedConstraint</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 + specializesFromLibrary('Actions::Action::forks') + + + - - - - <p>The ActorMembership that has a certain PartUsage as its <code>ownedActorParameter</code>.</p> + + + + The <code>ForLoopActionUsage</code> that has a certain <code>ReferenceUsage</code> as its <code>loopVariable</code>. - - - + + - - - - <p>The RequirementDefinition that addresses a certain <code>addressedConcern</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 RequirementUsage that has a certain ConstraintUsage as an <cod>assumedConstraint</code> (if any).</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> - - - - + + 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(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>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 RequirementConstraintMembership that owns a certain ConstraintUsage as its <code>ownedConstraint</code>.</p> + + + + <p>The ConstraintUsages typed by a certain Predicate.</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>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>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 <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 - owningType.oclIsType(RequirementDefinition) or -owningType.oclIsType(RequiremenCaseRequirementDefinition) or -owningType.oclIsType(CaseDefinition) or -owningType.oclIsType(CaseUsage) - + specializesFromLibrary('Constraints::ConstraintCheck') - - + + + - - - <p>The <code>Usage</code< that is the <code>ownedMemberParameter</code> of this <code>SubjectMembership</code>.</p> + + + + + <p>The AssertConstraintUsages that have a certain ConstraintUsage as their <tt>assertedConstraint</tt>.</p> - - - - + + + - - - <p>A <code>RequirementUsage</code> is a <code>Usage</code> of a <code>RequirementDefinition</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>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>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 - actorParameter = featureMembership-> - selectByKind(ActorMembership). - ownedActorParameter + assertedConstraint = + if referencedFeatureTarget() = null then self + else if referencedFeatureTarget().oclIsKindOf(ConstraintUsage) then + referencedFeatureTarget().oclAsType(ConstraintUsage) + else null + endif 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>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 - assumedConstraint = ownedFeatureMembership-> - selectByKind(RequirementConstraintMembership)-> - select(kind = RequirementConstraintKind::assumption). - ownedConstraint + if isNegated then + specializesFromLibrary('Constraints::negatedConstraintChecks') +else + specializesFromLibrary('Constraints::assertedConstraintChecks') +endif - - - <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>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 - framedConcern = featureMembership-> - selectByKind(FramedConcernMembership). - ownedConcern + referencedFeatureTarget() <> null implies + referencedFeatureTarget().oclIsKindOf(ConstraintUsage) - - - <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>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>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 - requiredConstraint = ownedFeatureMembership-> - selectByKind(RequirementConstraintMembership)-> - select(kind = RequirementConstraintKind::requirement). - ownedConstraint + isReference - - - <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>All <code>features</code> of an <code>AttributeUsage</code> must be non-composite.</p> - + OCL2.0 - stakeholderParameter = featureMembership-> - selectByKind(AStakholderMembership). - ownedStakeholderParameter + feature->forAll(not isComposite) - - - <p>The <code>subjectParameter</code> of a <code>RequirementUsage</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</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 - subjectParameter = + 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>Always true for an <code>AttributeUsage</code>.</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) + + + + + + + + + + + <p>The AttributeUsages that are typed by a certain DataType.</p> + + + + + + + + + <p>The RequirementConstraintMembership that owns a certain ConstraintUsage as its <code>ownedConstraint</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>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 + 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> + + + 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> + + + 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> + + + 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> + + + 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> + + + OCL2.0 + subjectParameter = let subjects : OrderedSet(SubjectMembership) = featureMembership->selectByKind(SubjectMembership) in if subjects->isEmpty() then null @@ -3230,13 +3399,14 @@ owningType.oclIsType(CaseUsage) - <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> but is <em>not</em> owned via a <code>RequirementConstraintMembership</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 isComposite and owningType <> null and (owningType.oclIsKindOf(RequirementDefinition) or - owningType.oclIsKindOf(RequirementUsage)) implies + owningType.oclIsKindOf(RequirementUsage)) and + not owningFeatureMembership.oclIsKindOf(RequirementConstraintMembership) implies specializesFromLibrary('Requirements::RequirementCheck::subrequirements') @@ -3344,20 +3514,15 @@ owningFeatureMembership.oclIsKindOf(RequirementVerificationMembership) implies - - - - - - - - - - - - - + + + + <p>The RequirementUsages that have a certain Usage as their <code>subjectParameter</code>.</p> + + + + @@ -3371,60 +3536,15 @@ owningFeatureMembership.oclIsKindOf(RequirementVerificationMembership) implies - - - - <p>The ConcernUsages that are typed by a certain <code>concernDefinition</code>.</p> - - - - - - - - - <p>The RequirementDefinition that has a certain ConstraintUsage as an <code>assumedConstraint</code> (if any).</p> + + + + <p>The SatisfyRequirementUsages that have a certain Feature as their <tt>satisfyingFeature</tt>.</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 - kind = RequirementConstraintKind::requirement - - - - - - <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> - - - - - @@ -3435,26 +3555,43 @@ owningFeatureMembership.oclIsKindOf(RequirementVerificationMembership) implies - - - - <p>The AddressedConcernMembership that owns a certain ConcernUsage as its <code>ownedConcern</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>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 SatifyRequirementUsages that have a certain RequirementUsage as their <tt>satisfiedRequirement</tt>.</p> - - OCL2.0 - text = documentation.body + + + + + + + + <p>The RequirementConstraintMembership that has a certain ConstraintUsage as its <code>referencedConstraint</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>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 + text = documentation.body @@ -3627,170 +3764,51 @@ owningFeatureMembership.oclIsKindOf(RequirementVerificationMembership) implies - - - <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 - 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>owningType</code> of a <code>RequirementConstraintMembership</code> must be a <code>RequirementDefinition</code> or a <code>RequirementUsage</code>.</p> - - - OCL2.0 - owningType.oclIsKindOf(RequirementDefinition) or -owningType.oclIsKindOf(RequirementUsage) - - - - - <p>The <code>ownedConstraint</code> of a <code>RequirementConstraintMembership</code> must be composite.</p> - - - OCL2.0 - ownedConstraint.isComposite - - - - - - - - <p>Whether the <code>RequirementConstraintMembership</code> is for an assumed or required <code>ConstraintUsage</code>.</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 RequirementUsages typed by a certain RequirementDefinition.</p> - - - - - - - - - <p>The AddressedConcernMembership that has a certain ConcernUsage as its <code>addressedConcern</code>.</p> - - - - - - - - - <p>The RequirementUsage that addresses a certain <code>addressedConcern</code>.</p> - - - - - - - - - <p>The RequirementDefinition that has a certain ConstraintUsage as a <code>requiredConstraint</code> (if any).</p> - - - - - - - - - - <p>The RequirementUsages that have a certain Usage as their <code>subjectParameter</code>.</p> + + + + <p>The AddressedConcernMembership that owns a certain ConcernUsage as its <code>ownedConcern</code>.</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>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>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 - 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 <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> - + OCL2.0 - owningFeatureMembership <> null and -owningFeatureMembership.oclIsKindOf(FramedConcernMembership) implies - specializesFromLibrary('Requirements::RequirementCheck::concerns') + owningType.oclIsType(RequirementDefinition) or +owningType.oclIsType(RequiremenCaseRequirementDefinition) or +owningType.oclIsType(CaseDefinition) or +owningType.oclIsType(CaseUsage) + - - - - <p>The ConcernDefinition that is the single type of this ConcernUsage.</p> + + + + + + <p>The <code>Usage</code< that is the <code>ownedMemberParameter</code> of this <code>SubjectMembership</code>.</p> - - + + + - - - - <p>TheStakehplderMembership that has a certain PartUsage as its <code>ownedStakeholderParameter</code>.</p> - - - - - - - - - - <p>The RequirementUsage that has a certain ConstraintUsage as a <code>requiredConstraint</code> (if any).</p> + + + + <p>The RequirementUsage that has a certain ConstraintUsage as an <cod>assumedConstraint</code> (if any).</p> - - + + @@ -3880,2274 +3898,1886 @@ endif - - - - <p>The SatifyRequirementUsages that have a certain RequirementUsage as their <tt>satisfiedRequirement</tt>.</p> + + + + <p>The AddressedConcernMembership that has a certain ConcernUsage as its <code>addressedConcern</code>.</p> - - + + - - - - <p>The <code>SendActionUsage</code> that has a certain <code>Expression<code> as its <code>receiverArgument</code>.</p> + + + + <p>The RequirementDefinition that has a certain ConstraintUsage as an <code>assumedConstraint</code> (if any).</p> - - + + + - - - - <p>The <code>WhileLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>untilArgument</code>.</p> + + + + <p>The ActorMembership that has a certain PartUsage as its <code>ownedActorParameter</code>.</p> - - + + + - - - - <p>The Activities that feature a certain ActionUsage.</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>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>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> + + + <p>The <code>owningType</code> of a <code>StakeholderMembership</code> must be a <code>RequirementDefinition</code> or <code>RequirementUsage</code>.</p> - + OCL2.0 - let targetParameter : Feature = inputParameter(1) in -targetParameter <> null and -targetParameter.ownedFeature->notEmpty() and -targetParameter.ownedFeature->first(). - redefinesFromLibrary('AssignmentAction::target::startingAt') + owningType.oclIsKindOf(RequirementUsage) or +owningType.oclIsKindOf(RequirementDefinition) - - - <p>The <code>valueExpression</code> of a <code>AssignmentActionUsage</code> is its second argument <code>Expression</code>.</p> + + + + + + <p>The <code>PartUsage</code> specifying the stakeholder.</p> - - OCL2.0 - valueExpression = argument(2) - - - - - <p>The <code>targetArgument</code> of a <code>AssignmentActionUsage</code> is its first argument <code>Expression</code>.</p> + + + + + + + + + <p>The RequirementUsage that addresses a certain <code>addressedConcern</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> + + + + + + + <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> - - 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> + + + + <p>Indicates that a member <code>ConstraintUsage</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage</code>represents an requirement.</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(). - redefinesFromLibrary('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> + + + + + + <p>The RequirementDefinition that addresses a certain <code>addressedConcern</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>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 - 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 + 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>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> + + + <p>The <code>owningType</code> of a <code>RequirementConstraintMembership</code> must be a <code>RequirementDefinition</code> or a <code>RequirementUsage</code>.</p> - + OCL2.0 - ownedMembership->exists( - not oclIsKindOf(OwningMembership) and - memberElement.oclIsKindOf(Feature) and - not memberElement.oclIsKindOf(MetadataFeature)) + owningType.oclIsKindOf(RequirementDefinition) or +owningType.oclIsKindOf(RequirementUsage) - - - <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>The <code>ownedConstraint</code> of a <code>RequirementConstraintMembership</code> must be composite.</p> - + OCL2.0 - referent <> null implies referent.featureTarget.isVariable + ownedConstraint.isComposite - - - - <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>Whether the <code>RequirementConstraintMembership</code> is for an assumed or required <code>ConstraintUsage</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>ConstraintUsage</code> that is the <code>ownedMemberFeature</code> of this <code>RequirementConstraintMembership</code>.</p> - - - + + + - - - <p>The <code>Feature</code> whose value is to be set.</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 <code>SendActionUsage</code> that has a certain <code>Expression</code> as its <code>itemsArgument</code>.</p> + + + + <p>The RequirementDefinition that has a certain ConstraintUsage as a <code>requiredConstraint</code> (if any).</p> - - + + + - - - - <p>The <code>IfActionUsage</code> that has a certain <code>Expression</code> as its <code>ifArgument</code>.</p> + + + + <p>The ConcernUsages that are typed by a certain <code>concernDefinition</code>.</p> - - + + - - - - <p>The AcceptActionUsage that has a certain Expression as its <code>receiverArgument</code>.</p> + + + + <p>The RequirementUsages typed by a certain RequirementDefinition.</p> - - + + - - - - <p>The <code>SendActionUsage</code> that has a certain <code>Expression</code> as its <code>senderArgument</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> + + + 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>TheStakehplderMembership that has a certain PartUsage as its <code>ownedStakeholderParameter</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>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>senderArgument</code> of a <code>SendActionUsage</code> is its second argument <code>Expression</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 - senderArgument = argument(2) + specializesFromLibrary('Requirements::concernChecks') - - - <p>The <code>payloadArgument</code> of a <code>SendActionUsage</code> is its first argument <code>Expression</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 - payloadArgument = argument(1) + owningFeatureMembership <> null and +owningFeatureMembership.oclIsKindOf(FramedConcernMembership) implies + specializesFromLibrary('Requirements::RequirementCheck::concerns') - - - <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 ConcernDefinition that is the single type of this ConcernUsage.</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 - owningFeatureMembership <> null and -(owningFeatureMembership.oclIsKindOf(StateSubactionMembership) or - owningFeatureMembership.oclIsKindOf(TransitionFeatureMembership)) implies - payloadArgument <> null + kind = RequirementConstraintKind::requirement - - - <p>The <code>receiverArgument</code> of a <code>SendActionUsage</code> is its third argument <code>Expression</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 RequirementDefinitions that have a certain PartUsage as an <code>actorParameter</code>.</p> + + + + + + + + + + + <p>The RequirementUsage that has a certain ConstraintUsage as a <code>requiredConstraint</code> (if any).</p> + + + + + + + + + + <p>The RequirementVerificationMembership that owns a certain RequirementUsage as its <code>ownedRequirement</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> + + OCL2.0 - receiverArgument = argument(3) + verifiedRequirement = + if objectiveRequirement = null then OrderedSet{} + else + objectiveRequirement.featureMembership-> + selectByKind(RequirementVerificationMembership). + verifiedRequirement->asOrderedSet() + endif - - - <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>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 - isSubactionUsage() implies - specializesFromLibrary('Actions::Action::acceptSubactions') + specializesFromLibrary('VerificationCases::verificationCases') - - - <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> + + + 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 - specializesFromLibrary('Actions::sendActions') + isComposite and owningType <> null and + (owningType.oclIsKindOf(VerificationCaseDefinition) or + owningType.oclIsKindOf(VerificationCaseUsage)) implies + specializesFromLibrary('VerificationCases::VerificationCase::subVerificationCases') - - - - <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>The <code>VerificationCase</code> that is the <code>definition</code> of this <code>VerificationCaseUsage</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 <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>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>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>ForkNode</code> may have at most one incoming <code>Succession</code>.</p> + + + <p>The <code>verifiedRequirements</code> of a <code>VerificationCaseDefinition</code> are the <code>verifiedRequirements</code> of its <code>RequirementVerificationMemberships</code>.</p> - + OCL2.0 - targetConnector->selectByKind(Succession)->size() <= 1 + verifiedRequirement = + if objectiveRequirement = null then OrderedSet{} + else + objectiveRequirement.featureMembership-> + selectByKind(RequirementVerificationMembership). + verifiedRequirement->asOrderedSet() + endif - - - <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>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('Actions::Action::forks') + 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>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>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>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>RequirementVerificationMembership</code> must have <code>kind = requirement</code>.</p> - + OCL2.0 - specializesFromLibrary('Actions::Action') + kind = RequirementConstraintKind::requirement - - - <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>owningType</code> of a <code>RequirementVerificationMembership</code> must a <code>RequirementUsage</code> that is owned by an <code>ObjectiveMembership</code>.</p> - + OCL2.0 - action = usage->selectByKind(ActionUsage) + owningType.oclIsKindOf(RequirementUsage) and +owningType.owningFeatureMembership <> null and +owningType.owningFeatureMembership.oclIsKindOf(ObjectiveMembership) - - - - - - - <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 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 AssignmentActionUsages that gave a certain <code>referent</code> Expression.</p> + + + <p>The <code>kind</code> of a <code>RequirementVerificationMembership</code> must be <code>requirement</code>.</p> - - - - - - - - - <p>The <code>ForLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>seqArgument</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 VerificationCaseDefinitions that verify a certain <code>verifiedRequirement</code>.</p> + + + - - - - <p>The <code>LoopActionUsage</code> that has a certain <code>ActionUsage</code> as its <code>bodyAction</code>.</p> + + + + <p>The VerificationCaseUsages that verify a certain <code>verifiedRequirement</code>.</p> - - + + - - - - <p>The AcceptActionUsage that owns the <code>payloadParameter</code>.</p> + + + + <p>The RequirementVerificationMembership that has a certain RequirementUsage as its <code>verifiedRequirement</code>.</p> - - + + - - - - <p>The PerformActionUsages that have a certain ActionUsage as their <code>performedAction</code>.</p> + + + + <p>The VerificationUsages that are defined by a certain <code>verificationCaseDefinition</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>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>All outgoing <code>Successions</code> from a <code>ControlNode</code> must have a source <code>multiplicity</code> of <code>1..1</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 - sourceConnector->selectByKind(Succession)-> - collect(connectorEnd->at(1).multiplicity)-> - forAll(sourceMult | - multiplicityHasBounds(sourceMult, 1, 1)) + conjugatedPortDefinition = +let conjugatedPortDefinitions : OrderedSet(ConjugatedPortDefinition) = + ownedMember->selectByKind(ConjugatedPortDefinition) in +if conjugatedPortDefinitions->isEmpty() then null +else conjugatedPortDefinitions->first() +endif - - - <p>The <code>owningType</code> of a <code>ControlNode</code> must be an <code>ActionDefinition</code> or <code>ActionUsage</code>.</p> + + + <p>The <code>ownedUsages</code> of a <code>PortDefinition</code> that are not <code>PortUsages</code> must not be composite.</p> - + OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(ActionDefinition) or - owningType.oclIsKindOf(ActionUsage)) + ownedUsage-> + reject(oclIsKindOf(PortUsage))-> + forAll(not isComposite) - - - <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>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 - targetConnector->selectByKind(Succession)-> - collect(connectorEnd->at(2).multiplicity)-> - forAll(targetMult | - multiplicityHasBounds(targetMult, 1, 1)) + not oclIsKindOf(ConjugatedPortDefinition) implies + ownedMember-> + selectByKind(ConjugatedPortDefinition)-> + size() = 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>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('Action::Action::controls') + specializesFromLibrary('Ports::Port') - - - <p>A <code>ControlNode</code> must be composite.</p> + + + + + + + <p>The <code>ConjugatedPortDefinition</code> that is conjugate to this <code>PortDefinition</code>.</p> - + + + + + + + + + <p>The PortConjugation that relates a certain PortDefinition to its ConjugatedPortDefinition (if any).</p> + + + + + + + + + + <p>The PortUsages that are typed by a certain PortDefinition.</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> + + OCL2.0 - isComposite + portDefinition = conjugatedPortDefinition.originalPortDefinition - - - - <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>originalPortDefinition</code> of the <code>conjugatedPortDefinition</code> of this <code>ConjugatedPortTyping</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>The IfActionUsage that has a certain ActionUsage as its <code>elseAction</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>bodyAction</code> of a <code>LoopActionUsage</code> is its second input <code>parameter</code>, which must be an <code>Action</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 - - - - - - - <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>type</code> of this <code>ConjugatedPortTyping</code> considered as a <code>FeatureTyping</code>, which must be a <code>ConjugatedPortDefinition</code>.</p> - - + + + - - - - <p>The <code>WhileLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>whileArgument</code>.</p> + + + + <p>The ConjugatedPortTypings whose <code>conjugatedPortDefinition</code> a certain ConjugatedPortDefinition.</p> - - + + + - - - <p>A <code>DecisionNode</code> is a <code>ControlNode</code> that makes a selection from its outgoing <code>Successions</code>.</p> + + + + + <p>The ConjugatedPortTypings whose <code>portDefinition</code> is a certain PortDefinition.</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>A <code>DecisionNode</code> may have at most one incoming <code>Succession</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 - targetConnector->selectByKind(Succession)->size() <= 1 + nestedUsage-> + reject(oclIsKindOf(PortUsage))-> + forAll(not isComposite) - - - <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>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 - sourceConnector->selectAsKind(Succession)-> - collect(connectorEnd->at(2))-> - forAll(targetMult | - multiplicityHasBounds(targetMult, 0, 1)) + specializesFromLibrary('Ports::ports') - - - <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>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 - specializesFromLibrary('Actions::Action::decisions') + isComposite and owningType <> null and +(owningType.oclIsKindOf(PortDefinition) or + owningType.oclIsKindOf(PortUsage)) implies + specializesFromLibrary('Ports::Port::subports') - - - <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>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 - sourceConnector->selectByKind(Succession)-> - forAll(subsetsChain(self, - resolveGlobal('ControlPerformances::DecisionPerformance::outgoingHBLink'))) + owningType = null or +not owningType.oclIsKindOf(PortDefinition) and +not owningType.oclIsKindOf(PortUsage) implies + isReference - - - - - <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>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 - isSubactionUsage() implies - specializesFromLibrary('Actions::Action::whileLoops') + owningType <> null and +(owningType.oclIsKindOf(PartDefinition) or + owningType.oclIsKindOf(PartUsage)) implies + specializesFromLibrary('Parts::Part::ownedPorts') - - - <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>occurrenceDefinitions</code> of this <code>PortUsage</code>, which must all be <code>PortDefinitions<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>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>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>PortDefinition</code> being conjugated.</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>ConjugatedPortDefinition</code> that is conjugate to the <code>originalPortDefinition</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>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 - whileArgument = - let parameter : Feature = inputParameter(1) in - if parameter <> null and parameter.oclIsKindOf(Expression) then - parameter.oclAsType(Expression) - else - null - endif - + ownedPortConjugator.originalPortDefinition = originalPortDefinition - - - <p>A <code>WhileLoopActionUsage</code> must have at least two owned <code>input</code> <code>parameters</code>.</p> + + + <p>A <code>ConjugatedPortDefinition</code> must not itself have a <code>conjugatedPortDefinition</code>. - + OCL2.0 - inputParameters()->size() >= 2 + conjugatedPortDefinition = null - - - - <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 original <code>PortDefinition</code> for this <code>ConjugatedPortDefinition</code>, which is the <code>owningNamespace</code> of the <code>ConjugatedPortDefinition</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>The <code>PortConjugation</code> that is the <code>ownedConjugator</code> of this <code>ConjugatedPortDefinition</code>, linking it to its <code>originalPortDefinition</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> + + + <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 inputParameters()->size() < i then null -else inputParameters()->at(i) + let originalName : String = originalPortDefinition.name in +if originalName = null then null +else '~' + originalName 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 AllocationDefinitions that feature a certain <code>allocation</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> + + + + + + + + <p>The AllocationUsages that have a certain AllocationDefinition as their <code>allocationDefinition</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>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>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>The <code>seqArgument</code> of a <code>ForLoopActionUsage</code> is its first argument <code>Expression</code>.</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 - seqArgument = argument(1) - + specializesFromLibrary('Allocations::allocations') - - - <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>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 - isSubactionUsage() implies - specializesFromLibrary('Actions::Action::forLoops') + allocation = usage->selectAsKind(AllocationUsage) - - - <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>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 - loopVariable <> null and -loopVariable.redefinesFromLibrary('Actions::ForLoopAction::var') + specializesFromLibrary('Allocations::Allocation') - - - <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>AllocationUsages</code> that refine the allocation mapping defined by this <code>AllocationDefinition</code>.</p> + + + + + + + + + <p>The ConnectionDefinitions that have a certain Usage as an <code>connectionEnd</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>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('Actions::forLoopActions') + specializesFromLibrary('Connections::connections') - - - <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>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 - loopVariable = - if ownedFeature->isEmpty() or - not ownedFeature->first().oclIsKindOf(ReferenceUsage) then - null - else - ownedFeature->first().oclAsType(ReferenceUsage) - endif + ownedEndFeature->size() = 2 implies + specializesFromLibrary('Connections::binaryConnections') - - - <p>The first <code>ownedFeature</code> of a <code>ForLoopActionUsage</code> must be a <code>ReferenceUsage</code>.</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>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> + + OCL2.0 - ownedFeature->notEmpty() and -ownedFeature->at(1).oclIsKindOf(ReferenceUsage) - + specializesFromLibrary('Connections::Connection') - - - <p>A <code>ForLoopActionUsage</code> must have two owned <code>input</code> <code>parameters</code>.</p> + + + <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> - + OCL2.0 - inputParameters()->size() = 2 + ownedEndFeature->size() = 2 implies + specializesFromLibrary('Connections::BinaryConnection') - - - - <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>A <code>ConnectionDefinition</code> must have <code>isSufficient = true</code>.</p> - - - + + OCL2.0 + isSufficient + + + + + + + + + <p>The <code>Usages</code> that define the things related by the <code>ConnectionDefinition</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>ConnectionDefinition</code> always has <code>isSufficient = true</code>.</p> - - + + + - - - <p><code>TriggerKind</code> enumerates the kinds of triggers that can be represented by a <code>TriggerInvocationExpression</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>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>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> + + + + + + + + + + <p>The ConnectionUsages that have a certain AssociationStructure as their <code>connectionDefinition</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 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>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 Usage in which the <code>nestedPort</code> is nested (if any).</p> - + + + - - - - <p>The <code>IfActionUsage</code> that has a certain <code>ActionUsage</code> as its <code>thenAction</code>.</p> + + + + <p>The Usages that have a certain Classifier as a <code>definition</code>.</p> - - + + + - - - - <p>The AssignmentActionUsage that has a certain Expression as its <code>valueArgument</code>.</p> + + + + <p>The Definition that owns a certain <code>ownedVerificationCase</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>ownedInterface</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> + + + + <p>The Definition that owns the <code>ownedConcern</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> + + + + + + + + <p>The Definition that owns the <code>ownedConstraint</code>.</p> - + + + + + + + + <p>The Definition that owns the <code>ownedAction</code>.</p> + + + + + + + + + <p>The owning Definition of this VariantMembership, which must have <code>isVariation</code> = true.</p> + + + + + + + + + + <p>The Definition that owns the <code>ownedOccurrence</code>.</p> + + + + + + + + + <p>The Definition that owns the <code>ownedTransition</code>.</p> + + + + + + + + + <p>The Usage in which the <code>nestedItem</code> is nested.</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 - targetConnector->selectByKind(Succession)-> - collect(connectorEnd->at(1))-> - forAll(sourceMult | - multiplicityHasBounds(sourceMult, 0, 1)) + variant = variantMembership.ownedVariantUsage - - - <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>variantMemberships</code> of a <code>Usage</code> are those <code>ownedMemberships</code> that are <code>VariantMemberships</code>.</p> - + OCL2.0 - targetConnector->selectByKind(Succession)-> - forAll(subsetsChain(self, - resolveGlobal('ControlPerformances::MergePerformance::incomingHBLink'))) + variantMembership = ownedMembership->selectByKind(VariantMembership) - - - <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>If a <code>Usage</code> is a variation, then it must not have any <code>ownedFeatureMemberships</code>.</p> - + OCL2.0 - specializesFromLibrary('Actions::Action::merges') + isVariation implies ownedFeatureMembership->isEmpty() - - - - - <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> + + + <p>A <code>Usage</code> is referential if it is not composite.</p> - + OCL2.0 - sourceConnector->selectByKind(Succession)->size() <= 1 + isReference = not isComposite - - - <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>If a <code>Usage</code> has an <code>owningVariationUsage</code>, then it must directly or indirectly specialize that <code>Usage</code>.</p> - + OCL2.0 - specializesFromLibrary('Actions::Action::join') + owningVariationUsage <> null implies + specializes(owningVariationUsage) - - - - - - <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>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>A variation <code>Usage</code> may not specialize any variation <code>Definition</code> or <code>Usage</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')) + isVariation implies + not ownedSpecialization.specific->exists( + oclIsKindOf(Definition) and + oclAsType(Definition).isVariation or + oclIsKindOf(Usage) and + oclAsType(Usage).isVariation) - - - <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>If a <code>Usage</code> has an <code>owningVariationDefinition</code>, then it must directly or indirectly specialize that <code>Definition</code>.</p> - + OCL2.0 - kind = TriggerKind::at implies - argument->notEmpty() and - argument->at(1).result.specializesFromLibrary('Time::TimeInstantValue') + owningVariationDefinition <> null implies + specializes(owningVariationDefinition) - - - <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>The <code>directedUsages</code> of a <code>Usage</code> are all its <code>directedFeatures</code> that are <code>Usages</code>.</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') + directedUsage = directedFeature->selectByKind(Usage) - - - - - - <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>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> + + + <p>The <code>ownedActions</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ActionUsages</code>.</p> - + OCL2.0 - referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(ActionUsage) + nestedAction = nestedUsage->selectByKind(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> + + + <p>The <code>ownedAllocations</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>AllocationUsages</code>.</p> - + OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(PartDefinition) or - owningType.oclIsKindOf(PartUsage)) implies - specializesFromLibrary('Parts::Part::performedActions') + nestedAllocation = nestedUsage->selectByKind(AllocationUsage) - - - - - <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>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>ownedAnalysisCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>AnalysisCaseUsages</code>.</p> - + OCL2.0 - specializesFromLibrary('Actions::terminateActions') + nestedAnalysisCase = nestedUsage->selectByKind(AnalysisCaseUsage) - - - <p>The <code>terminatedOccurrenceArgument</code> of a <code>TerminateActionUsage</code> is its first argument.</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 - terminatedOccurrenceArgument = argument(1) + nestedAttribute = nestedUsage->selectByKind(AttributeUsage) - - - <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>ownedCalculations</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>CalculationUsages</code>.</p> - + OCL2.0 - isSubactionUsage() implies - specializesFromLibrary('Actions::Action::terminateSubactions') + nestedCalculation = nestedUsage->selectByKind(CalculationUsage) - - - - <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>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>ownedCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>CaseUsages</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 + nestedCase = nestedUsage->selectByKind(CaseUsage) - - - <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>ownedConcerns</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ConcernUsages</code>.</p> - + OCL2.0 - isSubactionUsage() implies - specializesFromLibrary('Actions::Action::ifSubactions') + nestedConcern = nestedUsage->selectByKind(ConcernUsage) - - - <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>ownedConnections</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ConnectorAsUsages</code>.</p> - + OCL2.0 - if elseAction = null then - specializesFromLibrary('Actions::ifThenActions') -else - specializesFromLibrary('Actions::ifThenElseActions') -endif + nestedConnection = nestedUsage->selectByKind(ConnectorAsUsage) - - - <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>ownedConstraints</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ConstraintUsages</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 + nestedConstraint = nestedUsage->selectByKind(ConstraintUsage) - - - <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>ownedEnumerations</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>EnumerationUsages</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 + ownedNested = nestedUsage->selectByKind(EnumerationUsage) - - - <p>An <code>IfActionUsage</code> must have at least two owned <code>input</code> <code>parameters</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 - inputParameters()->size() >= 2 + nestedFlow = nestedUsage->selectByKind(FlowUsage) - - - - <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>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>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 <code>ownedInterfaces</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>InterfaceUsages</code>.</p> - + OCL2.0 - inputParameters()->notEmpty() + nestedInterface = nestedUsage->selectByKind(ReferenceUsage) - - - <p>The <code>receiverArgument</code> of an <code>AcceptUsageAction</code> is its second argument <code>Expression</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 - receiverArgument = argument(2) + nestedItem = nestedUsage->selectByKind(ItemUsage) - - - <p>The <code>payloadArgument</code> of an <code>AcceptUsageAction</code> is its first argument <code>Expression</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 - payloadArgument = argument(1) + nestedMetadata = ownedMember->selectByKind(MetadataUsage) - - - <p>The <code>payloadParameter</code> of an <code>AcceptActionUsage<code> is its first <code>parameter</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 - payloadParameter = - if parameter->isEmpty() then null - else parameter->first() endif + nestedOccurrence = nestedUsage->selectByKind(OccurrenceUsage) - - - <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 <code>ownedParts</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>PartUsages</code>.</p> - + OCL2.0 - not isTriggerAction() implies - specializesFromLibrary('Actions::acceptActions') + nestedPart = nestedUsage->selectByKind(PartUsage) - - - <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 <code>ownedPorts</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>PortUsages</code>.</p> - + OCL2.0 - isSubactionUsage() and not isTriggerAction() implies - specializesFromLibrary('Actions::Action::acceptSubactions') + nestedPort = nestedUsage->selectByKind(PortUsage) - - - <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 <code>ownedReferences</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ReferenceUsages</code>.</p> - + OCL2.0 - isTriggerAction() implies - specializesFromLibrary('Actions::TransitionAction::accepter') + nestedReference = nestedUsage->selectByKind(ReferenceUsage) - - - <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 <code>ownedRenderings</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>RenderingUsages</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))) + nestedRendering = nestedUsage->selectByKind(RenderingUsage) - - - - <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) - - - - - - - - - - - The <code>ForLoopActionUsage</code> that has a certain <code>ReferenceUsage</code> as its <code>loopVariable</code>. - - - - - - - - - <p>The AllocationDefinitions that feature a certain <code>allocation</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 <code>ownedRequirements</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>RequirementUsages</code>.</p> - + OCL2.0 - specializesFromLibrary('Allocations::allocations') + nestedRequirement = nestedUsage->selectByKind(RequirementUsage) - - - - <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 <code>ownedStates</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>StateUsages</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 + 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 - allocation = usage->selectAsKind(AllocationUsage) + nestedTransition = nestedUsage->selectByKind(TransitionUsage) - - - <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>The <code>ownedUsages</code> of a <code>Usage</code> are all its <code>ownedFeatures</code> that are <code>Usages</code>.</p> - + OCL2.0 - specializesFromLibrary('Allocations::Allocation') + nestedUsage = ownedFeature->selectByKind(Usage) - - - - <p>The <code>AllocationUsages</code> that refine the allocation mapping defined by this <code>AllocationDefinition</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>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 + 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 - specializesFromLibrary('Metadata::MetadataItem') + nestedVerificationCase = nestedUsage->selectByKind(VerificationCaseUsage) - - - - - - - - <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> + + + <p>The <code>ownedViews</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ViewUsages</code>.</p> - + OCL2.0 - specializesFromLibrary('Metadata::metadataItems') + nestedView = nestedUsage->selectByKind(ViewUsage) - - - - - - - <p>The <code>MetadataDefinition</code> that is the <code>definition</code> of this <code>MetadataUsage</code>.</p> + + + <p>The <code>ownedViewpoints</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ViewpointUsages</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 + 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> - + OCL2.0 - isVariation + usage = feature->selectByKind(Usage) - - - - <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>Usage</code> that is directed, an end feature or has no <code>featuringTypes</code> must be referential.</p> - - - - - - <p>An EnumerationDefinition is considered semantically to be a variation whose allowed variants are its <code>enumerationValues</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>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) + direction <> null or isEnd or featuringType->isEmpty() implies + isReference - - - <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>Usage</code> is a variation, then it must be abstract.</p> - + OCL2.0 - specializesFromLibrary('Ports::ports') + isVariation implies isAbstract - - - <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>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 - isComposite and owningType <> null and -(owningType.oclIsKindOf(PortDefinition) or - owningType.oclIsKindOf(PortUsage)) implies - specializesFromLibrary('Ports::Port::subports') + 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>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>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 - owningType = null or -not owningType.oclIsKindOf(PortDefinition) and -not owningType.oclIsKindOf(PortUsage) implies - isReference + owningVariationUsage <> null implies + featuringType->asSet() = owningVariationUsage.featuringType->asSet() - - - <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>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> - - 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>Whether this <code>Usage</code> is a referential <code>Usage</code>, that is, it has <code>isComposite = false</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 <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> - - OCL2.0 - portDefinition = conjugatedPortDefinition.originalPortDefinition - - - - - - - - <p>The <code>originalPortDefinition</code> of the <code>conjugatedPortDefinition</code> of this <code>ConjugatedPortTyping</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>type</code> of this <code>ConjugatedPortTyping</code> considered as a <code>FeatureTyping</code>, which must be a <code>ConjugatedPortDefinition</code>.</p> - + + + <p>The <code>Definition</code> that owns this <code>Usage</code> (if any).</p> - - - + + + + - - - - - <p>The PortConjugation that relates a certain PortDefinition to its ConjugatedPortDefinition (if any).</p> + + + <p>The <code>Usage</code> in which this <code>Usage</code> is nested (if any).</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>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> - - OCL2.0 - ownedPortConjugator.originalPortDefinition = originalPortDefinition - - - - - <p>A <code>ConjugatedPortDefinition</code> must not itself have a <code>conjugatedPortDefinition</code>. + + + + + + + + <p>The <code>Usages</code> that are <code>features</code> of this <code>Usage</code> (not necessarily owned).</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>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> of this <code>Usage</code> that are <code>directedFeatures</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> + + + <p>The <code>Usages</code> that are <code>ownedFeatures</code> of this <code>Usage</code>.</p> - - - OCL2.0 - let originalName : String = originalPortDefinition.name in -if originalName = null then null -else '~' + originalName -endif - - - - - - - - - - - - - - <p>The ConjugatedPortTypings whose <code>portDefinition</code> is a certain PortDefinition.</p> + + + + + + + + <p>The <code>ReferenceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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>AttributeUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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> + + + + + + <p>The code>EnumerationUsages</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>OccurrenceUsages</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>ItemUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - OCL2.0 - specializesFromLibrary('Ports::Port') - - - - - - - - - <p>The <code>ConjugatedPortDefinition</code> that is conjugate to this <code>PortDefinition</code>.</p> + + + + + + <p>The <code>PartUsages</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>PortUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - - - - - - <p>The ConjugatedPortTypings whose <code>conjugatedPortDefinition</code> a certain ConjugatedPortDefinition.</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>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>FlowUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - + + - - - <p>The <code>ConjugatedPortDefinition</code> that is conjugate to the <code>originalPortDefinition</code>.</p> + + + <p>The <code>InterfaceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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> + + + <p>The <code>AllocationUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</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> + + + + + + <p>The <code>ActionUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</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>The <code>StateUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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> + + + <p>The <code>TransitionUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</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> + + + + + + <p>The <code>CalculationUsage</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</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> + + + + + + <p>The <code>ConstraintUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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>RequirementUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - - + + - - - - - <p>The <code>FlowUsages<code> that have a certain <code>Interaction</code> as their <code>flowDefinition</code>.</p> + + + <p>The <code>ConcernUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - - - - - - - <p>The <code>FlowDefinitions<code> that have a certain Usage as <code>flowEnd</code>.</p> + + + + + + <p>The <code>CaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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> + + + + + + <p>The <code>AnalysisCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - OCL2.0 - specializesFromLibrary('Flows::successionFlows') - - - - - - - - - - <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> + + + + + + <p>The <code>VerificationCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - OCL2.0 - feature->forAll(not isComposite) - - - - - - - - - - <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>The <code>UseCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - OCL2.0 - isReference - - - - - <p>All <code>features</code> of an <code>AttributeUsage</code> must be non-composite.</p> + + + + + + <p>The <code>ViewUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - OCL2.0 - feature->forAll(not isComposite) - - - - - <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>ViewpointUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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>The <code>RenderingUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - - + + - - - <p>Always true for an <code>AttributeUsage</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 AttributeUsages that are typed by a certain DataType.</p> + + + + <p>The Usage in which the <code>nestedMetadata</code> is nested.</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 - itemDefinition = occurrenceDefinition->selectByKind(Structure) - - - - - <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 - specializesFromLibrary('Items::items') - - - - - <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> + + + + <p>The Usage in which the <code>nestedOccurrence</code> is nested.</p> - - OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(ItemDefinition) or - owningType.oclIsKindOf(ItemUsage)) implies - specializesFromLibrary('Items::Item::subitem') - - - - - - <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>Definition</code> that owns the <code>ownedFlow</code>.</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> + + + + <p>The Usage in which the <code>nestedAttribute</code> is nested.</p> - - OCL2.0 - specializesFromLibrary('Items::Item') - - - - - - + + + - - - - <p>The Definition that owns the <code>ownedRequirement</code>.</p> + + + + <p>The Usage in which the <code>nestedInterface</code> is nested.</p> - - + + - - - - <p>The Definition that owns the <code>ownedInterface</code>.</p> + + + + <p>The Definition that owns the <code>ownedConnection</code>.</p> - - + + @@ -6159,13 +5789,13 @@ endif - - - - <p>The Definition that owns a certain <code>ownedView</code>.</p> + + + + <p>The Definition that owns the <code>ownedMetadata</code>.</p> - - + + @@ -6177,6 +5807,61 @@ endif + + + + <p>The Usage in which the <code>nestedTransition</code> is nested.</p> + + + + + + + + + <p>The Usages that feature a certain Usage.</p> + + + + + + + + + + <p>The Usage that owns the <code>nestedConcern</code>.</p> + + + + + + + + + <p>The Definition that owns a certain <code>ownedView</code>.</p> + + + + + + + + + <p>The Usage in which the <code>nestedUsage</code> is nested.</p> + + + + + + + + + <p>The Definition that owns a certain <code>ownedRendering</code>.</p> + + + + + @@ -6186,26 +5871,66 @@ endif - - - - <p>The Usage in which the <code>nestedItem</code> is nested.</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 + isReference + + + + + + <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>nestedAnalysisCase</code> is nested.</p> + + + - - - - <p>The owning Definition of this VariantMembership, which must have <code>isVariation</code> = true.</p> + + + + <p>The Definition that owns the <code>ownedRequirement</code>.</p> - - - + + - @@ -6215,56 +5940,76 @@ endif - - - - <p>The Definition that owns the <code>ownedItem</code>.</p> + + + + <p>The Usage that owns the <code>nestedEnumeration</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>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>ReferenceUsage</code> is always referential.</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 - isReference + membershipOwningNamespace.oclIsKindOf(Definition) and + membershipOwningNamespace.oclAsType(Definition).isVariation or +membershipOwningNamespace.oclIsKindOf(Usage) and + membershipOwningNamespace.oclAsType(Usage).isVariation + - - - - <p>Always <code>true</code> for a <code>ReferenceUsage</code>.</code> + + + + + + <p>The <code>Usage</code> that represents a variant in the context of the <code>owningVariationDefinition</code> or <code>owningVariationUsage</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 Usages that have a certain Usage as a <code>flow</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 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 Usage in which the <code>nestedState</code> is nested.</p> + + + + @@ -6805,195 +6550,30 @@ endif - - - <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>The Definition that owns the <code>ownedConcern</code>.</p> - - - - - - - - - <p>The Usage in which the <code>nestedAnalysisCase</code> is nested.</p> - - - - - - - - - <p>The Definitions that feature a certain Usage.</p> - - - - - - - - - - <p>The Usage in which the <code>nestedAction</code> is nested.</p> - - - - - - - - - <p>The ItemUsages being typed by a certain Structure.</p> - - - - - - - - - <p>The Definition that owns a certain <code>ownedVerificationCase</code>.</p> - - - - - - - - - <p>The Usages that have a certain Usage as a <code>flow</code>.</p> - - - - - - - - - - - - - - <p>The Usage in which the <code>nestedAttribute</code> is nested.</p> - - - - - - - - - <p>The owning Definition of this VariantMembership, which must have <code>isVariation</code> = true.</p> - - - - - - - - - - <p>The Definition that owns the <code>ownedPart</code>.</p> - - - - - - - - - <p>The Definition that owns a certain <code>ownedRendering</code>.</p> - - - - - - - - - <p>The Usage that owns a certain <code>nestedView</code>.</p> - - - - - - - - - <p>The Definitions that have a certain Usage as a <code>flow</code>.</p> - - - - - - - - - - - <p>The Definition that owns the <code>ownedAnalysisCase</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 <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>The Usage in which the <code>nestedTransition</code> is nested.</p> + + + + <p>The Definition that owns the <code>ownedPart</code>.</p> - - + + - @@ -7003,164 +6583,166 @@ membershipOwningNamespace.oclIsKindOf(Usage) and - - - - <p>The Usage in which the <code>nestedState</code> is nested.</p> + + + + <p>The owning Definition of this VariantMembership, which must have <code>isVariation</code> = true.</p> - - + + + - - - - <p>The Usages that have a certain Classifier as a <code>definition</code>.</p> + + + + <p>The Usage that owns a certain <code>nestedView</code>.</p> - - - + + - - - - <p>The Definition that owns the <code>ownedOccurrence</code>.</p> + + + + <p>The Usage in which the <code>nestedConstraint</code> is nested.</p> - - + + - - - - <p>The Usage in which the <code>nestedMetadata</code> is nested.</p> + + + + <p>The Definition that owns the <code>ownedAttribute</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>The Usage in which the <code>nestedUseCase</code> is nested.</p> - - - + + - - - - <p>The Definition that owns the <code>ownedUseCase</code>.</p> + + + + <p>The <code>Usage</code> that owns the <code>nestedFlow</code>.</p> - - + + - - - - <p>The Definition that owns the <code>ownedReference</code>.</p> + + + + <p>The Usage that owns a certain <code>nestedViewpoint</code>.</p> - - + + - - - <p>The Definition that owns this CaseUsage (if any).</p> - - - - <p>The Definition that owns the <code>ownedCase</code>.</p> + + + + <p>The Usage in which the <code>nestedRequirement</code> is nested.</p> - - + + - - - - <p>The Usage in which the <code>nestedOccurrence</code> is nested.</p> + + + + + <p>The Definition that owns the <code>ownedItem</code>.</p> - - + + - - - - <p>The Usage in which the <code>nestedUsage</code> is nested.</p> + + + + <p>The Definitions that feature a certain Usage.</p> - - + + + - - - - <p>The Definition that owns the <code>ownedAttribute</code>.</p> + + + + <p>The Definition that owns the <code>ownedAnalysisCase</code>.</p> - - + + - - - - <p>The Definition that owns the <code>ownedConstraint</code>.</p> + + + + <p>The Definition that owns a certain <code>ownedViewpoint</code>.</p> - - + + - - - - <p>The <code>Definition</code> that owns the <code>ownedFlow</code>.</p> + + + + <p>The Definition that owns the <code>ownedAllocation</code>.</p> - - + + - - - - <p>The Definition that owns the <code>ownedTransition</code>.</p> + + + + <p>The Usage that owns the <code>nestedAllocation</code>.</p> - - + + - - - - <p>The Usages that feature a certain Usage.</p> + + + + <p>The Definitions that have a certain Usage as a <code>flow</code>.</p> - - - + + + + - - - - <p>The Definition that owns the <code>ownedAllocation</code>.</p> + + + + <p>The Usage in which the <code>nestedPart</code> is nested.</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> + + + <p>The Definition that owns this CaseUsage (if any).</p> + + + + <p>The Definition that owns the <code>ownedCase</code>.</p> - - - + + @@ -7172,1052 +6754,1583 @@ membershipOwningNamespace.oclIsKindOf(Usage) and - - - - <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 Definition that owns the <code>ownedUseCase</code>.</p> - - - + + - - - - <p>The Usage that owns the <code>nestedConcern</code>.</p> + + + + <p>The ItemUsages being typed by a certain Structure.</p> - - + + - - - - <p>The Usage in which the <code>nestedConstraint</code> is nested.</p> + + + + <p>The Definition that owns the <code>ownedReference</code>.</p> - - + + - - - - <p>The Definition that owns the <code>ownedAction</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>The <code>Usage</code> that owns the <code>nestedFlow</code>.</p> + + + + <p>The Usage in which the <code>nestedAction</code> is nested.</p> - - + + - - - - <p>The Usage in which the <code>nestedInterface</code> is nested.</p> - - - + + + + + + - - - - <p>The Definition that owns the <code>ownedConnection</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>The Definition that owns a certain <code>ownedViewpoint</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 + specializesFromLibrary('Metadata::metadataItems') + + + + + + + + + <p>The <code>MetadataDefinition</code> that is the <code>definition</code> of this <code>MetadataUsage</code>.</p> + + + + + + + - - - - <p>The Usage in which the <code>nestedUseCase</code> is nested.</p> + + + + <p>The Definition that owns the <code>ownedCalculation</code>.</p> - - + + - - - - <p>The Definition that owns the <code>ownedMetadata</code>.</p> + + + + <p>The Usage in which the <code>nestedCalculation<code> is nested.</p> - - + + - - - - <p>The Usage that owns a certain <code>nestedViewpoint</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 + 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 + false + + + + + + + + + + + + - - - - <p>The Usage in which the <code>nestedPort</code> is nested (if any).</p> + + + + <p>The CalculationDefinitions that feature a certain CalculationUsage.</p> - - + + + + - - - - <p>The Usage that owns the <code>nestedEnumeration</code>.</p> + + + + <p>The CalculationUsage being typed by a certain Function.</p> - - + + + + - - - - <p>The Usage that owns the <code>nestedAllocation</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>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>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>CaseUsage</code> is a <code>Usage</code> of a <code>CaseDefinition</code>.</p> - - - <p>The <code>variants</code> of a <code>Usage</code> are the <code>ownedVariantUsages</code> of its <code>variantMemberships</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 - variant = variantMembership.ownedVariantUsage + objectiveRequirement = + let objectives: OrderedSet(RequirementUsage) = + featureMembership-> + selectByKind(ObjectiveMembership). + ownedRequirement in + if objectives->isEmpty() then null + else objectives->first().ownedObjectiveRequirement + endif - - - <p>The <code>variantMemberships</code> of a <code>Usage</code> are those <code>ownedMemberships</code> that are <code>VariantMemberships</code>.</p> + + + <p>A <code>CaseUsage</code> must have at most one <code>featureMembership</code> that is a <code>ObjectiveMembership</code>.</p> - + OCL2.0 - variantMembership = ownedMembership->selectByKind(VariantMembership) + featureMembership-> + selectByKind(ObjectiveMembership)-> + size() <= 1 - - - <p>If a <code>Usage</code> is a variation, then it must not have any <code>ownedFeatureMemberships</code>.</p> + + + <p>A <code>CaseUsage</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> - + OCL2.0 - isVariation implies ownedFeatureMembership->isEmpty() + featureMembership-> + selectByKind(SubjectMembership)-> + size() <= 1 - - - <p>A <code>Usage</code> is referential if it is not composite.</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 - isReference = not isComposite + actorParameter = featureMembership-> + selectByKind(ActorMembership). + ownedActorParameter - - - <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>CaseUsage</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>subjectParameter</code> of a <code>CaseUsage</code> must be its first <code>input</code>.</p> - + OCL2.0 - isVariation implies - not ownedSpecialization.specific->exists( - oclIsKindOf(Definition) and - oclAsType(Definition).isVariation or - oclIsKindOf(Usage) and - oclAsType(Usage).isVariation) + input->notEmpty() and input->first() = subjectParameter - - - <p>If a <code>Usage</code> has an <code>owningVariationDefinition</code>, then it must directly or indirectly specialize that <code>Definition</code>.</p> + + + <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 - owningVariationDefinition <> null implies - specializes(owningVariationDefinition) + specializesFromLibrary('Cases::cases') - - - <p>The <code>directedUsages</code> of a <code>Usage</code> are all its <code>directedFeatures</code> that are <code>Usages</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 - directedUsage = directedFeature->selectByKind(Usage) + isComposite and owningType <> null and + (owningType.oclIsKindOf(CaseDefinition) or + owningType.oclIsKindOf(CaseUsage)) implies + specializesFromLibrary('Cases::Case::subcases') - - - <p>The <code>ownedActions</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ActionUsages</code>.</p> + + + + <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>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 CaseDefinitions that have a certain RequirementUsage as their <code>objectiveRequirement</code>.</p> + + + + + + + + + + <p>The ObjectMembership that owns a particular RequirementUsage as its <code>ownedObjectiveRequirement</code>.</p> + + + + + + + + + + <p>The CaseDefinitions that have a certain Usage as their <code>subjectParameter</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 - nestedAction = nestedUsage->selectByKind(ActionUsage) + featureMembership-> + selectByKind(ObjectiveMembership)-> + 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>CaseDefinition</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p> - + OCL2.0 - nestedAllocation = nestedUsage->selectByKind(AllocationUsage) + subjectParameter = + let subjectMems : OrderedSet(SubjectMembership) = + featureMembership->selectByKind(SubjectMembership) in + if subjectMems->isEmpty() then null + else subjectMems->first().ownedSubjectParameter + endif - - - <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>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 - nestedAnalysisCase = nestedUsage->selectByKind(AnalysisCaseUsage) + actorParameter = featureMembership-> + selectByKind(ActorMembership). + ownedActorParameter - - - <p>The <code>ownedAttributes</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>AttributeUsages</code>.</p> + + + <p>A <code>CaseDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> - - OCL2.0 - nestedAttribute = nestedUsage->selectByKind(AttributeUsage) + + English + featureMembership->selectByKind(SubjectMembership)->size() <= 1 - - - <p>The <code>ownedCalculations</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>CalculationUsages</code>.</p> + + + <p>The <code>subjectParameter</code> of a <code>CaaseDefinition</code> must be its first <code>input</code>.</p> - + OCL2.0 - nestedCalculation = nestedUsage->selectByKind(CalculationUsage) + input->notEmpty() and input->first() = subjectParameter - - - <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>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 - nestedCase = nestedUsage->selectByKind(CaseUsage) + specializesFromLibrary('Cases::Case') - - - <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>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 CaseUsages that have a certain PartUsage as an <code>actorParameter</code>.</p> + + + + + + + + + + + <p>The Usage in which the <code>nestedCase</code> is nested.</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>The <code>owningType</code> of an <code>ObjectiveMembership</code> must be a <code>CaseDefinition</code> or <code>CaseUsage</code>.</p> + + OCL2.0 - nestedConcern = nestedUsage->selectByKind(ConcernUsage) + owningType.oclIsType(CaseDefinition) or +owningType.oclIsType(CaseUsage) + - - - <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>ownedObjectiveRequirement</code> of an <code>ObjectiveMembership</code> must be composite.</p> - + OCL2.0 - nestedConnection = nestedUsage->selectByKind(ConnectorAsUsage) + ownedObjectiveRequirement.isComposite - - - <p>The <code>ownedConstraints</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ConstraintUsages</code>.</p> + + + + + + <p>The RequirementUsage that is the <code>ownedMemberFeature</code> of this RequirementUsage.</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>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 - nestedConstraint = nestedUsage->selectByKind(ConstraintUsage) + viewpointStakeholder = framedConcern.featureMemberhsip-> + selectByKind(StakeholderMembership). + ownedStakeholderParameter - - - <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>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 - ownedNested = nestedUsage->selectByKind(EnumerationUsage) + specializesFromLibrary('Views::viewpointChecks') - - - <p>The <code>ownedFlows</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>FlowConnectionUsages</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 - nestedFlow = nestedUsage->selectByKind(FlowUsage) + isComposite and owningType <> null and +(owningType.oclIsKindOf(ViewDefinition) or + owningType.oclIsKindOf(ViewUsage)) implies + specializesFromLibrary('Views::View::viewpointSatisfactions') - - - <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>ViewpointDefinition</code> that is the <code>definition</code> of this <code>ViewpointUsage<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>The ViewUsages that have a certain <code>ViewDefinition</code>.</p> + + + + + + + + + <p>The RenderingDefinitions that feature a certain <code>rendering</code>.</p> + + + + + + + + + <p>The ViewDefinition that owns a certain <code>viewCondition</code>.</p> - - OCL2.0 - nestedInterface = nestedUsage->selectByKind(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>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> - + OCL2.0 - nestedItem = nestedUsage->selectByKind(ItemUsage) + exposedElement = ownedImport->selectByKind(Expose). + importedMemberships(Set{}).memberElement-> + select(elm | includeAsExposed(elm))-> + asOrderedSet() - - - <p>The <code>ownedMetadata</code> of a <code>Usage</code> are all its <code>ownedMembers</code> that are <code>MetadataUsages</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 - nestedMetadata = nestedUsage->selectByKind(MetadataUsage) + satisfiedViewpoint = ownedRequirement-> + selectByKind(ViewpointUsage)-> + select(isComposite) - - - <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>viewConditions</code> of a <code>ViewUsage</code> are the <code>conditions</code> of its owned <code>ElementFilterMemberships</code>.</p> - + OCL2.0 - nestedOccurrence = nestedUsage->selectByKind(OccurrenceUsage) + viewCondition = ownedMembership-> + selectByKind(ElementFilterMembership). + condition - - - <p>The <code>ownedParts</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>PartUsages</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 - nestedPart = nestedUsage->selectByKind(PartUsage) + viewRendering = + let renderings: OrderedSet(ViewRenderingMembership) = + featureMembership->selectByKind(ViewRenderingMembership) in + if renderings->isEmpty() then null + else renderings->first().referencedRendering + endif - - - <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>ViewUsage</code> must have at most one <code>ViewRenderingMembership</code>.</p> - + OCL2.0 - nestedPort = nestedUsage->selectByKind(PortUsage) + featureMembership-> + selectByKind(ViewRenderingMembership)-> + size() <= 1 - - - <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>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 - nestedReference = nestedUsage->selectByKind(ReferenceUsage) + specializesFromLibrary('Views::views') - - - <p>The <code>ownedRenderings</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>RenderingUsages</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 - nestedRendering = nestedUsage->selectByKind(RenderingUsage) + owningType <> null and +(owningType.oclIsKindOf(ViewDefinition) or + owningType.oclIsKindOf(ViewUsage)) implies + specializesFromLibrary('Views::View::subviews') - - - <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>ViewDefinition</code> that is the <code>definition</code> of this <code>ViewUsage</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>The <code>nestedRequirements</code> of this <code>ViewUsage</code> that are <code>ViewpointUsages</code> for (additional) viewpoints satisfied by the <code>ViewUsage</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> + + + + + + <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> - - 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>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> - - 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> + + + + + + <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> - - 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>Determine whether the given <code>element</code> meets all the owned and inherited <code>viewConditions</code>.</p> - - OCL2.0 - nestedVerificationCase = nestedUsage->selectByKind(VerificationCaseUsage) - - - - - <p>The <code>ownedViews</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ViewUsages</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>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 ViewUsage exposing a certain <code>exposedElement</code>.</p> - - OCL2.0 - nestedView = nestedUsage->selectByKind(ViewUsage) - - - - - <p>The <code>ownedViewpoints</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ViewpointUsages</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 - nestedViewpoint = nestedUsage->selectByKind(ViewpointUsage) + view = usage->selectByKind(ViewUsage) - - - <p>The <code>usages</code> of a <code>Usage</code> are all its <code>features</code> that are <code>Usages</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 - usage = feature->selectByKind(Usage) + satisfiedViewpoint = ownedRequirement-> + selectByKind(ViewpointUsage)-> + select(isComposite) - - - <p>A <code>Usage</code> that is directed, an end feature or has no <code>featuringTypes</code> must be referential.</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 - direction <> null or isEnd or featuringType->isEmpty() implies - isReference + viewRendering = + let renderings: OrderedSet(ViewRenderingMembership) = + featureMembership->selectByKind(ViewRenderingMembership) in + if renderings->isEmpty() then null + else renderings->first().referencedRendering + endif - - - <p>If a <code>Usage</code> is a variation, then it must be abstract.</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 - isVariation implies isAbstract + viewCondition = ownedMembership-> + selectByKind(ElementFilterMembership). + condition - - - <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>ViewDefinition</code> must have at most one <code>ViewRenderingMembership</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') - ) + featureMembership-> + selectByKind(ViewRenderingMembership)-> + size() <= 1 - - - <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>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 - owningVariationUsage <> null implies - featuringType->asSet() = owningVariationUsage.featuringType->asSet() + specializesFromLibrary('Views::View') - - - - - - <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> of this <code>ViewDefinition</code> that are <code>ViewUsages</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 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>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>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>Definition</code> that owns this <code>Usage</code> (if any).</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 <code>Usage</code> in which this <code>Usage</code> is nested (if any).</p> + + + + + <p>The ViewUsage that owns a certain <code>viewCondition</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>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 ViewDefinition that owns a certain <code>rendering</code>.</p> - - - - - - <p>The code>FlowUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + + + + + + + <p>The ViewpointUsage that has a certain <code>viewpointStakeholder</code>.</p> - - - - - - <p>The <code>InterfaceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + + + + + + + <p>The RenderingUsages defined by a certain <code>renderingDefinition</code>.</p> - - - - - - <p>The <code>AllocationUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + + + + + + + <p>The ViewDefinition that owns a certain <code>satisfiedViewpoint</code>.</p> - - - - - - <p>The <code>ActionUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + + + + + + + <p>The ViewUsage that owns a certain <code>rendering</code>.</p> - - - - - - <p>The <code>StateUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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>The <code>TransitionUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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 + + + + + <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>CalculationUsage</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + OCL2.0 + owningType.oclIsKindOf(ViewDefinition) or +owningType.oclIsKindOf(ViewUsage) + + + + + + + + <p>The owned <code>RenderingUsage</code> that is either itself the <code>referencedRendering</code> or subsets the <code>referencedRendering</code>. - - + + + - - - <p>The <code>ConstraintUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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> - - + + - - - <p>The <code>RequirementUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + + + + p>The ViewUsage that owns a certain <code>satisfiedViewpoint</code>.</p> - - - - - - <p>The <code>ConcernUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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> - - - - - - <p>The <code>CaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + OCL2.0 + isImportAll + + + + + <p>The <code>importOwningNamespace</code> of an <code>Expose</code> must be a <code>ViewUsage</code>.</p> - - - - - - <p>The <code>AnalysisCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + OCL2.0 + importOwningNamespace.oclIsType(ViewUsage) + + + + + <p>An <code>Expose</code> always has <code>protected</code> visibility.</p> - - - - - - <p>The <code>VerificationCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + OCL2.0 + visibility = VisibilityKind::protected + + + + + + + + <p>An <code>Expose</code> always has <code>protected</code> visibility.</p> - - + + + + + - - - <p>The <code>UseCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + + <p>An <code>Expose</code> always imports all <code>Elements</code>, regardless of visibility (<code>isImportAll = true</code>).</p> - - + + + - - - <p>The <code>ViewUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + + + + + + + + + + <p>The ViewDefinitions that feature a certain ViewUsage.</p> - - - - - - <p>The <code>ViewpointUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + + + + + + + <p>The ViewpointDefinition that has a certain <code>viewpointStakeholder</code>.</p> - - - - - - <p>The <code>RenderingUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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>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>The <code>MetadataUsages</code> that are <code>ownedMembers</code> of this of this <code>Usage</code>.</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>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> + + 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>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 + 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> - - - 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> + + + + + + <p>The naming <code>Feature</code> of a <code>RenderingUsage</code> that is owned via a <code>ViewRenderingMembership</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 ownedReferenceSubsetting = null then null -else ownedReferenceSubsetting.referencedFeature.featureTarget + if owningFeatureMembership <> null and + owningFeatureMembership.oclIsKindOf(ViewRenderingMembership) and + ownedReferenceSubsetting <> null then + ownedReferenceSubsetting.referencedFeature.featureTarget +else + self.oclAsType(OccurrenceUsage).namingFeature() endif - + + + - - - - <p>The Usage in which the <code>nestedRequirement</code> is nested.</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> - - - - - - - - <p>The Usage in which the <code>nestedPart</code> is nested.</p> + + OCL2.0 + viewpointStakeholder = framedConcern.featureMemberhsip-> + selectByKind(StakeholderMembership). + ownedStakeholderParameter + + + + + <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::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>The UseCaseUsages being typed by a certain UseCaseDefinition.</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 + 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> + + + OCL2.0 + specializesFromLibrary('Views::Rendering') + + + + + + <p>The <code>usages</code> of a <code>RenderingDefinition</code> that are <code>RenderingUsages</code>.</p> + + + + + + + + + - - - <p>A <code>UseCaseUsage</code> is a <code>Usage</code> of a <code>UseCaseDefinition</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>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>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 - includedUseCase = ownedUseCase-> - selectByKind(IncludeUseCaseUsage). - useCaseIncluded + 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 + 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> + + + 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>. + + + 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> + + + 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> + + + 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> + + + OCL2.0 + portionKind = PortionKind::timeslice implies + specializesFromLibrary('Occurrences::Occurrence::timeSlices') - - - <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 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('UseCases::useCases') + portionKind <> null implies + owningType <> null and + (owningType.oclIsKindOf(OccurrenceDefinition) or + owningType.oclIsKindOf(OccurrenceUsage)) - - - <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>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(UseCaseDefinition) or - owningType.oclIsKindOf(UseCaseUsage)) implies - specializesFromLibrary('UseCases::UseCase::subUseCases') + portionKind <> null implies isPortion - - - - <p>The <code>UseCaseDefinition</code> that is the <code>definition</code> of this <code>UseCaseUsage</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>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 at most one <code>occurrenceDefinition</code> that has <code>isIndividual = true</code>.</p> - - + + - - - - - <p>The UseCaseDefinition that includes a certain <code>includedUseCase</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>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>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>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>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 - includedUseCase = ownedUseCase-> - selectByKind(IncludeUseCaseUsage). - useCaseIncluded + isIndividual implies specializesFromLibrary('Occurrences::Life') - - - <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>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 - specializesFromLibrary('UseCases::UseCase') + isIndividual implies + multiplicity <> null and + multiplicity.specializesFromLibrary('Base::zeroOrOne') - - - - <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>Whether this <code>OccurrenceDefinition</code> is constrained to represent at most one thing.</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>The EventOccurrenceUsages that reference a certain <code>eventOccurrence</code>.</p> + + + + + + + + + <p>The <code>OccurrenceUsages</code> being typed by a certain <code>Class</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 <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 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>OccurrenceUsage</code> that has a certain <code>individualDefinition</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> + + OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(UseCaseDefinition) or - owningType.oclIsKindOf(UseCaseUsage) implies - specializesFromLibrary('UseCases::UseCase::includedUseCases') + eventOccurrence = + if referencedFeatureTarget() = null then self + else if referencedFeatureTarget().oclIsKindOf(OccurrenceUsage) then + referencedFeatureTarget().oclAsType(OccurrenceUsage) + else null + endif endif - - - <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>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 referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(UseCaseUsage) + referencedFeatureTarget().oclIsKindOf(OccurrenceUsage) - - - - - <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 UseCaseUsage that includes a certain <code>includedUseCase</code>.</p> - - - - - - - - - <p>The IncludeUseCaseUsages that have a certain UseCaseUsage as their <code>includedUseCase</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> - - - - - - - <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 + 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 - specializesFromLibrary('Parts::Part') + 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>Always true for an <code>EventOccurrenceUsage</code>.</p> + + + + @@ -8298,6 +8411,22 @@ owningFeatureMembership.oclIsKindOf(StakeholderMembership) implies + + + <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 + specializesFromLibrary('Parts::Part') + + + + @@ -8307,194 +8436,88 @@ owningFeatureMembership.oclIsKindOf(StakeholderMembership) implies - - - - <p>The ConstraintUsages typed by a certain Predicate.</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>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>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>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('Constraints::ConstraintCheck') + ownedEndFeature->size() = 2 implies + specializesFromLibrary('Interfaces::binaryInterfaces') - - - - - - - - <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>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 - assertedConstraint = - if referencedFeatureTarget() = null then self - else if referencedFeatureTarget().oclIsKindOf(ConstraintUsage) then - referencedFeatureTarget().oclAsType(ConstraintUsage) - else null - endif endif + specializesFromLibrary('Interfaces::interfaces') - - - <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>InterfaceDefinitions</code> that type this <code>InterfaceUsage</code>.</p> - - OCL2.0 - if isNegated then - specializesFromLibrary('Constraints::negatedConstraintChecks') -else - specializesFromLibrary('Constraints::assertedConstraintChecks') -endif - - - - - <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>The InterfaceUsages typed by a certain InterfaceDefinition.</p> - - OCL2.0 - referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(ConstraintUsage) - - - - - - - - - <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 InterfaceDefinitions that have a certain PortUsage as an <code>interfaceEnd</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>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>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 - 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>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 - specializesFromLibrary('Constraints::constraintChecks') + specializesFromLibrary('Interfaces::Interface') - - - <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>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 - owningType <> null and -(owningType.oclIsKindOf(ItemDefinition) or - owningType.oclIsKindOf(ItemUsage)) implies - specializesFromLibrary('Items::Item::checkedConstraints') + ownedEndFeature->size() = 2 implies + specializesFromLibrary('Interfaces::BinaryInterface') - - - - - - - <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>PortUsages</code> that are the <code>connectionEnds</code> of this <code>InterfaceDefinition</code>. + + - - - - + + - - - <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 AssertConstraintUsages that have a certain ConstraintUsage as their <tt>assertedConstraint</tt>.</p> - - - - diff --git a/org.omg.sysml/model/SysML_only_xmi.uml b/org.omg.sysml/model/SysML_only_xmi.uml index 2764d000c..f7263460f 100644 --- a/org.omg.sysml/model/SysML_only_xmi.uml +++ b/org.omg.sysml/model/SysML_only_xmi.uml @@ -1,5 +1,5 @@ - + @@ -398,7 +398,7 @@ endif - <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>An <code>AcceptUsageAction</code> must have at least one 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 @@ -586,7 +586,7 @@ owningType.oclAsType(TransitionUsage).triggerAction->includes(self) OCL2.0 isSubactionUsage() implies - specializesFromLibrary('Actions::Action::acceptSubactions') + specializesFromLibrary('Actions::Action::sendSubactions') @@ -2708,7 +2708,7 @@ targetParameter.ownedFeature->first().ownedFeature->first().redefines(referent)< OCL2.0 - nestedMetadata = nestedUsage->selectByKind(MetadataUsage) + nestedMetadata = ownedMember->selectByKind(MetadataUsage) @@ -5560,13 +5560,14 @@ 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> but is <em>not</em> owned via a <code>RequirementConstraintMembership</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 isComposite and owningType <> null and (owningType.oclIsKindOf(RequirementDefinition) or - owningType.oclIsKindOf(RequirementUsage)) implies + owningType.oclIsKindOf(RequirementUsage)) and + not owningFeatureMembership.oclIsKindOf(RequirementConstraintMembership) implies specializesFromLibrary('Requirements::RequirementCheck::subrequirements') @@ -7482,6 +7483,28 @@ owningFeatureMembership.oclIsKindOf(ViewRenderingMembership) implies + + + <p>The naming <code>Feature</code> of a <code>RenderingUsage</code> that is owned via a <code>ViewRenderingMembership</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(ViewRenderingMembership) and + ownedReferenceSubsetting <> null then + ownedReferenceSubsetting.referencedFeature.featureTarget +else + self.oclAsType(OccurrenceUsage).namingFeature() +endif + + + + + + + + diff --git a/org.omg.sysml/model/SysML_xmi.uml b/org.omg.sysml/model/SysML_xmi.uml index e4848b680..18f6d5bcf 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. @@ -1824,12 +1824,14 @@ endif - <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> + <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> owned by a direct or indirect supertype of this <code>Type</code>.</p> OCL2.0 - featureMembership = ownedFeatureMembership->union( - inheritedMembership->selectByKind(FeatureMembership)) + featureMembership = ownedFeatureMembership-> + union(inheritedMembership-> + selectByKind(FeatureMembership)-> + select(mem | self.specializes(mem.owningType))) @@ -3012,11 +3014,15 @@ featuringTypes->forAll(t | - <p>If the redefinedFeature of a Redefinition has isEnd = true, then the redefiningFeature must have isEnd = true.</p> + <p>If the <code>redefinedFeature</code> of a <code>Redefinition</code> has <code>isEnd = true</code> and the <code>owningType</code> of the <code>redefiningFeature</code> is an <code>Association</code> or <code>Connector</code>, then the <code>redefiningFeature</code> must have <code>isEnd = true</code>.</p> OCL2.0 - redefinedFeature.isEnd implies redefiningFeature.isEnd + redefinedFeature.isEnd and +redefiningFeature.owningType <> null and +(redefiningFeature.owningType.oclIsKindOf(Association) or + redefiningFeature.owningType.oclIsKindOf(Connector)) implies + redefiningFeature.isEnd @@ -4115,7 +4121,7 @@ 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> + <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 <em>not</em> a <code>Multiplicity</code>, <code>MetadataFeature</code>, or <code>BindingConnector</code>, and whose <code>owningMembership</code> is <em>not</em> a <code>FeatureMembership</code> or <code>FeatureValue</code>. If this exists, it is the <code>crossFeature</code> of the end <code>Feature</code>.</p> @@ -4124,13 +4130,16 @@ owningNamespace.oclAsType(Feature).ownedCrossFeature() = self else let ownedMemberFeatures: Sequence(Feature) = ownedMember->selectByKind(Feature)-> - reject(oclIsKindOf(Multiplicity) or + reject(oclIsKindOf(Multiplicity) or oclIsKindOf(MetadataFeature) or - oclIsKindOf(FeatureValue))-> - reject(owningMembership.oclIsKindOf(FeatureMembership)) in + oclIsKindOf(BindingConnector))-> + reject(owningMembership.oclIsKindOf(FeatureMembership) or + owningMembership.oclIsKindOf(FeatureValue)) in if ownedMemberFeatures.isEmpty() then null else ownedMemberFeatures->first() - endif + endif +endif + @@ -5919,12 +5928,12 @@ endif - <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>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::Collection</code></em> from the Kernel Data Type Library.</p> OCL2.0 arguments->notEmpty() and -not arguments->first().result.specializesFromLibrary('Collections::Array') implies +not arguments->first().result.specializesFromLibrary('Collections::Collection') implies result.specializes(arguments->first().result) @@ -6629,11 +6638,19 @@ endif - <p>The <code>bounds</code> of a <code>MultiplicityRange</code> must have the same <code>featuringTypes</code> as the <code>MultiplicityRange</code>.</p> + <p>If the <code>owningType</code> of a <code>MultiplicityRange</code> is a <code>Feature</code>, but not an owned cross <code>Feature</code>, then the <code>bounds</code> of the <code>MultiplicityRange</code> must have the same <code>featuringTypes</code> as the <code>MultiplicityRange</code>. If the <code>owningType</code> is an owned cross <code>Feature</code>, then the <code>bounds</code> must have the same <code>featuringTypes</code> as the owning end <code>Feature</code> of the <code>owningType</code>. (This allows a cross multiplicity to be evaluated in the same context as the multiplicity of the end <code>Feature</code>.)</p> OCL2.0 - bound->forAll(b | b.featuringType = self.featuringType) + let boundsFeaturingType : OrderedSet(Type) = + if owningType <> null and owningType.oclIsKindOf(Feature) and + owningType.oclAsType(Feature).isOwnedCrossFeature() then + owningType.oclAsType(Feature).owningType.oclAsType(Feature).featuringType + else + featuringType + endif in +bound->forAll(b | b.featuringType = boundsFeaturingType) + @@ -8219,7 +8236,7 @@ endif - <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>An <code>AcceptUsageAction</code> must have at least one 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 @@ -8403,7 +8420,7 @@ owningType.oclAsType(TransitionUsage).triggerAction->includes(self) OCL2.0 isSubactionUsage() implies - specializesFromLibrary('Actions::Action::acceptSubactions') + specializesFromLibrary('Actions::Action::sendSubactions') @@ -10476,7 +10493,7 @@ targetParameter.ownedFeature->first().ownedFeature->first().redefines(referent)< OCL2.0 - nestedMetadata = nestedUsage->selectByKind(MetadataUsage) + nestedMetadata = ownedMember->selectByKind(MetadataUsage) @@ -13249,13 +13266,14 @@ 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> but is <em>not</em> owned via a <code>RequirementConstraintMembership</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 isComposite and owningType <> null and (owningType.oclIsKindOf(RequirementDefinition) or - owningType.oclIsKindOf(RequirementUsage)) implies + owningType.oclIsKindOf(RequirementUsage)) and + not owningFeatureMembership.oclIsKindOf(RequirementConstraintMembership) implies specializesFromLibrary('Requirements::RequirementCheck::subrequirements') @@ -15056,6 +15074,27 @@ owningFeatureMembership.oclIsKindOf(ViewRenderingMembership) implies + + + <p>The naming <code>Feature</code> of a <code>RenderingUsage</code> that is owned via a <code>ViewRenderingMembership</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(ViewRenderingMembership) and + ownedReferenceSubsetting <> null then + ownedReferenceSubsetting.referencedFeature.featureTarget +else + self.oclAsType(OccurrenceUsage).namingFeature() +endif + + + + + + + From d6be1f1eba2ec988a8bd3b1f1fc722da37ed02fa Mon Sep 17 00:00:00 2001 From: Ed Seidewitz Date: Fri, 31 Jul 2026 17:55:15 -0400 Subject: [PATCH 2/5] ST6RI-956 Regenerated the .ecore files in org.omg.sysml. --- org.omg.sysml/model/KerML.genmodel | 226 +- org.omg.sysml/model/SysML.ecore | 16 +- org.omg.sysml/model/SysML_clean.genmodel | 662 ++--- org.omg.sysml/model/kerml.ecore | 870 +++---- org.omg.sysml/model/sysml_clean.ecore | 2932 +++++++++++----------- 5 files changed, 2353 insertions(+), 2353 deletions(-) diff --git a/org.omg.sysml/model/KerML.genmodel b/org.omg.sysml/model/KerML.genmodel index fd248e310..536521dee 100644 --- a/org.omg.sysml/model/KerML.genmodel +++ b/org.omg.sysml/model/KerML.genmodel @@ -42,29 +42,30 @@ - - - + + + + + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//AnnotatingElement/annotation"/> + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//AnnotatingElement/owningAnnotatingRelationship"/> - + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//AnnotatingElement/annotatedElement"/> - + + - - + @@ -109,6 +110,19 @@ + + + + + + + + @@ -118,10 +132,10 @@ propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Namespace/member"/> - + @@ -175,31 +189,17 @@ - - - - - - - - - - + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Annotation/owningAnnotatingElement"/> + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Annotation/owningAnnotatedElement"/> @@ -221,14 +221,6 @@ - - - - - @@ -495,38 +487,19 @@ + - - - - - - - - - - - - + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Subclassification/superclassifier"/> + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Subclassification/subclassifier"/> + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Subclassification/owningClassifier"/> - - @@ -571,14 +544,13 @@ propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Function/result"/> - - - - - + - + + + + + @@ -590,13 +562,15 @@ propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//InstantiationExpression/instantiatedType.1"/> - - - - + + + + + + @@ -613,53 +587,65 @@ + + + + - - - - - + + + + + + + - - - + + + - + + + + - - - + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//BooleanExpression/predicate"/> - + + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//ResultExpressionMembership/ownedResultExpression"/> - - + + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Connector/relatedFeature"/> + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Connector/association"/> + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Connector/connectorEnd"/> + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Connector/sourceFeature"/> + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Connector/targetFeature"/> + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Connector/defaultFeaturingType"/> - - - + + @@ -675,23 +661,37 @@ - - - - - + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//ElementFilterMembership/condition"/> - - + - + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Package/filterCondition"/> + + + - + + + + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Flow/payloadType"/> + + + + + + + + + diff --git a/org.omg.sysml/model/SysML.ecore b/org.omg.sysml/model/SysML.ecore index 88a1e51a2..00083b321 100644 --- a/org.omg.sysml/model/SysML.ecore +++ b/org.omg.sysml/model/SysML.ecore @@ -1744,7 +1744,7 @@ -
+
@@ -2503,7 +2503,7 @@ -
+
-
+
@@ -3411,7 +3411,7 @@ -
+
@@ -3688,7 +3688,7 @@ -
+
@@ -3869,7 +3869,7 @@ -
+
@@ -4442,7 +4442,7 @@ -
+
@@ -4826,7 +4826,7 @@ -
+
diff --git a/org.omg.sysml/model/SysML_clean.genmodel b/org.omg.sysml/model/SysML_clean.genmodel index b74328cb6..521babe14 100644 --- a/org.omg.sysml/model/SysML_clean.genmodel +++ b/org.omg.sysml/model/SysML_clean.genmodel @@ -52,35 +52,135 @@ - - - - + + + - - - + + + + - + + + + + + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//InstantiationExpression/argument"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + @@ -338,77 +440,40 @@ - - - - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Conjugation/originalType"/> + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Conjugation/conjugatedType"/> - - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Conjugation/owningType"/> + + + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Intersecting/intersectingType"/> + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Intersecting/typeIntersected"/> + + - - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Unioning/unioningType"/> - - - - - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Unioning/typeUnioned"/> + + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Disjoining/typeDisjoined"/> + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Disjoining/disjoiningType"/> - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Disjoining/owningType"/> + + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Differencing/differencingType"/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Differencing/typeDifferenced"/> - - - - - - - - - - - - - - - - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Behavior/step"/> + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Behavior/parameter"/> - - + + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Classifier/ownedSubclassification"/> - - - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Function/expression"/> + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Function/result"/> + - - + + + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//FeatureReferenceExpression/referent"/> + + + + + + + + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//FeatureChainExpression/targetFeature"/> + - + - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//MetadataAccessExpression/referencedElement"/> + - - - - - + + - - - - + + + + + + + + + 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#//ParameterMembership/ownedMemberParameter"/> + - - - - - + + - + - - - - - - - - - - - - - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//BooleanExpression/predicate"/> - - + + - - - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//ResultExpressionMembership/ownedResultExpression"/> + + @@ -633,45 +650,25 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Association/relatedType"/> + + + - - + + + + + + - @@ -686,12 +683,10 @@ + - - - @@ -699,52 +694,35 @@ + + + - - - - - - + + - - - - - - - - - + - - - - - - - - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//NamespaceImport/importedNamespace"/> - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//MembershipImport/importedMembership"/> + + + - - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//FlowUsage/flowDefinition"/> + @@ -902,6 +880,17 @@ propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//EnumerationDefinition/enumeratedValue"/> + + + + + + + + + @@ -912,9 +901,6 @@ - - - @@ -935,11 +921,6 @@ - - - - @@ -964,6 +945,18 @@ + + + + + + + + + + + @@ -1154,22 +1147,32 @@ - - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//FlowDefinition/flowEnd"/> + + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//TerminateActionUsage/terminatedOccurrenceArgument"/> - + + + + + + + + + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//WhileLoopActionUsage/whileArgument"/> + - @@ -1178,20 +1181,7 @@ - - - - - - - - - + @@ -1200,7 +1190,6 @@ - @@ -1212,34 +1201,25 @@ - - - - - - + + + + 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#//SendActionUsage/receiverArgument"/> + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//SendActionUsage/payloadArgument"/> + - - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//AssertConstraintUsage/assertedConstraint"/> - - - - - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//SubjectMembership/ownedSubjectParameter"/> - - - - + + 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#//ActorMembership/ownedActorParameter"/> - - - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//StakeholderMembership/ownedStakeholderParameter"/> - + + 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#//ConjugatedPortTyping/portDefinition"/> + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//ConjugatedPortTyping/conjugatedPortDefinition"/> - + + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//StateDefinition/state"/> + + + + + + + + + + + + + + + + + + + + + + - diff --git a/org.omg.sysml/model/kerml.ecore b/org.omg.sysml/model/kerml.ecore index 0e967e777..42e08d99b 100644 --- a/org.omg.sysml/model/kerml.ecore +++ b/org.omg.sysml/model/kerml.ecore @@ -1,58 +1,56 @@ - + -
+
- + -
+
- - + -
+
- - - -
- + + + +
+ + -
+
- - -
- + -
+
- + - - -
- + -
+
- + - + + +
+ -
+
@@ -105,10 +103,10 @@ - + -
+
+ + +
+ + @@ -124,12 +128,6 @@
- - -
- - @@ -268,13 +266,6 @@ - - -
- - @@ -284,6 +275,13 @@ + + +
+ + @@ -313,6 +311,61 @@ + + +
+ + + +
+ + +
+ + + + +
+ + +
+ + + + + +
+ + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + +
@@ -453,6 +506,13 @@ + + +
+ + + @@ -463,13 +523,6 @@ - - -
- - - @@ -554,59 +607,6 @@ - - -
- - - -
- - - - -
- - - - - -
- - - -
- - -
- - - - -
- - - - - -
- - - - -
- - - -
@@ -629,13 +629,13 @@ - + -
+
- + - + -
+
- + @@ -735,48 +735,16 @@ - + -
+
- - -
- + -
+
- - - - -
- - - - - -
- - -
- - - - - - -
- - - -
- - + @@ -801,7 +769,7 @@ -
+
@@ -1233,10 +1201,10 @@ -
+
-
+
@@ -1470,7 +1438,7 @@ -
+
@@ -1854,6 +1822,11 @@ + + +
+ +
@@ -1867,139 +1840,38 @@ - - -
- - - - -
- - - - -
- - - -
- - -
- - - - - -
- - -
- - - - - -
- - -
- - - - - -
- - -
- - - - - - -
- - -
- - - - - - -
- - -
- - - - + -
+
- - -
- - -
- - - - + -
+
-
+
- - + - + -
+
-
+
- - + - - -
- + -
+
- + - - -
- - - - -
- -
@@ -2185,39 +2057,35 @@ - + -
+
- + -
+
- + -
+
- - -
- + -
+
- - + -
+
- + -
+
@@ -2269,20 +2137,14 @@ - + -
+
- - -
- - - + -
+
@@ -2296,6 +2158,22 @@ + + +
+ + + +
+ + + + + +
+ +
@@ -2369,6 +2247,26 @@
+ + +
+ + + + +
+ + + +
+ + +
+ + + +
@@ -2380,16 +2278,6 @@ - - -
- - - - -
- -
@@ -2413,163 +2301,218 @@ - + -
+
- + -
+
- + + + +
+ + + +
+ -
+
+ + + + + +
+ + +
+ + + + + + +
+ +
+ + + + + + +
+ + +
+ + - + -
+
+ + +
+ + +
+ + + + +
+ + +
+ + + - + -
+
- -
+
- + -
+
- - -
- - -
- - - - + -
+
-
+
- + - + -
+
- + + + +
+ + -
+
-
+
- + - + -
+
- + -
+
- + -
+
-
+
+ - + -
+
-
+
+ - -
+
-
+
+ - + -
+
-
+
- + + - + -
+
-
+
- + + - + -
+
-
+
- - - -
- - - + -
+
- + -
+
-
+
@@ -2621,80 +2564,137 @@ - - -
- - - + -
+
- + + +
+ -
+
+ - + -
+
- + + +
+ + +
+ + + + -
+
-
+
- + - + -
+
+ + +
+ + - + -
+
- + + +
+ -
+
- -
+ + + +
- - + +
+ + + -
+
-
+
- - - - -
- - + -
+
-
+
- + + + + +
+ + +
+ + + + +
+ + +
+ + + + + + +
+ + + + +
+ + + + +
+ + + + +
+ diff --git a/org.omg.sysml/model/sysml_clean.ecore b/org.omg.sysml/model/sysml_clean.ecore index 376738af2..81c4ce743 100644 --- a/org.omg.sysml/model/sysml_clean.ecore +++ b/org.omg.sysml/model/sysml_clean.ecore @@ -1,22 +1,411 @@ - + -
+
- + + + +
+ + + +
+ + + + + +
+ + + + +
+ + + +
+ + + + +
+ + +
+ + + + +
+ + +
+ + + + + + +
+ + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + +
+ + + + + +
+ + +
+ + + + + +
+ + + + + +
+ + + +
+ + +
+ + + + + +
+ + +
+ + + + + + +
+ + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + +
+ + +
+ + + + +
+ + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + +
+ + + + +
+ + + + + +
+ + + + +
+ + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + + -
+
+ + + + +
+ + + + + +
+ + +
+ + + + +
+ + +
- + + + +
+ + + + +
+ + -
+
@@ -117,20 +506,6 @@ - - -
- - - - - -
- - - @@ -141,6 +516,13 @@ + + +
+ + + @@ -188,6 +570,13 @@ + + +
+ + + @@ -883,391 +1272,276 @@
- - - - - - -
- - - -
- - - - - -
- - - - -
- - - - -
- - - - -
- - -
- - - - -
- - - - - - - -
- - - -
- - -
- - - - - -
- - -
- - - - - -
- - - - - - -
- - - -
- - - - - -
- - - - - - -
- - - -
- - - - - -
- - - - -
- - - - - -
- - - - - -
- - - - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- - - - - -
- - - - + + + + + + +
+ + -
+
- + - + -
+
- - + defaultValueLiteral="false"> -
+
- -
+
- + -
+
-
+
- - -
- + -
+
- + + - + + + +
+ + + +
+ -
+
- + - + + +
+ -
+
+ - + -
+
+ - + + + +
+ + -
+
- + - + -
+
- + - + + + +
+ + -
+
-
+
+ - + + +
+ -
+
- + - + -
+
+ - + + + +
+ + + + +
+ + -
+
-
+
+ - + -
+
- + + - - -
+ + + +
+ + + +
- - - -
+
+ - + -
+
+ + - - -
+ + + +
+ + + +
- - -
+
- + - + -
+
-
+
+ - + + +
+ + + + + + +
+ + -
+
-
+
+ - + -
+
+ + - + + + +
+ + -
+
- - - + + -
+
- - + + + +
+ + -
+
@@ -1467,26 +1741,6 @@ - - -
- - - -
- - - - -
- - - - -
- - -
@@ -1510,145 +1764,47 @@ - - -
- - - -
- - -
- - - - - -
- - -
- - - - - -
- - - - - - -
- - - + -
+
- + -
- - -
+
- - - -
+
- - + - - - -
- - + -
- - -
+
- - - -
+
- - + - + -
+
- - -
- - -
- - - - - -
- - -
- - - - - -
- - - - + -
+
- - -
- - -
- - - - + -
+
- - + @@ -1683,89 +1839,123 @@ - + -
+
+ + + +
+ + +
+ + + + + +
+ + +
+ + + + + +
+ + + + + +
- + -
+
- + -
+
- - -
- - -
- - - - + -
+
-
+
- + - + -
+
+ + +
+ + - + -
+
- - -
- + -
+
- - + + + +
+ + + +
+ + + -
+
-
+
- + - + -
+
- + -
+
- + -
+
-
+
- + @@ -1814,319 +2004,178 @@
- + -
+
- - -
- - -
- - - - - -
- - -
- - - - - - -
- - -
- - - - - - -
- + -
+
- - + -
+
- + -
+
- + -
+
- + -
+
- - -
- - - - - -
- - - - - -
- - - - - -
- - -
- - - - - -
- - -
- - - - - -
- - - + -
+
- - -
- - -
- - - - - -
- - -
- - - - + -
+
- + -
+
- + -
+
+ + - - -
- - -
- - - - - - -
- - - - -
- - - -
- - - - - -
- - - - -
- - + -
+
+ - -
+
-
+
+ - + -
+
-
+
- + - - - -
- - - -
- - - + -
+
-
+
- + - - -
- - - + -
+
- + -
+
- + -
+
+ + + + +
+ + +
+ - - -
- - - + -
+
- + -
+
- + -
+
- + + +
+ -
+
+ - + -
+
- + -
+
- + -
+
-
+
- + - + -
+
+ + + + +
- - -
- - @@ -2194,160 +2243,96 @@ - - -
- - - - -
- - - + -
+
- - -
- - -
- - - - + -
- - -
- - - - - -
+
- - -
+
+ - - - -
- - - -
- - - - - - -
- - - - + -
+
-
+
- + + - + -
+
-
+
- + + - + -
+
-
+
- + - - -
- - - + -
+
- + -
+
- + -
+
-
+
- - - - - -
- - + + + -
+
-
+
- + - - - -
- - -
+
+ + + + +
- - - -
- @@ -2411,6 +2396,11 @@ + + +
+ +
@@ -2426,18 +2416,6 @@
- - -
- - - -
- - -
@@ -2459,6 +2437,18 @@ + + +
+ + + +
+ + +
@@ -2474,35 +2464,15 @@ - + -
+
- - -
- - -
- - - - + -
+
- - -
- - -
- - - @@ -2529,102 +2499,64 @@ - - -
- - - - -
- - - -
- - - - - - - + -
+
- - -
- - - - -
- - - - - -
- - - - - -
- - - + -
+
-
+
- + - + -
+
- + -
+
-
+
- + - + + + +
+ + + + +
+ + -
- - -
- - - - - -
+
- - -
+
+ + + +
+ + -
+
@@ -3379,6 +3311,71 @@
+ + +
+ + + +
+ + +
+ + + + + +
+ + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + +
+ + + + + +
+ + + +
+ + + + +
+ + +
@@ -3419,18 +3416,6 @@
- - -
- - - -
- - -
@@ -3503,26 +3488,6 @@ - - -
- - - - -
- - - -
- - -
- - - -
@@ -3615,6 +3580,43 @@ + + +
+ + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + +
+ + + +
@@ -3815,7 +3817,7 @@ -
+
- - -
- - -
- - - - - - -
- - - -
- - -
- - - - - -
- - -
- - - - - -
- - - -
- - -
- - - - - -
- - - -
- - -
- - - - - - -
- - - -
- - -
- - - - - - -
- - - -
- - -
- - - - - - -
- - - -
- - - - -
- - - - - -
- - - - -
- - - -
- - -
- - - - -
- - -
- - - - - -
- - - -
- - -
- - - - - -
- - - -
- - -
- - - - - -
- - - - -
- - - -
- - -
- - - - - - -
- - + -
+
-
+
+ - + -
+
- + -
+
-
+
+ - + -
+
-
+
- + + + +
+ + -
+
-
+
- + -
+
- + -
+
-
+
+ - + + + +
+ + -
+
-
+
+ - + -
+
- + -
+
-
+
+ - + + + +
+ + -
+
-
+
+ - + + + +
+ + -
+
-
+
- - - -
- -
@@ -4642,208 +4473,251 @@ - + -
+
- + + +
+ -
+
- + -
+
- + + + +
+ + + +
+ + + + + + + + +
+ + -
+
-
+
- + -
+
-
+
- + + + +
+ + -
+
-
+
+ - + -
+
- + -
+
-
+
- - + -
+
- + + + +
+ + + +
+ -
+
+ + + + +
- - -
+
+ + + + +
- - -
+
- + + - + -
+
- - -
- - - - -
- - - + -
+
- + - + -
+
- + -
+
-
+
- - + -
+
-
+
- + -
+
-
+
- + + + +
+ + + + +
+ + + + +
+ + -
+
-
+
- + + +
+ -
+
- + -
+
- + -
+
-
+
- - - - -
- - + + +
+ -
+
- + -
+
-
+
- - + -
+
- - -
- - - + -
+
-
+
- @@ -4920,6 +4794,144 @@ + + +
+ + + +
+ + +
+ + + + + + +
+ + + +
+ + +
+ + + + + +
+ + +
+ + + + + + +
+ + + +
+ + +
+ + + + + + +
+ + + +
+ + +
+ + + + + + +
+ + + +
+ + +
+ + + + + +
+ + +
+ + + + + +
+ + + +
+ + +
+ + + + + + +
+ + + +
+ + +
+ + + + + + +
+ + + + +
+ +
@@ -4945,208 +4957,196 @@ - - -
- - - -
- - -
- - - - - - -
- - - + -
+
- + -
+
+ + +
+ + + + +
+ + + + +
+ + - + -
+
- + -
+
-
+
- + - + -
+
-
+
- - - -
- - - - -
- - + -
+
-
+
- - - - -
- - - - -
- - - - -
- - + -
+
-
+
+ + + + +
- + -
+
- - -
- + -
+
- - - - -
+ + + +
+ + -
+
- + - + -
+
- + -
+
-
+
- + - + -
+
- + + +
+ + + -
+
-
+
- + - + -
+
- - -
- + -
+
- - + -
+
-
+
- + - + -
+
- + + +
+ + + + +
+ + + + +
+ + -
+
-
+
+ + + + + +
+ + +
- - - - -
- From 30e7914e41f9f8e3e7e930402859f97b612a2fec Mon Sep 17 00:00:00 2001 From: Ed Seidewitz Date: Fri, 31 Jul 2026 19:02:45 -0400 Subject: [PATCH 3/5] ST6RI-956 Regenerated EMF classes for 2026-07 abstract syntax. - Changes are only in comments of metaclass interfaces that transcribe OCL. --- .../org.omg.sysml.logic-0.61.0-SNAPSHOT.jar | Bin 689741 -> 687183 bytes .../org.omg.sysml.model-0.61.0-SNAPSHOT.jar | Bin 909103 -> 897884 bytes .../org/omg/sysml/lang/sysml/Feature.java | 11 +++++++---- .../omg/sysml/lang/sysml/IndexExpression.java | 2 +- .../sysml/lang/sysml/MultiplicityRange.java | 10 +++++++++- .../omg/sysml/lang/sysml/Redefinition.java | 6 +++++- .../sysml/lang/sysml/RequirementUsage.java | 3 ++- .../omg/sysml/lang/sysml/SendActionUsage.java | 2 +- .../java/org/omg/sysml/lang/sysml/Type.java | 6 ++++-- .../java/org/omg/sysml/lang/sysml/Usage.java | 2 +- .../src/main/resources/model/SysML.ecore | 16 ++++++++-------- 11 files changed, 38 insertions(+), 20 deletions(-) diff --git a/org.omg.sysml.logic.bundle/lib/org.omg.sysml.logic-0.61.0-SNAPSHOT.jar b/org.omg.sysml.logic.bundle/lib/org.omg.sysml.logic-0.61.0-SNAPSHOT.jar index 3f0e72c15baa81ce8427a6b106f77670fb22f8e0..2962de3392b5a8414d53acdcf17b59c254941d1e 100644 GIT binary patch literal 687183 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 J1rdvIm8>Osb+8M9nG{Igu-w3#h^jD|4`$`0n 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

4=qDhVz;L)+T$13U(X#^|Fm*!iCQp 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⁢1A6@Pv{YTI^&_a`-{9YeJo` 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%0DQryjhBz;q3PCIj+a3Sars5iEGR7NQDMCnzrI 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 K?+|3)KK}z-L9X2Z literal 689741 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

;{+~ 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 diff --git a/org.omg.sysml.model.bundle/lib/org.omg.sysml.model-0.61.0-SNAPSHOT.jar b/org.omg.sysml.model.bundle/lib/org.omg.sysml.model-0.61.0-SNAPSHOT.jar index bb198270e9b714edc0cf486ef52cd52180d67f38..3e8f6bdcfada971c8d913a176b11aa4d8a7e9ec8 100644 GIT binary patch delta 717943 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łt79Y$ZHD(9oF(W7(R=($BQ81%OsSdB8eNz# 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

y;L|~vS6WnF^upaLV{OyX#LxhlIo4y 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 z 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

$_nJr}ECmsI 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

|9X^AKb zp6SeINsSeUbXBQWWXW_ao5G6~!R=C4r=q_V;4&bdV8HIipnMt9PZ{ti*A?naC7b_1 zLBp0ubdJZ0Ylpk7_+s$iz<`&Ht)ifGJ4;Y$;Ku*D;Z1C|YP*Yy3W8>XiA2PyN=1kn zGA^oPoN9`-retXz>sPP_p#%rwQ5}qF1u7yKJ#t-6?CTxo89}BrCrE<{(85CXO>sC# zR~w28j4s;{eSe=Ct)&Prw@+(J<{dT04B@`QZ|LDndBzu7*nQH43mnNF(LW9w1F8N^ z9Jf6My3F+I>>$&|#e^R8nNy|cJy$5xuGvV2pW1&OwI~bnSF+G?!6e`MZmbMp4q|L1 zqPn*pxYWu}K;pE0>2}~%r(w0HNbxW+f9Ndl4r0duT&1li5(~L(A+SVNUqclVl_>8! zfMcn$AMy(k_2lgBhadGrsKMmlF9@psCd2T-=GzUJ(L}eBjF+(i1;oskm|oAmN6wjz z5tS+|#^wnA@I^ky_`=%u&om~Xa52`x>Zt*#xX2!q`!*@orCvM*LnJHj6jNu90d)S{ zF>I}0$eySpS!Rxn_uf_YJ@Fa>UcX`RbK=(*Db1|A!5xbs6%vG}%U6HYOz~p=u(A zBoSewX*!o;V_JS{teaX=Zbo;@v2~y$I`o3GXgo;U?@c$Iq!gDjFfg#;Z~P8C{Kxdb zfTQ1yRjYG}-grrFoTUHzPT$S*XP?Wi&$-~d-jBUu1?vU~LC>JJ(In{{7=T^H6`bw$LC%P<;4 ze*z&?qII2aza{jMZ{9i*e^@_%mk>Kv%{y!@}8i`@ZfBY5An3;~f&D4sc}= zq5zqdB1F!r^)Se=Fs}J`fC_!a^0@!twNGbVlp+i^Kq_losMJ$Mh@ z>2v11NsW%a)-C2mOCtOTv7q7L#Xun{rn6{p?2mfrZR@R?BA_(5+in>1Hy8Xh>__52 zMuTH}lun439fkva2JBBC)t+Dap0sJP+M5JoenkS%-#V z-u2B`Y3y!gsklZOc7MS(t4su;X1a=vUfw|_!GskjHty{eOq7Z^i-8U9N22sA$OB4O z9VCHdq6l)THj(a3?D=t%?9Elyi_roQpENrWyg1$lh(K)7TojNy`?M1e0}puPb5oYw zi>&EO^gjuCqz>BTlS*NBrN_nRu0b}HxNjx!70`Rw!8~f3$%RRT5z-LjIGZxcS^~*L zEpHo+Nao`91SPT)3b%)aTV^ywR1#o3Nbw2@FE~-`OfL~-ZT+J68X~|sw52xgW-P)@3h~#TAjX+qu%7&KzOEJbzuVB)G4Tef_ zzo5b9^E&P5hnJKng+rsT>SPP17#P^f-d&$&0{;h^AyKGYS{B1`2Uw z%9eVnpCHXsd*(HnsXU7*YxGcmrC(tnl{P?i2cK~u^&_uk2J3ZIZ%Jv2 zZCc?`YyV)lVrea4=X5e)m=z z?wC<&D7J@rhgmF0Ew81N&9e2jve{{oRMK|{eR&`gFiCY>S&DILpQU&skKcJ|tHGVU z{OF_VKSebgY{wT2oguZ8K(@q6=?XyY{@HrHTKqcpcTP04bL zDGy1fDSDk`WBfr$rerzo&KB6x`oP@u;DpE9Z$6Sdrv!OIhwrSh%!25%f$NPwGSmL! zYjoiOI?vW%G@DUIg!9`2lOjs92_U`wQL9T*lrCq6;JAPJ61KH#TJdQ<*n(_u3|G4m^7OAfoEcP36&h(Clm z&oSbYRzS3hh6A{?s(dU`@Oa~$@JZB%s=Oh%Af{$6OZ3Y-K#BW7u*w`1`aoEu#iXtz zwO5*8Jkw=9J|~jwaRSA@+R5H|S@xgLMhGh;KNB0iLWW;h-)^z2hVp{UmqYx&o9;;a zWQYiI&g|;yYK#0DNbnQsqdfL{JF$(r>1$)AkC^Np`s?l_Jq>CKjp_o`rQIXj=?Y`jx@f0lCI3>88xbI>cPA*!a=r{ zIMe)oC=J$A#?3xUtiE@b$YC_wzksoamqOi}(sDwL&VT=p`}RM~?=3s&jNxx?BmMt! z8<8~-5Yr=FKv956b~b3j$m3txIh_>z*=+))0xO$PQV%5IFHI!)cd&tSxILOB4nu#p z##Vcw?CXvDQ(?t#LkS0v$mjHwQ5u!CGBR_wUuXaP@%_4c!UI9#MNn02HRA3F!yP^( z%kGk9bDPbKY^fIaHL9Xoy;c-kDj`Yvq>^jODKW3$S8D`LUrQKaF_r7z9S=GZYT-iH!0jK#7M(hJ+#~vhf%ZHvA;)Q z&+N)Li<^@PN*H;Yn=xfq=bQ;+hn*I_Gk_$aKcD|nF98)e-!KOk0pALUbv1JpaZi$7 zyRkBw$%_T@!e7ZeeB3cXR;Tw+tRB&%4KJT*nwvP)Og2v?E1roaRvHU>Xusl#oAK{| zZTIm*NHrJfccY$zCO)~+v~b8{W9h?kY2C7n z_KVg$#SAn-KUroCAk>-NTWnI7EfXQwcnt=4eqQRH;s52X1JW?oCF+W#nnu^vCiQ#S%|M%{8 zxGHJ^i5LWAFx|lolou%e>t9T8RUmG^dtx=H&HT? zXMty(XWcl>&NvNCM;MhbI=BMgox7gHnu!~~y2cuu-q*8rSGf<*HgUwRKTyEB>T$`AIJ;2WdSMv%6bb|d85CRyeUwvq>rJzu4~X2evPqu zx>C25PE{5O`fbEfw8INEh>_pKorFxt7$k{|ELaTtP`boe%~WD?<|3_#{!1-eF_XzU))+zUfvQxlY>!H`H8EvCG^0dx<)Pv`&s-yqD;H8Gq!t)zxg1Ff#k zQo^K(nv;)CIcEV!6jm@9S&iTmP=#94qMv6 zMNbDqq>h@Estpe9rSxc#r$Td+=Uo~y>0sN#uCj&W;gyBseOub%5}1-;D1K$>&HSZ; zIiGPCjLu#fs%ql4-ljR7Q|&PYOc;-abHC|oDFiH{jxo*lF=w5Kn(4o;7?LOBf8WC; zDEol%m86NARy%wiLne$&kz_7#)K9`uo2 z+eENwaI&$!Si*S0%fm~;ipuR{6l#ZIN>Q0sV8(&tp_@j9R6^=&snC0624Tu%mt#rYHfLQz_vd1$^Y11a$P! zJir!3#=<}g?5o%l=4BR`X|J+>ahV6_l4NYGpZjz2NL93CIU}l2+!fy?Oq~cS`sDkj zWqeZzgTZf=sPZNkP_8BRiu`&*II?aLy~DwqnW%Hd*28~R{tWs`I7;|8^b}QiQX~sV z4t2`%{6?EL$rF^~%0HEMn==_pg(K6QNC86K@Zaju?W2~Zq86K>z7~f}XGrbJOBfLE z176TXh}wLR{%&T&UR05yV64`sH6YdrpKW+5i&nJpscOs?k~fj{#LN^8-)4=yy^V$C zq@6hG$v2SUTa|5p@q`p_l}8q(((@&@!NG>iuI`7uDT+SiI6fpDgkcnxNl7h24*(I4 z#PaZxa?3%sR&c8L2c?5-_A%$G?aBWw$;j8}EBzFYow{yhIl;7Z%+=A&VdllL5B?3- zpg;7}ky2#G|K=Gz(?)|`buHYcEG!FUPX303wV!yIDrSzgyQ_{|bwyLMTiX7v#|x+J zn8^~#5Da3f*9?MHRWaR4S}>zs6FwJyWCo! zzZ;ouaSD^Mx~QKCy;XcN4^Whzk@V3qDi54-pt`4`elagmpKsUBE@|KGMF(Uj;g+H& zl*tJgQouhA{bQ>=Ws~ybgloYm*(p}zMp3^-p*#bmCp^JS$r_fvs(1%qCTr?~f+rGE z<5x(U6DtVNC}MMv z_<&g+9r7FyB=;QylfbbuZzy_T27L+QaElK77#r(SWM_Wi{*W2c!2f$RL?s)ll6Sa^ z+PBY**f^`C&rw`e!qv}L?`y9nUYgkJb^AgHvs-z$DAq)hH8cLQRUIQJ^^!Oq&xXot zA{6=@!H?>Hf|BXQ2Gr8`GHWQ}s&BD2_tM(02?E?0eWl)3MS|-xCyMsPXcLxUsyGF0Q%x*|x>a$RV=Q6Qp$R$kpuUGH^bT0ZWJhhUzanNsr_Y z+-T02ycoZR{t+-IklaixXU*B_(p-P>u4(tBC%G0wn9{b+ye;oIsULyCWQb$L(38ZZ zl&LOTzyS)zO~uGz&&8zGqSWvUJdKcyPZU&1miKMhzq56!_~gvFtJCd1QOH*f zjr@WbtmNiK96%9|>l45Av*H3vs=nrlylJvAsTm{G%Baf9J6CL@oRQ!=WLP&gNn1uC z?6pvs1IB@j^>0`4IH_gxF@I5E8eJOrfo@V$`5ZJ$6p3TWcY1ygBzc>QCWcw*K#2}n z!RQucJGsN9X{5N5m7@ntqHpAfzLQNytb2k(4aYKM08oV-(}=k=hL-C-onGWDnZSdB zi34u*(Y0@8b4G#nGxS8D5kajFC-SbB>z9mCAo}Pp*QDc?{IY)b=eVH7KeC&w!*!k&zl7tjf~dOjc*! zC2ISl3&moKm8{N45)gT3i2JIAI)9R#gRbpt0tNbXbjQa9Auugb(wJ(MCTNzJ31^^()LF0dp42Qf$%SpI~3OF_07U zC2ger?x*>-VX&44;=jC+=hYJ>Jq?RLc#V1#L(qg$ABqrH7gEA*DlSy0b@mw>E1EL0 z4QJok2q^!cJ)Id-B%-FD>G6{vDhC!X+#<$uZld~fa#X12#?VT-{?vB{FBptvI4EUo z9HZA}JWemW2@0P&2b?uC`um7KT!7C&GXL;hl}G68#)dS9xM2jnNI^gbA^E=%^sa1l zTi(HWRN(%kPdI5>|0c`0K`DrQo3iHe-ySt+YTqriUS^LNv@G;4?SB-aZ@0m@?lDh&W z<&tRlo$l|i0sBhT-nNq~6fl9=jv;x%7OsNSk zzk*kCS*cvd)z!5*Cn1dpkrd_|sh$j91WuhO+#>A!AO$wOj*F9G6A&YpC@h)S%S_ev zlf|@&IlB`@LTlDU{ULKTXfECI``Sd1Y80J0RbG*xJ}?-g*&K5E703Z2Ji~ZGJgO{v zNIcx5f2nPP-76M_6C*J4q*n5iQ#eJMSq0w&*sFW&|GG4p&fNH}%rXai7@f?ZS4|P^ z%q$bNVJy$a?$K?=zxiIAQK!ezoZ?cNF|Lf*CVlRVGFCAz?Zj8C?ciH&t0DSpoEoMG z5Cwra^MdDksAnFe38WH_HSuou;gUd*Zj4Y0A1&m$X)#VomqIarEMz$QRjq;MQ;F_| zXx44;huJw8JvPSH?^GEB=r%1iU25rE6A0C5POXjYQV?pT*R_eFkYr3wTGmZGwmpZt z*35TiN-ggMAJw1awljHOuw0@!8(gCRS%v@HV47A_(S*Y~4Wx;p4Q{)MRGtYaRwf}_ zAcU|D)zwzY)X=sXzLMJ;GW5E$)y9I`%q{qEQ{>av;x>ZJUC1;$j=Rb9MsZcQx?^sp zE6ae1VPWR2@8M$XADL_DFKA5Ls`P=m>MEtr8CG`&Ck2onF}sdtk7tOqVZx>46QU6L@C|f(HrX2 zT__h#p*TY1?`J-mpULk|$tFuM_z4j=WV|I_kz*b4X_8?~3EC>ety));s^-`8D=K+R zW~tvhIie`_lRphiF9oDf=r$CB+FbCGFU!&f-PNzlfS5y&Qi|BZb6TjX`QCKD6*y*w zy8#dwlaS)={&;MQgLyW#48tQArCPo9abcceGdMx+L3$RpWR zRO@jnD{8y!?1nXq0yqA&Z-N!cUpmz?neWL1$GZ3$e6D&YMx=&Zkf4G3iKe(9mfiVRuRa>f$?48xhtAGWy zQEj0Yt}c?I|J&dNiRVuN3lYHV$6t083}nfnB7wSMqOl+ASZ zmeA~#wY*|8A8f)QdtY#YeDlHzPj|^g@Pq551!V!EQj{Bl_|3PhH)! z_JBuK!^|W^0xbV*LVJNtK?}{plC(_d%EF3qFI@OP{Qt4#H?a!>x8@9 zHxGUZ-Qqxg_(J`Yg?N6T{8c3|SAm85gbFOSXSy&i7TBnmXS#5SeG@6}o6*GLQL6UN zQkswW^}!vey_;Xm-hZiawJq^k4XVI#ktabP^G_kB&AdgB^}-?Mjkoxp(&};qDS~T~ zFMa936<{}jl%*ZSyiM4Uvcxv@8alg>ll@(1HgE;M2`5a&EdgS-z`SjBrtoA?{Q=k@ zyK9a;FNpSP!SZ$VppXEJV)@KA;t@<;YA~rWN?pk@VLw%R@T~3($YNJ_L172NmhBJkECm7i|dfCKC z>h14Z#FjEIHcsq%AY;bo!hx=GayY)9fuKV`2dcZk#N{{>wXOA{Y@_fqDdOd3XV9w5o&R;5X{A8!|1kV4Y zbxV)J-7S-n98M(y;rBFWkk9v4$D1nSd3p32RvZPtd zoIKdL<|b0n%q-duHvKGFQKz z8)CsKO8*N z_B=}m?hqje=3wz}>IPIIPAW?VmZbu#r31@-sBX(LemJ-{j*4g~-RBm4463E5fA>yeUmElK#C}cI&`GV zl!Gw&+U||igDH9HHXr4lSVONm*qlGAd-56(J6BZ$lYqeFpRoAz-_Pm>$|Fx$O9m{Y z1LqTeczn;}Z^nK}eq1+QTuNeztVbP5a^pe~%sV_fVtI+`k3 zS3L6!y>vk>rTe>AA(nZDd<>0gR@6;ZN(R7*1hOQHafgXfKO-OKWl+^J*t?N1xJ_PO z{GoWS7&i5L(0k~DQ~(Gl09xx(2u8l2Ff7z=L3v4Z>K>@;R~6!V*S^%)ud_9_5>S3a9HF1Arny=9o`I7Z7Dj$b^N8PB(0 z1nJ*bMhWDe-5ZoteE&T>rj!^V6bkV9!LcvenC6Pcf3p)&p_AqW{D0=p*r~i3$g8KS zdtQ0aE;Z`lQ}N>8s8;!6@RBO*f^?IOcH=#;`V0PU zg`d^N%~czpkJXyzz$9))5O~rKng6{%9UJF{Es`{Lw~v)@@;t2AkEs)0*yc77Q!84w zKDT4;+(I;^)Rgd(`_20c$aNu%|3nh!eUn-oJ`#tB?}o(>AICr%_n{hZ73_c^nPu+C zww8Z&RF%?+`}6%h?CrTeO5DvDxwDbB|o@AQmG&hmtN`dJG~T@Tr;97K8HZVgCM zTqj`4QmE4ts?)n8wm#;6>JXLf>U$1HQCF1JkObH^Q`-juo6SihQJyedC8Ks;eqE9L zy88C(sz>juN51jujzS5)!>o5F?{w`aIbsaa2DVO%NW|^;0eOyJ8h@>h5j6{MURsG} zvV}@R$6SsZa36n0Lc*TCrc(cK*G!9O4QGp?Cc}%Si__ft zbsh*9vB(_bDBxh2j$nOmAg9Cvr1&w=+MFy3S8V3o%y8qTyy3z zvmGksWm?ScO6Xe5*0pedCmZ$MzAFj?@GlgGj&*t}_+Bh_vS?l`*!a~Qj#TQL`I;tn zvK+NIkkCo$5nc@rY?#V4(=f)DYpSKwkjyMEH@}^@HUB8{XJ|mMk8FHzJ7>9p$pjC$ zT7?_d;Rl~AE4k^Eh3wT!xT$Jm+F4=WeYf&ssgK{_x1m1%D_m_!x_0L^TfD!2s%&?7^HJhDvbWexvohO3AaSK+ zRn&waF}VaRv&%uhKEqr1Hv_d3N+KR){^@TQg31u3ms|tlSHnM4qMM#;u@w zmTA!&dGJq$7sal0xj#$wiVfR|hnpuZIz?n!E9V|{NB`ukb^a}W8`Ox>JGnChRxU{! z_b?jwIu|o}mNKDr0(Ng_W7(Nmwu2{QLW#pdi5c%|<#9V$$;j9@DUf=j8@GESrp!Nc z4q#ccZ_1sY;p0NKKDnv$gKU|Xl_T7vLfxZC9ffZ2z2^C3U*O}1UaBY`JKxFA*ao82 zrw!fM`7zXM55L$295t+LBA#FZ&AM&4^H#(gWHyxbmVjTyvOu+rRS<0hx0_}gf!<&4 z-Zm|MaM2o8mWB4FxB(?ycm^ z^IXkhSY4_fusRjA-Eto6tK~&qx*j}>*|)xG?X=d@o}z7;sM=ScYB?y{%Js|HZ=X-! zO0fcIuZ7PNK=3X{7H41(y58TA-m-`9ZlZ$7klC3{H~~1&Y~2Q$0CC6cVArh&=2LdG z=qy&D@?}m+J~b*-!DHm{O_GgZ^wzQna_(?eR{23XM%Y%RlHr z1^uv}S1!wRO=jaNg-$*?HFq2a7Z(-X5Y$P6!!X_{b%9eMG`I{ zMY|nVlC=1|lUF+g$&ZM#-N-T}V@0)r(rAesB|0LzeDr{8DKrj-yx=1D;R-h9hVscz zkTQEZeB}MLDM??fO5u-^>{?$zRd@es-qOY`2IK{yu1>P2j>rLqjEXyTL2FKC6ywOv z9sZ^zR*vJ0uQvmRHv@Ohjcm9lk;69<9qrilJYmO?2QS1n6-u7!1>W=SHv_Pq#kEtv-gFZJk+JrA^(;w&mB@5KFztk2U| zGkxaIPHe*Zl!b?8q0-MJiWOP3L|2zgEI8wZ1b>0}U2#d_39%+y-NN;0T+F<*X7+x@^!=Tle=;?vL27 z*pxkhI0aO9Lh%)n`bUo8Ar=O&Ku|UG7rMybbF_hnR=B$r%oy^BbdPAo*JK~~fmni< zW<}uh6f@5D!MDtlrfTKf1hGjqc}g*Qv<>y;i4d~cTA@n3mU86uJ6X zMf*HG;t%8Yc|Hu~3w8mK4<2E?u1aHTLg&}EcUqlD9Wy*jr&T~G=^r2LN%1CQk7YS| z26&+8i`;Lw?!|0R(OZEZJGZyT`1?y7Le9YCJD>AhK4rsW$OiTF#wWJLJ8;cxbHk!M z?Dckh4?bJ=wJ_UHWneh9<@LGaTz*cv&8pcv+zm*sCFP0?El?O9F&>VN)_q&_0&`Y?CM; z_)PJA##Jb|19#v6s~7$mduV|?=-|QlM~)!o;DJJni;Hmk3swET!e8bG&Xe59sndJL zlg!D#6D`E2Q(3f3?J&1TEX%gzO~k1ONKK*1{S3kS_b}8{ztxSiqU056^?iY@cGkX5 zCX31{Nu{Os+$j&nTC$?1(CLg^ud-r5teN1N`sn+`8P!%_pV=ExCS<@a&#lYXI`pf~+b z-pix^;=Pnq&TF&*Xr@y~IlM-z(I=~!62;I@(2QD!-iHlHV>^BNoTDs3@H2QR=@hl? z)Zw(FQ1EZ57yW;;UsmSt%$29ganI;5w$<~8Qba!;NcXR(pMSvLV)G7aLFayF(+ z@+=paBSJyI5zs?rYCh z$dH)cXotlwvIL{9i|3=|pkOD3rO(UHuJ1<)p9 z;z@0$;Z>lwvLmnf_Q%ulb{o&w*Q>kYC2emVkRw`6cWOIR zn^t_JkkoMUiG~#abz(B%_fpAWE)eyj`Y39mF8D|0H$l$2p3I&+EqvFfJV*5&9;b8W zD=kWPNfvID=#RMsOakoR=s~4HZa z0)9oR`g@?^Vo^lvOl?fzK=253+Rdl0q zq%fXzcp;<4U@+921mOdU8Zb6*fiE&FsH3f)a#JFODCUz(y6Fn~s zSnO=fSR9k5ViEC@v(w&@1G7%I%u_qrpA?7V@Dhu~#NWl{r-ZC&eq3DBbTLKIW2043 z0snIv|7sw@w&ygiS@m@*(>IbY^Z&b#6~Z@O**v zmUV!}4U5}2oti#nn%oMG07Fi7u8_F4B&Vd6=t*EEg^15Y4XCxWa8NA0J)X^V z;$CP*)!427ZL<*Nm1^}Cr-mB9Fz-b z${Yyk|1~}ru}Cp1i~x0G!(4?&1d(h>JXJkLjWzfjSxx>8aPu8*VRQ^-N*FCpg&l-P zU3_ZQ@;?{HeXkd?YI7Pb6kC1vKRgUFp7U4x1#gwO4{{F1JKbm!G$K@s*_dKiM{Pcw zcGydm(({;hJ)zEHEWS4mns&x0Xh;oy&HH*Z;&E3_dxS7XoCZ`X>!2tfDXuKo<_Vx8@~&SFZd{8pup9%^}*h z>p~plkf}r4X#_yT!;NtB+!15R)twn?j4PNR;(m#3RScm&1B4~5K_zd5MNV+l!uT4z zO)yc{OT57gH8Nxx+G!=y5)9wIC6&e^U&({gx@ho6iFQWSzjc%sv>@2mP8L>|Eb3fz zJ^VZ=wdUie`y&@5(%|>;qGc_clWxLQXb$+i%Q&qgv^GW7${IFoI3$oO zk((hztsSR%9LuI4WIQR>y{V1AD}dA;}jOg9^g4tuubNH9nBD_|c#f!3eju6J zp#FdQPXGsqD7Dl#`Z08eF*}Sw^qfcu%2@lrky4j2a#+c+t$F5ndw% znb&T*V$=xVM)RnSFWAI_`WLQpc>L(h9|=1C2{SqCuhq65JAu|6jVrdOU#oCvHGqRU)#L1qf%KH&*}}MMWi@Wj!s?~J z{h{q_iBGT|)st#f^1NI) z`Dx6h|7LPF(ph*+ZF@BalSX45e`eON@8DLdk)?gGX5vQ)v2p)R0%uK#mi)Y{V!2u@osf%#v+(e{Ai7S)GJnp5X;^6(u=` zu=e5(;?L53Pp|5&T3VBDqA88{b|1mR@n;vdY8UFMCllfyh*fU8%-2gM#|{Q-aIqe}mKJt&Xi~LNFHGMKJ21iHzn=zkBWeN0WVrGuV$G1>5E+*_Q=?u}l zpL{s}dgEmeD9Ec8lz=%n<{BUQ(^a$eu9jquce5Qa^w$p8Yrlbu#Q4MzHrSpBJdSYsQR#*IF03IBwY1w0S=pau)) zMC_smKE)M@mBO?+8FG;?7PtrsqU>T2xE2}QG^Px#RcBI9EzvDmCF(#=MzgH~w>WjZ_Yv0uUg)#l63noZD(MSU z4Fz(K?j&K?^hs7h&6S^?6M=Q8Dt6=#Liz^dm&MCts0Qsu*eT+`_s2(87(_%|qK8)# z1#@W*wAD}Kh`ljer2b#4XX@4{*pp$%V`R6l zWD9eClA4$^%3&iPV}c_5|8{S{Ix;2Z`7d^hQ=|z+TpN-^V38>)6URH396o`wk3$mP zcBwiZ3)jG?CPEIlR=toONM_5D`$Y4|icpAH;iV-Px@n~CE~WQwr9Z@?+N!#kqoSj< zv4qI;-19=OwhK;?I&?+(y!gxzeL3+3N+j`sjL$nP=&*0Pk zs-(&A%odi3DZGD#M>E4KUh!T;c7@MSy@S>%nx?tX-y>Wxlb;5A`VVm6hS)42dLe2P zDa0rUonCJGe5u?=02o)TYLY+20opL+7n_D|VhH%B^%uT5#3yXzWFfTv%uc4tHc~9) zD?v%7_|3H5Zm5}<0}9g!lSN$C~WE?1sr}e)w@yTPFW`isj)92TZc4 zqKOvTP-035uXnx4u=uEnhkQ&70;AX=tR0^+n3s|R+}74S#N*5{ z(7Q8cFoEp7|6j@D1eR~dcU>V^n|T`^lhV^yG_~dgp6y(y?_T;s6gKO!b&VQzmhw8L z$6#-Ru=IP>yVqpDju2iW+`k>Wkaq+@MNG6*)1=gpo=Xa3H{Wgwz!L0H5a#$3Wc(y+ ztb5O)tNN+B^X`n{37-=%^Eg+&@Stt{D(Qf>K@NIC0r1K)mJ(!gz;jz;dtL75N=~JtCu;;eA=(V{$Ls03qY& z^stB-LE$1rd{^$kOm+kx1&7ooz%`t8UCw9jk`Ou-`E=PCEA^PmzX@CxUlTFY%)S2XO&#@1A>DhilH)MW zO~{-4+E?+C4gx0e+f=OZ!)DMg@9jab8qqx#)uZJLAg#u5!Ej+(`Pzy}$%_;JIq+AF zb?b5Z>*>DAe}pPq@cegPAIM2{uD+HOtBW6tN5ADDH6ZfAK_uNr60jXj!n4G;IBgi$ zi+gwwTeH<3XMXAQ@bZ=LFnjCG+qUs6?J3{QZqTI012W8VOcS$e$$IsRY2V*+8(l9@ zBvh;1i}^y0yW`?N$zudl|l=-@exB)6m@`)GzPR=_zx%?Vl6dolO^=8f6vT$Gw-3T{(f0 zgcBkZ&hI&cK`Q+{`f$-889d6jA9U}Hx*4BmVz3XZOP=3aOPTtO-h)F~uq5CMzK&?_ zEPR1?E0|P25AY{kSyeICZ3PjYBSmM_8~{|X-qn-pm$`eJtFt3I%C#;oVSJ;xSR&Sf zd2`5jh9JRoa=%-3GDu4KWSG3@WvgSzqH;>&mYC%Ilev%VR1RKU@=V%)Z1)#Pzc(5y z@mssOVyR*$z8zhQBAvWb?&QKny#LF0kAuD&NdzoXpRmb=bL9Xos)yHUz8mVlKpYs> zC3R9^&kTO_?DDY2*B`eHUH>h?F}r`V_L1N4{lnv34rlszWAFaSOYcf?taFckMN;v< z627O;ZvsZ|HGF=C&-9&V;(HfD+934u0fr#>mROiE@w(E*3*;U+>N%E55xNV2x>Y>)*`yc z@#?pLY2P-m}>scn}?8N z#iXJC5;*xfo&~Q~^CdA)Rk@rvQvs#GYVaelyf=Afc1~8->&MW(pz!ZTb`L*1lm_x` z%OrpqS>axP{66o=J?nahMQm#kHSV72PNrNR0U$J!P;r(+*X$;Y8@nr=)ZeaxJJQ|C zV<+6B>-o}Fa8y>r4VWIH+U1o#Dl`cVrWm1YljurM&@w}bK|p*b-s)m~WgguG=yiK5 zP@YoyJZf@%7it(nRM+*MN%;ZLq1l!aM-e=`4|$@ru5CS#sy9b_9TZodq#3yiofO>7 zLKtNqL8jFzpM7oCSjG*D^WMBa7`W4 z?Wu{Q)xN$qe=0B|3J^d5a!KJ{I1>+PvtGx5ca5s563v$fw&N{-ME<%!@^kV0t+}2F zGw*q_UggbB;{+Y|nHke#YM&1-JHKeZdU0<@V&hP!WWnHEkA%%PVaTfjaIIF=*pH;%0P6?Uxp-s6eG2TwILO@ z#Af!~^pG?@eSs5FTvWrn#-C=H>yJuMWb5kjf$nh55@Lnc(D`=c9!wM^UcW%)@}6qD ztPk=uz$P0ZF<2RHfr~RoIRqT8c?w1^Gi7X~O2} z7!+l+nt2UaKh&xUJP1qD%AFb9%w!a!#26~PGr9NWan#;#lFx&xX1OG#u|6MA%rg+4 zS0ydaa^s+2}kT%UIhBsp)Ji%3$LVi?ZD z0>n0+zmGDWsCLBs(~Y=*zH@m?1)3AV3b^DhN5xWk>N!F+)w4>;QhD0BrFjR5C*6V@ z#_3G;)1Zk*i1a}V)pK%#71Mcm;t1MzceZNM5h!Wi!oSZVI%>8VXrLh_PdbaL`o5is|@lXN|c*+TmM z^m}dud#*R%W0g+~!)E`pb9C(KFnh2{P_mEGja{68afaF9O?0ep5y~0Zc{%P@07yvP z`+liJ*e=JbB_gd)bx_tNp;_4Q5Mwm#7WDD8MqcosqWA+?-oNSCQHM~8mdh^gpRN_D z%ojyO z=ZUwds@N^TA&G5+T_3fUIq9bgE7G};514fH6{O&cIHgjC?`ydcN1E(;PO0(bi47;o z9%|ASGI5O!(lR^+ansyXCkE}Qf9-wfY!$Y~%jJHw4f;|!eHI}&;uWeBPX=aPX}ozJ zd9&Y((5mW6&CP%==$Z{=RI!w7R3(6qH~dM{Oj64W^h}Y23DY1dQiGEPCkjNIsVta) zebpWg(9O-K6Wy8t8>v>H$tIs2+vsMy2s{7ufv;dfXXYy&f^O-f>M=@XUd zQ%iDBi^j?XUkmsYL-I=m`A{Y9jGuMoCQ)wmQYWYR8OHj*qE0pG=jx;cI@4uHAvjW& zd$BHl4ONk?SJLNtRFH+`1xtZ$YD4nRBtPV36mNdV`97mmPw_dTKmm1{ASs-}5sjWu z>vWpAxqLmH0S5n}j%=m&-?K6m%1+Nd1voW<@2}@Gg=s4&57-||(`-3Jq|85wOe~w{ zu53#GO6p@MS7$tKrw$sGa*LV!7e@R?rRwvwr4VI^#urOwQQp?e88&gh$)btKqX*LJ#p3M{3mXs+HVv z=oA{5-^QqRs7y%><&n5cjzLo7n-msB*e8qzxFdxJB9>G~vPKzJ-mVqFEN>j|RGnR* zKeNXY)bI9iH$ESESFO3L<1kb86m$(Nk^PbYG>2OPdDS(@HDZDH7$xoL_3GN=*_ZC| zzGcYv8Q1K^n}JF`Ov4M>yN4b8N z4Z?JX(!^-*^cTDmpFguz+MYBvtO-HBe1c_NB>o-Z5t!7zC3xE zZ3Z(66nisIPU9keh2r~p2-Qpd6Ln|x4eqp$VMRwbi#EUxq8(UJ3pTW~9li_uxSseo z;qzZ1rDvuRfYD4O=NO*xo#6Wof+O90l*`zMEUDKv=VR5@&Gdv9iRsRf6c>h--%`(6 z<&usBI(nNlUJJjBlL=%lC)N=apT!)ms+7yISj=rmE(5|t!rFaI#JrR6{bBVT9EmeA>nsYYf%(^KI+oeCP2TMsgk1is{zYB z+}7blCOvGeVikgCOU`Gw-uy1~@Hx!*PL987Vs8aFfnpZhBTXMPMG^a3tXcTUL1t5l zSKHRQJNWxZQ(wV~)pAl4vZGJu1#IIQLHw((lFchHR!Q_e4JG;!q$2BvL~vs{%%eE& zT(no$pWd8Hk-_&I6Wyne(H`K!u~~F)h4dN`lN%(J5=(>A}(2 zL3za)<;Vcku1*fpK!S(I)r~KJueksGHG__JIp{tP>-TtJr$xgYhPvYZW7jLTu||T@FFPxtYEE zq8JT&WpS=vv!wHh)+=V7`C_CiCLu(S)_IBF9?g_FwRFgjWIq){)>cb`R6;tu4Xh{% zAg3x9hjG!Yi_&Dyp0pyy!%@oIBEalxhGh(fjlE%+aEUAT+5wj#mg{3iC2t=tr8-f! zo$;5-^V!QeF)-vrAZtP)ldPSqfccEKgc<9@%^ykmM~O8=y%lYinE4Prbd+3u$(lr& zZ3P7zZ^N^0c5Q7e{<-iRVvHipFJ6_L|N0PK4K4Lla}=bPQq@a51)Nnhoq?>6+L8s% zjYVM#@M$?K^kg^9MNwes*EwQsN!zRLx9^}@xxxxc^|kX7#r(X-%oU=b0j{iLodTbl zQB$*uJkVS@ckQqG3e(a_P-3y#8q2cU=L)1ZCY{-j8JB*MEYMSK-Wy8qOTKNN4&w?q z+PWq|-L=+zpSH%bvh$}RfWk!g*NV|fOl{w5R{heJivqVzs33D}L&a0-Z{Hu` zs4lzAb>cz(aQke^+O4jQCv16vD4+6_Be`K=7Wd`cB#IYWxLYIL|G1z^VowRw{doS8 zcar&c;KP)&-Ivo4i?&nhScKw}Rda}~UHbLAkGOV1(Q}BTb2l1Xmq2PkI5|W0Tpbmv z-$UX+${L!@v$U5ztnN6UGp^;z+-xxY6l)F5hadxT8VO_k{R2%>Mu)}B%*`$YqEsdo zke%gQ$4TzTeJ$0Xju=beCdpizs&^gSAgBD94Z|TtXSHh_B#RlsJq7z+=`lxV1@<@H zykDhcfR66BE|4ImIKVVCQGdmOeKWyH^yr%~u2cvui>zT9NZF<^Z_k%F7BbUjp$kO& zo%p9mGPs<9qdyzDR#fyS)Fh2`_72%n?cmJS=-DX^s2SkZhrf*_N*xl`bydvoMV+jv+q_pi5=x6ZoM~D$+fN?eO0F^6+`CQ5bxhfT zoHog2E5mPbZP@^02_)kAPjf}`Ctkj)@lSQ@74PC;yZ6+D_l?bwxe^XPR=(3^nb$X9 z=xQJ}JS4ox!~uf(rO|ZY@T7UeP^=mu_Mh74iNhJ zs^5yz-u@ab!SkM)^gbyeGB-H*$7{x4pYWb}Ak9cT(1d+gn+CT*))bd1ug`m`zIo*C ztJO+9FLQ37M|tr6EwZ&h5>0EMwTkj;=DcYhP6*zwHA+BVzfRAUdX?%mwdyKhcAiUs z>niYcxc-#VvC(t-eVE8ejr1dit+pp;f8h_g_yR-Pn^em!l|CUYTz{njq2>3@pAm01 z?MAiKdE*MaosV>!Ms>B@IcpfVDpWaT3nH4-T8EOn%IKdDT?s4b4^<>5b0nN;J&%+X zozL?2e&hi!+Q^N2F>J^*>k?d9ax8g~mU%|zaXNUYZZ!&Vd7Eqwgj_iHN)zm*G#U~e zgAsk*372HbxO}3cYEm{T5#CE9ByytO2C9LkM{o@ZQL3#ef7tOCeV4p({)6(1k>1&I17*B327CdPnqQRHC`!d~li)yfin zdg2|KmQloncCUCH6Wc(@^QU(8yyr9)G!xUjHWC0S%6)|o8*t8Ae!#W#gEzVRk3 zn@m9F;f|uFHut%)-Pxr7{SUEcT_pmBpHOH7g~ZV6XM!e$*Qj}HDeHag$S<{jC;Jv9 zKBTfz)&4_0kyz!nO5KXvx8yMgxtq2vKd@5g&Y6SoZ1WECl8PI@p4`$~H*f{9p#ZTz z0+k3~KF7Mz9L7%?Zg?Ke zFWlyQr%eqtjm+Au85i5`$=dNIxHQ3f^d=z2r#@}lCkQLQ%^>4oC0wVllgEuqCVN8==y}br!ph`0Nz@VP4(Cr2Nu@xp6gKJ6j3x zcTjO@J*5xc0Gr3^;W#Cd7&jpikS{q`GZ84dGSn)t!$ZxgVtTC*VLL6|sStUma-$uD zGhsR^N4{LG$wE^Y-uyQ?vwJVqdNqZYWoaZ4OK3^Eh31e!FhC8qbtF~Ts<*4yZs-v7 z{PTzy-O!M;vWhPBt~UB;4w4qBbs>10Pc+lqhE!5+6QYenS< z*}`+ju+QiOf{kqM?GU*GFIZ?5Fm(U*pk>P%Ps(DLn4h>eao=*gHL1EaJw6fIQC36x ziImd^rd2xJM_B&CV~d*w!PQ&FF6-2?Gobr9Eu~8dz2s< zyz+iqo|+ptp6YSvPhEo5fz~R5KPz?P8rn(rO@r%gb*SG!!&)^(8vHk$M_qbdouEN( zv&lNLV{uocCo9@-QVjoE@>c)eRgG%~@eh!Wrto9Fst)6j(x_E8;(b32eFO7ZMtl`F zb3lR&G=i~#&8?r~*nNwD_L!j^S~Uwt%k~=SIc+n43ocdmQUjx~dwYkr-A`{{-ALd@ zi~WB6`nMH(gzkjidg&y9=@)V#B^zn->#de- zkr5y6jC%@mkJHyeE7pq1y%xL~(v;KwtM`S2YyugtD`+Wt{Z}-Fx2)a~2WYbEMh_@6 zP;`vY;r>|?+(yhIxWb8)R^w$Uqm9#1_AbIkSuLXVK8tZruC)Nxk1+z;f zk}k4@Oc{ShTDA;eBaJm92|o~%Jz~x9JJ69OFlt4|)nnX4lx;Ft{(V3ui)G}2KBJtH zIe3Ly$ivzmen2UkW&D6R6P@DId&R?zR-V3suFN2N!e$dyLR`qib{)TKk7P&`g|ZUC zk2oWrQfRP@H*=cu&q&MH0+3Zr!8b1Lo&9ZrP#C~Q8g&4Cl%+M`Lzp>8ndrV^kxe#g zMa6CWdTT1%WZX(T1D8V9e??We$J!ooAeaK_zM?3cWc7|bK$7h=dO#aZ>rx5j*`7Z- zXHCFdnKJa`i^%DXa!L^k$vCJcCUq(5CE+`k3h~~zhaoN9ul|iGa}bjwnuN))e}=_J zA{|0`V9yAU%4hcuJKfQePUQEtINcGDGUxQ-IW-4k@=R@-@~ujQ@E_Q-kdo#1<~iN* zkY?ueqB*$*VZP?{t~j}6VUo{mI`VnRg+LF^I7oepde_~2;YsQDr~EN14yH0O)BYNw z@m*#2syXdTBGr<|Jo_Fa{S^H4_-+Yn$Vcb~u9h75zsUYSiK645d6)jr3-Esv{=b$9 zHowTf?E6>nTnzfHb=L^CL<)wq7kQa%tKG1em-Q@ksG1|+!$2ef5 zV@toL>i+ha_yz4T>2F z6M(AG1fY?q>BQMyS`U@#!fAt{GKEnX3l=j{u*Z4yPy6nlTgzeHlhn6&+Ekf-m7xSV+FM-vnQmwvRFII&P=##uEty63b5iTXJ3re;yL%O0SVyojFNo4Kkd&KrsQg+f& z;xjG{!W^+>otZ;2GOP>;%mic|ZG&_(_zigW^iod0!E>Y!8Wvu19-o3?>VR~0L##cy zloK$LV|uh<{jLulTT1`ZUtDLiK*D=59 zrZy@AO-?P%ouYlqJsEdaaey1WC=$WhLMA=|5V29b}HB+wT`+Ge0P zG!xFM-PAsA0agBHxwq9oBZxBnX+Oj#ZC}3U91EkY(nS4bBFp*Z6}ZD1{YIG8>ac%H z7PWdNHR#|L-tk4!7G3fUSPdRslHd9hjh7KeEzBITuH4RR^wtdqw zDbT9ld7o}nyBYHiSW$5`V`Cq0X=|RbKjxE<&}9g5zYr`xs9X$qVmW-wD<7-67$mFM)zgzRZjgMV0Wmb<^mCZ<>c!Tj-sh-XCL$_p)us>l&f zTz5M{x3;!AcoqaM`YNW2%GdtzbX9%R^4j0qZFtUQ;j*AY?Z~JjJVY*ig79Jwby>JnQIKfqo zRN#XNtqVtp!@!&LcA$$J&NC(3$c>Y3(=ssj5U`@QOC8%Z)ukQC!EOnZ-BZxpQC&2u zyEhD#ahy$`;&i8V(UyWqV|cW7D}*4@aCRly49hZ-`}r3GpX|~{_+i~8iQJrR+pE`| zk3AB3$lUo$zzswE!(F4z7`a|eJ&1`s@7&{6Aeuw`D_z>b9L8HGNRMUU;i0tB3ua*m zP=Kg6KOTDY#u_HNdlCV*poe>bb0u$E zu`rczNIMahW#Dq zWHiY|QW^N|DXli1X9VPCZw+sLk7)aWRq5@39a4jhjMGetky~E#J-u3K{y^HwlReR*NsA0B82O- z!QYjWB=2HE9CA+&71(LF+tA(9V{x+*p2^bl1*54#l7}8gy4t#RS=`2jI3Uf)?#abq z{g~S_KfpE5Gk${ix#yy``QtyJ~QcAVMHY#r?gz?)uyBW;-OJjGzh(2?==ZKYlEt^UJGo_oRl3F?x_gW#@=0rp&b6ual{ zA*HvYyf{^HuZw94@pJ8b^xe4jXHtde4z)?{o&*9f{Je!SA;DF>vE#kaHWz z8H~9N9O1`zA0%{pb;6oaTDLL5&o{TJXzRUzR+o|?OB5nyd}Fu^K;xVNB5RtZ== z<~DVt4axnM$c?3iCH&&ruY(@y4D7V$T#!jZa1q~-3CjF=K5{;Hrww^(@3#L2C!>QG zRu>SU+IRB1?E&Ch70Akv=U~@k^keYG$-C6+!rR!}oRLR#_bg&JyH>l<8*qfx>3Vd` zZRp4&w!0vqn_V09_t7Kuqx7zK7^2Bx+HJH$ zeLlHi1(?2^b6s?(x@W{R{qeiad5kTFTFKV=ypmq{{BUoNX)5r$t$7S>CR_M5es?9g z^IU#`NMTp)cU$uK=gT@#A>r$@KX_dQax=8j-SxQoEOLfvmU=z~9ePyWl@o(d!9iti z8M@yZ&XwH(rsi=&dOJkm!j#BOzis_(ojBm~GZG;^k=>IZFajc^>C|=0;|)amW{-F1 zQbiB%q7(xRT_cBwvR6)+rK9d}DZ5_}jec|!Y!yU#Z13Z|wu$=*KEXMm6E>w7Tyk^+5|zy)6^ z*fGYn((ktDF?qv#boOQGAP_vR3NaaKTkU#WG4@Y3I(*2VA#~R+2EUoM;^bx5cCNsJ zU#riqlenI1qATsiDf<~tCZ(Ic|FR&zK+J;7u7E#S660GkB=|E_`A62?MAFdFo0k@a zTq5cPsnfXu7E|@fprNCp3y2UT4N;Gys%1j}X|fFbGDKW_0g`~wBI=<{65Jx$UwaqV zaa|ymfuS+C?S2c>R@5W6v`+;W!Jq6>Mjmn90YbNmcJAC~-2u+$QTrX6ytApTL_H3; zs)_~q1gQF*+^$VH_(Vm|bH|zWY}u0(-j28UQU);d+=*0jUyEJn?K;|b#sMQ_S0?km zy`E~j7(x&sI6DqIN5f9-KMyZMgdt#3RY>CyvBie-P3!NAaky*mraIgUnz!&6+Z6BD z6ttk40F`iwA4v;*1DLl{-#Ibea27qnv4d4!aLp(gS`ptJ7lnAiRfR14530T~xbi1h zJKi`O+di?KY;4=M?VOFXF*Z&%wr$(CZQD2hdOzIvR-I2>Q@`%&nVRm?)BQZk*Ml`T z0DGKUpqsMi4-y8;?T6b&w5K%!9sDcqxi}8x13FQ?3je0WCGG3z!_(KqI-c7{1<$d# zrrz$ey$AFM{PFph02W+NXVuM}VV-Z{(F11t+X^_qp5XRT#gmf6zQUiQ8<*;IEwt>8 z^qczjqT+T^WK$Drb8(ZX=WJl%0ot5!|Dp(ZOE0!b4z+1uA69&|A@dO9@F>3N54hsq z*R|h9cnE>n6qV79ag84?Q}S#gwa@eCSjQ#yII4qF(PO){QrQd~_8#tDgYt&kl{IcF zZ5JJuE^9A}dy4eum|c^*{+@yW*u&gfscu>idvA2FZLSGkN1LU+kyWSJJN`Dio_?}TR)ELLC-x=@6Ism)iJ02 z3Kb7@`m*wC_;&n`Oo%I=N=t^a*e9gKB`8l@gm##3M8mb=g$KqXgMIwm+s0pd>frYA z9Gcg5`)Nl*Im0|U2M?lp0^s)H9IC+U%cHco+oX0dA-0JJZXZJV z@nr`w@xTe=SybHq5!=+|-_%C={`IW-Zk5=C==r7M84;Jve*JhI^hHS6{o_0S&c(Wi zjE<2om~T(qJtd$(AYL%4%QN zc>CfA=1YJ-+IrAB`TL@mN_3~WWykXP;nDjQBQU=3z;*=K*Uh`V6yE%R(wjy71YVO` z9KJ1)TzMrv+3)jNZmW9sej$kkd|xl?zuR$DH^+v(2fC%dg)vpTr*FJR6#E;wx0|Ay z-cXw){~2|ZV%F(Jb8DyUsZVqz4bE`!tv&_pJM+2tj{m|3ACc|)@a+Zv?!R~lS*MzK z;@q2h%l6A_nGLrW{?nA?-}-sJ9@ze-q9?uIzKBZEu7!_9-7Y ziW}TM1GNb&|N8YY!g_`*Pke=)$bs#t4BxK$@A@mS=$G%-F>gfsk?Q8$0+;=Ihq~QV^8EU>3G9K|jQiHJN7_>O<&EokRoZSG>t62fUjKb)mU#;` zw>*$M35(lZhj|vhbIWht4&23`N|T|(ZyE=gq3w4F?QH*<`6kH1{{i9o9cRB2mV)o> z^1m}zp;O0y&vo0W;>kgLWd?3v@$HVZlvlrn7g*1&;`X*U_ZXnRd+oRMwArlVS$p5N z>Xtxwa}R2h`@d}~OEL3#0KfH9@?;>o5(U4?`p-^T9p$a8xTmsFZ#YkTT#q8}*)Mw# zi@~BU;wz-YC+b^%mg~v;{I4z6>H8ue$(4QL)AtuxuO}bBz5bPixyev&77eX@#dPeJ zJc0L41zd~VO@TT9Pt}o!Vn!%T7*;4$L;I)lg6T~2Www#Va{PrjJ>y z)YPFjsRu?o#3&ztRh6N#lNp2V7u8i+;!svg16(i1cTR5@f^}cchy9{a+F8{2o5fMl zyYblu+cmN^tJ3WIf_@o+ei@2>*(HhI$*8o0sPT8}dqv;Z_lmKtITeq)TN+**8eS+G zUbh5*k79mrW(^h4Rx7yZ-5vci9#~M~(Dc0mm8P9X&0~>5^?6q!*l{y;Td=Z zcqjgnP~M>%tGX5{cR*Kb_WJ&aWPY!|eqWnL~$ILo#nB+Ah1f*}Ss%WYf!N07>NtOr2ihjoOvz^FlhkvIo14GY?|T!k1Y1{_mXL9=6L)szetL<&UeRP5QgOa)mz1=c`AZEgY{Cks~o_%zOpNcbTN z3N?z{nw)0|UUWiy!(%Dv3EsStIw+)@bymJ3I9@c|y}9=82Y4iJM{Ho98)i+uCY9MZ z2{!&NY*af>B`TEeOxkqhn5m9GMo1DZN5VR*Dj)6v&J=*cJnRMBZg8W)O}zw$!+?+7 zV+N3ifQwzJzjkMtn3XnB2E2P~ko%XK5=L%ZqT*wcLV;SdBLNs>eD2z=7*b_k6;-Ly zB$XIZ+5ctpWkG_2iwZ>J7&}ILe~(5%v(oi=I&6$fD$u7haYlhiaJ{(|U zt_;p1zRj{^VU?RWk&>H$cTU)0>WcU{c&M2f+2b`1`3mmKBj>RcrMdm^v<=7Xy}7yh zwcG5ZM12rgu@*rjTxH$)SDAdYNYt>@Q@6Q5ebDt-dnW6QK)gNLZOxFWbDxKFAyf4Y>IMs(fc}ZAQc|oWq$SMV_CyMzMGGMVh&ym=v zE>ioanME0zWZEdafZ0sm;lVVvnkHPtzc%ebg7r}%N1CeD_sJX#Gg9V9!`N7Cdb^d& zF3u{5S=r@3DUm?pnOkcX9CcW|b8`**m8Mw4L$)Xojg~sprV-BH5UyUPR)Ac^vz2{$ z&XExCy@2(wNJTu9{cC}ZY$i8v!a4UVAl{g`BC61qL;OM_-9HVMgrLFJJQ z_6$d2Uiv*b;`SL7H|pPQrt5()P%HGmn+K+y0ee8~*Bg}D(_=aC9yY{JAu-qRM`9@pvL8_jA z3}LfB)8vZe7sDz2ZU4zLA#jx3zj6iRcU$1qoO1~zp^wY$ZiS38Dy2{N*ANLM`s zWDK+HoT@H}6~wt#oum8?Z0KVtg6&S^-g*c6>}3uk zg5e33M4wmHC^fPih{-i|mOOi;i0nLWXd9m4xTlqPlVa-ic;$<-;4bj%9a_8<&{grp z+C5TbkNt0C!F(_#RA+Z`$`M(Q= zC(1g$o#jQ7X%VXBiRTS6=R1$9pxTw>&)9}W1S54p6|T>S{#LSi=xJJ`X^m}Gx6M|q zeTt|Tn~jCUPKF3k$t!7INz=*^=tyi@`jo(vA7sXsR&s|;#W2&Pe2aY?2NQDj-AA^!unR&}B=Z`PitY~`Pef%j-Um#ni( zdku1@>BNX+bl+>&N17`}b(Kdf_Z28*yY*`vS<{B%qvhtBbW#A`61 z`Lv*P(@ZT9fjG3h7GnT8s;T;eG2)Zv^sA!)K{fp2o}kyQ#`qbL>%26I&R9c31Z%q`xD~eDVOeEFuH3ULYx4&*P>jo(@&sWiBDkwyDquAX7+> zbiXPAZjmZSmUP zJyx}kB0Hkl7t)-v-36HJ&?(NjMVUbuUm7#qN4N*&qZAk0Hj3rGf;Bdba~zDw&R&~L zMP($|FXk3u3NIo)?+uf)CFX$-%EK$)ly~QLNVh`|a|d?NLGz+B>MttPEMg1XrxAK) zE4XYzKPEACiGy`PyRwr+8S#ROS-uu>JDJz|qn@}Spl0H3+mb}+s)JXm_g=TRTjw#Z zmqE@BW^F!&q_K6!2WFr1LL-B3o2u7eV;{)pRz6xTU2%uWx}$E>ZND73MT6y@gzc^* z%4^8-_}eyni1a{i#+tOUW>r{(d|d#ry|_GTRb1WwLCtGRUL#`p4nMiTrU34V$S}Pu zE6*_dj1u+TLjDf>W#(DDW3NRUaA z#zILF0fRD;r0@s1gh-5qXH1zOqZQQ7kfAp;U`92g@Ylf9k*dJGOav%d3^YcQ3ra+) z46IsVUX>f&Ucq%$KQAjw4S>~a+6S&LB&zc6F-=y!(+dS$En>r3J2##}m?+Gn zqZ}G>vKs7<>snn?MJ>XgzhoJuD1NBzmktL?4c|Z%jO4kZSU4lzGOfU-hf`A#(aK4; zH3%##Y@It@8N}b6@)6T*-$KF6S*PRR;y2jJ(rGu&*Ea&$7r3ogGi0NJS{{U?oW1$@ z1S_P@Hb-57zsj8IEwmecA39qvsL7Di%CeNRp&h%1dU+-;q(yA4@)pHlKD4xZQuVu_ zvnYsA9nT6?Xi@FoxGq@gRg9s}LPyu$x5fvmc$m_=#h3* zrcpVEw~-if2#b#S8=;;^tgg^?>~%4XtsJXvj#{i@2_0VT=+=rxb>09yN5Oawp@o;9 z&fqk>PL9L72wf*tfOrlqpiH&AN6Sni;#li1qcnSkqX-mF8h2wIxZ$175OTmMU z1+3?L=c=tt2e;?k-o&sdoK}T}at#44^qrFPBJS-sytD2Un@}aCMqel0@Mp3@f}KE| zZ{(bA=SsM&4a1tQFFm+dk$OgO6UFob%{Gw7t*wE;P&0d@d{;?FY#8xn<*eGASjNg2Tpl$8%tU6@>}HJO02w zXL>dXA;>_gQ47%~Si<+9c*HrUG`AP5U5tsbnY=kx@m@V+Qsb5L&>lwuHxdI;1yKo< zf2Cgz{AG?sl*@atElnevZz|`#c4|y?ekKu(bxWwRA|V}QYoq8vqw_-ZETrP^IwSt& z&G80VoaQaZLkqd*OFz>n%NcH9QEPy2`51k2m8y>T-yVyyePprw`lHH-4)YCLTZ5Uk z{d;%oV2&I0VK34J0zqBv3MTyQi)<&LhWB4jqh+U%#(JowJa?4NdRRJSnRbfO$}@Wc zA}?qmVG~S&Z$_3J-or%t7{~q&;=1L4F5q&I?>uJ9J$?|evu^9?^s#x#A`*CjfNFa5 z6-Tg$eP-j}>D|!aXJ3R-oWw_77LA^@t758?6Yh7Req*^VpVDhtSAu!iir1%11~rlv z7wYZ!Yaq}lQcZq(W&`yUb2LlQQG)7-`3G8{Y8UR=2>wm2=M(sfg#G5ij;nS<)!APu={{DDQSrI?TRUQxd#c~HT=w+S z_t!x7wuy1Zst%}MT8A31SW04&m^Lux-(#i%6WLvn`$^7sN?75Mp}-y@EAEIYcw~qr zU(ET3p^kFVy-<9lvleagybl@(`!BwFgVrZg=_c|zaS2(P!lb_r&|f<^aEF{qIJR1xsz+4n5_I6uuc+H#%b`a$%QfJ=L4EY3e^If&e4t>m`65 zrgx1ic}lp%5eL98f&&Ia_Nj_xRH=OQz~zXigEmS)g-X9*#Kd^G{-HBFvf(cmf*7m{0PPRDS3m{zd{SWv ztM2RF{b%v65-?6`pysjobXF!&DxYu2g5y5ItjwjgUT#sFYqI}5^{|*#{nf^6>zGsY zP9=>YQ~7@KSz>@G45L&J@G`Hu6lb zbhcLGsaS&)g;%)5`q+a9e8+BGwZZCSudP7J!(Xw()yd8 z4DFA=V*GS0O{}HqhSt}QlIqu&4+1lg8lUpUbBCkZ8V#RhL`ItlFty&AAP}2mbhFA*> zl;r9*JRm-O{Ex=bZgy-9p2J@&lVW#9T)MDLn@1}v)`ds)pxEa-7Ijj|v!*@)PLe)Z zNhF;S#{yRWwv|R%gx0QD5_R>7f4sP~NYS_0rI&6!bEV^GFL9@nHhI*xY8S}0ywyVR zsawoes}|6&4uZ1nSHVE&eDo^46i}0Z_y#rJ^_L=N^-h z>Wv=o+GoV*&gad_!B$g)iuVILvy{cA3H>w3VmCQ-mC>-pqg?M^Tv0vJ3 z?AlmVy2FazX(c7c=qwy>5`(|@MOQD(9kA%WrQIaFpznp|!j);VH+;%baJKwQ$Q#_e zL&%r&_Grd)c!Ew*jHshW`NlZ}J$a3&41wc7xIYP=Y!=_6l+c`3Yy07$X8Uy1MoCwB! zlNi+L06%*|h7>xM$cDO9nvGtOwFF+UtH!x79>*C#D5}B4{1&yOV}x?ij9TAVN*WKF z<27s>h}K`ckNmt0&3|Ol19X`K+6M2O(z3YJ&n{>ZoX_&G1C$^#dbxu@3^)f`b^fN{ zfSliDMS^g)ckWPie`09iv{~KliH5-#T!-vBrB*2awzlhi(O1;DlnE$ECDd6EB}1L0 zBoZjs1V`VE&{O=3sha8%W;rlg?*LZ0!QkSZUq-}q9sUXoY@pXKQiq!?dwO%fe^jA7 z!abolZ6-sKN8gT@oWJeV;v;5aUKp`}borRmXs9Cvf;TF?dI#?hkD`(m4il5_xJ^j; zlvceFp_sBS?TgXyO<x<(`)Qk zUFtLqXVNxZEv~)2cvDE-KeimUjr%aLZ<(iF9lW-Q#KZZiJ4sX2rp%(hKaguCZ)JX$ z2Ke?MoX&?BPtah+8KWG)2Hv@79yLd^%=`H*58O@z)@bCu!B6B5e&XN&jMuTrex%H2%hk?f*#e!Y8qSWrd{cc| z{rM}MUkHGw^VD!Fug_&PK})37qRm?xH+WhX=rMcoA1PiaxN9wWA22=;SRrSYR6YEs&F=$TnjlfgJ&D?FfmyVcK5MNX8WMr>0Ji3CH$L+BSUX=zYyr z(B4paAavsV0`f*Uoxn&Z9j>I?yJlGZ zm`gvHq*R^*Us1>A)o#HbD^O?kxj>?=@XTOfploVS3jB_rn95Ik^EKplv$dGLkRzt3 zm5!Q@Zp)?@+n2uP69~K5=oE!JR|x%G%`H);PD0A%l{`po8(`Y1-sO0oopQHo;jAh1 zLWV=YVh4&i9ZRXJ{a(!BK40NG#_&GeIm^JhORTxbug64*B}O~^;5(N_jcr%I&K{h5 zT$vtwCPMo`%jp0rC%9u&?jNZs!W>SrGf#c*AK-Vv5Ax!1+J;WL-O_5S)P39F%b8U`q03f3xbN36`RXH>4Bo1l@*ye&SsZCIO+QKa(E%wf_9(?#!K{l0-nNUpy z8cC>9ttKx<`rq`ViS(477U~sVPKr5|tK0qG z{=-@ic0wr=XG>a0GI5Ka>AC2beOo|0V6fPI3 zxu_XOxjVB~(e8L@nuJ3DYP%%-Ch1f`PX%#wjbxtV*qkG-4E5&SAlg+S(?A<-fk#X< zwce7)?gy7&oDdbU9v6lBAp3C+zs; z7kK&zz_cOGNv-FO%6(*CnJ9(5-6Q4%X(UV@aPN1t5E_gq12S;%IHKmTK!dz~bIPT5 z@W=3Y(LN7m3}U%GU;kiLA&$HNyMt#J+{rv&4N>>w_m!x`y!VPcUzfJdH&@ zFPSk$->L#K{fQl9{ixfnt$kq2$k(jnGf?XpSj6e~-PPFii)!X${0j8&iRjLoDthWb zkw01dMTg+P*%L1-b(m@dGtLiOmm-~5*(HK}hLLlCS62}pqX@Rpi=ap7LyO{Wn5*{= zrYDI&5ScHWnHz_4b3m~XUcRLI=(+pUO063@a(g7&5@l@ zn0zr6_Xy|N_QWC#*;$|qVvMTmwcevK#ySpPgiepl@o6vW=c>lHBV9*YBI7(z1WC%q8B0d9OI zNW965H4#SE6XI?7anAa2`uiITiv)_H7{NC)7L1{BFl8nc%Zf>NLB66 z4JocyG#)qV#N|BN-UcajJEf#;GgItKrOEz{(G||@jKCj>cMc+4gh(_CSPE(e3N1f{ zM@1d|Y&fk7`$8ag9j3-dfRk}qHlGL4bt|dZ%~$B+Lw%d6me2D|F6z{AKYWb97M(n2 z{|*d|7dzygI3YQ%z;LyIJN*MjO2>}vwYEWJRsPnS^AJ^Ia9kNUK%c|@oc()s<}|(h zjgPq>**_%Y86_v$ugs76mQ8(|0*JxB<&-6;+gAj{u=JWm66Qc+03{-H2_p7u$Y_Ol zSd!L{Kb15iXcAqY^Oa)yq)4Ly6P%Ux1|pVy%A-)cWj4J_i4z`*E$~~a{NY)EPzv)>~cw2`Z;+NGmC5{Ms zq~^$;Bdv!88R_?wfW*XbV*UIPV=avV)fJ33={SwDaBGF3wk*9;DV7;ozer7X|D}m3 zFE8RX>Y_9@1ld*?YU9pLcPKP;o6hW5nTR75{7^HcOriqKD1mT{M(KT#Vo;;7EyG5YWg(Y=D}?y-&;Y)9xj3eWa- z%)dG{?Sm6HFQ;|M@gW6jBaQYES~}j8y2sz0y(j~%@?zi5G7Gi~xAtzREx+8zVgnas z+cTdX?rbG3O^Vj|5b`~vxmH%P252>OsKqF`^XaAlxyWukCpq;O@XaAl})WvU=B zki9vSy*ZW55A4n+Fi;>gQ9xoY&N5U$Vk!>Bo}Xea7N7m?wfzwY_+nd=8GU5-oq4WX zDOQuzW0r~bPpEIz1@zT7cIL)r2)o=2!ZO_uTdiss(h%k*MWGAV^Ak^~LS+Mn6!LjP zlnyvY6H(#&6f!h3ZSC@)>y8EG=&7CfNZ!8~y?9%LfL$ids_kyRqP_TOPOzz?ERHG_ z6snW-CoHcGW)LVH!LNCkncgjGSbQw1Y33BjIw8Hi(zj4*e{bv|Cv z)CHSG_6lT~Kjf6cE1H+WLwDVHeZhGA7#5;WoJ&N6Hp${l_K8?XIie&8q)VsS79UP_ z-XRlP^L8~4tPSR?V6qpQjRteZ`-Jmc(Sn~~q|c(6>!fIl2Qn^y$MRgjoT`WSS@V)Y zYMm4$`dE9fc$yzY)DQ_ZVNWFe1VoFDX{bK`KLp$VD#2*>VNTwlARrT9$zr#lyudZ7 zzF$B2w2h6e+f~nW6%`eF#I6;Q^D7j>REwVh);edW6xy|l$ND7<0Z4wo3CZP*Xhf^G z$JX5@Q&Tfvo_)N3I0PN=GGkR6a$$)i8H$U`s{fE(s+Y~y8R)B|4oq?y2j6thIaG0D)G%wWd4xX=JU8s}UHk0^R<|DS@uVI-lKcmj2PZ}gD zvmK5o%o7ICAZOmuh{gpJ`Bu_9d0;GPof2!aw~#!!j!@o*)iS_HrtRxaxUen!;!gvzJj+V!I$q#45t&> z$FP#}HGjZ9X7FQ5P&`45E1lv|j5u{BFb0!Y!p)_e{QS!eu?TlwMEDKQTJc~|fygdg z{wJf)M=Nx-A1tZ1h2g&vJt`Uq2sAXve>?NjsWjH-_IrCV#5 z(CkMX0BdC%1|q3tUs7D-7@Za7xoje0M( zJ6;4Xs01DW1*cKaIE)@wEsCXD36G~*d4L|FZKj8@mfXs4psi4!WArJKe3Np9FC^2; zkHXzpri+iCui|L15DW1HEHIg_?(_z}iZ=ednKvQ*8^e8!0vIM%6w+~Qv^-XXx23~6 z79yXzx&35aIEEQOCJlIGg73lt3^OjB)1at0{wD5N$vam8L}%6n-$)g%h>J1^f6P z;=juExXXI~$zfT@Q1(bu%~9@6j~TKqZ0O#As5Fvd^-ZH-TR7#_h}_W)@nA+*d9hLA zL}MK{ND9MQ05n-9#dHkU9Y}!TKea@;OO zHX5RRYy)k)D(^fL7ZIqhUmM!2TsRERE~ukDP=*ppH2ST^#W(Cgq9evb4LGHBImQF; zrO48KH2wV$eP_>4l8RnlUCh;%=my#hi1l$PAlq=Esa8pciDsPz;*-6mM~FyINsB4J zWw^#hMQRkZ`Y65q+B!mt^C*2|r;cOLU|SUI2k6J+E<06$y(d-$Po)SkxVUQv*ut#?%1f#^dL;om` z$SW#dcTxXg-EUF#umyv-zqE_S;*y0Q494oF=MO?;9Q}nW9$>03 z$Wr?y*^I9)%KDu|u=+|zT~@FgS|G@2pVntGk<9*bS*X|_&S1#&Ma3VOSwv#$7qh3% zIvwOeY&vtH+?C&OD|Ql$C3&1W9QD@K(b~?!uI*o2VR+e&;GKnTz(C*UB)|>6uYOn2 z%v;W%MQTZF!l)VFQymE!Fp9$gIJ+eIC^YqyMt0dFC+~Ot|N96kX6vM(3=IO3g`T{l z2t}4${{o5!RM%9%TSDivH|vL=UPb{Uix_|=h6$PIU)=p&jm#pHK$P$CvvDLKeTT`) z5`&k|fS4;9ohu@fGaYqE`ux0>RGE4|Ty$iTgi`f&SUstfR`q4V-Y-F_REevq$Q;Y7 z5ays6Y+uA$`>rDUa?IH^tYY5(?3dpP7&dojn@^KvpGc(gi_JknG7abzEF z?IiLX2q!>vWFl5*kbk_V;DW+Pnj%T~uM zk2#%9=_XcYn9~z3h=+S4qfOh^Jq5d11poBIV!9ff2l8@L}!WAzEoGg+RE+H;d>DOjm|D)!AVVX-hy&Gac zmXm(?i*2=fD8>!JyGGvN85lyNz}EJ6HbKlr#SHS_sl!cH79l^Ev)W)S_?2L>!sJx` zKaJR-xj&kz*kLlVuF;tbm=8K=wrhSa(C3c&2*JYuwg8;g=?*c{QVX3=fjO#!X)etH zAn)+8pKW3W70B0p83Q+QS-fDXtcz z!q(tR<@oas5}Ip@zZ*C6ah$6{kc^0qZvKvs7qCcj@!*Z&oc#SYBu3yIxY&+A!&gjHDX9kwhrEj?36XapmD~(4n=XpUTCda7dd?Eudbk@h`}QR}SIzQ0No( z&?vE~$O}PCo`2lV!{HB!aTZS~QZB?fI}6+Ima+DLX#JIGC^jZBnrSbE5Mi033&d5U zAUtI4U-*5&#Y2v5Xu%ob3@g|ld5A3Y5@)ikgUz$8vHl?ecfK)yc{Y>>rdug&i*W{a z;a@@=0qLK4TWmKPKZ^nbGhcbcR9Q4BEH9%wR%Z+&e zTJetZ`8tg6CX_x`QxZ7|$@Y{4OQyzt`fn%h8rG^b7YkbnDgSs#nrc_}WFAp$^${sr zTd6fErxeu!VtWuEl_<0?O0VM1u9NO%8ZsdJ`M8r$U(r*;)*k!OWeWeldR|6 z6>sqUIqui-2WPxO(yZLMnd-x@?YVZJQ^pDT?^pF_^1gpX&n~lGNbATt!O)#BU$XP- z-4|f?hThX}7?;h1$pk(jT@4w~_qXnZjd$P7>Fzsq=QB=F*IYjT+<}Du23Z&gza}T?wj>5LfrC0tJXsb{;(K4csB^jJoD#CE^NJ0}A-nrS;UM zjZNts^BU;z^Bf2^?d#}VH+~&qlvAsic4Y30&juzHgsfYv#asD;>esXG@SCskT3M^0 zwnzWdzJAjSoN60Kvp|6o$`v?5U2Krz}D0#oSr# zFN~Zi%tb&?>wm!l5zCk5Ll@=@K2P``=Ic;wY^?MKW)i`&+5Kifpwb+ov&di|;&!Ro zqWV1k&WtJKl|!Fhm(g6~$Ie?Hpr&)m>WHl%4lS_J= zp*Gw<@Lg6tA0XQ7cb8r9x(acOmzeC>9`%R7mja?T%2L|Zes{%0|E4^Cl$`7kflZzf zmhXV@jWs}G@{M8iM-N`iI06gK0ShMfL70l`ty2r~k@f%e`-7KYrC5K5NA!9)q*#=o zVK@&1a=t9ZDFEmfo!!+_GKG2%2k}87*d;T!MRKg3day-5+CmCBEp9XYJ>7|CD%@cr ze9@Exg|DFPd0`6hF-raBh!&^+Mvz=|s`vLSCRqq7E9V>wdNcORtw8HJVdy?_@4k6a zY5zvy;)Fa(c54^jX!t|3yzmUAG7wPE8qi>CZMIUkt_$P=LQX77e_m8?>8ltw(cgBU zKST;0)1X}2dijK!o)wWjvar^Ho$okt$$bAoMGtOOMSD;Hb%fS$$|J~qpF%z2fU{P7 zXg4?#1VQKFGfEa`WGp3W??*o37@#q}Y26;Rp4oL}nzEi5Ipf%W(7t`e_x$+R{`pG} zNLD2fw*<@@Ib)!2*Ylfdf7Y}rlF!oZY}9~+I6FJhj~HD{65``ial6fSzTFy?J4{aJ zc-?Q4U~cGit%mEms^jz#!OE;6#>n7TltEs<@GWCR+M-Q1dsVIB2~tTg_Xg18?3 zkm8olEhxcnPylz{b8jHK4_#t9Xfq; z$2FCO5KG^T4>9i8Q7x18+$c7aFv}QFn6JsKpQ70e6V4~?D9NKoYhh`Zb!^&4h{N>_ zEszIG%fcUtPOlzd5!lN(|C6c3QkHVkI@MY$=?6;d1YDXS6J9DlUs-g)E}WH@RwjY! zQM~fa-O2s=0JbY{$A_I<2P0vYa?wI6T3=7lbuUXur`ZkGRK+x>{x*|qbk#KwjDy8z zIU*Ult*16$m&%Nac_J1WYM0`Mi7gM|!b7u%=GfqP*okMvR-2=4Z+%;H;t<}7aemm- zc>Wi{xC314^o3|lK!-=-&hq7VOluuwY3%GIMHX%={wr4|$(9&CB~v)G5X8+DuY^6Q z2klPyNPR3yD6HPG&veh>#9{`tNMc(L@oT>f*6#tuGr@Y9%D~b}=8&Z;GN)*nxYn%p z|ElfKQgV6LFJ{uat;@z1>z}+i6Yc1BUavo* zTSXR15Qg3S<-n7Y4}Ey}g*QGaAp}>UQfUZ@EP{W^Og{T;ZCl8J14RL%!z? z3xg~J?EwO}_^?+JvdAG#iz17Iu4WN6GWi})kujVp{8v+ayuPLP7%kU^t75qdx=dK& z#~KZ82}=P{bX~9R`Zr|C2Ax-2_P>@1M!PUu<4CkxQN!ZR;cGVSsdWBv#thb%K{@tM zotfGX>Gi5qzm0mED6evXuH7p1V)P>iJv@3$tkyu)QU&zc5OURa31$&ofL_s(BAW4w zDT;}_5XXy*;&@R#d7v3L%1fjftp%hm@0esvN9kOTQ@f*<`&lXQuUasr?ZhIBT$9l? zhuuqopBT9sMup!W(SLcpSgRx6hpY9C6nmDM)CWZTlij=Un_x}1gWMg45%ByyWDPB1 zG5kh5=ceC1b^-Z8CTEyh22B?L^|+VLu8Vh^NV~Gn_ig&NGI)F~qPJF4b^g;Ye@$y< zeOi;}Ao~4N>)2%=aSk*&hh19xHd(Z`o`Nd^{~RUUi1w$&O+YEhbNNLQ{1`&ARP*8f ztx=%iyQquZ=*y%ew?SJm9pm`S6e&OZG0QbM&dd_wME8i008 zy=m@?^ct#@uJ|)3ci;Ghqrl*&8E?-oy4e#zel)C7K5={-@vMq2884fOvubMO&Q)?s=zHD)v^tfV)qW3ehko?ZWJ9Nw&qHJ?nm~JJ> zBK=O~bj&fZJ`?%T1w*P`JHIgWa%XcbdJ0?){?~86Oy8{@aX-W@^vQ4HgSSWforyMd zbNp!XA|10D!ZOaVvgkbrm>LvuEJEUo?2sEKR?1PvB#Zr|`gL7?B)aT5#o5=tdVgkN zB(!`N>U$NX21(m}8P;((dfT1=L0-_X)qkeBHEn(ZOJo7<@_0(0D0;yv*+PKd@JWB> z(TnPJbotW?=G2*6^Cv4xX^~XI;3Y^FE>BpK zE;;hwid_VbRgj<&?&)-McZ%*aT7;8tcmjs@-MIcT-=jM|r!l`FAnvRI5NBXREzp0A zie-rdO#+QY{6@k-e`b(cKQTUjTShytvD`_!!@UB=tq z^kn8#|%~?_pY4FPki?V$)qXZFBgY@Rc zs&l?dqD$mGI*b|Ch=mE5NFU$h5MIu3wjE$ZHmy%{#S%}hty>m$FL3`GF#anGQvCuV zC&xj92>}Zr%fH#mktJCJm|S*HjD^A|$QDxOs|ink=lRAqrd+F^4)zBVZi{2vOB36% z+8pvvwN$;lem+A?3l)UH*W#eza}~oE`7tv3xEloRO}oN}dMm583J+QE@WPwwhi3~@ z1bWf)Ve2xQSU=c-dZMwSxzheJw|JK{jq0<$O9HOR`w$_@V*mNgLo8fr+ejOcV>BpX z$m4_sE8Ofm`|%4aS@NMU1f}l=&v%f{N`sD$N?P0+%fdiUwJ}L)^Us)rusbn0CF!nG%g?^i$ zNR))f5dDk?g`$Aj4+bSiOh{*BOod@d_*ovIUE?aM+f=(+(Y8_9xLR5RXCbUypX=7p zu(8m%=GJy$w^i}ju;!-izO;DB_2lP#WX6oDbh8w^#qs1&pxf6%$bH2HZK}5GjHu-z^Jr@1B)=Q=f#@uP7(0Ynl%Ld za@IHF-~>)wRoYqxVu#kOP@DseV<;=&A;h)(vORae~|-kTMU`S$e7ydQ_;DDp=SF;>@@d z?1^(|+yhB$7b%K5;=za~yGle~cYSq+@oLe6?e}M4OeLp+1f_7oIL3}QpmJw#gM!F(Ys%4m|R)MG* z5v7ih>78IkKsORDaI$%Cm~|PKVEzd4Zt) z@(nVXU?0&nu+>8eZCVwAlcSU93KWeFRI}Cym4H&2);9|#wXd_02q2H`RH8y`0=1n`$?yvnBXa=&d8i^A0g`X;L!n` z`ghvhv+Xd=YAd=HOanc}j08OZ1!XkTnq$JLbOaZKIwBPE1wc^G`6Ej)e+jR)N&6q3_K{aKyvIt;^GHT2Ac#nzP zHGwW`(^;0Hl9acJ9w6~z)C!}!wqB-Zwtkyn3QUrLU}enBP3Oa9o=_*<=1Vq+B`7JEEfjl1OJ zGEPA30}5 zMkkMdm2<3PB3{NE4~D@l)y$a#%6@JvQ*t$gGIou2aip_H{OtF`1PbAJ_3*cS8U+!d z(HJMT2(NEFC0)4IDw{qW`9&X}>@;s;?%cGpTI2U{@>JWCI^dc=^i_MkeX*+z4td19$q zSV=Ged%b9#x-e^=5lA*u5*EBxP6&+{YV3$DkZTAbK5;`QJQI5YN>h0Id%o6d<%=GH zW5iE>v_Pqj*;A%(Vt2#2@6Vw|6#>j~pI1L60i7Ea&1S_81|B8a^^L8U5mhg7nbTQ|$smKIH|($GF4-=(D#x>T6w zI?Fi!?QWa$4`51&_%#&`OPtzacuBNUE312ql?NW7c_O)u)DEl#EZB*LO+078PJL`j z)^J59B`fbA`LNf>cg`w+^=Q10ms%es(X zw(X8P?1^pLwr$(CHL-p2?Y-AI>+FC1yH-~{Rqu1%*B!_(HZN>Moy6rS+NXBS)}t~) z+*}*vl~K+4NXA%#+ zvFGw9W3B_l5BnR09<&9^ZmW8^;Jxw&jwld65q3w;M?|#fQTH#&xylkKyEq|NQCHj6 zCF#2)&-#WTu;<&L_jCWYws7+^xitD-^zJ*KCB&tk`4gGNT|TcA<>oVQ2XqaB+GC2Q`&pU(4^AUAjt}hLC2M=g zmSaj;5nMKnhK5~5J@KwN*TUkY`O{Uj#s?-^^iV2kkr+#`k}^>d;f!{oe)Ev1t+0;V zm14b-!olt!tY=HUa76eN70W~wX`0s>Uh7+hje~8C7>fl~n-+;@p6$BR8?$z<0@Z{m zZ)^=H5XcKuRxh1Y48)2JJ9LN>%z{_3d^xf#Pryls9S|ow4M3seTST!ZflI0)ntufyV*Y&arU29Mk z%Gho~i>1kfEip%_a7`>K#L7%8?)?i|I+uq7#zmd|OVc0Huc^Xp>SH?68EH@=Pw7O! zU+;lIC&vZf5BX*>!|@-f*^Xt1U?^ac4kOuH_>)J5z$3TA#fD*K3FsY-ECTK68&^Sn z?+SgEupcL$R_dS~Uu*C=I#V&>pj1CUsdBK!BV`3OdjqueXrM@BXw1_gcUDoIUKdS~ z(v|%%Ojtt&(%bi>7Wd~&6uB$0NawL4RMQsz^y1w-KPommueIn+{s<=~I>iM9EALqp zHz~q`TEd;_wK(*mZF*5r2)bkGrC*?ZGaUdfdKdyrvTcpU_awa)`fy?Sbt^@b!!Xk- z4WH%HG_cOGlTjlnausfET(iiEM>rmM@+47ag^6@bc+oZ3x_rAbw&pkFF zHlZ?=A@@C)oeUZ4v(j|`)GEE9T-s)&H1e6-O?DVkS*?4i|CknqnI^V42= z5g+_brq3B~=unUIE(K#+8~ohHz&f40Ym%d@NvoDuY6zz}-KTDEzYm}1xJhyZVsSTn z=Rl(Y`ok=bn-~jnzVr#RK@xqDb7%@1FR9}sOEI6x%oxX@yNySNB?D;W$2VZYKb@+@ z1otfCNvf$7j!4)2TUjq1@`B_D#S+PoO2$R)5hG6lwRLNi^?3IozyaqX`bE&#vjXR> zm>cVqnEfyKfwCtrD1uB`;e9LuwcqE~^i6dwRB;nu*6D-C$HV;iq_|l^4Jtlgam)g` zUP=KoYALq8WnOTL04xw*-D57!BX0a*N*N}ZTU+WWVzq5!_ge8}<`^sX+QB+=piLew zg7@&?wsu%g&{Z|bp&CLWrC}I<2%(0XCj=3%|HpAic0Mx4a@Uw|Db{Z&w7`u-6(w#U6vCG=1 z9GHuUjmtj%Xm?=wnDfo;Z69X(gfHmAw&>R4-}z*jg+SQZkiCem)WpOQAiM2>7Kz^| zS|`-uuI6?$hXoN%?yHm+IXssRbc-PcZb&wkddj_lUOMAsi#n2ai3YN``NCJ=@ ziFOyDj}-|_xq>V*e0-PU`(xj6Y>Eh>yoV^e4Z025*>1HmeTHPr8{~@CP8@g+1gbn^ zl~O~b*+8V!soW)i7E*BR9wUY(U0c8PNQX920Pc_;+E=v(@1{T`GH3N`eTwAxHO=|n z+eZ(R=P(epBWkB_@U@W1a~^0x*k@Fd)Fp7P(@$=HSpU_qNTFFhYPBLwZ^mF@yk(wS zVQ!jmX)@OqIdEC<&B?OoX9Kf(8z6oaKGxAZY##>FwL{cx*8sBHEdBeW=*yr>+RwXik`$l90Qij+dmpmfX_-w z$5Bbqb{@QvzquVy=sC=qi`g2}_S@|H06F2i%$$e!5L(l_?m)HTgWvJ9N5wU#Tntp) zd8fTm&_2sA?=y(?;KOh}XBBb{1ayX7rZ6RAQDWnj(7h)G)%1QdEP)Uu`w%AcP8kw7 zUEx2)si1p5>?>xbEfN-DE?-O-(VdD^kk_A|v!;E245}IKccIr`E)rBZwb;?<1Ic&N zfu(7fu`EGnLr2RaJ1oC3CeDdh#}Wx+dLdXHqp}B!*Z2{Mz(+9ujLOT9%Sn?X6*gU9n4`KQdid}iEJX50g2UP$up$;8fRxTa6rCF*sha|R?=ewVEYS|t)|`Viy- zu1lYkN_HnLZNr-Bb{fZ(cuqC=PBr3$2aQOS%r7{$pA_(rSV+CXcAnTlymy53Tb)sm zci`G$0{xhGq}sAoyLj#qd1LZBd07S&?*uk?@c0lLSP&cY1wW57A%vO`eMvBY<|*H{ zYsNmwy{G7DZv=|=FBKg^*{z7xsFdVlTsxW)NqeFQwUypH5k9Fx+WRHnWmXc>sUsU)V8K*e@v47BVfEv0iX`~ z9PRw(*Dlwul zb?amBBSiO+Mpi0svq}qWAhjPLi%d{ zD`5w~IT z4o>~|7`yK=^2E-3o+fxVQN}S_6Aj9zdod^b1nN`MvA4=LOmYeS6pX;Y(%B9l7Uj4L zXSg!sHua844%OXa#eV4HK_)Nl{O@Xg16ZF`PCvW;R^=IR_fIvvVT~|s=T;;ezLjSS z8SxI=*?YSv`Gz(5e*UlXpS{K|)ZQ-*jpY}iClHr|OPnM{07eS3P{Uus^`?)-g%FYG zsj=@t8eGQm&E}-CSETxdF``~Ut1UgqWFri1-(w_As(}`1v0CW7o-aG=<@`uCak~F^ zEl{M@zsg2lUf}WWuIlctB`@Z8%wVCM9KXclWQMET=6&bw(r5dv*|$Al8K&%&`PJ#N zkEzd&wgFS}7(EmyY;3@qJejF{baDKUrRVs-QwS@}bTaf>A)Cuu)6_zyd+$g3Lk=WA zVg>hVHhg$IV-_pEyPsJzb1gD)$lRHAO^z>XFnPBEmU;1lu)X${X`o+m!w zILyb}z%c_Fwm$tgQq1g773nqF>(knVxJ@nU#r=?{m%Sz%)6LJ3M$Rl&gJaqE4at%- ze~}HTjQsiZR3Uc;TAnuB) zcD@rVTxCZFT`Blnd7zR{Upy&yv~?d**sfJL&mgkNgfo`ayJ$zl<7PrzO)HA|M9{f& z(cPYc6#A0qt~Z=AsBoU!)2kfncMW(;D?{xQOF-!U)R3f0qrxy?H)LP3f{_Wcm8!+K{v4!Q+&bz3oesVj})^2fn6xEqdQGxXaPzVjPN(@X(z zV7eA+Pqv`FT&upHawig{JPzXAq!GS>b6`9m8)5v{-}HIyve=ZXEZjtW8oJSgZ*RcB z4)>_N3cC879$d(KC2szRAq(4@n3nesE%h?bO@9r-ET0^inlNBemw^t|XnmyHA3zyTjRU_%(ICr%SbF@NN2o>6!3ySC=C^bfH)H-t=B$8+X}|@ z!8!${a|7nK4hy(N2N`Fq5`c7RqI>tB0}C}P*{MnlCEE_H?H zwE0uSUr^h7ba+CoF{TZ!2wOWjikpBYO`k5Pc!xW~p{!A8@x^;*W6E|N!l!7*N6l;Y zs&2Ln3RKx)>Atr*iSDfvdn)Y-;L~kV)rhNh(D|JXcuiHxlb|6*#0f#Ta zuv^YKLwJi!_8&Ua81gZ-)(4d3?~_YrMCMm5v+5n-isL{}n1*zuks;ZD5}ttIA;O5v z^s&5^u~>LgyXiX;+=JPy_8omOto4x|F4>2-s;@SgJ8kCDt15*qze+Z4fjtinouL;5 zbAk%aTir2#)rX3Q#IQcWiTHWy1I0HRX6oZOevi^LVjzE3Ie1|ahUE_oD&EJ_odBrz-=2Q6WwWw=QKYR3$K}v7;keh=;s_s=e0cl1wZ?8{M z*+s6Gcyg3O2|fRErT^NoIChQM&0LcH{c&}BoQg>OM^%CCld{vtZuKg1S8Ly*)^%%V za_`&ygS%FH{iZ zY`is^q8n3Gkid{)y+NV&-cpYQ=SS{>t{%5{S($CRHQ&zKi&Ds#Qb^R*S3VMjX4mey zwzhyF0#w3fhMNRmE_d`#qVir{#9-=aw($kPh2P*O+padnq$>ahlwT|`(|3t>Iav4$ zzrv8fnNcrX2+^JF?ko}i9>?)uT+(?f(m}q17z3}&4%`ck*M^i8RD;SKWxLECE{s)UKXRcx8`|IkPUtI z9#kTGb$etHgm)Ne8T+&*v|DJnK-~%`QV-A(bwu}duD0>d2(imQsRaq}2)Crx(mCmz zB3U%~WBX#lbPM$T|KIu0xC}2>e$D*s|2y;bOc9B{ymMLrd^OyU$X{Bu9k#`WJo$-) zY@Eu8gfuqig%OH|Lz+C6#yknuNqC{HiBSo%`3Yq@WNZhUiu9191#~u2(r$*71^}=U zitf8!!5=_vLW_BXDtAU$Z9Hc&9(FM_478XuIu%YVH1MU=SO`X zc-4=uqeeP&lVr+-+ZsitA9G9hhQz9W>Q~D&wQ2fi-)cfN4@E0+;&dmK0`2E zwHpGUxR{R{n|V$J(Pi2Zb&enM#CyMcM(=cHcrmG{hI$69N0Zi@{_t-ykDD09b@S#2 zaq(ox4pX_g8|s=Sd+Omp1Je9;cUJRwfYfyIBNi#E=e7n`S^nMz$1&#{Na1TJgXi7^ ziC4r3jOz!bkw(#(Dh-%{k@aue!pwA2!*#a^c_ojL2HYooXcs61+*9Oc=o(za^0Kt~ zhoV#2{>8`FI{7ui83wT8Ouc|<6~aJ}H;23o7KTog>o(5C-5x!xtI_;w?q}Q@&Z^oX zTS4(*VN1`Ia=*#@s;8UnGuRaF^(Tow+JZAyf^a|<6{aeXD^pt&Pe$htJ(WraowdM4 zjv(MZ2=fr0+XOmir~~byFQkY~8P6(jb`=0%_)KGq0IOqsUV)H0s zM$jBFR1?_)v)0aKmDPu~(syAmBMw!FLqjv1?|fTa_`MbHZxJWAXNG7Tqx*~2 z$A{OoZYlP^A?t?W5znQd4%;(_M@=bw|o29E$Y~kAkM_qKZ`C4T0rhKF5%N0G<5T5#;XEvAp zilER&&h_!676|_7r_IUs17+dcbtVjZ5i>sdelq#_1^C2C;pQINo714NRDwgKd`Yj@ z4xypd?`FSUni7k4>p`TYcc6WdW5xBNbZ5ne$2%~kveSdFz}ygYo}R02!~O65iC<** zo%3qgehuHAhfDw&hx+a=B#g#O?Ww;ba+JtDZwl_TLxwHEGJI6s37yuR@S|zQ4gD3z zR$o8`d9f^qasiocqdNvaSUZo3h}X8aVfvP{hoHy1AAs{{=zsD3Y@S*r=US520PP8b z--eDyxZwC!XJ{G}7_ng4m|>fIR(Hs3AFJsoues+tlZ7sR_(g@1EQU5QEr!Qi3c{^Q zJhqXz>BL|W#2n8zL>EdxA}2JdONemTw?jH7tWIpwde!n;lH4ncYf0>$vpkiTz!I8a z9a>1|O&;S1cfogE23@&TDf%_}EI&gTW?-!!9g9104-SCdEX1uucurMa>Roycecanw-XXPF+T2o9zA-;_GzMw*OGTcqt~he6MLaw2vb^wgSJ4 zf&6{Uf#VMQUGwrT5U?1i5+`~-FILYn-xR`v&mOQA3~@yw+$`L7X!64C7Qj!cTaa;^ zDoLZMGt~%kAkgcMBVVxR6}1G8Hx->sSj9f%kzrgx_RAHXrHH;lp57^Pna=Q^3VQtH zmXY%SFR@x2Yq6Ty+>te|T+x1oB?M+P>kfSL7WM>5{lTyIt1`k6V0jKKgJ1C+vhFl` zLhFb2@RPc=eb=BF@)CAJ~d6 z@3MhOS4i6}7PW_GYK7J8&uj?JIQH5g@aA}rRQLZXMejYj!zYFY{iEiq-L0V|dMnL# z?IZ%I*nMUyzknOO#k9XtjD~>7;XoGIF1>{=xjuMq?EmrvO1&ZV8iohTzu7T?S6U3c zHxPrWwf+%4hVShIZ}+>n(vr`wM4+@X!srk|xTh>$GP)IDgpjk!kI z`OKkiwq|@l+4!Hoe|#+HJ9ODN2%Ha@(ZzM>Z`{2EcVq?84H7w`b4(X}a_dCNKBh%B zj>0^;e@*!D9tB#LulQppSd!2H z{EwvUOK|9{k)yAo25)`pQ?(239Nep$2wY2gJwNV6~sjG>L zemjK;4A4^n+~8RkG=wY6cg!JcaaTaH$4 z*+M^MpM!k28iSvL$X?hh1z1%T25k^p5+FiEA<@0vjedXOVZ1s+K>E(MR$Is*rJmn9><0oFW-n z@5xC~>m!hjdl{o)e#qpMlWw&U9{D-YCjc5aBfrpQ(P!E%Dvnuvtf*$%GOm^Tc zNY`T0rpUcwS6#R7*a82+WPyDF0;AV_X>m3(b;}BaVgI;19@?i~+p~`LqXa-7n1Tdp z6aNY2$P0nv;mTo#wx|PDTEDu7ZfpPl*GtFRV$n}GI#M@eoo+H;F>^^?;; zF&5S{T0ain=4JnHsc+`0(_jGx%a|+;7LzhlWh-ZvkwJxQy(-ReJ3vobzNYA}Bl&Q0 zEJdY}XBpFrS!+XHCEctjhJG`&lYTIft@`dm4IM2Gx9}r13th?^bwi)38xoFMPf&l9 z7XpQLV?ntgl~sboIfRly zA`-9E2iHOvn*04&5r7i(OWyTys7}=&>8#J$D{kbMVu%wr7f%YVybJ~T-U&qCGQ0sn z_ZVF3OdlYd{SQKiE%l(&0;{;@G$>5%4ThRClt1tZbl5lDUTab8M#nQk7dX{R|3Y&U z(sE$MYZdVZFCU(CPh099B9D28sY@V9PlqU{r({=p@JG^GKsY|NGAEy;mOeH9rWbeU zOA-Mb3XQMcefYEX)>-3~SNr1u{X$k6X!LDXKcO&AW-;R4gz zORsyqtpjOhAL&liWu9zU#gI<>N>iziVT2IG#zIDwP}UHN&NfU|!;zye{Ex4`&b5i9 z5aZW%=AQ&sB}^4*Zy6=;b5OPPX)e|skV$RSu}^A!^u}452Iu=Yb2|Hz7$13$=SaQp z7;iD2&;%o0LaIr1HJ;PkY&d)}_E7IDLdFiY*&hdm@3Aaz5(=;O_W;=@k{hD{OzP$L zxzrvrX+ypW`m_33cAeqUmt4*H{xdR3S>1CPJ7w>m^e-qqp@&LtL_3PjIpU627k)Ry@!2Z;T3-M z(tO;`rQ0hwLXmvPBUGTBO;b$lBl8r@Lr$vs#S~AtyS4og(hzxYI9$_O{cd1^iVkT9H8@MDyDkXH)@=IDJoTxeZEwkVEAwyX2Aixoq zujT6Aoqgy%sPIe5+OE`c z?nt@mjskcI9YAQ8NN#iDM)|Lm6}QDU;EaM@51E%JKl!R`VNJARE;32ifHq?ai>A^J zp(aS;)q(ulb(rF#!I6Zhp8nwxcs)aZY-mW;3scl)Z(JZe>wP8#CC`*zekoG?vba~C z3;j)n6LmfKF5&8gUv$ai-}*(z22abzF8@?aiw9;c=YxDrc!QLOi7|z-XnvoTW@u(c zeyfzX$4WG~bGsJ2AeQh` zFCZ_kkV^Pf_8dI^3^;n@a}VD_=OuTY%^}FC3hrCNSg`{jY^mA@a}(sM5K!Xr@uMO} zsz{QM$AKz)I@Y1P=7chy+F*~)?fQYFWlQG1;mY35kP6+RjAD1&P@bucY zX)A;4b}_^!A9#L0W%wA8pB|9VRcU+Y6F z#eLnf*QR(8@Lq!jzd^2>Tj$Qw^ybzinUdkz%@P93YEJ$uGynf0^Pb#r%|3`x5L)Zsnj7BD}vSZ!t>ZVEB-^+mhuP3EC*RrCkh1@ke?=cqX=h~Ft^Sbctp zQWs|zKMgi9JIful$pKbF$CudcPd&Q^)2k+Gxb!@lCuEOYCMTAD$#zxk-ccNQZ@FIb zJ@S4$raMke#AOLwp?qVIrSt`NqvyoDQ4r+(iDd_>igd15qi97Vj5(EHTz$m7P{%E) zjQAg{k)6W#Jn)Ofg#1cj036tfr<7(CVL0G)C>1FKNo1N1mgW=G|8!B}aECn0R3cME z{D;MqvAm0DH`v(Yy&IwP^mbM;}^wldCjH?Z<2*-3!STLm4f zPj1yTE1X-gCgR(Z;xSul<5+4M2`$Ely9UN)(Ar0$?l&>5{4jyc?U7&#)Nk&E3I7#t z%@Hdr_62A*F5#l)@g=ju@XH5e06Z$=9GB-Y3|XbLaq|9z*7$=%i+9YZFW^Sv6N(8e zQyg^9uAW-mK!SY)wp2KGx^HRQb%Vr<-!|lc3&@sqEZIqzow9KiQM=>8zabMMklS#!ai5fZwp?12edX0CwIZh{_nifdI-vP9%bZNE z_^_T2IOyO=CAvc!K~4#SK#7v-q}(8N5XetpTd%l>Q+)>oRoOt+ko1f(pieY$NLW>= zn`eu|&cG{!VQk>{yi9-w$*7T}0qF@3oOp2lh-z$V6z`}S{xQRWM1W=tvs-t01VmOZ z!8lpGrUcAWBrHNKYrEv;1IQ%9RQ&}r5^bcQc2rEgqZf=7MGOH&EZLl*kR46tmt|-T zOqhCWNE102NuyH0h>1tLZg*bJmLlB4cjG!a6X6Q0g zXBmJXl0rruOUAsKZerWmHWS6e);*$HK!`Zl#2+n>I1zyXImnmUWVY#~&$$HtjcH<4 z#!K<3c4?Gpr`JK)c^)ZNMI@ZPn)3r5wklwBGf$)qhB%$lq)*ac)T3408y&<%C2T8H8bE7kXF=XOE2rC+UP1cx38cse_}Z;~Ed7o!9S{KSUoCGc{u# z4_*pFm&8_Y327`o5z(U6EUQK;a@gD+?ZuZG+zs=+)(`4IVLHYN82Bc%swAhT&Y&#@ zpY%JouFrgI-b5G>*qb8Em=1dw{4E9fntym-1I}!Zz_(4u15};GXIWolxJ^u1e?*;5 z5iYelx0y+L3KjrQMmgBH*6)X+Q(mpH94{r5fRJfiKAn@uu4_)O(u|OVE(R-GG$;U{ zF6lQAAEYiz9-eCU9dYlYDm%ub((!MOOV0IXAWhg(}7fX5w@=w5!S$)vgm z74So%ApJ)u4oJwQG7U#Sw%E0V9V>*fVA8D2zOI+9IiZ7gdGRm;Fu^`~S4*Jzz&i8K zC4dJ&VJAz{!S=pByPl%_CE>UtU7u(qw`Q3U%4A3jRxEF#TKD^LtNW|`!Ej5cxv){V znG=vDjO-4nlrcC2v}P^?U&AEoMuHtYG#56{AOcCnfuJ#oV)Hr4)Ah-n3GjtndI~XX zfVDpNsIlT0M3}MmslWCz-sKassNM*oP~+WdpU^c+RJN{GVporbFujSXu`Lqr<;Je! z;N(ZHbiMjiXZE}2;HI`UgvMBfr)NF0)PO=b&2FX&yp4s@!+MH9jUf-_#G4=3x+cg| z_obvfpuSu~RNWqW$y3+XYrLH5^}MsKzA=+s=KzkY!sgr21hM#zTP@X1F8yI+9a7p& zEUYfFcsEOE3eS;%Eyr~;i8s^|SCUPjN0I)n7CN&k+%MZVpFh}aa*eAmH<6RSYdupG zh{6+t+_;A=s(BmR*P+&3tH%Na>~T9N4D!4(Kr>Yl4cAucUYwS!PA;@8yFS~s!Nk~M z>XbMZu!DWG9MBmfm?d>PH!Is%ofoF5dKN5Rs`pR^LTRdr!&MP-v=Q#&t9k1#Jz>B=uks z{2{^7hxvT)84f$=0+Lpo4Gt zG#)|;kKOk$f!0Hey^SLW^(|lIWX*zq z-9b+hTCZkr1NHXYT_%%m$cJ{apfSp6BMy@a=Ts}nQU}L#nK)bHgAQxN1FqXfBZKcm zLXPxBZMB>cGLGDniAtGtMMTna+EuCPhgTn5Pki(H$_<3#N2GqbF_|X%Esf}MMvC*~ z6wfa-AB9Xip(Fcl`5`mWqeKL4==4VwfJ5h7LES_{d1ET}e&a_b4%MP35RAr@D`}iw z!w5r`bNMja)c`I3vjupII|p{wcaAa0!qHvG1eIM=KJyN!f&?BEO~n&}PTN$Ody;j( z;l}zzqh$OmZhYJb}23(4So{Ut&h#Yv&4|N#haO7 zZBO;6_o*fz>rH9Sv)AZI!=aogeh*~B^$|9-sO3P5A5MyiI2yxHfi<%;ao9|rv}Znc z+&ubUmkTyA{prRO)l9dIGw+?zpO@YK!OpXEZ(BxspByoC-3Qb->@{d~M#~k67r#fV z75TYSGm%JO1$Dq__a|~`=LI9SKXMY(y?X6xZoIqR+HAA!g3=_?GBK+GlfLESZY%A) z{hg5DrO5hV$l_-CXH>+^a(%-;yyoXU&l5tLsIZqn`j}13n`U>bgQr^9j;GB?l50_V^LjEc3oPc;$f$ zOA~aAB5hX3*>fa&xD zj!w9n*<+yRN-wf4->T8kkG8qjMxGA4Hmay}(+4%mR0U1V(?t;P>o=EV54Hp^yC z4`p&xu-?5q0%#4LJJ=QpO9^eW+BU&tuKVw~+digwT;c59#MyfDuG79)PQLn$#tCjq;%_+pULcCXi#Sbq zCoW!T*=KH>eRcb>+;N*`%Z>|mmgTBy$~q&lPbO#qt_3|C36K|nV)>avC+dQ9sZ8Dv zht@&vu!6Bw-129~*eCbv-9m&E=cWOg%q^mw?&|nKrR1d#M!mU-C7FWHJ0Dk z!I|W@8Ib$Pn7BE#dH0?7j=1zBkM`X(`6WUW_dv;~M2{#~g#^0=I^HWb$x$v$zI>FQ zx?bDUdeShc&%quQGc9aQmXTcby#KgVe5M^z#AQ2!jMVjUHwsxzHHA2V-6P-F0VK{8 zN(e_5nUlPYlW20$f9E3eOH_pUF!Aar@1z%yT2dpD{2%{s_Gxo@m&Z-T;x(Bl5 z|1b)r6w*jAW+7lz#G0k7T<+%JWTn7fI#*WwGkiabgEw|5`o>n79sRKDsv)%V`R)H- zx56%0Bf);HTPM-}TgWrX1BsBtCk%!T!e7AUQ`7v~wgwJLBJ@WpphFw4grpAAV-)rD zCPswr=EqnEujN)ISk;8oJJgr`eFdkR7M7NlG)T6{;yxFIpYV(GN$y6NPLV6@yK9*8 zvMKWV=U8-9xmZhL!6!L(RqX+KXgkWh-MDOfyrB4W`xN;G`<9FU9YSQ<$thb2q+hR1 z)jw7sysld(Jpi1kW-l|fXu!#0w{FqLhfFb)&b}?SNSS2v(RVVgfj4jpn6Ai!ZtW)4 z%O6km;`N#x&LW)ztU4JFP_BYOqu++yoybtfrO6q`wgku+(x;4VEOW)B%T5&4mZ0B) zz0O)fr7)zHHHMGP!krz2hEvFcMldyERCVP70cqU^KkCAjN)9uqDY6ovq`A^-hXTEP9Jq$j6;(dVqXU!7S9i0_>l54OQ$A>fMgK{xr&yWii@~PD* z_?W^rMw#-=bppft<30uC=y}tBqmklD{s|p4HGinV8mjUPXaS0;k}G|AD^KbMA@i`X zh+JTpe46c+S;fY~wG~Q0mWgx+DNKaW_U6)xVv_C`EQ#}_X2vyXJ~xnrLD!;{SG5Lh zo3>ScuzMyubiqYqgOCreky88(nlX*C(gXX_+!snR7t~KNe^m7rufLJw7S(f;omlA6$UxyU#W~Xu8l<6g0E$33PDCM+7sML#o`CQD`YLhZ0AQ-?O-4iwdk*ms)iL> zI@NMxRZDOe%0`v_SzAJwdqP7ahHrZY4FB0pQYoI#zzOm|3xORnAyL41vZ_ zv(f0PJv?5G#M{0z+_#m4m$;f|wVE5FUpBT3z4t2wA{!9v;jS>?^o$U;Hdjb?R90Z3 zF@iTH`fyh;=9brNt}L_gz|D398<*q{`&oS>K$fD|I?fpgGCJIt6Z*Le`nxoVOpd5? zn8X@n$7KfLF8LF5(Oh#1yDIs%*v;F`u-7ctI^9w~)vDT{0 zI*=;@Uum?8PJ^sEZ#tDOZ|z)zuJ?t*wahe`(8X$Nnf+CGj9nx+u^F=&({>}pp&>S@ zuJGn5v$4k>B*7K%J+_us!ya32mG~`L+Fl7;-5q!fhuTVSfTH*xJ%Nq;Ql>R0rdtK7c0 z=l(+Qlgx3-+>8RaQ#xwI`Pw>{dG>$#YF^=e{ZEX-zjTnZf9KW2x&MV>+=-4hitbvR z5l_qpd{1n0lgL|QT=k(tc5c)AaTFysDSBF^;UQ7_<-2ty4zfK>(Wz$CCpQZTeznOki60E>qY?5 z+oc$=@YISljLR!_T<;Ds4ONr4CRFrH!r%zLBcke*Z}Oh5p5Ai~-6I;n557*_M{OI% z`~!{#Zr65*++3qZTEAsgMo}u^7{ikEVz&JbSP8Tp#v;tazTF zfs6Rs*?0ra=6BpK5g(|eUBZ{p>iiq7rrFg0ll0WXtmhfGM#YbvB0AdYE7p#Jy6M)yw`hU#^3FoX8sEGKFgrZc_X zDRrc}2j;P?y7uLj`~T&#Q#o&?8T?w4fs*tj!B|0RTVKVP7$3H^)ewn|iV!sQif}lJ zQZHII<~CA|tTvPqik8>V^dn>&E_Kqb*woy6#Y%);S3=_A;(CP6@zAR^%$#yTW}lQp zj;v$KW;l;54%t5tar<=y~>1B0b*d54n!$bUAq$raMyzh$;LR-@d(eR(Z#T1|jr*k`~p^U(9MT4#E(BWjvsE&#)FOtlWy6+g>VA0D4nJa-n&G9r|zeBBuU#O*xq(Vsa?;YiGlrEIyU&eoBLpJl%1QavA{CA)+ zoIh8*xdn78C0G*tB`w=fB-e zO&J|Uv}WJx5UNf3aUSg0qMM}1#=;p|TT#_mTKCwMl7lb^dKvwMxj0K!G(+N;0zdFp znrs9h9Z`ZX33?QuG+gIrecS%2?1qE>@>g#A|FtDPc6@7X%-3oxzQe|74^BGnZpN;e zG`FFE01Ed6AHyKJ`B^n0l-|0?&yX@%;zC)RCQ>;~QO`?FDu_?R1>_5HwNs>)6r`d2 z6PBR*W3O9142MNHbLRr*Hz$1S>&r@y#@J=ZEvyz=IFROIj1dmMwdNcosMrdUO#>2h za>Q7m!;xRZiE>E9)bHW8-3w5JfQU38xq4iJh8i7~dj~8a)vikcO!}1C=`l=w)lJ^$ z1-3$|d8$64`etGr&j$mu1Wk^s=|ZuM;R#FO788pD+$d5P&KY)?;Qb5<%fT%E=xr>1Kh-CRzk7@TF-R z`>jSsSL6C?+A8c_DjlS*4p+4&NXpLGjA@YzS3)P4dh2xai$@u~<~1jn#Tga;SDqaD z69?AQ(wEQ}dI{C+39I&wH2(@tvQH)W880~98xiK5n?~?>6-H1X4-hPf?D`INy>y8S z#b!B80SSol<}7=_amk!DyD}bxwj}&o{v8xRDLB?USr)~ zXn!=*$t5=Vq7@_+Ekbk~=RGH$a-CM}G>sPHF>T?zB89qUw z45!Z}Z!BSF0o+L3_Yvj>34bgnamac8B1bg**zXNWnN0doYR3En=7QG{sBQIV%ER3B z((1$`^P&1~CM?iA!$?<4-Oa1cw+h(O33DhnlaBb$sm~CPbUa=$&*~%rk!01~< z-3J@0^j8&&&FTukAWZ-Z#$W$-;Sw?6p8ym%6k*1Wq5w!d4=R4y_$4_b|Bo3!&2OV0 z6Si|t>=Bo&Vjocd?>p%~&M;lvW*n9;XIMVUe=`yKU|^6*P3DNWpbk|XMu5v_C4}4Gd(Sa+VI%oMi-<;+G$GH+JQmp;QhAO{sR zC7=w=ajIQ>q>eZ_Z5oD|HS3Z0Zh4BZ1I$awr7YISFtE}N35d(7{GHE`NDv<69&cPL z;6$>Dojc=`*`rIAsDJgFtWv^+Wv|s7yM@W}2tHQ_7scqS2Btn9rnNfJASyzmT|HR> zlfrz=Hb;@J9W?^S+|q?@ahp97ij|qQP?U*2bRawtDXd(gOtdHa>CGi=EziA7-`80^ zYE8%daQSZpxx7cxPyl=D__@{0h%x4r-QGHJwtdW$4me8K2w10cy;A@8GpO{c$pJ{#S!6j0<;63E^n`<# zn8RY-c&nhMx^Ta32~j;4phM6$Gl=rCg=A9vBV%@6n|y&Z6k(1(?S1Slp)+QVLZD?-T%tUYZOA!dNSF>v_@Uxi$00V_+5PIHhVXp|i>;dT!)=Pcf57T<&GVP_K( z*Pd#xmoBkJ+YeNniMID`NQi*itKGtd$J4WdLaCMH&nRQW^ z?xbUNY}>YNn;qLm=gHHtZQJbFwr$%sC+|#64XXBsbAG_twa!}ix-MuJ0SQG=TTCTa z5>+*e*&_dZl~vXmv!BFd%<*|O9-mOfKa&nQl9(zYS~+`Xzh`Fl^)rQa8@PN+cmDG?hH#1W&!~-eY?dVfb2yKb_`4WUv=v@ zwJns$n?*Tsz1BO1e&Zpb6VBM7n<|^+p3-HsZLOq3ydz5co}IK@Wqu6%v3s){S92Ri zcj=!Q{uw5}Ad2gi=5eF)Q&nJBHc_-dK z={(J@^iO8B7BRf` z>HYGlx4%oLWqzH(X~Eli|9eX9ij-@`fo-37F0;@9ZX!Ch4>hC?Ll0ha&+RC|m`cZih7PyWXP6$4l^z&t*Z3RdEcdPHWLND9T);$DJ(gw& zX7N zK=>K0x*2`De)FGnZHJ7kI=Nk$?4Sc>XxY=N3R1o1_wrvEQDF>FZ!)hy#!hj_P9{gI=CjZLItcgUhdxnqPb>s!e9k_2 zGNSr-HxAkxbph}5w_E%MDGJnxFeo&pEa8Zqq#!~fA#z+`#UV3}prQ;%x*%~Vctfs*3M;A%Tw?Byg-SIp z{7D%097N*I4>`vDN@b(4&a@sSjV>kvyZtsr!d%2zlU~1kZF30)%61aeSZi)ny{O@@jSG{=C$5 z|AM8h0Hw@vC|M#%=5Nvjn@Sb`yl5dg2TX$v+2e(#$PLR?wNo?pk_;Vjyz3WCzfSxM zOTj`rJSx)MjSUT36JtX{fvDq$b;`0z{%?6}qbu`Xa#LwYG4VzfsEQwF+zR^}Wi0`j zs}TY^e0um_CA_6{3ae$Go2_2bG$_?s@9A_5wslx(Yprd4X}CZ_O-R?GP~2vQG|;OI z4_q^Xj6Q?dkSd93zCeOKkEQ^Ie_fCy2vp2EcY4+(@wwh)H-4LG;OLc(z9L6*6Mq$r zS(PBfDLK5cpM*sB~X%!m2YbBcPHu`z#ugXwd+2B#mA}h9fidD z{+fnQHt|T%!nsL)rR)qlGzgj0rT{n)G4gQu=rc%ilQG7M+?%u4Jp^ZhfFfQVG0s=< zH6S=6114{yzdesakdq-rlL|Dsl5>eVki%cY4tw>>r0=YM_st&Aa~QQdk53 z@yHTis+dJ^u2AoEKruDLrR5hixg(=Zv{zme(i;9y4GKrokvqr1D=Lj=euK~#R1Y_p z1{dpftGaB7uOi180jZ>@0{-S4?U5jZ^M%tOeHu-}-XIHSfV)_+qBfp0@L}j@bZbRS z&hf?VIQXJpPpEIv546Bqjc{fU$|G@V!^Vr*oA9O6IaR^)jbA4- zw9LD?=yW zWEp4^6X87g9-Y!W7yrmBTp9Uw3Fferyp<7Hz8-MHSuy%dfddJ_BaOp(>Di{KF?m$42Emn8JDvIB)? z%yZ;ruow@P&`)=8$|V*7#SEwvvEH9T(2#L=LawCv=%YT8z2;(m7U{ zo9bn;1B!l~kiAy|9oVM?tdTe-#z_xR?GVQeOXRm6z#-BoAKJQKE(HZpz?3Fty(3=Ck(BLU(Q@smzEBidj_z8M#eLbvL>w#iaIt$5lVy*2YqEUk`$To-{N?W3n0%BCW7q@ zb<*k(*pFzrZ&j@BTv>LShW`uRee^YlJE!G_olCkJ7eCZ`l)i=9M%B{C1FgkIjS^eU zee9>&+Pnu^dRFikYK&`Y_`&o*0$0g2=|pM2TPcspov`J)+EQSzOHa|eTln`)4hs)< zk-IFYx@g6%>N+&+;Cwp4Iw!8=q>@}bW?4!M)DG29oH5Pf0%fw27FCa-`nwVO)#{8S zGjEzMYiUeeG0chbs)0dcV!?xSfe)^DS`aRm-#jASMXx^2Xn$L{Z#rl+UhI_hGw5oj zI(|#-hgVW=M%DrAs2Dx~khHlN>iTzx2jLKaS(Q)89dQyt4LBi6o9g*>?2e6l-XZJ7axf-b79PGsS%K%^G5C zT6V^8S`orlClI5bsV;NUqoNX6{er8J2JUT8+( zaiS?@2qh1r_d6h{X2`hb`ka$~h0I~V|H;ug$Jj%Sr@E=VuUVS^so}(=%QCjr%Zkw| zvnA*#k2Nt@***X4GYh@7wg&+F7^=wa}{Lq%&}I7!YmAChZk~rPcwbY#!c?aDO4s zY9LP~?gOPi^5MjTtT2XGep;49!z<3n=w!B^xq|L2AH)An>|ld&-;q6-xkV^>8XHoY8{p=o}T> zTaI^e>yyeVl$(kb5l}b;g78bXOhNk!w~JX({bt?(Q2B%>gC7(Ur{Ix`2TP0=gC}cY zKBZum%SAXx^$pvk&`TLHkM@SwACvXo*TTy*1QxFLD%%>CHX1qtiHG{wyx88!Q8!pE zNfh!Ru;-VzJ(@>FqezYQvtWDKqG%}cyaHi1%1ipJ+3Ps8OR&K~lLQs{GY2_#$x(Vf zikKHwF^96L*P-*g)u*>?UdyZ3AvuUV1sD_vxGg&MhPK3idC^cGMeX%T$vO{PbNWgr z`Gb#xeCI%wsd0*dOigmu*0kQ%0aYoO9|&C-#nn9o7A6)Gf$P#ua~B0RQl-4>>^-r0u4f{i8F(hXz>XHHC!- z=$rqYXOd5oBC^{$X^sQ(&n+VILF;3bp?VwT2wLA*EgGV9;2_T1}|Y!Q~Ks0$U@pxF)UL%(l@SWI=eRRXUF-G zz_07U}(s+-U8fA?KPCs3^Ol%}dL$WCoV$D-A5N zMSEP-NqaI3H}>_4pJEj#ESeZ*b@=I}$tfx8B}4i*9H5G#LR^H@(=?38xi=SA=)WJ? z&DtCSk_$BgQ@@0=FPmm<{8P=GMeQ2M0F5h2IzZ=&g0Izrh-#Uk=QS0^ONv25BVNG> zQzP7w?q}EV8vzx}E`GGVpIVIg@_oy`z|f}eq~YJ5Yx~zf;ap;!!-c6Yv>XiC+eb_s ze8H9p*~wEd$5bs?t%tx0S$W7&zYt73>; zX_56HwAOZ$=aBugK5Om~@rZf)3O84yz}yVl1O2NVj>4|GaI4m1vMQ$>AOD%v#&=NB zUbD|zyvZ}oS8mam=JGm6sgIqN3AfaWFt$m4XzI8WwxE{JZke~(oHl6kQh=~VoMP}N*~(~zv6(P=8(a+Dc-+jQ?VYu^P}lWku{=yilk5)n3(I?Hc8 z>p!7szmZ1xu(fy0IaPZGOqkO`q9O-?LBVmc7QEc^0_dig9ujc&1N`vrd69-1i8(Ci z-w_SMd>!@b=xKs!2aHuLx7(cxTUi{c4ffhY$}Ud(eK3j;n|OTOym@tXvQ%`sBs91? z!fr(BL`hR~^E$I-)Zn`vBdlM-aF84W>;wpTDhV@&yXHAz{%4NiQL>pwRBaqU^z;lk zc_?5Xc2r(?&)##oIaD%DDMCF5=RfeL?Pka)t8a!JXb z`7$K_;VH~+=`vs5d(t>Vx(Dt*8f6_9gA994Fyw*PWXS%zbMMV!Vn9UnZ%2!)C zk4uqEhHaWnmPm{PkAQ>DaS<tT>h);LI!#%X}I^lZ0HwtBnZucZZNG%RS5ACZA_ zd`2N`rIn4*pS$-aK(3f==iy6e*zO>AtyVR5AJN^gT1}+EU$C8=2G#H0mrQYW}|M zt_I$*Uq0%%-txG(%^yAOkPMr4^QD~POg7PEaecSq(WLpY#|B?Oj|}oO2+yclTFUI61hs{;XzGxtJ+bf<#K53j7f88LY9c2R;hpgTi`Z1qkRYLmvFRV{H zSmYvuO6>f$vqLzLwB9Y;Gc8NUQtT_~xc}&6DJ0>iTd;bMaMfAKFFmn7IUD^x`Jl69 zfLPfJD1alD@HonS5A)QL+ENHrzW{GS>F>9oXLekprX+zNx7g#TGpu6_oX^$CzFBgy z(j*m=BEbfzIkFg3mFrU~`kYI=v+BpV(JlQ9?LpMqPekMmEKzH2@cRf~M)QJ&oC;iz z^z8Cz2#Z3)MWSylcr=@ZXr;4`_4{S{+BRrOpOv(@iW@narU_6ZE-5?)Myj(txB6cR za8l;X(dJLzQ_ahnIJt+ktXHw&miNiIBtwwt>}vp3da6CtlRf%(FJRN{LygqY9U3LLNeATlx`2`>pwC!5i@}1Qisv> zx|Rca%XqE&+mFeHEVx@7D04Z!@%`q=%n6k;)GKf&&fb7In}N~1LU7#_{et1I@%u+( zw9(-gTos_rqj8f9KY5zkPZ9}%Ztpwl`16{hVdy_7nzXe2T*rFLguDJ=(!3}rF!>ARczYXaX0l&yHdhN z6=)}Ypgo>irJ&ecs_+9XnIP0XmFknaAR6LB!?$vRtyxbd%+y-4?H}n6{&v+L$M=cZ zDBb#mA^NjlUHWLgr!;?0X+RIeDz~0~#Df*5M$5zKGL#iGy0e@99>5Q^3nuOKw*~6# z4J%K?$>vax)!v zoM(KOggA8dvbBfV4*^TnhfJjbe~|!vp#Xg`2YtZ+eOaO=Oy0zoOfysq$|g@FejO_1 zJ`yXe+MT`C@i@=Wtk^}li7Ha4+6LaPAjBS^dB5677(0MZWfi);zKbJW5jA&j4c~7; z-wQZUd`cbMFq~d|(T`p`g0}}^UK_uQnl6KrQ@_AN+iAHK{X`9~6pbx+eOQjl-sR@I z%3Xlr(>Q5S*ZBJXy0PT-_q!-)-~NGb`2f@Zu0&)8VA1}kg1}%M1QIA^>tI7~Y-8x` zyr2#1p{v&Lximr=KP1I1_X;CNL}x2WZaH^bWSMKpY+LM^NNOud(|@whn(4+IKPfvK zM8iO3FN!Eeoj@$D6cVGJh6tmH7S2$W_qz(_G!Qn7m|u{dI;6_=+w&XmNh%JXsA77gSF$w|r@4)lZLv7u&;6)S-X@+$N1;9J<~aj5QEy@D1c0CWI8 zPubEaW(j83-(`ojcVM51kC2&1Y1mg{GAxEd`7yKYKKlBa<%?cTH_nU&YHivLw%U@g9u3$$W{63Jsf*~)4}VgD z(OU_9!tQ@D;62_wDSK(r>X?ERm-EF|>m~a!j!T!`wWBHWkaQ2wPS6z;Tn#}}v13=D zsSoo49P$Dis(|zw>E#_88|{tdn+wOQG*$Xu~ zRN1T}36%r%Kp-_b^uP;x*h3Xt0}jqw+hViT8b{+O#ziKMuJ9`=+JSH@@k0WuHK&^D zC^m)WqJ=Bltwo2FAVsI<05VZ0p&>2&LLqe$^nwxW0aXbT4jy=WYQSs<0ppUJkeV7`pK~s)$ zc3F)CUtbVbjIZ;zyK@uXdyR!OJ{8zfiDtO#Im-7ovQdCmt|fq&du5^46%rEearD7P z+fu{z1=#SL4)I_9Og}r7SkGcb9ykuznw7%xk?CBMLEAs?u<3QFyY`;VO@kb6#E9oc zcy*4kiK7Qm?;gPox1!(i%$5Gy86vYBHAf? zbh+$!0!sYkSXIk5L*VD+JiI^gMegmo`k{cfCBS0+fUDKLg;%iJ5VyK8x@RaN9^`$4 zK9E30|3tj6<>N}KeO#B=FnaF<#^ikjsY zhd{Vy;Ata<`K-h4uK~=9V>Kkf7{%I!`;4Rw5Ol}#!=r*3+g6etEC1L~@5esDj9@*e z6(n_}SmfeYKA$PG^$XZ1PvXss-nYMD8_RvDp>t*%IkW(GFxM zt**q`p{Qu23>Ar_a3NjlK_4u`zJ!YbDdM*n6hN;-~kMLHFF*9k6Oa zGwDw;%+Xc}%vq!>yXX7IYHLoH4(tMy!bp+vka>%6s%oi`{+p^df;(c7bA!!lU<>`x zHEN(xt?B*_`?-c=GH3ngRDVbFGJ}w^JVl{Cs57=co0nc=EBcYuuJ0+BNC6Fv_iY;_d!&R9)BjR zQiZ})I`m|S7Az`{kfhQ^(XZh=A61QfSXlTSRxC~iNT@~(Kh=5N&&M3UxbX^8W_K4G zJE4dj8KOp)afS_XBA;cPXgTHZiZQ-1&Sv{jklNZK>JF)T>p2|QMq;2a1NYLYvl3Qo z3DcG%iAG+AOf8CKUmL@&B&n3s8c~@F>4`tGY!aXLcP-zG@dOlaM0ooqQIfk)4W_F- zIki?G`&G3Y|J{!by_9f?Xk16Dy@P!Xh-oOauJh$qipDp^yxOA)$T^reYl;J_cDb-7 zPC~Ww?>~hH81g%U08&?9z!DD-2JD>E2HPy3E=xB!1=?_tG0_~8u&84)GzQqrxDuQK zVsaE<{w~@LhJ=D&d5D`&@vho?mciWpGj|)W>o7{>yU+ju8BD1TJkr@DHSD|Az?p|X zWUqEVp1^KR;u-V~dwc2bR{`nB{jIrf-h1Mi2>^Tp_S8?;=+D4C(ByJUtv%8mN-OK~ zQd?l@X`tvQ>G*-NUXqW-fBv~*<(ILh?wgAwAW@`(Hj z?X`olO&XLOD=Rcopp)7ti5hA?t<0D)Mb4N^OZH;C(MLQXxw4&mMQI#HXx8ru^aPOn%R&we*KOyc>+EUcZ5 z`Xi);MW%F?^1`5-)d&!Xi#jbv?K*O@0{8J_YGZc2ak7KRi;|-JkLoJ5xprgCm605G ztJ-YHTs|Li1$-c{KWM3uOxW=E$~F(i+dhfSS2v&>IGAZ91(*}%QM*-PShK#Don1J# za$;+8Z&_upvU6@|LQ0^s){UjdGE#Sr_36oOLHHu8(&v)O2F{D`Q!Xn;VRJ%W z$E1w`I1Z7W<#tPe;(?UNm%g!C&clGAcJgZ-{>cpb8geu98)oagvjSr4eyZAH;KYyR zZr>b?@%u4LM%wQWHBJ^4jE*TiZ9~xL%;iQNAj;ZWeW-O;?pb8i_1y}iqAh^h6av`mZITI|c zKo#|z*^kYM0A%*l7bNRmGipOU052kbwZxxjB{au_{ZQ*n#jj2{$)#Mz)0}wwX;ciU<}xGF4jEqFi-8GsIWHTDS-fw} zTgzWuy;g~}kYPcnc?9k9)^OcBXy9ND1nSE zq9~XWFp(Sc+s~pRg2#j-pZbqZwQ)kzp!&&u(oRmXbMYN~)@%~&Jhf2HykVpOpPcSG z``feaHj~eukf}(Ye-H4b4jV~-yg%ktj6K;MQ4Xg%f^kju4GRS2F^!Yr3Ndv}hIb|1 zo{iirG5b`8bgAE1yS_iD`tXr_dOZ^1z5LK0i|Jd^!IZ)ia5X^SVwV>*#s-G;O1u*K5ZDjESmYqI87S*v~BLU4RiV3 z;le{U*W(;YEHO0)ss_nRkGgIDR__*qZ6Wr@1;`%y-Zr!R&5?5dc}M!7;#+r%iH!@d zMq*)A7M9N<$=_e_?JX-Dv_Z+`)e}xW9YdWqb!mx;d%A>h9Tjfm|C*Hs_IM#iQNBiv z?pZji^ZVUB84fDBxZDaJrg*T$un0jMmFsCUHAaCPbS2^8L zdSbv}k<gpQs5A?Yk9@^e=bXe+esj3M6Dw5%T@7B0% z)J%fGCj@lp`>6rare0CKVHtHUs=g$qp!7OT+a@xvxpeeS7&$7e-j%TowSj=TMO1kr zXV*8(%Y=pV#y5lS)OXm8k)k&TxL8jr^uRyq5O036@!e1ZWqIus4W@2zDntAfC~`D; zh`Vqq!z6hq=gojw-2~)AK9pYCbhtwr++!-}!&3E>C-Pq1G}(mguDB#+ac$|Nf;`e< zAbBAhsOqmYh{92(_2f{G)@gt81)}UzSLwQlm82X`Ha!wxZ`>YP{GpYK#|v#cWK?mi zPCmHir$@`di4#wPa)-G>$z~Mv!XGQ?2Y%LEF9GgUFa7Rtssv@TKu=Dj!>EK)02f_h zM14Xp)k3;ZBkC!gO!=ma=Fj9JrK<*)O!^AE41M^tV6Lgv=g!W35P*E8V!XSZa|@e; zbFBdZf6xqYbif#MtlNPVn*NYXcfgNkSjv8= zy>HTbPO^eG*k69Uo~O68v@|&LC_EA8#IC)pvpcT!UgWQ{+VM1B?6^TU;b5M)6ZAX{ zz~BRu#-jIcD|CIxlaCIZ1nHmPlFvoh1>U7MKQ-u^B-(uF?0*d(y<#oYbJ6>Cs+7b)s3>NZAJIf&0#(pKTD;E+x>EW<8MlC?ik#101*bCEHn1-0;`VPRtOf2GJb{?!f*bnWO|nq z8X`*F!|xF=>8+cAp3CgWVz}fopuK#+u`GCy(fE;|Ro0O{UA$`cVsGLi*0 z^BMMbkR*5xL$wbE1XrLOsz)lzx4*YSQ?NXB84Yy)h44a(yhmoA9lM^b_B6hQdB4}W zpDoAC*)nG62r560ZVvtIC;FILRoH-zX81BWEC~t&@P!U%m`dF zf1p(VQ~%1L^pF|JksT1%l14|PbW8hQ)SkvAOCC+&2P#7v#xWcYxRG*$r-`%SCa-Z>5f8c z<|pKcr3S-~N;L~oi51uW&`FHnQA6*kPRP}u8v3j3yCF?RuTka@SPQm9v(PN06{M4> za$|Yma;`Ditv9O0S&|X?mT-WnZsj1U6^eAAD}##@*>X~n3lhH0;#}*zPmvDv+=fFi z3lcGt$}xVCkPSXxsEeX^*R}<=e|1^YV12E5PaU%BkH@T8u1_8|s$0?7;TD__+u_<+ zwAr{kiqYV&~@h0YJ{F|g{>YJ_a$c1h|q+~1!LJ75eKuifaVQUD|Y4?Q{vpG#C96TbQ;HX8vlO4R}Q*|a*L|5n$vQ1 ziUlWwYMTu%9Hq}F3IIA3ArEp%gV7}TWE8_0G}Piej1DBpnTm`z;vB1(!C2+!oXo+! zu!JOe&pM}L**nE{sLlZMAl0%>$*0nh<8KN6nireS^6hI1>|0sI8k!z4M zwwho!csrM3s9wkM^wN2RuBrMCN~w#TNvn_!dMe?6rpd;#}u(B(8(^q}F*Yi26r zS`8CUgQArI#k>)-X@jH0+C0LSQPPgSNLHsME~*jJK~bYfRx*?#i2%h!9!7~4l)_OT zRZ4dzYe?FgBRG^#-0^&XE|~KDv#`S#Ya@Uwd&{I%FVD)@v==M+*3^XhNvC90u1xo1 z2JiKsu_~(9FQAwaWUR)uijs|jis_|gLPS75(t+a`xlpJrhfgZ$Yya^;~QPF80nFi8n!h{yk^d7x@1>0gml+0uzM!@naSLe=)_dd_l2+1DbzS zRfn*?;Av?`b3zD}=5q`-^boy=!mvFnT1WeS7_rF>*Xkyhx4An$`F+PnLp>XdEUgLB zSQ{HHZ6htkA`>hk0i>3560h>#tfjN)&#k$+thqV+%gqj2_akCq zi-V>8F&m@$N6FAu5i#tFT{9=pDP~L&FFe@Vc*eojh!QDsUffUnR3-9J!b<0RZ5UbM zzVrj6jCsFGg-va%JLclXO-=~EsF^8|gdih#P)Th_F|W|`4`V$8raE=HnqDX*33Ska zEsxI6%Jep!cRKjb$0$1Ai;a!>eS2n|){lu#bf7gwU$0rN4z$?(XMi%WT=Z$$owjQJ zbuE!kT6acRIumCOGl>iCYrE+~d}= z!1RO=WQ0=~|E)dOv~?}(LOHn&RMhYHRLGldFJuq zlt{zQcrqN49?{;KUFN6*%^pS;H$fGzwL~a7y=s9xQ8YR8l3_(4VwhMyQ>B}r21&!G z8C!1rR)vu!LpCK>MWuN)@+^*V8onx9u19g%6L`JQYI<01U*sC*C|*-N^ibpzGi{n` zL`qm<2?~f6p3oiZ6+8k&yhwaM-gw;VDEW4)VE0;LG<@?$WMqc0{!ft)o=4cA(hd=A z#a`-*6h%#wM$CO6vw;6Ai94d1ip7;#U7Z zES*6{cc}4Td*(yg?h)6O(SPt0aO+?gl9<$P|ZnpsV>uu(+1ZsWQ{ zx-Kr`d@xbo zg2Q?^5wonYU5Z%N+1kJw87m-WPoz28EZzz^L54RqBEB}5^Ae+044Uc)k_$mbHG1!z z@!M6Q>cGA`OdD;y@0qdJ_dKk*zmiM#$q-vC)9vF2+{^cft6B_$?mJ*YsEXc0vBN!h zCgmTf*>24Z?x`eypYZ_07QG6BJQ+DO_H}}{fdI1xd6HzALmahJS$C>M`95J zW{Kt2vp;VTX~n842*ZGO%DDlSAe}SezM&@|DUM9Rs)~I$bkB?w_S~DKI0*b58G6=jLM%8uzt-?VeMABnr@e@AsDoMN@qu}r}M2ZYJu`Z=paA_yf^D=>Dpu9&lHhSU-`5m2$p|A_{;E`L1s1u=_g{RJ0s9c ze)gC(;x~EFMM2UtN8G`ubxEDN`4^Y0TFF#n{bcFl&?|ZlIDk6&D zXK!lYoOsP6I4v5UuytduD|VtFfmCTqB*1d@D1DUy%Xq~`mp#Wjp8EvGOjr+S-b+nf zdFM_0ef@?#v^0l_^IZF~E{LH!w63J2vCmkUKnoTXl_@UG||8y9z*!mZri_QoiR__6}0a zaLDmkD0ps9$Xg2CrJ@p(ll})Z5)SKA4ttWJQs-1|7p0`9Kk@)9Wv%>qX@o^WAZWZS)K^#9ixd4)OXrEXOLLt*@(XGQCk zmnMzRzDuFV_QYkJ7bq@38KHEmCpxCKuGCo0>*QJbU*+^4f~Q3dek3O z?JVGi_58L5jRlQTxBF?p|5kg(?^LKI-fWIhmF` zKE#WtG1JWTcNkr?5PNJHnby2Pb1W$@icW$=$CtbjMrXy!U)>Xk93^I*E@qA6BN~-z z8skV(%p2`9FQmX5KPF@3TXN3aQZLn9kvG3>OhsR6ahn3$m(-MkcBNTp1151^Z%3j1 zAX@Hg!DfhdXUw)10nr#pX)A`a7IaYo&ZB9aw&kW(-zuw(jx`y`Fv~(M735}_MC3G2 z>fFD63=1bidUgUVO^%b6%1@BA?n<5oB;Xg^mvBDm6Y1v~p%NH-z}PKOHP=o}v%l95 zM}?o)5x->&cM{ezgr3t7|GA8)>0g>$ru~O9VS|C{_FZRn^kxzazqH&iVIi{4JlI=)7B=OFePfSyrZvk^uhV*@Aher{MCf}{58mX6fNiX#RmOF z`@T2~4BisS$fV~+THOBCqH_HFMY37s^b_zAIx3*@vb0Y1f0v#A?f9ajLE={4{`g^e z0-D@o3{H}qlMVu&+!zju3QW)$Kx2FlE8vK$8kMfX~xt^6}nJ|TiwL4!e;w0SH ztE6jh(=O1%5jjTGw#W^{7q%d}M~BJ<6IS?(=tT)FWdR}#i}%@bXSSK{X@5Wdlzo*k zb>v~@x|YuGY<{`!`QFxc#Rg|=cB3*>BWs+m4G^=gv=_5Bw#~0@0yZ?QGkl)wuB8ar zE45gwd5Q&MGR-Y}9Bgk38V@ZlvRN<6=F`r_G%zWiI7#U=ts0e|=-4z2BuSANaz+Vt zOJbM0`WV`^Sl6iQTVsz%zxhoLuwabapvLB+7;V;iBG0Bx5xnnJ2Iqswi)v>oDD1EiDTmqXgBgiD@X4TFFJS@ZnfxY|&=VQ{<_9gB$+|xQ2We8Od zGjIO?B67<={8brk?=@lYUw<$nh`P9yWJ{|lLi#G1kJvDJT^F zKDkn!<};|+R$J9O>8YwJXn`5*k##Y)@XTi}Auq*<;8)*jmqf3|Q@mzlguujKyVMoW z-##;71!_9)zh8Wm)3`pMh!|9e$L(a8JdQdM0)zejp;L)3(bzpwXQmb4BMe5TW>k4q z&P*%eLJulccqeP9CuwM$80_Rmf$V9D7PcYo_C-VPfvI!C{k|wwCoMwh;S6oS&~^gd zLbE_B{_9BnW;Ue=Ob+9QkC@Z)FOn-|(j+*w0y2ANLJw+HY&`yYcszxggxJGPy0Zeh zA1LAtcp79(DX*%XEkrg*I)h+h)K1;2Tkg?5O_nWq(U^vA8!^%w3Um6(51SgigIbbb zkDep46_I?BVQLWGGA$;EGj)>}j*>5{u=aSO47O z_-=Ee*Y&#p#N=Qe;nl#a0JXg24NLE77NbvbTlLf!zSw4Gv@_5Ai_*+e9NmQyu|@0y zXbC)X^5nqmil3X^oN6s+^?S#U_@jkKd(@C0>m-2rt7ctUm4jW9s_B>C4dU+L5)CWa zNBF2KcgwW>Nlb>P)N8-1kUcSEs=ZGnCA_n1PR;+Tpt z%SgE7lg1dCy$@L-b&`U4kps%|of&g36+dMDJNj18f-JP&kb=1Rlo zC(M~6{s@i1d*nd@O~fDgh^3Vp1>jO^nXmk(JL6|hu;QX0+P*-~GlmX8vLbWG4fu?X zX+^vW6lH%Uu5#7{v@Zbcv$Rq4|Gw|+4r}t)KY+79_sQrW;l&~qCnbXnP^A`Zw zQ*pQT+y1m8xD#OHH{ZgitiGsBY!lhIlws^N0`DuTcQOchgNU%-pjx6yX&FuKf}Ar5 zR5`(@WjkS~W3*NO^BGsDm$@;)2~2@rbZT)za`r`u^FY!Ifw5SJ+9dqtw z1ZU7Z87GkpzNKPhEQ}oHfwZyXGo(dm<8;fzdjJ`U2DB8NHj*iWLWb+Y z69c=mDBpuugC9+NDLmKgdIa;(Ss;h<5kJ7spxi*5H5RQtyk=u3z?_rPL$oQ8oV#tD zQIzH=jNBQY4C3=OE!0~v*nmVEDB~TPbwXNoY-h^O{3)>ONmN0NsgZ(y=)Nr+GPF@3 zAi5MO;Txbm@|!9MY*B>#5ay@M zo4?HDP~r7_rc(u$Q4v7u{s#b5K&!vbDyLpKWT;waLwJB>5X>RgaU>F5e%63_s3<@F zF&)`qU>?qvv~FmHd#C+sI+ zp2*r)R}+Gh!92xXD*Gd=j_#*mf1bvQvfQ-ooB`&UEbl{&iYCoJ1M_T_FOJrUI2X+G zSXWtHtpvNu&%wNaWd(6M=8M3**drLIg`2~rU|z<0ibtRmb2*s5 z&up*p>Nsu%^ETudC6cU5${k?d>8>kQQ-KScO{aH(c{giUsJyM{$B%0}@jYPv9_c31 z>1YLA`?p7JB$@Ytc|Ys&4O;YCd4B-&L6*EVE33Vgd9~Vrmh6vUKJ4lP%_trP^D$N! z19VWW)%&zWPk{L(Bcc>df4}u-FrQ*cqQi4vwVw`$TC!)r{ENHSQ0b~-wind8CG=mx ze9qw8BZKu?uZn#E%okZ}tM+JxzYOLpT!*W#sHnWJg83R-+vE0!ih2Xgzq>kit-eY{ zy$R+&*(}Ni_|Bo_?!cgHSN{g{EndfBxQ|$oz60jFZXKgwT@(Bdf0*yHk)(3y%Ifm! zV5eq^`4G(ivQAoCelSjVtF_gpdcO17hrzL+B!|~s>;e* zZ?{%QFuw-#8>UV4pw`zt+nob+l;45*J)>;UuF&XN+tFwMb5Y7L3R0gE6Be^dg96j*6h0SK~Yz{;}p;>g+|hDA-ztUOpPj54S#2A54%5v*an zb5 zW}dS)0Be%9A?=E*X)j)0?WMZ*UNo<5ZFFT$^WALc9nrY)e{M|%Yh&ae%{B2kwBlLU z@}wZu6tJcuRUTKSLF8s&ZH~xs+M!<|Z3Sx!CWnu|3UVv3wnpSgwT~+_)4|#nY1RvM zZiQ@nuy(L^G>s%(tJEu4QKn(;kC>gn+8HsKYNH)X9Jh}v-H6#0tlbbpTnq(Tv#i;U zH3zIVYi`qXe;9EDvtdVNMV01xEtTM(`Alh60YR=AY5KK2z-qVlq*~#M%AlYyjcqii zIqQDW{v-YNpn@m}XzdONNjK7C>vBKov zpmjV*tGa;{OTpR)DMnYlLe)_12iE>bmFTHgDu-1te~mu^>j3LO`l*2-n#S!lY5YN{ zPFn|AWye|$R+mNVdi|&aCps))`HH=paxZT|6tU4J;ey2zkXnE1&|tN zhE9k`HycKYb&6@k+0iIU`6*bZS*M$Z)2IwCf1pzsR=%bKv$UQG)>%lKM%u=rI-Ld% zMfllZor7?~;7dB%v3Ab`>wK?vJBMhtaBGxxtP8-p(7MP)Nh>l;{5r}U+wvt~U20uM z`(U}dJCIt@hDiQr_ zf3U7Yv_sLIgOverOQ|tluLdg_YrM*CO~nur7ZFY<+)M4tV7-FCq)1c=p|67Vnpa$6t%Zm;!1_BPiZX&Pun_+y zSpO9GS%I}0;{OfSTO!rIs)m?%zVgVEq^2qgc&qe|95~ z=wq-x@sb_b3`YECVEs=tTTxtJfb}K9hGR<)Su-HT*I<2v6vHsd!Bcc3_ztY^McO)a zJ4KYpHo>+;+JY-~#K*vni-xW4I3m^on;soISWCW zJlHLwAuJMGw}>c$Jxuf){#^u*e*k-=M=y@M5HT9;^+Z|C3Z9iA!TMm2MS}HMx6vAW zAlZ1ZCx`~*pD80|1F$EFPBh!sb`iA^*po$KXS;?F2;KzjDWc>T2Fx=MzbV+8i8O~) zPb8QIcB>fKW`?)Mkz`A-w-Qw_Q`xCU>^5Le_j2RuqlnoK?CnMCTNK($e?W>I!JZ*{ zu6wkC(4E2FMSQPQv8zDrZeY(8Wz_B;5Fu(d*mFb|Ks5(pbHUzSjC6sG3PiVqy(gkK zP+P8Uy9mkWfjwW0sj?D;xP@RZ5;epZoCxj!yHnJ_yx=J}5-b6Gsi?yFfwL&Y?+f;R zqL5tm6QRq%{*fr8cI8X~f3XLGT@r10zBs%_L>cVm-pDS_I1tedc14uaeDy#a(JR1S zDKb7^I!r~}!CsqJ9ka5z=%W+Sx{$qrg5|jD0h8y9`KlEZE2Sf4x~~*@!s-?4O9F zds;UlP6GR6uYoIyxnrMd8dIBEyUh%q2@v}sD#G z6$0?p;{N;ZzwWiOeKy$V*yozYhHNSfB(Jo{J^7tkU%?E%C|UEhp||RuLG1I{>6^lf zAG-kT3vH}smQ`t)fBr<%?D|q8^TL)lO-UpnVH?K~q`f^tK1VBc=v zLC5`dv+z9-KI5Clq~^&KOI6xbe~X96Y7VhX?gsmJ_C2Dhdf76Kqnb8VKkq-JscM>C zMDy}xJNCV%F(qQ;QCFnIzMs~*W|3?E0qh5{^{l5^1eaU@vHxfq33uLh>_=$Lt>e4A z!9GT-A~4E5e*yNB__gt>wpj|N_s?hps!8wDU_XPcbZkIENi^kBsfw-qS*mrEIS3ok zb6`J@EeIDIZS6?$qG^~_6!|jPuh@U1Qvy|D+q|yz|Ei9?1h66GHLzdD>`n@1x4nO0 z$k%OorvJ`bs*FGxZ-V_#lo2fSfQ$yQ|ILiJ6d($Ce;e#~P{4$cfQGl%%Io|+T5Z(; z)Un?;jZLE3jC`a)>`+ugf zdGq9G%ms-31zi#9Fqp8f!2TK&hKo`iP00r$`L|$yC)QsxRqF*3Gw2GyH&}3DR%FQq zxno#ze=3lEF_wUsg9+R?{KZm}OvREAOL?lAu1I2lmOvVe6U&-LYx6{FEdfX@Pn8-y z4wF-WSP`=@l_|bDDmv4t7KS7?oXvD9)QOFZT(Sji8Axn2F4=-$Ow$;Mt&eHiG>|4< zuubza4r1f6Xh%2A3yDoc3x=i=CP8dNZ^{pSe>qqXPHb{?mIM0;B(@35a(H_oHWgx< z`X3GulsKf)?Fri4x8(PrD5n)-TX^$8GdVo7TS07Vv0_&-(;>EPPzrXpaE7+WZl&<< z2(cN+yM;Cd?s(#X1N(8YogubMuo&ovU5#Gz`Q1!oOf6dEEQrlUky|!Pk0Lq9-3GC_ zf8P3CNs#Ol33$gvg0!LfDn2TlJb(wH751@l!u&_ANiIt*mJ86|r5-Xd= z@MijHtP5h@-k_o*D!EX0EYIO2)xEb!CU2sf zyf9ITt1UE9HM#`jwxp~k4uM$Rn})Q!i|LAu;)JRaqpD_hP=TSG)eu{QayDry$2AI< zW`eb7s-*&**x`{YS$}(y#E!s~tg=fUI|^b)V7&uPV86w1Xr6DafC%;SJ8eT9caa_f!MY9{o&F< zSIJ+u#;!As0+$6{IbG zun>L-Lt<2U9@zxx#O{t-dxZAoNsMaSExPUc*u4GUVNrphfY%`Q zx=`@~0u~DMIBDCT#HhkMf2^j#ps+U~_D`Xf1%!3FHgZyW{_Wm=RG?1mZNB5wv`lyv zy-Qo1q8j`MV(;U($H<4jfkHsK4 z5*gwUPl%%#EdhaeQVi@N0=`6))07q~%@DB@&qNJdvx9diNjyh~tq|CWw{Y{BCSusZ zAc+@E!|_iEcTzK_-Kf)hudAu$iUrpBJuUz+iFGiE+ffxVDv8>QL?ph0X^d)y#l*~j_)eJgf32jWxgcF>VZFMd+F$Ms zv+n}&UB&iIfT?+!W@7hjDsnc&=b*^e$P{7kUL@U#Vk@xtT!?$8%!||;Q;2Sd_?|)s z3!o#CJ5Ovks^4?s3!;|Nvo!|6B)*7NyAFe?>wtKt*tyWrG)*EhFM&8ay&e-$Y9zid zZ4J#XouQQde<8lio2PY22nwV+bXL9Q=EO@;>X%gHBu*9PbfAj5Al~gwXWHsvYE8Tc zr%nZi+$$ko^`>2kTQp#ocNOizH3@>8eGu;#s+7XXCKo|90P#bRY9v>u+;-@<2@-G6 zp}FSqIPsx%w2_c~8i}uQ+lbC`Exs1whl!a`M^o~Ff2gI#f6V-KNFXPEWYo@cz#5Lk zkEXL#*hDUVEX0o!Dt`c7(&y>~yaT4eIPnuB7h|4g6F(UjW0D0}{8Whl6caIOg=9e{ zE9xYUhLmMR!H=H_@w23w=3M@zaV)m8(NtA}Am6zVKTjIuIUmhPd8l{L^N-=Su%FY+ zc55&wf9FDoUnI3rE{AUra8nNwM-8{Gz>xPci2p)tFZjIfCV|IF)!Ix$1|jFKAbw?- z)7>cWIIpIhgEGj8UmK~@1U1I^b*R$>RmJ%A>*xd_s}B;t(d`5wj1#|k9qm`ylZ)T# zw%@>RT>N&3-yyYMWgkwTpx?UfSCgQ-BlS?7e*+K_zX$bD9m^xG|1ea-WWY#2=wcO+=CSV^mq_ zt*ycJ_7n8ap@9LaX2ky#Sv#ux77~97YexlQE}nt-U%alSqD$Fz$p`cp^A?t?_|1Yk} zN2{#ujiqRs?0%5ywCSo3K(EAjIaKPm(y* zT5~lOi0t1%{CiQSA$I9(jnXDeNLar4ZSbTp5u;1;nvO3433dRxzU~`Bp&^MRZKE{> zhRkV5fY|p6GRqrHi7XvdYXK+<$U~wY1FT9T5)t|B$~6Io_LVwR@IGZtZEiga@z(IyPQ z=gXJINn&?89MppJ?U2~BS;hHQpd>L*RGbe)_63kw*eoY#AWjl{i=5z3Wa)&&;-)OF zooiw#B=+&_#)WqdlGx9a#p#wo;z!Nu$TQI+i33F~crau>2omMy%>4Q(e-d^^G%oFoQZErtI^raB}V&FXTo zcd-&Fhaj<9=-7)@_ZcK{sHkd{=P*bd-YiLCc1auoi6g}{!S_6wA|*{{iK9irJ+5OR zaa^+zjhlv(#0g^5;t*s!e-RQVA>$+sr9rnwNc$T| zTrVc%5CKV0?Vu&(4#`Q}9K9+MuAxZcR<LECDilRLe+r4myrP#yAb|&{pq`s}0uoP(Zs_lEsLA{@?dF3jtCM&-vh+RY zmL%~PEPd}ce)F%8c+P9j9;W2~>1Gd4r@9pwGQR|gm%YKoXI6G@5`TlltKpp+H5IQz z;tg+}^aZ(P#C}$~N#Y-hR4)QvQ|3)2K2+NoRUBf%l=RSqRXSnPyN}rqATP-)*sYaOi z91U{$FQonw5?>+pNI7wpuHJIJ(v3GqNP;fdp<99=*LRTk9=X=naCNSvQ#NCDOw3jg zO!*xfoS0aip7*9eiAqv3X=qxrcRv6e_|4q$TtCJis-nC$bcc6vne>6 zi9<%nS1{&ThhXKT@2ReL&RE^(%Vv#r?F4&uck7=L>o z-`-tVg#_&g&J2yk8KskNL^(Tyvy14R9zy;QadvYnD9AYroY`U#rhXt;oNeID6^oZ( zaq>cwe@b%?x>~Dg&X!mKz z-E%QGOT-)|=ojmpJtOfx;Or|_T1|=e2WOc$%h3{*yq{7@9DqLGnu#oda}aKxjg}Hw zYNIn8J9l?;wj4ck%OGUz2B(6Io+#7%*djp(7WS9GTX;FD_C2>~Mv1EY$t#&J%F zf7-om(>b#w&WW@YX;GNBlfgMfSTSmeN&-q(-e|f=oS)L+prQgD=k%zZ_t5Tzb0)3F zAQY4HGjPrp)j&ntntw3AQlNWKWf24Cz2#o2u8k}py;2R<+afr~honO;MYej)M z4qn=cND5vqCe961=WzdaoSUN7*3!X(a|>NtE9Q01ZQ$H4loiRYPB=aw&Yg4t*Wt(ry=`c7TVCEvQ;8=TRUHaN-3!irLaUNQxfdCTe?zsM zgnN$zi5~>#Asmh-tHh<*D=S^AywRXk@&@yVaqC|}66aAW(mldLk&lD(gt*`&i*yq? zSdoPNiIzfzgOT+qaGpliDFIeZPN@`h=|h~qptnU`A^jCK;c5e0fa5$LwFVdG8qSN9 z#Xq5NUIynCvGx!r6vCap$MY&4e@>`CGRrP)&M-oUXSWoSZIh8tHVssM% z%;g#XiS$_@Ii$}k^myz|TIlk++HlXiNfF4fu-t|9ZmRH8+7V1H|B3XYfQ$~)FLJ%Z z5i*9+^PfmR7RWfERr>TxfBLJ3&?%8jU|!e6uMOyOWUxNON@znM8-+`VZ4zN$BO9|4 z62FmS3XrLumz}_Y9@z{nO*Kb-$T$s1tM*uMuKJz@(ryW4EAbHxdK)0q#gS$JU6Oxe z(QYS_q>-}&kR8QBT9+j66%Hic3CPakyhDfI707OZM0t3wc!(ZFe`bljO`V`QK-z>F zsHCbxdY1$VcL%bE?+nSu5wfSR@u@8HfXo-OZ9sPD$q=Mp2xO7)q|$_>14yS>6KP1q zRhKR~|4Z;CqKMD#17zRe04+>jC9?g2EE7tr^u<77A0QNXmAM4uAfX>B-&ia^(SnrA zfpm%OkPxy0q(`j2e-)&fjDX(Ljztf}AA6E!E?2NaJEo0P+*DOc7LgftPm$Phx|Rf0NwHxgiXSIR(h6LJjrB zG-j9UgOx_L+`p(^>mKT&lgMf8R#^~^BF+GEW=O>Ba=-h0OR3})-Oo@Z6L3P#p{tc1 zKilU4IX@)ETO7=-)l0k-F2Joo369Jc0l7HD+^)&SrTE;EHXFYHayg3FKo!CN?B1t3 zxU$+W(r^Xae`!;3DC9~YSD}!JIw8Cf2pQKfHxofyFY;?3*NGeYk_g|l#4FG1(RFed zfkJKsa+BDW@PtrBUhX|~*`Mi`LCAO;klTez1&>kl?K{QL8~pNJK<*CJglKwlYoJO% zvM%6++{^A~t1T4e-4Emel(&gi-rRbvk8fU-O5C)ae>}+ipob|4`6I1;zN^7y@of?E z2#`m`(%t)vJCZioT&c&~Qqid34g`vS8VK`LA&>MW zchvIx>9cslQGq$+xv1;&@?0+|bmRp(yy|h7mY0CM92oNgRH}_1^85|RtC;?2&3VMV zL&ZFhf4olHXd{ep$ls%kz5nmgwJZIKos%`kWa-F8xrFEDryfSyzfQ6pLluqZb=)GF)_D?Wj~lAek1M`^_o6%gatO6LnUntWZcYM=L-9;TKyVSqQ8O_=-l9 z%P>d|4=mFp3QtK*QY8ikC5V$89d%O7soXuoBpPDL5d831NRA6A2Mi~gEzWJ6o$6Ql zf1UsoMQi}cNy5ZW5rHZtGiWBsjkrq5ej?MxkldsRQ@iW@nIxw&CjJwdHiP8mfpT=2 zcnVwT_{*+#JIO6+SvD^gG{H)4O_x*L`YJgclG}QVE($Bnb>F^1-1d;%!E-k0f=O}) zu3mhaogul4Fo9tFl7B;z+zpj>#o=Lce-{ScT#D4}j!>!ty}HiW+p12Ssk4e~AiR zj+B%!7d8RiwaCk|c2 zi+2AVsn3TbGX^Wj)b19$le{o$x@+%I8sWusx>GtT(v1HuNZu_*HsxFX(RA`2R3TL$ zvfc~H`^0vqU~Ra6%0J1y^$;ZUz zEoWKky&i%DPeAfX-0XJ^3FUW1NRp~YDgUhzl6;zuz615@YWE~1`4>n&EBsG#*~=Wjh#)LS(7AHhekH{be((`lJ5zXrU_X| z?t||`@&jR8(Tv`Q^DCLj|1u>;g`%{NA^8c`|7H==LgJj{XHoZ{loc7?9gzS|^2_L^ z5qhPNB)?`&BZR=@e}4m)UweOZR#mlr~6kuaTAv940=q&lMZe?o5UNop~j zu|r@dwKQs?ny0={PEz~Q4io@7sr`RIcKLJaB=sXdf4dxp**y?ar9gH$R%EyQ1JWs8 zbtkDVKb-=IpQ%8qN7y(9(C&BA_ARNEkg9rqRp!)&=-S#zt%_Pa&y!z-Cn>7(WfTy8 zx(2BMF<2-_k->Uo1_N4RY7jFRQV~+z5}0n21;1Zz9(UnjE1A{8LApA4x} zL~VxHnWbb39p&|Tzme&5NS)F2o4$Q!>MZY@vTWh+d5u`5GG}yY%FuYsQwkmQM3QsFS+xhY8`@RqA?0 zh^NG*ZiLiLV%;9ZYm^L1xiytI)H)G>J zf1T7lQO4VCKhtya92&sp$ zEkz0}c^MO%gsDeqb@c_HPU`WfU9tJ0Cx1!mNm^N9xRd&G)TkMFHHD<8I+_bVrIPv! zq@EQWG=MHiHAl74WS{hOOX>wky(rX~e;}V{Sm*(~RJ_bgQWY#o{f%la%c%+}CF?av zy)MpNL*nWBqtb_JQWr`6-Cck1-^ltVq&$D{I@Y!QgQy`<-hZ5)-`sDF>kkd0L#OZt_I zS#m+{N5`h2AR0w2gY=JtmAxd&uX~gtH}wN)rdCT>l0L{Z>^|mNBE1~aT_|lkjkMlM zxb>EnbA6V_Bwe8+`RWikNv~i}X0e^snZ3PEx*9d-d!Ocu&NS8Be{un!lkWRLB18|a z$s)WJXZjFG*M((A0PXc!Y0MhL3!y=4GH(?p>x!mJ_cX7Z-#c#$3^Xa=^l(FX>=6VBp(m#!A0>Mj3>Cq`@TDAbyi<|UB66u&%9BW;oYsymYY z0@9b`@ejV>C!t9C3baG;0Z#hLs6~GG@l%qf>SRItC~Epze@Oq@OJ9hhBtRrh2Ov`8 zznt_9QL1I|0x(J6M0J%g^cK}Z%GZg~w?X=LOcl=9Kj1oXJ1wL;g+YG+gW~Rjw0GMo zN*vpuNZ+HbBKQVH`d&!i_e0X;Z*`;}P}AgLob-cHCKh7vH2p_9)%u&J=|>>_s95rf z-BR~Tr++ysfBiTb%c(%*eG<}t5>uq$E%8&enGH96(t6`5_L!A|b<)p7jfa}2qDlH$ zIv(oZkWN1b>F34ymxe?xQQy^g`bD)wWq;u5mm&QMW^rm0iT*PIo|QC7ze?NSKnU)n zUyqtR)W>;A8lMhRVNUwZs0Fw8HZMv4i!Qk3r+U+Ge?j_fvF+y}O2JRQ%j}udPyQ!5 z&5A)(`U93`8Rn$_8#S(kpS30Fk7?;?pSw+e3hB?paax$7#6g~Ky7cGx+@%V1(qBf+ zBmw8bB>goN5q3zN{ua{TiHj&fhs1iP%MKWkC8_%71q(|uARrc5`<}-vNMP;P{MrWs zko0Q5f9BPGKzuqa z(CsA$CPy`zz=NbfmD#Kcb6{$8^+--SU^7-de~O<8msN=aZ>ya~YmM)H{e zv$W){;iLm|qFV{~`X+bSxvZ6h5cst{0NVW~9wI4uFamqA`xyME1M{P6U-3!@3t8>U ze=z*`-T)n9%v75bw42v2LK$1 zEpp=(>wIy%#8<&^5I`AM!Rt5UVQXUOGL6_O&QbwjckQ1C|%bBRes}j{1ds312|qR z8k=$6L8YLz9qN(GZd@FC}Xs)7Zf_~8oxE)=%ULA<6dT?}xE zKSl+~b?xOcfM56vfdI$cV7vGwz!m-^7NG7B?chp)t2AxUqtaCMH2~LYszqT5_QdOG zPpmiViPr<%;4dfw0(H#>nQj8Oe_8Bog_$(%;#Pp$#L;w!VKHk6cbLYGKcpeZ4m0J! z{I|4j)=7qGxf_7FWSp+1Mb8j&riv1N4{$F^*!~AeaKWlaR=A(eXsg2r2mTOs0V?>c ztDOIbs7Bo!kI8-*;1Nvr)-2i0C`FC~FX_T#;#Pm?ZCQANPFfLZrt8Xnf1O?pf1(|v zDcXUjq6}O+X)!l?)`mw2s@{)mg2Y027T~W~2>5196S9&E4_4XpI9h5jDD_2vm&Emf zXsK&ujo}qKJ2iq}2VRXD6FVz`cc*|V`S~E!fykSdopdoJtH6LaEdxNz*S`R~o0b8z zxMU<*1H;<@?}(GxAbCfnf2&fZO-Yf+R0=hnA1HNF9p8AeN~yXM_3 z$&7%^NTKBgx!U>%>%!tKGa7y7`2ge{1DW-Ov0RAv(CVOI9mj6vh~LOL0WuTCGAPK| z-oTRS?XC2Z%p_)*e<6M&=SGm3EUu3PIbAPd8LD%~8_YRaW@?mi5F@9Pv1{rsHw3D7 zk7|a+L`;KBtJmwB(3Sk$ZV8#KFt-z;$hl&a*#iYjdRLunS~%^?JMHh)u2dnUI;KRDy8VeE%)YdHE%)EC&Fl{u=A))XkV?J&fT-O)|IOe`$uyGw zL&2GHlxa=qf0ag(p(=EX23+wxvno$cW>!FErPsDY4@6239M=v;>m?b45_%!iCl
|O43{Gc%*mV+ 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
P+lPOnZ)vHrlU1u52b%xaio{e$5jPqA)d)_9ZU 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 z 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

%YOp*Ft;{v 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μ4uU9lTEny2jY1BI321F&zqNsn&_tCFdr#ypc& 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 delta 727891 zcmY(rb8sdw7q?w+y|r!Iwr$(C+k5M7ZQHhe*S2lj+iu%;pXZzJo%hL{nJY6nN&d)8 zemN(ZY@Kk_^>QL8$$~?`f`CASfW)LcB_NQ2{|9V=;N{6r3GIac#RlnrkO)fsA0*L% zGW?hNpltu;94Ji^5diZ48K~l)*BmG}_0lBt|KD`~X@v*Fg+co_ zIW)+>k(*AzFhLRjRrEF`sM#5RfPkQ*B<<&rB{4w|05)B5m+?pYBr#=MSBH=lOb&)3 z#9$US8l0e&>Yb5V?UHGnBkaJTY*ro`*34R5JT;+Qf2O7C7Hkom$(1dhH~++Mb8jC) z#Uhfk^g6qnpoQmqi937p)R43lPvk#g;j4bR>i9cz>d7zp{byG)4@_!52gwh9R7QhX zn+7BC1rVvvmKbKCk>%q&E|q(-Vlqxs`VectQf6P%&$@&!@@s!=g%&rpnd!;Cv)Gw1 zEVyjZa)fd=TP|+8M52r(sqExrq2p;u?PO_aON%EfS4zGFTcSyXY8LlBaXP8HUFte< zIO#mwH04oYeIeSpc0OyArF4*9mDPm%hO1K>3vdXH74yykMP-va=)hCYpHv>=Jz_!RXB9ge`2RhFq^DeVayfucj8Ox9LGG*I3xnr~#v0coHyqlYY$~v&nr{qNI zu*syXkbc&Yw=Nd*f=o_j@*s)R%-hX>Oy%XyyE??9wr#OV#eA#e1n&=zpG@$_6+qci zV$$X28$XBveIel8TGC*xR5MmHNaC zz5EPy`7Jq!mw95YQ>($&BDzvKjM&V%%Zv_HNXyH}#(aEv`1$0}o>VtPzh~z+Ht`K8B!F|@qF}iW?TAVI>d2XsNsQS}sFXEQF{@RH8fg|9 zJAjUAj)_r%#iN$zfalE^l1HM_d2Xou6m2UOnYg(8muW&l)^5dmH?c=(jHkZwpiF^m z{I;&E575nW{$YfB@B&&M4!CpCs5E+#Nfp8}SYVIeA`&c#mQKa&rowYR3Ggcj>rOd{ zoV@6368;exORI6A6ceZZVr4=Z_|P0g2`Ll4wu%e0ug$Z`31I=RoF9{{ zPK7D`@l@p9ONPQ0eTwZ+$W+cM)2!8+bH*2EW1+@rFNx}3GHfM3)3(nSK*~VdhkjET zNU6kw(w(?~)N%0wo_1kY3s7r)@YBPjxUdemLX7A+KbuacXwzGC<_%djYqc-aQ=w6V zvw(JFivC1%PhE0c=_uMKL8~>`al$|TotI0*59(Z2;Ok1+awZ|gfBnP`L)h}mcFCRU z!ngf`rIW#!b1;0Z>RoWC7mn>rG&z8@8R@KS7pu0ks0fZR^p~vk&*2da+4vmcR$` z+85J!!_qD$;6^9Oun)~}bag4$|6|qJWqQ+((f%je*enld_OLOQRH0NVeTR^ZIiq5i zF>L7~!x7WXNK5U_AeSh8UlguLJue>g4=dOl43t0eI8TedN&phdi})g&Z*w`rA%0A; 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

GZ}Hxt$r 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

+fg)q5Uw@7ri?gWuN6s8=e< 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 * * - *

If this Feature is an end Feature of its owningType, then return the first ownedMember of the Feature that is a Feature, but not a Multiplicity or a MetadataFeature, and whose owningMembership is not a FeatureMembership. If this exists, it is the crossFeature of the end Feature.

+ *

If this Feature is an end Feature of its owningType, then return the first ownedMember of the Feature that is a Feature, but not a Multiplicity, MetadataFeature, or BindingConnector, and whose owningMembership is not a FeatureMembership or FeatureValue. If this exists, it is the crossFeature of the end Feature.

* if not isEnd or owningType = null then null * else * let ownedMemberFeatures: Sequence(Feature) = * ownedMember->selectByKind(Feature)-> - * reject(oclIsKindOf(Multiplicity) or + * reject(oclIsKindOf(Multiplicity) or * oclIsKindOf(MetadataFeature) or - * oclIsKindOf(FeatureValue))-> - * reject(owningMembership.oclIsKindOf(FeatureMembership)) in + * oclIsKindOf(BindingConnector))-> + * reject(owningMembership.oclIsKindOf(FeatureMembership) or + * owningMembership.oclIsKindOf(FeatureValue)) in * if ownedMemberFeatures.isEmpty() then null * else ownedMemberFeatures->first() * endif + * endif + * * * @model ordered="false" * annotation="http://www.omg.org/spec/SysML" diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/IndexExpression.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/IndexExpression.java index ecad2f612..f452da4bb 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/IndexExpression.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/IndexExpression.java @@ -11,7 +11,7 @@ * *

An IndexExpression is an OperatorExpression whose operator is "#", which resolves to the Function BasicFunctions::'#' from the Kernel Functions Library.

* arguments->notEmpty() and - * not arguments->first().result.specializesFromLibrary('Collections::Array') implies + * not arguments->first().result.specializesFromLibrary('Collections::Collection') implies * result.specializes(arguments->first().result) * operator = '#' * diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/MultiplicityRange.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/MultiplicityRange.java index 2e9a05f17..9de425166 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/MultiplicityRange.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/MultiplicityRange.java @@ -12,7 +12,15 @@ * *

A MultiplicityRange is a Multiplicity whose value is defined to be the (inclusive) range of natural numbers given by the result of a lowerBound Expression and the result of an upperBound Expression. The result of these Expressions shall be of type Natural. If the result of the upperBound Expression is the unbounded value *, then the specified range includes all natural numbers greater than or equal to the lowerBound value. If no lowerBound Expression, then the default is that the lower bound has the same value as the upper bound, except if the upperBound evaluates to *, in which case the default for the lower bound is 0.

* - * bound->forAll(b | b.featuringType = self.featuringType) + * let boundsFeaturingType : OrderedSet(Type) = + * if owningType <> null and owningType.oclIsKindOf(Feature) and + * owningType.oclAsType(Feature).isOwnedCrossFeature() then + * owningType.oclAsType(Feature).owningType.oclAsType(Feature).featuringType + * else + * featuringType + * endif in + * bound->forAll(b | b.featuringType = boundsFeaturingType) + * * bound->forAll(b | * b.result.specializesFromLibrary('ScalarValues::Integer') and * let value : UnlimitedNatural = valueOf(b) in diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/Redefinition.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/Redefinition.java index 495215f90..22b34cf4c 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/Redefinition.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/Redefinition.java @@ -36,7 +36,11 @@ * and * (direction = FeatureDirectionKind::inout implies * redefiningFeature.direction <> null)) - * redefinedFeature.isEnd implies redefiningFeature.isEnd + * redefinedFeature.isEnd and + * redefiningFeature.owningType <> null and + * (redefiningFeature.owningType.oclIsKindOf(Association) or + * redefiningFeature.owningType.oclIsKindOf(Connector)) implies + * redefiningFeature.isEnd * * *

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 40107bb78..f28b5cd65 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 @@ -42,7 +42,8 @@ * specializesFromLibrary('Requirements::requirementChecks') * isComposite and owningType <> null and * (owningType.oclIsKindOf(RequirementDefinition) or - * owningType.oclIsKindOf(RequirementUsage)) implies + * owningType.oclIsKindOf(RequirementUsage)) and + * not owningFeatureMembership.oclIsKindOf(RequirementConstraintMembership) implies * specializesFromLibrary('Requirements::RequirementCheck::subrequirements') * owningfeatureMembership <> null and * owningfeatureMembership.oclIsKindOf(ObjectiveMembership) implies 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 f64245837..6c4b9cc8e 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 @@ -19,7 +19,7 @@ * payloadArgument <> null * receiverArgument = argument(3) * isSubactionUsage() implies - * specializesFromLibrary('Actions::Action::acceptSubactions') + * specializesFromLibrary('Actions::Action::sendSubactions') * specializesFromLibrary('Actions::sendActions') * * diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/Type.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/Type.java index 51c4987a6..b654db963 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/Type.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/Type.java @@ -39,8 +39,10 @@ * specializesFromLibrary('Base::Anything') * directedFeature = feature->select(f | directionOf(f) <> null) * feature = featureMembership.ownedMemberFeature - * featureMembership = ownedFeatureMembership->union( - * inheritedMembership->selectByKind(FeatureMembership)) + * featureMembership = ownedFeatureMembership-> + * union(inheritedMembership-> + * selectByKind(FeatureMembership)-> + * select(mem | self.specializes(mem.owningType))) * ownedFeature = ownedFeatureMembership.ownedMemberFeature * differencingType = ownedDifferencing.differencingType * intersectingType->excludes(self) 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 384dfaad1..399e2d0ab 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 @@ -43,7 +43,7 @@ * nestedFlow = nestedUsage->selectByKind(FlowUsage) * nestedInterface = nestedUsage->selectByKind(ReferenceUsage) * nestedItem = nestedUsage->selectByKind(ItemUsage) - * nestedMetadata = nestedUsage->selectByKind(MetadataUsage) + * nestedMetadata = ownedMember->selectByKind(MetadataUsage) * nestedOccurrence = nestedUsage->selectByKind(OccurrenceUsage) * nestedPart = nestedUsage->selectByKind(PartUsage) * nestedPort = nestedUsage->selectByKind(PortUsage) 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 88a1e51a2..00083b321 100644 --- a/org.omg.sysml.model/src/main/resources/model/SysML.ecore +++ b/org.omg.sysml.model/src/main/resources/model/SysML.ecore @@ -1744,7 +1744,7 @@ -

+
@@ -2503,7 +2503,7 @@ -
+
-
+
@@ -3411,7 +3411,7 @@ -
+
@@ -3688,7 +3688,7 @@ -
+
@@ -3869,7 +3869,7 @@ -
+
@@ -4442,7 +4442,7 @@ -
+
@@ -4826,7 +4826,7 @@ -
+
From fcf1b46d1f492d98c4a5372b1af377bca23a0c9f Mon Sep 17 00:00:00 2001 From: Ed Seidewitz Date: Mon, 3 Aug 2026 12:26:01 -0400 Subject: [PATCH 4/5] ST6RI-956 Updated .uml and .ecore files for fix to KERML11-3 resolution. - Only affects the checkMultiplicityRangeExpressionTypeFeaturing constraint. --- .../src/main/resources/model/SysML.ecore | 2 +- org.omg.sysml/model/KerML.genmodel | 260 +- org.omg.sysml/model/KerML_only.uml | 8718 +++--- org.omg.sysml/model/KerML_only_xmi.uml | 10 +- org.omg.sysml/model/SysML.ecore | 2 +- org.omg.sysml/model/SysML.uml | 22530 ++++++++-------- org.omg.sysml/model/SysML_clean.genmodel | 918 +- org.omg.sysml/model/SysML_only.uml | 13108 ++++----- org.omg.sysml/model/SysML_only_xmi.uml | 2 +- org.omg.sysml/model/SysML_xmi.uml | 10 +- org.omg.sysml/model/kerml.ecore | 1082 +- org.omg.sysml/model/sysml_clean.ecore | 3426 +-- 12 files changed, 25034 insertions(+), 25034 deletions(-) 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 00083b321..61685a0d0 100644 --- a/org.omg.sysml.model/src/main/resources/model/SysML.ecore +++ b/org.omg.sysml.model/src/main/resources/model/SysML.ecore @@ -2909,7 +2909,7 @@ -
+
diff --git a/org.omg.sysml/model/KerML.genmodel b/org.omg.sysml/model/KerML.genmodel index 536521dee..5a5157195 100644 --- a/org.omg.sysml/model/KerML.genmodel +++ b/org.omg.sysml/model/KerML.genmodel @@ -42,20 +42,6 @@ - - - - - - - - - - @@ -189,17 +175,31 @@ + + + + + + + + + + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Annotation/owningAnnotatedElement"/> + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Annotation/owningAnnotatingElement"/> @@ -213,23 +213,25 @@ - - - - + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//MembershipImport/importedMembership"/> + + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Conjugation/originalType"/> + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Conjugation/owningType"/> + + - @@ -318,6 +318,14 @@ + + + + + @@ -452,14 +460,6 @@ - - - - - - + + + + + - + + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//ParameterMembership/ownedMemberParameter"/> + + + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Behavior/step"/> + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Behavior/parameter"/> - + + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Step/behavior"/> - - + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Step/parameter"/> + + + + + + + + + + + + + + + + + + + + + + @@ -524,19 +566,6 @@ - - - - - - - - - @@ -544,13 +573,11 @@ propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//Function/result"/> - - - - + + + - - @@ -562,15 +589,23 @@ propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//InstantiationExpression/instantiatedType.1"/> + + + + + - - + + + + + - @@ -587,65 +622,39 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - + + + 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#//Flow/interaction"/> - - + + + @@ -661,9 +670,16 @@ - + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//FeatureValue/featureWithValue"/> + + + + + + - - - - - - - - - + + propertySortChoices="true" ecoreFeature="ecore:EReference kerml.ecore#//ElementFilterMembership/condition"/> - - - - + diff --git a/org.omg.sysml/model/KerML_only.uml b/org.omg.sysml/model/KerML_only.uml index 3b3e74a94..1a98cc52e 100644 --- a/org.omg.sysml/model/KerML_only.uml +++ b/org.omg.sysml/model/KerML_only.uml @@ -1,748 +1,477 @@ - - - - - <p>A <code>Comment</code> is an <code>AnnotatingElement</code> whose <code>body</code> in some way describes its <code>annotatedElements</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> - - - - <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>ownedElements</code> of an <code>Element</code> are the <code>ownedRelatedElements</code> of its <code>ownedRelationships</code>.</p> - - - - - - - <p>The annotation text for the <code>Comment</code>.</p> - + + OCL2.0 + ownedElement = ownedRelationship.ownedRelatedElement + + + + + <p>The <code>owner</code> of an <code>Element</code> is the <code>owningRelatedElement</code> of its <code>owningRelationship</code>.</p> - - - - - - - - - <p>The AnnotatingElements that have a certain Element as their <code>annotatedElement</code>.</p> + + OCL2.0 + owner = owningRelationship.owningRelatedElement + + + + + <p>If this <code>Element</code> does not have an <code>owningNamespace</code>, then its <code>qualifiedName</code> is null. If the <code>owningNamespace</code> of this Element is a root <code>Namespace</code>, then the <code>qualifiedName</code> of the <code>Element</code> is the escaped name of the <code>Element</code> (if any). If the <code>owningNamespace</code> is non-null but not a root <code>Namespace</code>, then the <code>qualifiedName</code> of this <code>Element</code> is constructed from the <code>qualifiedName</code> of the <code>owningNamespace</code> and the escaped name of the <code>Element</code>, unless the <code>qualifiedName</code> of the <code>owningNamespace</code> is null or the escaped name is null, in which case the <code>qualifiedName</code> of this <code>Element</code> is also null. Further, if the <code>owningNamespace</code> has other <code>ownedMembers</code> with the same non-null name as this <code>Element</code>, and this <code>Element</code> is not the first, then the <code>qualifiedName</code> of this <code>Element</code> is null.</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 + qualifiedName = + if owningNamespace = null then null + else if name <> null and + owningNamespace.ownedMember-> + select(m | m.name = name).indexOf(self) <> 1 then null + else if owningNamespace.owner = null then escapedName() + else if owningNamespace.qualifiedName = null or + escapedName() = null then null + else owningNamespace.qualifiedName + '::' + escapedName() + endif endif endif endif + + + + + <p>The <code>documentation</code> of an <code>Element</code> is its <code>ownedElements</code> that are <code>Documentation</code>.</p> - - - - - - - <p>The <code>Element</code> that is represented by this <code>TextualRepresentation</code>.</p> - + + OCL2.0 + documentation = ownedElement->selectByKind(Documentation) + + + + + <p>The <code>ownedAnnotations</code> of an <code>Element</code> are its <code>ownedRelationships</code> that are <code>Annotations</code>, for which the <code>Element</code> is the <code>annotatedElement</code>.</p> - - - - - - <p>The textual representation of the <code>representedElement</code> in the given <code>language</code>.</p> - + + OCL2.0 + ownedAnnotation = ownedRelationship-> + selectByKind(Annotation)-> + select(a | a.annotatedElement = self) + + + + + <p>The <code>name</code> of an <code>Element</code> is given by the result of the <code>effectiveName()</code> operation.</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> + + OCL2.0 + name = effectiveName() + + + + + <p>If an <code>Element</code> has any <code>ownedRelationships</code> for which <code>isImplied = true</code>, then the <code>Element</code> must also have <code>isImpliedIncluded = true</code>. (Note that an <code>Element</code> <em>can</em> have <code>isImplied = true</code> even if no <code>ownedRelationships</code> have <code>isImplied = true</code>, indicating the <code>Element</code> simply has no implied <code>Relationships</code>.</p> - + OCL2.0 - (owningAnnotatedElement <> null) = (ownedAnnotatingElement <> null) + ownedRelationship->exists(isImplied) implies isImpliedIncluded - - - <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 <code>Element</code> <code>isLibraryElement</code> if <code>libraryNamespace()</code> is not null.</p> - + OCL2.0 - ownedAnnotatingElement <> null xor owningAnnotatingElement <> null + isLibraryElement = libraryNamespace() <> 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>The <code>shortName</code> of an <code>Element</code> is given by the result of the <code>effectiveShortName()</code> operation.</p> - + OCL2.0 - ownedAnnotatingElement = - let ownedAnnotatingElements : Sequence(AnnotatingElement) = - ownedRelatedElement->selectByKind(AnnotatingElement) in - if ownedAnnotatingElements->isEmpty() then null - else ownedAnnotatingElements->first() - endif + shortName = effectiveShortName() - - - <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>owningNamespace</code> of an <code>Element</code> is the <code>membershipOwningNamespace</code> of its <code>owningMembership</code> (if any).</p> - + OCL2.0 - annotatingElement = - if ownedAnnotatingElement <> null then ownedAnnotatingElement - else owningAnnotatingElement + owningNamespace = + if owningMembership = null then null + else owningMembership.membershipOwningNamespace 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>textualRepresentations</code> of an <code>Element</code> are its <code>ownedElements</code> that are <code>TextualRepresentations</code>.</p> + + + OCL2.0 + textualRepresentation = ownedElement->selectByKind(TextualRepresentation) + + + + + <p>The <code>owningRelationship</code> of this <code>Element</code>, if that <code>Relationship</code> is a <code>Membership</code>.</p> - - + + - - - <p>The <code>Element</code> that is annotated by the <code>annotatingElement</code> of this Annotation.</p> + + + <p>The Relationship for which this Element is an <tt>ownedRelatedElement</tt>, if any.</p> - - + + - - - <p>The <code>annotatedElement</code> of this <code>Annotation</code>, when it is also the <code>owningRelatedElement</code>.</p> + + + <p>The <code>Namespace</code> that owns this <code>Element</code>, which is the <code>membershipOwningNamespace</code> of the <code>owningMembership</code> of this <code>Element</code>, if any.</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 globally unique identifier for this Element. This is intended to be set by tooling, and it must not change during the lifetime of the Element.</p> - - + - - - - - - <p>The Annotations associated with a certain <code>annotatedElement</code>.</p> + + + <p>The Relationships for which this Element is the <tt>owningRelatedElement</tt>.</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>The owner of this Element, derived as the <code>owningRelatedElement</code> of the <code>owningRelationship</code> of this Element, if any.</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 Elements owned by this Element, derived as the <tt>ownedRelatedElements</tt> of the <tt>ownedRelationships</tt> of this Element.</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> + + + + + + <p>The Documentation owned by this Element.</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>Element</code> that are <code>Annotations</code>, for which this <code>Element</code> is the <code>annotatedElement</code>.</code> - - + + - - - <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>TextualRepresentations</code> that annotate this <code>Element</code>.</p> - - + + - - - <p>The <code>owningRelationship</code> of this <code>AnnotatingRelationship</code>, if it is an <code>Annotation</code></p> + + + <p>Various alternative identifiers for this Element. Generally, these will be set by tools.</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>An optional alternative name for the <code>Element</code> that is intended to be shorter or in some way more succinct than its primary <code>name</code>. It may act as a modeler-specified identifier for the <code>Element</code>, though it is then the responsibility of the modeler to maintain the uniqueness of this identifier within a model or relative to some other context.</p> - - + + + - - - - - - - - - - - - - <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> - -<p>The <code>relatedElements</code> of a <code>Relationship</code> are divided into <code>source</code> and <code>target</code> <code>Elements</code>. The <code>Relationship</code> is considered to be directed from the <code>source</code> to the <code>target</code> <code>Elements</code>. An undirected <code>Relationship</code> may have either all <code>source</code> or all <code>target</code> <code>Elements</code>.</p> - -<p>A &quot;relationship <code>Element</code>&quot; in the abstract syntax is generically any <code>Element</code> that is an instance of either <code>Relationship</code> or a direct or indirect specialization of <code>Relationship</code>. Any other kind of <code>Element</code> is a &quot;non-relationship <code>Element</code>&quot;. It is a convention of that non-relationship <code>Elements</code> are <em>only</em> related via reified relationship <code>Elements</code>. Any meta-associations directly between non-relationship <code>Elements</code> must be derived from underlying reified <code>Relationship</code>.</p> + + + <p>The declared name of this <code>Element</code>.</p> - - - - <p>The <code>relatedElements</code> of a <code>Relationship</code> consist of all of its <code>source</code> <code>Elements</code> followed by all of its <code>target</code> <code>Elements</code>.</p> - - - OCL2.0 - relatedElement = source->union(target) - - - - - - <p>The Elements that are related by this Relationship, derived as the union of the <code>source</code> and <code>target</code> Elements of the Relationship.</p> - - + + + - - - <p>The <code>relatedElements</code> to which this Relationship is considered to be directed.</p> - + + + <p>The short name to be used for this <code>Element</code> during name resolution within its <code>owningNamespace</code>. This is derived using the <code>effectiveShortName()</code> operation. By default, it is the same as the <code>declaredShortName</code>, but this is overridden for certain kinds of <code>Elements</code> to compute a <code>shortName</code> even when the <code>declaredName</code> is null.</p> - - + + + - - - <p>The <code>relatedElements</c ode> from which this Relationship is considered to be directed.</p> + + + <p>The name to be used for this <code>Element</code> during name resolution within its <code>owningNamespace</code>. This is derived using the <code>effectiveName()</code> operation. By default, it is the same as the <code>declaredName</code>, but this is overridden for certain kinds of <code>Elements</code> to compute a <code>name</code> even when the <code>declaredName</code> is null.</p> - - + + + - - - <p>The <tt>relatedElement</tt> of this Relationship that owns the Relationship, if any.</p> + + + <p>The full ownership-qualified name of this <code>Element</code>, represented in a form that is valid according to the KerML textual concrete syntax for qualified names (including use of unrestricted name notation and escaped characters, as necessary). The <code>qualifiedName</code> is null if this <code>Element</code> has no <code>owningNamespace</code> or if there is not a complete ownership chain of named <code>Namespaces</code> from a root <code>Namespace</code> to this <code>Element</code>. If the <code>owningNamespace</code> has other <code>Elements</code> with the same name as this one, then the <code>qualifiedName</code> is null for all such <code>Elements</code> other than the first.</p> - - + + + - - - <p>The <tt>relatedElements</tt> of this Relationship that are owned by the Relationship.</p> + + + <p>Whether all necessary implied Relationships have been included in the <code>ownedRelationships</code> of this Element. This property may be true, even if there are not actually any <code>ownedRelationships</code> with <code>isImplied = true</code>, meaning that no such Relationships are actually implied for this Element. However, if it is false, then <code>ownedRelationships</code> may <em>not</em> contain any implied Relationships. That is, either <em>all</em> required implied Relationships must be included, or none of them.</p> - - + + - - - <p>Whether this Relationship was generated by tooling to meet semantic rules, rather than being directly created by a modeler.</p> + + + <p>Whether this Element is contained in the ownership tree of a library model.</p> - - - - <p>Return whether this Relationship has either an <code>owningRelatedElement</code> or <code>owningRelationship</code> that is a library element.</p> + + + <p>Return <code>name</code>, if that is not null, otherwise the <code>shortName</code>, if that is not null, otherwise null. If the returned value is non-null, it is returned as-is if it has the form of a basic name, or, otherwise, represented as a restricted name according to the lexical structure of the KerML textual notation (i.e., surrounded by single quote characters and with special characters escaped).</p> - - - OCL2.0 - if owningRelatedElement <> null then owningRelatedElement.libraryNamespace() -else if owningRelationship <> null then owningRelationship.libraryNamespace() -else null endif endif - - - - - + + + + - - - <p>If the <code>owningRelationship</code> of the <code>Relationship</code> is null but its <code>owningRelatedElement</code> is non-null, construct the <code>path</code> using the position of the <code>Relationship</code> in the list of <code>ownedRelationships</code> of its <code>owningRelatedElement</code>. Otherwise, return the <code>path</code> of the <code>Relationship</code> as specified for an <code>Element</code> in general.</p> + + + <p>Return an effective <code>shortName</code> for this <code>Element</code>. By default this is the same as its <code>declaredShortName</code>.</p> - - + + OCL2.0 - if owningRelationship = null and owningRelatedElement <> null then - owningRelatedElement.path() + '/' + - owningRelatedElement.ownedRelationship->indexOf(self).toString() + declaredShortName + + + + + + + + + + + <p>Return an effective <code>name</code> for this <code>Element</code>. By default this is the same as its <code>declaredName</code>.</p> + + + + OCL2.0 + declaredName + + + + + + + + + + + <p>By default, return the library Namespace of the <code>owningRelationship</code> of this Element, if it has one.</p> + + + + OCL2.0 + if owningRelationship <> null then owningRelationship.libraryNamespace() +else null endif + + + + + + + + + + <p>Return a unique description of the location of this <code>Element</code> in the containment structure rooted in a root <code>Namespace</code>. If the <code>Element</code> has a non-null <code>qualifiedName</code>, then return that. Otherwise, if it has an <code>owningRelationship</code>, then return the string constructed by appending to the <code>path</code> of it's <code>owningRelationship</code> the character <code>/</code> followed by the string representation of its position in the list of <code>ownedRelatedElements</code> of the <code>owningRelationship</code> (indexed starting at 1). Otherwise, return the empty string.</p> + +<p>(Note that this operation is overridden for <code>Relationships</code> to use <code>owningRelatedElement</code> when appropriate.)</p> + + + + OCL2.0 + if qualifiedName <> null then qualifiedName +else if owningRelationship <> null then + owningRelationship.path() + '/' + + owningRelationship.ownedRelatedElement->indexOf(self).toString() -- A position index shall be converted to a decimal string representation -- consisting of only decimal digits, with no sign, leading zeros or leading -- or trailing whitespace. -else self.oclAsType(Element).path() -endif +else '' +endif endif - + - + + + + + + + + + + + + + + + - - - <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> + + + <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> + +<p>The <code>relatedElements</code> of a <code>Relationship</code> are divided into <code>source</code> and <code>target</code> <code>Elements</code>. The <code>Relationship</code> is considered to be directed from the <code>source</code> to the <code>target</code> <code>Elements</code>. An undirected <code>Relationship</code> may have either all <code>source</code> or all <code>target</code> <code>Elements</code>.</p> + +<p>A &quot;relationship <code>Element</code>&quot; in the abstract syntax is generically any <code>Element</code> that is an instance of either <code>Relationship</code> or a direct or indirect specialization of <code>Relationship</code>. Any other kind of <code>Element</code> is a &quot;non-relationship <code>Element</code>&quot;. It is a convention of that non-relationship <code>Elements</code> are <em>only</em> related via reified relationship <code>Elements</code>. Any meta-associations directly between non-relationship <code>Elements</code> must be derived from underlying reified <code>Relationship</code>.</p> - - - <p>The <code>ownedElements</code> of an <code>Element</code> are the <code>ownedRelatedElements</code> of its <code>ownedRelationships</code>.</p> - - - OCL2.0 - ownedElement = ownedRelationship.ownedRelatedElement - - - - - <p>The <code>owner</code> of an <code>Element</code> is the <code>owningRelatedElement</code> of its <code>owningRelationship</code>.</p> - - - OCL2.0 - owner = owningRelationship.owningRelatedElement - - - - - <p>If this <code>Element</code> does not have an <code>owningNamespace</code>, then its <code>qualifiedName</code> is null. If the <code>owningNamespace</code> of this Element is a root <code>Namespace</code>, then the <code>qualifiedName</code> of the <code>Element</code> is the escaped name of the <code>Element</code> (if any). If the <code>owningNamespace</code> is non-null but not a root <code>Namespace</code>, then the <code>qualifiedName</code> of this <code>Element</code> is constructed from the <code>qualifiedName</code> of the <code>owningNamespace</code> and the escaped name of the <code>Element</code>, unless the <code>qualifiedName</code> of the <code>owningNamespace</code> is null or the escaped name is null, in which case the <code>qualifiedName</code> of this <code>Element</code> is also null. Further, if the <code>owningNamespace</code> has other <code>ownedMembers</code> with the same non-null name as this <code>Element</code>, and this <code>Element</code> is not the first, then the <code>qualifiedName</code> of this <code>Element</code> is null.</p> - - - OCL2.0 - qualifiedName = - if owningNamespace = null then null - else if name <> null and - owningNamespace.ownedMember-> - select(m | m.name = name).indexOf(self) <> 1 then null - else if owningNamespace.owner = null then escapedName() - else if owningNamespace.qualifiedName = null or - escapedName() = null then null - else owningNamespace.qualifiedName + '::' + escapedName() - endif endif endif endif - - - - - <p>The <code>documentation</code> of an <code>Element</code> is its <code>ownedElements</code> that are <code>Documentation</code>.</p> - - - OCL2.0 - documentation = ownedElement->selectByKind(Documentation) - - - - - <p>The <code>ownedAnnotations</code> of an <code>Element</code> are its <code>ownedRelationships</code> that are <code>Annotations</code>, for which the <code>Element</code> is the <code>annotatedElement</code>.</p> - - - OCL2.0 - ownedAnnotation = ownedRelationship-> - selectByKind(Annotation)-> - select(a | a.annotatedElement = self) - - - - - <p>The <code>name</code> of an <code>Element</code> is given by the result of the <code>effectiveName()</code> operation.</p> - - - OCL2.0 - name = effectiveName() - - - - - <p>If an <code>Element</code> has any <code>ownedRelationships</code> for which <code>isImplied = true</code>, then the <code>Element</code> must also have <code>isImpliedIncluded = true</code>. (Note that an <code>Element</code> <em>can</em> have <code>isImplied = true</code> even if no <code>ownedRelationships</code> have <code>isImplied = true</code>, indicating the <code>Element</code> simply has no implied <code>Relationships</code>.</p> - - - OCL2.0 - ownedRelationship->exists(isImplied) implies isImpliedIncluded - - - - - <p>An <code>Element</code> <code>isLibraryElement</code> if <code>libraryNamespace()</code> is not null.</p> - - - OCL2.0 - isLibraryElement = libraryNamespace() <> null - - - - - - <p>The <code>shortName</code> of an <code>Element</code> is given by the result of the <code>effectiveShortName()</code> operation.</p> - - - OCL2.0 - shortName = effectiveShortName() - - - - - <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 - owningNamespace = - if owningMembership = null then null - else owningMembership.membershipOwningNamespace - endif - - - - - <p>The <code>textualRepresentations</code> of an <code>Element</code> are its <code>ownedElements</code> that are <code>TextualRepresentations</code>.</p> + + + <p>The <code>relatedElements</code> of a <code>Relationship</code> consist of all of its <code>source</code> <code>Elements</code> followed by all of its <code>target</code> <code>Elements</code>.</p> - + OCL2.0 - textualRepresentation = ownedElement->selectByKind(TextualRepresentation) + relatedElement = source->union(target) - - - <p>The <code>owningRelationship</code> of this <code>Element</code>, if that <code>Relationship</code> is a <code>Membership</code>.</p> - + + + + <p>The Elements that are related by this Relationship, derived as the union of the <code>source</code> and <code>target</code> Elements of the Relationship.</p> - - + + - - - <p>The Relationship for which this Element is an <tt>ownedRelatedElement</tt>, if any.</p> + + + <p>The <code>relatedElements</code> to which this Relationship is considered to be directed.</p> - - + + - - - <p>The <code>Namespace</code> that owns this <code>Element</code>, which is the <code>membershipOwningNamespace</code> of the <code>owningMembership</code> of this <code>Element</code>, if any.</p> - + + + <p>The <code>relatedElements</c ode> from which this Relationship is considered to be directed.</p> - - + + - - - <p>The globally unique identifier for this Element. This is intended to be set by tooling, and it must not change during the lifetime of the Element.</p> + + + <p>The <tt>relatedElement</tt> of this Relationship that owns the Relationship, if any.</p> - + + - - - <p>The Relationships for which this Element is the <tt>owningRelatedElement</tt>.</p> + + + <p>The <tt>relatedElements</tt> of this Relationship that are owned by the Relationship.</p> - - - - - - <p>The owner of this Element, derived as the <code>owningRelatedElement</code> of the <code>owningRelationship</code> of this Element, if any.</p> - - - - - - - <p>The Elements owned by this Element, derived as the <tt>ownedRelatedElements</tt> of the <tt>ownedRelationships</tt> of this Element.</p> - - - - - - - - <p>The Documentation owned by this Element.</p> - - - - - - - <p>The <code>ownedRelationships</code> of this <code>Element</code> that are <code>Annotations</code>, for which this <code>Element</code> is the <code>annotatedElement</code>.</code> - - - - - - - <p>The <code>TextualRepresentations</code> that annotate this <code>Element</code>.</p> - - - - - - - <p>Various alternative identifiers for this Element. Generally, these will be set by tools.</p> - - - - - - - - <p>An optional alternative name for the <code>Element</code> that is intended to be shorter or in some way more succinct than its primary <code>name</code>. It may act as a modeler-specified identifier for the <code>Element</code>, though it is then the responsibility of the modeler to maintain the uniqueness of this identifier within a model or relative to some other context.</p> - - - - - - - - - <p>The declared name of this <code>Element</code>.</p> - - - - - - - - - <p>The short name to be used for this <code>Element</code> during name resolution within its <code>owningNamespace</code>. This is derived using the <code>effectiveShortName()</code> operation. By default, it is the same as the <code>declaredShortName</code>, but this is overridden for certain kinds of <code>Elements</code> to compute a <code>shortName</code> even when the <code>declaredName</code> is null.</p> - - - - - - - - <p>The name to be used for this <code>Element</code> during name resolution within its <code>owningNamespace</code>. This is derived using the <code>effectiveName()</code> operation. By default, it is the same as the <code>declaredName</code>, but this is overridden for certain kinds of <code>Elements</code> to compute a <code>name</code> even when the <code>declaredName</code> is null.</p> - - - - - - - - <p>The full ownership-qualified name of this <code>Element</code>, represented in a form that is valid according to the KerML textual concrete syntax for qualified names (including use of unrestricted name notation and escaped characters, as necessary). The <code>qualifiedName</code> is null if this <code>Element</code> has no <code>owningNamespace</code> or if there is not a complete ownership chain of named <code>Namespaces</code> from a root <code>Namespace</code> to this <code>Element</code>. If the <code>owningNamespace</code> has other <code>Elements</code> with the same name as this one, then the <code>qualifiedName</code> is null for all such <code>Elements</code> other than the first.</p> - - - - - - - - <p>Whether all necessary implied Relationships have been included in the <code>ownedRelationships</code> of this Element. This property may be true, even if there are not actually any <code>ownedRelationships</code> with <code>isImplied = true</code>, meaning that no such Relationships are actually implied for this Element. However, if it is false, then <code>ownedRelationships</code> may <em>not</em> contain any implied Relationships. That is, either <em>all</em> required implied Relationships must be included, or none of them.</p> - - - + + - - - <p>Whether this Element is contained in the ownership tree of a library model.</p> + + + <p>Whether this Relationship was generated by tooling to meet semantic rules, rather than being directly created by a modeler.</p> + - - - <p>Return <code>name</code>, if that is not null, otherwise the <code>shortName</code>, if that is not null, otherwise null. If the returned value is non-null, it is returned as-is if it has the form of a basic name, or, otherwise, represented as a restricted name according to the lexical structure of the KerML textual notation (i.e., surrounded by single quote characters and with special characters escaped).</p> - - - - - - - - - - <p>Return an effective <code>shortName</code> for this <code>Element</code>. By default this is the same as its <code>declaredShortName</code>.</p> - - - - OCL2.0 - declaredShortName - - - - - - - - - - - <p>Return an effective <code>name</code> for this <code>Element</code>. By default this is the same as its <code>declaredName</code>.</p> - - - - OCL2.0 - declaredName - - - - - - - - - - - <p>By default, return the library Namespace of the <code>owningRelationship</code> of this Element, if it has one.</p> + + + <p>Return whether this Relationship has either an <code>owningRelatedElement</code> or <code>owningRelationship</code> that is a library element.</p> - - + + OCL2.0 - if owningRelationship <> null then owningRelationship.libraryNamespace() -else null endif + if owningRelatedElement <> null then owningRelatedElement.libraryNamespace() +else if owningRelationship <> null then owningRelationship.libraryNamespace() +else null endif endif - - - + + + - - - <p>Return a unique description of the location of this <code>Element</code> in the containment structure rooted in a root <code>Namespace</code>. If the <code>Element</code> has a non-null <code>qualifiedName</code>, then return that. Otherwise, if it has an <code>owningRelationship</code>, then return the string constructed by appending to the <code>path</code> of it's <code>owningRelationship</code> the character <code>/</code> followed by the string representation of its position in the list of <code>ownedRelatedElements</code> of the <code>owningRelationship</code> (indexed starting at 1). Otherwise, return the empty string.</p> - -<p>(Note that this operation is overridden for <code>Relationships</code> to use <code>owningRelatedElement</code> when appropriate.)</p> + + + <p>If the <code>owningRelationship</code> of the <code>Relationship</code> is null but its <code>owningRelatedElement</code> is non-null, construct the <code>path</code> using the position of the <code>Relationship</code> in the list of <code>ownedRelationships</code> of its <code>owningRelatedElement</code>. Otherwise, return the <code>path</code> of the <code>Relationship</code> as specified for an <code>Element</code> in general.</p> - - + + OCL2.0 - if qualifiedName <> null then qualifiedName -else if owningRelationship <> null then - owningRelationship.path() + '/' + - owningRelationship.ownedRelatedElement->indexOf(self).toString() + if owningRelationship = null and owningRelatedElement <> null then + owningRelatedElement.path() + '/' + + owningRelatedElement.ownedRelationship->indexOf(self).toString() -- A position index shall be converted to a decimal string representation -- consisting of only decimal digits, with no sign, leading zeros or leading -- or trailing whitespace. -else '' -endif endif +else self.oclAsType(Element).path() +endif - + - - - - - - - - - - + + + + <p>The <code>Dependencies</code> that have a certain <code>client</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> @@ -774,585 +503,623 @@ endif endif - - - - <p>The <code>Dependencies</code> that have a certain <code>client</code> <code>Element</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> + + + <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>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> + + + + <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> - - 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>The annotation text for the <code>Comment</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 <code>MembershipImport</code> is an <code>Import</code> that imports its <code>importedMembership</code> into the <code>importOwningNamespace</code>. If <code>isRecursive = true</code> and the <code>memberElement</code> of the <code>importedMembership</code> is a <code>Namespace</code>, then the equivalent of a recursive <code>NamespaceImport</code> is also performed on 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>importedElement</code> of a <code>MembershipImport</code> is the <code>memberElement</code> of its <code>importedMembership</code>.</p> - - - OCL2.0 - importedElement = importedMembership.memberElement - - - - - - <p>The <code>Membership</code> to be imported.</p> + + + + <p>The <code>Element</code> that is documented by this <code>Documentation</code>.</p> - - + + - - - <p>Returns at least the <code>importedMembership</code>. If <code>isRecursive = true</code> and the <code>memberElement</code> of the <code>importedMembership</code> is a <code>Namespace</code>, then <code>Memberships</code> are also recursively imported from that <code>Namespace</code>.</p> - - - - - OCL2.0 - if not isRecursive or - not importedElement.oclIsKindOf(Namespace) or - excluded->includes(importedElement) -then Sequence{importedMembership} -else importedElement.oclAsType(Namespace). - visibleMemberships(excluded, true, importAll)-> - prepend(importedMembership) -endif - - - - - - - - - - - - - - - - <p>The Namespace that has a certain <code>membership</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>An Import with a certain <code>importedElement</code>.</p> - - - - - - - - - <p>A MembershipImport that has a certain <code>importedMembership</code>.</p> - - - - - - - - - <p>The Namespace the has a certain Element as a <code>member</code>.</p> - - - - - - - - - - <p>The Namespace with a certain <code>importedMembership</code>.</p> + + + + <p>The Annotations associated with a certain <code>annotatedElement</code>.</p> - - + + - - - - <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> - -<p>A <code>Namespace</code> can provide names for its <code>members</code> via the <code>memberNames</code> and <code>memberShortNames</code> specified by the <code>Memberships</code> in the <code>Namespace</code>. If a <code>Membership</code> specifies a <code>memberName</code> and/or <code>memberShortName</code>, then those are names of the corresponding <code>memberElement</code> relative to the <code>Namespace</code>. For an <code>OwningMembership</code>, the <code>ownedMemberName</code> and <code>ownedMemberShortName</code> are given by the <code>Element</code> <code>name</code> and <code>shortName</code>. Note that the same <code>Element</code> may be the <code>memberElement</code> of multiple <code>Memberships</code> in a <code>Namespace</code> (though it may be owned at most once), each of which may define a separate alias for the <code>Element</code> relative to the <code>Namespace</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> of a <code>Namespace</code> must be distinguishable from each other.</p> - - - OCL2.0 - membership->forAll(m1 | - membership->forAll(m2 | - m1 <> m2 implies m1.isDistinguishableFrom(m2))) - - - - - <p>The <code>members</code> of a <code>Namespace</code> are the <code>memberElements</code> of all its <code>memberships</code>.</p> - - - OCL2.0 - member = membership.memberElement - - - - - <p>The <code>ownedMembers</code> of a <code>Namespace</code> are the <code>ownedMemberElements</code> of all its <code>ownedMemberships</code> that are <code>OwningMemberships</code>. + + + <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 - ownedMember = ownedMembership->selectByKind(OwningMembership).ownedMemberElement + (owningAnnotatedElement <> null) = (ownedAnnotatingElement <> null) - - - <p>The <code>importedMemberships</code> of a <code>Namespace</code> are derived using the <code>importedMemberships()</code> operation, with no initially <code>excluded</code> <code>Namespaces</code>.</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 - importedMembership = importedMemberships(Set{}) + ownedAnnotatingElement <> null xor owningAnnotatingElement <> null - - - <p>The <code>ownedImports</code> of a <code>Namespace</code> are all its <code>ownedRelationships</code> that are <code>Imports</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 - ownedImport = ownedRelationship->selectByKind(Import) + ownedAnnotatingElement = + let ownedAnnotatingElements : Sequence(AnnotatingElement) = + ownedRelatedElement->selectByKind(AnnotatingElement) in + if ownedAnnotatingElements->isEmpty() then null + else ownedAnnotatingElements->first() + endif - - - <p>The <code>ownedMemberships</code> of a <code>Namespace</code> are all its <code>ownedRelationships</code> that are <code>Memberships</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 - ownedMembership = ownedRelationship->selectByKind(Membership) + annotatingElement = + if ownedAnnotatingElement <> null then ownedAnnotatingElement + else owningAnnotatingElement + endif - - - - <p>All <code>Memberships</code> in this <code>Namespace</code>, including (at least) the union of <code>ownedMemberships</code> and <code>importedMemberships</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>ownedRelationships</code> of this <code>Namespace</code> that are <code>Imports</code>, for which the <code>Namespace</code> is the <code>importOwningNamespace</code>.</p> + + + <p>The <code>Element</code> that is annotated by the <code>annotatingElement</code> of this Annotation.</p> - - + + - - - <p>The set of all member <code>Elements</code> of this <code>Namespace</code>, which are the <code>memberElements</code> of all <code>memberships</code> of the <code>Namespace</code>.</p> + + + <p>The <code>annotatedElement</code> of this <code>Annotation</code>, when it is also the <code>owningRelatedElement</code>.</p> - - + + - - - <p>The owned <code>members</code> of this <code>Namespace</code>, which are the <cpde><code>ownedMemberElements</code> of the <code>ownedMemberships</code> of the <code>Namespace</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 AnnotatingElements that have a certain Element as their <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>Namespace</code> that are <code>Memberships</code>, for which the <code>Namespace</code> is the <code>membershipOwningNamespace</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>The <code>Memberships</code> in this <code>Namespace</code> that result from the <code>ownedImports</code> of this <code>Namespace</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>Return the names of the given <code>element</code> as it is known in this <code>Namespace</code>.</p> + + + <p>The <code>Element</code> that is represented by this <code>TextualRepresentation</code>.</p> - - + + + + + + <p>The textual representation of the <code>representedElement</code> in the given <code>language</code>.</p> + + + + + + + + + + + + + <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 - let elementMemberships : Sequence(Membership) = - memberships->select(memberElement = element) in -memberships.memberShortName-> - union(memberships.memberName)-> - asSet() + if excluded->includes(importedNamespace) then Sequence{} +else importedNamespace.visibleMemberships(excluded, isRecursive, isImportAll) - - - - - + + + + + + + - - - <p>Returns this visibility of <code>mem</code> relative to this <code>Namespace</code>. If <code>mem</code> is an <code>importedMembership</code>, this is the <code>visibility</code> of its Import. Otherwise it is the <code>visibility</code> of the <code>Membership</code> itself.</p> - + + + + + <p>The Namespace the has a certain Element as a <code>member</code>.</p> - - - OCL2.0 - if importedMembership->includes(mem) then - ownedImport-> - select(importedMemberships(Set{})->includes(mem)). - first().visibility -else if memberships->includes(mem) then - mem.visibility -else - VisibilityKind::private -endif - - - - - - - - <p>If <code>includeAll = true</code>, then return all the <code>Memberships</code> of this <code>Namespace</code>. Otherwise, return only the publicly visible <code>Memberships</code> of this <code>Namespace</code>, including <code>ownedMemberships</code> that have a <code>visibility</code> of <code>public</code> and <code>Memberships</code> imported with a <code>visibility</code> of <code>public</code>. If <code>isRecursive = true</code>, also recursively include all visible <code>Memberships</code> of any <code>public</code> owned <code>Namespaces</code>, or, if <code>IncludeAll = true</code>, all <code>Memberships</code> of all owned <code>Namespaces</code>. When computing imported <code>Memberships</code>, ignore this <code>Namespace</code> and any <code>Namespaces</code> in the given <code>excluded</code> set.</p> + + + + + + + + + + + <p>The Namespace that has a certain <code>membership</code>.</p> + + + + + + + + + <p>The Namespace with 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> + + + + <p>The <code>ownedMemberName</code> of an <code>OwningMembership</code> is the <code>name</code> of its <code>ownedMemberElement</code>.</p> - - - OCL2.0 - let visibleMemberships : OrderedSet(Membership) = - if includeAll then membershipsOfVisibility(null, excluded) - else membershipsOfVisibility(VisibilityKind::public, excluded) - endif in -if not isRecursive then visibleMemberships -else visibleMemberships->union(ownedMember-> - selectAsKind(Namespace). - select(includeAll or owningMembership.visibility = VisibilityKind::public)-> - visibleMemberships(excluded->including(self), true, includeAll)) -endif + + 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>Derive the imported <code>Memberships</code> of this <code>Namespace</code> as the <code>importedMembership</code> of all <code>ownedImports</code>, excluding those Imports whose <code>importOwningNamespace</code> is in the <code>excluded</code> set, and excluding <code>Memberships</code> that have distinguisibility collisions with each other or with any <code>ownedMembership</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 - ownedImport.importedMemberships(excluded->including(self)) + if ownedElement.qualifiedName <> null then + ownedElement.qualifiedName + '/owningMembership' +else self.oclAsType(Relationship).path() +endif - - - - - - - + + - - - <p>If <code>visibility</code> is not null, return the <code>Memberships</code> of this <code>Namespace</code> with the given <code>visibility</code>, including <code>ownedMemberships</code> with the given <code>visibility</code> and <code>Memberships</code> imported with the given <code>visibility</code>. If <code>visibility</code> is null, return all <code>ownedMemberships</code> and imported <code>Memberships</code> regardless of visibility. When computing imported <code>Memberships</code>, ignore this <code>Namespace</code> and any <code>Namespaces</code> in the given <code>excluded</code> set.</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>MembershipImport</code> is an <code>Import</code> that imports its <code>importedMembership</code> into the <code>importOwningNamespace</code>. If <code>isRecursive = true</code> and the <code>memberElement</code> of the <code>importedMembership</code> is a <code>Namespace</code>, then the equivalent of a recursive <code>NamespaceImport</code> is also performed on that <code>Namespace</code>.</p> + + + + + <p>The <code>importedElement</code> of a <code>MembershipImport</code> is the <code>memberElement</code> of its <code>importedMembership</code>.</p> + + + OCL2.0 + importedElement = importedMembership.memberElement + + + + + + <p>The <code>Membership</code> to be imported.</p> + + + + + + + + <p>Returns at least the <code>importedMembership</code>. If <code>isRecursive = true</code> and the <code>memberElement</code> of the <code>importedMembership</code> is a <code>Namespace</code>, then <code>Memberships</code> are also recursively imported from that <code>Namespace</code>.</p> + + + + OCL2.0 - ownedMembership-> - select(mem | visibility = null or mem.visibility = visibility)-> - union(ownedImport-> - select(imp | visibility = null or imp.visibility = visibility). - importedMemberships(excluded->including(self))) + if not isRecursive or + not importedElement.oclIsKindOf(Namespace) or + excluded->includes(importedElement) +then Sequence{importedMembership} +else importedElement.oclAsType(Namespace). + visibleMemberships(excluded, true, importAll)-> + prepend(importedMembership) +endif - - - - - - - + + + - - - + + + - - - <p>Resolve the given qualified name to the named <code>Membership</code> (if any), starting with this <code>Namespace</code> as the local scope. The qualified name string must conform to the concrete syntax of the KerML textual notation. According to the KerML name resolution rules every qualified name will resolve to either a single <code>Membership</code>, or to none.</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 - let qualification : String = qualificationOf(qualifiedName) in -let name : String = unqualifiedNameOf(qualifiedName) in -if qualification = null then resolveLocal(name) -else if qualification = '$' then resolveGlobal(name) -else - let namespaceMembership : Membership = resolve(qualification) in - if namespaceMembership = null or - not namespaceMembership.memberElement.oclIsKindOf(Namespace) - then null - else - namespaceMembership.memberElement.oclAsType(Namespace). - resolveVisible(name) - endif -endif endif - - - - - - - - - - - - - <p>Resolve the given qualified name to the named <code>Membership</code> (if any) in the effective global <code>Namespace</code> that is the outermost naming scope. The qualified name string must conform to the concrete syntax of the KerML textual notation.</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> - - - English - No OCL - - - - - - - - - - - - - <p>Resolve a simple <code>name</code> starting with this <code>Namespace</code> as the local scope, and continuing with containing outer scopes as necessary. However, if this <code>Namespace</code> is a root <code>Namespace</code>, then the resolution is done directly in global scope.</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> - - - OCL2.0 - if owningNamespace = null then resolveGlobal(name) -else - let memberships : Membership = membership-> - select(memberShortName = name or memberName = name) in - if memberships->notEmpty() then memberships->first() - else owningNamespace.resolveLocal(name) - endif -endif - - - - - - - - - - - - - <p>Resolve a simple name from the visible <code>Memberships</code> of this <code>Namespace</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 - let memberships : Sequence(Membership) = - visibleMemberships(Set{}, false, false)-> - select(memberShortName = name or memberName = name) in -if memberships->isEmpty() then null -else memberships->first() -endif + 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>Return a string with valid KerML syntax representing the qualification part of a given <code>qualifiedName</code>, that is, a qualified name with all the segment names of the given name except the last. If the given <code>qualifiedName</code> has only one segment, then return null.</p> + + + + + <p>A NamespaceImport that has a certain <code>importedNamespace</code>.</p> - - - English - No OCL - - - - - - - - - - - - - - <p>Return the simple name that is the last segment name of the given <code>qualifiedName</code>. If this segment name has the form of a KerML unrestricted name, then "unescape" it by removing the surrounding single quotes and replacing all escape sequences with the specified character.</p> + + + + + + + + <p>A MembershipImport that has a certain <code>importedMembership</code>.</p> - - - English - No OCL - - - - - - - - - + + + @@ -1423,219 +1190,428 @@ endif - - - - <p>The Membership with a certain Element as its <code>memberElement</code>.</p> - - - - - - - - - <p>A NamespaceImport that has a certain <code>importedNamespace</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>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> + +<p>A <code>Namespace</code> can provide names for its <code>members</code> via the <code>memberNames</code> and <code>memberShortNames</code> specified by the <code>Memberships</code> in the <code>Namespace</code>. If a <code>Membership</code> specifies a <code>memberName</code> and/or <code>memberShortName</code>, then those are names of the corresponding <code>memberElement</code> relative to the <code>Namespace</code>. For an <code>OwningMembership</code>, the <code>ownedMemberName</code> and <code>ownedMemberShortName</code> are given by the <code>Element</code> <code>name</code> and <code>shortName</code>. Note that the same <code>Element</code> may be the <code>memberElement</code> of multiple <code>Memberships</code> in a <code>Namespace</code> (though it may be owned at most once), each of which may define a separate alias for the <code>Element</code> relative to the <code>Namespace</code>.</p> - - - <p>The <code>importedElement</code> of a <code>NamespaceImport</code> is its <code>importedNamespace</code>.</p> + + + <p>All <code>memberships</code> of a <code>Namespace</code> must be distinguishable from each other.</p> - + OCL2.0 - importedElement = importedNamespace + membership->forAll(m1 | + membership->forAll(m2 | + m1 <> m2 implies m1.isDistinguishableFrom(m2))) - - - - <p>The <code>Namespace</code> whose visible <code>Memberships</code> are imported by this <code>NamespaceImport</code>.</p> - + + + <p>The <code>members</code> of a <code>Namespace</code> are the <code>memberElements</code> of all its <code>memberships</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 + member = membership.memberElement + + + + + <p>The <code>ownedMembers</code> of a <code>Namespace</code> are the <code>ownedMemberElements</code> of all its <code>ownedMemberships</code> that are <code>OwningMemberships</code>. - - - OCL2.0 - if excluded->includes(importedNamespace) then Sequence{} -else importedNamespace.visibleMemberships(excluded, isRecursive, isImportAll) - - - - - - - - - - - - - - - <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 + ownedMember = ownedMembership->selectByKind(OwningMembership).ownedMemberElement + + + + + <p>The <code>importedMemberships</code> of a <code>Namespace</code> are derived using the <code>importedMemberships()</code> operation, with no initially <code>excluded</code> <code>Namespaces</code>.</p> - + OCL2.0 - memberElementId = memberElement.elementId + importedMembership = importedMemberships(Set{}) - - - - <p>The <code>elementId</code> of the <code>memberElement</code>.</p> + + + <p>The <code>ownedImports</code> of a <code>Namespace</code> are all its <code>ownedRelationships</code> that are <code>Imports</code>.</p> - + + OCL2.0 + ownedImport = ownedRelationship->selectByKind(Import) + + + + + <p>The <code>ownedMemberships</code> of a <code>Namespace</code> are all its <code>ownedRelationships</code> that are <code>Memberships</code>.</p> + + + OCL2.0 + ownedMembership = ownedRelationship->selectByKind(Membership) + + + + + + <p>All <code>Memberships</code> in this <code>Namespace</code>, including (at least) the union of <code>ownedMemberships</code> and <code>importedMemberships</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>ownedRelationships</code> of this <code>Namespace</code> that are <code>Imports</code>, for which the <code>Namespace</code> is the <code>importOwningNamespace</code>.</p> - - + + - - - <p>The short name of the <code>memberElement</code> relative to the <code>membershipOwningNamespace</code>.</p> + + + <p>The set of all member <code>Elements</code> of this <code>Namespace</code>, which are the <code>memberElements</code> of all <code>memberships</code> of the <code>Namespace</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 owned <code>members</code> of this <code>Namespace</code>, which are the <cpde><code>ownedMemberElements</code> of the <code>ownedMemberships</code> of the <code>Namespace</code>.</p> - - + + - - - <p>The name of the <code>memberElement</code> relative to the <code>membershipOwningNamespace</code>.</p> + + + <p>The <code>ownedRelationships</code> of this <code>Namespace</code> that are <code>Memberships</code>, for which the <code>Namespace</code> is 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>The <code>Memberships</code> in this <code>Namespace</code> that result from the <code>ownedImports</code> of this <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> + + + <p>Return the names of the given <code>element</code> as it is known in this <code>Namespace</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))) - + let elementMemberships : Sequence(Membership) = + memberships->select(memberElement = element) in +memberships.memberShortName-> + union(memberships.memberName)-> + asSet() - - - + + + + + - - - - - <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>Returns this visibility of <code>mem</code> relative to this <code>Namespace</code>. If <code>mem</code> is an <code>importedMembership</code>, this is the <code>visibility</code> of its Import. Otherwise it is the <code>visibility</code> of the <code>Membership</code> itself.</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> + + + OCL2.0 + if importedMembership->includes(mem) then + ownedImport-> + select(importedMemberships(Set{})->includes(mem)). + first().visibility +else if memberships->includes(mem) then + mem.visibility +else + VisibilityKind::private +endif + + + + + + + + <p>If <code>includeAll = true</code>, then return all the <code>Memberships</code> of this <code>Namespace</code>. Otherwise, return only the publicly visible <code>Memberships</code> of this <code>Namespace</code>, including <code>ownedMemberships</code> that have a <code>visibility</code> of <code>public</code> and <code>Memberships</code> imported with a <code>visibility</code> of <code>public</code>. If <code>isRecursive = true</code>, also recursively include all visible <code>Memberships</code> of any <code>public</code> owned <code>Namespaces</code>, or, if <code>IncludeAll = true</code>, all <code>Memberships</code> of all owned <code>Namespaces</code>. When computing imported <code>Memberships</code>, ignore this <code>Namespace</code> and any <code>Namespaces</code> in the given <code>excluded</code> set.</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 + let visibleMemberships : OrderedSet(Membership) = + if includeAll then membershipsOfVisibility(null, excluded) + else membershipsOfVisibility(VisibilityKind::public, excluded) + endif in +if not isRecursive then visibleMemberships +else visibleMemberships->union(ownedMember-> + selectAsKind(Namespace). + select(includeAll or owningMembership.visibility = VisibilityKind::public)-> + visibleMemberships(excluded->including(self), true, includeAll)) +endif - - - - - - - <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>Derive the imported <code>Memberships</code> of this <code>Namespace</code> as the <code>importedMembership</code> of all <code>ownedImports</code>, excluding those Imports whose <code>importOwningNamespace</code> is in the <code>excluded</code> set, and excluding <code>Memberships</code> that have distinguisibility collisions with each other or with any <code>ownedMembership</code>.</p> - - - - - - - - <p>A Type that owns or inherits a FeatureMembership Relationship with the <code>feature</code>.</p> - - - - - - - - - <p>The Disjoinings that identify this Type as their <code>typeDisjoined</code>.</p> + + + OCL2.0 + ownedImport.importedMemberships(excluded->including(self)) + + + + + + + + + + + + + + <p>If <code>visibility</code> is not null, return the <code>Memberships</code> of this <code>Namespace</code> with the given <code>visibility</code>, including <code>ownedMemberships</code> with the given <code>visibility</code> and <code>Memberships</code> imported with the given <code>visibility</code>. If <code>visibility</code> is null, return all <code>ownedMemberships</code> and imported <code>Memberships</code> regardless of visibility. When computing imported <code>Memberships</code>, ignore this <code>Namespace</code> and any <code>Namespaces</code> in the given <code>excluded</code> set.</p> + + + + OCL2.0 + ownedMembership-> + select(mem | visibility = null or mem.visibility = visibility)-> + union(ownedImport-> + select(imp | visibility = null or imp.visibility = visibility). + importedMemberships(excluded->including(self))) + + + + + + + + + + + + + + + + + + <p>Resolve the given qualified name to the named <code>Membership</code> (if any), starting with this <code>Namespace</code> as the local scope. The qualified name string must conform to the concrete syntax of the KerML textual notation. According to the KerML name resolution rules every qualified name will resolve to either a single <code>Membership</code>, or to none.</p> - - + + + OCL2.0 + let qualification : String = qualificationOf(qualifiedName) in +let name : String = unqualifiedNameOf(qualifiedName) in +if qualification = null then resolveLocal(name) +else if qualification = '$' then resolveGlobal(name) +else + let namespaceMembership : Membership = resolve(qualification) in + if namespaceMembership = null or + not namespaceMembership.memberElement.oclIsKindOf(Namespace) + then null + else + namespaceMembership.memberElement.oclAsType(Namespace). + resolveVisible(name) + endif +endif endif + + + + + + + + + + + + + <p>Resolve the given qualified name to the named <code>Membership</code> (if any) in the effective global <code>Namespace</code> that is the outermost naming scope. The qualified name string must conform to the concrete syntax of the KerML textual notation.</p> + + + + + English + No OCL + + + + + + + + + + + + + <p>Resolve a simple <code>name</code> starting with this <code>Namespace</code> as the local scope, and continuing with containing outer scopes as necessary. However, if this <code>Namespace</code> is a root <code>Namespace</code>, then the resolution is done directly in global scope.</p> + + + + + OCL2.0 + if owningNamespace = null then resolveGlobal(name) +else + let memberships : Membership = membership-> + select(memberShortName = name or memberName = name) in + if memberships->notEmpty() then memberships->first() + else owningNamespace.resolveLocal(name) + endif +endif + + + + + + + + + + + + + <p>Resolve a simple name from the visible <code>Memberships</code> of this <code>Namespace</code>.</p> + + + + + OCL2.0 + let memberships : Sequence(Membership) = + visibleMemberships(Set{}, false, false)-> + select(memberShortName = name or memberName = name) in +if memberships->isEmpty() then null +else memberships->first() +endif + + + + + + + + + + + + + <p>Return a string with valid KerML syntax representing the qualification part of a given <code>qualifiedName</code>, that is, a qualified name with all the segment names of the given name except the last. If the given <code>qualifiedName</code> has only one segment, then return null.</p> + + + + English + No OCL + + + + + + + + + + + + + + <p>Return the simple name that is the last segment name of the given <code>qualifiedName</code>. If this segment name has the form of a KerML unrestricted name, then "unescape" it by removing the surrounding single quotes and replacing all escape sequences with the specified character.</p> + + + + English + No OCL + + + + + + + + + + + + + + <p>The Membership with a certain Element as its <code>memberElement</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> + + + + + + @@ -1645,80 +1621,102 @@ else importedNamespace.visibleMemberships(excluded, isRecursive, isImportAll) - - - <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>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>Type</code> with interpretations partly determined by <code>intersectingType</code>, as described in <code>Type::intersectingType</code>.</p> - + + + <p>The <code>specific</code> <code>Type</code> of a <code>Specialization</code> cannot be a conjugated <code>Type</code>.</p> - - - - - - <p><code>Type</code> that partly determines interpretations of <code>typeIntersected</code>, as described in <code>Type::intersectingType</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>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><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>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>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> asserted to be disjoint with the <code>disjoiningType</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><code>Type</code> asserted to be disjoint with the <code>typeDisjoined</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>A <code>typeDisjoined</code> that is also an <code>owningRelatedElement</code>.</p> - + + + - - - - - <p>The Conjugation corresponding to the <code>conjugatedType</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>The Specializations with a certain <code>specific</code> Type.</p> - - + + - - - - <p>The Type that inherits the <code>inheritedMembership</code>.</p> + + + + <p>The Types that include this one among their <code>differencingTypes</code>.</p> - - + + @@ -1744,141 +1742,46 @@ else importedNamespace.visibleMemberships(excluded, isRecursive, isImportAll) - - - - <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 Type with a certain <code>output</code>.</p> + + + + <p>The Types that include this one among their <code>intersectingTypes</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>The Specializations with a certain <code>specific</code> Type.</p> + + + + <p>The Differencings that identify this Type as their <code>differencingType</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>The Specializations with a certain <code>general<code> Type.</p> + + + + <p>A Type that owns or inherits a FeatureMembership Relationship with the <code>feature</code>.</p> - - + + - - - - <p>The Types that include this one among their <code>unioningTypes</code>.</p> - - - + + + + - - - - <p>A Type that owns or inherits the <code>featureMembership</code>.</p> + + + + <p>A Type with a certain <code>output</code>.</p> - - + + @@ -1890,82 +1793,13 @@ else importedNamespace.visibleMemberships(excluded, isRecursive, isImportAll) - - - <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 - if owningNamespace <> null and owningNamespace.oclIsKindOf(Feature) then - featuringType = - owningNamespace.oclAsType(Feature).featuringType -else - featuringType->isEmpty() -endif - - - - - <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 - specializesFromLibrary('Base::naturals') - - - - - - - - - <p>A Type that has an EndFeatureMembership in which the <code>endFeature</code> is a <code>memberFeature</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>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>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> - - + + @@ -1977,22 +1811,6 @@ endif - - - - - - - - - - - <p>The Differencings that identify this Type as their <code>differencingType</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> @@ -2825,15 +2643,50 @@ endif - - - - <p>The Types that include this one among their <code>intersectingTypes</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>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>general<code> Type.</p> + + + + + + + + + <p>A Type that has an EndFeatureMembership in which the <code>endFeature</code> is a <code>memberFeature</code>.</p> + + + + @@ -2843,109 +2696,250 @@ endif - - - - <p>The Types that include this one among their <code>differencingTypes</code>.</p> + + + + <p>A Type that owns or inherits the <code>featureMembership</code>.</p> - - + + - - - - <p>The Features for which a certain Type is a <code>type</code>.</p> + + + + <p>The Conjugation corresponding to the <code>conjugatedType</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>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>A <code>typedFeature</code> that is also the <code>owningRelatedElement</code> of this <code>FeatureTyping</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>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>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>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>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> + + + <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 - 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) + if owningNamespace <> null and owningNamespace.oclIsKindOf(Feature) then + featuringType = + owningNamespace.oclAsType(Feature).featuringType +else + featuringType->isEmpty() +endif - - - <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>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 - crossingFeature.isEnd and -crossingFeature.owningType<>null and -crossingFeature.owningType.endFeature ->size() > 1 + specializesFromLibrary('Base::naturals') - - - - <p>The chained <code>Feature</code> that is cross subset by the <code>crossingFeature</code> of this <code>CrossSubsetting</code>.</p> - + + + + + + <p>A Type that has an <code>inheritedMembership</code> with the <code>inheritedFeature</code> as its <code>memberFeature</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 end <code>Feature</code> that owns this <code>CrossSubsetting</code> relationship and is also its </code>subsettingFeature</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><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>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 Disjoinings that identify this Type as their <code>typeDisjoined</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>The Subclassifications with a certain <code>superclassifier</code>.</p> + + + + + + + + + <p>The Subclassifications with a certain <code>subclassifier</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>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>Classifier</code> that owns this <code>Subclassification</code> relationship, which must also be its <code>subclassifier</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>The <code>ownedSubclassifications</code> of a <code>Classifier</code> are its <code>ownedSpecializations</code> that are <code>Subclassifications</code>.</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> + + + 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> + + + + @@ -3025,37 +3019,106 @@ redefiningFeature.owningType <> null and - - - - <p>The <code>Features</code> that identify a <code>Feature</code> as their <code>featureTarget</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> - - <p>The <code>Features</code> that are the same as or the <code>chainedFeature</code> for a <code>targetFeature</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 FeatureInvertings that identify this Feature as their <code>featureInverted</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 Subsettings with a certain Feature as the <code>subsettedFeature</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 Features for which a certain Type is a <code>type</code>.</p> + + + + + + + + + + + + + + + <p>The Subsettings with a certain Feature as the <code>subsettingFeature</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 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> + + + + - @@ -3065,222 +3128,486 @@ redefiningFeature.owningType <> null and - - - - <p>The Redefinitions with a certain Feature as the <code>redefinedFeature</code>.</p> - - - - - - - - - <p>The Features for which a certain Type is a <code>featuringType</code>.</p> + + + + <p>The FeatureInvertings that identify this Feature as their <code>featureInverted</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><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>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>subsettedFeature</code> must be accessible by the <code>subsettingFeature</code>.</p> - + OCL2.0 - ownedTypeFeaturing = ownedRelationship->selectByKind(TypeFeaturing)-> - select(tf | tf.featureOfType = self) + subsettingFeature.canAccess(subsettedFeature) - - - <p>The <code>ownedSubsettings</code> of a <code>Feature</code> are its <code>ownedSpecializations</code> that are <code>Subsettings</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 - ownedSubsetting = ownedSpecialization->selectByKind(Subsetting) + subsettedFeature.isUnique implies subsettingFeature.isUnique - - - <p>The <code>ownedTypings</code> of a <code>Feature</code> are its <code>ownedSpecializations</code> that are <code>FeatureTypings</code>.</p> + + + <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 - ownedTyping = ownedGeneralization->selectByKind(FeatureTyping) + subsettedFeature.isConstant and subsettingFeature.isVariable implies + subsettingFeature.isConstant + - - - <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>Feature</code> that is subsetted by the <code>subsettingFeature</code> of this <code>Subsetting</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>Feature</code> that is a subset of the <code>subsettedFeature</code> of this <code>Subsetting</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>subsettingFeature</code> that is also the <code>owningRelatedElement</code> of this <code>Subsetting</code>.</p> + + - - OCL2.0 - specializesFromLibrary('Base::things') - - - - - <p>A <code>Feature</code> cannot be one of its own <code>chainingFeatures</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> - - English - chainingFeature->excludes(self) - - - - - <p>The <code>ownedFeatureChainings</code> of a <code>Feature</code> are the <code>ownedRelationships</code> that are <code>FeatureChainings</code>.</p> + + + + + + + + <p>The <code>TypeFeaturings</code> for which a certain <code>Feature</code> is the <code>featureOfType</code>.</p> - - OCL2.0 - ownedFeatureChaining = ownedRelationship->selectByKind(FeatureChaining) - - - - - <p>The <code>chainingFeatures</code> of a <code>Feature</code> are the <code>chainingFeatures</code> of its <code>ownedFeatureChainings</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> + - - OCL2.0 - chainingFeature = ownedFeatureChaining.chainingFeature - - - - - A <code>Feature</code> must have either no <code>chainingFeatures</code> or more than one. + + + + + + <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> + - - 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 FeatureInvertings that identify this Feature as their <code>invertingFeature</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>The FeatureTypings for which a certain Feature is the <code>typedFeature</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>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>A <code>typedFeature</code> that is also the <code>owningRelatedElement</code> of this <code>FeatureTyping</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 - direction = null and -ownedSpecializations->forAll(isImplied) implies - ownedMembership-> - selectByKind(FeatureValue)-> - forAll(fv | specializes(fv.value.result)) + ownedMemberFeature.isEnd - - - <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>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 an inverse of the <code>invertingFeature</code>.</p> - + + + + + + <p>The <code>Feature</code> that is an inverse of the <code>invertedFeature</code>.</p> + + + + + + + <p>A <code>featureInverted</code> that is also the <code>owningRelatedElement</code> of this <code>FeatureInverting</code>.</p> + + + + + + + + + + + + <p>The Subsettings with a certain Feature as the <code>subsettedFeature</code>.</p> + + + + + + + + + <p>The FeatureTyping relating this Type to a Feature.</p> + + + + + + + + + <p>The Feature that owns this Redefinition relationship, which must also be its <code>redefiningFeature</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 <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>A <code>Type</code> that has the <code>multiplicity</code> as an <code>ownedMember</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>ownedRedefinitions</code> of a <code>Feature</code> are its <code>ownedSubsettings</code> that are <code>Redefinitions</code>.</p> + + OCL2.0 - isEnd and owningType <> null and -(owningType.oclIsKindOf(Association) or - owningType.oclIsKindOf(Connector)) implies - specializesFromLibrary('Links::Link::participant') + ownedRedefinition = ownedSubsetting->selectByKind(Redefinition) - - - <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>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 - 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') + ownedTypeFeaturing = ownedRelationship->selectByKind(TypeFeaturing)-> + select(tf | tf.featureOfType = self) - - - <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>ownedSubsettings</code> of a <code>Feature</code> are its <code>ownedSpecializations</code> that are <code>Subsettings</code>.</p> - + OCL2.0 - ownedTyping.type->exists(selectByKind(Class)) implies - specializesFromLibrary('Occurrences::occurrences') + ownedSubsetting = ownedSpecialization->selectByKind(Subsetting) - - - <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 <code>ownedTypings</code> of a <code>Feature</code> are its <code>ownedSpecializations</code> that are <code>FeatureTypings</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') + ownedTyping = ownedGeneralization->selectByKind(FeatureTyping) - - - <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> + + + <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 + 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> + + + 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> + + + OCL2.0 + specializesFromLibrary('Base::things') + + + + + <p>A <code>Feature</code> cannot be one of its own <code>chainingFeatures</code>.</p> + + + English + chainingFeature->excludes(self) + + + + + <p>The <code>ownedFeatureChainings</code> of a <code>Feature</code> are the <code>ownedRelationships</code> that are <code>FeatureChainings</code>.</p> + + + OCL2.0 + ownedFeatureChaining = ownedRelationship->selectByKind(FeatureChaining) + + + + + <p>The <code>chainingFeatures</code> of a <code>Feature</code> are the <code>chainingFeatures</code> of its <code>ownedFeatureChainings</code>.</p> + + + OCL2.0 + chainingFeature = ownedFeatureChaining.chainingFeature + + + + + A <code>Feature</code> must have either no <code>chainingFeatures</code> or more than one. + + + 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> + + + 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> + + + 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> + + + 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>. + + + 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> + + + 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>. + + + 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 @@ -4050,447 +4377,193 @@ 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> - - - - 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 - 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> - - - - 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 <em>not</em> a <code>Multiplicity</code>, <code>MetadataFeature</code>, or <code>BindingConnector</code>, and whose <code>owningMembership</code> is <em>not</em> a <code>FeatureMembership</code> or <code>FeatureValue</code>. If this exists, it is the <code>crossFeature</code> of the end <code>Feature</code>.</p> - - - - 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(BindingConnector))-> - reject(owningMembership.oclIsKindOf(FeatureMembership) or - owningMembership.oclIsKindOf(FeatureValue)) in - if ownedMemberFeatures.isEmpty() then null - else ownedMemberFeatures->first() - endif -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 - 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>Relationship for chainedFeatures.</p> - - - - <p>The <code>FeatureChainings</code> that identify a <code>Feature</code> as their <code>chainingFeature</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 an inverse of the <code>invertingFeature</code>.</p> - - - - - - - <p>The <code>Feature</code> that is an inverse of the <code>invertedFeature</code>.</p> - - - - - - - <p>A <code>featureInverted</code> that is also the <code>owningRelatedElement</code> of this <code>FeatureInverting</code>.</p> - - - - - - - - - - <p>The <code>TypeFeaturings</code> for which a certain <code>Feature</code> is the <code>featureOfType</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 FeatureTyping relating this Type to a Feature.</p> - - - - - - - - - - <p>The Subsettings with a certain Feature as the <code>subsettingFeature</code>.</p> - - - - - - - - - <p>The Redefinitions with a certain Feature as the <code>redefiningFeature</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>invertingFeature</code>.</p> - - - - - - - - - <p>The Feature that owns this Redefinition relationship, which must also be its <code>redefiningFeature</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 <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 <code>ReferenceSubsetting</code> with a certain <code>Feature</code> as the <code>referencedFeature</code>.</p> - - - - - - - - - <p>The <code>Features</code> with a certain other <code>Feature</code> as the <code>crossFeature</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> + + + + + <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 - ownedMemberFeature.isEnd - - - - - - - - - - - <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 + 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 - subsettingFeature.canAccess(subsettedFeature) - - - - - <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 + 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> - - 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 + 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 <em>not</em> a <code>Multiplicity</code>, <code>MetadataFeature</code>, or <code>BindingConnector</code>, and whose <code>owningMembership</code> is <em>not</em> a <code>FeatureMembership</code> or <code>FeatureValue</code>. If this exists, it is the <code>crossFeature</code> of the end <code>Feature</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> + + + 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(BindingConnector))-> + reject(owningMembership.oclIsKindOf(FeatureMembership) or + owningMembership.oclIsKindOf(FeatureValue)) in + if ownedMemberFeatures.isEmpty() then null + else ownedMemberFeatures->first() + endif +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> - - - - - - <p>The <code>Feature</code> that is a subset of the <code>subsettedFeature</code> of this <code>Subsetting</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> - - - - - - <p>A <code>subsettingFeature</code> that is also the <code>owningRelatedElement</code> of this <code>Subsetting</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>The Features for which a certain Type is a <code>featuringType</code>.</p> - - - + + + @@ -4517,652 +4590,694 @@ endif - - - - <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> + + + + + + + + + <p>The <code>Features</code> with a certain other <code>Feature</code> as the <code>crossFeature</code>.</p> + + + + + + + + + <p>The <code>CrossSubsetting</code> with a certain <code>Feature</code> as the <code>crossedFeature</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 Redefinitions with a certain Feature as the <code>redefiningFeature</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>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>ownedSubclassifications</code> of a <code>Classifier</code> are its <code>ownedSpecializations</code> that are <code>Subclassifications</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 - ownedSubclassification = - ownedSpecialization->selectByKind(Subclassification) + ownedMemberParameter.direction = parameterDirection() - - - <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>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 - multiplicity <> null implies multiplicity.featuringType->isEmpty() + owningType.oclIsKindOf(Behavior) or owningType.oclIsKindOf(Step) or +owningType.owningMembership.oclIsKindOf(ReturnParameterMembership) and + owningType.owningNamespace.oclIsKindOf(ConstructorExpression) - - - - <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>Feature</code> that is identified as a <code>parameter</code> by this <code>ParameterMembership</code>.</p> - - + + - - - - - <p>The Subclassifications with a certain <code>superclassifier</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><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>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>The more <code>general</code> Classifier in this <code>Subclassification</code>.</p> - + + + <p>A <code>Behavior</code> must not specialize a <code>Structure</code>.</p> - - - - - - <p>The more specific <code>Classifier</code> in this <code>Subclassification</code>.</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') + + + + + <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 <code>Classifier</code> that owns this <code>Subclassification</code> relationship, which must also be its <code>subclassifier</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>The Subclassifications with a certain <code>subclassifier</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>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>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>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 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) + specializesFromLibrary('Performances::performances') + + + + + <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 + owningType <> null and + (owningType.oclIsKindOf(Behavior) or + owningType.oclIsKindOf(Step)) implies + specializesFromLibrary('Performances::Performance::enclosedPerformance') + + + + + <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 + 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>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>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 - featureWithValue.redefinition.redefinedFeature-> - closure(redefinition.redefinedFeature).valuation-> - forAll(isDefault) + owningType <> null and + (owningType.oclIsKindOf(Behavior) or + owningType.oclIsKindOf(Step)) and + self.isComposite implies + specializesFromLibrary('Performances::Performance::subperformance') - - - <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>behaviors</code> of a <code>Step</code> are all its <code>types</code> that are <code>Behaviors</code>.</p> - + OCL2.0 - isInitial implies featureWithValue.isVariable + behavior = type->selectByKind(Behavior) - - - - <p>The Feature to be provided a value.</p> - - - <p>The <code>Feature</code> to be provided a value.</p> + + + + <p>The <code>Behaviors</code> that type this <code>Step</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>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>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 (at most one) <code>ownedMembership</code> of this Feature that is the FeatureValue that provides the value of the Feature.</p> - - - - - - - - - <p>The FeatureValue that owns the <code>value</code> 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>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>DataType</code> must not specialize a <code>Class</code> or an <code>Association</code>.</p> + + + <p>The <code>relatedTypes</code> of an <code>Association</code> are the <code>types</code> of its <code>associationEnds</code>.</p> - + OCL2.0 - ownedSpecialization.general-> - forAll(not oclIsKindOf(Class) and - not oclIsKindOf(Association)) + relatedType = associationEnd.type - - - <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>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('Base::DataValue') + specializesFromLibrary('Links::Link') - - - - - <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> + + + <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::nullEvaluations') + + English + oclIsKindOf(Structure) = oclIsKindOf(AssociationStructure) - - - - <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> - - - - OCL2.0 - Sequence{} - - - - - - - - - - - - <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>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('Performances::literalIntegerEvaluations') + associationEnd->size() = 2 implies + specializesFromLibrary('Links::BinaryLink') - - - - <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>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::Collection</code></em> from the Kernel Data Type 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 - arguments->notEmpty() and -not arguments->first().result.specializesFromLibrary('Collections::Collection') implies - result.specializes(arguments->first().result) + not isAbstract implies relatedType->size() >= 2 - - - <p>The <code>operator</code> of an <code>IndexExpression</code> must be <code>"#"</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 - operator = '#' + associationEnds->size() > 2 implies + not specializesFromLibrary('Links::BinaryLink') - - - - - - - - - <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>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>The <code>sourceType</code> of an <code>Association</code> is its first <code>relatedType</code> (if any).</p> - + OCL2.0 - instantiatedType.feature->collect(f | - result.ownedFeatures->select(redefines(f)).valuation-> - select(v | v <> null).value -) + sourceType = + if relatedType->isEmpty() then null + else relatedType->first() endif - - - <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())) + targetType = + if relatedType->size() < 2 then OrderedSet{} + else + relatedType-> + subSequence(2, relatedType->size())-> + asOrderedSet() + endif - - - <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>ownedEndFeatures</code> of an <code>Association</code> must have exactly one <code>type</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) + ownedEndFeature->forAll(type->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> + + + + + <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 - TBD + specializesFromLibrary('Objects::LinkObject') - - - <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>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 - specializes('Performances::constructorEvaluations') + endFeature->size() = 2 implies + specializesFromLibrary('Objects::BinaryLinkObject') - - - <p>The <code>result</code> of a <code>ConstructorExpression</code> must specialize the <code>instantiatedType</code> of the <code>ConstructorExpression</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>The <code>relatedFeatures</code> of a <code>Connector</code> are the referenced <code>Features</code> of its <code>connectorEnds</code>.</p> - + OCL2.0 - result.specializes(instantiatedType) + relatedFeature = connectorEnd.ownedReferenceSubsetting-> + select(s | s <> null).subsettedFeature - - - <p>A <code>ConstructorExpression</code> must not have any <code>ownedFeatures</code> other than its <code>result</code>.</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 - ownedFeatures->excluding(result)->isEmpty() + relatedFeature->forAll(f | + if featuringType->isEmpty() then f.isFeaturedWithin(null) + else featuringType->forAll(t | f.isFeaturedWithin(t)) + endif) - - - - <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>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> + + + <p>The <code>sourceFeature</code> of a <code>Connector</code> is its first <code>relatedFeature</code> (if any).</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)) + sourceFeature = + if relatedFeature->isEmpty() then null + else relatedFeature->first() + endif - - - <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>The <code>targetFeatures</code> of a <code>Connector</code> are the <code>relatedFeatures</code> other than the <code>sourceFeature</code>.</p> - + OCL2.0 - TBD + targetFeature = + if relatedFeature->size() < 2 then OrderedSet{} + else + relatedFeature-> + subSequence(2, relatedFeature->size())-> + asOrderedSet() + endif - - - <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 a <code>Connector</code> is concrete (not abstract), then it must have at least two <code>relatedFeatures</code>.</p> - + OCL2.0 - instantiatedType.input->collect(inp | - ownedFeatures->select(redefines(inp)).valuation-> - select(v | v <> null).value -) + not isAbstract implies relatedFeature->size() >= 2 - - - <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>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 - let parameters : OrderedSet(Feature) = instantiatedType.input in -input->forAll(inp | - inp.ownedRedefinition.redefinedFeature-> - intersection(parameters)->size() = 1) + specializesFromLibrary('Links::links') - - - <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>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 - 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())) + association->exists(oclIsKindOf(AssociationStructure)) implies + specializesFromLibrary('Objects::linkObjects') - - - <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 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 - not instantiatedType.oclIsKindOf(Function) and -not (instantiatedType.oclIsKindOf(Feature) and - instantiatedType.oclAsType(Feature).type->exists(oclIsKindOf(Function))) implies - result.specializes(instantiatedType) + connectorEnds->size() = 2 and +association->exists(oclIsKindOf(AssociationStructure)) implies + specializesFromLibrary('Objects::binaryLinkObjects') - - - <p>An <code>InvocationExpression</code> must specialize its <code>instantiatedType</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 - specializes(instantiatedType) + connectorEnd->size() = 2 implies + specializesFromLibrary('Links::binaryLinks') - - - <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>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 - instantiatedType.oclIsKindOf(Behavior) or -instantiatedType.oclIsKindOf(Feature) and - instantiatedType.type->exists(oclIsKindOf(Behavior)) and - instantiatedType.type->size(1) + connectorEnds->size() > 2 implies + not specializesFromLibrary('Links::BinaryLink') - - - <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>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 - ownedFeature->forAll(f | - f <> result implies - f.direction = FeatureDirectionKind::_'in') + 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>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>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> - - - OCL2.0 - argument->forAll(modelLevelEvaluable(visited)) and - function.isModelLevelEvaluable - - - - - - - - - - - - - <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>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>InstantiationExpression</code> that has a certain <code>argument</code> <code>Expression</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>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>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>operator</code> of a <code>SelectExpression</code> must be <code>'select'</code>.</p> + + + <p>A <code>BindingConnector</code> must be binary.</p> - + OCL2.0 - operator = 'select' + relatedFeature->size() = 2 - - - <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>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 - arguments->notEmpty() implies - result.specializes(arguments->first().result) + specializesFromLibrary('Links::selfLinks') - - - - - + - - - - + + + + <p>A <code>Connector</code> with a certain <code>defaultFeaturingType</code>.</p> + + + @@ -5172,163 +5287,155 @@ instantiatedType.oclIsKindOf(Feature) and - <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('Performances::literalStringEvaluations') - - - - - - <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><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>A <code>LiteralBoolean</code> must directly or indirectly specialize <em><code>Performances::literalBooleanEvaluations</code></em> 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('Performances::literalBooleanEvaluations') + specializesFromLibrary('Performances::literalStringEvaluations') - - - - <p>The <code><em>Boolean</em></code> value that is the result of evaluating this <code>LiteralBoolean</code>.</p> + + + + <p>The String value that is the result of evaluating this Expression.</p> - - <p>The Boolean 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>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>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>A <code>LiteralInfinity</code> must directly or indirectly specialize <em><code>Performances::literalIntegerEvaluations</code></em> from the Kernel Semantic Library.</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 - specializesFromLibrary('Performances::literalIntegerEvaluations') + let sourceTargetFeature : Feature = sourceTargetFeature() in +sourceTargetFeature <> null and +sourceTargetFeature.redefinesFromLibrary('ControlFunctions::\'.\'::source::target') - - - - - - <p>The <code>MetadataAccessExpressions</code> having a certain <code>Element</code> as their <code>referencedElement</code>.</p> + + + <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>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 + 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 - specializesFromLibrary('Performances::metadataAccessEvaluations') + 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>A <code>MetadataAccessExpression</code> must have at least one <code>ownedMember</code> that is not a <code>FeatureMembership</code>.</p> + + + <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 - ownedMembership->exists(not oclIsKindOf(FeatureMembership)) + argument->notEmpty() implies + targetFeature.isFeaturedWithin(argument->first().result) - - - <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>The <code>operator</code> of a <code>FeatureChainExpression</code> must be <code>"."</code>.</p> - + OCL2.0 - referencedElement = - let elements : Sequence(Element) = ownedMembership-> - reject(oclIsKindOf(FeatureMembership)).memberElement in - if elements->isEmpty() then null - else elements->first() - endif + operator = '.' - - - - <p>The <code>Element</code> whose metadata is being accessed.</p> + + + <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 + + + + + + - - - <p>A <code>MetadataAccessExpression</code> is always model-level evaluable.</p> + + + <p>The <code>Feature</code> that is accessed by this <code>FeatureChainExpression<code>, which is its first non-<code>parameter</code> <code>member</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>Return the first <code>ownedFeature</code> of the first owned input <code>parameter</code> of this <code>FeatureChainExpression</code> (if any).</p> - - + + OCL2.0 - referencedElement.ownedElement-> - select(oclIsKindOf(MetadataFeature) - and annotatedElement->includes(referencedElement))-> - including(metaclassFeature()) + let inputParameters : Feature = ownedFeatures-> + select(direction = _'in') in +if inputParameters->isEmpty() or + inputParameters->first().ownedFeature->isEmpty() +then null +else inputParameters->first().ownedFeature->first() +endif - - - - + + + - - - <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>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 + operator = 'collect' + + + + + + + @@ -5395,264 +5502,208 @@ if members->isEmpty() or not members->first().oclIsKindOf(Type) then null else typeMembers->first().oclAsType(Type) endif - - - - - - - - - - <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 - - - - - - - - - <p>A <code>FeatureReferenceExpression</code> that has a certain <code>referent</code> <code>Feature</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>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>LiteralExpression</code> is always model-level evaluable.</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::Collection</code></em> from the Kernel Data Type Library.</p> - + OCL2.0 - isModelLevelEvaluable = true + arguments->notEmpty() and +not arguments->first().result.specializesFromLibrary('Collections::Collection') implies + result.specializes(arguments->first().result) - - - <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>The <code>operator</code> of an <code>IndexExpression</code> must be <code>"#"</code>.</p> - + OCL2.0 - specializesFromLibrary('Performances::literalEvaluations') + operator = '#' - - - - <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>FeatureReferenceExpression</code> is an <code>Expression</code> whose <code>result</code> is bound to a <code>referent</code> <code>Feature</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>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>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 - 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 + instantiatedType.feature->collect(f | + result.ownedFeatures->select(redefines(f)).valuation-> + select(v | v <> null).value +) - - - <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>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 - ownedMember->selectByKind(BindingConnector)->exists(b | - b.relatedFeatures->includes(targetFeature) and - b.relatedFeatures->includes(result)) + 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>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>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 membership : Membership = - ownedMembership->reject(m | m.oclIsKindOf(ParameterMembership)) in -membership->notEmpty() and -membership->at(1).memberElement.oclIsKindOf(Feature) + 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> parameter of a <code>FeatureReferenceExpression</code> must specialize the <code>referent</code> of the <code>FeatureReferenceExpression</code>.</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 - result.owningType() = self and result.specializes(referent) + TBD - - - <p>A <code>FeatureReferenceExpression</code> must own its <code>result</code> parameter.</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 - result.owningType = self + specializes('Performances::constructorEvaluations') - - - - <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 <code>result</code> of a <code>ConstructorExpression</code> must specialize the <code>instantiatedType</code> of the <code>ConstructorExpression</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 + result.specializes(instantiatedType) + + + + + <p>A <code>ConstructorExpression</code> must not have any <code>ownedFeatures</code> other than its <code>result</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> - -<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 + 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 - 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 - - - - - - + argument->forAll(modelLevelEvaluable(visited)) + + + + + + + + + + + <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>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>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> + + + OCL2.0 + arguments->notEmpty() implies + result.specializes(arguments->first().result) + + + + + + + + + + + + <p>A <code>FeatureReferenceExpression</code> that has a certain <code>referent</code> <code>Feature</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> @@ -5679,672 +5730,677 @@ endif - - - <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> - + + + + + + + + + <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 - argument->notEmpty() implies - targetFeature.isFeaturedWithin(argument->first().result) + 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>The <code>operator</code> of a <code>FeatureChainExpression</code> must be <code>"."</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 - operator = '.' + TBD - - - <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>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 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 + instantiatedType.input->collect(inp | + ownedFeatures->select(redefines(inp)).valuation-> + select(v | v <> null).value +) - - - - - - - - <p>The <code>Feature</code> that is accessed by this <code>FeatureChainExpression<code>, which is its first non-<code>parameter</code> <code>member</code>.<p> - - - - - - - <p>Return the first <code>ownedFeature</code> of the first owned input <code>parameter</code> of this <code>FeatureChainExpression</code> (if any).</p> - - - - OCL2.0 - let inputParameters : Feature = ownedFeatures-> - select(direction = _'in') in -if inputParameters->isEmpty() or - inputParameters->first().ownedFeature->isEmpty() -then null -else inputParameters->first().ownedFeature->first() -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>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 - operator = 'collect' + let parameters : OrderedSet(Feature) = instantiatedType.input in +input->forAll(inp | + inp.ownedRedefinition.redefinedFeature-> + intersection(parameters)->size() = 1) - - - - - - - - - - - - - - - - - - - - - <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> + + + <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 - specializesFromLibrary('Objects::LinkObject') + 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>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>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 - endFeature->size() = 2 implies - specializesFromLibrary('Objects::BinaryLinkObject') + not instantiatedType.oclIsKindOf(Function) and +not (instantiatedType.oclIsKindOf(Feature) and + instantiatedType.oclAsType(Feature).type->exists(oclIsKindOf(Function))) implies + result.specializes(instantiatedType) - - - - - - - - - - - - <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> + + + <p>An <code>InvocationExpression</code> must specialize its <code>instantiatedType</code>.</p> - + OCL2.0 - relatedType = associationEnd.type + specializes(instantiatedType) - - - <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>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 - specializesFromLibrary('Links::Link') + instantiatedType.oclIsKindOf(Behavior) or +instantiatedType.oclIsKindOf(Feature) and + instantiatedType.type->exists(oclIsKindOf(Behavior)) and + instantiatedType.type->size(1) - - - <p>If an <code>Association</code> is also a kind of <code>Structure</code>, then it must be an <code>AssociationStructure</code>.</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> - - English - oclIsKindOf(Structure) = oclIsKindOf(AssociationStructure) + + OCL2.0 + ownedFeature->forAll(f | + f <> result implies + f.direction = FeatureDirectionKind::_'in') - - - <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>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 + argument->forAll(modelLevelEvaluable(visited)) and + function.isModelLevelEvaluable + + + + + + + + + + + + + <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>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 - associationEnd->size() = 2 implies - specializesFromLibrary('Links::BinaryLink') + 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>Association</code> is concrete (not abstract), then it must have at least two <code>relatedTypes</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 - not isAbstract implies relatedType->size() >= 2 + ownedMember->selectByKind(BindingConnector)->exists(b | + b.relatedFeatures->includes(targetFeature) and + b.relatedFeatures->includes(result)) - - - <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>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 - associationEnds->size() > 2 implies - not specializesFromLibrary('Links::BinaryLink') + let membership : Membership = + ownedMembership->reject(m | m.oclIsKindOf(ParameterMembership)) in +membership->notEmpty() and +membership->at(1).memberElement.oclIsKindOf(Feature) - - - <p>The <code>sourceType</code> of an <code>Association</code> is its first <code>relatedType</code> (if any).</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 - sourceType = - if relatedType->isEmpty() then null - else relatedType->first() endif + result.owningType() = self and result.specializes(referent) - - + + + <p>A <code>FeatureReferenceExpression</code> must own its <code>result</code> parameter.</p> + + OCL2.0 - targetType = - if relatedType->size() < 2 then OrderedSet{} - else - relatedType-> - subSequence(2, relatedType->size())-> - asOrderedSet() - endif + result.owningType = self - - - <p>The <code>ownedEndFeatures</code> of an <code>Association</code> must have exactly one <code>type</code></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>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 + 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><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>A <code>LiteralBoolean</code> must directly or indirectly specialize <em><code>Performances::literalBooleanEvaluations</code></em> from the Kernel Semantic Library.</p> - + OCL2.0 - ownedEndFeature->forAll(type->size() = 1) + specializesFromLibrary('Performances::literalBooleanEvaluations') - - - - - <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><em>Boolean</em></code> value that is the result of evaluating this <code>LiteralBoolean</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 Boolean value that is the result of evaluating this Expression.</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>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>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>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 + + + + - - - - + + + + <p>The <code>MetadataAccessExpressions</code> having a certain <code>Element</code> as their <code>referencedElement</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>LiteralExpression</code> is an <code>Expression</code> that provides a basic <code><em>DataValue</em></code> as a result.</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> + + + <p>A <code>LiteralExpression</code> is always model-level evaluable.</p> - + OCL2.0 - ownedMemberParameter.direction = parameterDirection() + isModelLevelEvaluable = true - - - <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>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 - owningType.oclIsKindOf(Behavior) or owningType.oclIsKindOf(Step) or -owningType.owningMembership.oclIsKindOf(ReturnParameterMembership) and - owningType.owningNamespace.oclIsKindOf(ConstructorExpression) + specializesFromLibrary('Performances::literalEvaluations') - - - - <p>The <code>Feature</code> that is identified as a <code>parameter</code> by this <code>ParameterMembership</code>.</p> - + + + + <p>A <code>LiteralExpression</code> is always model-level evaluable.</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 + true + + + + + + + + + + + + + <p>The model-level value of a <code>LiteralExpression</code> is itself.</p> - - + + OCL2.0 - FeatureDirectionKind::_'in' + Sequence{self} - - - + + + + - - - <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 - 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> - + + + + <p>A <code>InstantiationExpression</code> that has a certain <code>argument</code> <code>Expression</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>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>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 - specializesFromLibrary('Performances::performances') - - - - - <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 - owningType <> null and - (owningType.oclIsKindOf(Behavior) or - owningType.oclIsKindOf(Step)) implies - specializesFromLibrary('Performances::Performance::enclosedPerformance') - - - - - <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>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 - 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') + specializesFromLibrary('Performances::metadataAccessEvaluations') - - - <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> + + + <p>A <code>MetadataAccessExpression</code> must have at least one <code>ownedMember</code> that is not a <code>FeatureMembership</code>.</p> - + OCL2.0 - owningType <> null and - (owningType.oclIsKindOf(Behavior) or - owningType.oclIsKindOf(Step)) and - self.isComposite implies - specializesFromLibrary('Performances::Performance::subperformance') + ownedMembership->exists(not oclIsKindOf(FeatureMembership)) - - - <p>The <code>behaviors</code> of a <code>Step</code> are all its <code>types</code> that are <code>Behaviors</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 - behavior = type->selectByKind(Behavior) + referencedElement = + let elements : Sequence(Element) = ownedMembership-> + reject(oclIsKindOf(FeatureMembership)).memberElement in + if elements->isEmpty() then null + else elements->first() + endif - - - - <p>The <code>Behaviors</code> that type this <code>Step</code>.</p> - + + + + <p>The <code>Element</code> whose metadata is being accessed.</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>A <code>MetadataAccessExpression</code> is always model-level evaluable.</p> - - - - - - - - <p>The Expressions that are typed by a certain <code>function</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> - - - + + + 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>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>NullExpression</code> is an <code>Expression</code> that results in a null value.</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>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 - featureMembership-> - selectByKind(ReturnParameterMembership)-> - size() = 1 + specializesFromLibrary('Performances::nullEvaluations') - - - <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>A <code>NullExpression</code> is always model-level evaluable.</p> - - OCL2.0 - specializesFromLibrary('Performances::Evaluation') - - - - - <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 + true + + + + + + + + + + + + + <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 - ownedMembership.selectByKind(ResultExpressionMembership)-> - forAll(mem | ownedFeature.selectByKind(BindingConnector)-> - exists(binding | - binding.relatedFeature->includes(result) and - binding.relatedFeature->includes(mem.ownedResultExpression.result))) + specializesFromLibrary('Performances::literalIntegerEvaluations') - - - <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>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 - result = - let resultParams : Sequence(Feature) = - featureMemberships-> - selectByKind(ReturnParameterMembership). - ownedMemberParameter in - if resultParams->notEmpty() then resultParams->first() - else null - endif + specializesFromLibrary('Objects::Object') - - - <p>A <code>Function</code> must have at most one <code>ResultExpressionMembership</code>.</p> + + + <p>A <code>Structure</code> must not specialize a <code>Behavior</code>.</p> - + OCL2.0 - membership->selectByKind(ResultExpressionMembership)->size() <= 1 + ownedSpecialization.general->forAll(not oclIsKindOf(Behavior)) - - - - <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>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>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 + specializesFromLibrary('Performances::booleanEvaluations') + + + + + + <p>The Predicate that types the Expression.</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> + + <p>The <code>Predicate</code> that types this <code>BooleanExpression</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>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>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>The <code>owningType</code> of a <code>ReturnParameterMembership</code> must be a <code>Function</code> or <code>Expression</code>.</p> - + OCL2.0 - if isNegated then - specializesFromLibrary('Performances::falseEvaluations') -else - specializesFromLibrary('Performances::trueEvaluations') -endif + owningType.oclIsKindOf(Function) or owningType.oclIsKindOf(Expression) - - - - <p>Whether this <code>Invariant</code> is asserted to be false rather than true.</p> - - - - - - - - - - <p>The Expressions that have a certain Feature its owned or inherited <code>result</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 + + + + + + + @@ -6489,49 +6545,197 @@ ownedFeature->forAll(f | <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 + 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>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 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>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> + + + 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') + + + + + <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 + 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 + result = + let resultParams : Sequence(Feature) = + featureMemberships-> + selectByKind(ReturnParameterMembership). + ownedMemberParameter in + if resultParams->notEmpty() then resultParams->first() + else null + 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 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 - let results: Sequence(Element) = evaluate(target) in - result->size() = 1 and - results->first().oclIsKindOf(LiteralBoolean) and - results->first().oclAsType(LiteralBoolean).value - - - - - - - + + + + + + <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> + + + + + + + + + + + + + + <p>The Functions that have a certain Feature its owned or inherited <code>result</code>.</p> + + + + + + + + + <p>The Expressions that have a certain Feature its owned or inherited <code>result</code>.</p> + + + + @@ -6557,37 +6761,13 @@ 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>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::booleanEvaluations') - - - - - - <p>The Predicate that types the Expression.</p> - - - - <p>The <code>Predicate</code> that types this <code>BooleanExpression</code>.</p> + + + + <p>The Functions that hasve a certain <code>expression</code> as a step.</p> - - - - - - - - + + @@ -6606,46 +6786,6 @@ endif - - - - <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>The <code>owningType</code> of a <code>ReturnParameterMembership</code> must be a <code>Function</code> or <code>Expression</code>.</p> - - - OCL2.0 - owningType.oclIsKindOf(Function) or owningType.oclIsKindOf(Expression) - - - - - - <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 - - - - - - - - @@ -6655,274 +6795,312 @@ endif - - - - <p>The Functions that have a certain Feature its owned or inherited <code>result</code>.</p> + + + + <p>The Expressions that are typed by a certain <code>function</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>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>The <code>relatedFeatures</code> of a <code>Connector</code> are the referenced <code>Features</code> of its <code>connectorEnds</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> - + OCL2.0 - relatedFeature = connectorEnd.ownedReferenceSubsetting-> - select(s | s <> null).subsettedFeature + specializesFromLibrary('Occurrences::Occurrence') - - - <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>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 - relatedFeature->forAll(f | - if featuringType->isEmpty() then f.isFeaturedWithin(null) - else featuringType->forAll(t | f.isFeaturedWithin(t)) - endif) + ownedSpecialization.general-> + forAll(not oclIsKindOf(DataType)) and +not oclIsKindOf(Association) implies + ownedSpecialization.general-> + forAll(not oclIsKindOf(Association)) - - - <p>The <code>sourceFeature</code> of a <code>Connector</code> is its first <code>relatedFeature</code> (if any).</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 ItemFlow that has a certain <code>sourceOutputFeature</code>.</p> - - OCL2.0 - sourceFeature = - if relatedFeature->isEmpty() then null - else relatedFeature->first() - endif - - - - - <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>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 - targetFeature = - if relatedFeature->size() < 2 then OrderedSet{} - else - relatedFeature-> - subSequence(2, relatedFeature->size())-> - asOrderedSet() - endif + specializesFromLibrary('Transfers::transfers') - - - <p>If a <code>Connector</code> is concrete (not abstract), then it must have at least two <code>relatedFeatures</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 - not isAbstract implies relatedFeature->size() >= 2 + payloadType = + if payloadFeature = null then Sequence{} + else payloadFeature.type + endif - - - <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>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 - specializesFromLibrary('Links::links') + sourceOutputFeature = + if connectorEnd->isEmpty() or + connectorEnd.ownedFeature->isEmpty() + then null + else connectorEnd.ownedFeature->first() + 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>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 - association->exists(oclIsKindOf(AssociationStructure)) implies - specializesFromLibrary('Objects::linkObjects') + 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> 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>flowEnds</code> of a <code>Flow</code> are all its <code>connectorEnds</code> that are <code>FlowEnds</code>.</p> - + OCL2.0 - connectorEnds->size() = 2 and -association->exists(oclIsKindOf(AssociationStructure)) implies - specializesFromLibrary('Objects::binaryLinkObjects') + flowEnd = connectorEnd->selectByKind(FlowEnd) - - - <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>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 - connectorEnd->size() = 2 implies - specializesFromLibrary('Links::binaryLinks') + payloadFeature = + let payloadFeatures : Sequence(PayloadFeature) = + ownedFeature->selectByKind(PayloadFeature) in + if payloadFeatures->isEmpty() then null + else payloadFeatures->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> + + + <p>A <code>Flow</code> must have at most one <code>ownedFeature</code> that is an <code>PayloadFeature</code>.</p> - + OCL2.0 - connectorEnds->size() > 2 implies - not specializesFromLibrary('Links::BinaryLink') + ownedFeature->selectByKind(PayloadFeature)->size() <= 1 - - - <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> with <code>ownedEndFeatures</code> must specialize the <code>Step</code> <code><em>Transfers::flowTransfers</em></code> from the Kernel Semantic Library.</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 + ownedEndFeatures->notEmpty() implies + specializesFromLibrary('Transfers::flowTransfers') - - - - - <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 type of values transferred, which is the <code>type</code> of the <code>payloadFeature</code> of the <code>Flow</code>.</p> + - - + + - - - <p>The <code>Associations</code> that type 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 <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 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 source <code>relatedFeature</code> for this <code>Connector</code>. It is the first <code>relatedFeature</code>.</p> + + + <p>The <code>connectorEnds</code> of this <code>Flow</code> that are <code>FlowEnds</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>ownedFeature</code> of the <code>Flow</code> that is a <code>PayloadFeature</code> (if any).</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>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>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>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>Succession</code> must directly or indirectly specialize the Feature <code><em>Occurrences::happensBeforeLinks</em></code> from the Kernel Semantic Library.</p> + + + <p>A <code>FlowEnd</code> must be an end <code>Feature</code>.</p> - + OCL2.0 - specializesFromLibrary('Occurrences::happensBeforeLinks') + 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> + + + OCL2.0 + owningType <> null and owningType.oclIsKindOf(Flow) + + + - - - - + + + + - - - - <p>A <code>Connector</code> with a certain <code>defaultFeaturingType</code>.</p> - - - + + + <p>The ItemFlow that has a certain <code>itemType</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 ItemFlow that has a certain <code>targetInputFeature</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>BindingConnector</code> must be binary.</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 - relatedFeature->size() = 2 + specializesFromLibrary('Transfers::flowTransfersBefore') - - - <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>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 - specializesFromLibrary('Links::selfLinks') + redefinesFromLibrary('Transfers::Transfer::payload') - + + + + + + + @@ -6930,12 +7108,6 @@ 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> @@ -6943,14 +7115,14 @@ endif - <p>If the <code>owningType</code> of a <code>MultiplicityRange</code> is a <code>Feature</code>, but not an owned cross <code>Feature</code>, then the <code>bounds</code> of the <code>MultiplicityRange</code> must have the same <code>featuringTypes</code> as the <code>MultiplicityRange</code>. If the <code>owningType</code> is an owned cross <code>Feature</code>, then the <code>bounds</code> must have the same <code>featuringTypes</code> as the owning end <code>Feature</code> of the <code>owningType</code>. (This allows a cross multiplicity to be evaluated in the same context as the multiplicity of the end <code>Feature</code>.)</p> + <p>If the <code>owningNamespace</code> of a <code>MultiplicityRange</code> is a <code>Feature</code>, but not an owned cross <code>Feature</code>, then the <code>bounds</code> of the <code>MultiplicityRange</code> must have the same <code>featuringTypes</code> as the <code>MultiplicityRange</code>. If the <code>owningNamespace</code> is an owned cross <code>Feature</code>, then the <code>bounds</code> must have the same <code>featuringTypes</code> as the owning end <code>Feature</code> of the <code>owningNamespace</code>. (This allows a cross multiplicity to be evaluated in the same context as the multiplicity of the end <code>Feature</code>.)</p> OCL2.0 let boundsFeaturingType : OrderedSet(Type) = - if owningType <> null and owningType.oclIsKindOf(Feature) and - owningType.oclAsType(Feature).isOwnedCrossFeature() then - owningType.oclAsType(Feature).owningType.oclAsType(Feature).featuringType + if owningNamespace <> null and owningNamespace.oclIsKindOf(Feature) and + owningNamespace.oclAsType(Feature).isOwnedCrossFeature() then + owningNamespace.oclAsType(Feature).owningNamespace.oclAsType(Feature).featuringType else featuringType endif in @@ -7113,44 +7285,10 @@ endif - - - - - - - - - <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 - 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 MetadataFeatures whose <code>type</code> is a certain Metaclass.</p> - - - + + + + @@ -7168,6 +7306,15 @@ endif + + + + <p>The MetadataFeatures whose <code>type</code> is a certain Metaclass.</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> @@ -7318,487 +7465,340 @@ else <p>Check if this <code>MetadataFeature</code> has a <code>metaclass</code> which is a kind of <code><em>SemanticMetadata</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> - - - - 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>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>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('Occurrences::Occurrence') - - - - - <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 - ownedSpecialization.general-> - forAll(not oclIsKindOf(DataType)) and -not oclIsKindOf(Association) implies - ownedSpecialization.general-> - forAll(not oclIsKindOf(Association)) - - - - - - - - <p>The Package that has a certain Expression as a <code>filterCondition</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>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> - - - OCL2.0 - 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>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 - 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>Exclude <code>Elements</code> that do not meet all the <code>filterConditions</code>.</p> - - - - + + OCL2.0 - self.oclAsType(Namespace).importedMemberships(excluded)-> - select(m | self.includeAsMember(m.memberElement)) + specializesFromLibrary('Metaobjects::SemanticMetadata') - - - - - - - + + - - - <p>Determine whether the given <code>element</code> meets all the <code>filterConditions</code>.</p> + + + <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> - - + + OCL2.0 - let metadataFeatures: Sequence(AnnotatingElement) = - element.ownedAnnotation.annotatingElement-> - selectByKind(MetadataFeature) in - self.filterCondition->forAll(cond | - metadataFeatures->exists(elem | - cond.checkCondition(elem))) + specializesFromLibrary('KerML::Element') - - + - - - - <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>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 - self + isSyntactic() - - - + + + - - - - <p>The ElementFilterMembership that owns the <code>condition</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>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>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('Transfers::transfers') - - - - - <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 - payloadType = - if payloadFeature = null then Sequence{} - else payloadFeature.type - endif - - - - - <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>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 - sourceOutputFeature = - if connectorEnd->isEmpty() or - connectorEnd.ownedFeature->isEmpty() - then null - else connectorEnd.ownedFeature->first() - endif + 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 <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>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> - + OCL2.0 - targetInputFeature = - if connectorEnd->size() < 2 or - connectorEnd->at(2).ownedFeature->isEmpty() - then null - else connectorEnd->at(2).ownedFeature->first() - endif + featureWithValue.redefinition.redefinedFeature-> + closure(redefinition.redefinedFeature).valuation-> + forAll(isDefault) - - - <p>The <code>flowEnds</code> of a <code>Flow</code> are all its <code>connectorEnds</code> that are <code>FlowEnds</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 - flowEnd = connectorEnd->selectByKind(FlowEnd) + isInitial implies featureWithValue.isVariable - - - <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 Feature to be provided a value.</p> - - OCL2.0 - payloadFeature = - let payloadFeatures : Sequence(PayloadFeature) = - ownedFeature->selectByKind(PayloadFeature) in - if payloadFeatures->isEmpty() then null - else payloadFeatures->first() - endif - - - - - <p>A <code>Flow</code> must have at most one <code>ownedFeature</code> that is an <code>PayloadFeature</code>.</p> + + <p>The <code>Feature</code> to be provided a value.</p> + - - OCL2.0 - ownedFeature->selectByKind(PayloadFeature)->size() <= 1 - - - - - <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>The Expression that provides the value as a result.</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>Expression</code> that provides the value of the <code>featureWithValue</code> as its <code>result</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>Whether this <code>FeatureValue</code> specifies a bound value or an initial value for the <code>featureWithValue</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>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 <code>connectorEnds</code> of this <code>Flow</code> that are <code>FlowEnds</code>.</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 <code>ownedFeature</code> of the <code>Flow</code> that is a <code>PayloadFeature</code> (if any).</p> + + + + + + + + <p>The FeatureValue that owns the <code>value</code> Expression.</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>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 <code>libraryNamespace</code> for a <code>LibraryPackage</code> is itself.</p> - - - + + + OCL2.0 + self + + + + + + + - - - <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>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>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>The <code>filterConditions</code> of a <code>Package</code> are the <code>conditions</code> of its owned <code>ElementFilterMemberships</code>.</p> - + OCL2.0 - specializesFromLibrary('Transfers::flowTransfersBefore') + filterCondition = ownedMembership-> + selectByKind(ElementFilterMembership).condition - - - - - - - - - - - - - - - - - - - <p>The ItemFlow that has a certain <code>sourceOutputFeature</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>Exclude <code>Elements</code> that do not meet all the <code>filterConditions</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> + + + + OCL2.0 + let metadataFeatures: Sequence(AnnotatingElement) = + element.ownedAnnotation.annotatingElement-> + selectByKind(MetadataFeature) in + self.filterCondition->forAll(cond | + metadataFeatures->exists(elem | + cond.checkCondition(elem))) + + + + + + + - - - - <p>The ItemFlow that has a certain <code>targetInputFeature</code>.</p> + + + + <p>The Package that has a certain Expression as a <code>filterCondition</code>.</p> - - + + - - - <p>The ItemFlow that has a certain <code>itemType</code>.</p> - - - - + + + + <p>The ElementFilterMembership that owns the <code>condition</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><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>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> + + + <p>The <code>condition</code> <code>Expression</code> must be model-level evaluable.</p> - + OCL2.0 - redefinesFromLibrary('Transfers::Transfer::payload') + condition.isModelLevelEvaluable - - - - - <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>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 - isEnd + condition.result.specializesFromLibrary('ScalarValues::Boolean') - - - <p>A <code>FlowEnd</code> must have exactly one <code>ownedFeature</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> + - + + + + + + + <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 - ownedFeature->size() = 1 + ownedSpecialization.general-> + forAll(not oclIsKindOf(Class) and + not oclIsKindOf(Association)) - - - <p>The <code>owningType</code> of a <code>FlowEnd</code> must be a <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 - owningType <> null and owningType.oclIsKindOf(Flow) + specializesFromLibrary('Base::DataValue') - - - - - - - + diff --git a/org.omg.sysml/model/KerML_only_xmi.uml b/org.omg.sysml/model/KerML_only_xmi.uml index 9a0f5e911..2e4443e59 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. @@ -6638,14 +6638,14 @@ endif - <p>If the <code>owningType</code> of a <code>MultiplicityRange</code> is a <code>Feature</code>, but not an owned cross <code>Feature</code>, then the <code>bounds</code> of the <code>MultiplicityRange</code> must have the same <code>featuringTypes</code> as the <code>MultiplicityRange</code>. If the <code>owningType</code> is an owned cross <code>Feature</code>, then the <code>bounds</code> must have the same <code>featuringTypes</code> as the owning end <code>Feature</code> of the <code>owningType</code>. (This allows a cross multiplicity to be evaluated in the same context as the multiplicity of the end <code>Feature</code>.)</p> + <p>If the <code>owningNamespace</code> of a <code>MultiplicityRange</code> is a <code>Feature</code>, but not an owned cross <code>Feature</code>, then the <code>bounds</code> of the <code>MultiplicityRange</code> must have the same <code>featuringTypes</code> as the <code>MultiplicityRange</code>. If the <code>owningNamespace</code> is an owned cross <code>Feature</code>, then the <code>bounds</code> must have the same <code>featuringTypes</code> as the owning end <code>Feature</code> of the <code>owningNamespace</code>. (This allows a cross multiplicity to be evaluated in the same context as the multiplicity of the end <code>Feature</code>.)</p> OCL2.0 let boundsFeaturingType : OrderedSet(Type) = - if owningType <> null and owningType.oclIsKindOf(Feature) and - owningType.oclAsType(Feature).isOwnedCrossFeature() then - owningType.oclAsType(Feature).owningType.oclAsType(Feature).featuringType + if owningNamespace <> null and owningNamespace.oclIsKindOf(Feature) and + owningNamespace.oclAsType(Feature).isOwnedCrossFeature() then + owningNamespace.oclAsType(Feature).owningNamespace.oclAsType(Feature).featuringType else featuringType endif in diff --git a/org.omg.sysml/model/SysML.ecore b/org.omg.sysml/model/SysML.ecore index 00083b321..61685a0d0 100644 --- a/org.omg.sysml/model/SysML.ecore +++ b/org.omg.sysml/model/SysML.ecore @@ -2909,7 +2909,7 @@ -
+
diff --git a/org.omg.sysml/model/SysML.uml b/org.omg.sysml/model/SysML.uml index 0724f0ebe..d4fc1d68e 100644 --- a/org.omg.sysml/model/SysML.uml +++ b/org.omg.sysml/model/SysML.uml @@ -1,4977 +1,4896 @@ - - - - - <p>A <code>FeatureReferenceExpression</code> that has a certain <code>referent</code> <code>Feature</code>.</p> + + + + + <p>The <code>Dependencies</code> that have a certain <code>client</code> <code>Element</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>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>The <code>operator</code> of a <code>SelectExpression</code> must be <code>'select'</code>.</p> + + + + <p>The <code>Element</code> or <code>Elements</code> dependent on the <code>supplier</code> <code>Elements</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>The <code>Element</code> or <code>Elements</code> on which the <code>client</code> <code>Elements</code> depend in some respect.</p> - - OCL2.0 - arguments->notEmpty() implies - result.specializes(arguments->first().result) - - - - - - + + - - - <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>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>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> 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>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 - 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 + annotatedElement = + if annotation->notEmpty() then annotation.annotatedElement + else Sequence{owningNamespace} 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> + + + <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 - ownedMember->selectByKind(BindingConnector)->exists(b | - b.relatedFeatures->includes(targetFeature) and - b.relatedFeatures->includes(result)) + ownedAnnotatingRelationship = ownedRelationship-> + selectByKind(Annotation)-> + select(a | a.annotatedElement <> self) - - - <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>annotations</code> of an <code>AnnotatingElement</code> are its <code>owningAnnotatingRelationship</code> (if any) followed by all its <code>ownedAnnotatingRelationships</code>.</p> - + OCL2.0 - let membership : Membership = - ownedMembership->reject(m | m.oclIsKindOf(ParameterMembership)) in -membership->notEmpty() and -membership->at(1).memberElement.oclIsKindOf(Feature) + annotation = + if owningAnnotatingRelationship = null then ownedAnnotatingRelationship + else owningAnnotatingRelationship->prepend(owningAnnotatingRelationship) + 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>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> + - - OCL2.0 - result.owningType() = self and result.specializes(referent) - - - - - <p>A <code>FeatureReferenceExpression</code> must own its <code>result</code> parameter.</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> - - 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 <code>owningRelationship</code> of this <code>AnnotatingRelationship</code>, if it is an <code>Annotation</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> + + + <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 - 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>The Annotations associated with a certain <code>annotatedElement</code>.</p> + + + + + + + + + <p>The AnnotatingElements that have a certain Element as their <code>annotatedElement</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> - - - 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>The annotation text for the <code>Comment</code>.</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>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>A <code>LiteralBoolean</code> must directly or indirectly specialize <em><code>Performances::literalBooleanEvaluations</code></em> from the Kernel Semantic Library.</p> + + + + <p>The natural or artifical language in which the <code>body</code> text is written.</p> + - - OCL2.0 - specializesFromLibrary('Performances::literalBooleanEvaluations') - - - - - - <p>The <code><em>Boolean</em></code> value that is the result of evaluating this <code>LiteralBoolean</code>.</p> + + + + + + + <p>The <code>Element</code> that is represented by this <code>TextualRepresentation</code>.</p> + - - <p>The Boolean value that is the result of evaluating this Expression.</p> + + + + + + <p>The textual representation of the <code>representedElement</code> in the given <code>language</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><code>Documentation</code> is a <code>Comment</code> that specifically documents a <code>documentedElement</code>, which must be its <code>owner</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 <code>Element</code> that is documented by this <code>Documentation</code>.</p> - + + - - - - <p>The <code>MetadataAccessExpressions</code> having a certain <code>Element</code> as their <code>referencedElement</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>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>A <code>LiteralExpression</code> is always model-level evaluable.</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 - isModelLevelEvaluable = true + (owningAnnotatedElement <> null) = (ownedAnnotatingElement <> null) - - - <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>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('Performances::literalEvaluations') + ownedAnnotatingElement <> null xor owningAnnotatingElement <> null - - - - <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>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>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 - let sourceTargetFeature : Feature = sourceTargetFeature() in -sourceTargetFeature <> null and -sourceTargetFeature.redefinesFromLibrary('ControlFunctions::\'.\'::source::target') + ownedAnnotatingElement = + let ownedAnnotatingElements : Sequence(AnnotatingElement) = + ownedRelatedElement->selectByKind(AnnotatingElement) in + if ownedAnnotatingElements->isEmpty() then null + else ownedAnnotatingElements->first() + endif - - - <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>The <code>annotatingElement</code> of an <code>Annotation</code> is either its <code>ownedAnnotatingElement</code> or its <code>owningAnnotatingElement</code>.</p> - + OCL2.0 - let sourceTargetFeature : Feature = sourceTargetFeature() in -sourceTargetFeature <> null and -sourceTargetFeature.redefines(targetFeature) + annotatingElement = + if ownedAnnotatingElement <> null then ownedAnnotatingElement + else owningAnnotatingElement + endif - - - <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>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> + - - 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> + + + + + + <p>The <code>Element</code> that is annotated by the <code>annotatingElement</code> of this Annotation.</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 Namespace with a certain <code>importedMembership</code>.</p> + + + + + + + + + + + <p>The Namespace the has a certain Element as a <code>member</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>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> +<p>A <code>Namespace</code> can provide names for its <code>members</code> via the <code>memberNames</code> and <code>memberShortNames</code> specified by the <code>Memberships</code> in the <code>Namespace</code>. If a <code>Membership</code> specifies a <code>memberName</code> and/or <code>memberShortName</code>, then those are names of the corresponding <code>memberElement</code> relative to the <code>Namespace</code>. For an <code>OwningMembership</code>, the <code>ownedMemberName</code> and <code>ownedMemberShortName</code> are given by the <code>Element</code> <code>name</code> and <code>shortName</code>. Note that the same <code>Element</code> may be the <code>memberElement</code> of multiple <code>Memberships</code> in a <code>Namespace</code> (though it may be owned at most once), each of which may define a separate alias for the <code>Element</code> relative to the <code>Namespace</code>.</p> + + + + <p>All <code>memberships</code> of a <code>Namespace</code> must be distinguishable from each other.</p> - + OCL2.0 - argument->notEmpty() implies - targetFeature.isFeaturedWithin(argument->first().result) + membership->forAll(m1 | + membership->forAll(m2 | + m1 <> m2 implies m1.isDistinguishableFrom(m2))) - - - <p>The <code>operator</code> of a <code>FeatureChainExpression</code> must be <code>"."</code>.</p> + + + <p>The <code>members</code> of a <code>Namespace</code> are the <code>memberElements</code> of all its <code>memberships</code>.</p> - + OCL2.0 - operator = '.' + member = membership.memberElement - - - <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>ownedMembers</code> of a <code>Namespace</code> are the <code>ownedMemberElements</code> of all its <code>ownedMemberships</code> that are <code>OwningMemberships</code>. - + 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 + ownedMember = ownedMembership->selectByKind(OwningMembership).ownedMemberElement - - - - - - - - <p>The <code>Feature</code> that is accessed by this <code>FeatureChainExpression<code>, which is its first non-<code>parameter</code> <code>member</code>.<p> - - - - - - - <p>Return the first <code>ownedFeature</code> of the first owned input <code>parameter</code> of this <code>FeatureChainExpression</code> (if any).</p> - - - - OCL2.0 - let inputParameters : Feature = ownedFeatures-> - select(direction = _'in') in -if inputParameters->isEmpty() or - inputParameters->first().ownedFeature->isEmpty() -then null -else inputParameters->first().ownedFeature->first() -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>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>importedMemberships</code> of a <code>Namespace</code> are derived using the <code>importedMemberships()</code> operation, with no initially <code>excluded</code> <code>Namespaces</code>.</p> - + OCL2.0 - specializesFromLibrary('Performances::metadataAccessEvaluations') + importedMembership = importedMemberships(Set{}) - - - <p>A <code>MetadataAccessExpression</code> must have at least one <code>ownedMember</code> that is not a <code>FeatureMembership</code>.</p> + + + <p>The <code>ownedImports</code> of a <code>Namespace</code> are all its <code>ownedRelationships</code> that are <code>Imports</code>.</p> - + OCL2.0 - ownedMembership->exists(not oclIsKindOf(FeatureMembership)) + ownedImport = ownedRelationship->selectByKind(Import) - - - <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>The <code>ownedMemberships</code> of a <code>Namespace</code> are all its <code>ownedRelationships</code> that are <code>Memberships</code>.</p> - + OCL2.0 - referencedElement = - let elements : Sequence(Element) = ownedMembership-> - reject(oclIsKindOf(FeatureMembership)).memberElement in - if elements->isEmpty() then null - else elements->first() - endif + ownedMembership = ownedRelationship->selectByKind(Membership) - - - - <p>The <code>Element</code> whose metadata is being accessed.</p> + + + + <p>All <code>Memberships</code> in this <code>Namespace</code>, including (at least) the union of <code>ownedMemberships</code> and <code>importedMemberships</code>.</p> + - - + + - - - <p>A <code>MetadataAccessExpression</code> is always model-level evaluable.</p> + + + <p>The <code>ownedRelationships</code> of this <code>Namespace</code> that are <code>Imports</code>, for which the <code>Namespace</code> is the <code>importOwningNamespace</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>The set of all member <code>Elements</code> of this <code>Namespace</code>, which are the <code>memberElements</code> of all <code>memberships</code> of the <code>Namespace</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>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> - - - OCL2.0 - specializesFromLibrary('Performances::literalStringEvaluations') - - - - - - <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 owned <code>members</code> of this <code>Namespace</code>, which are the <cpde><code>ownedMemberElements</code> of the <code>ownedMemberships</code> of the <code>Namespace</code>.</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>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> - - - 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> + + + <p>The <code>ownedRelationships</code> of this <code>Namespace</code> that are <code>Memberships</code>, for which the <code>Namespace</code> is the <code>membershipOwningNamespace</code>.</p> + - - + + - - - <p>The <code>Type</code> that is being instantiated.</p> + + + <p>The <code>Memberships</code> in this <code>Namespace</code> that result from the <code>ownedImports</code> of this <code>Namespace</code>.</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>Return the names of the given <code>element</code> as it is known in this <code>Namespace</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 + let elementMemberships : Sequence(Membership) = + memberships->select(memberElement = element) in +memberships.memberShortName-> + union(memberships.memberName)-> + asSet() - - - + + + + + - - - - <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>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> - - - 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>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 - 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> + + + <p>Returns this visibility of <code>mem</code> relative to this <code>Namespace</code>. If <code>mem</code> is an <code>importedMembership</code>, this is the <code>visibility</code> of its Import. Otherwise it is the <code>visibility</code> of the <code>Membership</code> itself.</p> - - + + OCL2.0 - argument->forAll(modelLevelEvaluable(visited)) + if importedMembership->includes(mem) then + ownedImport-> + select(importedMemberships(Set{})->includes(mem)). + first().visibility +else if memberships->includes(mem) then + mem.visibility +else + VisibilityKind::private +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>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 - 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>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 - 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> - - - OCL2.0 - instantiatedType.input->collect(inp | - ownedFeatures->select(redefines(inp)).valuation-> - select(v | v <> null).value -) - - - - - <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 - let parameters : OrderedSet(Feature) = instantiatedType.input in -input->forAll(inp | - inp.ownedRedefinition.redefinedFeature-> - intersection(parameters)->size() = 1) - - - - - <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 - 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>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 - 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> - - - 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> - - - 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> + + + <p>If <code>includeAll = true</code>, then return all the <code>Memberships</code> of this <code>Namespace</code>. Otherwise, return only the publicly visible <code>Memberships</code> of this <code>Namespace</code>, including <code>ownedMemberships</code> that have a <code>visibility</code> of <code>public</code> and <code>Memberships</code> imported with a <code>visibility</code> of <code>public</code>. If <code>isRecursive = true</code>, also recursively include all visible <code>Memberships</code> of any <code>public</code> owned <code>Namespaces</code>, or, if <code>IncludeAll = true</code>, all <code>Memberships</code> of all owned <code>Namespaces</code>. When computing imported <code>Memberships</code>, ignore this <code>Namespace</code> and any <code>Namespaces</code> in the given <code>excluded</code> set.</p> - - + + OCL2.0 - argument->forAll(modelLevelEvaluable(visited)) and - function.isModelLevelEvaluable + let visibleMemberships : OrderedSet(Membership) = + if includeAll then membershipsOfVisibility(null, excluded) + else membershipsOfVisibility(VisibilityKind::public, excluded) + endif in +if not isRecursive then visibleMemberships +else visibleMemberships->union(ownedMember-> + selectAsKind(Namespace). + select(includeAll or owningMembership.visibility = VisibilityKind::public)-> + visibleMemberships(excluded->including(self), true, includeAll)) +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>A <code>InstantiationExpression</code> that has a certain <code>argument</code> <code>Expression</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>The <code>operator</code> of a <code>CollectExpression</code> must be <code>"collect"</code>.</p> - - - OCL2.0 - operator = 'collect' - - - - - - - - - - - <p>A <code>NullExpression</code> is an <code>Expression</code> that results in a null value.</p> + + + <p>Derive the imported <code>Memberships</code> of this <code>Namespace</code> as the <code>importedMembership</code> of all <code>ownedImports</code>, excluding those Imports whose <code>importOwningNamespace</code> is in the <code>excluded</code> set, and excluding <code>Memberships</code> that have distinguisibility collisions with each other or with any <code>ownedMembership</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> - - - OCL2.0 - specializesFromLibrary('Performances::nullEvaluations') - - - - - - <p>A <code>NullExpression</code> is always model-level evaluable.</p> - - + + OCL2.0 - true + ownedImport.importedMemberships(excluded->including(self)) - - + + + - - - + + + - - - <p>The model-level value of a <code>NullExpression</code> is an empty sequence.</p> + + + <p>If <code>visibility</code> is not null, return the <code>Memberships</code> of this <code>Namespace</code> with the given <code>visibility</code>, including <code>ownedMemberships</code> with the given <code>visibility</code> and <code>Memberships</code> imported with the given <code>visibility</code>. If <code>visibility</code> is null, return all <code>ownedMemberships</code> and imported <code>Memberships</code> regardless of visibility. When computing imported <code>Memberships</code>, ignore this <code>Namespace</code> and any <code>Namespaces</code> in the given <code>excluded</code> set.</p> - - + + OCL2.0 - Sequence{} + ownedMembership-> + select(mem | visibility = null or mem.visibility = visibility)-> + union(ownedImport-> + select(imp | visibility = null or imp.visibility = visibility). + importedMemberships(excluded->including(self))) - - - - + + + + + + + + + + + - - - - <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>Resolve the given qualified name to the named <code>Membership</code> (if any), starting with this <code>Namespace</code> as the local scope. The qualified name string must conform to the concrete syntax of the KerML textual notation. According to the KerML name resolution rules every qualified name will resolve to either a single <code>Membership</code>, or to none.</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 qualification : String = qualificationOf(qualifiedName) in +let name : String = unqualifiedNameOf(qualifiedName) in +if qualification = null then resolveLocal(name) +else if qualification = '$' then resolveGlobal(name) +else + let namespaceMembership : Membership = resolve(qualification) in + if namespaceMembership = null or + not namespaceMembership.memberElement.oclIsKindOf(Namespace) + then null + else + namespaceMembership.memberElement.oclAsType(Namespace). + resolveVisible(name) + endif +endif endif + + + + + + + + + + + + + <p>Resolve the given qualified name to the named <code>Membership</code> (if any) in the effective global <code>Namespace</code> that is the outermost naming scope. The qualified name string must conform to the concrete syntax of the KerML textual notation.</p> + - - + + + English + No OCL + + + + + + + + + + + + + <p>Resolve a simple <code>name</code> starting with this <code>Namespace</code> as the local scope, and continuing with containing outer scopes as necessary. However, if this <code>Namespace</code> is a root <code>Namespace</code>, then the resolution is done directly in global scope.</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) + if owningNamespace = null then resolveGlobal(name) +else + let memberships : Membership = membership-> + select(memberShortName = name or memberName = name) in + if memberships->notEmpty() then memberships->first() + else owningNamespace.resolveLocal(name) + 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>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::Collection</code></em> from the Kernel Data Type Library.</p> + + + <p>Resolve a simple name from the visible <code>Memberships</code> of this <code>Namespace</code>.</p> + - - OCL2.0 - arguments->notEmpty() and -not arguments->first().result.specializesFromLibrary('Collections::Collection') implies - result.specializes(arguments->first().result) - - - - - <p>The <code>operator</code> of an <code>IndexExpression</code> must be <code>"#"</code>.</p> + + + OCL2.0 + let memberships : Sequence(Membership) = + visibleMemberships(Set{}, false, false)-> + select(memberShortName = name or memberName = name) in +if memberships->isEmpty() then null +else memberships->first() +endif + + + + + + + + + + + + + <p>Return a string with valid KerML syntax representing the qualification part of a given <code>qualifiedName</code>, that is, a qualified name with all the segment names of the given name except the last. If the given <code>qualifiedName</code> has only one segment, then return null.</p> - - OCL2.0 - operator = '#' - - - - - - - + + + English + No OCL + + + + + + + + + + + + + + <p>Return the simple name that is the last segment name of the given <code>qualifiedName</code>. If this segment name has the form of a KerML unrestricted name, then "unescape" it by removing the surrounding single quotes and replacing all escape sequences with the specified character.</p> + + + + English + No OCL + + + + + + + + + - - - <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>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 <code>LiteralRational</code> must directly or indirectly specialize <em><code>Performances::literalRationalEvaluations</code></em> from the Kernel Semantic Library.</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 - specializesFromLibrary('Performances::literalRationalEvaluations') + importOwningNamespace.owner = null implies + visibility = VisibilityKind::private - - - - <p>The value whose rational approximation is the result of evaluating this <code>LiteralRational</code>.</p> + + + + <p>The Namespace into which Memberships are imported by this Import, which must be the <code>owningRelatedElement</code> of the Import.</p> - - <p>The Real value that is the result of evaluating this Expression.</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 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>If the <code>owningType</code> of a <code>MultiplicityRange</code> is a <code>Feature</code>, but not an owned cross <code>Feature</code>, then the <code>bounds</code> of the <code>MultiplicityRange</code> must have the same <code>featuringTypes</code> as the <code>MultiplicityRange</code>. If the <code>owningType</code> is an owned cross <code>Feature</code>, then the <code>bounds</code> must have the same <code>featuringTypes</code> as the owning end <code>Feature</code> of the <code>owningType</code>. (This allows a cross multiplicity to be evaluated in the same context as the multiplicity of the end <code>Feature</code>.)</p> - - OCL2.0 - let boundsFeaturingType : OrderedSet(Type) = - if owningType <> null and owningType.oclIsKindOf(Feature) and - owningType.oclAsType(Feature).isOwnedCrossFeature() then - owningType.oclAsType(Feature).owningType.oclAsType(Feature).featuringType - else - featuringType - endif in -bound->forAll(b | b.featuringType = boundsFeaturingType) - - - - - - <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>Whether to recursively import Memberships from visible, owned sub-Namespaces.</p> - - OCL2.0 - bound->forAll(b | - b.result.specializesFromLibrary('ScalarValues::Integer') and - let value : UnlimitedNatural = valueOf(b) in - value <> null implies value >= 0 -) - - - - - <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 - lowerBound = - let ownedExpressions : Sequence(Expression) = - ownedMember->selectByKind(Expression) in - if ownedExpressions->size() < 2 then null - else ownedExpressions->first() - endif - - - - - <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 - 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 <code>bounds</code> of a <code>MultiplicityRange</code> are the <code>lowerBound</code> (if any) followed by the <code>upperBound</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> - - - 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>Expression</code> whose result is the upper bound of the <code>MultiplicityRange</code>.</p> + + + <p>Whether to import memberships without regard to declared visibility.</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>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>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> + + + <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> + - - - 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> + + + + + <p>The Membership with a certain Element as its <code>memberElement</code>.</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>A MembershipImport that has a certain <code>importedMembership</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> + + + <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> -<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>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>A <code>DataType</code> must not specialize a <code>Class</code> or an <code>Association</code>.</p> + + + <p>The <code>memberElementId</code> of a <code>Membership</code> is the <code>elementId</code> of its <code>memberElement</code>.</p> - + OCL2.0 - ownedSpecialization.general-> - forAll(not oclIsKindOf(Class) and - not oclIsKindOf(Association)) + memberElementId = memberElement.elementId - - - <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>elementId</code> of the <code>memberElement</code>.</p> - - OCL2.0 - specializesFromLibrary('Base::DataValue') - - - - - - - - - - - - - - - - - - - - <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>The <code>Namespace</code> of which the <code>memberElement</code> becomes a <code>member</code> due to this <code>Membership</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 - specializesFromLibrary('Performances::performances') - - - - - <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>The short name of the <code>memberElement</code> relative to the <code>membershipOwningNamespace</code>.</p> - - OCL2.0 - owningType <> null and - (owningType.oclIsKindOf(Behavior) or - owningType.oclIsKindOf(Step)) implies - specializesFromLibrary('Performances::Performance::enclosedPerformance') - - - - - <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 - 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 - owningType <> null and - (owningType.oclIsKindOf(Behavior) or - owningType.oclIsKindOf(Step)) and - self.isComposite implies - specializesFromLibrary('Performances::Performance::subperformance') - - - - - <p>The <code>behaviors</code> of a <code>Step</code> are all its <code>types</code> that are <code>Behaviors</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> + - - OCL2.0 - behavior = type->selectByKind(Behavior) - - - - - - <p>The <code>Behaviors</code> that type this <code>Step</code>.</p> + + + + + + <p>The name of the <code>memberElement</code> relative to the <code>membershipOwningNamespace</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>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>An Import with a certain <code>importedElement</code>.</p> + + + - - - - + + + + <p>The Namespace that has a certain <code>membership</code>.</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>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>A <code>Behavior</code> must not specialize a <code>Structure</code>.</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') - - - - - <p>The <code>steps</code> of a <code>Behavior</code> are its <code>features</code> that are <code>Steps</code>.</p> + + + <p>The <code>importedElement</code> of a <code>NamespaceImport</code> is its <code>importedNamespace</code>.</p> - + OCL2.0 - step = feature->selectByKind(Step) + importedElement = importedNamespace - - - - <p>The <code>Steps</code> that make up this <code>Behavior</code>.</p> + + + + <p>The <code>Namespace</code> whose visible <code>Memberships</code> are imported by this <code>NamespaceImport</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>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>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>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>ownedMemberParameter</code> of a <code>ParameterMembership</code> must have a <code>direction</code> equal to the result of the <code>parameterDirection()</code> operation.</p> + + + <p>The <code>ownedMemberName</code> of an <code>OwningMembership</code> is the <code>name</code> of its <code>ownedMemberElement</code>.</p> - + OCL2.0 - ownedMemberParameter.direction = parameterDirection() + ownedMemberName = ownedMemberElement.name - - - <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 <code>ownedMemberShortName</code> of an <code>OwningMembership</code> is the <code>shortName</code> of its <code>ownedMemberElement</code>.</p> - + OCL2.0 - owningType.oclIsKindOf(Behavior) or owningType.oclIsKindOf(Step) or -owningType.owningMembership.oclIsKindOf(ReturnParameterMembership) and - owningType.owningNamespace.oclIsKindOf(ConstructorExpression) + ownedMemberShortName = ownedMemberElement.shortName - - - - <p>The <code>Feature</code> that is identified as a <code>parameter</code> by this <code>ParameterMembership</code>.</p> + + + + <p>The <code>Element</code> that becomes an <code>ownedMember</code> of the <code>membershipOwningNamespace</code> due to this <code>OwningMembership</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>The <code>elementId</code> of the <code>ownedMemberElement</code>.</p> - - - OCL2.0 - FeatureDirectionKind::_'in' - - - - - - - - - - - <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> + + + + + <p>The <code>shortName</code> of the <code>ownedMemberElement</code>.</p> - - OCL2.0 - 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 <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>The Functions that hasve a certain <code>expression</code> as a step.</p> + + + + + <p>A NamespaceImport that has a certain <code>importedNamespace</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>MembershipImport</code> is an <code>Import</code> that imports its <code>importedMembership</code> into the <code>importOwningNamespace</code>. If <code>isRecursive = true</code> and the <code>memberElement</code> of the <code>importedMembership</code> is a <code>Namespace</code>, then the equivalent of a recursive <code>NamespaceImport</code> is also performed on that <code>Namespace</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> + + + <p>The <code>importedElement</code> of a <code>MembershipImport</code> is the <code>memberElement</code> of its <code>importedMembership</code>.</p> - + OCL2.0 - specializesFromLibrary('Performances::BooleanEvaluation') + importedElement = importedMembership.memberElement - - - - - <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>The <code>Membership</code> to be imported.</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::booleanEvaluations') - - - - - - <p>The Predicate that types the Expression.</p> + + + + + + <p>Returns at least the <code>importedMembership</code>. If <code>isRecursive = true</code> and the <code>memberElement</code> of the <code>importedMembership</code> is a <code>Namespace</code>, then <code>Memberships</code> are also recursively imported from that <code>Namespace</code>.</p> - - <p>The <code>Predicate</code> that types this <code>BooleanExpression</code>.</p> - - - - + + + OCL2.0 + if not isRecursive or + not importedElement.oclIsKindOf(Namespace) or + excluded->includes(importedElement) +then Sequence{importedMembership} +else importedElement.oclAsType(Namespace). + visibleMemberships(excluded, true, importAll)-> + prepend(importedMembership) +endif + + + + + + + + + + + - - - <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>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> + +<p>The <code>relatedElements</code> of a <code>Relationship</code> are divided into <code>source</code> and <code>target</code> <code>Elements</code>. The <code>Relationship</code> is considered to be directed from the <code>source</code> to the <code>target</code> <code>Elements</code>. An undirected <code>Relationship</code> may have either all <code>source</code> or all <code>target</code> <code>Elements</code>.</p> + +<p>A &quot;relationship <code>Element</code>&quot; in the abstract syntax is generically any <code>Element</code> that is an instance of either <code>Relationship</code> or a direct or indirect specialization of <code>Relationship</code>. Any other kind of <code>Element</code> is a &quot;non-relationship <code>Element</code>&quot;. It is a convention of that non-relationship <code>Elements</code> are <em>only</em> related via reified relationship <code>Elements</code>. Any meta-associations directly between non-relationship <code>Elements</code> must be derived from underlying reified <code>Relationship</code>.</p> - - - <p>The <code>owningType</code> of a <code>ResultExpressionMembership</code> must be a <code>Function</code> or <code>Expression</code>.</p> + + + <p>The <code>relatedElements</code> of a <code>Relationship</code> consist of all of its <code>source</code> <code>Elements</code> followed by all of its <code>target</code> <code>Elements</code>.</p> - + OCL2.0 - owningType.oclIsKindOf(Function) or owningType.oclIsKindOf(Expression) + relatedElement = source->union(target) - - - - <p>The <code>Expression</code> that provides the result for the owner of the <code>ResultExpressionMembership</code>.</p> + + + + <p>The Elements that are related by this Relationship, derived as the union of the <code>source</code> and <code>target</code> Elements of the Relationship.</p> + + + + + + + <p>The <code>relatedElements</code> to which this Relationship is considered to be directed.</p> - - + + - - - - - <p>The Expressions that have a certain Feature its owned or inherited <code>result</code>.</p> + + + <p>The <code>relatedElements</c ode> from which this Relationship is considered to be directed.</p> - - - - - - - - <p>The Functions that have a certain Feature its owned or inherited <code>result</code>.</p> + + + + + + <p>The <tt>relatedElement</tt> of this Relationship that owns the Relationship, if any.</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 <tt>relatedElements</tt> of this Relationship that are owned by the Relationship.</p> - - OCL2.0 - owningType.oclIsKindOf(Function) or owningType.oclIsKindOf(Expression) - - - - - - <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>Whether this Relationship was generated by tooling to meet semantic rules, rather than being directly created by a modeler.</p> - - + + + + + + <p>Return whether this Relationship has either an <code>owningRelatedElement</code> or <code>owningRelationship</code> that is a library element.</p> + + + OCL2.0 - FeatureDirectionKind::out + if owningRelatedElement <> null then owningRelatedElement.libraryNamespace() +else if owningRelationship <> null then owningRelationship.libraryNamespace() +else null endif endif - - - + + + + + + + + <p>If the <code>owningRelationship</code> of the <code>Relationship</code> is null but its <code>owningRelatedElement</code> is non-null, construct the <code>path</code> using the position of the <code>Relationship</code> in the list of <code>ownedRelationships</code> of its <code>owningRelatedElement</code>. Otherwise, return the <code>path</code> of the <code>Relationship</code> as specified for an <code>Element</code> in general.</p> + + + + OCL2.0 + if owningRelationship = null and owningRelatedElement <> null then + owningRelatedElement.path() + '/' + + owningRelatedElement.ownedRelationship->indexOf(self).toString() + -- A position index shall be converted to a decimal string representation + -- consisting of only decimal digits, with no sign, leading zeros or leading + -- or trailing whitespace. +else self.oclAsType(Element).path() +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>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> - - - <p>A <code>Function</code> must have exactly one <code>featureMembership</code> (owned or inherited) that is a <code>ResultParameterMembership</code>.</p> + + + <p>The <code>ownedElements</code> of an <code>Element</code> are the <code>ownedRelatedElements</code> of its <code>ownedRelationships</code>.</p> - + OCL2.0 - featureMembership-> - selectByKind(ReturnParameterMembership)-> - size() = 1 + ownedElement = ownedRelationship.ownedRelatedElement - - - <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>The <code>owner</code> of an <code>Element</code> is the <code>owningRelatedElement</code> of its <code>owningRelationship</code>.</p> - + OCL2.0 - specializesFromLibrary('Performances::Evaluation') + owner = owningRelationship.owningRelatedElement - - - <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>If this <code>Element</code> does not have an <code>owningNamespace</code>, then its <code>qualifiedName</code> is null. If the <code>owningNamespace</code> of this Element is a root <code>Namespace</code>, then the <code>qualifiedName</code> of the <code>Element</code> is the escaped name of the <code>Element</code> (if any). If the <code>owningNamespace</code> is non-null but not a root <code>Namespace</code>, then the <code>qualifiedName</code> of this <code>Element</code> is constructed from the <code>qualifiedName</code> of the <code>owningNamespace</code> and the escaped name of the <code>Element</code>, unless the <code>qualifiedName</code> of the <code>owningNamespace</code> is null or the escaped name is null, in which case the <code>qualifiedName</code> of this <code>Element</code> is also null. Further, if the <code>owningNamespace</code> has other <code>ownedMembers</code> with the same non-null name as this <code>Element</code>, and this <code>Element</code> is not the first, then the <code>qualifiedName</code> of this <code>Element</code> is null.</p> - + OCL2.0 - ownedMembership.selectByKind(ResultExpressionMembership)-> - forAll(mem | ownedFeature.selectByKind(BindingConnector)-> - exists(binding | - binding.relatedFeature->includes(result) and - binding.relatedFeature->includes(mem.ownedResultExpression.result))) + qualifiedName = + if owningNamespace = null then null + else if name <> null and + owningNamespace.ownedMember-> + select(m | m.name = name).indexOf(self) <> 1 then null + else if owningNamespace.owner = null then escapedName() + else if owningNamespace.qualifiedName = null or + escapedName() = null then null + else owningNamespace.qualifiedName + '::' + escapedName() + endif endif endif 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>documentation</code> of an <code>Element</code> is its <code>ownedElements</code> that are <code>Documentation</code>.</p> - + OCL2.0 - result = - let resultParams : Sequence(Feature) = - featureMemberships-> - selectByKind(ReturnParameterMembership). - ownedMemberParameter in - if resultParams->notEmpty() then resultParams->first() - else null - endif + documentation = ownedElement->selectByKind(Documentation) - - - <p>A <code>Function</code> must have at most one <code>ResultExpressionMembership</code>.</p> + + + <p>The <code>ownedAnnotations</code> of an <code>Element</code> are its <code>ownedRelationships</code> that are <code>Annotations</code>, for which the <code>Element</code> is the <code>annotatedElement</code>.</p> - + OCL2.0 - membership->selectByKind(ResultExpressionMembership)->size() <= 1 + ownedAnnotation = ownedRelationship-> + selectByKind(Annotation)-> + select(a | a.annotatedElement = self) - - - - <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 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>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> - - - - - - - <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>Whether an <code>Expression</code> <code>isModelLevelEvaluable</code> is determined by the <code>modelLevelEvaluable()</code> operation.</p> + + + <p>The <code>name</code> of an <code>Element</code> is given by the result of the <code>effectiveName()</code> operation.</p> - + OCL2.0 - isModelLevelEvaluable = modelLevelEvaluable(Set(Element){}) + name = effectiveName() - - - <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>If an <code>Element</code> has any <code>ownedRelationships</code> for which <code>isImplied = true</code>, then the <code>Element</code> must also have <code>isImpliedIncluded = true</code>. (Note that an <code>Element</code> <em>can</em> have <code>isImplied = true</code> even if no <code>ownedRelationships</code> have <code>isImplied = true</code>, indicating the <code>Element</code> simply has no implied <code>Relationships</code>.</p> - + OCL2.0 - specializesFromLibrary('Performances::evaluations') + ownedRelationship->exists(isImplied) implies isImpliedIncluded - - - <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>An <code>Element</code> <code>isLibraryElement</code> if <code>libraryNamespace()</code> is not null.</p> - + OCL2.0 - owningMembership <> null and -owningMembership.oclIsKindOf(FeatureValue) implies - let featureWithValue : Feature = - owningMembership.oclAsType(FeatureValue).featureWithValue in - featuringType = featureWithValue.featuringType + isLibraryElement = libraryNamespace() <> null + - - - <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>The <code>shortName</code> of an <code>Element</code> is given by the result of the <code>effectiveShortName()</code> operation.</p> - + OCL2.0 - ownedMembership.selectByKind(ResultExpressionMembership)-> - forAll(mem | ownedFeature.selectByKind(BindingConnector)-> - exists(binding | - binding.relatedFeature->includes(result) and - binding.relatedFeature->includes(mem.ownedResultExpression.result))) + shortName = effectiveShortName() - - - <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 <code>owningNamespace</code> of an <code>Element</code> is the <code>membershipOwningNamespace</code> of its <code>owningMembership</code> (if any).</p> - + OCL2.0 - result = - let resultParams : Sequence(Feature) = - featureMemberships-> - selectByKind(ReturnParameterMembership). - ownedMemberParameter in - if resultParams->notEmpty() then resultParams->first() - else null - endif - + owningNamespace = + if owningMembership = null then null + else owningMembership.membershipOwningNamespace + endif - - - <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>textualRepresentations</code> of an <code>Element</code> are its <code>ownedElements</code> that are <code>TextualRepresentations</code>.</p> - + OCL2.0 - featureMembership-> - selectByKind(ReturnParameterMembership)-> - size() = 1 + textualRepresentation = ownedElement->selectByKind(TextualRepresentation) - - - <p>An <code>Expression</code> must have at most one <code>ResultExpressionMembership</code>.</p> + + + <p>The <code>owningRelationship</code> of this <code>Element</code>, if that <code>Relationship</code> is a <code>Membership</code>.</p> + - - OCL2.0 - membership->selectByKind(ResultExpressionMembership)->size() <= 1 - - - - - - <p>The <code>Function</code> that types this <code>Expression</code>.</p> + + + + + + <p>The Relationship for which this Element is an <tt>ownedRelatedElement</tt>, if any.</p> - - <p>This is the Function that types the Expression.</p> + + + + + + <p>The <code>Namespace</code> that owns this <code>Element</code>, which is the <code>membershipOwningNamespace</code> of the <code>owningMembership</code> of this <code>Element</code>, if any.</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>The globally unique identifier for this Element. This is intended to be set by tooling, and it must not change during the lifetime of the Element.</p> + + + + + + <p>The Relationships for which this Element is the <tt>owningRelatedElement</tt>.</p> + + + + + + + <p>The owner of this Element, derived as the <code>owningRelatedElement</code> of the <code>owningRelationship</code> of this Element, if any.</p> + + + + + + + <p>The Elements owned by this Element, derived as the <tt>ownedRelatedElements</tt> of the <tt>ownedRelationships</tt> of this Element.</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 Documentation owned by this Element.</p> + + + + + + + <p>The <code>ownedRelationships</code> of this <code>Element</code> that are <code>Annotations</code>, for which this <code>Element</code> is the <code>annotatedElement</code>.</code> + + + + + + + <p>The <code>TextualRepresentations</code> that annotate this <code>Element</code>.</p> + + + + + + + <p>Various alternative identifiers for this Element. Generally, these will be set by tools.</p> + + + + + + + + <p>An optional alternative name for the <code>Element</code> that is intended to be shorter or in some way more succinct than its primary <code>name</code>. It may act as a modeler-specified identifier for the <code>Element</code>, though it is then the responsibility of the modeler to maintain the uniqueness of this identifier within a model or relative to some other context.</p> + + + + + + + + + <p>The declared name of this <code>Element</code>.</p> + + + + + + + + + <p>The short name to be used for this <code>Element</code> during name resolution within its <code>owningNamespace</code>. This is derived using the <code>effectiveShortName()</code> operation. By default, it is the same as the <code>declaredShortName</code>, but this is overridden for certain kinds of <code>Elements</code> to compute a <code>shortName</code> even when the <code>declaredName</code> is null.</p> + + + + + + + + <p>The name to be used for this <code>Element</code> during name resolution within its <code>owningNamespace</code>. This is derived using the <code>effectiveName()</code> operation. By default, it is the same as the <code>declaredName</code>, but this is overridden for certain kinds of <code>Elements</code> to compute a <code>name</code> even when the <code>declaredName</code> is null.</p> + + + + + + + + <p>The full ownership-qualified name of this <code>Element</code>, represented in a form that is valid according to the KerML textual concrete syntax for qualified names (including use of unrestricted name notation and escaped characters, as necessary). The <code>qualifiedName</code> is null if this <code>Element</code> has no <code>owningNamespace</code> or if there is not a complete ownership chain of named <code>Namespaces</code> from a root <code>Namespace</code> to this <code>Element</code>. If the <code>owningNamespace</code> has other <code>Elements</code> with the same name as this one, then the <code>qualifiedName</code> is null for all such <code>Elements</code> other than the first.</p> + + + + + + + + <p>Whether all necessary implied Relationships have been included in the <code>ownedRelationships</code> of this Element. This property may be true, even if there are not actually any <code>ownedRelationships</code> with <code>isImplied = true</code>, meaning that no such Relationships are actually implied for this Element. However, if it is false, then <code>ownedRelationships</code> may <em>not</em> contain any implied Relationships. That is, either <em>all</em> required implied Relationships must be included, or none of them.</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> + + + <p>Whether this Element is contained in the ownership tree of a library model.</p> - - + + + + + <p>Return <code>name</code>, if that is not null, otherwise the <code>shortName</code>, if that is not null, otherwise null. If the returned value is non-null, it is returned as-is if it has the form of a basic name, or, otherwise, represented as a restricted name according to the lexical structure of the KerML textual notation (i.e., surrounded by single quote characters and with special characters escaped).</p> + + + + + + + + + + <p>Return an effective <code>shortName</code> for this <code>Element</code>. By default this is the same as its <code>declaredShortName</code>.</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) - + declaredShortName - - - - - - + + + + - - - <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>Return an effective <code>name</code> for this <code>Element</code>. By default this is the same as its <code>declaredName</code>.</p> - - + + OCL2.0 - isModelLevelEvaluable + declaredName - - + + + + + + + + + <p>By default, return the library Namespace of the <code>owningRelationship</code> of this Element, if it has one.</p> + + + OCL2.0 - let resultExprs : Sequence(Expression) = - ownedFeatureMembership-> - selectByKind(ResultExpressionMembership). - ownedResultExpression in -if resultExpr->isEmpty() then Sequence{} -else resultExprs->first().evaluate(target) -endif + if owningRelationship <> null then owningRelationship.libraryNamespace() +else null 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>Return a unique description of the location of this <code>Element</code> in the containment structure rooted in a root <code>Namespace</code>. If the <code>Element</code> has a non-null <code>qualifiedName</code>, then return that. Otherwise, if it has an <code>owningRelationship</code>, then return the string constructed by appending to the <code>path</code> of it's <code>owningRelationship</code> the character <code>/</code> followed by the string representation of its position in the list of <code>ownedRelatedElements</code> of the <code>owningRelationship</code> (indexed starting at 1). Otherwise, return the empty string.</p> + +<p>(Note that this operation is overridden for <code>Relationships</code> to use <code>owningRelatedElement</code> when appropriate.)</p> - - + + OCL2.0 - let results: Sequence(Element) = evaluate(target) in - result->size() = 1 and - results->first().oclIsKindOf(LiteralBoolean) and - results->first().oclAsType(LiteralBoolean).value + if qualifiedName <> null then qualifiedName +else if owningRelationship <> null then + owningRelationship.path() + '/' + + owningRelationship.ownedRelatedElement->indexOf(self).toString() + -- A position index shall be converted to a decimal string representation + -- consisting of only decimal digits, with no sign, leading zeros or leading + -- or trailing whitespace. +else '' +endif endif - - - + + - - - - <p>The ResultExpressionMembership that owns the <code>ownedResultExpression</code>.</p> - - - - - - - - - <p>The Expressions that are typed by a certain <code>function</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>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>Succession</code> must directly or indirectly specialize the Feature <code><em>Occurrences::happensBeforeLinks</em></code> from the Kernel Semantic Library.</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 - specializesFromLibrary('Occurrences::happensBeforeLinks') + 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>Connector</code> with a certain <code>defaultFeaturingType</code>.</p> + + + + <p>The <code>MetadataAccessExpressions</code> having a certain <code>Element</code> as their <code>referencedElement</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>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>relatedFeatures</code> of a <code>Connector</code> are the referenced <code>Features</code> of its <code>connectorEnds</code>.</p> + + + <p>The <code>operator</code> of a <code>CollectExpression</code> must be <code>"collect"</code>.</p> - + OCL2.0 - relatedFeature = connectorEnd.ownedReferenceSubsetting-> - select(s | s <> null).subsettedFeature + operator = 'collect' - - - <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>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 - relatedFeature->forAll(f | - if featuringType->isEmpty() then f.isFeaturedWithin(null) - else featuringType->forAll(t | f.isFeaturedWithin(t)) - endif) + let sourceTargetFeature : Feature = sourceTargetFeature() in +sourceTargetFeature <> null and +sourceTargetFeature.redefinesFromLibrary('ControlFunctions::\'.\'::source::target') - - - <p>The <code>sourceFeature</code> of a <code>Connector</code> is its first <code>relatedFeature</code> (if any).</p> + + + <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 - sourceFeature = - if relatedFeature->isEmpty() then null - else relatedFeature->first() - endif + let sourceTargetFeature : Feature = sourceTargetFeature() in +sourceTargetFeature <> null and +sourceTargetFeature.redefines(targetFeature) - - - <p>The <code>targetFeatures</code> of a <code>Connector</code> are the <code>relatedFeatures</code> other than the <code>sourceFeature</code>.</p> + + + <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 = - if relatedFeature->size() < 2 then OrderedSet{} - else - relatedFeature-> - subSequence(2, relatedFeature->size())-> - asOrderedSet() + 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 a <code>Connector</code> is concrete (not abstract), then it must have at least two <code>relatedFeatures</code>.</p> + + + <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 - not isAbstract implies relatedFeature->size() >= 2 + argument->notEmpty() implies + targetFeature.isFeaturedWithin(argument->first().result) - - - <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>operator</code> of a <code>FeatureChainExpression</code> must be <code>"."</code>.</p> - + OCL2.0 - specializesFromLibrary('Links::links') + operator = '.' - - - <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>result</code> parameter of a <code>FeatureChainExpression</code> must specialize the feature chain of the <code>FeatureChainExpression</code>.</p> - + OCL2.0 - association->exists(oclIsKindOf(AssociationStructure)) implies - specializesFromLibrary('Objects::linkObjects') + 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 - - - <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>Feature</code> that is accessed by this <code>FeatureChainExpression<code>, which is its first non-<code>parameter</code> <code>member</code>.<p> - + + + + + + <p>Return the first <code>ownedFeature</code> of the first owned input <code>parameter</code> of this <code>FeatureChainExpression</code> (if any).</p> + + + + OCL2.0 + let inputParameters : Feature = ownedFeatures-> + select(direction = _'in') in +if inputParameters->isEmpty() or + inputParameters->first().ownedFeature->isEmpty() +then null +else inputParameters->first().ownedFeature->first() +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>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 - connectorEnds->size() = 2 and -association->exists(oclIsKindOf(AssociationStructure)) implies - specializesFromLibrary('Objects::binaryLinkObjects') + 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>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>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 - connectorEnd->size() = 2 implies - specializesFromLibrary('Links::binaryLinks') + TBD - - - <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>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 - connectorEnds->size() > 2 implies - not specializesFromLibrary('Links::BinaryLink') + instantiatedType.input->collect(inp | + ownedFeatures->select(redefines(inp)).valuation-> + select(v | v <> null).value +) - - - <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>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 - 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 + let parameters : OrderedSet(Feature) = instantiatedType.input in +input->forAll(inp | + inp.ownedRedefinition.redefinedFeature-> + intersection(parameters)->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>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> + + + <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 - relatedFeature->size() = 2 + 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>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>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 - specializesFromLibrary('Links::selfLinks') + not instantiatedType.oclIsKindOf(Function) and +not (instantiatedType.oclIsKindOf(Feature) and + instantiatedType.oclAsType(Feature).type->exists(oclIsKindOf(Function))) implies + result.specializes(instantiatedType) - - - - - - - - - - - - - - - - - - <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>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>An <code>InvocationExpression</code> must specialize its <code>instantiatedType</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) + specializes(instantiatedType) - - - <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>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 - featureWithValue.redefinition.redefinedFeature-> - closure(redefinition.redefinedFeature).valuation-> - forAll(isDefault) + instantiatedType.oclIsKindOf(Behavior) or +instantiatedType.oclIsKindOf(Feature) and + instantiatedType.type->exists(oclIsKindOf(Behavior)) and + instantiatedType.type->size(1) - - - <p>If a <code>FeatureValue</code> has <code>isInitial = true</code>, then its <code>featureWithValue</code> must have <code>isVariable = true</code>.</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 - isInitial implies featureWithValue.isVariable + ownedFeature->forAll(f | + f <> result implies + f.direction = FeatureDirectionKind::_'in') - - - - <p>The Feature to be provided a value.</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> + - - <p>The <code>Feature</code> to be provided a value.</p> + + + OCL2.0 + argument->forAll(modelLevelEvaluable(visited)) and + function.isModelLevelEvaluable + + + + + + + + + + + + + <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>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>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>LiteralExpression</code> is an <code>Expression</code> that provides a basic <code><em>DataValue</em></code> as a result.</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>LiteralExpression</code> is always model-level evaluable.</p> - + OCL2.0 - specializesFromLibrary('Objects::Object') + isModelLevelEvaluable = true - - - <p>A <code>Structure</code> must not specialize a <code>Behavior</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 - ownedSpecialization.general->forAll(not oclIsKindOf(Behavior)) + specializesFromLibrary('Performances::literalEvaluations') - - - - - <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>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>LiteralExpression</code> is always model-level evaluable.</p> - - OCL2.0 - specializesFromLibrary('Occurrences::Occurrence') - - - - - <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 + true + + + + + + + + + + + + + <p>The model-level value of a <code>LiteralExpression</code> is itself.</p> - - OCL2.0 - ownedSpecialization.general-> - forAll(not oclIsKindOf(DataType)) and -not oclIsKindOf(Association) implies - ownedSpecialization.general-> - forAll(not oclIsKindOf(Association)) - - - + + + OCL2.0 + Sequence{self} + + + + + + + + - - - <p>The ItemFlow that has a certain <code>itemType</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 + + + + - - - <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>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>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('Transfers::transfers') - - - - - <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>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::Collection</code></em> from the Kernel Data Type Library.</p> - + OCL2.0 - payloadType = - if payloadFeature = null then Sequence{} - else payloadFeature.type - endif + arguments->notEmpty() and +not arguments->first().result.specializesFromLibrary('Collections::Collection') implies + result.specializes(arguments->first().result) - - - <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>The <code>operator</code> of an <code>IndexExpression</code> must be <code>"#"</code>.</p> - + OCL2.0 - sourceOutputFeature = - if connectorEnd->isEmpty() or - connectorEnd.ownedFeature->isEmpty() - then null - else connectorEnd.ownedFeature->first() - endif + operator = '#' - - - <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>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 - targetInputFeature = - if connectorEnd->size() < 2 or - connectorEnd->at(2).ownedFeature->isEmpty() - then null - else connectorEnd->at(2).ownedFeature->first() - endif + specializesFromLibrary('Performances::metadataAccessEvaluations') - - - <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>MetadataAccessExpression</code> must have at least one <code>ownedMember</code> that is not a <code>FeatureMembership</code>.</p> - + OCL2.0 - flowEnd = connectorEnd->selectByKind(FlowEnd) + ownedMembership->exists(not oclIsKindOf(FeatureMembership)) - - - <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>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 - payloadFeature = - let payloadFeatures : Sequence(PayloadFeature) = - ownedFeature->selectByKind(PayloadFeature) in - if payloadFeatures->isEmpty() then null - else payloadFeatures->first() + referencedElement = + let elements : Sequence(Element) = ownedMembership-> + reject(oclIsKindOf(FeatureMembership)).memberElement in + if elements->isEmpty() then null + else elements->first() endif - - - <p>A <code>Flow</code> must have at most one <code>ownedFeature</code> that is an <code>PayloadFeature</code>.</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 + 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>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 - ownedFeature->selectByKind(PayloadFeature)->size() <= 1 + result.owningType = self - - - <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>The <code>instantiatedType</code> of an <code>InstantiationExpression</code> is given by the result of the <code>instantiatedType()</code> operation.</p> - + OCL2.0 - ownedEndFeatures->notEmpty() implies - specializesFromLibrary('Transfers::flowTransfers') + instantiatedType = instantiatedType() - - - - - <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 <code>connectorEnds</code> of this <code>Flow</code> that are <code>FlowEnds</code>.</p> - + + + <p>An <code>InstantiationExpression</code> must have an <code>InstantiatedType</code>.</p> - - - - - - <p>The <code>ownedFeature</code> of the <code>Flow</code> that is a <code>PayloadFeature</code> (if any).</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> - - + + - - - <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 <code>Type</code> that is being instantiated.</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> + + + <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 - specializesFromLibrary('Transfers::flowTransfersBefore') - - - - - - - - - - + + + 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>The ItemFlow that has a certain <code>targetInputFeature</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>FeatureReferenceExpression</code> is an <code>Expression</code> whose <code>result</code> is bound to a <code>referent</code> <code>Feature</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> + + + <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 - redefinesFromLibrary('Transfers::Transfer::payload') + 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>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>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 - isEnd + ownedMember->selectByKind(BindingConnector)->exists(b | + b.relatedFeatures->includes(targetFeature) and + b.relatedFeatures->includes(result)) - - - <p>A <code>FlowEnd</code> must have exactly one <code>ownedFeature</code>.</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 - ownedFeature->size() = 1 + let membership : Membership = + ownedMembership->reject(m | m.oclIsKindOf(ParameterMembership)) in +membership->notEmpty() and +membership->at(1).memberElement.oclIsKindOf(Feature) - - - <p>The <code>owningType</code> of a <code>FlowEnd</code> must be a <code>Flow</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 - owningType <> null and owningType.oclIsKindOf(Flow) + result.owningType() = self and result.specializes(referent) - - - - - - <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 Package that has a certain Expression as a <code>filterCondition</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>FeatureReferenceExpression</code> must own its <code>result</code> parameter.</p> - + OCL2.0 - filterCondition = ownedMembership-> - selectByKind(ElementFilterMembership).condition + result.owningType = self - - - - <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>Feature</code> that is referenced by this <code>FeatureReferenceExpression</code>, which is its first non-<code>parameter</code> <code>member</code>.<p> - - + + - - - <p>Exclude <code>Elements</code> that do not meet all the <code>filterConditions</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 - 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> - - - + + OCL2.0 - let metadataFeatures: Sequence(AnnotatingElement) = - element.ownedAnnotation.annotatingElement-> - selectByKind(MetadataFeature) in - self.filterCondition->forAll(cond | - metadataFeatures->exists(elem | - cond.checkCondition(elem))) + 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>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>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>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 + 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><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>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>The <code>condition</code> <code>Expression</code> must be model-level evaluable.</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 - condition.isModelLevelEvaluable + instantiatedType.feature->collect(f | + result.ownedFeatures->select(redefines(f)).valuation-> + select(v | v <> null).value +) - - - <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>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 - condition.result.specializesFromLibrary('ScalarValues::Boolean') + 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>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> + + + <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>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>A <code>MetadataFeature</code> must have exactly one <code>type</code> that is a <code>Metaclass</code>.</p> - - - OCL2.0 - type->selectByKind(Metaclass).size() = 1 - - - - - <p>The <code>metaclass</code> of a <code>MetadataFeature</code> must not be abstract.</p> - - - OCL2.0 - not metaclass.isAbstract - - - - - <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 - specializesFromLibrary('Metaobjects::metaobjects') + let features : OrderedSet(Feature) = instantiatedType.feature-> + select(owningMembership.visibility = VisibilityKind::public) in +result.ownedFeature->forAll(f | + f.ownedRedefinition.redefinedFeature-> + intersection(features)->size() = 1) - - - <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>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 - 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) + TBD - - - <p>The <code>metaclass</code> of a <code>MetadataFeature</code> is one of its <code>types</code> that is a <code>Metaclass</code>. + + + <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 - metaclass = - let metaclassTypes : Sequence(Type) = type->selectByKind(Metaclass) in - if metaclassTypes->isEmpty() then null - else metaClassTypes->first() - endif + specializes('Performances::constructorEvaluations') - - - <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>The <code>result</code> of a <code>ConstructorExpression</code> must specialize the <code>instantiatedType</code> of the <code>ConstructorExpression</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))) + result.specializes(instantiatedType) - - - <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>A <code>ConstructorExpression</code> must not have any <code>ownedFeatures</code> other than its <code>result</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 + ownedFeatures->excluding(result)->isEmpty() - - - - - <p>The <code>type</code> of this <code>MetadataFeature</code>, which must be a <code>Metaclass</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> - - - - 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> - - - - 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>A <code>ConstructorExpression</code> is model-level evaluable if all its argument <code>Expressions</code> are model-level evaluable.</p> + - - + + OCL2.0 - specializesFromLibrary('KerML::Element') + argument->forAll(modelLevelEvaluable(visited)) - + - - - - <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>Metaclass</code> is a <code>Structure</code> used to type <code>MetadataFeatures</code>.</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>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>A <code>LiteralBoolean</code> must directly or indirectly specialize <em><code>Performances::literalBooleanEvaluations</code></em> from the Kernel Semantic Library.</p> - + OCL2.0 - specializesFromLibrary('Metaobjects::Metaobject') + specializesFromLibrary('Performances::literalBooleanEvaluations') - - - - - - <p>The MetadataFeatures whose <code>type</code> is a certain Metaclass.</p> + + + + <p>The <code><em>Boolean</em></code> value that is the result of evaluating this <code>LiteralBoolean</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 Boolean value that is the result of evaluating this Expression.</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>relatedTypes</code> of an <code>Association</code> are the <code>types</code> of its <code>associationEnds</code>.</p> + + + <p>The <code>operator</code> of a <code>SelectExpression</code> must be <code>'select'</code>.</p> - + OCL2.0 - relatedType = associationEnd.type + operator = 'select' - - - <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>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 - specializesFromLibrary('Links::Link') - - - - - <p>If an <code>Association</code> is also a kind of <code>Structure</code>, then it must be an <code>AssociationStructure</code>.</p> - - - English - oclIsKindOf(Structure) = oclIsKindOf(AssociationStructure) + arguments->notEmpty() implies + result.specializes(arguments->first().result) - - - <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>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 - associationEnd->size() = 2 implies - specializesFromLibrary('Links::BinaryLink') + specializesFromLibrary('Performances::literalIntegerEvaluations') - - - <p>If an <code>Association</code> is concrete (not abstract), then it must have at least two <code>relatedTypes</code>.</p> + + + + <p>The <code><em>Integer</em></code> value that is the result of evaluating this <code>LiteralInteger</code>.</p> - - OCL2.0 - not isAbstract implies relatedType->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>The Integer value that is the result of evaluating this Expression.</p> + - - OCL2.0 - associationEnds->size() > 2 implies - not specializesFromLibrary('Links::BinaryLink') - - - - - <p>The <code>sourceType</code> of an <code>Association</code> is its first <code>relatedType</code> (if any).</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 - sourceType = - if relatedType->isEmpty() then null - else relatedType->first() endif - - - - + OCL2.0 - targetType = - if relatedType->size() < 2 then OrderedSet{} - else - relatedType-> - subSequence(2, relatedType->size())-> - asOrderedSet() - endif + specializesFromLibrary('Performances::nullEvaluations') - - - <p>The <code>ownedEndFeatures</code> of an <code>Association</code> must have exactly one <code>type</code></p>. + + + + <p>A <code>NullExpression</code> is always model-level evaluable.</p> - - OCL2.0 - 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> - + + + OCL2.0 + true + + + + + + + + + + + + + <p>The model-level value of a <code>NullExpression</code> is an empty sequence.</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 + Sequence{} + + + + + + + + + + + + + <p>A <code>FeatureReferenceExpression</code> that has a certain <code>referent</code> <code>Feature</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>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>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> + + OCL2.0 + specializesFromLibrary('Performances::literalStringEvaluations') + + + + + + <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>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>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>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>LiteralInfinity</code> must directly or indirectly specialize <em><code>Performances::literalIntegerEvaluations</code></em> from the Kernel Semantic Library.</p> - + OCL2.0 - specializesFromLibrary('Objects::LinkObject') + specializesFromLibrary('Performances::literalIntegerEvaluations') - - - <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 FeatureValue that owns the <code>value</code> Expression.</p> - - OCL2.0 - endFeature->size() = 2 implies - specializesFromLibrary('Objects::BinaryLinkObject') - - - - + + + - - - - + + + + <p>The (at most one) <code>ownedMembership</code> of this Feature that is the FeatureValue that provides the value of the Feature.</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 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>Classifier</code> that owns this <code>Subclassification</code> relationship, which must also be its <code>subclassifier</code>.</p> - - - - - - - - - <p>A <code>Classifier</code> is a <code>Type</code> that classifies:</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> -<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 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>The <code>ownedSubclassifications</code> of a <code>Classifier</code> are its <code>ownedSpecializations</code> that are <code>Subclassifications</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 - ownedSubclassification = - ownedSpecialization->selectByKind(Subclassification) + 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>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>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> - + OCL2.0 - multiplicity <> null implies multiplicity.featuringType->isEmpty() + featureWithValue.redefinition.redefinedFeature-> + closure(redefinition.redefinedFeature).valuation-> + forAll(isDefault) - - - - <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 Subclassifications with a certain <code>subclassifier</code>.</p> - - - - - - - - - <p>The Subclassifications with a certain <code>superclassifier</code>.</p> - - - - - - - - - - <p>The Type that inherits the <code>inheritedMembership</code>.</p> - - - - - - - - - <p>The Types that include this one among their <code>differencingTypes</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> - - - - - - - - <p>A Type that owns or inherits a FeatureMembership Relationship with the <code>feature</code>.</p> + + OCL2.0 + isInitial implies featureWithValue.isVariable + + + + + + <p>The Feature to be provided a value.</p> - - - - - - - - <p>The Disjoinings that identify this Type as their <code>typeDisjoined</code>.</p> + + <p>The <code>Feature</code> to be provided a value.</p> - - - - - - - - <p>The Conjugations with a certain Type as the <code>originalType</code>.</p> + + + + + + <p>The Expression that provides the value as a result.</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>The <code>Expression</code> that provides the value of the <code>featureWithValue</code> as its <code>result</code>.</p> - - + + - - - <p><code>Type</code> that partly determines interpretations of <code>typeIntersected</code>, as described in <code>Type::intersectingType</code>.</p> - + + + <p>Whether this <code>FeatureValue</code> specifies a bound value or an initial value for the <code>featureWithValue</code>.</p> - - + + - - - - - <p>The Conjugation corresponding to the <code>conjugatedType</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><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>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>The <code>specific</code> <code>Type</code> of a <code>Specialization</code> cannot be a conjugated <code>Type</code>.</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 specific.isConjugated + specializesFromLibrary('Transfers::transfers') - - - - <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>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>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 + payloadType = + if payloadFeature = null then Sequence{} + else payloadFeature.type + endif + + + + + <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 + sourceOutputFeature = + if connectorEnd->isEmpty() or + connectorEnd.ownedFeature->isEmpty() + then null + else connectorEnd.ownedFeature->first() + endif + + + + + <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 + targetInputFeature = + if connectorEnd->size() < 2 or + connectorEnd->at(2).ownedFeature->isEmpty() + then null + else connectorEnd->at(2).ownedFeature->first() + endif + + + + + <p>The <code>flowEnds</code> of a <code>Flow</code> are all its <code>connectorEnds</code> that are <code>FlowEnds</code>.</p> + + + OCL2.0 + flowEnd = connectorEnd->selectByKind(FlowEnd) + + + + + <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 + payloadFeature = + let payloadFeatures : Sequence(PayloadFeature) = + ownedFeature->selectByKind(PayloadFeature) in + if payloadFeatures->isEmpty() then null + else payloadFeatures->first() + endif + + + + + <p>A <code>Flow</code> must have at most one <code>ownedFeature</code> that is an <code>PayloadFeature</code>.</p> + + + OCL2.0 + ownedFeature->selectByKind(PayloadFeature)->size() <= 1 + + + + + <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>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>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><code>Type</code> asserted to be disjoint with the <code>disjoiningType</code>.</p> + + + + + + + <p>The <code>connectorEnds</code> of this <code>Flow</code> that are <code>FlowEnds</code>.</p> - - + + - - - <p><code>Type</code> asserted to be disjoint with the <code>typeDisjoined</code>.</p> + + + <p>The <code>ownedFeature</code> of the <code>Flow</code> that is a <code>PayloadFeature</code> (if any).</p> - - + + - - - <p>A <code>typeDisjoined</code> that is also an <code>owningRelatedElement</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 Specializations with a certain <code>general<code> Type.</p> + + + + <p>The ItemFlow that has a certain <code>sourceOutputFeature</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>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>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>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 - ownedSpecialization = ownedRelationship->selectByKind(Specialization)-> - select(s | s.special = self) - + redefinesFromLibrary('Transfers::Transfer::payload') - - - <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>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 - multiplicity = - let ownedMultiplicities: Sequence(Multiplicity) = - ownedMember->selectByKind(Multiplicity) in - if ownedMultiplicities->isEmpty() then null - else ownedMultiplicities->first() - endif + specializesFromLibrary('Transfers::flowTransfersBefore') - - - <p>The <code>ownedFeatureMemberships</code> of a <code>Type</code> are its <code>ownedMemberships</code> that are <code>FeatureMemberships</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 - ownedFeatureMembership = ownedRelationship->selectByKind(FeatureMembership) + isEnd - - - <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>A <code>FlowEnd</code> must have exactly one <code>ownedFeature</code>.</p> - + OCL2.0 - ownedConjugator = - let ownedConjugators: Sequence(Conjugator) = - ownedRelationship->selectByKind(Conjugation) in - if ownedConjugators->isEmpty() then null - else ownedConjugators->at(1) endif + ownedFeature->size() = 1 - - - <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>owningType</code> of a <code>FlowEnd</code> must be a <code>Flow</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> - - - OCL2.0 - input = feature->select(f | - let direction: FeatureDirectionKind = directionOf(f) in - direction = FeatureDirectionKind::_'in' or - direction = FeatureDirectionKind::inout) + owningType <> null and owningType.oclIsKindOf(Flow) - - - <p>The <code>inheritedMemberships<code> of a <code>Type</code> are determined by the <code>inheritedMemberships()</code> operation.</p> + + + + + <p>The ItemFlow that has a certain <code>itemType</code>.</p> + + + + + + + + + + + + + + + + <p>The ItemFlow that has a certain <code>targetInputFeature</code>.</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> + + + + + + + <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> - + OCL2.0 - specializesFromLibrary('Base::Anything') + specializesFromLibrary('Metaobjects::Metaobject') - - - <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 MetadataFeatures whose <code>type</code> is a certain Metaclass.</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>. + + + + + + + <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>A <code>MetadataFeature</code> must have exactly one <code>type</code> that is a <code>Metaclass</code>.</p> - + OCL2.0 - feature = featureMembership.ownedMemberFeature + type->selectByKind(Metaclass).size() = 1 - - - <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> owned by a direct or indirect supertype of this <code>Type</code>.</p> + + + <p>The <code>metaclass</code> of a <code>MetadataFeature</code> must not be abstract.</p> - + OCL2.0 - featureMembership = ownedFeatureMembership-> - union(inheritedMembership-> - selectByKind(FeatureMembership)-> - select(mem | self.specializes(mem.owningType))) - - - - - <p>The <code>ownedFeatures</code> of a <code>Type</code> are the <code>ownedMemberFeatures</code> of its <code>ownedFeatureMemberships</code>. - - - 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> - - - English - differencingType = ownedDifferencing.differencingType - - - - - <p>A <code>Type</code> cannot be one of its own <code>intersectingTypes</code>.</p> - - - English - intersectingType->excludes(self) - - - - - <p>A <code>Type</code> cannot be one of its own <code>differencingTypes</code>.</p> - - - English - differencingType->excludes(self) + not metaclass.isAbstract - - - <p>The <code>unioningTypes</code> of a <code>Type</code> are the <code>unioningTypes</code> of its <code>ownedUnionings</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 - unioningType = ownedUnioning.unioningType - - - - - <p>A <code>Type</code> cannot be one of its own <code>unioningTypes</code>.</p> - - - English - unioningType->excludes(self) + specializesFromLibrary('Metaobjects::metaobjects') - - - <p>The <code>intersectingTypes</code> of a <code>Type</code> are the <code>intersectingTypes</code> of its <code>ownedIntersectings</code>.</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 - intersectingType = ownedIntersecting.intersectingType + 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) - - - A <code>Type</code> must have at most one owned <code>Conjugation</code> <code>Relationship</code>. + + + <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 - ownedRelationship->selectByKind(Conjugation)->size() <= 1 + metaclass = + let metaclassTypes : Sequence(Type) = type->selectByKind(Metaclass) in + if metaclassTypes->isEmpty() then null + else metaClassTypes->first() + endif - - - <p>A <code>Type</code> may have at most one <code>ownedMember</code> that is a <code>Multiplicity</code>.</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 - ownedMember->selectByKind(Multiplicity)->size() <= 1 + 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>The <code>endFeatures</code> of a <code>Type</code> are all its <code>features</code> for which <code>isEnd = true</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 - endFeature = feature->select(isEnd) + 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>ownedDisjoinings</code> of a <code>Type</code> are the <code>ownedRelationships</code> that are <code>Disjoinings</code>.</p> + + + + + <p>The <code>type</code> of this <code>MetadataFeature</code>, which must be a <code>Metaclass</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> + + + + + + <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> - + + + 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> + + + + 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> + + + + 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>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 - ownedUnioning = - ownedRelationship->selectByKind(Unioning) + ownedSpecialization.general-> + forAll(not oclIsKindOf(Class) and + not oclIsKindOf(Association)) - - - <p>The <code>ownedIntersectings</code> of a <code>Type</code> are the <code>ownedRelationships</code> that are <code>Intersectings</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 - ownedRelationship->selectByKind(Intersecting) + specializesFromLibrary('Base::DataValue') - - - <p>The <code>ownedDifferencings</code> of a <code>Type</code> are its <code>ownedRelationships</code> that are <code>Differencings</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>If the <code>owningNamespace</code> of a <code>MultiplicityRange</code> is a <code>Feature</code>, but not an owned cross <code>Feature</code>, then the <code>bounds</code> of the <code>MultiplicityRange</code> must have the same <code>featuringTypes</code> as the <code>MultiplicityRange</code>. If the <code>owningNamespace</code> is an owned cross <code>Feature</code>, then the <code>bounds</code> must have the same <code>featuringTypes</code> as the owning end <code>Feature</code> of the <code>owningNamespace</code>. (This allows a cross multiplicity to be evaluated in the same context as the multiplicity of the end <code>Feature</code>.)</p> - + OCL2.0 - ownedDifferencing = - ownedRelationship->selectByKind(Differencing) + let boundsFeaturingType : OrderedSet(Type) = + if owningNamespace <> null and owningNamespace.oclIsKindOf(Feature) and + owningNamespace.oclAsType(Feature).isOwnedCrossFeature() then + owningNamespace.oclAsType(Feature).owningNamespace.oclAsType(Feature).featuringType + else + featuringType + endif in +bound->forAll(b | b.featuringType = boundsFeaturingType) + - - - <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>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 - ownedEndFeature = ownedFeature->select(isEnd) + bound->forAll(b | + b.result.specializesFromLibrary('ScalarValues::Integer') and + let value : UnlimitedNatural = valueOf(b) in + value <> null implies value >= 0 +) - - - <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>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 - inheritedFeature = inheritedMemberships-> - selectByKind(FeatureMembership).memberFeature + lowerBound = + let ownedExpressions : Sequence(Expression) = + ownedMember->selectByKind(Expression) in + if ownedExpressions->size() < 2 then null + else ownedExpressions->first() + endif - - - A <code>Type</code> must not have exactly one <code>ownedUnioning</code>. + + + <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 - ownedUnioning->size() <> 1 + 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 - - - A <code>Type</code> must not have exactly one <code>ownedIntersecting</code>. + + + <p>The <code>bounds</code> of a <code>MultiplicityRange</code> are the <code>lowerBound</code> (if any) followed by the <code>upperBound</code>.</p> - + OCL2.0 - ownedIntersecting->size() <> 1 + bound = + if upperBound = null then Sequence{} + else if lowerBound = null then Sequence{upperBound} + else Sequence{lowerBound, upperBound} + endif endif - - - A <code>Type</code> must not have exactly one <code>ownedDifferencing</code>. + + + <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> - + OCL2.0 - ownedDifferencing->size() <> 1 + 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>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>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>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>Expression</code> whose result is the upper bound of the <code>MultiplicityRange</code>.</p> - - + + - - - <p>The <code>ownedMemberFeatures</code> of the <code>featureMemberships</code> of this <code>Type</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> - - + + - - - <p>The <code>ownedMemberFeatures</code> of the <code>ownedFeatureMemberships</code> of this <code>Type</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> - - - - - - <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 + 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> - - - - - - <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 + 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 Functions that hasve a certain <code>expression</code> as a step.</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>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>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 + specializesFromLibrary('Performances::booleanEvaluations') + + + + + + <p>The Predicate that types the Expression.</p> - - - - - - <p>All <code>features</code> of this <code>Type</code> with <code>isEnd = true</code>.</p> + + <p>The <code>Predicate</code> that types this <code>BooleanExpression</code>.</p> - - + + - - - <p>All <code>endFeatures</code> of this <code>Type</code> that are <code>ownedFeatures</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>The <code>owningType</code> of a <code>ReturnParameterMembership</code> must be a <code>Function</code> or <code>Expression</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 + owningType.oclIsKindOf(Function) or owningType.oclIsKindOf(Expression) + + + + + + <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>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 ResultExpressionMembership that owns the <code>ownedResultExpression</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>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>Conjugation</code> owned by this <code>Type</code> for which the <code>Type</code> is the <code>originalType</code>.</p> + + OCL2.0 + specializesFromLibrary('Performances::BooleanEvaluation') + + + + + + + <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> - - - - - - <p>Indicates whether this <code>Type</code> has an <code>ownedConjugator</code>.</p> + + OCL2.0 + 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>All the <code>memberFeatures</code> of the <code>inheritedMemberships</code> of this <code>Type</code> that are <code>FeatureMemberships</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 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>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>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> - + + 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> - - - - - - <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> - + + OCL2.0 + specializesFromLibrary('Performances::Evaluation') + + + + + <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>ownedRelationships</code> of this <code>Type</code> that are <code>Unionings</code>, having the <code>Type</code> as their <code>typeUnioned</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))) + + + + + <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 + result = + let resultParams : Sequence(Feature) = + featureMemberships-> + selectByKind(ReturnParameterMembership). + ownedMemberParameter in + if resultParams->notEmpty() then resultParams->first() + else null + 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 <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 set of expressions that represent computational steps or parts of a system of equations within the Function.</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 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>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>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> - - + - - - <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>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> - - - - - - <p>The <code>features</code> of this <code>Type</code> that have a non-null <code>direction</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>The visible <code>Memberships</code> of a <code>Type</code> include <code>inheritedMemberships</code>.</p> - + + + + + <p>The Functions that have a certain Feature its owned or inherited <code>result</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>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>Whether an <code>Expression</code> <code>isModelLevelEvaluable</code> is determined by the <code>modelLevelEvaluable()</code> operation.</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 + 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 - let excludingSelf : Set(Type) = excludedType->including(self) in -supertypes(excludeImplied)->reject(t | excludingSelf->includes(t)). - nonPrivateMemberships(excludedNamespaces, excludingSelf, excludeImplied) + + 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> + + + OCL2.0 + owningMembership <> null and +owningMembership.oclIsKindOf(FeatureValue) implies + let featureWithValue : Feature = + owningMembership.oclAsType(FeatureValue).featureWithValue in + featuringType = featureWithValue.featuringType + + + + + <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 + 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> 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 + result = + let resultParams : Sequence(Feature) = + featureMemberships-> + selectByKind(ReturnParameterMembership). + ownedMemberParameter in + if resultParams->notEmpty() then resultParams->first() + else null + 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>An <code>Expression</code> must have exactly one <code>featureMembership</code> (owned or inherited) that is a <code>ResultParameterMembership</code>.</p> - - + + OCL2.0 + featureMembership-> + selectByKind(ReturnParameterMembership)-> + size() = 1 + + + + + <p>An <code>Expression</code> must have at most one <code>ResultExpressionMembership</code>.</p> + + + OCL2.0 + membership->selectByKind(ResultExpressionMembership)->size() <= 1 + + + + + + <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 - 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) + 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>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>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 - 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))) + isModelLevelEvaluable - - - - - - - - - - - - <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() + let resultExprs : Sequence(Expression) = + ownedFeatureMembership-> + selectByKind(ResultExpressionMembership). + ownedResultExpression in +if resultExpr->isEmpty() then Sequence{} +else resultExprs->first().evaluate(target) 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> + + + <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 - directionOfExcluding(f, Set{}) + let results: Sequence(Element) = evaluate(target) in + result->size() = 1 and + results->first().oclIsKindOf(LiteralBoolean) and + results->first().oclAsType(LiteralBoolean).value - - - - + + + - - - <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> - - - - - 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> - - - - 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> + + + + + + + + + + <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 - 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 + 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 - 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 - - - - - - - + + OCL2.0 + specializesFromLibrary('Links::selfLinks') + + + - - - - <p>A Type that has an <code>inheritedMembership</code> with the <code>inheritedFeature</code> as its <code>memberFeature</code>.</p> - - - + + + + - - - - - + + + + <p>A <code>Connector</code> with a certain <code>defaultFeaturingType</code>.</p> + + + - - - - <p>A Type that has an EndFeatureMembership in which the <code>endFeature</code> is a <code>memberFeature</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>A <code>Succession</code> is a binary <code>Connector</code> that requires its <code>relatedFeatures</code> to happen separately in time.</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>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>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 Type with a certain <code>output</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>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>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>The <code>relatedFeatures</code> of a <code>Connector</code> are the referenced <code>Features</code> of its <code>connectorEnds</code>.</p> - - - - - - - - <p>The Disjoinings that identify this Type as their <code>disjoiningType</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> - - - - - - - - <p>A Type that owns or inherits the <code>featureMembership</code>.</p> + + OCL2.0 + relatedFeature->forAll(f | + if featuringType->isEmpty() then f.isFeaturedWithin(null) + else featuringType->forAll(t | f.isFeaturedWithin(t)) + endif) + + + + + <p>The <code>sourceFeature</code> of a <code>Connector</code> is its first <code>relatedFeature</code> (if any).</p> - - - - - - - - <p>The Differencings that identify this Type as their <code>differencingType</code>.</p> + + OCL2.0 + sourceFeature = + if relatedFeature->isEmpty() then null + else relatedFeature->first() + endif + + + + + <p>The <code>targetFeatures</code> of a <code>Connector</code> are the <code>relatedFeatures</code> other than the <code>sourceFeature</code>.</p> - - - - - - - - <p>The Intersectings that identify this Type as their <code>intersectingType</code>.</p> + + OCL2.0 + targetFeature = + if relatedFeature->size() < 2 then OrderedSet{} + else + relatedFeature-> + subSequence(2, relatedFeature->size())-> + asOrderedSet() + endif + + + + + <p>If a <code>Connector</code> is concrete (not abstract), then it must have at least two <code>relatedFeatures</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>. -<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 + not isAbstract implies relatedFeature->size() >= 2 + + + + + <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 - if owningNamespace <> null and owningNamespace.oclIsKindOf(Feature) then - featuringType = - owningNamespace.oclAsType(Feature).featuringType -else - featuringType->isEmpty() -endif + specializesFromLibrary('Links::links') - - - <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>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('Base::naturals') + association->exists(oclIsKindOf(AssociationStructure)) implies + specializesFromLibrary('Objects::linkObjects') - - - - - - - <p>The Types that include this one among their <code>unioningTypes</code>.</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> - - - - - - - - <p>A Type with a certain <code>input</code>.</p> + + OCL2.0 + connectorEnds->size() = 2 and +association->exists(oclIsKindOf(AssociationStructure)) implies + specializesFromLibrary('Objects::binaryLinkObjects') + + + + + <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 Unionings that identify all these Types as their <code>unioningType</code>.</p> + + OCL2.0 + connectorEnd->size() = 2 implies + specializesFromLibrary('Links::binaryLinks') + + + + + <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 Types that include this one among their <code>intersectingTypes</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><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> + + 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><code>Type</code> that partly determines interpretations of <code>typeDifferenced</code>, as described in <code>Type::differencingType</code>.</p> + + + <p>The <code>Associations</code> that type the <code>Connector</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>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><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 source <code>relatedFeature</code> for this <code>Connector</code>. It is the first <code>relatedFeature</code>.</p> - - + + - - - <p>The <code>Type</code> that is the result of applying <code>Conjugation</code> to the <code>originalType</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>conjugatedType</code> of this <code>Conjugation</code> that is also its <code>owningRelatedElement</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 Specializations with a certain <code>specific</code> Type.</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>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 FeatureInvertings that identify this Feature as their <code>invertingFeature</code>.</p> + + OCL2.0 + specializesFromLibrary('Occurrences::Occurrence') + + + + + <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 + ownedSpecialization.general-> + forAll(not oclIsKindOf(DataType)) and +not oclIsKindOf(Association) implies + ownedSpecialization.general-> + forAll(not oclIsKindOf(Association)) + + + - - - <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>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 <code>subsettedFeature</code> must be accessible by the <code>subsettingFeature</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> - + OCL2.0 - subsettingFeature.canAccess(subsettedFeature) + specializesFromLibrary('Objects::Object') - - - <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>A <code>Structure</code> must not specialize a <code>Behavior</code>.</p> - + OCL2.0 - subsettedFeature.isUnique implies subsettingFeature.isUnique + ownedSpecialization.general->forAll(not oclIsKindOf(Behavior)) - - - <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 Package that has a certain Expression as a <code>filterCondition</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> + + OCL2.0 - subsettedFeature.isConstant and subsettingFeature.isVariable implies - subsettingFeature.isConstant - + filterCondition = ownedMembership-> + selectByKind(ElementFilterMembership).condition - - - - <p>The <code>Feature</code> that is subsetted by the <code>subsettingFeature</code> of this <code>Subsetting</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>Feature</code> that is a subset of the <code>subsettedFeature</code> of this <code>Subsetting</code>.</p> + + + <p>Exclude <code>Elements</code> that do not meet all the <code>filterConditions</code>.</p> - - - - - - <p>A <code>subsettingFeature</code> that is also the <code>owningRelatedElement</code> of this <code>Subsetting</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> + + + + 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>The <code>Features</code> that identify a <code>Feature</code> as their <code>featureTarget</code>.</p> + + + <p>The <code>libraryNamespace</code> for a <code>LibraryPackage</code> is 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 + self + + + + + + + + + + + + <p>The ElementFilterMembership that owns the <code>condition</code>.</p> - - + + - - - - <p>The <code>CrossSubsetting</code> with a certain <code>Feature</code> as the <code>crossedFeature</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>condition</code> <code>Expression</code> must be model-level evaluable.</p> - - - - - - - - <p>The FeatureTypings for which a certain Feature is the <code>typedFeature</code>.</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> + + + OCL2.0 + 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>The <code>TypeFeaturings</code> for which a certain <code>Feature</code> is the <code>featureOfType</code>.</p> - - - + + + + - - - - <p>The Feature that owns this Redefinition relationship, which must also be its <code>redefiningFeature</code>.</p> - - - + + + + - - - - <p>The Redefinitions with a certain Feature as the <code>redefiningFeature</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>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>ownedMemberFeature</code> of an <code>EndFeatureMembership</code> must be an end <code>Feature</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 - ownedMemberFeature.isEnd + specializesFromLibrary('Objects::LinkObject') - - - - - - - - - - <p>The Features for which a certain Type is a <code>featuringType</code>.</p> - - - - - - - - - - - <p>The Features for which a certain Type is a <code>type</code>.</p> - - - - - - - - - <p>The Redefinitions with a certain Feature as the <code>redefinedFeature</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 + endFeature->size() = 2 implies + specializesFromLibrary('Objects::BinaryLinkObject') + + + + - - - - <p>The <code>ReferenceSubsetting</code> with a certain <code>Feature</code> as the <code>referencedFeature</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>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>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>relatedTypes</code> of an <code>Association</code> are the <code>types</code> of its <code>associationEnds</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 + relatedType = associationEnd.type - - - <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>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 - 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)) + specializesFromLibrary('Links::Link') - - - <p>If the <code>redefinedFeature</code> of a <code>Redefinition</code> has <code>isEnd = true</code> and the <code>owningType</code> of the <code>redefiningFeature</code> is an <code>Association</code> or <code>Connector</code>, then the <code>redefiningFeature</code> must have <code>isEnd = true</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> - + + English + oclIsKindOf(Structure) = oclIsKindOf(AssociationStructure) + + + + + <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 - redefinedFeature.isEnd and -redefiningFeature.owningType <> null and -(redefiningFeature.owningType.oclIsKindOf(Association) or - redefiningFeature.owningType.oclIsKindOf(Connector)) implies - redefiningFeature.isEnd + associationEnd->size() = 2 implies + specializesFromLibrary('Links::BinaryLink') - - - - <p>The <code>Feature</code> that is redefining the <code>redefinedFeature</code> of this <code>Redefinition</code>.</p> - + + + <p>If an <code>Association</code> is concrete (not abstract), then it must have at least two <code>relatedTypes</code>.</p> - - - - - - <p>The <code>Feature</code> that is redefined by the <code>redefiningFeature</code> of this <code>Redefinition</code>.</p> - + + OCL2.0 + not isAbstract implies relatedType->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><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 + associationEnds->size() > 2 implies + not specializesFromLibrary('Links::BinaryLink') + + + + + <p>The <code>sourceType</code> of an <code>Association</code> is its first <code>relatedType</code> (if any).</p> + + + OCL2.0 + sourceType = + if relatedType->isEmpty() then null + else relatedType->first() endif + + + + + OCL2.0 + targetType = + if relatedType->size() < 2 then OrderedSet{} + else + relatedType-> + subSequence(2, relatedType->size())-> + asOrderedSet() + endif + + + + + <p>The <code>ownedEndFeatures</code> of an <code>Association</code> must have exactly one <code>type</code></p>. + + + OCL2.0 + 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 <code>Feature</code> that owns this <code>ReferenceSubsetting</code> relationship, which is also its <code>subsettingFeature</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>Features</code> with a certain other <code>Feature</code> as the <code>crossFeature</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 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>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>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 FeatureTyping relating this Type to a Feature.</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>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>The <code>ownedRedefinitions</code> of a <code>Feature</code> are its <code>ownedSubsettings</code> that are <code>Redefinitions</code>.</p> + + + <p>A <code>Behavior</code> must not specialize a <code>Structure</code>.</p> - + OCL2.0 - ownedRedefinition = ownedSubsetting->selectByKind(Redefinition) + ownedSpecialization.general->forAll(not oclIsKindOf(Structure)) - - - <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>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> - - OCL2.0 - ownedTypeFeaturing = ownedRelationship->selectByKind(TypeFeaturing)-> - select(tf | tf.featureOfType = self) + + English + specializesFromLibrary('Performances::Performance') - - - <p>The <code>ownedSubsettings</code> of a <code>Feature</code> are its <code>ownedSpecializations</code> that are <code>Subsettings</code>.</p> + + + <p>The <code>steps</code> of a <code>Behavior</code> are its <code>features</code> that are <code>Steps</code>.</p> - + OCL2.0 - ownedSubsetting = ownedSpecialization->selectByKind(Subsetting) + step = feature->selectByKind(Step) - - - <p>The <code>ownedTypings</code> of a <code>Feature</code> are its <code>ownedSpecializations</code> that are <code>FeatureTypings</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 - ownedTyping = ownedGeneralization->selectByKind(FeatureTyping) + specializesFromLibrary('Performances::performances') - - - <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>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 - 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))) + owningType <> null and + (owningType.oclIsKindOf(Behavior) or + owningType.oclIsKindOf(Step)) implies + specializesFromLibrary('Performances::Performance::enclosedPerformance') - - - <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>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 - multiplicity <> null implies multiplicity.featuringType = featuringType + 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>Feature</code> must directly or indirectly specialize <code><em>Base::things</em></code> 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>, and which is composite, must directly or indirectly specialize the <code>Step</code> <code><em>Performances::Performance::subperformance</em></code>.</p> - + OCL2.0 - specializesFromLibrary('Base::things') + owningType <> null and + (owningType.oclIsKindOf(Behavior) or + owningType.oclIsKindOf(Step)) and + self.isComposite implies + specializesFromLibrary('Performances::Performance::subperformance') - - - <p>A <code>Feature</code> cannot be one of its own <code>chainingFeatures</code>.</p> + + + <p>The <code>behaviors</code> of a <code>Step</code> are all its <code>types</code> that are <code>Behaviors</code>.</p> - - English - chainingFeature->excludes(self) + + OCL2.0 + behavior = type->selectByKind(Behavior) - - - <p>The <code>ownedFeatureChainings</code> of a <code>Feature</code> are the <code>ownedRelationships</code> that are <code>FeatureChainings</code>.</p> - - - OCL2.0 + + + + <p>The <code>Behaviors</code> that type this <code>Step</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>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>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><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 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>A <code>typedFeature</code> that is also the <code>owningRelatedElement</code> of this <code>FeatureTyping</code>.</p> + + + + + + + + + <p>The FeatureInvertings that identify this Feature as their <code>invertingFeature</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>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> + + + 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> + + + 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> + + + 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> + + + 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> + + + OCL2.0 + specializesFromLibrary('Base::things') + + + + + <p>A <code>Feature</code> cannot be one of its own <code>chainingFeatures</code>.</p> + + + English + chainingFeature->excludes(self) + + + + + <p>The <code>ownedFeatureChainings</code> of a <code>Feature</code> are the <code>ownedRelationships</code> that are <code>FeatureChainings</code>.</p> + + + OCL2.0 ownedFeatureChaining = ownedRelationship->selectByKind(FeatureChaining) @@ -6022,51 +5941,72 @@ endif - - - <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 has a <code>type</code> determined by this <code>FeatureTyping</code>.</p> + + + + <p>The Redefinitions with a certain Feature as the <code>redefinedFeature</code>.</p> - - - - - - <p>The <code>Type</code> that is being applied by this <code>FeatureTyping</code>.</p> - + + + + + + + + <p>The <code>TypeFeaturings</code> for which a certain <code>Type</code> is the <code>featuringType</code>.</p> - - - - - - <p>A <code>typedFeature</code> that is also the <code>owningRelatedElement</code> of this <code>FeatureTyping</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>A <code>Type</code> that has the <code>multiplicity</code> as an <code>ownedMember</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>subsettedFeature</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 Redefinitions with a certain Feature as the <code>redefiningFeature</code>.</p> + + + @@ -6098,101 +6038,119 @@ endif - - - <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 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><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>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> + + + <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 - 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) + 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>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>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 - crossingFeature.isEnd and -crossingFeature.owningType<>null and -crossingFeature.owningType.endFeature ->size() > 1 + 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>The chained <code>Feature</code> that is cross subset by the <code>crossingFeature</code> of this <code>CrossSubsetting</code>.</p> + + + <p>If the <code>redefinedFeature</code> of a <code>Redefinition</code> has <code>isEnd = true</code> and the <code>owningType</code> of the <code>redefiningFeature</code> is an <code>Association</code> or <code>Connector</code>, then the <code>redefiningFeature</code> must have <code>isEnd = true</code>.</p> + + + OCL2.0 + redefinedFeature.isEnd and +redefiningFeature.owningType <> null and +(redefiningFeature.owningType.oclIsKindOf(Association) or + redefiningFeature.owningType.oclIsKindOf(Connector)) implies + redefiningFeature.isEnd + + + + + + <p>The <code>Feature</code> that is redefining the <code>redefinedFeature</code> of this <code>Redefinition</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 <code>Feature</code> that is redefined by the <code>redefiningFeature</code> of this <code>Redefinition</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 FeatureTyping relating this Type to a Feature.</p> - - + + - - - - <p>The Subsettings with a certain Feature as the <code>subsettingFeature</code>.</p> + + + + <p>The Feature that owns this Redefinition relationship, which must also be its <code>redefiningFeature</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 <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> - - - - - @@ -6202,7987 +6160,7634 @@ crossingFeature.owningType.endFeature ->size() > 1 - - - <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>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>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>featuringType</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>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> - -<p>The <code>relatedElements</code> of a <code>Relationship</code> are divided into <code>source</code> and <code>target</code> <code>Elements</code>. The <code>Relationship</code> is considered to be directed from the <code>source</code> to the <code>target</code> <code>Elements</code>. An undirected <code>Relationship</code> may have either all <code>source</code> or all <code>target</code> <code>Elements</code>.</p> - -<p>A &quot;relationship <code>Element</code>&quot; in the abstract syntax is generically any <code>Element</code> that is an instance of either <code>Relationship</code> or a direct or indirect specialization of <code>Relationship</code>. Any other kind of <code>Element</code> is a &quot;non-relationship <code>Element</code>&quot;. It is a convention of that non-relationship <code>Elements</code> are <em>only</em> related via reified relationship <code>Elements</code>. Any meta-associations directly between non-relationship <code>Elements</code> must be derived from underlying reified <code>Relationship</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>relatedElements</code> of a <code>Relationship</code> consist of all of its <code>source</code> <code>Elements</code> followed by all of its <code>target</code> <code>Elements</code>.</p> - - - OCL2.0 - relatedElement = source->union(target) - - - - - - <p>The Elements that are related by this Relationship, derived as the union of the <code>source</code> and <code>target</code> Elements of the Relationship.</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>relatedElements</code> to which this Relationship is considered to be directed.</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>relatedElements</c ode> from which this Relationship is considered to be directed.</p> + + + + + <p>The Subsettings with a certain Feature as the <code>subsettingFeature</code>.</p> - - - - - - <p>The <tt>relatedElement</tt> of this Relationship that owns the Relationship, if any.</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 <tt>relatedElements</tt> of this Relationship that are owned by the Relationship.</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>Whether this Relationship was generated by tooling to meet semantic rules, rather than being directly created by a modeler.</p> + + + <p>A <code>featureOfType</code> that is also the <code>owningRelatedElement</code> of this <code>TypeFeaturing</code>.</p> - - + + - - - <p>Return whether this Relationship has either an <code>owningRelatedElement</code> or <code>owningRelationship</code> that is a library element.</p> - - - - OCL2.0 - if owningRelatedElement <> null then owningRelatedElement.libraryNamespace() -else if owningRelationship <> null then owningRelationship.libraryNamespace() -else null endif endif - - - - - - - - - - <p>If the <code>owningRelationship</code> of the <code>Relationship</code> is null but its <code>owningRelatedElement</code> is non-null, construct the <code>path</code> using the position of the <code>Relationship</code> in the list of <code>ownedRelationships</code> of its <code>owningRelatedElement</code>. Otherwise, return the <code>path</code> of the <code>Relationship</code> as specified for an <code>Element</code> in general.</p> + + + + + <p>A <code>Type</code> that has the <code>multiplicity</code> as an <code>ownedMember</code>.</p> - - - OCL2.0 - if owningRelationship = null and owningRelatedElement <> null then - owningRelatedElement.path() + '/' + - owningRelatedElement.ownedRelationship->indexOf(self).toString() - -- A position index shall be converted to a decimal string representation - -- consisting of only decimal digits, with no sign, leading zeros or leading - -- or trailing whitespace. -else self.oclAsType(Element).path() -endif - - - - - - + + + - - - <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> - + + + + <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>ownedElements</code> of an <code>Element</code> are the <code>ownedRelatedElements</code> of its <code>ownedRelationships</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 - ownedElement = ownedRelationship.ownedRelatedElement + 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>owner</code> of an <code>Element</code> is the <code>owningRelatedElement</code> of its <code>owningRelationship</code>.</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 - owner = owningRelationship.owningRelatedElement + crossingFeature.isEnd and +crossingFeature.owningType<>null and +crossingFeature.owningType.endFeature ->size() > 1 - - - <p>If this <code>Element</code> does not have an <code>owningNamespace</code>, then its <code>qualifiedName</code> is null. If the <code>owningNamespace</code> of this Element is a root <code>Namespace</code>, then the <code>qualifiedName</code> of the <code>Element</code> is the escaped name of the <code>Element</code> (if any). If the <code>owningNamespace</code> is non-null but not a root <code>Namespace</code>, then the <code>qualifiedName</code> of this <code>Element</code> is constructed from the <code>qualifiedName</code> of the <code>owningNamespace</code> and the escaped name of the <code>Element</code>, unless the <code>qualifiedName</code> of the <code>owningNamespace</code> is null or the escaped name is null, in which case the <code>qualifiedName</code> of this <code>Element</code> is also null. Further, if the <code>owningNamespace</code> has other <code>ownedMembers</code> with the same non-null name as this <code>Element</code>, and this <code>Element</code> is not the first, then the <code>qualifiedName</code> of this <code>Element</code> is null.</p> + + + + <p>The chained <code>Feature</code> that is cross subset by the <code>crossingFeature</code> of this <code>CrossSubsetting</code>.</p> + - - OCL2.0 - qualifiedName = - if owningNamespace = null then null - else if name <> null and - owningNamespace.ownedMember-> - select(m | m.name = name).indexOf(self) <> 1 then null - else if owningNamespace.owner = null then escapedName() - else if owningNamespace.qualifiedName = null or - escapedName() = null then null - else owningNamespace.qualifiedName + '::' + escapedName() - endif endif endif endif - - - - - <p>The <code>documentation</code> of an <code>Element</code> is its <code>ownedElements</code> that are <code>Documentation</code>.</p> + + + + + + <p>The end <code>Feature</code> that owns this <code>CrossSubsetting</code> relationship and is also its </code>subsettingFeature</code>.</p> - - OCL2.0 - documentation = ownedElement->selectByKind(Documentation) - - - - - <p>The <code>ownedAnnotations</code> of an <code>Element</code> are its <code>ownedRelationships</code> that are <code>Annotations</code>, for which the <code>Element</code> is the <code>annotatedElement</code>.</p> + + + + + + + + <p>The FeatureTypings for which a certain Feature is the <code>typedFeature</code>.</p> + - - OCL2.0 - ownedAnnotation = ownedRelationship-> - selectByKind(Annotation)-> - select(a | a.annotatedElement = self) - - - - - <p>The <code>name</code> of an <code>Element</code> is given by the result of the <code>effectiveName()</code> operation.</p> + + + + + + + + <p>The Subsettings with a certain Feature as the <code>subsettedFeature</code>.</p> - - OCL2.0 - name = effectiveName() - - - - - <p>If an <code>Element</code> has any <code>ownedRelationships</code> for which <code>isImplied = true</code>, then the <code>Element</code> must also have <code>isImpliedIncluded = true</code>. (Note that an <code>Element</code> <em>can</em> have <code>isImplied = true</code> even if no <code>ownedRelationships</code> have <code>isImplied = true</code>, indicating the <code>Element</code> simply has no implied <code>Relationships</code>.</p> + + + + + + + + <p>The <code>ReferenceSubsetting</code> with a certain <code>Feature</code> as the <code>referencedFeature</code>.</p> - - OCL2.0 - ownedRelationship->exists(isImplied) implies isImpliedIncluded - - - - - <p>An <code>Element</code> <code>isLibraryElement</code> if <code>libraryNamespace()</code> is not null.</p> + + + + + + + + + <p>The <code>TypeFeaturings</code> for which a certain <code>Feature</code> is the <code>featureOfType</code>.</p> - - OCL2.0 - isLibraryElement = libraryNamespace() <> null + + + + + + + + + + <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><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>shortName</code> of an <code>Element</code> is given by the result of the <code>effectiveShortName()</code> operation.</p> + + + + <p>The <code>subsettedFeature</code> must be accessible by the <code>subsettingFeature</code>.</p> - + OCL2.0 - shortName = effectiveShortName() + subsettingFeature.canAccess(subsettedFeature) - - - <p>The <code>owningNamespace</code> of an <code>Element</code> is the <code>membershipOwningNamespace</code> of its <code>owningMembership</code> (if any).</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 - owningNamespace = - if owningMembership = null then null - else owningMembership.membershipOwningNamespace - endif + subsettedFeature.isUnique implies subsettingFeature.isUnique - - - <p>The <code>textualRepresentations</code> of an <code>Element</code> are its <code>ownedElements</code> that are <code>TextualRepresentations</code>.</p> + + + <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 - textualRepresentation = ownedElement->selectByKind(TextualRepresentation) + subsettedFeature.isConstant and subsettingFeature.isVariable implies + subsettingFeature.isConstant + - - - <p>The <code>owningRelationship</code> of this <code>Element</code>, if that <code>Relationship</code> is a <code>Membership</code>.</p> + + + + <p>The <code>Feature</code> that is subsetted by the <code>subsettingFeature</code> of this <code>Subsetting</code>.</p> - - + + - - - <p>The Relationship for which this Element is an <tt>ownedRelatedElement</tt>, if any.</p> + + + <p>The <code>Feature</code> that is a subset of the <code>subsettedFeature</code> of this <code>Subsetting</code>.</p> - - + + - - - <p>The <code>Namespace</code> that owns this <code>Element</code>, which is the <code>membershipOwningNamespace</code> of the <code>owningMembership</code> of this <code>Element</code>, if any.</p> + + + <p>A <code>subsettingFeature</code> that is also the <code>owningRelatedElement</code> of this <code>Subsetting</code>.</p> + - - + + - - - <p>The globally unique identifier for this Element. This is intended to be set by tooling, and it must not change during the lifetime of the Element.</p> + + + + + + + <p>A Type that has an EndFeatureMembership in which the <code>endFeature</code> is a <code>memberFeature</code>.</p> - - - - - <p>The Relationships for which this Element is the <tt>owningRelatedElement</tt>.</p> + + + + + + + + <p>The Conjugation corresponding to the <code>conjugatedType</code>.</p> - - - - - - <p>The owner of this Element, derived as the <code>owningRelatedElement</code> of the <code>owningRelationship</code> of this Element, if any.</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>The Elements owned by this Element, derived as the <tt>ownedRelatedElements</tt> of the <tt>ownedRelationships</tt> of this Element.</p> + + + <p><code>Type</code> asserted to be disjoint with the <code>typeDisjoined</code>.</p> - - + + - - - <p>The Documentation owned by this Element.</p> + + + <p>A <code>typeDisjoined</code> that is also an <code>owningRelatedElement</code>.</p> - - + + - - - <p>The <code>ownedRelationships</code> of this <code>Element</code> that are <code>Annotations</code>, for which this <code>Element</code> is the <code>annotatedElement</code>.</code> + + + + <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> - - - - - - <p>The <code>TextualRepresentations</code> that annotate this <code>Element</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>Various alternative identifiers for this Element. Generally, these will be set by tools.</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>An optional alternative name for the <code>Element</code> that is intended to be shorter or in some way more succinct than its primary <code>name</code>. It may act as a modeler-specified identifier for the <code>Element</code>, though it is then the responsibility of the modeler to maintain the uniqueness of this identifier within a model or relative to some other context.</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 declared name of this <code>Element</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>. +<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> - - - - - - - <p>The short name to be used for this <code>Element</code> during name resolution within its <code>owningNamespace</code>. This is derived using the <code>effectiveShortName()</code> operation. By default, it is the same as the <code>declaredShortName</code>, but this is overridden for certain kinds of <code>Elements</code> to compute a <code>shortName</code> even when the <code>declaredName</code> is null.</p> + + OCL2.0 + if owningNamespace <> null and owningNamespace.oclIsKindOf(Feature) then + featuringType = + owningNamespace.oclAsType(Feature).featuringType +else + featuringType->isEmpty() +endif + + + + + <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>The name to be used for this <code>Element</code> during name resolution within its <code>owningNamespace</code>. This is derived using the <code>effectiveName()</code> operation. By default, it is the same as the <code>declaredName</code>, but this is overridden for certain kinds of <code>Elements</code> to compute a <code>name</code> even when the <code>declaredName</code> is null.</p> + + OCL2.0 + specializesFromLibrary('Base::naturals') + + + + + + + + <p>A Type with a certain <code>output</code>.</p> - - - + + + + + + + + <p>The Disjoinings that identify this Type as their <code>typeDisjoined</code>.</p> + + + + + + + + + + <p>The Types that include this one among their <code>unioningTypes</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>The full ownership-qualified name of this <code>Element</code>, represented in a form that is valid according to the KerML textual concrete syntax for qualified names (including use of unrestricted name notation and escaped characters, as necessary). The <code>qualifiedName</code> is null if this <code>Element</code> has no <code>owningNamespace</code> or if there is not a complete ownership chain of named <code>Namespaces</code> from a root <code>Namespace</code> to this <code>Element</code>. If the <code>owningNamespace</code> has other <code>Elements</code> with the same name as this one, then the <code>qualifiedName</code> is null for all such <code>Elements</code> other than the first.</p> + + + <p><code>Type</code> that partly determines interpretations of <code>typeUnioned</code>, as described in <code>Type::unioningType</code>.</p> + - - - + + - - - <p>Whether all necessary implied Relationships have been included in the <code>ownedRelationships</code> of this Element. This property may be true, even if there are not actually any <code>ownedRelationships</code> with <code>isImplied = true</code>, meaning that no such Relationships are actually implied for this Element. However, if it is false, then <code>ownedRelationships</code> may <em>not</em> contain any implied Relationships. That is, either <em>all</em> required implied Relationships must be included, or none of them.</p> + + + + + + <p>The Types that include this one among their <code>intersectingTypes</code>.</p> - - + + + + + + + + <p>The Disjoinings that identify this Type as their <code>disjoiningType</code>.</p> + + + + + + + + + + + <p>The Specializations with a certain <code>specific</code> Type.</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>Whether this Element is contained in the ownership tree of a library model.</p> + + + <p><code>Type</code> that partly determines interpretations of <code>typeIntersected</code>, as described in <code>Type::intersectingType</code>.</p> + - + + - - - <p>Return <code>name</code>, if that is not null, otherwise the <code>shortName</code>, if that is not null, otherwise null. If the returned value is non-null, it is returned as-is if it has the form of a basic name, or, otherwise, represented as a restricted name according to the lexical structure of the KerML textual notation (i.e., surrounded by single quote characters and with special characters escaped).</p> + + + + + <p>The Intersectings that identify this Type as their <code>intersectingType</code>.</p> - - - - - - - - - <p>Return an effective <code>shortName</code> for this <code>Element</code>. By default this is the same as its <code>declaredShortName</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> + - - - OCL2.0 - declaredShortName - - - - - - - - - - - <p>Return an effective <code>name</code> for this <code>Element</code>. By default this is the same as its <code>declaredName</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> + - - - OCL2.0 - declaredName - - - - - - - - - - - <p>By default, return the library Namespace of the <code>owningRelationship</code> of this Element, if it has one.</p> - - - - OCL2.0 - if owningRelationship <> null then owningRelationship.libraryNamespace() -else null endif - - - - - - - - - - <p>Return a unique description of the location of this <code>Element</code> in the containment structure rooted in a root <code>Namespace</code>. If the <code>Element</code> has a non-null <code>qualifiedName</code>, then return that. Otherwise, if it has an <code>owningRelationship</code>, then return the string constructed by appending to the <code>path</code> of it's <code>owningRelationship</code> the character <code>/</code> followed by the string representation of its position in the list of <code>ownedRelatedElements</code> of the <code>owningRelationship</code> (indexed starting at 1). Otherwise, return the empty string.</p> - -<p>(Note that this operation is overridden for <code>Relationships</code> to use <code>owningRelatedElement</code> when appropriate.)</p> + + + + <p>Values of the <code>Feature</code> on each instance of its domain are determined internally to that instance and used externally.</p> + - - - OCL2.0 - if qualifiedName <> null then qualifiedName -else if owningRelationship <> null then - owningRelationship.path() + '/' + - owningRelationship.ownedRelatedElement->indexOf(self).toString() - -- A position index shall be converted to a decimal string representation - -- consisting of only decimal digits, with no sign, leading zeros or leading - -- or trailing whitespace. -else '' -endif endif - - - - - - - - - - - - - - - - - - + - - - - - <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>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>Element</code> or <code>Elements</code> dependent on the <code>supplier</code> <code>Elements</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>Element</code> or <code>Elements</code> on which the <code>client</code> <code>Elements</code> depend in some respect.</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 <code>Dependencies</code> that have a certain <code>supplier</code> <code>Element</code>.</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 <code>Dependencies</code> that have a certain <code>client</code> <code>Element</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>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 + 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> - + OCL2.0 - annotatedElement = - if annotation->notEmpty() then annotation.annotatedElement - else Sequence{owningNamespace} endif + output = feature->select(f | + let direction: FeatureDirectionKind = directionOf(f) in + direction = FeatureDirectionKind::out or + direction = FeatureDirectionKind::inout) - - - <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> + + + <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> - + OCL2.0 - ownedAnnotatingRelationship = ownedRelationship-> - selectByKind(Annotation)-> - select(a | a.annotatedElement <> self) + input = feature->select(f | + let direction: FeatureDirectionKind = directionOf(f) in + direction = FeatureDirectionKind::_'in' or + direction = FeatureDirectionKind::inout) - - - <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> + + + <p>The <code>inheritedMemberships<code> of a <code>Type</code> are determined by the <code>inheritedMemberships()</code> operation.</p> - + OCL2.0 - annotation = - if owningAnnotatingRelationship = null then ownedAnnotatingRelationship - else owningAnnotatingRelationship->prepend(owningAnnotatingRelationship) - endif + inheritedMembership = inheritedMemberships(Set{}, Set{}, false) - - - - <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>A <code>Type</code> must directly or indirectly specialize <code><em>Base::Anything</em></code> from the Kernel Semantic Library.</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> + + 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> - - - - - - <p>The <code>owningRelationship</code> of this <code>AnnotatingRelationship</code>, if it is an <code>Annotation</code></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>. - - - - - - <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 + 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> owned by a direct or indirect supertype of this <code>Type</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> - + + OCL2.0 + featureMembership = ownedFeatureMembership-> + union(inheritedMembership-> + selectByKind(FeatureMembership)-> + select(mem | self.specializes(mem.owningType))) + + + + + <p>The <code>ownedFeatures</code> of a <code>Type</code> are the <code>ownedMemberFeatures</code> of its <code>ownedFeatureMemberships</code>. - - - - - - <p>The textual representation of the <code>representedElement</code> in the given <code>language</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> - - - - - - - - - - <p>The Annotations associated with a certain <code>annotatedElement</code>.</p> + + English + differencingType = ownedDifferencing.differencingType + + + + + <p>A <code>Type</code> cannot be one of its own <code>intersectingTypes</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> + + English + intersectingType->excludes(self) + + + + + <p>A <code>Type</code> cannot be one of its own <code>differencingTypes</code>.</p> - - - - - - - <p>The annotation text for the <code>Comment</code>.</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> - - - - - - - - <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> - + + OCL2.0 + unioningType = ownedUnioning.unioningType + + + + + <p>A <code>Type</code> cannot be one of its own <code>unioningTypes</code>.</p> - - - - - - - - <p>The AnnotatingElements that have a certain Element as their <code>annotatedElement</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> - - - - - - - <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> + + OCL2.0 + intersectingType = ownedIntersecting.intersectingType + + + + + A <code>Type</code> must have at most one owned <code>Conjugation</code> <code>Relationship</code>. - + OCL2.0 - (owningAnnotatedElement <> null) = (ownedAnnotatingElement <> null) + ownedRelationship->selectByKind(Conjugation)->size() <= 1 - - - <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>A <code>Type</code> may have at most one <code>ownedMember</code> that is a <code>Multiplicity</code>.</p> - + OCL2.0 - ownedAnnotatingElement <> null xor owningAnnotatingElement <> null + ownedMember->selectByKind(Multiplicity)->size() <= 1 - - - <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>The <code>endFeatures</code> of a <code>Type</code> are all its <code>features</code> for which <code>isEnd = true</code>.</p> - + OCL2.0 - ownedAnnotatingElement = - let ownedAnnotatingElements : Sequence(AnnotatingElement) = - ownedRelatedElement->selectByKind(AnnotatingElement) in - if ownedAnnotatingElements->isEmpty() then null - else ownedAnnotatingElements->first() - endif + endFeature = feature->select(isEnd) - - - <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>ownedDisjoinings</code> of a <code>Type</code> are the <code>ownedRelationships</code> that are <code>Disjoinings</code>.</p> - + OCL2.0 - annotatingElement = - if ownedAnnotatingElement <> null then ownedAnnotatingElement - else owningAnnotatingElement - endif + ownedDisjoining = + ownedRelationship->selectByKind(Disjoining) - - - - <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>ownedUnionings</code> of a <code>Type</code> are the <code>ownedRelationships</code> that are <code>Unionings</code>.</p> - - - - - - <p>The <code>Element</code> that is annotated by the <code>annotatingElement</code> of this Annotation.</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 <code>annotatedElement</code> of this <code>Annotation</code>, when it is also the <code>owningRelatedElement</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>The <code>annotatingElement</code> of this <code>Annotation</code>, when it is the <code>owningRelatedElement</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>annotatingElement</code> of this <code>Annotation</code>, when it is an <code>ownedRelatedElement</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>The Membership with a certain Element as its <code>memberElement</code>.</p> + + OCL2.0 + inheritedFeature = inheritedMemberships-> + selectByKind(FeatureMembership).memberFeature + + + + + A <code>Type</code> must not have exactly one <code>ownedUnioning</code>. - - - - - - - <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 + ownedUnioning->size() <> 1 + + + + + A <code>Type</code> must not have exactly one <code>ownedIntersecting</code>. - + OCL2.0 - memberElementId = memberElement.elementId + ownedIntersecting->size() <> 1 - - - - <p>The <code>elementId</code> of the <code>memberElement</code>.</p> + + + A <code>Type</code> must not have exactly one <code>ownedDifferencing</code>. - + + OCL2.0 + ownedDifferencing->size() <> 1 + + + + + + <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>Namespace</code> of which the <code>memberElement</code> becomes a <code>member</code> due to this <code>Membership</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 short name of the <code>memberElement</code> relative to the <code>membershipOwningNamespace</code>.</p> + + + <p>The <code>ownedMemberFeatures</code> of the <code>featureMemberships</code> of this <code>Type</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>ownedMemberFeatures</code> of the <code>ownedFeatureMemberships</code> of this <code>Type</code>.</p> - - + + - - - <p>The name of the <code>memberElement</code> relative to the <code>membershipOwningNamespace</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>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>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>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>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 - 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>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>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>All <code>features</code> of this <code>Type</code> with <code>isEnd = true</code>.</p> + + + + + + + <p>All <code>endFeatures</code> of this <code>Type</code> that are <code>ownedFeatures</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>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> - - + + - - - <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> + + + <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 - if excluded->includes(importedNamespace) then Sequence{} -else importedNamespace.visibleMemberships(excluded, isRecursive, isImportAll) - - - - - - - - - - - - - - - - <p>The Namespace with a certain <code>importedMembership</code>.</p> - - - - - - - - - - - <p>A MembershipImport that has 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>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>Indicates whether this <code>Type</code> has an <code>ownedConjugator</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>All the <code>memberFeatures</code> of the <code>inheritedMemberships</code> of this <code>Type</code> that are <code>FeatureMemberships</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>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>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>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>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> - -<p>A <code>Namespace</code> can provide names for its <code>members</code> via the <code>memberNames</code> and <code>memberShortNames</code> specified by the <code>Memberships</code> in the <code>Namespace</code>. If a <code>Membership</code> specifies a <code>memberName</code> and/or <code>memberShortName</code>, then those are names of the corresponding <code>memberElement</code> relative to the <code>Namespace</code>. For an <code>OwningMembership</code>, the <code>ownedMemberName</code> and <code>ownedMemberShortName</code> are given by the <code>Element</code> <code>name</code> and <code>shortName</code>. Note that the same <code>Element</code> may be the <code>memberElement</code> of multiple <code>Memberships</code> in a <code>Namespace</code> (though it may be owned at most once), each of which may define a separate alias for the <code>Element</code> relative to the <code>Namespace</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>All <code>memberships</code> of a <code>Namespace</code> must be distinguishable from each other.</p> - - - OCL2.0 - membership->forAll(m1 | - membership->forAll(m2 | - m1 <> m2 implies m1.isDistinguishableFrom(m2))) - - - - - <p>The <code>members</code> of a <code>Namespace</code> are the <code>memberElements</code> of all its <code>memberships</code>.</p> - - - OCL2.0 - member = membership.memberElement - - - - - <p>The <code>ownedMembers</code> of a <code>Namespace</code> are the <code>ownedMemberElements</code> of all its <code>ownedMemberships</code> that are <code>OwningMemberships</code>. - - - OCL2.0 - ownedMember = ownedMembership->selectByKind(OwningMembership).ownedMemberElement - - - - - <p>The <code>importedMemberships</code> of a <code>Namespace</code> are derived using the <code>importedMemberships()</code> operation, with no initially <code>excluded</code> <code>Namespaces</code>.</p> - - - OCL2.0 - importedMembership = importedMemberships(Set{}) - - - - - <p>The <code>ownedImports</code> of a <code>Namespace</code> are all its <code>ownedRelationships</code> that are <code>Imports</code>.</p> - - OCL2.0 - ownedImport = ownedRelationship->selectByKind(Import) - - - - - <p>The <code>ownedMemberships</code> of a <code>Namespace</code> are all its <code>ownedRelationships</code> that are <code>Memberships</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> + - - OCL2.0 - ownedMembership = ownedRelationship->selectByKind(Membership) - - - - - - <p>All <code>Memberships</code> in this <code>Namespace</code>, including (at least) the union of <code>ownedMemberships</code> and <code>importedMemberships</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>Namespace</code> that are <code>Imports</code>, for which the <code>Namespace</code> is the <code>importOwningNamespace</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 set of all member <code>Elements</code> of this <code>Namespace</code>, which are the <code>memberElements</code> of all <code>memberships</code> of the <code>Namespace</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 owned <code>members</code> of this <code>Namespace</code>, which are the <cpde><code>ownedMemberElements</code> of the <code>ownedMemberships</code> of the <code>Namespace</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>Namespace</code> that are <code>Memberships</code>, for which the <code>Namespace</code> is the <code>membershipOwningNamespace</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>The <code>Memberships</code> in this <code>Namespace</code> that result from the <code>ownedImports</code> of this <code>Namespace</code>.</p> + + + <p>The <code>features</code> of this <code>Type</code> that have a non-null <code>direction</code>.</p> - - + + - - - <p>Return the names of the given <code>element</code> as it is known in this <code>Namespace</code>.</p> + + + <p>The visible <code>Memberships</code> of a <code>Type</code> include <code>inheritedMemberships</code>.</p> - - + + OCL2.0 - let elementMemberships : Sequence(Membership) = - memberships->select(memberElement = element) in -memberships.memberShortName-> - union(memberships.memberName)-> - asSet() + 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>Returns this visibility of <code>mem</code> relative to this <code>Namespace</code>. If <code>mem</code> is an <code>importedMembership</code>, this is the <code>visibility</code> of its Import. Otherwise it is the <code>visibility</code> of the <code>Membership</code> itself.</p> + + + <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> - - + + OCL2.0 - if importedMembership->includes(mem) then - ownedImport-> - select(importedMemberships(Set{})->includes(mem)). - first().visibility -else if memberships->includes(mem) then - mem.visibility -else - VisibilityKind::private -endif + removeRedefinedFeatures( + inheritableMemberships(excludedNamespaces, excludedTypes, excludeImplied)) - - + + + + + + + + + + + + + + + - - - <p>If <code>includeAll = true</code>, then return all the <code>Memberships</code> of this <code>Namespace</code>. Otherwise, return only the publicly visible <code>Memberships</code> of this <code>Namespace</code>, including <code>ownedMemberships</code> that have a <code>visibility</code> of <code>public</code> and <code>Memberships</code> imported with a <code>visibility</code> of <code>public</code>. If <code>isRecursive = true</code>, also recursively include all visible <code>Memberships</code> of any <code>public</code> owned <code>Namespaces</code>, or, if <code>IncludeAll = true</code>, all <code>Memberships</code> of all owned <code>Namespaces</code>. When computing imported <code>Memberships</code>, ignore this <code>Namespace</code> and any <code>Namespaces</code> in the given <code>excluded</code> set.</p> - + + + <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 visibleMemberships : OrderedSet(Membership) = - if includeAll then membershipsOfVisibility(null, excluded) - else membershipsOfVisibility(VisibilityKind::public, excluded) - endif in -if not isRecursive then visibleMemberships -else visibleMemberships->union(ownedMember-> - selectAsKind(Namespace). - select(includeAll or owningMembership.visibility = VisibilityKind::public)-> - visibleMemberships(excluded->including(self), true, includeAll)) -endif + let excludingSelf : Set(Type) = excludedType->including(self) in +supertypes(excludeImplied)->reject(t | excludingSelf->includes(t)). + nonPrivateMemberships(excludedNamespaces, excludingSelf, excludeImplied) - - - + + + - - + + + - + - - - + + + - - - <p>Derive the imported <code>Memberships</code> of this <code>Namespace</code> as the <code>importedMembership</code> of all <code>ownedImports</code>, excluding those Imports whose <code>importOwningNamespace</code> is in the <code>excluded</code> set, and excluding <code>Memberships</code> that have distinguisibility collisions with each other or with any <code>ownedMembership</code>.</p> - + + + <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 - ownedImport.importedMemberships(excluded->including(self)) + 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>If <code>visibility</code> is not null, return the <code>Memberships</code> of this <code>Namespace</code> with the given <code>visibility</code>, including <code>ownedMemberships</code> with the given <code>visibility</code> and <code>Memberships</code> imported with the given <code>visibility</code>. If <code>visibility</code> is null, return all <code>ownedMemberships</code> and imported <code>Memberships</code> regardless of visibility. When computing imported <code>Memberships</code>, ignore this <code>Namespace</code> and any <code>Namespaces</code> in the given <code>excluded</code> set.</p> + + + <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 - ownedMembership-> - select(mem | visibility = null or mem.visibility = visibility)-> - union(ownedImport-> - select(imp | visibility = null or imp.visibility = visibility). - importedMemberships(excluded->including(self))) + 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>Resolve the given qualified name to the named <code>Membership</code> (if any), starting with this <code>Namespace</code> as the local scope. The qualified name string must conform to the concrete syntax of the KerML textual notation. According to the KerML name resolution rules every qualified name will resolve to either a single <code>Membership</code>, or to none.</p> - + + + <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 - let qualification : String = qualificationOf(qualifiedName) in -let name : String = unqualifiedNameOf(qualifiedName) in -if qualification = null then resolveLocal(name) -else if qualification = '$' then resolveGlobal(name) -else - let namespaceMembership : Membership = resolve(qualification) in - if namespaceMembership = null or - not namespaceMembership.memberElement.oclIsKindOf(Namespace) - then null - else - namespaceMembership.memberElement.oclAsType(Namespace). - resolveVisible(name) - endif -endif endif + if not membership.memberElement.oclIsType(Feature) then Set{} +else membership.memberElement.oclAsType(Feature).allRedefinedFeatures() +endif - - - - - - + + + + - - - <p>Resolve the given qualified name to the named <code>Membership</code> (if any) in the effective global <code>Namespace</code> that is the outermost naming scope. The qualified name string must conform to the concrete syntax of the KerML textual notation.</p> + + + <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> - - - English - No OCL + + + OCL2.0 + directionOfExcluding(f, Set{}) - - - - - - + + + + - - - <p>Resolve a simple <code>name</code> starting with this <code>Namespace</code> as the local scope, and continuing with containing outer scopes as necessary. However, if this <code>Namespace</code> is a root <code>Namespace</code>, then the resolution is done directly in global scope.</p> - + + + <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 - if owningNamespace = null then resolveGlobal(name) + let excludedSelf : Set(Type) = excluded->including(self) in +if feature.owningType = self then feature.direction else - let memberships : Membership = membership-> - select(memberShortName = name or memberName = name) in - if memberships->notEmpty() then memberships->first() - else owningNamespace.resolveLocal(name) - endif + 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>Resolve a simple name from the visible <code>Memberships</code> of this <code>Namespace</code>.</p> - + + + <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 - let memberships : Sequence(Membership) = - visibleMemberships(Set{}, false, false)-> - select(memberShortName = name or memberName = name) in -if memberships->isEmpty() then null -else memberships->first() + if isConjugated then Sequence{conjugator.originalType} +else if not excludeImplied then ownedSpecialization.general +else ownedSpecialization->reject(isImplied).general +endif endif - - + + - - - + + + - - - <p>Return a string with valid KerML syntax representing the qualification part of a given <code>qualifiedName</code>, that is, a qualified name with all the segment names of the given name except the last. If the given <code>qualifiedName</code> has only one segment, then return null.</p> + + + <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> + - - - English - No OCL + + + 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> + + + + OCL2.0 + if isConjugated then + ownedConjugator.originalType.specializes(supertype) +else + allSupertypes()->includes(supertype) +endif + + + + + - - - <p>Return the simple name that is the last segment name of the given <code>qualifiedName</code>. If this segment name has the form of a KerML unrestricted name, then "unescape" it by removing the surrounding single quotes and replacing all escape sequences with the specified character.</p> + + + <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> + - - - English - No OCL + + + OCL2.0 + let mem : Membership = resolveGlobal(libraryTypeName) in +mem <> null and mem.memberElement.oclIsKindOf(Type) and +specializes(mem.memberElement.oclAsType(Type)) - + - - + + - - - - - <p>A NamespaceImport that has a certain <code>importedNamespace</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> - - - - - <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>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 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 + specializes(otherType) + + + + + + + + + + <p>Return the owned or inherited <code>Multiplicities</code> for this <code>Type<./code>.</p> - - + + OCL2.0 - if ownedElement.qualifiedName <> null then - ownedElement.qualifiedName + '/owningMembership' -else self.oclAsType(Relationship).path() + 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><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><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>Indicates a <code>Membership</code> is not visible outside its owning <code>Namespace</code>.</p> + + + + <p><code>Type</code> with interpretations partly determined by <code>differencingType</code>, as described in <code>Type::differencingType</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><code>Type</code> that partly determines interpretations of <code>typeDifferenced</code>, as described in <code>Type::differencingType</code>.</p> - - - - <p>Indicates that a <code>Membership</code> is publicly visible outside its owning <code>Namespace</code>.</p> - - + + + - - - - <p>The Namespace the has a certain Element as a <code>member</code>.</p> + + + + <p>A Type that has an <code>inheritedMembership</code> with the <code>inheritedFeature</code> as its <code>memberFeature</code>.</p> - - + + - - - <p>A <code>MembershipImport</code> is an <code>Import</code> that imports its <code>importedMembership</code> into the <code>importOwningNamespace</code>. If <code>isRecursive = true</code> and the <code>memberElement</code> of the <code>importedMembership</code> is a <code>Namespace</code>, then the equivalent of a recursive <code>NamespaceImport</code> is also performed on that <code>Namespace</code>.</p> - - - - - <p>The <code>importedElement</code> of a <code>MembershipImport</code> is the <code>memberElement</code> of its <code>importedMembership</code>.</p> + + + + <p>The Specializations with a certain <code>general<code> Type.</p> - - OCL2.0 - importedElement = importedMembership.memberElement - - - - - - <p>The <code>Membership</code> to be imported.</p> - + + + + + + + + <p>A Type with a certain <code>input</code>.</p> - - - - - - <p>Returns at least the <code>importedMembership</code>. If <code>isRecursive = true</code> and the <code>memberElement</code> of the <code>importedMembership</code> is a <code>Namespace</code>, then <code>Memberships</code> are also recursively imported from that <code>Namespace</code>.</p> - + + + + + + + + <p>The Type that inherits the <code>inheritedMembership</code>.</p> - - - OCL2.0 - if not isRecursive or - not importedElement.oclIsKindOf(Namespace) or - excluded->includes(importedElement) -then Sequence{importedMembership} -else importedElement.oclAsType(Namespace). - visibleMemberships(excluded, true, importAll)-> - prepend(importedMembership) -endif - - - - - - - - - - - + + + - - - - <p>An Import with a certain <code>importedElement</code>.</p> + + + + <p>The Types that include this one among their <code>differencingTypes</code>.</p> - - + + - - - - <p>The Namespace that has a certain <code>membership</code>.</p> + + + + <p>A Type that owns or inherits the <code>featureMembership</code>.</p> - - + + - - - - <p>The <code>FlowUsages<code> that have a certain <code>Interaction</code> as their <code>flowDefinition</code>.</p> + + + + <p>The Conjugations with a certain Type as the <code>originalType</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> + + + + + + + + + + + + <p>The Unionings that identify all these Types as their <code>unioningType</code>.</p> - - OCL2.0 - specializesFromLibrary('Flows::successionFlows') - - - - + + + - - - <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><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>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> + + + + <p>The <code>Type</code> to be conjugated.</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> + + + + + + <p>The <code>Type</code> that is the result of applying <code>Conjugation</code> to the <code>originalType</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>conjugatedType</code> of this <code>Conjugation</code> that is also its <code>owningRelatedElement</code>.</p> + - - + + - - - - <p>The <code>FlowDefinitions<code> that have a certain Usage as <code>flowEnd</code>.</p> + + + + + <p>A Type that owns or inherits a FeatureMembership Relationship with the <code>feature</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>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>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> + + + + <p>The <code>Type</code> that owns this <code>FeatureMembership</code>.</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>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>The Activities that feature a certain ActionUsage.</p> + + + + <p>The Differencings that identify this Type as their <code>differencingType</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 - 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 Subclassifications with a certain <code>subclassifier</code>.</p> - - - + + + - - - <p><code>TriggerKind</code> enumerates the kinds of triggers that can be represented by a <code>TriggerInvocationExpression</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>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 more <code>general</code> Classifier in this <code>Subclassification</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 more specific <code>Classifier</code> in this <code>Subclassification</code>.</p> + - - - - - - <p>The <code>SendActionUsage</code> that has a certain <code>Expression<code> as its <code>receiverArgument</code>.</p> + + + + + + <p>The <code>Classifier</code> that owns this <code>Subclassification</code> relationship, which must also be its <code>subclassifier</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>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>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>ownedSubclassifications</code> of a <code>Classifier</code> are its <code>ownedSpecializations</code> that are <code>Subclassifications</code>.</p> - + OCL2.0 - specializesFromLibrary('Actions::Action') + ownedSubclassification = + ownedSpecialization->selectByKind(Subclassification) - - - <p> The <code>actions</code> of a <code>ActionDefinition</code> are those of its <code>usages</code> that are <code>ActionUsages</code>.</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 - action = usage->selectByKind(ActionUsage) + multiplicity <> null implies multiplicity.featuringType->isEmpty() - - - - - <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>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>ForLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>seqArgument</code>.</p> + + + + <p>The Subclassifications with a certain <code>superclassifier</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> - - + + - - - <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>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>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>owningType</code> of an <code>ObjectiveMembership</code> must be a <code>CaseDefinition</code> or <code>CaseUsage</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 + owningType.oclIsType(CaseDefinition) or +owningType.oclIsType(CaseUsage) - - - - <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>ownedObjectiveRequirement</code> of an <code>ObjectiveMembership</code> must be composite.</p> + + + OCL2.0 + ownedObjectiveRequirement.isComposite + + + + + + <p>The RequirementUsage that is the <code>ownedMemberFeature</code> of this RequirementUsage.</p> - - + + - - - - <p>The AcceptActionUsage that owns the <code>payloadParameter</code>.</p> + + + + <p>The CaseUsages that have a certain Usage as their <code>subjectParameter</code>.</p> - - - - - - - - <p>The AssignmentActionUsage that has a certain Expression as its <code>targetArgument</code>.</p> - - - - - - - - - <p>The <code>IfActionUsage</code> that has a certain <code>Expression</code> as its <code>ifArgument</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>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>A <code>DecisionNode</code> may have at most one incoming <code>Succession</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 - targetConnector->selectByKind(Succession)->size() <= 1 + objectiveRequirement = + let objectives: OrderedSet(RequirementUsage) = + featureMembership-> + selectByKind(ObjectiveMembership). + ownedRequirement in + if objectives->isEmpty() then null + else objectives->first().ownedObjectiveRequirement + endif - - - <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>A <code>CaseDefinition</code> must have at most one <code>featureMembership</code> that is a <code>ObjectiveMembership</code>.</p> - + OCL2.0 - sourceConnector->selectAsKind(Succession)-> - collect(connectorEnd->at(2))-> - forAll(targetMult | - multiplicityHasBounds(targetMult, 0, 1)) + featureMembership-> + selectByKind(ObjectiveMembership)-> + size() <= 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 <code>subjectParameter</code> of a <code>CaseDefinition</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p> - + OCL2.0 - specializesFromLibrary('Actions::Action::decisions') + subjectParameter = + let subjectMems : OrderedSet(SubjectMembership) = + featureMembership->selectByKind(SubjectMembership) in + if subjectMems->isEmpty() then null + else subjectMems->first().ownedSubjectParameter + endif - - - <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>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 - sourceConnector->selectByKind(Succession)-> - forAll(subsetsChain(self, - resolveGlobal('ControlPerformances::DecisionPerformance::outgoingHBLink'))) + actorParameter = featureMembership-> + selectByKind(ActorMembership). + ownedActorParameter - - - - - <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>CaseDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> - - OCL2.0 - isSubactionUsage() implies - specializesFromLibrary('Actions::Action::whileLoops') + + English + featureMembership->selectByKind(SubjectMembership)->size() <= 1 - - - <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>subjectParameter</code> of a <code>CaaseDefinition</code> must be its first <code>input</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 - + input->notEmpty() and input->first() = subjectParameter - - - <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>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::whileLoopActions') + specializesFromLibrary('Cases::Case') - - - <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 - whileArgument = - let parameter : Feature = inputParameter(1) in - if parameter <> null and parameter.oclIsKindOf(Expression) then - parameter.oclAsType(Expression) - else - null - endif + + + + <p>The <code>RequirementUsage</code> representing the objective of this <code>CaseDefinition</code>.</p> - - - - - <p>A <code>WhileLoopActionUsage</code> must have at least two owned <code>input</code> <code>parameters</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>parameter</code> of this <code>CaseDefinition</code> that represents its subject.</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>parameters</code> of this <code>CaseDefinition</code> that represent actors involved in the case.</p> - - + + - - - - <p>The AssignmentActionUsage that has a certain Expression as its <code>valueArgument</code>.</p> + + + + <p>The CaseDefinitions that have a certain RequirementUsage as their <code>objectiveRequirement</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>The ObjectMembership that owns a particular RequirementUsage as its <code>ownedObjectiveRequirement</code>.</p> + + + + + + + + + <p>The CaseUsages that have a certain PartUsage as an <code>actorParameter</code>.</p> + + + + + + + + + <p>The CaseDefinitions that have a certain Usage as their <code>subjectParameter</code>.</p> + + + + + + + + + + + + + + <p>A <code>CaseUsage</code> is a <code>Usage</code> of a <code>CaseDefinition</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> + + + <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 - referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(ActionUsage) + objectiveRequirement = + let objectives: OrderedSet(RequirementUsage) = + featureMembership-> + selectByKind(ObjectiveMembership). + ownedRequirement in + if objectives->isEmpty() then null + else objectives->first().ownedObjectiveRequirement + endif - - - <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 <code>CaseUsage</code> must have at most one <code>featureMembership</code> that is a <code>ObjectiveMembership</code>.</p> - + OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(PartDefinition) or - owningType.oclIsKindOf(PartUsage)) implies - specializesFromLibrary('Parts::Part::performedActions') + featureMembership-> + selectByKind(ObjectiveMembership)-> + size() <= 1 - - - - - <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>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> + + + <p>A <code>CaseUsage</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> - + OCL2.0 - targetConnector->selectByKind(Succession)->size() <= 1 + featureMembership-> + selectByKind(SubjectMembership)-> + 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> + + + <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 - specializesFromLibrary('Actions::Action::forks') + actorParameter = featureMembership-> + selectByKind(ActorMembership). + ownedActorParameter - - - - - <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> + + + <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 - specializesFromLibrary('Actions::assignmentActions') + subjectParameter = + let subjects : OrderedSet(SubjectMembership) = + featureMembership->selectByKind(SubjectMembership) in + if subjects->isEmpty() then null + else subjects->first().ownedSubjectParameter + endif - - - <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>subjectParameter</code> of a <code>CaseUsage</code> must be its first <code>input</code>.</p> - + OCL2.0 - let targetParameter : Feature = inputParameter(1) in -targetParameter <> null and -targetParameter.ownedFeature->notEmpty() and -targetParameter.ownedFeature->first(). - redefinesFromLibrary('AssignmentAction::target::startingAt') + input->notEmpty() and input->first() = subjectParameter - - - <p>The <code>valueExpression</code> of a <code>AssignmentActionUsage</code> is its second argument <code>Expression</code>.</p> + + + <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 - valueExpression = argument(2) + specializesFromLibrary('Cases::cases') - - - <p>The <code>targetArgument</code> of a <code>AssignmentActionUsage</code> is its first argument <code>Expression</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 - targetArgument = argument(1) + isComposite and owningType <> null and + (owningType.oclIsKindOf(CaseDefinition) or + owningType.oclIsKindOf(CaseUsage)) implies + specializesFromLibrary('Cases::Case::subcases') - - - <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>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>The CaseUsages being typed by a certain CaseDefinition.</p> + + + + + + + + + <p>The Usage in which the <code>nestedCase</code> is nested.</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 - isSubactionUsage() implies - specializesFromLibrary('Actions::Action::assignments') + specializesFromLibrary('Items::Item') - - - <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>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 - 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') + itemDefinition = occurrenceDefinition->selectByKind(Structure) - - - <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>An <code>ItemUsage</code> must directly or indirectly specialize the Systems Model Library <code>ItemUsage</code> <em><code>items</code></em>.</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) + specializesFromLibrary('Items::items') - - - <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>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 - 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 + isComposite and owningType <> null and +(owningType.oclIsKindOf(ItemDefinition) or + owningType.oclIsKindOf(ItemUsage)) implies + specializesFromLibrary('Items::Item::subitem') - - - <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 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>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 + specializesFromLibrary('Constraints::ConstraintCheck') - - - <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>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 - referent <> null implies referent.featureTarget.isVariable + assertedConstraint = + if referencedFeatureTarget() = null then self + else if referencedFeatureTarget().oclIsKindOf(ConstraintUsage) then + referencedFeatureTarget().oclAsType(ConstraintUsage) + else null + endif endif - - - - <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>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>Expression</code> whose result is to be assigned to the <code>referent</code> <code>Feature</code>.</p> + + OCL2.0 + if isNegated then + specializesFromLibrary('Constraints::negatedConstraintChecks') +else + specializesFromLibrary('Constraints::assertedConstraintChecks') +endif + + + + + <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>The <code>Feature</code> whose value is to be set.</p> + + OCL2.0 + referencedFeatureTarget() <> null implies + referencedFeatureTarget().oclIsKindOf(ConstraintUsage) + + + + + + + <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>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 <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>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> + + + <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 - specializesFromLibrary('Actions::actions') + 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 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 <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 - isComposite and owningType <> null and -(owningType.oclIsKindOf(PartDefinition) or - owningType.oclIsKindOf(PartUsage)) implies - specializesFromLibrary('Parts::Part::ownedActions') + specializesFromLibrary('Constraints::constraintChecks') - - - <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>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 - 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 + owningType <> null and +(owningType.oclIsKindOf(ItemDefinition) or + owningType.oclIsKindOf(ItemUsage)) implies + specializesFromLibrary('Items::Item::checkedConstraints') - - - - - <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 (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 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> + + + <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 inputParameters()->size() < i then null -else inputParameters()->at(i) + if owningFeatureMembership <> null and +owningFeatureMembership.oclIsKindOf(RequirementConstraintMembership) and +ownedReferenceSubsetting <> null then + ownedReferenceSubsetting.referencedFeature.featureTarget +else + self.oclAsType(OccurrenceUsage).namingFeature() 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>A <code>ConstraintUsage</code> is not model-level evaluable.</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 + false - - + + + - - - + + - - - <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>SendActionUsage</code> that has a certain <code>Expression</code> as its <code>senderArgument</code>.</p> - - - - - - - - - <p>The <code>WhileLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>untilArgument</code>.</p> - - - - - - - - - - - - - - <p>The <code>WhileLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>whileArgument</code>.</p> - - - - - - - - - <p>The <code>TerminateActionUsage</code> that has a certain <code>Expression</code> as its <code>terminatedOccurrenceArgument</code>.</p> + + + + <p>The AssertConstraintUsages that have a certain ConstraintUsage as their <tt>assertedConstraint</tt>.</p> - - + + - - - - <p>The AssignmentActionUsages that gave a certain <code>referent</code> Expression.</p> + + + + <p>The ConstraintUsages typed by a certain Predicate.</p> - - + + - - - - <p>The <code>LoopActionUsage</code> that has a certain <code>ActionUsage</code> as its <code>bodyAction</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>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('Parts::Part') + + + - - - - The <code>ForLoopActionUsage</code> that has a certain <code>ReferenceUsage</code> as its <code>loopVariable</code>. + + + + <p>The PartUsages typed by a certain PartDefinition.</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>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>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 <code>partDefinitions</code> of an <code>PartUsage</code> are those <code>itemDefinitions</code> that are <code>PartDefinitions</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')) + itemDefinition->selectByKind(PartDefinition) - - - <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>At least one of the <code>itemDefinitions</code> of a <code>PartUsage</code> must be a <code>PartDefinition</code>.</p> - + OCL2.0 - kind = TriggerKind::at implies - argument->notEmpty() and - argument->at(1).result.specializesFromLibrary('Time::TimeInstantValue') + partDefinition->notEmpty() - - - <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>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 - 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('Parts::parts') - - - - <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>SendActionUsage</code> that has a certain <code>Expression</code> as its <code>itemsArgument</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>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> - + OCL2.0 - thenAction = - let parameter : Feature = inputParameter(2) in - if parameter <> null and parameter.oclIsKindOf(ActionUsage) then - parameter.oclAsType(ActionUsage) - else - null - endif + isComposite and owningType <> null and +(owningType.oclIsKindOf(ItemDefinition) or + owningType.oclIsKindOf(ItemUsage)) implies + specializesFromLibrary('Items::Item::subparts') - - - <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>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 - isSubactionUsage() implies - specializesFromLibrary('Actions::Action::ifSubactions') + 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>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>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 - if elseAction = null then - specializesFromLibrary('Actions::ifThenActions') -else - specializesFromLibrary('Actions::ifThenElseActions') -endif + owningFeatureMembership <> null and +owningFeatureMembership.oclIsKindOf(StakeholderMembership) implies + specializesFromLibrary('Requirements::RequirementCheck::stakeholders') - - - <p>The <code>ifArgument</code> of an <code>ifActionUsage</code> is its first <code>parameter</code>, which must be an <code>Expression</code>.</p> - - - OCL2.0 - ifArgument = - let parameter : Feature = inputParameter(1) in - if parameter <> null and parameter.oclIsKindOf(Expression) then - parameter.oclAsType(Expression) - else - null + + + + <p>The <code>itemDefinitions</code> of this PartUsage that are PartDefinitions.</p> + + + + + + + + + <p>The AnalysisCaseUsages being typed by a certain AnalysisCaseDefinition.</p> + + + + + + + + + <p>The AnalysisCaseDefinitions that have a certain Expression as their <code>resultExpression</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 + resultExpression = + let results : OrderedSet(ResultExpressionMembership) = + featureMembersip-> + selectByKind(ResultExpressionMembership) in + if results->isEmpty() then null + else results->first().ownedResultExpression 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>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 - elseAction = - let parameter : Feature = inputParameter(3) in - if parameter <> null and parameter.oclIsKindOf(ActionUsage) then - parameter.oclAsType(ActionUsage) - else - null + 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>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> + + + OCL2.0 + resultExpression = + let results : OrderedSet(ResultExpressionMembership) = + featureMembersip-> + selectByKind(ResultExpressionMembership) in + if results->isEmpty() then null + else results->first().ownedResultExpression endif - - - <p>An <code>IfActionUsage</code> must have at least two owned <code>input</code> <code>parameters</code>.</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 - inputParameters()->size() >= 2 + specializesFromLibrary('AnalysisCases::analysisCases') - - - - <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>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>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> - + + OCL2.0 + isComposite and owningType <> null and + (owningType.oclIsKindOf(AnalysisCaseDefinition) or + owningType.oclIsKindOf(AnalysisCaseUsage)) implies + specializesFromLibrary('AnalysisCases::AnalysisCase::subAnalysisCases') + + + + + + <p>The <code>AnalysisCaseDefinition</code> that is the <code>definition</code> of this <code>AnalysisCaseUsage</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>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 AcceptActionUsage that has a certain Expression as its <code>receiverArgument</code>.</p> + + + + <p>The AnalysisCaseUsages that have a certain Expression as their <code>resultExpression</code>.</p> - - + + - - - - <p>The PerformActionUsages that have a certain ActionUsage as their <code>performedAction</code>.</p> + + + + <p>The TransitionFeatureMembership that owns a certain Step (if any).</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>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>JoinNode</code> may have at most one outgoing <code>Succession</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 - sourceConnector->selectByKind(Succession)->size() <= 1 + owningType <> null and +(owningType.oclIsKindOf(PartDefinition) or + owningType.oclIsKindOf(PartUsage)) implies + specializesFromLibrary('Parts::Part::exhibitedStates') - - - <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>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('Actions::Action::join') + 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>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>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>An <code>AcceptUsageAction</code> must have at least one 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>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 - inputParameters()->notEmpty() + 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>receiverArgument</code> of an <code>AcceptUsageAction</code> is its second argument <code>Expression</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 - receiverArgument = argument(2) + 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>payloadArgument</code> of an <code>AcceptUsageAction</code> is its first argument <code>Expression</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 - payloadArgument = argument(1) + specializesFromLibrary('Actions::transitionActions') - - - <p>The <code>payloadParameter</code> of an <code>AcceptActionUsage<code> is its first <code>parameter</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 - payloadParameter = - if parameter->isEmpty() then null - else parameter->first() endif + source = + let sourceFeature : Feature = sourceFeature() in + if sourceFeature = null then null + else sourceFeature.featureTarget.oclAsType(ActionUsage) - - - <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 <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 - not isTriggerAction() implies - specializesFromLibrary('Actions::acceptActions') + 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>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 <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 - isSubactionUsage() and not isTriggerAction() implies - specializesFromLibrary('Actions::Action::acceptSubactions') + triggerAction = ownedFeatureMembership-> + selectByKind(TransitionFeatureMembership)-> + select(kind = TransitionFeatureKind::trigger).transitionFeature-> + selectByKind(AcceptActionUsage) - - - <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>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 - isTriggerAction() implies - specializesFromLibrary('Actions::TransitionAction::accepter') + let successions : Sequence(Successions) = + ownedMember->selectByKind(Succession) in +successions->notEmpty() and +successions->at(1).targetFeature.featureTarget-> + forAll(oclIsKindOf(ActionUsage)) - - - <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 <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 - 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))) + guardExpression = ownedFeatureMembership-> + selectByKind(TransitionFeatureMembership)-> + select(kind = TransitionFeatureKind::trigger).transitionFeature-> + selectByKind(Expression) - - - - <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>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> + + + <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 - sourceConnector->selectAsKind(Succession)->size() <= 1 + triggerAction->forAll(specializesFromLibrary('Actions::TransitionAction::accepter') and +guardExpression->forAll(specializesFromLibrary('Actions::TransitionAction::guard') and +effectAction->forAll(specializesFromLibrary('Actions::TransitionAction::effect')) - - - <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>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 - targetConnector->selectByKind(Succession)-> - collect(connectorEnd->at(1))-> - forAll(sourceMult | - multiplicityHasBounds(sourceMult, 0, 1)) + triggerAction = ownedFeatureMembership-> + selectByKind(TransitionFeatureMembership)-> + select(kind = TransitionFeatureKind::trigger).transitionFeatures-> + selectByKind(AcceptActionUsage) - - - <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>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 - targetConnector->selectByKind(Succession)-> - forAll(subsetsChain(self, - resolveGlobal('ControlPerformances::MergePerformance::incomingHBLink'))) + succession.sourceFeature = source - - - <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>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 - specializesFromLibrary('Actions::Action::merges') + ownedMember->selectByKind(BindingConnector)->exists(b | + b.relatedFeatures->includes(source) and + b.relatedFeatures->includes(inputParameter(1))) - - - - - - <p>The ActionUsages being typed by a certain Behavior.</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>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 - seqArgument = argument(1) - + triggerAction->notEmpty() implies + let payloadParameter : Feature = inputParameter(2) in + payloadParameter <> null and + payloadParameter.subsetsChain(triggerAction->at(1), triggerPayloadParameter()) - - - <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>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 - isSubactionUsage() implies - specializesFromLibrary('Actions::Action::forLoops') + ownedMember->selectByKind(BindingConnector)->exists(b | + b.relatedFeatures->includes(succession) and + b.relatedFeatures->includes(resolveGlobal( + 'TransitionPerformances::TransitionPerformance::transitionLink'))) - - - <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 <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 - loopVariable <> null and -loopVariable.redefinesFromLibrary('Actions::ForLoopAction::var') + if triggerAction->isEmpty() then + inputParameters()->size() >= 1 +else + inputParameters()->size() >= 2 +endif + - - - <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>succession</code> of a <code>TransitionUsage</code> is its first <code>ownedMember</code> that is a <code>Succession</code>.</p> - + OCL2.0 - specializesFromLibrary('Actions::forLoopActions') + succession = ownedMember->selectByKind(Succession)->at(1) - - - <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> + + + <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 - ownedFeature->notEmpty() and -ownedFeature->at(1).oclIsKindOf(ReferenceUsage) - + source <> null and not source.oclIsKindOf(StateUsage) implies + triggerAction->isEmpty() - - - <p>A <code>ForLoopActionUsage</code> must have two owned <code>input</code> <code>parameters</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> - - 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 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>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 <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>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 <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 - senderArgument = argument(2) - - - - - <p>The <code>payloadArgument</code> of a <code>SendActionUsage</code> is its first argument <code>Expression</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> - - 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 <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>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 - owningFeatureMembership <> null and -(owningFeatureMembership.oclIsKindOf(StateSubactionMembership) or - owningFeatureMembership.oclIsKindOf(TransitionFeatureMembership)) implies - payloadArgument <> null + kind = TransitionFeatureKind::trigger implies + transitionFeature.oclIsKindOf(AcceptActionUsage) - - - <p>The <code>receiverArgument</code> of a <code>SendActionUsage</code> is its third argument <code>Expression</code>.</p> + + + <p>The <code>owningType</code> of a <code>TransitionFeatureMembership</code> must be a <code>TransitionUsage</code>.</p> - + OCL2.0 - receiverArgument = argument(3) + owningType.oclIsKindOf(TransitionUsage) - - - <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>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 - isSubactionUsage() implies - specializesFromLibrary('Actions::Action::sendSubactions') + 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>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>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 - specializesFromLibrary('Actions::sendActions') + kind = TransitionFeatureKind::effect implies + transitionFeature.oclIsKindOf(ActionUsage) - - - - <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>Whether this <code>TransitionFeatureMembership </code> is for a <code>trigger</code>, <code>guard</code> or <code>effect</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>Step</code> that is the <code>ownedMemberFeature</code> of this <code>TransitionFeatureMembership</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 TransitionUsage that has a certain <tt>effectAction</tt>.</p> - - - + + + - - - - <p>The <code>IfActionUsage</code> that has a certain <code>ActionUsage</code> as its <code>thenAction</code>.</p> + + + + <p>The StateDefinitions with a certain <tt>exitAction</tt>.</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>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>All outgoing <code>Successions</code> from a <code>ControlNode</code> must have a source <code>multiplicity</code> of <code>1..1</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> - + OCL2.0 - sourceConnector->selectByKind(Succession)-> - collect(connectorEnd->at(1).multiplicity)-> - forAll(sourceMult | - multiplicityHasBounds(sourceMult, 1, 1)) + 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>owningType</code> of a <code>ControlNode</code> must be an <code>ActionDefinition</code> or <code>ActionUsage</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 - owningType <> null and -(owningType.oclIsKindOf(ActionDefinition) or - owningType.oclIsKindOf(ActionUsage)) + entryAction = + let entryMemberships : Sequence(StateSubactionMembership) = + ownedMembership-> + selectByKind(StateSubactionMembership)-> + select(kind = StateSubactionKind::entry) in + if entryMemberships->isEmpty() then null + else entryMemberships->at(1) + endif - - - <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>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 - targetConnector->selectByKind(Succession)-> - collect(connectorEnd->at(2).multiplicity)-> - forAll(targetMult | - multiplicityHasBounds(targetMult, 1, 1)) + isParallel implies + nestedAction.incomingTransition->isEmpty() and + nestedAction.outgoingTransition->isEmpty() - - - <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>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 - specializesFromLibrary('Action::Action::controls') + isSubstateUsage(false) implies + specializesFromLibrary('States::StateAction::exclusiveStates') - - - <p>A <code>ControlNode</code> must be composite.</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 - isComposite + exitAction = + let exitMemberships : Sequence(StateSubactionMembership) = + ownedMembership-> + selectByKind(StateSubactionMembership)-> + select(kind = StateSubactionKind::exit) in + if exitMemberships->isEmpty() then null + else exitMemberships->at(1) + endif - - - - <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>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 - 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>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 + 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 - 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 + ownedMembership-> + selectByKind(StateSubactionMembership)-> + isUnique(kind) - - - <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>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('Constraints::constraintChecks') + isSubstateUsage(true) implies + specializesFromLibrary('States::StateAction::substates') - - - <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 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 - owningType <> null and -(owningType.oclIsKindOf(ItemDefinition) or - owningType.oclIsKindOf(ItemUsage)) implies - specializesFromLibrary('Items::Item::checkedConstraints') + isComposite and owningType <> null and +(owningType.oclIsKindOf(PartDefinition) or + owningType.oclIsKindOf(PartUsage)) implies + specializesFromLibrary('Parts::Part::ownedStates') - - - - - <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>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 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>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> - - - 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> + + + + + + <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>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>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>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 - false + 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>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 TransitionUsage that is guarded by a certain Expression.</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 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 - if isNegated then - specializesFromLibrary('Constraints::negatedConstraintChecks') -else - specializesFromLibrary('Constraints::assertedConstraintChecks') -endif - - - - - <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>The StateUsages with a certain <tt>exitAction</tt>.</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> + + OCL2.0 - referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(ConstraintUsage) + owningType.oclIsKindOf(StateDefinition) or +owningType.oclIsKindOf(StateUsage) - - - - - <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>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>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>The StateUsages with a certain <tt>doAction</tt>.</p> + + + + + + + + + <p>The StateDefinitions featuring a certain StateUsage.</p> + + + + + + + + + <p>The TransitionUsage incoming to a certain target <tt>ActionUsage</tt>.</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>A <code>TransitionActionKind</code> indicates whether the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is a trigger, guard or effect.</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>Indicates that the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is a <code>triggerAction</code>.</p> - - OCL2.0 - specializesFromLibrary('Constraints::ConstraintCheck') - - - - + + + + <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>The ConstraintUsages typed by a certain Predicate.</p> + + + + <p>The StateUsages with a certain <tt>entryAction</tt>.</p> - - + + - - - - <p>The AssertConstraintUsages that have a certain ConstraintUsage as their <tt>assertedConstraint</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>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 Transition that owns a certain Succession.</p> + + + - - - - <p>The RequirementVerificationMembership that has a certain RequirementUsage as its <code>verifiedRequirement</code>.</p> + + + + <p>The StateSubactionMembership that is the owner of a certain ActionUsage (if any).</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>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>RequirementVerificationMembership</code> must have <code>kind = requirement</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 - kind = RequirementConstraintKind::requirement + specializesFromLibrary('States::StateAction') - - - <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>A <code>StateDefinition</code> must not have more than one owned <code>StateSubactionMembership</code> of each <code>kind</code>.</p> - + OCL2.0 - owningType.oclIsKindOf(RequirementUsage) and -owningType.owningFeatureMembership <> null and -owningType.owningFeatureMembership.oclIsKindOf(ObjectiveMembership) + ownedMembership-> + selectByKind(StateSubactionMembership)-> + isUnique(kind) - - - - <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>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> + + + <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 - verifiedRequirement = - if objectiveRequirement = null then OrderedSet{} - else - objectiveRequirement.featureMembership-> - selectByKind(RequirementVerificationMembership). - verifiedRequirement->asOrderedSet() - endif + state = action->selectByKind(StateUsage) - - - <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>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 - specializesFromLibrary('VerificationCases::VerificationCase') + 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>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>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 - verifiedRequirement = - if objectiveRequirement = null then OrderedSet{} - else - objectiveRequirement.featureMembership-> - selectByKind(RequirementVerificationMembership). - verifiedRequirement->asOrderedSet() + entryAction = + let entryMemberships : Sequence(StateSubactionMembership) = + ownedMembership-> + selectByKind(StateSubactionMembership)-> + select(kind = StateSubactionKind::entry) in + if entryMemberships->isEmpty() then null + else entryMemberships->at(1) 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>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 - specializesFromLibrary('VerificationCases::verificationCases') + isParallel implies + ownedAction.incomingTransition->isEmpty() and + ownedAction.outgoingTransition->isEmpty() - - - 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>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 - isComposite and owningType <> null and - (owningType.oclIsKindOf(VerificationCaseDefinition) or - owningType.oclIsKindOf(VerificationCaseUsage)) implies - specializesFromLibrary('VerificationCases::VerificationCase::subVerificationCases') + 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>VerificationCase</code> that is the <code>definition</code> of this <code>VerificationCaseUsage</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>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>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 VerificationUsages that are defined by a certain <code>verificationCaseDefinition</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 RequirementVerificationMembership that owns a certain RequirementUsage as its <code>ownedRequirement</code>.</p> + + + + <p>The TransitionUsage that is triggered by a certain AcceptActionUsage.</p> - - + + - - - - <p>The VerificationCaseUsages that verify a certain <code>verifiedRequirement</code>.</p> + + + + <p>The StateDefinitions with a certain <tt>entryAction</tt>.</p> - - + + - - - - <p>The VerificationCaseDefinitions that verify a certain <code>verifiedRequirement</code>.</p> + + + + <p>The StateDefinitions with a certain <tt>doAction</tt>.</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>A <code>CalculationDefinition</code> is an <coed>ActionDefinition</code> that also defines a <code>Function</code> producing a <code>result</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>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 - owningType.oclIsType(RequirementDefinition) or -owningType.oclIsType(RequiremenCaseRequirementDefinition) or -owningType.oclIsType(CaseDefinition) or -owningType.oclIsType(CaseUsage) - + specializesFromLibrary('Calculations::Calculation') - - - - <p>The <code>Usage</code< that is the <code>ownedMemberParameter</code> of this <code>SubjectMembership</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 + calculation = action->selectByKind(CalculationUsage) + + + + + + + <p>The <code>actions</code> of this <code>CalculationDefinition</code> that are <code>CalculationUsages</code>.</p> + + + - - - - <p>The AddressedConcernMembership that has a certain ConcernUsage as its <code>addressedConcern</code>.</p> - - - + + + + <p>The CalculationUsage being typed by a certain Function.</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>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>FramedConcernMembership</code> must have <code>kind = requirement</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 - kind = RequirementConstraintKind::requirement + specializesFromLibrary('Calculations::calculations') - - - - <p>The <code>kind</code> of an <code>FramedConcernMembership</code> must be <code>requirement</code>.</p> + + + 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>The <code>ConcernUsage</code> that is the <code>ownedConstraint</code> of this <code>FramedConcernMembership</code>.</p> + + + <p>A <code>CalculationUsage</code> is not model-level evaluable.</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> + + + OCL2.0 + false + + + + + + + + + + + + + + + <p>The CalculationDefinitions that feature a certain CalculationUsage.</p> - - - + + + - - - - <p>The RequirementDefinitions that have a certain Usage as their <code>subjectParameter</code>.</p> + + + + <p>The Usage in which the <code>nestedCalculation<code> is nested.</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 Definition that owns the <code>ownedCalculation</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 AttributeUsages that are typed by a certain DataType.</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>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>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>An <code>AttributeUsage</code> is always referential.</p> - + OCL2.0 - text = documentation.body + isReference - - - <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>All <code>features</code> of an <code>AttributeUsage</code> must be non-composite.</p> - + OCL2.0 - assumedConstraint = ownedFeatureMembership-> - selectByKind(RequirementConstraintMembership)-> - select(kind = RequirementConstraintKind::assumption). - ownedConstraint + feature->forAll(not isComposite) - - - <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>An <code>AttributeUsage</code> must directly or indirectly specialize <code><em>Base::dataValues</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - requiredConstraint = ownedFeatureMembership-> - selectByKind(RequirementConstraintMembership)-> - select(kind = RequirementConstraintKind::requirement). - ownedConstraint + specializesFromLibrary('Base::dataValues') - - - <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>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>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 - subjectParameter = - let subjects : OrderedSet(SubjectMembership) = - featureMembership->selectByKind(SubjectMembership) in - if subjects->isEmpty() then null - else subjects->first().ownedSubjectParameter - endif + feature->forAll(not isComposite) - - - <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>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> - + OCL2.0 - framedConcern = featureMembership-> - selectByKind(FramedConcernMembership). - ownedConcern + verifiedRequirement = + if objectiveRequirement = null then OrderedSet{} + else + objectiveRequirement.featureMembership-> + selectByKind(RequirementVerificationMembership). + verifiedRequirement->asOrderedSet() + endif - - - <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>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 - actorParameter = featureMembership-> - selectByKind(ActorMembership). - ownedActorParameter + specializesFromLibrary('VerificationCases::verificationCases') - - - <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> + + + 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 - stakeholderParameter = featureMembership-> - selectByKind(StakholderMembership). - ownedStakeholderParameter + isComposite and owningType <> null and + (owningType.oclIsKindOf(VerificationCaseDefinition) or + owningType.oclIsKindOf(VerificationCaseUsage)) implies + specializesFromLibrary('VerificationCases::VerificationCase::subVerificationCases') - - - <p>A <code>RequirementDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> + + + + <p>The <code>VerificationCase</code> that is the <code>definition</code> of this <code>VerificationCaseUsage</code>.</p> - - OCL2.0 - featureMembership-> - selectByKind(SubjectMembership)-> - size() <= 1 - - - - - <p>The <code>subjectParameter</code> of a <code>RequirementDefinition</code> must be its first <code>input</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>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 - input->notEmpty() and input->first() = subjectParameter + verifiedRequirement = + if objectiveRequirement = null then OrderedSet{} + else + objectiveRequirement.featureMembership-> + selectByKind(RequirementVerificationMembership). + verifiedRequirement->asOrderedSet() + endif - - - <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>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('Requirements::RequirementCheck') + specializesFromLibrary('VerificationCases::VerificationCase') - - - - <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>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 SubjectMembership that owns a particular Parameter as its <code>ownedSubjectParameter</code>.</p> + + + + <p>The RequirementVerificationMembership that owns a certain RequirementUsage as its <code>ownedRequirement</code>.</p> - - + + - - - - <p>The SatisfyRequirementUsages that have a certain Feature as their <tt>satisfyingFeature</tt>.</p> + + + + <p>The VerificationCaseDefinitions that verify a certain <code>verifiedRequirement</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> + + + + <p>The RequirementVerificationMembership that has a certain RequirementUsage as its <code>verifiedRequirement</code>.</p> - - OCL2.0 - specializesFromLibrary('Requirements::ConcernCheck') - - - + + + - - - - <p>The RequirementConstraintMembership that owns a certain ConstraintUsage as its <code>ownedConstraint</code>.</p> + + + + <p>The VerificationUsages that are defined by a certain <code>verificationCaseDefinition</code>.</p> - - + + - - - - <p>The RequirementConstraintMembership that has a certain ConstraintUsage as its <code>referencedConstraint</code>.</p> + + + + <p>The VerificationCaseUsages that verify a certain <code>verifiedRequirement</code>.</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>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>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>RequirementVerificationMembership</code> must have <code>kind = requirement</code>.</p> - + OCL2.0 - specializesFromLibrary('Requirements::concernChecks') + kind = RequirementConstraintKind::requirement - - - <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 <code>owningType</code> of a <code>RequirementVerificationMembership</code> must a <code>RequirementUsage</code> that is owned by an <code>ObjectiveMembership</code>.</p> - + OCL2.0 - owningFeatureMembership <> null and -owningFeatureMembership.oclIsKindOf(FramedConcernMembership) implies - specializesFromLibrary('Requirements::RequirementCheck::concerns') + owningType.oclIsKindOf(RequirementUsage) and +owningType.owningFeatureMembership <> null and +owningType.owningFeatureMembership.oclIsKindOf(ObjectiveMembership) - - - - <p>The ConcernDefinition that is the single type of this ConcernUsage.</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 RequirementUsage that has a certain ConstraintUsage as a <code>requiredConstraint</code> (if any).</p> + + + <p>The <code>kind</code> of a <code>RequirementVerificationMembership</code> must be <code>requirement</code>.</p> - - - - - - - - <p>The RequirementUsages that have a certain PartUsage as an <code>actorParameter</code>.</p> - - - - - - - - - - - - - - - <p>The RequirementDefinition that addresses a certain <code>addressedConcern</code>.</p> - - - - - - - - - <p>The RequirementUsages typed by a certain RequirementDefinition.</p> - - - - - - - - - <p>The RequirementUsage that addresses a certain <code>addressedConcern</code>.</p> - - - - - - - - - <p>The RequirementDefinition that has a certain ConstraintUsage as an <code>assumedConstraint</code> (if any).</p> - - - - - - - - - - - - - - - <p>TheStakehplderMembership that has a certain PartUsage as its <code>ownedStakeholderParameter</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 RequirementDefinitions that have a certain PartUsage as an <code>actorParameter</code>.</p> + + + + <p>The ConnectionDefinitions that have a certain Usage as an <code>connectionEnd</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 - owningType.oclIsKindOf(RequirementUsage) or -owningType.oclIsKindOf(RequirementDefinition) - - - - - - <p>The <code>PartUsage</code> specifying the stakeholder.</p> - - - - - - - - - <p>The AddressedConcernMembership that owns a certain ConcernUsage as its <code>ownedConcern</code>.</p> + + + + <p>The ConnectionUsages that have a certain AssociationStructure as their <code>connectionDefinition</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>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>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 - 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>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 <code>ConnectionDefinition</code> must directly or indirectly specialize the <code>ConnectionDefinition</code> <em><code>Connections::Connection</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 + specializesFromLibrary('Connections::Connection') - - - <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 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> - + OCL2.0 - referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(RequirementUsage) + ownedEndFeature->size() = 2 implies + specializesFromLibrary('Connections::BinaryConnection') - - - <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>ConnectionDefinition</code> must have <code>isSufficient = true</code>.</p> - + OCL2.0 - if isNegated then - specializesFromLibrary('Requirements::notSatisfiedRequirementChecks') -else - specializesFromLibrary('Requirements::satisfiedRequirementChecks') -endif + isSufficient - - - - - <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> that define the things related by the <code>ConnectionDefinition</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>A <code>ConnectionDefinition</code> always has <code>isSufficient = true</code>.</p> - - + + - - - - <p>The RequirementUsage that has a certain ConstraintUsage as an <cod>assumedConstraint</code> (if any).</p> - - - - + + + <p>A <code>SuccessionAsUsage</code> is both a <code>ConnectorAsUsage</code> and a <code>Succession</code>.<p> + + + - - - <p>A <code>RequirementUsage</code> is a <code>Usage</code> of a <code>RequirementDefinition</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 <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>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 - actorParameter = featureMembership-> - selectByKind(ActorMembership). - ownedActorParameter + specializesFromLibrary('Connections::connections') - - - <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>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 - assumedConstraint = ownedFeatureMembership-> - selectByKind(RequirementConstraintMembership)-> - select(kind = RequirementConstraintKind::assumption). - ownedConstraint + ownedEndFeature->size() = 2 implies + specializesFromLibrary('Connections::binaryConnections') - - - <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>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>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> - - 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>A <code>BindingConnectorAsUsage</code> is both a <code>BindingConnector</code> and a <code>ConnectorAsUsage</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>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 - stakeholderParameter = featureMembership-> - selectByKind(AStakholderMembership). - ownedStakeholderParameter + specializesFromLibrary('Metadata::MetadataItem') - - - <p>The <code>subjectParameter</code> of a <code>RequirementUsage</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</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 - subjectParameter = - let subjects : OrderedSet(SubjectMembership) = - featureMembership->selectByKind(SubjectMembership) in - if subjects->isEmpty() then null - else subjects->first().ownedSubjectParameter - endif + specializesFromLibrary('Metadata::metadataItems') - - - <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 <code>MetadataDefinition</code> that is the <code>definition</code> of this <code>MetadataUsage</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 - text = documentation.body + specializesFromLibrary('Flows::messages') - - - <p>A <code>RequirementDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</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 - featureMembership-> - selectByKind(SubjectMembership)-> - size() <= 1 + ownedEndFeatures->notEmpty() implies + specializesFromLibrary('Flows::flows') - - - <p>The <code>subjectParameter</code> of a <code>RequirementUsage</code> must be its first <code>input</code>.</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>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 - input->notEmpty() and input->first() = subjectParameter + specializesFromLibrary('Flows::MessageAction') - - - <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 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 - specializesFromLibrary('Requirements::requirementChecks') + flowEnd->size() = 2 implies + specializesFromLibrary('Flows::Message') - - - <p>A composite <code>RequirementUsage</code> whose <code>owningType</code> is a <code>RequirementDefinition</code> or <code>RequirementUsage</code> but is <em>not</em> owned via a <code>RequirementConstraintMembership</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 <code>FlowDefinition</code> may not have more than two <code>flowEnds</code>.</p> - + OCL2.0 - isComposite and owningType <> null and - (owningType.oclIsKindOf(RequirementDefinition) or - owningType.oclIsKindOf(RequirementUsage)) and - not owningFeatureMembership.oclIsKindOf(RequirementConstraintMembership) implies - specializesFromLibrary('Requirements::RequirementCheck::subrequirements') + flowEnd->size() <= 2 - - - <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>Usages</code> that define the things related by the <code>FlowDefinition</code>.</p> - + + + + + + + + <p>The <code>FlowDefinitions<code> that have a certain Usage as <code>flowEnd</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 - 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)) + specializesFromLibrary('Flows::successionFlows') - - - <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>The AllocationUsages that have a certain AllocationDefinition as their <code>allocationDefinition</code>.</p> - + + + + + + + + <p>The AllocationDefinitions that feature a certain <code>allocation</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> + + OCL2.0 - owningFeatureMembership <> null and -owningFeatureMembership.oclIsKindOf(RequirementVerificationMembership) implies - specializesFromLibrary('VerificationCases::VerificationCase::obj::requirementVerifications') + specializesFromLibrary('Allocations::allocations') - - - - <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>The <code>AllocationDefinitions</code> that are the types of this <code>AllocationUsage</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>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 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> + + 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> - - - - - - <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> + + OCL2.0 + specializesFromLibrary('Allocations::Allocation') + + + + + + <p>The <code>AllocationUsages</code> that refine the allocation mapping defined by this <code>AllocationDefinition</code>.</p> - - + + - - - <p>The <code>parameter</code> of this <code>RequirementUsage</code> that represents its subject.</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> - - - - - - <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> + + 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>parameters</code> of this <code>RequirementUsage</code> that represent actors involved in the requirement.</p> + + OCL2.0 + specializesFromLibrary('Views::Rendering') + + + + + + <p>The <code>usages</code> of a <code>RenderingDefinition</code> that are <code>RenderingUsages</code>.</p> - - + + - - - <p>The <code>parameters</code> of this <code>RequirementUsage</code> that represent stakeholders for the requirement.</p> + + + + + <p>The ViewDefinition that owns a certain <code>rendering</code>.</p> - - - + + + - - - - <p>The ConcernUsages that are typed by a certain <code>concernDefinition</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 RenderingUsages defined by a certain <code>renderingDefinition</code>.</p> - - + + - - - - <p>The RequirementDefinition that has a certain ConstraintUsage as a <code>requiredConstraint</code> (if any).</p> + + + + <p>The ViewDefinition that owns a certain <code>viewCondition</code>.</p> - - + + - - - - <p>The RequirementUsages that have a certain Usage as their <code>subjectParameter</code>.</p> + + + + <p>A ViewUsage exposing a certain <code>exposedElement</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>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>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 - 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>owningType</code> of a <code>RequirementConstraintMembership</code> must be a <code>RequirementDefinition</code> or a <code>RequirementUsage</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(RequirementDefinition) or -owningType.oclIsKindOf(RequirementUsage) + viewpointStakeholder = framedConcern.featureMemberhsip-> + selectByKind(StakeholderMembership). + ownedStakeholderParameter - - - <p>The <code>ownedConstraint</code> of a <code>RequirementConstraintMembership</code> must be composite.</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 - ownedConstraint.isComposite + specializesFromLibrary('Views::ViewpointCheck') - - - - <p>Whether the <code>RequirementConstraintMembership</code> is for an assumed or required <code>ConstraintUsage</code>.</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 <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 SatifyRequirementUsages that have a certain RequirementUsage as their <tt>satisfiedRequirement</tt>.</p> + + + + <p>The ViewUsages that have a certain <code>ViewDefinition</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>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>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 Definition that owns the <code>ownedCalculation</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> + + + <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('Calculations::calculations') + 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(CalculationDefinition) or - owningType.oclIsKindOf(CalculationUsage)) implies - specializesFromLibrary('Calculations::Calculation::subcalculations') +(owningType.oclIsKindOf(RenderingDefinition) or + owningType.oclIsKindOf(RenderingUsage)) implies + specializesFromLibrary('Views::Rendering::subrenderings') - - - - - <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>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 + 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>A <code>CalculationUsage</code> is not model-level evaluable.</p> + + + <p>The naming <code>Feature</code> of a <code>RenderingUsage</code> that is owned via a <code>ViewRenderingMembership</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 - false + if owningFeatureMembership <> null and + owningFeatureMembership.oclIsKindOf(ViewRenderingMembership) and + ownedReferenceSubsetting <> null then + ownedReferenceSubsetting.referencedFeature.featureTarget +else + self.oclAsType(OccurrenceUsage).namingFeature() +endif - - - - - - + + + - - - <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>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>CalculationDefinition</code> must directly or indirectly specialize the <code>CalculationDefinition</code> <em><code>Calculations::Calculation</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('Calculations::Calculation') + exposedElement = ownedImport->selectByKind(Expose). + importedMemberships(Set{}).memberElement-> + select(elm | includeAsExposed(elm))-> + asOrderedSet() - - - <p>The <code>calculations</code> of a <code>CalculationDefinition</code> are those of its <code>actions</code> that are <code>CalculationUsages</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 - calculation = action->selectByKind(CalculationUsage) + satisfiedViewpoint = ownedRequirement-> + selectByKind(ViewpointUsage)-> + select(isComposite) - - - - - <p>The <code>actions</code> of this <code>CalculationDefinition</code> that are <code>CalculationUsages</code>.</p> - - - - - - - - - <p>The CalculationUsage being typed by a certain Function.</p> - - - - - - - - - <p>The Usage in which the <code>nestedCalculation<code> is nested.</p> - - - - - - - - - <p>The CalculationDefinitions that feature a certain CalculationUsage.</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 CaseUsages that have a certain PartUsage as an <code>actorParameter</code>.</p> - - - - - - - - - <p>The CaseDefinitions that have a certain RequirementUsage as their <code>objectiveRequirement</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>viewConditions</code> of a <code>ViewUsage</code> are the <code>conditions</code> of its owned <code>ElementFilterMemberships</code>.</p> - + OCL2.0 - objectiveRequirement = - let objectives: OrderedSet(RequirementUsage) = - featureMembership-> - selectByKind(ObjectiveMembership). - ownedRequirement in - if objectives->isEmpty() then null - else objectives->first().ownedObjectiveRequirement - endif + viewCondition = ownedMembership-> + selectByKind(ElementFilterMembership). + condition - - - <p>A <code>CaseDefinition</code> must have at most one <code>featureMembership</code> that is a <code>ObjectiveMembership</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 - featureMembership-> - selectByKind(ObjectiveMembership)-> - size() <= 1 + viewRendering = + let renderings: OrderedSet(ViewRenderingMembership) = + featureMembership->selectByKind(ViewRenderingMembership) in + if renderings->isEmpty() then null + else renderings->first().referencedRendering + endif - - - <p>The <code>subjectParameter</code> of a <code>CaseDefinition</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p> + + + <p>A <code>ViewUsage</code> must have at most one <code>ViewRenderingMembership</code>.</p> - + OCL2.0 - subjectParameter = - let subjectMems : OrderedSet(SubjectMembership) = - featureMembership->selectByKind(SubjectMembership) in - if subjectMems->isEmpty() then null - else subjectMems->first().ownedSubjectParameter - endif + featureMembership-> + selectByKind(ViewRenderingMembership)-> + size() <= 1 - - - <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>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 - 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 + specializesFromLibrary('Views::views') - - - <p>The <code>subjectParameter</code> of a <code>CaaseDefinition</code> must be its first <code>input</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 - input->notEmpty() and input->first() = subjectParameter + owningType <> null and +(owningType.oclIsKindOf(ViewDefinition) or + owningType.oclIsKindOf(ViewUsage)) implies + specializesFromLibrary('Views::View::subviews') - - - <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>ViewDefinition</code> that is the <code>definition</code> of this <code>ViewUsage</code>.</p> - - OCL2.0 - specializesFromLibrary('Cases::Case') - - - - - - <p>The <code>RequirementUsage</code> representing the objective of this <code>CaseDefinition</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>parameter</code> of this <code>CaseDefinition</code> that represents its subject.</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>parameters</code> of this <code>CaseDefinition</code> that represent actors involved in the case.</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 Usage in which the <code>nestedCase</code> is nested.</p> + + + + <p>The ViewpointUsage that has a certain <code>viewpointStakeholder</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 ViewUsage that owns a certain <code>viewCondition</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 RenderingDefinitions that feature a certain <code>rendering</code>.</p> - - OCL2.0 - ownedObjectiveRequirement.isComposite - - - - - - <p>The RequirementUsage that is the <code>ownedMemberFeature</code> of this RequirementUsage.</p> - + + + + + + + + <p>The ViewDefinition that owns a certain <code>satisfiedViewpoint</code>.</p> - - - + + + - - - <p>A <code>CaseUsage</code> is a <code>Usage</code> of a <code>CaseDefinition</code>.</p> + + + <p>A <code>ViewpointUsage</code> is a <code>Usage</code> of a <code>ViewpointDefinition</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>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 - objectiveRequirement = - let objectives: OrderedSet(RequirementUsage) = - featureMembership-> - selectByKind(ObjectiveMembership). - ownedRequirement in - if objectives->isEmpty() then null - else objectives->first().ownedObjectiveRequirement - endif + viewpointStakeholder = framedConcern.featureMemberhsip-> + selectByKind(StakeholderMembership). + ownedStakeholderParameter - - - <p>A <code>CaseUsage</code> must have at most one <code>featureMembership</code> that is a <code>ObjectiveMembership</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 - featureMembership-> - selectByKind(ObjectiveMembership)-> - size() <= 1 + specializesFromLibrary('Views::viewpointChecks') - - - <p>A <code>CaseUsage</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</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 - featureMembership-> - selectByKind(SubjectMembership)-> - size() <= 1 + isComposite and owningType <> null and +(owningType.oclIsKindOf(ViewDefinition) or + owningType.oclIsKindOf(ViewUsage)) implies + specializesFromLibrary('Views::View::viewpointSatisfactions') - - - <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>ViewpointDefinition</code> that is the <code>definition</code> of this <code>ViewpointUsage<code>.</p> - - OCL2.0 - actorParameter = featureMembership-> - selectByKind(ActorMembership). - ownedActorParameter + + + + + + <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 ViewUsage that owns a certain <code>satisfiedViewpoint</code>.</p> + + + + + + + + + <p>The ViewDefinitions that feature a certain ViewUsage.</p> + + + + + + + + + + + + + + + <p>The ViewpointDefinition that has a certain <code>viewpointStakeholder</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 + view = usage->selectByKind(ViewUsage) - - - <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>satisfiedViewpoints</code> of a <code>ViewDefinition</code> are its <code>ownedRequirements</code> that are composite <code>ViewpointUsages</code>. - + OCL2.0 - subjectParameter = - let subjects : OrderedSet(SubjectMembership) = - featureMembership->selectByKind(SubjectMembership) in - if subjects->isEmpty() then null - else subjects->first().ownedSubjectParameter + 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> + + + OCL2.0 + viewRendering = + let renderings: OrderedSet(ViewRenderingMembership) = + featureMembership->selectByKind(ViewRenderingMembership) in + if renderings->isEmpty() then null + else renderings->first().referencedRendering endif - - - <p>The <code>subjectParameter</code> of a <code>CaseUsage</code> must be its first <code>input</code>.</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 - input->notEmpty() and input->first() = subjectParameter + viewCondition = ownedMembership-> + selectByKind(ElementFilterMembership). + condition - - - <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>A <code>ViewDefinition</code> must have at most one <code>ViewRenderingMembership</code>.</p> - + OCL2.0 - specializesFromLibrary('Cases::cases') + featureMembership-> + selectByKind(ViewRenderingMembership)-> + size() <= 1 - - - <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>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 - isComposite and owningType <> null and - (owningType.oclIsKindOf(CaseDefinition) or - owningType.oclIsKindOf(CaseUsage)) implies - specializesFromLibrary('Cases::Case::subcases') + specializesFromLibrary('Views::View') - - - - <p>The <code>RequirementUsage</code> representing the objective of this <code>CaseUsage</code>.</p> - + + + + <p>The <code>usages</code> of this <code>ViewDefinition</code> that are <code>ViewUsages</code>.</p> - - + + - - - <p>The CaseDefinition that is the type of this CaseUsage.</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>parameter</code> of this <code>CaseUsage</code> that represents its subject.</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>parameters</code> of this <code>CaseUsage</code> that represent actors involved in the case.</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 CaseUsages being typed by a certain CaseDefinition.</p> - - - - - - - - - <p>The CaseDefinitions that have a certain Usage as their <code>subjectParameter</code>.</p> - - - - - - - - - <p>The CaseUsages that have a certain Usage as their <code>subjectParameter</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 AnalysisCaseDefinitions that have a certain Expression as their <code>resultExpression</code>.</p> + + + + <p>The ViewUsage that owns a certain <code>rendering</code>.</p> - - + + - - - <p>An <code>AnalysisCaseUsage</code> is a <code>Usage</code> of an <code>AnalysisCaseDefinition</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 <code>resultExpression</code> of a <code>AnalysisCaseUsage</code> is the <code>ownedResultExpression</code> of its <code>ResultExpressionMembership</code>, if any.</p> + + + <p>An <code>Expose</code> always imports all <code>Elements</code>, regardless of visibility.</p> - + OCL2.0 - resultExpression = - let results : OrderedSet(ResultExpressionMembership) = - featureMembersip-> - selectByKind(ResultExpressionMembership) in - if results->isEmpty() then null - else results->first().ownedResultExpression - endif + isImportAll - - - <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 <code>importOwningNamespace</code> of an <code>Expose</code> must be a <code>ViewUsage</code>.</p> - + OCL2.0 - specializesFromLibrary('AnalysisCases::analysisCases') + importOwningNamespace.oclIsType(ViewUsage) - - - <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>An <code>Expose</code> always has <code>protected</code> visibility.</p> - + OCL2.0 - isComposite and owningType <> null and - (owningType.oclIsKindOf(AnalysisCaseDefinition) or - owningType.oclIsKindOf(AnalysisCaseUsage)) implies - specializesFromLibrary('AnalysisCases::AnalysisCase::subAnalysisCases') + visibility = VisibilityKind::protected - - - - <p>The <code>AnalysisCaseDefinition</code> that is the <code>definition</code> of this <code>AnalysisCaseUsage</code>.</p> + + + + <p>An <code>Expose</code> always has <code>protected</code> visibility.</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>Expose</code> always imports all <code>Elements</code>, regardless of visibility (<code>isImportAll = true</code>).</p> - - + + - - - - <p>The AnalysisCaseUsages that have a certain Expression as their <code>resultExpression</code>.</p> - - - - - - - - <p>An <code>AnalysisCaseDefinition</code> is a <code>CaseDefinition</code> for the case of carrying out an analysis.</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>resultExpression</code> of a <code>AnalysisCaseDefinition</code> is the <code>ownedResultExpression</code> of its <code>ResultExpressionMembership</code>, if any.</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 - resultExpression = - let results : OrderedSet(ResultExpressionMembership) = - featureMembersip-> - selectByKind(ResultExpressionMembership) in - if results->isEmpty() then null - else results->first().ownedResultExpression - endif + 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>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>owningType</code> of a <code>ViewRenderingMembership</code> must be a <code>ViewDefinition</code> or a <code>ViewUsage</code>.</p> - + OCL2.0 - specializesFromLibrary('AnalysisCases::AnalysisCase') + owningType.oclIsKindOf(ViewDefinition) or +owningType.oclIsKindOf(ViewUsage) - - - - <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 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 AnalysisCaseUsages being typed by a certain AnalysisCaseDefinition.</p> + + + + <p>The EnumerationDefinition that owns a certain <code>enumeratedValue</code>.</p> - - + + - - - - <p>The UseCaseUsage that includes a certain <code>includedUseCase</code>.</p> + + + + <p>The EnumerationUsages that are typed by a certain EnumerationDefinition.</p> - - + + - - - - <p>The UseCaseDefinition that includes a certain <code>includedUseCase</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>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>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>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>An <code>EnumerationDefinition</code> must be a variation.</p> - + OCL2.0 - includedUseCase = ownedUseCase-> - selectByKind(IncludeUseCaseUsage). - useCaseIncluded + isVariation - - - <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><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 - 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>An EnumerationDefinition is considered semantically to be a variation whose allowed variants are its <code>enumerationValues</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>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>receiverArgument</code>.</p> + + + + + + + + + <p>The <code>WhileLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>untilArgument</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>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>An <code>AcceptUsageAction</code> must have at least one 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 - owningType <> null and -(owningType.oclIsKindOf(UseCaseDefinition) or - owningType.oclIsKindOf(UseCaseUsage) implies - specializesFromLibrary('UseCases::UseCase::includedUseCases') + inputParameters()->notEmpty() - - - <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>receiverArgument</code> of an <code>AcceptUsageAction</code> is its second argument <code>Expression</code>.</p> - + OCL2.0 - referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(UseCaseUsage) + receiverArgument = argument(2) - - - - - <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 UseCaseUsages being typed by a certain UseCaseDefinition.</p> + + + <p>The <code>payloadArgument</code> of an <code>AcceptUsageAction</code> is its first argument <code>Expression</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 + payloadArgument = argument(1) + + + + + <p>The <code>payloadParameter</code> of an <code>AcceptActionUsage<code> is its first <code>parameter</code>.</p> - + OCL2.0 - includedUseCase = ownedUseCase-> - selectByKind(IncludeUseCaseUsage). - useCaseIncluded + payloadParameter = + if parameter->isEmpty() then null + else parameter->first() endif - - - <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>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('UseCases::useCases') + not isTriggerAction() implies + specializesFromLibrary('Actions::acceptActions') - - - <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 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> - + OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(UseCaseDefinition) or - owningType.oclIsKindOf(UseCaseUsage)) implies - specializesFromLibrary('UseCases::UseCase::subUseCases') + isSubactionUsage() and not isTriggerAction() implies + specializesFromLibrary('Actions::Action::acceptSubactions') - - - - <p>The <code>UseCaseDefinition</code> that is the <code>definition</code> of this <code>UseCaseUsage</code>.</p> + + + <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 + 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> + + + 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 <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 <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 IncludeUseCaseUsages that have a certain UseCaseUsage as their <code>includedUseCase</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 PartUsages typed by a certain PartDefinition.</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>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>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>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('Parts::Part') - - - - - - - <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> + + + <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 - itemDefinition->selectByKind(PartDefinition) + sourceConnector->selectByKind(Succession)-> + collect(connectorEnd->at(1).multiplicity)-> + forAll(sourceMult | + multiplicityHasBounds(sourceMult, 1, 1)) - - - <p>At least one of the <code>itemDefinitions</code> of a <code>PartUsage</code> must be a <code>PartDefinition</code>.</p> + + + <p>The <code>owningType</code> of a <code>ControlNode</code> must be an <code>ActionDefinition</code> or <code>ActionUsage</code>.</p> - + OCL2.0 - partDefinition->notEmpty() + owningType <> null and +(owningType.oclIsKindOf(ActionDefinition) or + owningType.oclIsKindOf(ActionUsage)) - - - <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>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 - specializesFromLibrary('Parts::parts') + targetConnector->selectByKind(Succession)-> + collect(connectorEnd->at(2).multiplicity)-> + forAll(targetMult | + multiplicityHasBounds(targetMult, 1, 1)) - - - <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>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 - isComposite and owningType <> null and -(owningType.oclIsKindOf(ItemDefinition) or - owningType.oclIsKindOf(ItemUsage)) implies - specializesFromLibrary('Items::Item::subparts') + specializesFromLibrary('Action::Action::controls') - - - <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>A <code>ControlNode</code> must be composite.</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') + isComposite - - - <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> + + + + <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 - owningFeatureMembership <> null and -owningFeatureMembership.oclIsKindOf(StakeholderMembership) implies - specializesFromLibrary('Requirements::RequirementCheck::stakeholders') - - - - - - <p>The <code>itemDefinitions</code> of this PartUsage that are PartDefinitions.</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 AcceptActionUsage that owns the <code>payloadParameter</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>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>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 <code>JoinNode</code> may have at most one outgoing <code>Succession</code>.</p> - + OCL2.0 - specializesFromLibrary('Connections::connections') + sourceConnector->selectByKind(Succession)->size() <= 1 - - - <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>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 - ownedEndFeature->size() = 2 implies - specializesFromLibrary('Connections::binaryConnections') + specializesFromLibrary('Actions::Action::join') - - - - - <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>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 ConnectionDefinitions that have a certain Usage as an <code>connectionEnd</code>.</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>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>ConnectionDefinition</code> must directly or indirectly specialize the <code>ConnectionDefinition</code> <em><code>Connections::Connection</code></em> from the Systems Model Library.</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('Connections::Connection') + specializesFromLibrary('Actions::assignmentActions') - - - <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 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 - ownedEndFeature->size() = 2 implies - specializesFromLibrary('Connections::BinaryConnection') + let targetParameter : Feature = inputParameter(1) in +targetParameter <> null and +targetParameter.ownedFeature->notEmpty() and +targetParameter.ownedFeature->first(). + redefinesFromLibrary('AssignmentAction::target::startingAt') - - - <p>A <code>ConnectionDefinition</code> must have <code>isSufficient = true</code>.</p> + + + <p>The <code>valueExpression</code> of a <code>AssignmentActionUsage</code> is its second argument <code>Expression</code>.</p> - + OCL2.0 - isSufficient + valueExpression = argument(2) - - - - - <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>The ConnectionUsages that have a certain AssociationStructure as their <code>connectionDefinition</code>.</p> - - - - - - - - <p>A <code>SuccessionAsUsage</code> is both a <code>ConnectorAsUsage</code> and a <code>Succession</code>.<p> - - - - - - - <p>A <code>BindingConnectorAsUsage</code> is both a <code>BindingConnector</code> and a <code>ConnectorAsUsage</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>targetArgument</code> of a <code>AssignmentActionUsage</code> is its first argument <code>Expression</code>.</p> - + OCL2.0 - isVariation + targetArgument = argument(1) - - - - <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>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 EnumerationUsages that are typed by a certain EnumerationDefinition.</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> + + + <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 - ownedEndFeature->size() = 2 implies - specializesFromLibrary('Interfaces::binaryInterfaces') + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::assignments') - - - <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 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('Interfaces::interfaces') + 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>InterfaceDefinitions</code> that type this <code>InterfaceUsage</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 InterfaceUsages typed by a certain InterfaceDefinition.</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 InterfaceDefinitions that have a certain PortUsage as an <code>interfaceEnd</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>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>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>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>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 - eventOccurrence = - if referencedFeatureTarget() = null then self - else if referencedFeatureTarget().oclIsKindOf(OccurrenceUsage) then - referencedFeatureTarget().oclAsType(OccurrenceUsage) - else null - endif endif + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::subactions') - - - <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>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 - referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(OccurrenceUsage) + specializesFromLibrary('Actions::actions') - - - <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>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 - owningType <> null and -(owningType.oclIsKindOf(OccurrenceDefinition) or - owningType.oclIsKindOf(OccurrenceUsage)) implies - specializesFromLibrary('Occurrences::Occurrence::timeEnclosedOccurrences') + isComposite and owningType <> null and +(owningType.oclIsKindOf(PartDefinition) or + owningType.oclIsKindOf(PartUsage)) implies + specializesFromLibrary('Parts::Part::ownedActions') - - - <p>An <code>EventOccurrenceUsage</code> must be referential.</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 - isReference + 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>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>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>Always true for an <code>EventOccurrenceUsage</code>.</p> + + + <p>Return the owned input <code>parameters</code> of this <code>ActionUsage</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> + + + 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>A snapshot of an <code>Occurrence</code> (a time slice with zero duration).</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>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> + + + 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>OccurrenceUsage</code> that has a certain <code>individualDefinition</code>.</p> + + + + <p>The <code>SendActionUsage</code> that has a certain <code>Expression</code> as its <code>senderArgument</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 <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>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>MergeNode</code> may have at most one outgoing <code>Succession</code>.</p> - + OCL2.0 - individualDefinition = - let individualDefinitions : OrderedSet(OccurrenceDefinition) = - occurrenceDefinition-> - selectByKind(OccurrenceDefinition)-> - select(isIndividual) in - if individualDefinitions->isEmpty() then null - else individualDefinitions->first() endif + sourceConnector->selectAsKind(Succession)->size() <= 1 - - - <p>If an <code>OccurrenceUsage</code> has <code>isIndividual = true</code>, then it must have an <code>individualDefinition</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 - isIndividual implies individualDefinition <> null + targetConnector->selectByKind(Succession)-> + collect(connectorEnd->at(1))-> + forAll(sourceMult | + multiplicityHasBounds(sourceMult, 0, 1)) - - - <p>An <code>OccurrenceUsage</code> must directly or indirectly specialize <code><em>Occurrences::occurrences</em></code> from the Kernel Semantic Library.</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 - specializesFromLibrary('Occurrences::occurrences') + targetConnector->selectByKind(Succession)-> + forAll(subsetsChain(self, + resolveGlobal('ControlPerformances::MergePerformance::incomingHBLink'))) - - - <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>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 - 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') + specializesFromLibrary('Actions::Action::merges') - - - <p>An <code>OccurrenceUsage</code> must have at most one <code>occurrenceDefinition</code> with <code>isIndividual = true</code>.</p> + + + + + + <p>The IfActionUsage that has a certain ActionUsage as its <code>elseAction</code>.</p> - + + + + + + + + <p>The AssignmentActionUsage that has a certain Expression as its <code>valueArgument</code>.</p> + + + + + + + + + <p>The AssignmentActionUsages that gave a certain <code>referent</code> Expression.</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 - occurrenceDefinition-> - selectByKind(OccurrenceDefinition)-> - select(isIndividual).size() <= 1 + senderArgument = argument(2) - - - <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 <code>payloadArgument</code> of a <code>SendActionUsage</code> is its first argument <code>Expression</code>.</p> - + OCL2.0 - portionKind = PortionKind::snapshot implies - specializesFromLibrary('Occurrences::Occurrence::snapshots') + payloadArgument = argument(1) - - - <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>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 - portionKind = PortionKind::timeslice implies - specializesFromLibrary('Occurrences::Occurrence::timeSlices') + owningFeatureMembership <> null and +(owningFeatureMembership.oclIsKindOf(StateSubactionMembership) or + owningFeatureMembership.oclIsKindOf(TransitionFeatureMembership)) implies + payloadArgument <> null - - - <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 <code>receiverArgument</code> of a <code>SendActionUsage</code> is its third argument <code>Expression</code>.</p> - + OCL2.0 - portionKind <> null implies - owningType <> null and - (owningType.oclIsKindOf(OccurrenceDefinition) or - owningType.oclIsKindOf(OccurrenceUsage)) + receiverArgument = argument(3) - - - <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>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 - portionKind <> null implies isPortion + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::sendSubactions') - - - - <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>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>Whether this <code>OccurrenceUsage</code> represents the usage of the specific individual represented by its <code>individualDefinition</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 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>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>OccurrenceUsages</code> being typed by a certain <code>Class</code>.</p> - - - - - - - - - <p>The EventOccurrenceUsages that reference a certain <code>eventOccurrence</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>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>A <code>DecisionNode</code> is a <code>ControlNode</code> that makes a selection from its outgoing <code>Successions</code>.</p> - - - <p>The <code>conjugatedPortDefinition</code> of a <code>PortDefinition</code> is the <code>ownedMember</code> that is a <code>ConjugatedPortDefinition</code>.</p> + + + <p>A <code>DecisionNode</code> may have at most one incoming <code>Succession</code>.</p> - + OCL2.0 - conjugatedPortDefinition = -let conjugatedPortDefinitions : OrderedSet(ConjugatedPortDefinition) = - ownedMember->selectByKind(ConjugatedPortDefinition) in -if conjugatedPortDefinitions->isEmpty() then null -else conjugatedPortDefinitions->first() -endif + targetConnector->selectByKind(Succession)->size() <= 1 - - - <p>The <code>ownedUsages</code> of a <code>PortDefinition</code> that are not <code>PortUsages</code> must not be composite.</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 - ownedUsage-> - reject(oclIsKindOf(PortUsage))-> - forAll(not isComposite) + sourceConnector->selectAsKind(Succession)-> + collect(connectorEnd->at(2))-> + forAll(targetMult | + multiplicityHasBounds(targetMult, 0, 1)) - - - <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>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 - not oclIsKindOf(ConjugatedPortDefinition) implies - ownedMember-> - selectByKind(ConjugatedPortDefinition)-> - size() = 1 + specializesFromLibrary('Actions::Action::decisions') - - - <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>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 - specializesFromLibrary('Ports::Port') + sourceConnector->selectByKind(Succession)-> + forAll(subsetsChain(self, + resolveGlobal('ControlPerformances::DecisionPerformance::outgoingHBLink'))) - - - - - <p>The <code>ConjugatedPortDefinition</code> that is conjugate to this <code>PortDefinition</code>.</p> - - - - - - - - - <p>The PortUsages that are typed by a certain PortDefinition.</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>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>The <code>nestedUsages</code> of a <code>PortUsage</code> that are not themselves <code>PortUsages</code> must not be composite.</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 - nestedUsage-> - reject(oclIsKindOf(PortUsage))-> - forAll(not isComposite) + 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>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>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 - specializesFromLibrary('Ports::ports') + kind = TriggerKind::at implies + argument->notEmpty() and + argument->at(1).result.specializesFromLibrary('Time::TimeInstantValue') - - - <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 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 - isComposite and owningType <> null and -(owningType.oclIsKindOf(PortDefinition) or - owningType.oclIsKindOf(PortUsage)) implies - specializesFromLibrary('Ports::Port::subports') + 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>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>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>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 - owningType = null or -not owningType.oclIsKindOf(PortDefinition) and -not owningType.oclIsKindOf(PortUsage) implies - isReference + targetConnector->selectByKind(Succession)->size() <= 1 - - - <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>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 - owningType <> null and -(owningType.oclIsKindOf(PartDefinition) or - owningType.oclIsKindOf(PartUsage)) implies - specializesFromLibrary('Parts::Part::ownedPorts') + specializesFromLibrary('Actions::Action::forks') - - - - <p>The <code>occurrenceDefinitions</code> of this <code>PortUsage</code>, which must all be <code>PortDefinitions<code>.</p> - - - - + - - - - - - <p>The ConjugatedPortTypings whose <code>portDefinition</code> is a certain PortDefinition.</p> + + + + <p>The AcceptActionUsage that has a certain Expression as its <code>receiverArgument</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>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 - ownedPortConjugator.originalPortDefinition = originalPortDefinition - - - - - <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>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> + + + + <p>The <code>TerminateActionUsage</code> that has a certain <code>Expression</code> as its <code>terminatedOccurrenceArgument</code>.</p> - - - OCL2.0 - let originalName : String = originalPortDefinition.name in -if originalName = null then null -else '~' + originalName -endif - - - - - - - - + + + - - - <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><code>TriggerKind</code> enumerates the kinds of triggers that can be represented by a <code>TriggerInvocationExpression</code>.</p> - - - - <p>The <code>PortDefinition</code> being conjugated.</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 <code>ConjugatedPortDefinition</code> that is conjugate to the <code>originalPortDefinition</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 ConjugatedPortTypings whose <code>conjugatedPortDefinition</code> a certain ConjugatedPortDefinition.</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 PortConjugation that relates a certain PortDefinition to its ConjugatedPortDefinition (if any).</p> + + + + <p>The PerformActionUsages that have a certain ActionUsage as their <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>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>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>bodyAction</code> of a <code>LoopActionUsage</code> is its second input <code>parameter</code>, which must be an <code>Action</code>.</p> - + OCL2.0 - portDefinition = conjugatedPortDefinition.originalPortDefinition + bodyAction = + let parameter : Feature = inputParameter(2) in + if parameter <> null and parameter.oclIsKindOf(Action) then + parameter.oclAsType(Action) + else + null + endif + - - - - <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>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>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>The <code>WhileLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>whileArgument</code>.</p> - - OCL2.0 - specializesFromLibrary('Items::Item') - - - - + + + - - - <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>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>The <code>itemDefinitions</code> of an <code>ItemUsage</code> are those <code>occurrenceDefinitions</code> that are <code>Structures</code>.</p> - - - OCL2.0 - itemDefinition = occurrenceDefinition->selectByKind(Structure) - - - - - <p>An <code>ItemUsage</code> must directly or indirectly specialize the Systems Model Library <code>ItemUsage</code> <em><code>items</code></em>.</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('Items::items') + referencedFeatureTarget() <> null implies + referencedFeatureTarget().oclIsKindOf(ActionUsage) - - - <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> + + + <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 - isComposite and owningType <> null and -(owningType.oclIsKindOf(ItemDefinition) or - owningType.oclIsKindOf(ItemUsage)) implies - specializesFromLibrary('Items::Item::subitem') + owningType <> null and +(owningType.oclIsKindOf(PartDefinition) or + owningType.oclIsKindOf(PartUsage)) implies + specializesFromLibrary('Parts::Part::performedActions') - - - - <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>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>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 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>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>All <code>features</code> of an <code>AttributeDefinition</code> must be non-composite.</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 - feature->forAll(not isComposite) + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::whileLoops') - - - - - - - <p>The AttributeUsages that are typed by a certain DataType.</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> - - - - - - - <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 + 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> - + OCL2.0 - isReference + specializesFromLibrary('Actions::whileLoopActions') - - - <p>All <code>features</code> of an <code>AttributeUsage</code> must be non-composite.</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 - feature->forAll(not isComposite) + whileArgument = + let parameter : Feature = inputParameter(1) in + if parameter <> null and parameter.oclIsKindOf(Expression) then + parameter.oclAsType(Expression) + else + null + endif + - - - <p>An <code>AttributeUsage</code> must directly or indirectly specialize <code><em>Base::dataValues</em></code> from the Kernel Semantic Library.</p> + + + <p>A <code>WhileLoopActionUsage</code> must have at least two owned <code>input</code> <code>parameters</code>.</p> - + OCL2.0 - specializesFromLibrary('Base::dataValues') + inputParameters()->size() >= 2 - - - - <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>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>Always true for an <code>AttributeUsage</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> + - - + + - - - - + + + + The <code>ForLoopActionUsage</code> that has a certain <code>ReferenceUsage</code> as its <code>loopVariable</code>. + + + - - - <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>The <code>IfActionUsage</code> that has a certain <code>ActionUsage</code> as its <code>thenAction</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>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>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('Metadata::metadataItems') + specializesFromLibrary('Actions::Action') - - - - - <p>The <code>MetadataDefinition</code> that is the <code>definition</code> of this <code>MetadataUsage</code>.</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 + 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>A <code>MetadataDefinition</code> is an <code>ItemDefinition</code> that is also a <code>Metaclass</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>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>The <code>seqArgument</code> of a <code>ForLoopActionUsage</code> is its first argument <code>Expression</code>.</p> - + OCL2.0 - specializesFromLibrary('Metadata::MetadataItem') + seqArgument = argument(1) + - - - - - - - <p>The StateSubactionMembership that is the owner of a certain ActionUsage (if any).</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> - - - - - - - <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> + + 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> - - - - <p>Indicates that the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is a <code>guardExpression</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> - - - - <p>Indicates that the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is an <code>effectAction</code>.</p> - - - - - - - <p>The ExhibitStateUsages that have a certain StateUsage as their <tt>exhibitedState</tt>.</p> - - - - - - - - - <p>The StateDefinitions featuring a certain StateUsage.</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 - 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') + specializesFromLibrary('Actions::forLoopActions') - - - <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>loopVariable</code> of a <code>ForLoopActionUsage</code> is its first <code>ownedFeature</code>, which must be a <code>ReferenceUsage</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') - + loopVariable = + if ownedFeature->isEmpty() or + not ownedFeature->first().oclIsKindOf(ReferenceUsage) then + null + else + ownedFeature->first().oclAsType(ReferenceUsage) + endif - - - <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 first <code>ownedFeature</code> of a <code>ForLoopActionUsage</code> must be a <code>ReferenceUsage</code>.</p> - + OCL2.0 - specializesFromLibrary('Actions::transitionActions') + ownedFeature->notEmpty() and +ownedFeature->at(1).oclIsKindOf(ReferenceUsage) + - - - <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>A <code>ForLoopActionUsage</code> must have two owned <code>input</code> <code>parameters</code>.</p> - + OCL2.0 - source = - let sourceFeature : Feature = sourceFeature() in - if sourceFeature = null then null - else sourceFeature.featureTarget.oclAsType(ActionUsage) + inputParameters()->size() = 2 - - - <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>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>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> + + + + + + <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 - let successions : Sequence(Successions) = - ownedMember->selectByKind(Succession) in -successions->notEmpty() and -successions->at(1).targetFeature.featureTarget-> - forAll(oclIsKindOf(ActionUsage)) - - - - - <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>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> - + OCL2.0 - guardExpression = ownedFeatureMembership-> - selectByKind(TransitionFeatureMembership)-> - select(kind = TransitionFeatureKind::trigger).transitionFeature-> - selectByKind(Expression) + thenAction = + let parameter : Feature = inputParameter(2) in + if parameter <> null and parameter.oclIsKindOf(ActionUsage) then + parameter.oclAsType(ActionUsage) + else + null + endif - - - <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>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> - + OCL2.0 - triggerAction->forAll(specializesFromLibrary('Actions::TransitionAction::accepter') and -guardExpression->forAll(specializesFromLibrary('Actions::TransitionAction::guard') and -effectAction->forAll(specializesFromLibrary('Actions::TransitionAction::effect')) + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::ifSubactions') - - - <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>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 - triggerAction = ownedFeatureMembership-> - selectByKind(TransitionFeatureMembership)-> - select(kind = TransitionFeatureKind::trigger).transitionFeatures-> - selectByKind(AcceptActionUsage) + if elseAction = null then + specializesFromLibrary('Actions::ifThenActions') +else + specializesFromLibrary('Actions::ifThenElseActions') +endif - - - <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>ifArgument</code> of an <code>ifActionUsage</code> is its first <code>parameter</code>, which must be an <code>Expression</code>.</p> - + OCL2.0 - succession.sourceFeature = source + ifArgument = + let parameter : Feature = inputParameter(1) in + if parameter <> null and parameter.oclIsKindOf(Expression) then + parameter.oclAsType(Expression) + else + null + endif - - - <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>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 - ownedMember->selectByKind(BindingConnector)->exists(b | - b.relatedFeatures->includes(source) and - b.relatedFeatures->includes(inputParameter(1))) + elseAction = + let parameter : Feature = inputParameter(3) in + if parameter <> null and parameter.oclIsKindOf(ActionUsage) then + parameter.oclAsType(ActionUsage) + else + null + endif - - - <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>An <code>IfActionUsage</code> must have at least two owned <code>input</code> <code>parameters</code>.</p> - + OCL2.0 - triggerAction->notEmpty() implies - let payloadParameter : Feature = inputParameter(2) in - payloadParameter <> null and - payloadParameter.subsetsChain(triggerAction->at(1), triggerPayloadParameter()) + inputParameters()->size() >= 2 - - - <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>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> + - - OCL2.0 - ownedMember->selectByKind(BindingConnector)->exists(b | - b.relatedFeatures->includes(succession) and - b.relatedFeatures->includes(resolveGlobal( - 'TransitionPerformances::TransitionPerformance::transitionLink'))) - - - - - <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>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>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 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>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 - if triggerAction->isEmpty() then - inputParameters()->size() >= 1 -else - inputParameters()->size() >= 2 -endif - + specializesFromLibrary('Actions::terminateActions') - - - <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>terminatedOccurrenceArgument</code> of a <code>TerminateActionUsage</code> is its first argument.</p> - + OCL2.0 - succession = ownedMember->selectByKind(Succession)->at(1) + terminatedOccurrenceArgument = argument(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> + + + <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 - source <> null and not source.oclIsKindOf(StateUsage) implies - triggerAction->isEmpty() + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::terminateSubactions') - - - - <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>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>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> + + + + + <p>The <code>IfActionUsage</code> that has a certain <code>Expression</code> as its <code>ifArgument</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 ActionUsages being typed by a certain Behavior.</p> - - + + - - - - <p>The Transition that owns a certain Succession.</p> + + + + <p>The <code>LoopActionUsage</code> that has a certain <code>ActionUsage</code> as its <code>bodyAction</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>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>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 - 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>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 - ownedMembership-> - selectByKind(StateSubactionMembership)-> - isUnique(kind) + isIndividual implies specializesFromLibrary('Occurrences::Life') - - - <p>The <code>states</code> of a <code>StateDefinition</code> are those of its <code>actions</code> that are <code>StateUsages</code>.</p> + + + <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 - state = action->selectByKind(StateUsage) + isIndividual implies + multiplicity <> null and + multiplicity.specializesFromLibrary('Base::zeroOrOne') - - - <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 - 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> - - - 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>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 - isParallel implies - ownedAction.incomingTransition->isEmpty() and - ownedAction.outgoingTransition->isEmpty() - - - - - <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 - 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>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>Whether this <code>OccurrenceDefinition</code> is constrained to represent at most one thing.</p> - + - - - - <p>The TransitionUsage that is guarded by a certain Expression.</p> - - - - - - - - <p>A <code>StateSubactionKind</code> indicates whether the <code>action</code> of a StateSubactionMembership is an entry, do or exit action.</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>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>A time slice of an <code>Occurrence</code> (a portion over time).</p> - - - <p>Indicates that the <code>action</code> of a <code>StateSubactionMembership</code> is an <code>exitAction</code>.</p> + + + <p>A snapshot of an <code>Occurrence</code> (a time slice with zero duration).</p> - - - - <p>The TransitionUsage outgoing from a certain source <tt>ActionUsage</tt>.</p> - - - - - - - - - <p>The StateDefinitions with a certain <tt>doAction</tt>.</p> - - - - - - - - - <p>The StateUsages with a certain <tt>entryAction</tt>.</p> + + + + <p>The <code>OccurrenceUsage</code> that has a certain <code>individualDefinition</code>.</p> - - + + - - - - <p>The TransitionUsage incoming to a certain target <tt>ActionUsage</tt>.</p> + + + + <p>The EventOccurrenceUsages that reference a certain <code>eventOccurrence</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>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>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>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 - owningType <> null and -(owningType.oclIsKindOf(PartDefinition) or - owningType.oclIsKindOf(PartUsage)) implies - specializesFromLibrary('Parts::Part::exhibitedStates') + eventOccurrence = + if referencedFeatureTarget() = null then self + else if referencedFeatureTarget().oclIsKindOf(OccurrenceUsage) then + referencedFeatureTarget().oclAsType(OccurrenceUsage) + else null + endif endif - - - <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>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 referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(StateUsage) + referencedFeatureTarget().oclIsKindOf(OccurrenceUsage) - - - - - <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 StateUsages 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>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>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 - kind = TransitionFeatureKind::trigger implies - transitionFeature.oclIsKindOf(AcceptActionUsage) + owningType <> null and +(owningType.oclIsKindOf(OccurrenceDefinition) or + owningType.oclIsKindOf(OccurrenceUsage)) implies + specializesFromLibrary('Occurrences::Occurrence::timeEnclosedOccurrences') - - - <p>The <code>owningType</code> of a <code>TransitionFeatureMembership</code> must be a <code>TransitionUsage</code>.</p> + + + <p>An <code>EventOccurrenceUsage</code> must be referential.</p> - + OCL2.0 - owningType.oclIsKindOf(TransitionUsage) + isReference - - - <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 - 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> - - - 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>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>Step</code> that is the <code>ownedMemberFeature</code> of this <code>TransitionFeatureMembership</code>.</p> + + + <p>Always true for an <code>EventOccurrenceUsage</code>.</p> - - + + - - - - <p>The TransitionFeatureMembership that owns a certain Step (if any).</p> - - - - - - - - - <p>The StateDefinitions with a certain <tt>entryAction</tt>.</p> - - - - - - - - - <p>The TransitionUsage that is triggered by a certain AcceptActionUsage.</p> - - - - - - - - - <p>The StateUsages with a certain <tt>doAction</tt>.</p> + + + + <p>The <code>OccurrenceUsages</code> being typed by a certain <code>Class</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>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>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>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 - doAction = - let doMemberships : Sequence(StateSubactionMembership) = - ownedMembership-> - selectByKind(StateSubactionMembership)-> - select(kind = StateSubactionKind::do) in - if doMemberships->isEmpty() then null - else doMemberships->at(1) - endif + individualDefinition = + let individualDefinitions : OrderedSet(OccurrenceDefinition) = + occurrenceDefinition-> + selectByKind(OccurrenceDefinition)-> + select(isIndividual) in + if individualDefinitions->isEmpty() then null + else individualDefinitions->first() 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>If an <code>OccurrenceUsage</code> has <code>isIndividual = true</code>, then it must have an <code>individualDefinition</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 + isIndividual implies individualDefinition <> null - - - <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>An <code>OccurrenceUsage</code> must directly or indirectly specialize <code><em>Occurrences::occurrences</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - isParallel implies - nestedAction.incomingTransition->isEmpty() and - nestedAction.outgoingTransition->isEmpty() + specializesFromLibrary('Occurrences::occurrences') - - - <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>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 - isSubstateUsage(false) implies - specializesFromLibrary('States::StateAction::exclusiveStates') + 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>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>An <code>OccurrenceUsage</code> must have at most one <code>occurrenceDefinition</code> with <code>isIndividual = true</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 + occurrenceDefinition-> + selectByKind(OccurrenceDefinition)-> + select(isIndividual).size() <= 1 - - - <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>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 - specializesFromLibrary('States::stateActions') + portionKind = PortionKind::snapshot implies + specializesFromLibrary('Occurrences::Occurrence::snapshots') - - - <p>A <code>StateUsage</code> must not have more than one owned <code>StateSubactionMembership</code> of each <code>kind</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 - ownedMembership-> - selectByKind(StateSubactionMembership)-> - isUnique(kind) + portionKind = PortionKind::timeslice implies + specializesFromLibrary('Occurrences::Occurrence::timeSlices') - - - <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>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 - isSubstateUsage(true) implies - specializesFromLibrary('States::StateAction::substates') + portionKind <> null implies + owningType <> null and + (owningType.oclIsKindOf(OccurrenceDefinition) or + owningType.oclIsKindOf(OccurrenceUsage)) - - - <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>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(PartDefinition) or - owningType.oclIsKindOf(PartUsage)) implies - specializesFromLibrary('Parts::Part::ownedStates') + portionKind <> null implies isPortion - - - - <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>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>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 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 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>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 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>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 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>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 InterfaceDefinitions that have a certain PortUsage as an <code>interfaceEnd</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>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>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>The <code>owningType</code> of a <code>StateSubactionMembership</code> must be a <code>StateDefinition</code> or a <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> - + OCL2.0 - owningType.oclIsKindOf(StateDefinition) or -owningType.oclIsKindOf(StateUsage) + ownedEndFeature->size() = 2 implies + specializesFromLibrary('Interfaces::binaryInterfaces') - - - - <p>Whether this <code>StateSubactionMembership</code> is for an <code>entry<code>, <code>do</code> or <code>exit</code> <code>ActionUsage</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> - - - - <p>The <code>ActionUsage</code> that is the <code>ownedMemberFeature</code> of this <code>StateSubactionMembership</code>.</p> + + OCL2.0 + specializesFromLibrary('Interfaces::interfaces') + + + + + + <p>The <code>InterfaceDefinitions</code> that type this <code>InterfaceUsage</code>.</p> - - + + - - - - <p>The StateDefinitions with a certain <tt>exitAction</tt>.</p> + + + + <p>The InterfaceUsages typed by a certain InterfaceDefinition.</p> - - + + - - - - <p>The TransitionUsage that has a certain <tt>effectAction</tt>.</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>The Usage in which the <code>nestedAction</code> is nested.</p> + + OCL2.0 + specializesFromLibrary('Interfaces::Interface') + + + + + <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 Usage that owns a certain <code>nestedViewpoint</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>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 ConcernUsages that are typed by a certain <code>concernDefinition</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>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>membershipOwningNamespace</code> of a <code>VariantMembership</code> must be a variation-point <code>Definition</code> or <code>Usage</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 - membershipOwningNamespace.oclIsKindOf(Definition) and - membershipOwningNamespace.oclAsType(Definition).isVariation or -membershipOwningNamespace.oclIsKindOf(Usage) and - membershipOwningNamespace.oclAsType(Usage).isVariation + owningType.oclIsKindOf(RequirementUsage) or +owningType.oclIsKindOf(RequirementDefinition) or +owningType.oclIsKindOf(CaseDefinition) or +owningType.oclIsKindOf(CaseUsage) - - - - <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>PartUsage</code> specifying the actor.</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 AddressedConcernMembership that has a certain ConcernUsage as its <code>addressedConcern</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>variants</code> of a <code>Usage</code> are the <code>ownedVariantUsages</code> of its <code>variantMemberships</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 - variant = variantMembership.ownedVariantUsage + 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>variantMemberships</code> of a <code>Usage</code> are those <code>ownedMemberships</code> that are <code>VariantMemberships</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 - variantMembership = ownedMembership->selectByKind(VariantMembership) + owningType.oclIsKindOf(RequirementDefinition) or +owningType.oclIsKindOf(RequirementUsage) - - - <p>If a <code>Usage</code> is a variation, then it must not have any <code>ownedFeatureMemberships</code>.</p> + + + <p>The <code>ownedConstraint</code> of a <code>RequirementConstraintMembership</code> must be composite.</p> - + OCL2.0 - isVariation implies ownedFeatureMembership->isEmpty() + ownedConstraint.isComposite - - - <p>A <code>Usage</code> is referential if it is not composite.</p> + + + + <p>Whether the <code>RequirementConstraintMembership</code> is for an assumed or required <code>ConstraintUsage</code>.</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 RequirementUsages that have a certain Usage as their <code>subjectParameter</code>.</p> + + + + + + + + + <p>The RequirementDefinition that addresses a certain <code>addressedConcern</code>.</p> + + + + + + + + + <p>The RequirementUsages that have a certain PartUsage as an <code>actorParameter</code>.</p> + + + + + + + + + <p>The RequirementDefinition that has a certain ConstraintUsage as an <code>assumedConstraint</code> (if any).</p> + + + + + + + + + <p>The SatisfyRequirementUsages that have a certain Feature as their <tt>satisfyingFeature</tt>.</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 - isReference = 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>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>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 - owningVariationUsage <> null implies - specializes(owningVariationUsage) + ownedMember->selectByKind(BindingConnector)-> + select(b | + b.relatedElement->includes(subjectParameter) and + b.relatedElement->exists(r | r <> subjectParameter))-> + size() = 1 - - - <p>A variation <code>Usage</code> may not specialize any variation <code>Definition</code> or <code>Usage</code>.</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 - isVariation implies - not ownedSpecialization.specific->exists( - oclIsKindOf(Definition) and - oclAsType(Definition).isVariation or - oclIsKindOf(Usage) and - oclAsType(Usage).isVariation) + referencedFeatureTarget() <> null implies + referencedFeatureTarget().oclIsKindOf(RequirementUsage) - - - <p>If a <code>Usage</code> has an <code>owningVariationDefinition</code>, then it must directly or indirectly specialize that <code>Definition</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 - owningVariationDefinition <> null implies - specializes(owningVariationDefinition) + if isNegated then + specializesFromLibrary('Requirements::notSatisfiedRequirementChecks') +else + specializesFromLibrary('Requirements::satisfiedRequirementChecks') +endif - - - <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>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>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 - directedUsage = directedFeature->selectByKind(Usage) + owningType.oclIsKindOf(RequirementUsage) or +owningType.oclIsKindOf(RequirementDefinition) - - - <p>The <code>ownedActions</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ActionUsages</code>.</p> + + + + <p>The <code>PartUsage</code> specifying the stakeholder.</p> - + + + + + + + + <p>The RequirementConstraintMembership that has a certain ConstraintUsage as its <code>referencedConstraint</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 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 - nestedAction = nestedUsage->selectByKind(ActionUsage) + actorParameter = featureMembership-> + selectByKind(ActorMembership). + ownedActorParameter - - - <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>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 - nestedAllocation = nestedUsage->selectByKind(AllocationUsage) + assumedConstraint = ownedFeatureMembership-> + selectByKind(RequirementConstraintMembership)-> + select(kind = RequirementConstraintKind::assumption). + ownedConstraint - - - <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>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 - nestedAnalysisCase = nestedUsage->selectByKind(AnalysisCaseUsage) + framedConcern = featureMembership-> + selectByKind(FramedConcernMembership). + ownedConcern - - - <p>The <code>ownedAttributes</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>AttributeUsages</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> + + + <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 - nestedCalculation = nestedUsage->selectByKind(CalculationUsage) + requiredConstraint = ownedFeatureMembership-> + selectByKind(RequirementConstraintMembership)-> + select(kind = RequirementConstraintKind::requirement). + ownedConstraint - - - <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>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 - nestedCase = nestedUsage->selectByKind(CaseUsage) + stakeholderParameter = featureMembership-> + selectByKind(AStakholderMembership). + ownedStakeholderParameter - - - <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>subjectParameter</code> of a <code>RequirementUsage</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p> - + OCL2.0 - nestedConcern = nestedUsage->selectByKind(ConcernUsage) + subjectParameter = + let subjects : OrderedSet(SubjectMembership) = + featureMembership->selectByKind(SubjectMembership) in + if subjects->isEmpty() then null + else subjects->first().ownedSubjectParameter + endif - - - <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>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 - nestedConnection = nestedUsage->selectByKind(ConnectorAsUsage) + text = documentation.body - - - <p>The <code>ownedConstraints</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ConstraintUsages</code>.</p> + + + <p>A <code>RequirementDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> - + OCL2.0 - nestedConstraint = nestedUsage->selectByKind(ConstraintUsage) + featureMembership-> + selectByKind(SubjectMembership)-> + size() <= 1 - - - <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>subjectParameter</code> of a <code>RequirementUsage</code> must be its first <code>input</code>.</p> - + OCL2.0 - ownedNested = nestedUsage->selectByKind(EnumerationUsage) + input->notEmpty() and input->first() = subjectParameter - - - <p>The <code>ownedFlows</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>FlowConnectionUsages</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 - nestedFlow = nestedUsage->selectByKind(FlowUsage) + specializesFromLibrary('Requirements::requirementChecks') - - - <p>The <code>ownedInterfaces</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>InterfaceUsages</code>.</p> + + + <p>A composite <code>RequirementUsage</code> whose <code>owningType</code> is a <code>RequirementDefinition</code> or <code>RequirementUsage</code> but is <em>not</em> owned via a <code>RequirementConstraintMembership</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 - nestedInterface = nestedUsage->selectByKind(ReferenceUsage) + isComposite and owningType <> null and + (owningType.oclIsKindOf(RequirementDefinition) or + owningType.oclIsKindOf(RequirementUsage)) and + not owningFeatureMembership.oclIsKindOf(RequirementConstraintMembership) implies + specializesFromLibrary('Requirements::RequirementCheck::subrequirements') - - - <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>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 - nestedItem = nestedUsage->selectByKind(ItemUsage) + 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>ownedMetadata</code> of a <code>Usage</code> are all its <code>ownedMembers</code> that are <code>MetadataUsages</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 - nestedMetadata = ownedMember->selectByKind(MetadataUsage) + owningFeatureMembership <> null and +owningFeatureMembership.oclIsKindOf(RequirementVerificationMembership) implies + specializesFromLibrary('VerificationCases::VerificationCase::obj::requirementVerifications') - - - <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>RequirementDefinition</code> that is the single <code>definition</code> of this <code>RequirementUsage</code>.</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>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> - - OCL2.0 - nestedPart = nestedUsage->selectByKind(PartUsage) - - - - - <p>The <code>ownedPorts</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>PortUsages</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> - - OCL2.0 - nestedPort = nestedUsage->selectByKind(PortUsage) - - - - - <p>The <code>ownedReferences</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ReferenceUsages</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> - - 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 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> - - 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 <code>parameter</code> of this <code>RequirementUsage</code> that represents its subject.</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>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>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 - nestedState = nestedUsage->selectByKind(StateUsage) + specializesFromLibrary('Requirements::ConcernCheck') - - - <p>The <code>ownedTransitions</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>TransitionUsages</code>.</p> + + + + + + <p>The RequirementUsage that has a certain ConstraintUsage as a <code>requiredConstraint</code> (if any).</p> - + + + + + + + + <p>The SatifyRequirementUsages that have a certain RequirementUsage as their <tt>satisfiedRequirement</tt>.</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 RequirementUsage that addresses a certain <code>addressedConcern</code>.</p> + + + + + + + + + <p>The ActorMembership that has a certain PartUsage as its <code>ownedActorParameter</code>.</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 - nestedTransition = nestedUsage->selectByKind(TransitionUsage) + specializesFromLibrary('Requirements::concernChecks') - - - <p>The <code>ownedUsages</code> of a <code>Usage</code> are all its <code>ownedFeatures</code> that are <code>Usages</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 - nestedUsage = ownedFeature->selectByKind(Usage) + owningFeatureMembership <> null and +owningFeatureMembership.oclIsKindOf(FramedConcernMembership) implies + specializesFromLibrary('Requirements::RequirementCheck::concerns') - - - <p>The <code>ownedUseCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>UseCaseUsages</code>.</p> + + + + <p>The ConcernDefinition that is the single type of this ConcernUsage.</p> - + + + + + + + + <p>The RequirementDefinitions that have a certain PartUsage as an <code>actorParameter</code>.</p> + + + + + + + + + <p>The RequirementDefinition that has a certain ConstraintUsage as a <code>requiredConstraint</code> (if any).</p> + + + + + + + + + <p>TheStakehplderMembership that has a certain PartUsage as its <code>ownedStakeholderParameter</code>.</p> + + + + + + + + + <p>The SubjectMembership that owns a particular Parameter as its <code>ownedSubjectParameter</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> + + OCL2.0 - nestedUseCase = nestedUsage->selectByKind(UseCaseUsage) + owningType.oclIsType(RequirementDefinition) or +owningType.oclIsType(RequiremenCaseRequirementDefinition) or +owningType.oclIsType(CaseDefinition) or +owningType.oclIsType(CaseUsage) + - - - <p>The <code>ownedValidationCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ValidationCaseUsages</code>.</p> + + + + <p>The <code>Usage</code< that is the <code>ownedMemberParameter</code> of this <code>SubjectMembership</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 - nestedVerificationCase = nestedUsage->selectByKind(VerificationCaseUsage) + kind = RequirementConstraintKind::requirement - - - <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>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 RequirementDefinitions that have a certain Usage as their <code>subjectParameter</code>.</p> + + + + + + + + + <p>The AddressedConcernMembership that owns a certain ConcernUsage as its <code>ownedConcern</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>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 - nestedView = nestedUsage->selectByKind(ViewUsage) + text = documentation.body - - - <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>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 - nestedViewpoint = nestedUsage->selectByKind(ViewpointUsage) + assumedConstraint = ownedFeatureMembership-> + selectByKind(RequirementConstraintMembership)-> + select(kind = RequirementConstraintKind::assumption). + ownedConstraint - - - <p>The <code>usages</code> of a <code>Usage</code> are all its <code>features</code> that are <code>Usages</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 - usage = feature->selectByKind(Usage) + requiredConstraint = ownedFeatureMembership-> + selectByKind(RequirementConstraintMembership)-> + select(kind = RequirementConstraintKind::requirement). + ownedConstraint - - - <p>A <code>Usage</code> that is directed, an end feature or has no <code>featuringTypes</code> must be referential.</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 - direction <> null or isEnd or featuringType->isEmpty() implies - isReference + subjectParameter = + let subjects : OrderedSet(SubjectMembership) = + featureMembership->selectByKind(SubjectMembership) in + if subjects->isEmpty() then null + else subjects->first().ownedSubjectParameter + endif - - - <p>If a <code>Usage</code> is a variation, then it must be abstract.</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 isAbstract + framedConcern = featureMembership-> + selectByKind(FramedConcernMembership). + ownedConcern - - - <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>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 - 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') - ) + actorParameter = featureMembership-> + selectByKind(ActorMembership). + ownedActorParameter - - - <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>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 - owningVariationUsage <> null implies - featuringType->asSet() = owningVariationUsage.featuringType->asSet() + stakeholderParameter = featureMembership-> + selectByKind(StakholderMembership). + ownedStakeholderParameter - - - - <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>A <code>RequirementDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</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> + + OCL2.0 + featureMembership-> + selectByKind(SubjectMembership)-> + size() <= 1 + + + + + <p>The <code>subjectParameter</code> of a <code>RequirementDefinition</code> must be its first <code>input</code>.</p> - - - - - - <p>The <code>Usages</code> that are <code>features</code> of this <code>Usage</code> (not necessarily owned).</p> + + OCL2.0 + input->notEmpty() and input->first() = subjectParameter + + + + + <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 + specializesFromLibrary('Requirements::RequirementCheck') + + + + + + <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>The <code>usages</code> of this <code>Usage</code> that are <code>directedFeatures</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>Usages</code> that are <code>ownedFeatures</code> of this <code>Usage</code>.</p> + + + <p>The <code>parameter</code> of this <code>RequirementDefinition</code> that represents its subject.</p> - - + + - - - <p>The <code>ReferenceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + + <p>The <code>parameters</code> of this <code>RequirementDefinition</code> that represent actors involved in the requirement.</p> - - + + - - - <p>The code>AttributeUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + + <p>The <code>parameters</code> of this <code>RequirementDefinition</code> that represent stakeholders for the requirement.</p> - - + + - - - <p>The code>EnumerationUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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>OccurrenceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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>ItemUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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 <code>PartUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + + + + <p>The Definition that owns the <code>ownedConnection</code>.</p> - - - - - - <p>The <code>PortUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + + + + + + + <p>The Usage in which the <code>nestedRequirement</code> is nested.</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>StateUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - - - - - - <p>The <code>TransitionUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - - - - - - <p>The <code>CalculationUsage</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - - - - - - <p>The <code>ConstraintUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - - - - - - <p>The <code>RequirementUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - - - - - - <p>The <code>ConcernUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - - - - - - <p>The <code>CaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - - - - - - <p>The <code>AnalysisCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - - - - - - <p>The <code>VerificationCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - - - - - - <p>The <code>UseCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - - - - - - <p>The <code>ViewUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</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>Usage</code> that owns the <code>nestedFlow</code>.</p> - - - - - - <p>The <code>MetadataUsages</code> that are <code>ownedMembers</code> of this of this <code>Usage</code>.</p> + + + + + + + + <p>The Usage in which the <code>nestedOccurrence</code> is nested.</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 Definition that owns the <code>ownedAllocation</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> + + + + + + + + <p>The Definition that owns the <code>ownedPort</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> + + + + + + + + <p>The Usage that owns the <code>nestedEnumeration</code>.</p> - - - OCL2.0 - if ownedReferenceSubsetting = null then null -else ownedReferenceSubsetting.referencedFeature.featureTarget -endif - - - - + + + - - - - <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>The Usage in which the <code>nestedPart</code> is nested.</p> - - + + @@ -14194,54 +13799,13 @@ endif - - - <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> + + + + <p>The Definitions that have a certain Usage as a <code>flow</code>.</p> - - OCL2.0 - isReference - - - - - - <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 that owns the <code>nestedReference</code>.</p> - - - + + @@ -14253,31 +13817,127 @@ endif - - - - <p>The Definition that owns a certain <code>ownedVerificationCase</code>.</p> + + + <p>The Definition that owns this CaseUsage (if any).</p> + + + + <p>The Definition that owns the <code>ownedCase</code>.</p> - - + + - - - - <p>The Definition that owns the <code>ownedMetadata</code>.</p> + + + + <p>The Usage that owns a certain <code>nestedViewpoint</code>.</p> - - + + - - - - <p>The Usage in which the <code>nestedInterface</code> is nested.</p> + + + + <p>The Usage that owns a certain <code>nestedRendering</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> + + + + + + + + + <p>The Definition that owns the <code>ownedEnumeration</code>.</p> + + + + + + + + + <p>The Usage in which the <code>nestedState</code> is nested.</p> + + + + + + + + + <p>The Usage in which the <code>nestedUsage</code> is nested.</p> + + + + + + + + + <p>The Usages that have a certain Usage as a <code>flow</code>.</p> + + + + + + + + + + + + + <p>The Usage in which the <code>nestedItem</code> is nested.</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 Definition that owns a certain <code>ownedView</code>.</p> + + + @@ -14825,89 +14485,67 @@ endif - - - - <p>The Usage in which the <code>nestedRequirement</code> is nested.</p> + + + + <p>The Definition that owns the <code>ownedAttribute</code>.</p> - - + + - - - - <p>The Definition that owns the <code>ownedEnumeration</code>.</p> + + + + <p>The owning Definition of this VariantMembership, which must have <code>isVariation</code> = true.</p> - - + + - - - - <p>The Definition that owns the <code>ownedConcern</code>.</p> + + + + <p>The Usage in which the <code>nestedUseCase</code> is nested.</p> - - + + - - - - <p>The Definition that owns the <code>ownedInterface</code>.</p> + + + + <p>The Definitions that feature a certain Usage.</p> - - + + - - - - - <p>The Definition that owns the <code>ownedState</code>.</p> + + + + <p>The Usage in which the <code>nestedTransition</code> is nested.</p> - - + + - - - - <p>The Usage that owns a certain <code>nestedView</code>.</p> + + + + <p>The Definition that owns a certain <code>ownedRendering</code>.</p> - - + + - - - - <p>The Usage that owns the <code>nestedEnumeration</code>.</p> + + + + <p>The Usage in which the <code>nestedInterface</code> is nested.</p> - - - - - - - - <p>The Usages that have a certain Usage as a <code>flow</code>.</p> - - - - - - - - - - - - <p>The Definitions that have a certain Usage as a <code>flow</code>.</p> - - - + + @@ -14919,40 +14557,13 @@ endif - - - - <p>The Usage in which the <code>nestedUseCase</code> is nested.</p> - - - - - - - - - <p>The Definition that owns the <code>ownedPort</code>.</p> - - - - - - - - - <p>The owning Definition of this VariantMembership, which must have <code>isVariation</code> = true.</p> - - - - - - - - - <p>The <code>Usage</code> that owns the <code>nestedFlow</code>.</p> + + + + <p>The Definition that owns a certain <code>ownedVerificationCase</code>.</p> - - + + @@ -14964,59 +14575,31 @@ endif - - - - <p>The Definitions that feature a certain Usage.</p> - - - - - - - - - - <p>The Definition that owns a certain <code>ownedRendering</code>.</p> - - - - - - - - - <p>The ItemUsages being typed by a certain Structure.</p> - - - - - - - - - <p>The owning Definition of this VariantMembership, which must have <code>isVariation</code> = true.</p> + + + + <p>The Definition that owns the <code>ownedInterface</code>.</p> - - + + - - - - <p>The Definition that owns a certain <code>ownedView</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 Definition that owns the <code>ownedAnalysisCase</code>.</p> + + + + <p>The Definition that owns the <code>ownedReference</code>.</p> - - + + @@ -15028,106 +14611,94 @@ endif - - - - <p>The Definition that owns the <code>ownedOccurrence</code>.</p> - - - - - - - - - <p>The Usage in which the <code>nestedUsage</code> is nested.</p> + + + + <p>The Usage in which the <code>nestedAction</code> is nested.</p> - - + + - - - - <p>The Usage in which the <code>nestedTransition</code> is nested.</p> + + + + <p>The Usages that have a certain Classifier as a <code>definition</code>.</p> - - + + - - - - <p>The Definition that owns the <code>ownedRequirement</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>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>ownedState</code>.</p> - - + + - - - - <p>The Definition that owns the <code>ownedAttribute</code>.</p> + + + + <p>The Usage in which the <code>nestedAnalysisCase</code> is nested.</p> - - + + - - - - <p>The Usage that owns a certain <code>nestedRendering</code>.</p> + + + + <p>The Usage in which the <code>nestedPort</code> is nested (if any).</p> - - + + - - - - <p>The Definition that owns the <code>ownedConstraint</code>.</p> + + + + <p>The Usage that owns a certain <code>nestedView</code>.</p> - - + + - - - - <p>The Usage in which the <code>nestedConstraint</code> is nested.</p> + + + + <p>The Definition that owns the <code>ownedOccurrence</code>.</p> - - + + - - - <p>The Definition that owns this CaseUsage (if any).</p> - - - - <p>The Definition that owns the <code>ownedCase</code>.</p> + + + + <p>The Definition that owns the <code>ownedItem</code>.</p> - - + + - - - - <p>The Usage in which the <code>nestedAnalysisCase</code> is nested.</p> + + + + <p>The Usage in which the <code>nestedAttribute</code> is nested.</p> - - + + @@ -15139,58 +14710,72 @@ endif - - - - <p>The Usage that owns the <code>nestedAllocation</code>.</p> + + + + <p>The Definition that owns the <code>ownedMetadata</code>.</p> - - + + - - - - <p>The Usage in which the <code>nestedPart</code> is nested.</p> + + + + <p>The Definition that owns the <code>ownedTransition</code>.</p> - - + + - - - - <p>The Definition that owns a certain <code>ownedViewpoint</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> - - - - - - - - <p>The Usage in which the <code>nestedState</code> is nested.</p> + + OCL2.0 + isReference + + + + + + <p>Always <code>true</code> for a <code>ReferenceUsage</code>.</code> - - - - - - - - <p>The Usage in which the <code>nestedOccurrence</code> is nested.</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 + 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 the <code>ownedReference</code>.</p> + + + + <p>The Definition that owns the <code>ownedConcern</code>.</p> - - + + @@ -15202,823 +14787,1238 @@ endif - - - - <p>The Usage in which the <code>nestedItem</code> is nested.</p> + + + + <p>The Usage that owns the <code>nestedConcern</code>.</p> - - + + - - - - <p>The Definition that owns the <code>ownedTransition</code>.</p> + + + + <p>The Definition that owns the <code>ownedConstraint</code>.</p> - - + + - - - - <p>The Usage in which the <code>nestedAttribute</code> is nested.</p> + + + + <p>The owning Definition of this VariantMembership, which must have <code>isVariation</code> = true.</p> - - + + - - - - <p>The Definition that owns the <code>ownedAllocation</code>.</p> + + + + <p>The ItemUsages being typed by a certain Structure.</p> - - + + - - - - <p>The Usages that have a certain Classifier as a <code>definition</code>.</p> + + + + <p>The Usage in which the <code>nestedConstraint</code> is nested.</p> - - + + - - - - <p>The Usage that owns the <code>nestedConcern</code>.</p> + + + + <p>The Definition that owns the <code>ownedAnalysisCase</code>.</p> - - + + - - - - <p>The Usage in which the <code>nestedPort</code> is nested (if any).</p> + + + + <p>The Definition that owns a certain <code>ownedViewpoint</code>.</p> - - + + - - - - <p>The Definition that owns the <code>ownedItem</code>.</p> + + + + <p>The Definition that owns the <code>ownedRequirement</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 + variant = variantMembership.ownedVariantUsage + + + + + <p>The <code>variantMemberships</code> of a <code>Usage</code> are those <code>ownedMemberships</code> that are <code>VariantMemberships</code>.</p> + + + OCL2.0 + variantMembership = ownedMembership->selectByKind(VariantMembership) + + + + + <p>If a <code>Usage</code> is a variation, then it must not have any <code>ownedFeatureMemberships</code>.</p> + + + OCL2.0 + isVariation implies ownedFeatureMembership->isEmpty() + + + + + <p>A <code>Usage</code> is referential if it is not composite.</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> + + + 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> + + + 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 + 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> + + + 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 + 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 + nestedAllocation = nestedUsage->selectByKind(AllocationUsage) + + + + + <p>The <code>ownedAnalysisCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>AnalysisCaseUsages</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> + + + 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 + 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> + + + 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 + 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 + nestedConnection = nestedUsage->selectByKind(ConnectorAsUsage) + + + + + <p>The <code>ownedConstraints</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ConstraintUsages</code>.</p> + + + OCL2.0 + nestedConstraint = nestedUsage->selectByKind(ConstraintUsage) + + + + + <p>The <code>ownedEnumerations</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>EnumerationUsages</code>.</p> + + + OCL2.0 + ownedNested = nestedUsage->selectByKind(EnumerationUsage) + + + + + <p>The <code>ownedFlows</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>FlowConnectionUsages</code>.</p> + + + OCL2.0 + nestedFlow = nestedUsage->selectByKind(FlowUsage) + + + + + <p>The <code>ownedInterfaces</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>InterfaceUsages</code>.</p> + + + OCL2.0 + nestedInterface = nestedUsage->selectByKind(ReferenceUsage) + + + + + <p>The <code>ownedItems</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ItemUsages</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> + + + OCL2.0 + nestedMetadata = ownedMember->selectByKind(MetadataUsage) + + + + + <p>The <code>ownedOccurrences</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>OccurrenceUsages</code>.</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 + nestedPart = nestedUsage->selectByKind(PartUsage) + + + + + <p>The <code>ownedPorts</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>PortUsages</code>.</p> + + + OCL2.0 + nestedPort = nestedUsage->selectByKind(PortUsage) + + + + + <p>The <code>ownedReferences</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ReferenceUsages</code>.</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> + + + 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> + + + 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> + + + 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 + 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 + 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 + 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 + nestedVerificationCase = nestedUsage->selectByKind(VerificationCaseUsage) + + + + + <p>The <code>ownedViews</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ViewUsages</code>.</p> - - - - - - - - <p>The Definition that owns the <code>ownedConnection</code>.</p> + + OCL2.0 + nestedView = nestedUsage->selectByKind(ViewUsage) + + + + + <p>The <code>ownedViewpoints</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ViewpointUsages</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 + 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> - + OCL2.0 - allocation = usage->selectAsKind(AllocationUsage) + usage = feature->selectByKind(Usage) - - - <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 <code>Usage</code> that is directed, an end feature or has no <code>featuringTypes</code> must be referential.</p> - + OCL2.0 - specializesFromLibrary('Allocations::Allocation') + direction <> null or isEnd or featuringType->isEmpty() implies + isReference - - - - <p>The <code>AllocationUsages</code> that refine the allocation mapping defined by this <code>AllocationDefinition</code>.</p> + + + <p>If a <code>Usage</code> is a variation, then it must be abstract.</p> - - - - - - - - <p>The AllocationDefinitions that feature a certain <code>allocation</code>.</p> + + OCL2.0 + isVariation implies isAbstract + + + + + <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>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> + + 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') + ) + + + + + <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('Allocations::allocations') + owningVariationUsage <> null implies + featuringType->asSet() = owningVariationUsage.featuringType->asSet() - - - - <p>The <code>AllocationDefinitions</code> that are the types of this <code>AllocationUsage</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>The AllocationUsages that have a certain AllocationDefinition as their <code>allocationDefinition</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 ViewpointUsage that has a certain <code>viewpointStakeholder</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 ViewUsage that owns a certain <code>satisfiedViewpoint</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>A ViewUsage exposing a certain <code>exposedElement</code>.</p> + + + + + + <p>The <code>Definition</code> that owns this <code>Usage</code> (if any).</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>viewCondition</code>.</p> + + + + + + <p>The <code>Usage</code> in which this <code>Usage</code> is nested (if any).</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> + + + + + + <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> + - - OCL2.0 - isImportAll - - - - - <p>The <code>importOwningNamespace</code> of an <code>Expose</code> must be a <code>ViewUsage</code>.</p> + + + + + + <p>The code>EnumerationUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.<p> - - OCL2.0 - importOwningNamespace.oclIsType(ViewUsage) - - - - - <p>An <code>Expose</code> always has <code>protected</code> visibility.</p> + + + + + + <p>The <code>OccurrenceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - OCL2.0 - visibility = VisibilityKind::protected - - - - - - <p>An <code>Expose</code> always has <code>protected</code> visibility.</p> + + + + + + <p>The <code>ItemUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + - - - <p>An <code>Expose</code> always imports all <code>Elements</code>, regardless of visibility (<code>isImportAll = true</code>).</p> + + + <p>The <code>PartUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - + + - - - - - <p>The ViewUsage that owns a certain <code>viewCondition</code>.</p> + + + <p>The <code>PortUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - - - - - - - - - - - - <p>The ViewpointDefinition that has a certain <code>viewpointStakeholder</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>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>The code>FlowUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - OCL2.0 - viewpointStakeholder = framedConcern.featureMemberhsip-> - selectByKind(StakeholderMembership). - ownedStakeholderParameter - - - - - <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> + + + + + + <p>The <code>InterfaceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - OCL2.0 - specializesFromLibrary('Views::viewpointChecks') - - - - - <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 <code>AllocationUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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 <code>ActionUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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>The <code>StateUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - + + - - - - - <p>The RenderingDefinitions that feature a certain <code>rendering</code>.</p> + + + <p>The <code>TransitionUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - - - - - - - <p>The ViewUsages that have a certain <code>ViewDefinition</code>.</p> + + + + + + <p>The <code>CalculationUsage</code> that are <code>nestedUsages</code> of this <code>Usage</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 ViewUsage that owns a certain <code>rendering</code>.</p> + + + + + + <p>The <code>ConstraintUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - - - - - - - <p>The RenderingUsages defined by a certain <code>renderingDefinition</code>.</p> + + + + + + <p>The <code>RequirementUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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> + + + + + + <p>The <code>ConcernUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + + + + + + + <p>The <code>CaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - OCL2.0 - viewpointStakeholder = framedConcern.featureMemberhsip-> - selectByKind(StakeholderMembership). - ownedStakeholderParameter - - - - - <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>AnalysisCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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>The <code>VerificationCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - + + - - - - - <p>The ViewDefinition that owns a certain <code>satisfiedViewpoint</code>.</p> + + + <p>The <code>UseCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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>ViewUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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>ViewpointUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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>RenderingUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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>MetadataUsages</code> that are <code>ownedMembers</code> of this of this <code>Usage</code>.</p> - - + + - - - <p>The naming <code>Feature</code> of a <code>RenderingUsage</code> that is owned via a <code>ViewRenderingMembership</code> and has an <code>ownedReferenceSubsetting</code> is the <code>featureTarget</code> of the <code>referencedFeature</code> of that <code>ownedReferenceSubsetting</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 owningFeatureMembership <> null and - owningFeatureMembership.oclIsKindOf(ViewRenderingMembership) and - ownedReferenceSubsetting <> null then - ownedReferenceSubsetting.referencedFeature.featureTarget -else - self.oclAsType(OccurrenceUsage).namingFeature() -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>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 Usage that owns the <code>nestedAllocation</code>.</p> + + + + + + + + + <p>The Usage that owns the <code>nestedReference</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>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>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 - 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 + owningType <> null and +(owningType.oclIsKindOf(UseCaseDefinition) or + owningType.oclIsKindOf(UseCaseUsage) implies + specializesFromLibrary('UseCases::UseCase::includedUseCases') - - - <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>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 - owningType.oclIsKindOf(ViewDefinition) or -owningType.oclIsKindOf(ViewUsage) + referencedFeatureTarget() <> null implies + referencedFeatureTarget().oclIsKindOf(UseCaseUsage) - - - - <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>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 UseCaseUsages being typed by a certain UseCaseDefinition.</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>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>renderings</code> of a <code>RenderingDefinition</code> are all its <code>usages</code> that are <code>RenderingUsages</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> - + OCL2.0 - rendering = usages->selectByKind(RenderingUsage) + includedUseCase = ownedUseCase-> + selectByKind(IncludeUseCaseUsage). + useCaseIncluded - - - <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>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('Views::Rendering') + specializesFromLibrary('UseCases::UseCase') - - - - <p>The <code>usages</code> of a <code>RenderingDefinition</code> that are <code>RenderingUsages</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>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>A <code>UseCaseUsage</code> is a <code>Usage</code> of a <code>UseCaseDefinition</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>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 - view = usage->selectByKind(ViewUsage) + includedUseCase = ownedUseCase-> + selectByKind(IncludeUseCaseUsage). + useCaseIncluded - - - <p>The <code>satisfiedViewpoints</code> of a <code>ViewDefinition</code> are its <code>ownedRequirements</code> that are composite <code>ViewpointUsages</code>. + + + <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 - satisfiedViewpoint = ownedRequirement-> - selectByKind(ViewpointUsage)-> - select(isComposite) + specializesFromLibrary('UseCases::useCases') - - - <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>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 - viewRendering = - let renderings: OrderedSet(ViewRenderingMembership) = - featureMembership->selectByKind(ViewRenderingMembership) in - if renderings->isEmpty() then null - else renderings->first().referencedRendering - endif + isComposite and owningType <> null and +(owningType.oclIsKindOf(UseCaseDefinition) or + owningType.oclIsKindOf(UseCaseUsage)) implies + specializesFromLibrary('UseCases::UseCase::subUseCases') - - - <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>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 UseCaseDefinition that includes a certain <code>includedUseCase</code>.</p> + + + + + + + + + <p>The UseCaseUsage that includes a certain <code>includedUseCase</code>.</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> + + + + + + + + + <p>The PortConjugation that relates a certain PortDefinition to its ConjugatedPortDefinition (if any).</p> + + + + + + + + + <p>The ConjugatedPortTypings whose <code>conjugatedPortDefinition</code> a certain ConjugatedPortDefinition.</p> + + + + + + + + + <p>The PortUsages that are typed by a certain PortDefinition.</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> + + OCL2.0 - viewCondition = ownedMembership-> - selectByKind(ElementFilterMembership). - condition + conjugatedPortDefinition = +let conjugatedPortDefinitions : OrderedSet(ConjugatedPortDefinition) = + ownedMember->selectByKind(ConjugatedPortDefinition) in +if conjugatedPortDefinitions->isEmpty() then null +else conjugatedPortDefinitions->first() +endif - - - <p>A <code>ViewDefinition</code> must have at most one <code>ViewRenderingMembership</code>.</p> + + + <p>The <code>ownedUsages</code> of a <code>PortDefinition</code> that are not <code>PortUsages</code> must not be composite.</p> - + OCL2.0 - featureMembership-> - selectByKind(ViewRenderingMembership)-> - size() <= 1 + ownedUsage-> + reject(oclIsKindOf(PortUsage))-> + forAll(not isComposite) - - - </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>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('Views::View') + not oclIsKindOf(ConjugatedPortDefinition) implies + ownedMember-> + selectByKind(ConjugatedPortDefinition)-> + size() = 1 - - - - <p>The <code>usages</code> of this <code>ViewDefinition</code> that are <code>ViewUsages</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>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>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> + + OCL2.0 + specializesFromLibrary('Ports::Port') + + + + + + + <p>The <code>ConjugatedPortDefinition</code> that is conjugate to this <code>PortDefinition</code>.</p> - - + + - - - - <p>The ViewDefinition that owns a certain <code>rendering</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 ViewDefinitions that feature a certain ViewUsage.</p> + + + + + + <p>The <code>ConjugatedPortDefinition</code> that is conjugate to the <code>originalPortDefinition</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>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>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>nestedUsages</code> of a <code>PortUsage</code> that are not themselves <code>PortUsages</code> must not be composite.</p> - + OCL2.0 - exposedElement = ownedImport->selectByKind(Expose). - importedMemberships(Set{}).memberElement-> - select(elm | includeAsExposed(elm))-> - asOrderedSet() + nestedUsage-> + reject(oclIsKindOf(PortUsage))-> + forAll(not isComposite) - - - <p>The <code>satisfiedViewpoints</code> of a <code>ViewUsage</code> are its <code>ownedRequirements</code> that are composite <code>ViewpointUsages</code>. + + + <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 - satisfiedViewpoint = ownedRequirement-> - selectByKind(ViewpointUsage)-> - select(isComposite) + specializesFromLibrary('Ports::ports') - - - <p>The <code>viewConditions</code> of a <code>ViewUsage</code> are the <code>conditions</code> of its owned <code>ElementFilterMemberships</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 - viewCondition = ownedMembership-> - selectByKind(ElementFilterMembership). - condition + isComposite and owningType <> null and +(owningType.oclIsKindOf(PortDefinition) or + owningType.oclIsKindOf(PortUsage)) implies + specializesFromLibrary('Ports::Port::subports') - - - <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>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 - viewRendering = - let renderings: OrderedSet(ViewRenderingMembership) = - featureMembership->selectByKind(ViewRenderingMembership) in - if renderings->isEmpty() then null - else renderings->first().referencedRendering - endif + owningType = null or +not owningType.oclIsKindOf(PortDefinition) and +not owningType.oclIsKindOf(PortUsage) implies + isReference - - - <p>A <code>ViewUsage</code> must have at most one <code>ViewRenderingMembership</code>.</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 - featureMembership-> - selectByKind(ViewRenderingMembership)-> - size() <= 1 + owningType <> null and +(owningType.oclIsKindOf(PartDefinition) or + owningType.oclIsKindOf(PartUsage)) implies + specializesFromLibrary('Parts::Part::ownedPorts') - - - <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>occurrenceDefinitions</code> of this <code>PortUsage</code>, which must all be <code>PortDefinitions<code>.</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> + + + + + + + + + <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> - + OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(ViewDefinition) or - owningType.oclIsKindOf(ViewUsage)) implies - specializesFromLibrary('Views::View::subviews') + portDefinition = conjugatedPortDefinition.originalPortDefinition - - - - <p>The <code>ViewDefinition</code> that is the <code>definition</code> of this <code>ViewUsage</code>.</p> + + + + <p>The <code>originalPortDefinition</code> of the <code>conjugatedPortDefinition</code> of this <code>ConjugatedPortTyping</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>type</code> of this <code>ConjugatedPortTyping</code> considered as a <code>FeatureTyping</code>, which must be a <code>ConjugatedPortDefinition</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>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>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> + + OCL2.0 + ownedPortConjugator.originalPortDefinition = originalPortDefinition + + + + + <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>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>PortConjugation</code> that is the <code>ownedConjugator</code> of this <code>ConjugatedPortDefinition</code>, linking it to its <code>originalPortDefinition</code>.</p> - - + + - - - <p>Determine whether the given <code>element</code> meets all the owned and inherited <code>viewConditions</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 metadataFeatures: Sequence(AnnotatingElement) = - element.ownedAnnotation.annotatingElement-> - select(oclIsKindOf(MetadataFeature)) in -self.membership->selectByKind(ElementFilterMembership). - condition->forAll(cond | - metadataFeatures->exists(elem | - cond.checkCondition(elem))) + let originalName : String = originalPortDefinition.name in +if originalName = null then null +else '~' + originalName +endif - - - + + + + diff --git a/org.omg.sysml/model/SysML_clean.genmodel b/org.omg.sysml/model/SysML_clean.genmodel index 521babe14..f067f3363 100644 --- a/org.omg.sysml/model/SysML_clean.genmodel +++ b/org.omg.sysml/model/SysML_clean.genmodel @@ -47,15 +47,6 @@ - - - - - - - - - @@ -66,18 +57,198 @@ - - - + + + + + + + + + + + + - - + + + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Relationship/relatedElement"/> - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Relationship/target"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -205,226 +376,61 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Type/intersectingType"/> + + - - - - - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Type/featureMembership"/> + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Type/differencingType"/> + - - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Type/directedFeature"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + - - + + + + + + @@ -591,51 +598,45 @@ - - + + - + + + + + + + - - - + + - - + + + 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#//Flow/payloadType"/> - - - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Flow/targetInputFeature"/> + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//Flow/sourceOutputFeature"/> + + + - - @@ -660,33 +661,46 @@ - - - - - - - - + + + + + + + + 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#//BooleanExpression/predicate"/> + + + + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//ParameterMembership/ownedMemberParameter"/> + + + + + + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//ResultExpressionMembership/ownedResultExpression"/> - - - - + @@ -703,26 +717,40 @@ - - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//ObjectiveMembership/ownedObjectiveRequirement"/> - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//RequirementUsage/requirementDefinition"/> + + + + + + + + - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//ConstraintUsage/constraintDefinition"/> - - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//OccurrenceUsage/occurrenceDefinition"/> + + + - @@ -871,26 +899,15 @@ - - - - - - - - - - - - + + - - + + + @@ -901,6 +918,9 @@ + + + @@ -921,6 +941,23 @@ + + + + + + + + + + + + + + + @@ -945,18 +982,6 @@ - - - - - - - - - - - @@ -1000,28 +1025,11 @@ - - - - - - - - - - - - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//ConcernUsage/concernDefinition"/> + @@ -1039,11 +1047,6 @@ propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//RequirementDefinition/framedConcern"/> - - - - @@ -1147,31 +1150,13 @@ - - - - - - - + - - - - - - - - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//AssertConstraintUsage/assertedConstraint"/> - - + + 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"/> + + + + - - + + + - + + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//RequirementConstraintMembership/ownedConstraint"/> + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//RequirementConstraintMembership/referencedConstraint"/> + + + + + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//FlowDefinition/flowEnd"/> + + + + + + + + + + + + + + + - - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//AssignmentActionUsage/targetArgument"/> + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//AssignmentActionUsage/valueExpression"/> + + @@ -1217,40 +1242,42 @@ - + + + + + + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//LoopActionUsage/bodyAction"/> - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//WhileLoopActionUsage/whileArgument"/> + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//WhileLoopActionUsage/untilArgument"/> - - + + 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#//IfActionUsage/elseAction"/> + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//IfActionUsage/thenAction"/> + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//IfActionUsage/ifArgument"/> - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//TerminateActionUsage/terminatedOccurrenceArgument"/> - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//ActorMembership/ownedActorParameter"/> - - - - - - - - - - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//StakeholderMembership/ownedStakeholderParameter"/> - - - - - + - + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//SubjectMembership/ownedSubjectParameter"/> - + - - - + 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#//IncludeUseCaseUsage/useCaseIncluded"/> - - - - + + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//ConjugatedPortTyping/portDefinition"/> + propertySortChoices="true" ecoreFeature="ecore:EReference sysml_clean.ecore#//ConjugatedPortTyping/conjugatedPortDefinition"/> diff --git a/org.omg.sysml/model/SysML_only.uml b/org.omg.sysml/model/SysML_only.uml index 1fcb75229..2b8c2507a 100644 --- a/org.omg.sysml/model/SysML_only.uml +++ b/org.omg.sysml/model/SysML_only.uml @@ -1,1678 +1,1556 @@ - - - - <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>The AnalysisCaseDefinitions that have a certain Expression as their <code>resultExpression</code>.</p> - - OCL2.0 - specializesFromLibrary('Items::Item') - - - - - - + + + + + - - - <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 AnalysisCaseUsages that have a certain Expression as their <code>resultExpression</code>.</p> + + + + + + + + + <p>An <code>AnalysisCaseUsage</code> is a <code>Usage</code> of an <code>AnalysisCaseDefinition</code>.</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>resultExpression</code> of a <code>AnalysisCaseUsage</code> is the <code>ownedResultExpression</code> of its <code>ResultExpressionMembership</code>, if any.</p> - + OCL2.0 - itemDefinition = occurrenceDefinition->selectByKind(Structure) + resultExpression = + let results : OrderedSet(ResultExpressionMembership) = + featureMembersip-> + selectByKind(ResultExpressionMembership) in + if results->isEmpty() then null + else results->first().ownedResultExpression + endif - - - <p>An <code>ItemUsage</code> must directly or indirectly specialize the Systems Model Library <code>ItemUsage</code> <em><code>items</code></em>.</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('Items::items') + specializesFromLibrary('AnalysisCases::analysisCases') - - - <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> + + + <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(ItemDefinition) or - owningType.oclIsKindOf(ItemUsage)) implies - specializesFromLibrary('Items::Item::subitem') + (owningType.oclIsKindOf(AnalysisCaseDefinition) or + owningType.oclIsKindOf(AnalysisCaseUsage)) implies + specializesFromLibrary('AnalysisCases::AnalysisCase::subAnalysisCases') - - - - <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>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>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>AnalysisCaseDefinition</code> is a <code>CaseDefinition</code> for the case of carrying out an analysis.</p> - - - <p>An <code>EnumerationDefinition</code> must be a variation.</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 - isVariation + resultExpression = + let results : OrderedSet(ResultExpressionMembership) = + featureMembersip-> + selectByKind(ResultExpressionMembership) in + if results->isEmpty() then null + else results->first().ownedResultExpression + endif - - - - <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>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>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> + + 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>The EnumerationDefinition that owns a certain <code>enumeratedValue</code>.</p> - - - - - - - - - <p>The EnumerationUsages that are typed by a certain EnumerationDefinition.</p> + + + + <p>The AnalysisCaseUsages being typed by a certain AnalysisCaseDefinition.</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>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 TransitionUsage that is triggered by a certain AcceptActionUsage.</p> + + OCL2.0 + specializesFromLibrary('Allocations::allocations') + + + + + + <p>The <code>AllocationDefinitions</code> that are the types of this <code>AllocationUsage</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>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>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>allocations</code> of an <code>AllocationDefinition</code> are all its <code>usages</code> that are <code>AllocationUsages</code>.</p> - + OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(PartDefinition) or - owningType.oclIsKindOf(PartUsage)) implies - specializesFromLibrary('Parts::Part::exhibitedStates') + allocation = usage->selectAsKind(AllocationUsage) - - - <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>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 - referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(StateUsage) + specializesFromLibrary('Allocations::Allocation') - - - - - <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>AllocationUsages</code> that refine the allocation mapping defined by this <code>AllocationDefinition</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 AllocationUsages that have a certain AllocationDefinition as their <code>allocationDefinition</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 AllocationDefinitions that feature a certain <code>allocation</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>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 - isParallel implies - nestedAction.incomingTransition->isEmpty() and - nestedAction.outgoingTransition->isEmpty() + nestedUsage-> + reject(oclIsKindOf(PortUsage))-> + forAll(not isComposite) - - - <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>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 - isSubstateUsage(false) implies - specializesFromLibrary('States::StateAction::exclusiveStates') + specializesFromLibrary('Ports::ports') - - - <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>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 - exitAction = - let exitMemberships : Sequence(StateSubactionMembership) = - ownedMembership-> - selectByKind(StateSubactionMembership)-> - select(kind = StateSubactionKind::exit) in - if exitMemberships->isEmpty() then null - else exitMemberships->at(1) - endif + isComposite and owningType <> null and +(owningType.oclIsKindOf(PortDefinition) or + owningType.oclIsKindOf(PortUsage)) implies + specializesFromLibrary('Ports::Port::subports') - - - <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>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('States::stateActions') + owningType = null or +not owningType.oclIsKindOf(PortDefinition) and +not owningType.oclIsKindOf(PortUsage) implies + isReference - - - <p>A <code>StateUsage</code> must not have more than one owned <code>StateSubactionMembership</code> of each <code>kind</code>.</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 - ownedMembership-> - selectByKind(StateSubactionMembership)-> - isUnique(kind) + owningType <> null and +(owningType.oclIsKindOf(PartDefinition) or + owningType.oclIsKindOf(PartUsage)) implies + specializesFromLibrary('Parts::Part::ownedPorts') - - - <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>occurrenceDefinitions</code> of this <code>PortUsage</code>, which must all be <code>PortDefinitions<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>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 - isSubstateUsage(true) implies - specializesFromLibrary('States::StateAction::substates') + ownedPortConjugator.originalPortDefinition = originalPortDefinition - - - <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>A <code>ConjugatedPortDefinition</code> must not itself have a <code>conjugatedPortDefinition</code>. - + OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(PartDefinition) or - owningType.oclIsKindOf(PartUsage)) implies - specializesFromLibrary('Parts::Part::ownedStates') + conjugatedPortDefinition = null - - - - <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>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>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>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 original <code>PortDefinition</code> for this <code>ConjugatedPortDefinition</code>, which is the <code>owningNamespace</code> of the <code>ConjugatedPortDefinition</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>PortConjugation</code> that is the <code>ownedConjugator</code> of this <code>ConjugatedPortDefinition</code>, linking it to its <code>originalPortDefinition</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>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 - 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) + let originalName : String = originalPortDefinition.name in +if originalName = null then null +else '~' + originalName +endif - - - - - + + + + + - - - <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>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>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> + + + <p>The <code>conjugatedPortDefinition</code> of a <code>PortDefinition</code> is the <code>ownedMember</code> that is a <code>ConjugatedPortDefinition</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') + conjugatedPortDefinition = +let conjugatedPortDefinitions : OrderedSet(ConjugatedPortDefinition) = + ownedMember->selectByKind(ConjugatedPortDefinition) in +if conjugatedPortDefinitions->isEmpty() then null +else conjugatedPortDefinitions->first() +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>ownedUsages</code> of a <code>PortDefinition</code> that are not <code>PortUsages</code> must not be composite.</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') - + ownedUsage-> + reject(oclIsKindOf(PortUsage))-> + forAll(not isComposite) - - - <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>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('Actions::transitionActions') + not oclIsKindOf(ConjugatedPortDefinition) implies + ownedMember-> + selectByKind(ConjugatedPortDefinition)-> + size() = 1 - - - <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>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 - source = - let sourceFeature : Feature = sourceFeature() in - if sourceFeature = null then null - else sourceFeature.featureTarget.oclAsType(ActionUsage) + specializesFromLibrary('Ports::Port') - - - <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>ConjugatedPortDefinition</code> that is conjugate to this <code>PortDefinition</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 PortConjugation that relates a certain PortDefinition to its ConjugatedPortDefinition (if any).</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>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>PortDefinition</code> being conjugated.</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>The <code>ConjugatedPortDefinition</code> that is conjugate to the <code>originalPortDefinition</code>.</p> - - OCL2.0 - let successions : Sequence(Successions) = - ownedMember->selectByKind(Succession) in -successions->notEmpty() and -successions->at(1).targetFeature.featureTarget-> - forAll(oclIsKindOf(ActionUsage)) - - - - - <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 PortUsages that are typed by a certain PortDefinition.</p> - + + + + + + + + <p>The ConjugatedPortTypings whose <code>portDefinition</code> is a certain PortDefinition.</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> + + OCL2.0 - guardExpression = ownedFeatureMembership-> - selectByKind(TransitionFeatureMembership)-> - select(kind = TransitionFeatureKind::trigger).transitionFeature-> - selectByKind(Expression) + portDefinition = conjugatedPortDefinition.originalPortDefinition - - - <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>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>The ConjugatedPortTypings whose <code>conjugatedPortDefinition</code> a certain ConjugatedPortDefinition.</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 - triggerAction->forAll(specializesFromLibrary('Actions::TransitionAction::accepter') and -guardExpression->forAll(specializesFromLibrary('Actions::TransitionAction::guard') and -effectAction->forAll(specializesFromLibrary('Actions::TransitionAction::effect')) + specializesFromLibrary('Flows::messages') - - - <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>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 - triggerAction = ownedFeatureMembership-> - selectByKind(TransitionFeatureMembership)-> - select(kind = TransitionFeatureKind::trigger).transitionFeatures-> - selectByKind(AcceptActionUsage) + ownedEndFeatures->notEmpty() implies + specializesFromLibrary('Flows::flows') - - - <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>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> - - OCL2.0 - succession.sourceFeature = source - - - - - <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 <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 - ownedMember->selectByKind(BindingConnector)->exists(b | - b.relatedFeatures->includes(source) and - b.relatedFeatures->includes(inputParameter(1))) + specializesFromLibrary('Flows::successionFlows') - - - <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>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 - triggerAction->notEmpty() implies - let payloadParameter : Feature = inputParameter(2) in - payloadParameter <> null and - payloadParameter.subsetsChain(triggerAction->at(1), triggerPayloadParameter()) + specializesFromLibrary('Flows::MessageAction') - - - <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>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 - ownedMember->selectByKind(BindingConnector)->exists(b | - b.relatedFeatures->includes(succession) and - b.relatedFeatures->includes(resolveGlobal( - 'TransitionPerformances::TransitionPerformance::transitionLink'))) + flowEnd->size() = 2 implies + specializesFromLibrary('Flows::Message') - - - <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>A <code>FlowDefinition</code> may not have more than two <code>flowEnds</code>.</p> - + OCL2.0 - if triggerAction->isEmpty() then - inputParameters()->size() >= 1 -else - inputParameters()->size() >= 2 -endif - + flowEnd->size() <= 2 - - - <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>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>FlowDefinitions<code> that have a certain Usage as <code>flowEnd</code>.</p> + + + + + + + + + + <p>The Definition that owns the <code>ownedCalculation</code>.</p> + + + + + + + + + <p>The Usage in which the <code>nestedCalculation<code> is nested.</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 - succession = ownedMember->selectByKind(Succession)->at(1) + specializesFromLibrary('Calculations::Calculation') - - - <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>calculations</code> of a <code>CalculationDefinition</code> are those of its <code>actions</code> that are <code>CalculationUsages</code>.</p> - + OCL2.0 - source <> null and not source.oclIsKindOf(StateUsage) implies - triggerAction->isEmpty() + calculation = action->selectByKind(CalculationUsage) - - - - <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>actions</code> of this <code>CalculationDefinition</code> that are <code>CalculationUsages</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 CalculationUsage being typed by a certain Function.</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>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> - - - - - - - <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 + 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>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>A <code>CalculationUsage</code> is not model-level evaluable.</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 + false - + - - + + + + + + - - - - <p>The StateDefinitions featuring a certain StateUsage.</p> + + + + <p>The CalculationDefinitions that feature a certain CalculationUsage.</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>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>The <code>owningType</code> of a <code>StateSubactionMembership</code> must be a <code>StateDefinition</code> or a <code>StateUsage</code>.</p> + + + <p>A <code>ForkNode</code> may have at most one incoming <code>Succession</code>.</p> - + OCL2.0 - owningType.oclIsKindOf(StateDefinition) or -owningType.oclIsKindOf(StateUsage) + targetConnector->selectByKind(Succession)->size() <= 1 - - - - - - <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>The TransitionFeatureMembership that owns a certain Step (if any).</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 + specializesFromLibrary('Actions::Action::forks') + + + - - - <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>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>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 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>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>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 + 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> - + OCL2.0 - kind = TransitionFeatureKind::trigger implies - transitionFeature.oclIsKindOf(AcceptActionUsage) + untilArgument = + let parameter : Feature = inputParameter(3) in + if parameter <> null and parameter.oclIsKindOf(Expression) then + parameter.oclAsType(Expression) + else + null + endif + - - - <p>The <code>owningType</code> of a <code>TransitionFeatureMembership</code> must be a <code>TransitionUsage</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 - owningType.oclIsKindOf(TransitionUsage) + specializesFromLibrary('Actions::whileLoopActions') - - - <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>whileArgument</code> of a <code>WhileLoopActionUsage</code> is its first input <code>parameter</code>, which must be an <code>Expression</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) + whileArgument = + let parameter : Feature = inputParameter(1) in + if parameter <> null and parameter.oclIsKindOf(Expression) then + parameter.oclAsType(Expression) + else + null + endif + - - - <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>A <code>WhileLoopActionUsage</code> must have at least two owned <code>input</code> <code>parameters</code>.</p> - + OCL2.0 - kind = TransitionFeatureKind::effect implies - transitionFeature.oclIsKindOf(ActionUsage) + inputParameters()->size() >= 2 - - - - - - <p>Whether this <code>TransitionFeatureMembership </code> is for a <code>trigger</code>, <code>guard</code> or <code>effect</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> + + + + - - - <p>The <code>Step</code> that is the <code>ownedMemberFeature</code> of this <code>TransitionFeatureMembership</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 StateDefinitions with a certain <tt>exitAction</tt>.</p> + + + + <p>The AssignmentActionUsage that has a certain Expression as its <code>targetArgument</code>.</p> - - - - - - - - <p>The StateUsages with a certain <tt>exitAction</tt>.</p> - - - - - - - - - <p>The StateUsages with a certain <tt>doAction</tt>.</p> - - - - - - - - - <p>The Transition that owns a certain Succession.</p> - - - - - - - - - - <p>The StateSubactionMembership that is the owner of a certain ActionUsage (if any).</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>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>StateDefinition</code> must directly or indirectly specialize the <code>StateDefinition</code> <em><code>States::StateAction</code></em> from the Systems Model Library.</p> + + + <p>An <code>AcceptUsageAction</code> must have at least one 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('States::StateAction') + inputParameters()->notEmpty() - - - <p>A <code>StateDefinition</code> must not have more than one owned <code>StateSubactionMembership</code> of each <code>kind</code>.</p> + + + <p>The <code>receiverArgument</code> of an <code>AcceptUsageAction</code> is its second argument <code>Expression</code>.</p> - + OCL2.0 - ownedMembership-> - selectByKind(StateSubactionMembership)-> - isUnique(kind) + receiverArgument = argument(2) - - - <p>The <code>states</code> of a <code>StateDefinition</code> are those of its <code>actions</code> that are <code>StateUsages</code>.</p> + + + <p>The <code>payloadArgument</code> of an <code>AcceptUsageAction</code> is its first argument <code>Expression</code>.</p> - + OCL2.0 - state = action->selectByKind(StateUsage) + payloadArgument = argument(1) - - - <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>payloadParameter</code> of an <code>AcceptActionUsage<code> is its first <code>parameter</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 + payloadParameter = + if parameter->isEmpty() then null + else parameter->first() 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>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 - entryAction = - let entryMemberships : Sequence(StateSubactionMembership) = - ownedMembership-> - selectByKind(StateSubactionMembership)-> - select(kind = StateSubactionKind::entry) in - if entryMemberships->isEmpty() then null - else entryMemberships->at(1) - endif + not isTriggerAction() implies + specializesFromLibrary('Actions::acceptActions') - - - <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 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> - + OCL2.0 - isParallel implies - ownedAction.incomingTransition->isEmpty() and - ownedAction.outgoingTransition->isEmpty() + isSubactionUsage() and not isTriggerAction() implies + specializesFromLibrary('Actions::Action::acceptSubactions') - - - <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>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 - exitAction = - let exitMemberships : Sequence(StateSubactionMembership) = - ownedMembership-> - selectByKind(StateSubactionMembership)-> - select(kind = StateSubactionKind::exit) in - if exitMemberships->isEmpty() then null - else exitMemberships->at(1) - endif + isTriggerAction() implies + specializesFromLibrary('Actions::TransitionAction::accepter') - - - - <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>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 <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> + + 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 <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>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>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>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 StateUsages with a certain <tt>entryAction</tt>.</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 StateDefinitions with a certain <tt>entryAction</tt>.</p> - - - - - - - - - <p>The TransitionUsage outgoing from a certain source <tt>ActionUsage</tt>.</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><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 that the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is a <code>guardExpression</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>Indicates that the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is an <code>effectAction</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 TransitionUsage that has a certain <tt>effectAction</tt>.</p> - - - - - - - - - - <p>The ExhibitStateUsages that have a certain StateUsage as their <tt>exhibitedState</tt>.</p> - - - - - - - - - <p>The TransitionUsage that is guarded by a certain Expression.</p> - - - - - - - - - - <p>The StateDefinitions with a certain <tt>doAction</tt>.</p> - - - - - - - - - <p>The UseCaseUsage that includes a certain <code>includedUseCase</code>.</p> - - - - - - - - - <p>The UseCaseUsages being typed by a certain UseCaseDefinition.</p> + + + + <p>The ActionUsages being typed by a certain Behavior.</p> - - + + + + - - - <p>A <code>UseCaseUsage</code> is a <code>Usage</code> of a <code>UseCaseDefinition</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>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>The <code>seqArgument</code> of a <code>ForLoopActionUsage</code> is its first argument <code>Expression</code>.</p> - + OCL2.0 - includedUseCase = ownedUseCase-> - selectByKind(IncludeUseCaseUsage). - useCaseIncluded + seqArgument = argument(1) + - - - <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>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 - specializesFromLibrary('UseCases::useCases') + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::forLoops') - - - <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>loopVariable</code> of a <code>ForLoopActionUsage</code> must redefine the <code>ActionUsage</code> <code><em>Actions::ForLoopAction::var</em></code>.</p> - + OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(UseCaseDefinition) or - owningType.oclIsKindOf(UseCaseUsage)) implies - specializesFromLibrary('UseCases::UseCase::subUseCases') + loopVariable <> null and +loopVariable.redefinesFromLibrary('Actions::ForLoopAction::var') - - - - <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>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 UseCaseDefinition that includes a certain <code>includedUseCase</code>.</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> - - - - - - - <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 + 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 - owningType <> null and -(owningType.oclIsKindOf(UseCaseDefinition) or - owningType.oclIsKindOf(UseCaseUsage) implies - specializesFromLibrary('UseCases::UseCase::includedUseCases') + ownedFeature->notEmpty() and +ownedFeature->at(1).oclIsKindOf(ReferenceUsage) + - - - <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 <code>ForLoopActionUsage</code> must have two owned <code>input</code> <code>parameters</code>.</p> - + OCL2.0 - referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(UseCaseUsage) + inputParameters()->size() = 2 - - - - - <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>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>The IncludeUseCaseUsages that have a certain UseCaseUsage as their <code>includedUseCase</code>.</p> + + + + <p>The AcceptActionUsage that has a certain Expression as its <code>receiverArgument</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>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>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>bodyAction</code> of a <code>LoopActionUsage</code> is its second input <code>parameter</code>, which must be an <code>Action</code>.</p> - + OCL2.0 - includedUseCase = ownedUseCase-> - selectByKind(IncludeUseCaseUsage). - useCaseIncluded + bodyAction = + let parameter : Feature = inputParameter(2) in + if parameter <> null and parameter.oclIsKindOf(Action) then + parameter.oclAsType(Action) + else + null + 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>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>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 - specializesFromLibrary('UseCases::UseCase') + referencedFeatureTarget() <> null implies + referencedFeatureTarget().oclIsKindOf(ActionUsage) - - - - <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>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>A <code>SuccessionFlowUsage</code> is a <code>FlowUsage</code> that is also a KerML <code>SuccessionFlow</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>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>MergeNode</code> may have at most one outgoing <code>Succession</code>.</p> - + OCL2.0 - specializesFromLibrary('Flows::successionFlows') + sourceConnector->selectAsKind(Succession)->size() <= 1 - - - - - - - - - <p>The <code>FlowDefinitions<code> that have a certain Usage as <code>flowEnd</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>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 + 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 - specializesFromLibrary('Flows::messages') + targetConnector->selectByKind(Succession)-> + forAll(subsetsChain(self, + resolveGlobal('ControlPerformances::MergePerformance::incomingHBLink'))) - - - <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>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 - ownedEndFeatures->notEmpty() implies - specializesFromLibrary('Flows::flows') + specializesFromLibrary('Actions::Action::merges') - - - - - - - - <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 <code>WhileLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>whileArgument</code>.</p> - - - - - - + + + - - - - <p>The <code>FlowUsages<code> that have a certain <code>Interaction</code> as their <code>flowDefinition</code>.</p> + + + + <p>The <code>IfActionUsage</code> that has a certain <code>Expression</code> as its <code>ifArgument</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>The <code>LoopActionUsage</code> that has a certain <code>ActionUsage</code> as its <code>bodyAction</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>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>A <code>JoinNode</code> may have at most one outgoing <code>Succession</code>.</p> - + OCL2.0 - specializesFromLibrary('Flows::MessageAction') + sourceConnector->selectByKind(Succession)->size() <= 1 - - - <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>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 - flowEnd->size() = 2 implies - specializesFromLibrary('Flows::Message') + specializesFromLibrary('Actions::Action::join') - - - <p>A <code>FlowDefinition</code> may not have more than two <code>flowEnds</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 - flowEnd->size() <= 2 + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::subactions') - - - - - - - <p>The <code>Usages</code> that define the things related by the <code>FlowDefinition</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> - - - - - - - - - <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>The <code>resultExpression</code> of a <code>AnalysisCaseUsage</code> is the <code>ownedResultExpression</code> of its <code>ResultExpressionMembership</code>, if any.</p> - - + OCL2.0 - resultExpression = - let results : OrderedSet(ResultExpressionMembership) = - featureMembersip-> - selectByKind(ResultExpressionMembership) in - if results->isEmpty() then null - else results->first().ownedResultExpression - endif + specializesFromLibrary('Actions::actions') - - - <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 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 - specializesFromLibrary('AnalysisCases::analysisCases') + isComposite and owningType <> null and +(owningType.oclIsKindOf(PartDefinition) or + owningType.oclIsKindOf(PartUsage)) implies + specializesFromLibrary('Parts::Part::ownedActions') - - - <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>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 - isComposite and owningType <> null and - (owningType.oclIsKindOf(AnalysisCaseDefinition) or - owningType.oclIsKindOf(AnalysisCaseUsage)) implies - specializesFromLibrary('AnalysisCases::AnalysisCase::subAnalysisCases') + 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>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>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>Expression</code> used to compute the <code>result</code> of the <code>AnalysisCaseUsage</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>An <code>AnalysisCaseDefinition</code> is a <code>CaseDefinition</code> for the case of carrying out an analysis.</p> + + + + + + + + + + <p>The <code>SendActionUsage</code> that has a certain <code>Expression</code> as its <code>senderArgument</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>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 that have a certain Expression as their <code>resultExpression</code>.</p> + + + + The <code>ForLoopActionUsage</code> that has a certain <code>ReferenceUsage</code> as its <code>loopVariable</code>. - - - - - - - - - <p>The AssignmentActionUsages that gave a certain <code>referent</code> Expression.</p> - - - - + + - - - - <p>The <code>TerminateActionUsage</code> that has a certain <code>Expression</code> as its <code>terminatedOccurrenceArgument</code>.</p> + + + + <p>The AssignmentActionUsage that has a certain Expression as its <code>valueArgument</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> - - - 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> - - - 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 - 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> - - - 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>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>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 <code>IfActionUsage</code> that has a certain <code>Expression</code> as its <code>ifArgument</code>.</p> + + + + <p>The <code>IfActionUsage</code> that has a certain <code>ActionUsage</code> as its <code>thenAction</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><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>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> @@ -1753,259 +1631,50 @@ 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>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>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>TerminateActionUsage</code> must directly or indirectly specialize the <code>ActionUsage</code> <em><code>Actions::terminateActions</code></em> from the Systems Modeling 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('Actions::terminateActions') + sourceConnector->selectByKind(Succession)-> + collect(connectorEnd->at(1).multiplicity)-> + forAll(sourceMult | + multiplicityHasBounds(sourceMult, 1, 1)) - - - <p>The <code>terminatedOccurrenceArgument</code> of a <code>TerminateActionUsage</code> is its first argument.</p> + + + <p>The <code>owningType</code> of a <code>ControlNode</code> must be an <code>ActionDefinition</code> or <code>ActionUsage</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> - - - 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>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>ForLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>seqArgument</code>.</p> - - - - - - - - - <p>The IfActionUsage that has a certain ActionUsage as its <code>elseAction</code>.</p> - - - - - - - - - <p>The <code>IfActionUsage</code> that has a certain <code>ActionUsage</code> as its <code>thenAction</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 - 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>The PerformActionUsages that have a certain ActionUsage as their <code>performedAction</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 - 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 - owningType <> null and -(owningType.oclIsKindOf(ActionDefinition) or - owningType.oclIsKindOf(ActionUsage)) + owningType <> null and +(owningType.oclIsKindOf(ActionDefinition) or + owningType.oclIsKindOf(ActionUsage)) @@ -2070,353 +1739,331 @@ 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 Activities that feature a certain ActionUsage.</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>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>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 - bodyAction = - let parameter : Feature = inputParameter(2) in - if parameter <> null and parameter.oclIsKindOf(Action) then - parameter.oclAsType(Action) - else - null - endif - + specializesFromLibrary('Actions::terminateActions') - - - - <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>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 one 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 <code>terminatedOccurrenceArgument</code> of a <code>TerminateActionUsage</code> is its first argument.</p> - + OCL2.0 - inputParameters()->notEmpty() + terminatedOccurrenceArgument = argument(1) - - - <p>The <code>receiverArgument</code> of an <code>AcceptUsageAction</code> is its second argument <code>Expression</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 - receiverArgument = argument(2) + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::terminateSubactions') - - - <p>The <code>payloadArgument</code> of an <code>AcceptUsageAction</code> is its first argument <code>Expression</code>.</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>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> + + OCL2.0 - payloadArgument = argument(1) + thenAction = + let parameter : Feature = inputParameter(2) in + if parameter <> null and parameter.oclIsKindOf(ActionUsage) then + parameter.oclAsType(ActionUsage) + else + null + endif - - - <p>The <code>payloadParameter</code> of an <code>AcceptActionUsage<code> is its first <code>parameter</code>.</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> - + OCL2.0 - payloadParameter = - if parameter->isEmpty() then null - else parameter->first() endif + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::ifSubactions') - - - <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>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 - not isTriggerAction() implies - specializesFromLibrary('Actions::acceptActions') + if elseAction = null then + specializesFromLibrary('Actions::ifThenActions') +else + specializesFromLibrary('Actions::ifThenElseActions') +endif - - - <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 <code>ifArgument</code> of an <code>ifActionUsage</code> is its first <code>parameter</code>, which must be an <code>Expression</code>.</p> - + OCL2.0 - isSubactionUsage() and not isTriggerAction() implies - specializesFromLibrary('Actions::Action::acceptSubactions') + ifArgument = + let parameter : Feature = inputParameter(1) in + if parameter <> null and parameter.oclIsKindOf(Expression) then + parameter.oclAsType(Expression) + else + null + endif - - - <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 <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 - isTriggerAction() implies - specializesFromLibrary('Actions::TransitionAction::accepter') + elseAction = + let parameter : Feature = inputParameter(3) in + if parameter <> null and parameter.oclIsKindOf(ActionUsage) then + parameter.oclAsType(ActionUsage) + else + null + endif - - - <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>An <code>IfActionUsage</code> must have at least two owned <code>input</code> <code>parameters</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))) + inputParameters()->size() >= 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 <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>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 <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>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 <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>Check if this <code>AcceptActionUsage</code> is the <code>triggerAction</code> of a <code>TransitionUsage</code>.</p> + + + + + <p>The <code>TerminateActionUsage</code> that has a certain <code>Expression</code> as its <code>terminatedOccurrenceArgument</code>.</p> - - - OCL2.0 - owningType <> null and -owningType.oclIsKindOf(TransitionUsage) and -owningType.oclAsType(TransitionUsage).triggerAction->includes(self) - - - - - - + + + - - - <p>A <code>DecisionNode</code> is a <code>ControlNode</code> that makes a selection from its outgoing <code>Successions</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>DecisionNode</code> may have at most one incoming <code>Succession</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 - targetConnector->selectByKind(Succession)->size() <= 1 + specializesFromLibrary('Actions::assignmentActions') - - - <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 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 - sourceConnector->selectAsKind(Succession)-> - collect(connectorEnd->at(2))-> - forAll(targetMult | - multiplicityHasBounds(targetMult, 0, 1)) + let targetParameter : Feature = inputParameter(1) in +targetParameter <> null and +targetParameter.ownedFeature->notEmpty() and +targetParameter.ownedFeature->first(). + redefinesFromLibrary('AssignmentAction::target::startingAt') - - - <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>valueExpression</code> of a <code>AssignmentActionUsage</code> is its second argument <code>Expression</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'))) + valueExpression = argument(2) - - - - - <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> + + + <p>The <code>targetArgument</code> of a <code>AssignmentActionUsage</code> is its first argument <code>Expression</code>.</p> - + OCL2.0 - sourceConnector->selectByKind(Succession)->size() <= 1 + targetArgument = argument(1) - - - <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>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('Actions::Action::join') + isSubactionUsage() implies + specializesFromLibrary('Actions::Action::assignments') - - - - - - <p>The AssignmentActionUsage that has a certain Expression as its <code>valueArgument</code>.</p> - - - - - - - - - <p>The AcceptActionUsage that has a certain Expression as its <code>receiverArgument</code>.</p> - - - - - - - - - <p>The <code>SendActionUsage</code> that has a certain <code>Expression<code> as its <code>receiverArgument</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 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 - isSubactionUsage() implies - specializesFromLibrary('Actions::Action::whileLoops') + 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>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 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 - untilArgument = - let parameter : Feature = inputParameter(3) in - if parameter <> null and parameter.oclIsKindOf(Expression) then - parameter.oclAsType(Expression) - else - null - endif - + 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>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>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 - specializesFromLibrary('Actions::whileLoopActions') + 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>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>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 - whileArgument = - let parameter : Feature = inputParameter(1) in - if parameter <> null and parameter.oclIsKindOf(Expression) then - parameter.oclAsType(Expression) - else - null - endif - + ownedMembership->exists( + not oclIsKindOf(OwningMembership) and + memberElement.oclIsKindOf(Feature) and + not memberElement.oclIsKindOf(MetadataFeature)) - - - <p>A <code>WhileLoopActionUsage</code> must have at least two owned <code>input</code> <code>parameters</code>.</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 - inputParameters()->size() >= 2 + referent <> null implies referent.featureTarget.isVariable - - - - <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 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, 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>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>receiverArgument</code>.</p> + + + + + @@ -2426,176 +2073,61 @@ owningType.oclAsType(TransitionUsage).triggerAction->includes(self) - - - - <p>The <code>SendActionUsage</code> that has a certain <code>Expression</code> as its <code>itemsArgument</code>.</p> - - - - - - - - - <p>The <code>LoopActionUsage</code> that has a certain <code>ActionUsage</code> as its <code>bodyAction</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 <code>DecisionNode</code> is a <code>ControlNode</code> that makes a selection from its outgoing <code>Successions</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>A <code>DecisionNode</code> may have at most one incoming <code>Succession</code>.</p> - + OCL2.0 - isSubactionUsage() implies - specializesFromLibrary('Actions::Action::subactions') + targetConnector->selectByKind(Succession)->size() <= 1 - - - <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>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 - specializesFromLibrary('Actions::actions') + sourceConnector->selectAsKind(Succession)-> + collect(connectorEnd->at(2))-> + forAll(targetMult | + multiplicityHasBounds(targetMult, 0, 1)) - - - <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 <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 - isComposite and owningType <> null and -(owningType.oclIsKindOf(PartDefinition) or - owningType.oclIsKindOf(PartUsage)) implies - specializesFromLibrary('Parts::Part::ownedActions') + specializesFromLibrary('Actions::Action::decisions') - - - <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>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 - 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 + sourceConnector->selectByKind(Succession)-> + forAll(subsetsChain(self, + resolveGlobal('ControlPerformances::DecisionPerformance::outgoingHBLink'))) - - - - - - - <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> - - - - 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> + + + + + + <p>The IfActionUsage that has a certain ActionUsage as its <code>elseAction</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) - - - - - - + + + @@ -2606,6 +2138,15 @@ endif + + + + <p>The PerformActionUsages that have a certain ActionUsage as their <code>performedAction</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> @@ -2698,479 +2239,496 @@ 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>The AssignmentActionUsages that gave a certain <code>referent</code> Expression.</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>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>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>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 - specializesFromLibrary('Actions::assignmentActions') + isIndividual implies specializesFromLibrary('Occurrences::Life') - - - <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>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 - let targetParameter : Feature = inputParameter(1) in -targetParameter <> null and -targetParameter.ownedFeature->notEmpty() and -targetParameter.ownedFeature->first(). - redefinesFromLibrary('AssignmentAction::target::startingAt') + isIndividual implies + multiplicity <> null and + multiplicity.specializesFromLibrary('Base::zeroOrOne') - - - <p>The <code>valueExpression</code> of a <code>AssignmentActionUsage</code> is its second argument <code>Expression</code>.</p> + + + + + + + <p>Whether this <code>OccurrenceDefinition</code> is constrained to represent at most one thing.</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 - valueExpression = argument(2) + eventOccurrence = + if referencedFeatureTarget() = null then self + else if referencedFeatureTarget().oclIsKindOf(OccurrenceUsage) then + referencedFeatureTarget().oclAsType(OccurrenceUsage) + else null + endif endif - - - <p>The <code>targetArgument</code> of a <code>AssignmentActionUsage</code> is its first argument <code>Expression</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 - targetArgument = argument(1) + referencedFeatureTarget() <> null implies + referencedFeatureTarget().oclIsKindOf(OccurrenceUsage) - - - <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>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 - 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.ownedFeature->first().ownedFeature->notEmpty() and -targetParameter.ownedFeature->first().ownedFeature->first(). - redefinesFromLibrary('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.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> - - - 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 - ownedMembership->exists( - not oclIsKindOf(OwningMembership) and - memberElement.oclIsKindOf(Feature) and - not memberElement.oclIsKindOf(MetadataFeature)) + owningType <> null and +(owningType.oclIsKindOf(OccurrenceDefinition) or + owningType.oclIsKindOf(OccurrenceUsage)) implies + specializesFromLibrary('Occurrences::Occurrence::timeEnclosedOccurrences') - - - <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>EventOccurrenceUsage</code> must be referential.</p> - + OCL2.0 - referent <> null implies referent.featureTarget.isVariable + isReference - - - - <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>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>Feature</code> whose value is to be set.</p> + + + <p>Always true for an <code>EventOccurrenceUsage</code>.</p> - - - - + + - - - - <p>The Activities that feature a certain ActionUsage.</p> - - - - - - - - - - - <p>The <code>WhileLoopActionUsage</code> that has a certain <code>Expression</code> as its <code>whileArgument</code>.</p> + + + + <p>The <code>OccurrenceUsage</code> that has a certain <code>individualDefinition</code>.</p> - - + + - - - - <p>The ActionUsages being typed by a certain Behavior.</p> + + + + <p>The EventOccurrenceUsages that reference a certain <code>eventOccurrence</code>.</p> - - - - + + - - - - <p>The <code>SendActionUsage</code> that has a certain <code>Expression</code> as its <code>senderArgument</code>.</p> + + + + <p>The <code>OccurrenceUsages</code> being typed by a certain <code>Class</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>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>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> + + + <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 - referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(ActionUsage) + individualDefinition = + let individualDefinitions : OrderedSet(OccurrenceDefinition) = + occurrenceDefinition-> + selectByKind(OccurrenceDefinition)-> + select(isIndividual) in + if individualDefinitions->isEmpty() then null + else individualDefinitions->first() endif - - - <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>If an <code>OccurrenceUsage</code> has <code>isIndividual = true</code>, then it must have an <code>individualDefinition</code>.</p> - + OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(PartDefinition) or - owningType.oclIsKindOf(PartUsage)) implies - specializesFromLibrary('Parts::Part::performedActions') + isIndividual implies individualDefinition <> null - - - - - <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>The AssignmentActionUsage that has a certain Expression as its <code>targetArgument</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> + + + <p>An <code>OccurrenceUsage</code> must directly or indirectly specialize <code><em>Occurrences::occurrences</em></code> from the Kernel Semantic Library.</p> - + OCL2.0 - targetConnector->selectByKind(Succession)->size() <= 1 + specializesFromLibrary('Occurrences::occurrences') - - - <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>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 - specializesFromLibrary('Actions::Action::forks') + 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') - - - - - - The <code>ForLoopActionUsage</code> that has a certain <code>ReferenceUsage</code> as its <code>loopVariable</code>. + + + <p>An <code>OccurrenceUsage</code> must have at most one <code>occurrenceDefinition</code> with <code>isIndividual = true</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> + + 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> - + 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 + portionKind = PortionKind::snapshot implies + specializesFromLibrary('Occurrences::Occurrence::snapshots') - - - <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>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 - specializesFromLibrary('Constraints::constraintChecks') + portionKind = PortionKind::timeslice implies + specializesFromLibrary('Occurrences::Occurrence::timeSlices') - - - <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>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 - owningType <> null and -(owningType.oclIsKindOf(ItemDefinition) or - owningType.oclIsKindOf(ItemUsage)) implies - specializesFromLibrary('Items::Item::checkedConstraints') + portionKind <> null implies + owningType <> null and + (owningType.oclIsKindOf(OccurrenceDefinition) or + owningType.oclIsKindOf(OccurrenceUsage)) - - - - - - - <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>If an <code>OccurrenceUsage</code> has a non-null <code>portionKind</code>, then it must have <code>isPortion = true</code>.</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 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 at most one <code>occurrenceDefinition</code> that has <code>isIndividual = true</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> + + + + + + <p>Whether this <code>OccurrenceUsage</code> represents the usage of the specific individual represented by its <code>individualDefinition</code>.</p> - - - OCL2.0 - false - - - - - - - - - - - - - - - - - <p>The ConstraintUsages typed by a certain Predicate.</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>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>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>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 - specializesFromLibrary('Constraints::ConstraintCheck') - - - - - + + + - - - - <p>The AssertConstraintUsages that have a certain ConstraintUsage as their <tt>assertedConstraint</tt>.</p> + + + + <p>The ConnectionDefinitions that have a certain Usage as an <code>connectionEnd</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>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>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>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> - + OCL2.0 - assertedConstraint = - if referencedFeatureTarget() = null then self - else if referencedFeatureTarget().oclIsKindOf(ConstraintUsage) then - referencedFeatureTarget().oclAsType(ConstraintUsage) - else null - endif endif + specializesFromLibrary('Connections::Connection') - - - <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>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> - + OCL2.0 - if isNegated then - specializesFromLibrary('Constraints::negatedConstraintChecks') -else - specializesFromLibrary('Constraints::assertedConstraintChecks') -endif + ownedEndFeature->size() = 2 implies + specializesFromLibrary('Connections::BinaryConnection') - - - <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 <code>ConnectionDefinition</code> must have <code>isSufficient = true</code>.</p> - + OCL2.0 - referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(ConstraintUsage) + isSufficient - - - + + - - - <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>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>The ConnectionUsages that have a certain AssociationStructure as their <code>connectionDefinition</code>.</p> + + + + + + + + + <p>A <code>SuccessionAsUsage</code> is both a <code>ConnectorAsUsage</code> and a <code>Succession</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>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>A <code>BindingConnectorAsUsage</code> is both a <code>BindingConnector</code> and a <code>ConnectorAsUsage</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 + specializesFromLibrary('Metadata::metadataItems') + + + + + + + + + <p>The <code>MetadataDefinition</code> that is the <code>definition</code> of this <code>MetadataUsage</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>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> @@ -3241,5283 +2799,5725 @@ endif - - - - <p>The AttributeUsages that are typed by a certain DataType.</p> + + + + <p>The Definition that owns the <code>ownedReference</code>.</p> - - + + - - - - <p>The RequirementConstraintMembership that owns a certain ConstraintUsage as its <code>ownedConstraint</code>.</p> + + + + <p>The Usage that owns the <code>nestedConcern</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> + + + + <p>The Usage in which the <code>nestedMetadata</code> is nested.</p> - - OCL2.0 - specializesFromLibrary('Requirements::ConcernCheck') - - - + + + - - - - - - + + + + <p>The Definition that owns the <code>ownedConstraint</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 <code>Usage</code> that owns the <code>nestedFlow</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 Usage in which the <code>nestedState</code> is nested.</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 <code>Definition</code> that owns the <code>ownedFlow</code>.</p> - - OCL2.0 - framedConcern = featureMembership-> - selectByKind(FramedConcernMembership). - ownedConcern - + + + + + + + + <p>The Definition that owns a certain <code>ownedVerificationCase</code>.</p> + + + + + + + + + <p>The Usage in which the <code>nestedTransition</code> is nested.</p> + + + + + + + + + <p>The Usages that have a certain Classifier as a <code>definition</code>.</p> + + + + + + + + + <p>The Definition that owns this CaseUsage (if any).</p> + + + + <p>The Definition that owns the <code>ownedCase</code>.</p> + + + + + + + + + <p>The Usage that owns the <code>nestedAllocation</code>.</p> + + + + + + + + + <p>The Definition that owns the <code>ownedPort</code>.</p> + + + + + + + + + <p>The Definition that owns the <code>ownedState</code>.</p> + + + + + + + + + <p>The Usages that feature a certain Usage.</p> + + + + + + + + + + <p>The Definition that owns the <code>ownedInterface</code>.</p> + + + + + + + + + <p>The Usage that owns a certain <code>nestedVerificationCase</code>.</p> + + + + + + + + + <p>The Definition that owns the <code>ownedUseCase</code>.</p> + + + + + + + + + <p>The Definition that owns the <code>ownedAction</code>.</p> + + + + + + + + + <p>The owning Definition of this VariantMembership, which must have <code>isVariation</code> = true.</p> + + + + + + + + + + <p>The Usage that owns a certain <code>nestedViewpoint</code>.</p> + + + + + + + + + <p>The Usage in which the <code>nestedUsage</code> is nested.</p> + + + + + + + + + <p>The Definition that owns the <code>ownedEnumeration</code>.</p> + + + + + + + + + <p>The Definition that owns the <code>ownedTransition</code>.</p> + + + + + + + + + <p>The Definitions that have a certain Usage as a <code>flow</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 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 a certain <code>ownedRendering</code>.</p> + + + + + + + + + <p>The Usage in which the <code>nestedInterface</code> is nested.</p> + + + + + + + + + <p>The Usage in which the <code>nestedAttribute</code> is nested.</p> + + + + + + + + + <p>The Usage in which the <code>nestedPart</code> is nested.</p> + + + + + + + + + <p>The Definition that owns the <code>ownedAttribute</code>.</p> + + + + + + + + + <p>The Definition that owns the <code>ownedAllocation</code>.</p> + + + + + + + + + <p>The Usage that owns a certain <code>nestedView</code>.</p> + + + + + + + + + <p>The Definition that owns the <code>ownedPart</code>.</p> + + + + + + + + + <p>The ItemUsages being typed by a certain Structure.</p> + + + + + + + + + <p>The owning Definition of this VariantMembership, which must have <code>isVariation</code> = true.</p> + + + + + + + + + + <p>The Usage in which the <code>nestedAnalysisCase</code> is nested.</p> + + + + + + + + + <p>The Definition that owns a certain <code>ownedView</code>.</p> + + + + + + + + + <p>The Usage in which the <code>nestedPort</code> is nested (if any).</p> + + + + + + + + + <p>The Definition that owns the <code>ownedMetadata</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 + variant = variantMembership.ownedVariantUsage + - - - <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>variantMemberships</code> of a <code>Usage</code> are those <code>ownedMemberships</code> that are <code>VariantMemberships</code>.</p> - + OCL2.0 - requiredConstraint = ownedFeatureMembership-> - selectByKind(RequirementConstraintMembership)-> - select(kind = RequirementConstraintKind::requirement). - ownedConstraint + variantMembership = ownedMembership->selectByKind(VariantMembership) - - - <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>If a <code>Usage</code> is a variation, then it must not have any <code>ownedFeatureMemberships</code>.</p> - + OCL2.0 - stakeholderParameter = featureMembership-> - selectByKind(AStakholderMembership). - ownedStakeholderParameter + isVariation implies ownedFeatureMembership->isEmpty() - - - <p>The <code>subjectParameter</code> of a <code>RequirementUsage</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</p> + + + <p>A <code>Usage</code> is referential if it is not composite.</p> - + OCL2.0 - subjectParameter = - let subjects : OrderedSet(SubjectMembership) = - featureMembership->selectByKind(SubjectMembership) in - if subjects->isEmpty() then null - else subjects->first().ownedSubjectParameter - endif + isReference = not isComposite - - - <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>If a <code>Usage</code> has an <code>owningVariationUsage</code>, then it must directly or indirectly specialize that <code>Usage</code>.</p> - + OCL2.0 - text = documentation.body + owningVariationUsage <> null implies + specializes(owningVariationUsage) - - - <p>A <code>RequirementDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> + + + <p>A variation <code>Usage</code> may not specialize any variation <code>Definition</code> or <code>Usage</code>.</p> - + OCL2.0 - featureMembership-> - selectByKind(SubjectMembership)-> - size() <= 1 + isVariation implies + not ownedSpecialization.specific->exists( + oclIsKindOf(Definition) and + oclAsType(Definition).isVariation or + oclIsKindOf(Usage) and + oclAsType(Usage).isVariation) - - - <p>The <code>subjectParameter</code> of a <code>RequirementUsage</code> must be its first <code>input</code>.</p> + + + <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 - input->notEmpty() and input->first() = subjectParameter + owningVariationDefinition <> null implies + specializes(owningVariationDefinition) - - - <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 <code>directedUsages</code> of a <code>Usage</code> are all its <code>directedFeatures</code> that are <code>Usages</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 + 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 + nestedAllocation = nestedUsage->selectByKind(AllocationUsage) + + + + + <p>The <code>ownedAnalysisCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>AnalysisCaseUsages</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> + + + 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 + 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> + + + 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 + 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 + nestedConnection = nestedUsage->selectByKind(ConnectorAsUsage) + + + + + <p>The <code>ownedConstraints</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ConstraintUsages</code>.</p> + + + OCL2.0 + nestedConstraint = nestedUsage->selectByKind(ConstraintUsage) + + + + + <p>The <code>ownedEnumerations</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>EnumerationUsages</code>.</p> + + + OCL2.0 + ownedNested = nestedUsage->selectByKind(EnumerationUsage) + + + + + <p>The <code>ownedFlows</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>FlowConnectionUsages</code>.</p> + + + OCL2.0 + nestedFlow = nestedUsage->selectByKind(FlowUsage) + + + + + <p>The <code>ownedInterfaces</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>InterfaceUsages</code>.</p> + + + OCL2.0 + nestedInterface = nestedUsage->selectByKind(ReferenceUsage) + + + + + <p>The <code>ownedItems</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ItemUsages</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> + + + OCL2.0 + nestedMetadata = ownedMember->selectByKind(MetadataUsage) + + + + + <p>The <code>ownedOccurrences</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>OccurrenceUsages</code>.</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 - specializesFromLibrary('Requirements::requirementChecks') + nestedPart = nestedUsage->selectByKind(PartUsage) - - - <p>A composite <code>RequirementUsage</code> whose <code>owningType</code> is a <code>RequirementDefinition</code> or <code>RequirementUsage</code> but is <em>not</em> owned via a <code>RequirementConstraintMembership</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 <code>ownedPorts</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>PortUsages</code>.</p> - + OCL2.0 - isComposite and owningType <> null and - (owningType.oclIsKindOf(RequirementDefinition) or - owningType.oclIsKindOf(RequirementUsage)) and - not owningFeatureMembership.oclIsKindOf(RequirementConstraintMembership) implies - specializesFromLibrary('Requirements::RequirementCheck::subrequirements') + nestedPort = nestedUsage->selectByKind(PortUsage) - - - <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>ownedReferences</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ReferenceUsages</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(Feature) and - gen.oclAsType(Feature).featureTarget.oclIsKindOf(CaseUsage) implies - redefines(gen.oclAsType(Feature).featureTarget. - oclAsType(CaseUsage).objectiveRequirement)) + nestedReference = nestedUsage->selectByKind(ReferenceUsage) - - - <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>The <code>ownedRenderings</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>RenderingUsages</code>.</p> - + OCL2.0 - owningFeatureMembership <> null and -owningFeatureMembership.oclIsKindOf(RequirementVerificationMembership) implies - specializesFromLibrary('VerificationCases::VerificationCase::obj::requirementVerifications') + nestedRendering = nestedUsage->selectByKind(RenderingUsage) - - - - <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 RequirementUsages that have a certain Usage as their <code>subjectParameter</code>.</p> - - - - - - - - - - - <p>The RequirementDefinitions that have a certain Usage as their <code>subjectParameter</code>.</p> - - - - - - - - - - - <p>The SatisfyRequirementUsages that have a certain Feature as their <tt>satisfyingFeature</tt>.</p> - - - - - - - - - <p>The SubjectMembership that owns a particular Parameter as its <code>ownedSubjectParameter</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>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>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>ownedRequirements</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>RequirementUsages</code>.</p> - + OCL2.0 - text = documentation.body + nestedRequirement = nestedUsage->selectByKind(RequirementUsage) - - - <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>ownedStates</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>StateUsages</code>.</p> - + OCL2.0 - assumedConstraint = ownedFeatureMembership-> - selectByKind(RequirementConstraintMembership)-> - select(kind = RequirementConstraintKind::assumption). - ownedConstraint + nestedState = nestedUsage->selectByKind(StateUsage) - - - <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>The <code>ownedTransitions</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>TransitionUsages</code>.</p> - + OCL2.0 - requiredConstraint = ownedFeatureMembership-> - selectByKind(RequirementConstraintMembership)-> - select(kind = RequirementConstraintKind::requirement). - ownedConstraint + nestedTransition = nestedUsage->selectByKind(TransitionUsage) - - - <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>ownedUsages</code> of a <code>Usage</code> are all its <code>ownedFeatures</code> that are <code>Usages</code>.</p> - + OCL2.0 - subjectParameter = - let subjects : OrderedSet(SubjectMembership) = - featureMembership->selectByKind(SubjectMembership) in - if subjects->isEmpty() then null - else subjects->first().ownedSubjectParameter - endif + nestedUsage = ownedFeature->selectByKind(Usage) - - - <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>ownedUseCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>UseCaseUsages</code>.</p> - + OCL2.0 - framedConcern = featureMembership-> - selectByKind(FramedConcernMembership). - ownedConcern + nestedUseCase = nestedUsage->selectByKind(UseCaseUsage) - - - <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>ownedValidationCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ValidationCaseUsages</code>.</p> - + OCL2.0 - actorParameter = featureMembership-> - selectByKind(ActorMembership). - ownedActorParameter + nestedVerificationCase = nestedUsage->selectByKind(VerificationCaseUsage) - - - <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>ownedViews</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ViewUsages</code>.</p> - + OCL2.0 - stakeholderParameter = featureMembership-> - selectByKind(StakholderMembership). - ownedStakeholderParameter + nestedView = nestedUsage->selectByKind(ViewUsage) - - - <p>A <code>RequirementDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</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(SubjectMembership)-> - size() <= 1 + nestedViewpoint = nestedUsage->selectByKind(ViewpointUsage) - - - <p>The <code>subjectParameter</code> of a <code>RequirementDefinition</code> must be its first <code>input</code>.</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 - input->notEmpty() and input->first() = subjectParameter + usage = feature->selectByKind(Usage) - - - <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>Usage</code> that is directed, an end feature or has no <code>featuringTypes</code> must be referential.</p> - + OCL2.0 - specializesFromLibrary('Requirements::RequirementCheck') + direction <> null or isEnd or featuringType->isEmpty() implies + isReference - - - - <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>The AddressedConcernMembership that owns a certain ConcernUsage as its <code>ownedConcern</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>If a <code>Usage</code> is a variation, then it must be abstract.</p> - + OCL2.0 - owningType.oclIsType(RequirementDefinition) or -owningType.oclIsType(RequiremenCaseRequirementDefinition) or -owningType.oclIsType(CaseDefinition) or -owningType.oclIsType(CaseUsage) - + isVariation implies isAbstract - - - - - - <p>The <code>Usage</code< that is the <code>ownedMemberParameter</code> of this <code>SubjectMembership</code>.</p> - - - - - - - - - - <p>The RequirementUsage that has a certain ConstraintUsage as an <cod>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>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>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 - 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 + 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>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>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 - ownedMember->selectByKind(BindingConnector)-> - select(b | - b.relatedElement->includes(subjectParameter) and - b.relatedElement->exists(r | r <> subjectParameter))-> - size() = 1 + owningVariationUsage <> null implies + featuringType->asSet() = owningVariationUsage.featuringType->asSet() - - - <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>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> - - OCL2.0 - referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(RequirementUsage) - - - - - <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>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> - - OCL2.0 - if isNegated then - specializesFromLibrary('Requirements::notSatisfiedRequirementChecks') -else - specializesFromLibrary('Requirements::satisfiedRequirementChecks') -endif - - - - - - - <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>Definition</code> that owns this <code>Usage</code> (if any).</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>Usage</code> in which this <code>Usage</code> is nested (if any).</p> - - - + + + - - - - - <p>The RequirementUsages that have a certain PartUsage as an <code>actorParameter</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 AddressedConcernMembership that has a certain ConcernUsage as its <code>addressedConcern</code>.</p> + + + + + + + + <p>The <code>Usages</code> that are <code>features</code> of this <code>Usage</code> (not necessarily owned).</p> - - - - - - - - <p>The RequirementDefinition that has a certain ConstraintUsage as an <code>assumedConstraint</code> (if any).</p> + + - - - - - - - - - <p>The ActorMembership that has a certain PartUsage as its <code>ownedActorParameter</code>.</p> + + + + + + + <p>The <code>usages</code> of this <code>Usage</code> that are <code>directedFeatures</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> + + + + + + + + <p>The <code>Usages</code> that are <code>ownedFeatures</code> of this <code>Usage</code>.</p> - - OCL2.0 - owningType.oclIsKindOf(RequirementUsage) or -owningType.oclIsKindOf(RequirementDefinition) - - - - - - - - <p>The <code>PartUsage</code> specifying the stakeholder.</p> + + + + + + + + <p>The <code>ReferenceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - - + + - - - - - <p>The RequirementUsage that addresses a certain <code>addressedConcern</code>.</p> + + + <p>The code>AttributeUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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>The code>EnumerationUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.<p> - - - - <p>Indicates that a member <code>ConstraintUsage</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage</code>represents an requirement.</p> + + + + + + <p>The <code>OccurrenceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - - - - <p>The RequirementDefinition that addresses a certain <code>addressedConcern</code>.</p> + + + + + + <p>The <code>ItemUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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> + + + + + + <p>The <code>PartUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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 - - - - - <p>The <code>owningType</code> of a <code>RequirementConstraintMembership</code> must be a <code>RequirementDefinition</code> or a <code>RequirementUsage</code>.</p> + + + + + + <p>The <code>PortUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - OCL2.0 - owningType.oclIsKindOf(RequirementDefinition) or -owningType.oclIsKindOf(RequirementUsage) - - - - - <p>The <code>ownedConstraint</code> of a <code>RequirementConstraintMembership</code> must be composite.</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> - - OCL2.0 - ownedConstraint.isComposite - - - - - - - - <p>Whether the <code>RequirementConstraintMembership</code> is for an assumed or required <code>ConstraintUsage</code>.</p> + + + + + + <p>The code>FlowUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + - - - <p>The <code>ConstraintUsage</code> that is the <code>ownedMemberFeature</code> of this <code>RequirementConstraintMembership</code>.</p> + + + <p>The <code>InterfaceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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 <code>AllocationUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - + + - - - - - <p>The RequirementDefinition that has a certain ConstraintUsage as a <code>requiredConstraint</code> (if any).</p> + + + <p>The <code>ActionUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - - - - - - - - <p>The ConcernUsages that are typed by a certain <code>concernDefinition</code>.</p> + + + + + + <p>The <code>StateUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - - - - - - - <p>The RequirementUsages typed by a certain RequirementDefinition.</p> + + + + + + <p>The <code>TransitionUsages</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>CalculationUsage</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>ConstraintUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - - - - - - - - <p>The <code>PartUsage</code> specifying the actor.</p> - - - + + - - - - - <p>TheStakehplderMembership that has a certain PartUsage as its <code>ownedStakeholderParameter</code>.</p> + + + <p>The <code>RequirementUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</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>ConcernUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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 - 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 <code>CaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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 <code>AnalysisCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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>VerificationCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - - OCL2.0 - kind = RequirementConstraintKind::requirement - - - - - - <p>The <code>kind</code> of an <code>FramedConcernMembership</code> must be <code>requirement</code>.</p> + + + + + + <p>The <code>UseCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + - + + - - - <p>The <code>ConcernUsage</code> that is the <code>ownedConstraint</code> of this <code>FramedConcernMembership</code>.</p> + + + <p>The <code>ViewUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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>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>The RequirementDefinitions that have a certain PartUsage as an <code>actorParameter</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> - - - - - - - - - - <p>The RequirementUsage that has a certain ConstraintUsage as a <code>requiredConstraint</code> (if any).</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 RequirementVerificationMembership that owns a certain RequirementUsage as its <code>ownedRequirement</code>.</p> + + + + <p>The Definition that owns the <code>ownedRequirement</code>.</p> - - + + - - - <p>A <code>VerificationCaseUsage</code> is a </code>Usage</code> of a <code>VerificationCaseDefinition</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>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> + + + <p>A <code>ReferenceUsage</code> is always referential.</p> - + OCL2.0 - isComposite and owningType <> null and - (owningType.oclIsKindOf(VerificationCaseDefinition) or - owningType.oclIsKindOf(VerificationCaseUsage)) implies - specializesFromLibrary('VerificationCases::VerificationCase::subVerificationCases') + isReference - - - - <p>The <code>VerificationCase</code> that is the <code>definition</code> of this <code>VerificationCaseUsage</code>.</p> + + + + <p>Always <code>true</code> for a <code>ReferenceUsage</code>.</code> - - + + - - - <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>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>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 VariantMembership that owns this Usage, if the Usage represents a variant in the context of some variation point Definition or Usage.</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> - - - OCL2.0 - kind = RequirementConstraintKind::requirement - - - - - <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 Definition that owns the <code>ownedConcern</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 Usage in which the <code>nestedUseCase</code> is nested.</p> - - - - - - <p>The <code>kind</code> of a <code>RequirementVerificationMembership</code> must be <code>requirement</code>.</p> + + + + + + + + <p>The Usage in which the <code>nestedOccurrence</code> is nested.</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 Definitions that feature a certain Usage.</p> - - - + + + + - - - - <p>The VerificationCaseDefinitions that verify a certain <code>verifiedRequirement</code>.</p> + + + + <p>The Usages that have a certain Usage as a <code>flow</code>.</p> - - + + + + + + + - - - - <p>The VerificationCaseUsages that verify a certain <code>verifiedRequirement</code>.</p> + + + + <p>The Definition that owns the <code>ownedConnection</code>.</p> - - + + - - - - <p>The RequirementVerificationMembership that has a certain RequirementUsage as its <code>verifiedRequirement</code>.</p> + + + + <p>The Usage in which the <code>nestedItem</code> is nested.</p> - - + + - - - - <p>The VerificationUsages that are defined by a certain <code>verificationCaseDefinition</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 Usage that owns the <code>nestedReference</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>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>The <code>conjugatedPortDefinition</code> of a <code>PortDefinition</code> is the <code>ownedMember</code> that is a <code>ConjugatedPortDefinition</code>.</p> + + + <p>If a <code>Definition</code> is a variation, then all it must not have any <code>ownedFeatureMemberships</code>.</p> - + OCL2.0 - conjugatedPortDefinition = -let conjugatedPortDefinitions : OrderedSet(ConjugatedPortDefinition) = - ownedMember->selectByKind(ConjugatedPortDefinition) in -if conjugatedPortDefinitions->isEmpty() then null -else conjugatedPortDefinitions->first() -endif + isVariation implies ownedFeatureMembership->isEmpty() - - - <p>The <code>ownedUsages</code> of a <code>PortDefinition</code> that are not <code>PortUsages</code> must not be composite.</p> + + + <p>The <code>variants</code> of a <code>Definition</code> are the <code>ownedVariantUsages</code> of its <code>variantMemberships</code>.</p> - + OCL2.0 - ownedUsage-> - reject(oclIsKindOf(PortUsage))-> - forAll(not isComposite) + variant = variantMembership.ownedVariantUsage - - - <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>variantMemberships</code> of a <code>Definition</code> are those <code>ownedMemberships</code> that are <code>VariantMemberships</code>.</p> - + OCL2.0 - not oclIsKindOf(ConjugatedPortDefinition) implies - ownedMember-> - selectByKind(ConjugatedPortDefinition)-> - size() = 1 + variantMembership = ownedMembership->selectByKind(VariantMembership) - - - <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>A variation <code>Definition</code> may not specialize any other variation <code>Definition</code>.</p> - + OCL2.0 - specializesFromLibrary('Ports::Port') + isVariation implies + not ownedSpecialization.specific->exists( + oclIsKindOf(Definition) and + oclAsType(Definition).isVariation) - - - - - - - <p>The <code>ConjugatedPortDefinition</code> that is conjugate to this <code>PortDefinition</code>.</p> - - - - - - - - - - <p>The PortConjugation that relates a certain PortDefinition to its ConjugatedPortDefinition (if any).</p> - - - - - - - - - - <p>The PortUsages that are typed by a certain PortDefinition.</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 <code>usages</code> of a <code>Definition</code> are all its <code>features</code> that are <code>Usages</code>.</p> - + OCL2.0 - portDefinition = conjugatedPortDefinition.originalPortDefinition + usage = feature->selectByKind(Usage) - - - - - - <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>The ConjugatedPortTypings whose <code>conjugatedPortDefinition</code> a certain ConjugatedPortDefinition.</p> - - - - - - - - - - - <p>The ConjugatedPortTypings whose <code>portDefinition</code> is a certain PortDefinition.</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>directedUsages</code> of a <code>Definition</code> are all its <code>directedFeatures</code> that are <code>Usages</code>.</p> - + OCL2.0 - nestedUsage-> - reject(oclIsKindOf(PortUsage))-> - forAll(not isComposite) + directedUsage = directedFeature->selectByKind(Usage) - - - <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>ownedUsages</code> of a <code>Definition</code> are all its <code>ownedFeatures</code> that are <code>Usages</code>.</p> - + OCL2.0 - specializesFromLibrary('Ports::ports') + ownedUsage = ownedFeature->selectByKind(Usage) - - - <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>ownedAttributes</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>AttributeUsages</code>.</p> - + OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(PortDefinition) or - owningType.oclIsKindOf(PortUsage)) implies - specializesFromLibrary('Ports::Port::subports') + ownedAttribute = ownedUsage->selectByKind(AttributeUsage) - - - <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>ownedReferences</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ReferenceUsages</code>.</p> - + OCL2.0 - owningType = null or -not owningType.oclIsKindOf(PortDefinition) and -not owningType.oclIsKindOf(PortUsage) implies - isReference + ownedReference = ownedUsage->selectByKind(ReferenceUsage) - - - <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>ownedEnumerations</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>EnumerationUsages</code>.</p> - + OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(PartDefinition) or - owningType.oclIsKindOf(PartUsage)) implies - specializesFromLibrary('Parts::Part::ownedPorts') + ownedEnumeration = ownedUsage->selectByKind(EnumerationUsage) - - - - <p>The <code>occurrenceDefinitions</code> of this <code>PortUsage</code>, which must all be <code>PortDefinitions<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>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>ownedOccurrences</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>OccurrenceUsages</code>.</p> - + OCL2.0 - ownedPortConjugator.originalPortDefinition = originalPortDefinition + ownedOccurrence = ownedUsage->selectByKind(OccurrenceUsage) - - - <p>A <code>ConjugatedPortDefinition</code> must not itself have a <code>conjugatedPortDefinition</code>. + + + <p>The <code>ownedItems</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ItemUsages</code>.</p> - + OCL2.0 - conjugatedPortDefinition = null + ownedItem = ownedUsage->selectByKind(ItemUsage) - - - - <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>The AllocationDefinitions that feature a certain <code>allocation</code>.</p> - - - - - - - - - <p>The AllocationUsages that have a certain AllocationDefinition as their <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 <code>ownedParts</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>PartUsages</code>.</p> - + OCL2.0 - specializesFromLibrary('Allocations::allocations') + ownedPart = ownedUsage->selectByKind(PartUsage) - - - - <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> + + + <p>The <code>ownedPorts</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>PortUsages</code>.</p> - + OCL2.0 - allocation = usage->selectAsKind(AllocationUsage) + ownedPort = ownedUsage->selectByKind(PortUsage) - - - <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>The <code>ownedConnections</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ConnectorAsUsages</code>.</p> - + OCL2.0 - specializesFromLibrary('Allocations::Allocation') + ownedConnection = ownedUsage->selectByKind(ConnectorAsUsage) - - - - <p>The <code>AllocationUsages</code> that refine the allocation mapping defined by this <code>AllocationDefinition</code>.</p> + + + <p>The <code>ownedFlows</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>FlowUsages</code>.</p> - - - - - - - - <p>The ConnectionDefinitions that have a certain Usage as an <code>connectionEnd</code>.</p> + + OCL2.0 + ownedFlow = ownedUsage->selectByKind(FlowUsage) + + + + + <p>The <code>ownedInterfaces</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>InterfaceUsages</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>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 + ownedInterface = ownedUsage->selectByKind(ReferenceUsage) + + + + + <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('Connections::connections') + ownedAllocation = ownedUsage->selectByKind(AllocationUsage) - - - <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>The <code>ownedActions</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ActionUsages</code>.</p> - + OCL2.0 - ownedEndFeature->size() = 2 implies - specializesFromLibrary('Connections::binaryConnections') + ownedAction = ownedUsage->selectByKind(ActionUsage) - - - - - <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>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 <code>ownedStates</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>StateUsages</code>.</p> - + OCL2.0 - specializesFromLibrary('Connections::Connection') + ownedState = ownedUsage->selectByKind(StateUsage) - - - <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>ownedTransitions</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>TransitionUsages</code>.</p> - + OCL2.0 - ownedEndFeature->size() = 2 implies - specializesFromLibrary('Connections::BinaryConnection') + ownedTransition = ownedUsage->selectByKind(TransitionUsage) - - - <p>A <code>ConnectionDefinition</code> must have <code>isSufficient = true</code>.</p> + + + <p>The <code>ownedCalculations</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>CalculationUsages</code>.</p> - + OCL2.0 - isSufficient + ownedCalculation = ownedUsage->selectByKind(CalculationUsage) - - - - - - - <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>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>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> - - - - - - - - - - <p>The ConnectionUsages that have a certain AssociationStructure as their <code>connectionDefinition</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> - - - - - - - - - - <p>The Usage in which the <code>nestedPort</code> is nested (if any).</p> - - - - - - - - - <p>The Usages that have a certain Classifier as a <code>definition</code>.</p> - - - - - - - - - - <p>The Definition that owns a certain <code>ownedVerificationCase</code>.</p> - - - - - - - - - <p>The Definition that owns the <code>ownedInterface</code>.</p> - - - - - - - - - <p>The Definition that owns the <code>ownedConcern</code>.</p> - - - - - - - - - <p>The Definition that owns the <code>ownedConstraint</code>.</p> - - - - - - - - - <p>The Definition that owns the <code>ownedAction</code>.</p> - - - - - - - - - <p>The owning Definition of this VariantMembership, which must have <code>isVariation</code> = true.</p> - - - - - - - - - - <p>The Definition that owns the <code>ownedOccurrence</code>.</p> - - - - - - - - - <p>The Definition that owns the <code>ownedTransition</code>.</p> + + + <p>The <code>ownedConstraints</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ConstraintUsages</code>.</p> - - - - - - - - <p>The Usage in which the <code>nestedItem</code> is nested.</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> - - - - - - - <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 + ownedRequirement = ownedUsage->selectByKind(RequirementUsage) + + + + + <p>The <code>ownedConcerns</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ConcernUsages</code>.</p> - + OCL2.0 - variant = variantMembership.ownedVariantUsage + ownedConcern = ownedUsage->selectByKind(ConcernUsage) - - - <p>The <code>variantMemberships</code> of a <code>Usage</code> are those <code>ownedMemberships</code> that are <code>VariantMemberships</code>.</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 - variantMembership = ownedMembership->selectByKind(VariantMembership) + ownedCase = ownedUsage->selectByKind(CaseUsage) - - - <p>If a <code>Usage</code> is a variation, then it must not have any <code>ownedFeatureMemberships</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 - isVariation implies ownedFeatureMembership->isEmpty() + ownedAnalysisCase = ownedUsage->selectByKind(AnalysisCaseUsage) - - - <p>A <code>Usage</code> is referential if it is not composite.</p> + + + <p>The <code>ownedValidationCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ValidationCaseUsages</code>.</p> - + OCL2.0 - isReference = not isComposite + ownedVerificationCase = ownedUsage->selectByKind(VerificationCaseUsage) - - - <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>ownedUseCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>UseCaseUsages</code>.</p> - + OCL2.0 - owningVariationUsage <> null implies - specializes(owningVariationUsage) + ownedUseCase = ownedUsage->selectByKind(UseCaseUsage) - - - <p>A variation <code>Usage</code> may not specialize any variation <code>Definition</code> or <code>Usage</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 - isVariation implies - not ownedSpecialization.specific->exists( - oclIsKindOf(Definition) and - oclAsType(Definition).isVariation or - oclIsKindOf(Usage) and - oclAsType(Usage).isVariation) + ownedView = ownedUsage->selectByKind(ViewUsage) - - - <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>ownedViewpoints</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ViewpointUsages</code>.</p> - + OCL2.0 - owningVariationDefinition <> null implies - specializes(owningVariationDefinition) + ownedViewpoint = ownedUsage->selectByKind(ViewpointUsage) - - - <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>ownedRenderings</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>RenderingUsages</code>.</p> - + OCL2.0 - directedUsage = directedFeature->selectByKind(Usage) + ownedRendering = ownedUsage->selectByKind(RenderingUsage) - - - <p>The <code>ownedActions</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ActionUsages</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 - nestedAction = nestedUsage->selectByKind(ActionUsage) + ownedMetadata = ownedMember->selectByKind(MetadataUsage) - - - <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>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>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> - - OCL2.0 - nestedAllocation = nestedUsage->selectByKind(AllocationUsage) - - - - - <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>ConstraintUsages</code> that are <code>ownedUsages</code> of this <code>Definition</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 <code>RequirementUsages</code> that are <code>ownedUsages</code> of this <code>Definition</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> + + + + + + <p>The <code>ConcernUsages</code> that are <code>ownedUsages</code> of this <code>Definition</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>The code>CaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</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>The <code>AnalysisCaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</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> + + + + + + <p>The <code>VerificationCaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - OCL2.0 - nestedConnection = nestedUsage->selectByKind(ConnectorAsUsage) - - - - - <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>UseCaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - OCL2.0 - nestedConstraint = nestedUsage->selectByKind(ConstraintUsage) - - - - - <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>ViewUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - OCL2.0 - ownedNested = nestedUsage->selectByKind(EnumerationUsage) - - - - - <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>ViewpointUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - OCL2.0 - nestedFlow = nestedUsage->selectByKind(FlowUsage) - - - - - <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>RenderingUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> - - OCL2.0 - nestedInterface = nestedUsage->selectByKind(ReferenceUsage) - - - - - <p>The <code>ownedItems</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ItemUsages</code>.</p> + + + + + + <p>The <code>MetadataUsages</code> that are <code>ownedMembers</code> of this <code>Definition</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 Usage in which the <code>nestedAction</code> is nested.</p> - - OCL2.0 - nestedMetadata = ownedMember->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 Usage in which the <code>nestedConstraint</code> is nested.</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 Definition that owns the <code>ownedAnalysisCase</code>.</p> - - OCL2.0 - nestedPart = nestedUsage->selectByKind(PartUsage) - - - - - <p>The <code>ownedPorts</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>PortUsages</code>.</p> + + + + + + + + <p>The Definition that owns the <code>ownedItem</code>.</p> - - OCL2.0 - nestedPort = nestedUsage->selectByKind(PortUsage) - - - - - <p>The <code>ownedReferences</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ReferenceUsages</code>.</p> + + + + + + + + <p>The Definition that owns a certain <code>ownedViewpoint</code>.</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 Definition that owns the <code>ownedOccurrence</code>.</p> + + + + + + + + + <p>The Usage in which the <code>nestedRequirement</code> is nested.</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 Usage that owns a certain <code>nestedRendering</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>The Usage that owns the <code>nestedEnumeration</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> + + + + + + + + + <p>The InterfaceDefinitions that have a certain PortUsage as an <code>interfaceEnd</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> + + + + + + + + <p>The InterfaceUsages typed by a certain InterfaceDefinition.</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> + + + + + + + <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 - nestedUseCase = nestedUsage->selectByKind(UseCaseUsage) + specializesFromLibrary('Interfaces::Interface') - - - <p>The <code>ownedValidationCases</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ValidationCaseUsages</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 - nestedVerificationCase = nestedUsage->selectByKind(VerificationCaseUsage) + ownedEndFeature->size() = 2 implies + specializesFromLibrary('Interfaces::BinaryInterface') - - - <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>PortUsages</code> that are the <code>connectionEnds</code> of this <code>InterfaceDefinition</code>. + + - - OCL2.0 - nestedView = nestedUsage->selectByKind(ViewUsage) - - - - - <p>The <code>ownedViewpoints</code> of a <code>Usage</code> are all its <code>ownedUsages</code> that are <code>ViewpointUsages</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 - nestedViewpoint = nestedUsage->selectByKind(ViewpointUsage) + ownedEndFeature->size() = 2 implies + specializesFromLibrary('Interfaces::binaryInterfaces') - - - <p>The <code>usages</code> of a <code>Usage</code> are all its <code>features</code> that are <code>Usages</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 - usage = feature->selectByKind(Usage) + specializesFromLibrary('Interfaces::interfaces') - - - <p>A <code>Usage</code> that is directed, an end feature or has no <code>featuringTypes</code> must be referential.</p> + + + + <p>The <code>InterfaceDefinitions</code> that type this <code>InterfaceUsage</code>.</p> - - OCL2.0 - direction <> null or isEnd or featuringType->isEmpty() implies - isReference - - - - - <p>If a <code>Usage</code> is a variation, then it must be abstract.</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> - + OCL2.0 - isVariation implies isAbstract + verifiedRequirement = + if objectiveRequirement = null then OrderedSet{} + else + objectiveRequirement.featureMembership-> + selectByKind(RequirementVerificationMembership). + verifiedRequirement->asOrderedSet() + endif - - - <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>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 - 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('VerificationCases::verificationCases') - - - <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> + + + 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 - owningVariationUsage <> null implies - featuringType->asSet() = owningVariationUsage.featuringType->asSet() + isComposite and owningType <> null and + (owningType.oclIsKindOf(VerificationCaseDefinition) or + owningType.oclIsKindOf(VerificationCaseUsage)) implies + specializesFromLibrary('VerificationCases::VerificationCase::subVerificationCases') - - - - - - <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>VerificationCase</code> that is the <code>definition</code> of this <code>VerificationCaseUsage</code>.</p> - - - + + - - - <p>The <code>Definition</code> that owns this <code>Usage</code> (if any).</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>Usage</code> in which this <code>Usage</code> is nested (if any).</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> - - - - - - - <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> + + 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 <code>Usages</code> that are <code>features</code> of this <code>Usage</code> (not necessarily owned).</p> + + + + + <p>The RequirementVerificationMembership that owns a certain RequirementUsage as its <code>ownedRequirement</code>.</p> - - + + + + + + + + <p>The VerificationCaseDefinitions that verify a certain <code>verifiedRequirement</code>.</p> - - - - - - - <p>The <code>usages</code> of this <code>Usage</code> that are <code>directedFeatures</code>.</p> - + + + + + + + + <p>The VerificationCaseUsages that verify a certain <code>verifiedRequirement</code>.</p> - - - - - - - - <p>The <code>Usages</code> that are <code>ownedFeatures</code> of this <code>Usage</code>.</p> + + + + + + + + <p>The RequirementVerificationMembership that has a certain RequirementUsage as its <code>verifiedRequirement</code>.</p> - - - - - - - - <p>The <code>ReferenceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + + + + + + + <p>The VerificationUsages that are defined by a certain <code>verificationCaseDefinition</code>.</p> - - - - - - <p>The code>AttributeUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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>EnumerationUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.<p> + + OCL2.0 + kind = RequirementConstraintKind::requirement + + + + + <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>OccurrenceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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>ItemUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + + <p>The <code>kind</code> of a <code>RequirementVerificationMembership</code> must be <code>requirement</code>.</p> - - + - - - <p>The <code>PartUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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>PortUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + + + + <p>The Transition that owns a certain Succession.</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 StateUsages with a certain <tt>doAction</tt>.</p> - - - - - - <p>The code>FlowUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + + + + + + + <p>The StateSubactionMembership that is the owner of a certain ActionUsage (if any).</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>The <code>InterfaceUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + OCL2.0 + owningType.oclIsKindOf(StateDefinition) or +owningType.oclIsKindOf(StateUsage) + + + + + + + + <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>AllocationUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> + + + <p>The <code>ActionUsage</code> that is the <code>ownedMemberFeature</code> of this <code>StateSubactionMembership</code>.</p> - - + + + - - - <p>The <code>ActionUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + + + + <p>The TransitionUsage that is triggered by a certain AcceptActionUsage.</p> - - - - - - <p>The <code>StateUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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>TransitionUsages</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::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>CalculationUsage</code> that are <code>nestedUsages</code> of this <code>Usage</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>ConstraintUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + + + + <p>The ExhibitStateUsages that have a certain StateUsage as their <tt>exhibitedState</tt>.</p> - - - - - - <p>The <code>RequirementUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</p> - + + + + + + + + <p>The StateDefinitions with a certain <tt>doAction</tt>.</p> - - - - - - <p>The <code>ConcernUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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 <code>CaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</code>.</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 <code>AnalysisCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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>The <code>VerificationCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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>The <code>UseCaseUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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 <code>ViewUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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>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 + isParallel implies + ownedAction.incomingTransition->isEmpty() and + ownedAction.outgoingTransition->isEmpty() + + + + + <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 + 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>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>ViewpointUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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>RenderingUsages</code> that are <code>nestedUsages</code> of this <code>Usage</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>MetadataUsages</code> that are <code>ownedMembers</code> of this of this <code>Usage</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 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>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>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>nestedMetadata</code> is nested.</p> - - - - - - - - - <p>The Usage in which the <code>nestedOccurrence</code> is nested.</p> - - - - - - - - - <p>The <code>Definition</code> that owns the <code>ownedFlow</code>.</p> - - - - - - - - - <p>The Usage in which the <code>nestedAttribute</code> is nested.</p> - - - - - - - - - <p>The Usage in which the <code>nestedInterface</code> is nested.</p> - - - - - - - - - <p>The Definition that owns the <code>ownedConnection</code>.</p> - - - - - - - - - <p>The Usage that owns a certain <code>nestedRendering</code>.</p> - - - - - - - - - <p>The Definition that owns the <code>ownedMetadata</code>.</p> - - - - - - - - <p>The Definition that owns the <code>ownedPort</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 Usage in which the <code>nestedTransition</code> is nested.</p> + + + + <p>Indicates that the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is a <code>guardExpression</code>.</p> - - - - - - - - <p>The Usages that feature a certain Usage.</p> + + + + <p>Indicates that the <code>transitionFeature</code> of a <code>TransitionFeatureMembership</code> is an <code>effectAction</code>.</p> - - - - + - - - - <p>The Usage that owns the <code>nestedConcern</code>.</p> + + + + <p>The StateUsages with a certain <tt>exitAction</tt>.</p> - - + + - - - - <p>The Definition that owns a certain <code>ownedView</code>.</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 Usage in which the <code>nestedUsage</code> is nested.</p> + + + + <p>The TransitionUsage that has a certain <tt>effectAction</tt>.</p> - - + + + - - - - <p>The Definition that owns a certain <code>ownedRendering</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 Usage that owns the <code>nestedReference</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>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>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>A <code>ReferenceUsage</code> is always referential.</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 - isReference + kind = TransitionFeatureKind::trigger implies + transitionFeature.oclIsKindOf(AcceptActionUsage) - - - - <p>Always <code>true</code> for a <code>ReferenceUsage</code>.</code> + + + <p>The <code>owningType</code> of a <code>TransitionFeatureMembership</code> must be a <code>TransitionUsage</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> + + + 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> + + + 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>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>Step</code> that is the <code>ownedMemberFeature</code> of this <code>TransitionFeatureMembership</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 Usage in which the <code>nestedAnalysisCase</code> is nested.</p> + + + + <p>The TransitionUsage incoming to a certain target <tt>ActionUsage</tt>.</p> - - + + - - - - <p>The Definition that owns the <code>ownedRequirement</code>.</p> + + + + <p>The TransitionUsage that is guarded by a certain Expression.</p> - - + + + - - - - <p>The Definition that owns the <code>ownedEnumeration</code>.</p> + + + + <p>The StateUsages with a certain <tt>entryAction</tt>.</p> - - + + - - - - <p>The Usage that owns the <code>nestedEnumeration</code>.</p> + + + + <p>The TransitionUsage outgoing from a certain source <tt>ActionUsage</tt>.</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>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>The <code>membershipOwningNamespace</code> of a <code>VariantMembership</code> must be a variation-point <code>Definition</code> or <code>Usage</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 - membershipOwningNamespace.oclIsKindOf(Definition) and - membershipOwningNamespace.oclAsType(Definition).isVariation or -membershipOwningNamespace.oclIsKindOf(Usage) and - membershipOwningNamespace.oclAsType(Usage).isVariation + 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>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 + 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>Usage</code> that represents a variant in the context of the <code>owningVariationDefinition</code> or <code>owningVariationUsage</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> - - - - - - - - - <p>The Usages that have a certain Usage as a <code>flow</code>.</p> + + OCL2.0 + specializesFromLibrary('Actions::transitionActions') + + + + + <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 + source = + let sourceFeature : Feature = sourceFeature() in + if sourceFeature = null then null + else sourceFeature.featureTarget.oclAsType(ActionUsage) + + + + + <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 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 + 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> - - - - - - - - - <p>The Usage in which the <code>nestedState</code> is nested.</p> + + OCL2.0 + let successions : Sequence(Successions) = + ownedMember->selectByKind(Succession) in +successions->notEmpty() and +successions->at(1).targetFeature.featureTarget-> + forAll(oclIsKindOf(ActionUsage)) + + + + + <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>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>If a <code>Definition</code> is a variation, then all it must not have any <code>ownedFeatureMemberships</code>.</p> + + OCL2.0 + guardExpression = ownedFeatureMembership-> + selectByKind(TransitionFeatureMembership)-> + select(kind = TransitionFeatureKind::trigger).transitionFeature-> + selectByKind(Expression) + + + + + <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 - isVariation implies ownedFeatureMembership->isEmpty() + triggerAction->forAll(specializesFromLibrary('Actions::TransitionAction::accepter') and +guardExpression->forAll(specializesFromLibrary('Actions::TransitionAction::guard') and +effectAction->forAll(specializesFromLibrary('Actions::TransitionAction::effect')) - - - <p>The <code>variants</code> of a <code>Definition</code> are the <code>ownedVariantUsages</code> of its <code>variantMemberships</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 - variant = variantMembership.ownedVariantUsage + triggerAction = ownedFeatureMembership-> + selectByKind(TransitionFeatureMembership)-> + select(kind = TransitionFeatureKind::trigger).transitionFeatures-> + selectByKind(AcceptActionUsage) - - - <p>The <code>variantMemberships</code> of a <code>Definition</code> are those <code>ownedMemberships</code> that are <code>VariantMemberships</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 - variantMembership = ownedMembership->selectByKind(VariantMembership) + succession.sourceFeature = source - - - <p>A variation <code>Definition</code> may not specialize any other variation <code>Definition</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 - isVariation implies - not ownedSpecialization.specific->exists( - oclIsKindOf(Definition) and - oclAsType(Definition).isVariation) + ownedMember->selectByKind(BindingConnector)->exists(b | + b.relatedFeatures->includes(source) and + b.relatedFeatures->includes(inputParameter(1))) - - - <p>The <code>usages</code> of a <code>Definition</code> are all its <code>features</code> that are <code>Usages</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 - usage = feature->selectByKind(Usage) + triggerAction->notEmpty() implies + let payloadParameter : Feature = inputParameter(2) in + payloadParameter <> null and + payloadParameter.subsetsChain(triggerAction->at(1), triggerPayloadParameter()) - - - <p>The <code>directedUsages</code> of a <code>Definition</code> are all its <code>directedFeatures</code> that are <code>Usages</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 - directedUsage = directedFeature->selectByKind(Usage) + ownedMember->selectByKind(BindingConnector)->exists(b | + b.relatedFeatures->includes(succession) and + b.relatedFeatures->includes(resolveGlobal( + 'TransitionPerformances::TransitionPerformance::transitionLink'))) - - - <p>The <code>ownedUsages</code> of a <code>Definition</code> are all its <code>ownedFeatures</code> that are <code>Usages</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 - ownedUsage = ownedFeature->selectByKind(Usage) + if triggerAction->isEmpty() then + inputParameters()->size() >= 1 +else + inputParameters()->size() >= 2 +endif + - - - <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>succession</code> of a <code>TransitionUsage</code> is its first <code>ownedMember</code> that is a <code>Succession</code>.</p> - + OCL2.0 - ownedAttribute = ownedUsage->selectByKind(AttributeUsage) + succession = ownedMember->selectByKind(Succession)->at(1) - - - <p>The <code>ownedReferences</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ReferenceUsages</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 - ownedReference = ownedUsage->selectByKind(ReferenceUsage) + source <> null and not source.oclIsKindOf(StateUsage) implies + triggerAction->isEmpty() - - - <p>The <code>ownedEnumerations</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>EnumerationUsages</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>The TransitionFeatureMembership that owns a certain Step (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> + + + + + + + + <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> - + OCL2.0 - ownedOccurrence = ownedUsage->selectByKind(OccurrenceUsage) + 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>ownedItems</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ItemUsages</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 - ownedItem = ownedUsage->selectByKind(ItemUsage) + 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>ownedParts</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>PartUsages</code>.</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 - ownedPart = ownedUsage->selectByKind(PartUsage) + isParallel implies + nestedAction.incomingTransition->isEmpty() and + nestedAction.outgoingTransition->isEmpty() - - - <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>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 - ownedPort = ownedUsage->selectByKind(PortUsage) + isSubstateUsage(false) implies + specializesFromLibrary('States::StateAction::exclusiveStates') - - - <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>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 - ownedConnection = ownedUsage->selectByKind(ConnectorAsUsage) + 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>ownedFlows</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>FlowUsages</code>.</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 - ownedFlow = ownedUsage->selectByKind(FlowUsage) + specializesFromLibrary('States::stateActions') - - - <p>The <code>ownedInterfaces</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>InterfaceUsages</code>.</p> + + + <p>A <code>StateUsage</code> must not have more than one owned <code>StateSubactionMembership</code> of each <code>kind</code>.</p> - + OCL2.0 - ownedInterface = ownedUsage->selectByKind(ReferenceUsage) + ownedMembership-> + selectByKind(StateSubactionMembership)-> + isUnique(kind) - - - <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>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 - ownedAllocation = ownedUsage->selectByKind(AllocationUsage) + isSubstateUsage(true) implies + specializesFromLibrary('States::StateAction::substates') - - - <p>The <code>ownedActions</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ActionUsages</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 - ownedAction = ownedUsage->selectByKind(ActionUsage) + isComposite and owningType <> null and +(owningType.oclIsKindOf(PartDefinition) or + owningType.oclIsKindOf(PartUsage)) implies + specializesFromLibrary('Parts::Part::ownedStates') - - - <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>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> - - 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>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> - - 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 <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> - - 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>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> - - 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> + + + + + + <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 - ownedRequirement = ownedUsage->selectByKind(RequirementUsage) - - - - - <p>The <code>ownedConcerns</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>ConcernUsages</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 - 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 + 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>entryAction</tt>.</p> + + + + + + + + + <p>The StateDefinitions with a certain <tt>exitAction</tt>.</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> + + + + + + + + <p>The StateDefinitions featuring a certain StateUsage.</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> + + + + + + + + <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> - + OCL2.0 - ownedVerificationCase = ownedUsage->selectByKind(VerificationCaseUsage) + exposedElement = ownedImport->selectByKind(Expose). + importedMemberships(Set{}).memberElement-> + select(elm | includeAsExposed(elm))-> + asOrderedSet() - - - <p>The <code>ownedUseCases</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>UseCaseUsages</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 - ownedUseCase = ownedUsage->selectByKind(UseCaseUsage) + satisfiedViewpoint = ownedRequirement-> + selectByKind(ViewpointUsage)-> + select(isComposite) - - - <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>viewConditions</code> of a <code>ViewUsage</code> are the <code>conditions</code> of its owned <code>ElementFilterMemberships</code>.</p> - + OCL2.0 - ownedView = ownedUsage->selectByKind(ViewUsage) + viewCondition = ownedMembership-> + selectByKind(ElementFilterMembership). + condition - - - <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>viewRendering</code> of a <code>ViewUsage</code> is the <code>referencedRendering</code> of its owned <code>ViewRenderingMembership<code>, if any.</p> - + OCL2.0 - ownedViewpoint = ownedUsage->selectByKind(ViewpointUsage) + viewRendering = + let renderings: OrderedSet(ViewRenderingMembership) = + featureMembership->selectByKind(ViewRenderingMembership) in + if renderings->isEmpty() then null + else renderings->first().referencedRendering + endif - - - <p>The <code>ownedRenderings</code> of a <code>Definition</code> are all its <code>ownedUsages</code> that are <code>RenderingUsages</code>.</p> + + + <p>A <code>ViewUsage</code> must have at most one <code>ViewRenderingMembership</code>.</p> - + OCL2.0 - ownedRendering = ownedUsage->selectByKind(RenderingUsage) + featureMembership-> + selectByKind(ViewRenderingMembership)-> + size() <= 1 - - - <p>The <code>ownedMetadata</code> of a <code>Definition</code> are all its <code>ownedMembers</code> that are <code>MetadataUsages</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 - ownedMetadata = ownedMember->selectByKind(MetadataUsage) + specializesFromLibrary('Views::views') - - - <p>If a <code>Definition</code> is a variation, then it must be abstract.</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 - isVariation implies isAbstract + owningType <> null and +(owningType.oclIsKindOf(ViewDefinition) or + owningType.oclIsKindOf(ViewUsage)) implies + specializesFromLibrary('Views::View::subviews') - - - - - - <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>ViewDefinition</code> that is the <code>definition</code> of this <code>ViewUsage</code>.</p> - - + + - - - <p>The <code>StateUsages</code> that are <code>ownedUsages</code> of this <code>Definition</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>TransitionUsages</code> that are <code>ownedUsages</code> of this <code>Definition</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>CalculationUsages</code> that are <code>ownedUsages</code> of this <code>Definition</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>ConstraintUsages</code> that are <code>ownedUsages</code> of this <code>Definition</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>RequirementUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + <p>Determine whether the given <code>element</code> meets all the owned and inherited <code>viewConditions</code>.</p> - - - - - - <p>The <code>ConcernUsages</code> that are <code>ownedUsages</code> of this <code>Definition</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 RenderingDefinitions that feature a certain <code>rendering</code>.</p> - - - - - - <p>The code>CaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + + + + <p>The ViewDefinition that owns a certain <code>viewCondition</code>.</p> - - - - - - <p>The <code>AnalysisCaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</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>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>The <code>VerificationCaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</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 + + + + + <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>UseCaseUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + OCL2.0 + owningType.oclIsKindOf(ViewDefinition) or +owningType.oclIsKindOf(ViewUsage) + + + + + + + + <p>The owned <code>RenderingUsage</code> that is either itself the <code>referencedRendering</code> or subsets the <code>referencedRendering</code>. - - + + + - - - <p>The <code>ViewUsages</code> that are <code>ownedUsages</code> of this <code>Definition</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> - - + + - - - <p>The <code>ViewpointUsages</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>RenderingUsages</code> that are <code>ownedUsages</code> of this <code>Definition</code>.</p> + + + + + + + + <p>The ViewDefinition that owns a certain <code>satisfiedViewpoint</code>.</p> + + + + + + + + + <p>The ViewDefinitions that feature a certain ViewUsage.</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 + viewpointStakeholder = framedConcern.featureMemberhsip-> + selectByKind(StakeholderMembership). + ownedStakeholderParameter + + + + + <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::viewpointChecks') + + + + + <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 + 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 <code>MetadataUsages</code> that are <code>ownedMembers</code> of this <code>Definition</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>The Definition that owns the <code>ownedPart</code>.</p> + + + + p>The ViewUsage that owns a certain <code>satisfiedViewpoint</code>.</p> - - + + - - - - <p>The Definition that owns the <code>ownedState</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> - - - - - - - - <p>The owning Definition of this VariantMembership, which must have <code>isVariation</code> = true.</p> + + OCL2.0 + isImportAll + + + + + <p>The <code>importOwningNamespace</code> of an <code>Expose</code> must be a <code>ViewUsage</code>.</p> - - - - - - - - - <p>The Usage that owns a certain <code>nestedView</code>.</p> + + OCL2.0 + importOwningNamespace.oclIsType(ViewUsage) + + + + + <p>An <code>Expose</code> always has <code>protected</code> visibility.</p> - - - - - - - - <p>The Usage in which the <code>nestedConstraint</code> is nested.</p> + + OCL2.0 + visibility = VisibilityKind::protected + + + + + + + + <p>An <code>Expose</code> always has <code>protected</code> visibility.</p> - - - - - - - - <p>The Definition that owns the <code>ownedAttribute</code>.</p> + + + + + + + + + <p>An <code>Expose</code> always imports all <code>Elements</code>, regardless of visibility (<code>isImportAll = true</code>).</p> - - - + + + + - - - - - <p>The Usage in which the <code>nestedUseCase</code> is nested.</p> + + + + <p>The ViewUsage that owns a certain <code>viewCondition</code>.</p> - - + + + - - - - <p>The <code>Usage</code> that owns the <code>nestedFlow</code>.</p> + + + + <p>The ViewpointUsage that has a certain <code>viewpointStakeholder</code>.</p> - - + + - - - - <p>The Usage that owns a certain <code>nestedViewpoint</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> - - - - - - - - <p>The Usage in which the <code>nestedRequirement</code> is nested.</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>The Definition that owns the <code>ownedItem</code>.</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>The Definitions that feature a certain Usage.</p> + + OCL2.0 + viewRendering = + let renderings: OrderedSet(ViewRenderingMembership) = + featureMembership->selectByKind(ViewRenderingMembership) in + if renderings->isEmpty() then null + else renderings->first().referencedRendering + endif + + + + + <p>The <code>viewConditions</code> of a <code>ViewDefinition</code> are the <code>conditions</code> of its owned <code>ElementFilterMemberships</code>.</p> + + + OCL2.0 + viewCondition = ownedMembership-> + selectByKind(ElementFilterMembership). + condition + + + + + <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>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 Definition that owns the <code>ownedAnalysisCase</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 Definition that owns a certain <code>ownedViewpoint</code>.</p> + + + + <p>The ViewDefinition that owns a certain <code>rendering</code>.</p> - - + + - - - - <p>The Definition that owns the <code>ownedAllocation</code>.</p> + + + + <p>A ViewUsage exposing a certain <code>exposedElement</code>.</p> - - + + + - - - - <p>The Usage that owns the <code>nestedAllocation</code>.</p> + + + + <p>The ViewpointDefinition that has a certain <code>viewpointStakeholder</code>.</p> - - + + - - - - <p>The Definitions that have a certain Usage as a <code>flow</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 Usage in which the <code>nestedPart</code> is nested.</p> - - - + + + + - - - <p>The Definition that owns this CaseUsage (if any).</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 Definition that owns the <code>ownedCase</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>The Usage that owns a certain <code>nestedVerificationCase</code>.</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 Definition that owns the <code>ownedUseCase</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 ItemUsages being typed by a certain Structure.</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 naming <code>Feature</code> of a <code>RenderingUsage</code> that is owned via a <code>ViewRenderingMembership</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(ViewRenderingMembership) and + ownedReferenceSubsetting <> null then + ownedReferenceSubsetting.referencedFeature.featureTarget +else + self.oclAsType(OccurrenceUsage).namingFeature() +endif + + + + + + + + - - - - <p>The Definition that owns the <code>ownedReference</code>.</p> + + + + <p>The RenderingUsages defined by a certain <code>renderingDefinition</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>The Usage in which the <code>nestedAction</code> is nested.</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 + viewpointStakeholder = framedConcern.featureMemberhsip-> + selectByKind(StakeholderMembership). + ownedStakeholderParameter + + + + + <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::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>MetadataDefinition</code> is an <code>ItemDefinition</code> that is also a <code>Metaclass</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>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>The <code>renderings</code> of a <code>RenderingDefinition</code> are all its <code>usages</code> that are <code>RenderingUsages</code>.</p> - + OCL2.0 - specializesFromLibrary('Metadata::MetadataItem') + rendering = usages->selectByKind(RenderingUsage) - - - - - - - - <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> + + + <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 - specializesFromLibrary('Metadata::metadataItems') + specializesFromLibrary('Views::Rendering') - - - - - - - <p>The <code>MetadataDefinition</code> that is the <code>definition</code> of this <code>MetadataUsage</code>.</p> + + + + <p>The <code>usages</code> of a <code>RenderingDefinition</code> that are <code>RenderingUsages</code>.</p> - - - - - + + - - - - <p>The Definition that owns the <code>ownedCalculation</code>.</p> - - - - - - - - - <p>The Usage in which the <code>nestedCalculation<code> is nested.</p> + + + + <p>The ViewUsages that have a certain <code>ViewDefinition</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>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>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>partDefinitions</code> of an <code>PartUsage</code> are those <code>itemDefinitions</code> that are <code>PartDefinitions</code>.</p> - + OCL2.0 - specializesFromLibrary('Calculations::calculations') + 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 - owningType <> null and -(owningType.oclIsKindOf(CalculationDefinition) or - owningType.oclIsKindOf(CalculationUsage)) implies - specializesFromLibrary('Calculations::Calculation::subcalculations') + partDefinition->notEmpty() - - - - - - - <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>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 + 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> + + + 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') + + + + + <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 + owningFeatureMembership <> null and +owningFeatureMembership.oclIsKindOf(StakeholderMembership) implies + specializesFromLibrary('Requirements::RequirementCheck::stakeholders') + + + + + + <p>The <code>itemDefinitions</code> of this PartUsage that are PartDefinitions.</p> + + + - - - <p>A <code>CalculationUsage</code> is not model-level evaluable.</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 - false - - - - - - - - - - - - + + OCL2.0 + specializesFromLibrary('Parts::Part') + + + - - - - <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>The ConcernUsages that are typed by a certain <code>concernDefinition</code>.</p> - - - - + + + + + + + + <p>The RequirementDefinitions that have a certain Usage as their <code>subjectParameter</code>.</p> + + + + + + + + + + + + + + + + + + + <p>TheStakehplderMembership that has a certain PartUsage as its <code>ownedStakeholderParameter</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>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>CalculationDefinition</code> must directly or indirectly specialize the <code>CalculationDefinition</code> <em><code>Calculations::Calculation</code></em> from the Systems Model Library.</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 - specializesFromLibrary('Calculations::Calculation') + specializesFromLibrary('Requirements::concernChecks') - - - <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>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 - calculation = action->selectByKind(CalculationUsage) + owningFeatureMembership <> null and +owningFeatureMembership.oclIsKindOf(FramedConcernMembership) implies + specializesFromLibrary('Requirements::RequirementCheck::concerns') - - - - - - - <p>The <code>actions</code> of this <code>CalculationDefinition</code> that are <code>CalculationUsages</code>.</p> + + + + <p>The ConcernDefinition that is the single type of this ConcernUsage.</p> - - - - + + - - - <p>A <code>CaseUsage</code> is a <code>Usage</code> of a <code>CaseDefinition</code>.</p> + + + + <p>The ActorMembership that has a certain PartUsage as its <code>ownedActorParameter</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>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>satisfyingFeature</code> of a <code>SatisfyRequirementUsage</code> is the <code>Feature</code> to which the <code>subjectParameter</code> is bound.</p> - + OCL2.0 - objectiveRequirement = - let objectives: OrderedSet(RequirementUsage) = - featureMembership-> - selectByKind(ObjectiveMembership). - ownedRequirement in - if objectives->isEmpty() then null - else objectives->first().ownedObjectiveRequirement + 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>A <code>CaseUsage</code> must have at most one <code>featureMembership</code> that is a <code>ObjectiveMembership</code>.</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 - featureMembership-> - selectByKind(ObjectiveMembership)-> - size() <= 1 + ownedMember->selectByKind(BindingConnector)-> + select(b | + b.relatedElement->includes(subjectParameter) and + b.relatedElement->exists(r | r <> subjectParameter))-> + size() = 1 - - - <p>A <code>CaseUsage</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</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 - featureMembership-> - selectByKind(SubjectMembership)-> - size() <= 1 + referencedFeatureTarget() <> null implies + referencedFeatureTarget().oclIsKindOf(RequirementUsage) - - - <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>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 + if isNegated then + specializesFromLibrary('Requirements::notSatisfiedRequirementChecks') +else + specializesFromLibrary('Requirements::satisfiedRequirementChecks') +endif + + + + + + + <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 RequirementDefinitions that have a certain PartUsage as an <code>actorParameter</code>.</p> + + + + + + + + + + + <p>The RequirementUsage that has a certain ConstraintUsage as a <code>requiredConstraint</code> (if any).</p> + + + + + + + + + + <p>The RequirementUsages typed by a certain RequirementDefinition.</p> + + + + + + + + + <p>The SatifyRequirementUsages that have a certain RequirementUsage as their <tt>satisfiedRequirement</tt>.</p> + + + + + + + + + <p>The RequirementUsages that have a certain PartUsage as an <code>actorParameter</code>.</p> + + + + + + + + + + + <p>The RequirementUsage that addresses a certain <code>addressedConcern</code>.</p> + + + + + + + + + <p>The SatisfyRequirementUsages that have a certain Feature as their <tt>satisfyingFeature</tt>.</p> + + + + + + + + + <p>The RequirementDefinition that has a certain ConstraintUsage as an <code>assumedConstraint</code> (if any).</p> + + + + + + + + + + <p>The RequirementDefinition that addresses a certain <code>addressedConcern</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 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>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 - subjectParameter = - let subjects : OrderedSet(SubjectMembership) = - featureMembership->selectByKind(SubjectMembership) in - if subjects->isEmpty() then null - else subjects->first().ownedSubjectParameter - endif + assumedConstraint = ownedFeatureMembership-> + selectByKind(RequirementConstraintMembership)-> + select(kind = RequirementConstraintKind::assumption). + ownedConstraint - - - <p>The <code>subjectParameter</code> of a <code>CaseUsage</code> must be its first <code>input</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 - input->notEmpty() and input->first() = subjectParameter + framedConcern = featureMembership-> + selectByKind(FramedConcernMembership). + ownedConcern - - - <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>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 - specializesFromLibrary('Cases::cases') + requiredConstraint = ownedFeatureMembership-> + selectByKind(RequirementConstraintMembership)-> + select(kind = RequirementConstraintKind::requirement). + ownedConstraint - - - <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>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 - isComposite and owningType <> null and - (owningType.oclIsKindOf(CaseDefinition) or - owningType.oclIsKindOf(CaseUsage)) implies - specializesFromLibrary('Cases::Case::subcases') + stakeholderParameter = featureMembership-> + selectByKind(AStakholderMembership). + ownedStakeholderParameter - - - - <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>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 CaseDefinitions that have a certain RequirementUsage as their <code>objectiveRequirement</code>.</p> - - - - - - - - - - <p>The ObjectMembership that owns a particular RequirementUsage as its <code>ownedObjectiveRequirement</code>.</p> - - - - - - - - - - <p>The CaseDefinitions that have a certain Usage as their <code>subjectParameter</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>subjectParameter</code> of a <code>RequirementUsage</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</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 + subjectParameter = + let subjects : OrderedSet(SubjectMembership) = + featureMembership->selectByKind(SubjectMembership) in + if subjects->isEmpty() then null + else subjects->first().ownedSubjectParameter endif - - - <p>A <code>CaseDefinition</code> must have at most one <code>featureMembership</code> that is a <code>ObjectiveMembership</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 + text = documentation.body + + + + + <p>A <code>RequirementDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> + + OCL2.0 featureMembership-> - selectByKind(ObjectiveMembership)-> + selectByKind(SubjectMembership)-> 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> + + + <p>The <code>subjectParameter</code> of a <code>RequirementUsage</code> must be its first <code>input</code>.</p> - + OCL2.0 - subjectParameter = - let subjectMems : OrderedSet(SubjectMembership) = - featureMembership->selectByKind(SubjectMembership) in - if subjectMems->isEmpty() then null - else subjectMems->first().ownedSubjectParameter - endif + input->notEmpty() and input->first() = subjectParameter - - - <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>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 - actorParameter = featureMembership-> - selectByKind(ActorMembership). - ownedActorParameter + specializesFromLibrary('Requirements::requirementChecks') - - - <p>A <code>CaseDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> + + + <p>A composite <code>RequirementUsage</code> whose <code>owningType</code> is a <code>RequirementDefinition</code> or <code>RequirementUsage</code> but is <em>not</em> owned via a <code>RequirementConstraintMembership</code> must directly or indirectly specialize the <code>RequirementUsage</code> <em><code>Requirements::RequirementCheck::subrequirements</code></em> from the Systems Model Library.</p> - - English - featureMembership->selectByKind(SubjectMembership)->size() <= 1 + + OCL2.0 + isComposite and owningType <> null and + (owningType.oclIsKindOf(RequirementDefinition) or + owningType.oclIsKindOf(RequirementUsage)) and + not owningFeatureMembership.oclIsKindOf(RequirementConstraintMembership) implies + specializesFromLibrary('Requirements::RequirementCheck::subrequirements') - - - <p>The <code>subjectParameter</code> of a <code>CaaseDefinition</code> must be its first <code>input</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 - input->notEmpty() and input->first() = subjectParameter + 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>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>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 - specializesFromLibrary('Cases::Case') + owningFeatureMembership <> null and +owningFeatureMembership.oclIsKindOf(RequirementVerificationMembership) implies + specializesFromLibrary('VerificationCases::VerificationCase::obj::requirementVerifications') - - - - <p>The <code>RequirementUsage</code> representing the objective of this <code>CaseDefinition</code>.</p> - + + + + <p>The <code>RequirementDefinition</code> that is the single <code>definition</code> of this <code>RequirementUsage</code>.</p> - - + + - - - <p>The <code>parameter</code> of this <code>CaseDefinition</code> that represents its subject.</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 <code>parameters</code> of this <code>CaseDefinition</code> that represent actors involved in the case.</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 CaseUsages that have a certain PartUsage as an <code>actorParameter</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 Usage in which the <code>nestedCase</code> is nested.</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 CaseUsages being typed by a certain CaseDefinition.</p> + + + + + + + <p>The <code>parameter</code> of this <code>RequirementUsage</code> that represents its subject.</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>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> - - 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>parameters</code> of this <code>RequirementUsage</code> that represent actors involved in the requirement.</p> - - OCL2.0 - ownedObjectiveRequirement.isComposite - - - - - - - - <p>The RequirementUsage that is the <code>ownedMemberFeature</code> of this RequirementUsage.</p> - + + + + + + + + <p>The <code>parameters</code> of this <code>RequirementUsage</code> that represent stakeholders for the requirement.</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 RequirementUsages that have a certain Usage as their <code>subjectParameter</code>.</p> + + + + + + - - - <p>A <code>ViewpointUsage</code> is a <code>Usage</code> of a <code>ViewpointDefinition</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>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 - viewpointStakeholder = framedConcern.featureMemberhsip-> - selectByKind(StakeholderMembership). - ownedStakeholderParameter - - - - - <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::viewpointChecks') - - - - - <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 <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 - isComposite and owningType <> null and -(owningType.oclIsKindOf(ViewDefinition) or - owningType.oclIsKindOf(ViewUsage)) implies - specializesFromLibrary('Views::View::viewpointSatisfactions') + owningType.oclIsKindOf(RequirementUsage) or +owningType.oclIsKindOf(RequirementDefinition) or +owningType.oclIsKindOf(CaseDefinition) or +owningType.oclIsKindOf(CaseUsage) + - - - - <p>The <code>ViewpointDefinition</code> that is the <code>definition</code> of this <code>ViewpointUsage<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>The <code>PartUsage</code> specifying the actor.</p> - - + + + - - - - <p>The ViewUsages that have a certain <code>ViewDefinition</code>.</p> + + + + <p>The RequirementConstraintMembership that owns a certain ConstraintUsage as its <code>ownedConstraint</code>.</p> - - + + + - - - - <p>The RenderingDefinitions that feature a certain <code>rendering</code>.</p> + + + + <p>The SubjectMembership that owns a particular Parameter as its <code>ownedSubjectParameter</code>.</p> - - + + + - - - - <p>The ViewDefinition that owns a certain <code>viewCondition</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>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>FramedConcernMembership</code> is a <code>RequirementConstraintMembership</code> for a framed <code>ConcernUsage</code> of a <code>RequirementDefinition</code> or <code>RequirementUsage</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> + + + <p>A <code>FramedConcernMembership</code> must have <code>kind = requirement</code>.</p> - + OCL2.0 - exposedElement = ownedImport->selectByKind(Expose). - importedMemberships(Set{}).memberElement-> - select(elm | includeAsExposed(elm))-> - asOrderedSet() + kind = RequirementConstraintKind::requirement - - - <p>The <code>satisfiedViewpoints</code> of a <code>ViewUsage</code> are its <code>ownedRequirements</code> that are composite <code>ViewpointUsages</code>. + + + + <p>The <code>kind</code> of an <code>FramedConcernMembership</code> must be <code>requirement</code>.</p> - - OCL2.0 - satisfiedViewpoint = ownedRequirement-> - selectByKind(ViewpointUsage)-> - select(isComposite) - - - - - <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>ConcernUsage</code> that is the <code>ownedConstraint</code> of this <code>FramedConcernMembership</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>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> - - 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> + + + + + + + <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>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 - featureMembership-> - selectByKind(ViewRenderingMembership)-> - size() <= 1 + text = documentation.body - - - <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>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 - specializesFromLibrary('Views::views') + assumedConstraint = ownedFeatureMembership-> + selectByKind(RequirementConstraintMembership)-> + select(kind = RequirementConstraintKind::assumption). + ownedConstraint - - - <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>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 - 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 <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>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 ViewUsage exposing a certain <code>exposedElement</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> + 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 - view = usage->selectByKind(ViewUsage) + subjectParameter = + let subjects : OrderedSet(SubjectMembership) = + featureMembership->selectByKind(SubjectMembership) in + if subjects->isEmpty() then null + else subjects->first().ownedSubjectParameter + endif - - - <p>The <code>satisfiedViewpoints</code> of a <code>ViewDefinition</code> are its <code>ownedRequirements</code> that are composite <code>ViewpointUsages</code>. + + + <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 - satisfiedViewpoint = ownedRequirement-> - selectByKind(ViewpointUsage)-> - select(isComposite) + framedConcern = featureMembership-> + selectByKind(FramedConcernMembership). + ownedConcern - - - <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>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 - viewRendering = - let renderings: OrderedSet(ViewRenderingMembership) = - featureMembership->selectByKind(ViewRenderingMembership) in - if renderings->isEmpty() then null - else renderings->first().referencedRendering - endif + actorParameter = featureMembership-> + selectByKind(ActorMembership). + ownedActorParameter - - - <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>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 - viewCondition = ownedMembership-> - selectByKind(ElementFilterMembership). - condition + stakeholderParameter = featureMembership-> + selectByKind(StakholderMembership). + ownedStakeholderParameter - - - <p>A <code>ViewDefinition</code> must have at most one <code>ViewRenderingMembership</code>.</p> + + + <p>A <code>RequirementDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> - + OCL2.0 - featureMembership-> - selectByKind(ViewRenderingMembership)-> + featureMembership-> + selectByKind(SubjectMembership)-> 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> + + + <p>The <code>subjectParameter</code> of a <code>RequirementDefinition</code> must be its first <code>input</code>.</p> - + OCL2.0 - specializesFromLibrary('Views::View') + input->notEmpty() and input->first() = subjectParameter - - - - <p>The <code>usages</code> of this <code>ViewDefinition</code> that are <code>ViewUsages</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> - - - - - - <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> + + OCL2.0 + specializesFromLibrary('Requirements::RequirementCheck') + + + + + + <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>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>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>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 <code>parameter</code> of this <code>RequirementDefinition</code> that represents its subject.</p> - - - - + + + + - - - - - <p>The ViewUsage that owns a certain <code>viewCondition</code>.</p> - - - - - - - - - - <p>The ViewDefinition that owns a certain <code>rendering</code>.</p> + + + <p>The <code>parameters</code> of this <code>RequirementDefinition</code> that represent actors involved in the requirement.</p> - - - - - - - - <p>The ViewpointUsage that has a certain <code>viewpointStakeholder</code>.</p> + + + + + + + + <p>The <code>parameters</code> of this <code>RequirementDefinition</code> that represent stakeholders for the requirement.</p> - - - - - - - - <p>The RenderingUsages defined by a certain <code>renderingDefinition</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 ViewDefinition that owns a certain <code>satisfiedViewpoint</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 ViewUsage that owns a certain <code>rendering</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>ViewRenderingMembership</code> is a <coed>FeatureMembership</code> that identifies the <code>viewRendering</code> of a <code>ViewDefinition</code> or <code>ViewUsage</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>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>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 - referencedRendering = + referencedConstraint = let referencedFeature : Feature = - ownedRendering.referencedFeatureTarget() in - if referencedFeature = null then ownedRendering - else if referencedFeature.oclIsKindOf(RenderingUsage) then - refrencedFeature.oclAsType(RenderingUsage) + ownedConstraint.referencedFeatureTarget() in + if referencedFeature = null then ownedConstraint + else if referencedFeature.oclIsKindOf(ConstraintUsage) then + refrencedFeature.oclAsType(ConstraintUsage) else null endif endif - - - <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>owningType</code> of a <code>RequirementConstraintMembership</code> must be a <code>RequirementDefinition</code> or a <code>RequirementUsage</code>.</p> + + + OCL2.0 + owningType.oclIsKindOf(RequirementDefinition) or +owningType.oclIsKindOf(RequirementUsage) + + + + + <p>The <code>ownedConstraint</code> of a <code>RequirementConstraintMembership</code> must be composite.</p> - + OCL2.0 - owningType.oclIsKindOf(ViewDefinition) or -owningType.oclIsKindOf(ViewUsage) + ownedConstraint.isComposite - + - - - <p>The owned <code>RenderingUsage</code> that is either itself the <code>referencedRendering</code> or subsets the <code>referencedRendering</code>. + + + <p>Whether the <code>RequirementConstraintMembership</code> is for an assumed or required <code>ConstraintUsage</code>.</p> - - + + + + <p>The <code>ConstraintUsage</code> that is the <code>ownedMemberFeature</code> of this <code>RequirementConstraintMembership</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> + + + <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 ViewUsage that owns a certain <code>satisfiedViewpoint</code>.</p> + + + + <p>The AddressedConcernMembership that owns a certain ConcernUsage as its <code>ownedConcern</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>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>Expose</code> always imports all <code>Elements</code>, regardless of visibility.</p> + + + <p>The <code>owningType</code> of a <code>StakeholderMembership</code> must be a <code>RequirementDefinition</code> or <code>RequirementUsage</code>.</p> - + OCL2.0 - isImportAll + owningType.oclIsKindOf(RequirementUsage) or +owningType.oclIsKindOf(RequirementDefinition) - - - <p>The <code>importOwningNamespace</code> of an <code>Expose</code> must be a <code>ViewUsage</code>.</p> + + + + + + <p>The <code>PartUsage</code> specifying the stakeholder.</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 - importOwningNamespace.oclIsType(ViewUsage) + specializesFromLibrary('Requirements::ConcernCheck') - - - <p>An <code>Expose</code> always has <code>protected</code> visibility.</p> + + + + + + <p>The RequirementDefinition that has a certain ConstraintUsage as a <code>requiredConstraint</code> (if any).</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> + + OCL2.0 - visibility = VisibilityKind::protected + owningType.oclIsType(RequirementDefinition) or +owningType.oclIsType(RequiremenCaseRequirementDefinition) or +owningType.oclIsType(CaseDefinition) or +owningType.oclIsType(CaseUsage) + - - + + - - - <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>The <code>Usage</code< that is the <code>ownedMemberParameter</code> of this <code>SubjectMembership</code>.</p> - - - + + + - - - - + + + + <p>The AddressedConcernMembership that has a certain ConcernUsage as its <code>addressedConcern</code>.</p> + + + - - - - <p>The ViewDefinitions that feature a certain ViewUsage.</p> + + + + <p>The RequirementConstraintMembership that has a certain ConstraintUsage as its <code>referencedConstraint</code>.</p> - - + + - - - - <p>The ViewpointDefinition that has a certain <code>viewpointStakeholder</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 + 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> + + + OCL2.0 + if isNegated then + specializesFromLibrary('Constraints::negatedConstraintChecks') +else + specializesFromLibrary('Constraints::assertedConstraintChecks') +endif + + + + + <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 + referencedFeatureTarget() <> null implies + referencedFeatureTarget().oclIsKindOf(ConstraintUsage) + + + + + + + + + <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>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>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>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 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 - specializesFromLibrary('Views::renderings') + 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>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>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 - owningType <> null and -(owningType.oclIsKindOf(RenderingDefinition) or - owningType.oclIsKindOf(RenderingUsage)) implies - specializesFromLibrary('Views::Rendering::subrenderings') + specializesFromLibrary('Constraints::constraintChecks') - - - <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>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 - owningFeatureMembership <> null and -owningFeatureMembership.oclIsKindOf(ViewRenderingMembership) implies - redefinesFromLibrary('Views::View::viewRendering') + owningType <> null and +(owningType.oclIsKindOf(ItemDefinition) or + owningType.oclIsKindOf(ItemUsage)) implies + specializesFromLibrary('Items::Item::checkedConstraints') - - - - <p>The <code>RenderingDefinition</code> that is the <code>definition</code> of this <code>RenderingUsage</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>RenderingUsage</code> that is owned via a <code>ViewRenderingMembership</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 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(ViewRenderingMembership) and - ownedReferenceSubsetting <> null then +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>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>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>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>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 - viewpointStakeholder = framedConcern.featureMemberhsip-> - selectByKind(StakeholderMembership). - ownedStakeholderParameter + specializesFromLibrary('Constraints::ConstraintCheck') - - - <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 ConstraintUsages typed by a certain Predicate.</p> - + + + + + + + + + <p>The AssertConstraintUsages that have a certain ConstraintUsage as their <tt>assertedConstraint</tt>.</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 - specializesFromLibrary('Views::ViewpointCheck') + itemDefinition = occurrenceDefinition->selectByKind(Structure) - - - - <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>An <code>ItemUsage</code> must directly or indirectly specialize the Systems Model Library <code>ItemUsage</code> <em><code>items</code></em>.</p> - - + + OCL2.0 + specializesFromLibrary('Items::items') + + + + + <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 +(owningType.oclIsKindOf(ItemDefinition) or + owningType.oclIsKindOf(ItemUsage)) implies + specializesFromLibrary('Items::Item::subitem') + + + + + + <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>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>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>The <code>renderings</code> of a <code>RenderingDefinition</code> are all its <code>usages</code> that are <code>RenderingUsages</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> - + OCL2.0 - rendering = usages->selectByKind(RenderingUsage) + specializesFromLibrary('Items::Item') - - - <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 EnumerationUsages that are typed by a certain EnumerationDefinition.</p> - + + + + + + + + <p>The EnumerationDefinition that owns a certain <code>enumeratedValue</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>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 - specializesFromLibrary('Views::Rendering') + isVariation - - - - <p>The <code>usages</code> of a <code>RenderingDefinition</code> that are <code>RenderingUsages</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>The IncludeUseCaseUsages that have a certain UseCaseUsage as their <code>includedUseCase</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>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>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> + + + <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 - isIndividual implies individualDefinition <> null + owningType <> null and +(owningType.oclIsKindOf(UseCaseDefinition) or + owningType.oclIsKindOf(UseCaseUsage) implies + specializesFromLibrary('UseCases::UseCase::includedUseCases') - - - <p>An <code>OccurrenceUsage</code> must directly or indirectly specialize <code><em>Occurrences::occurrences</em></code> from the Kernel Semantic Library.</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 - specializesFromLibrary('Occurrences::occurrences') + referencedFeatureTarget() <> null implies + referencedFeatureTarget().oclIsKindOf(UseCaseUsage) - - - <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>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 - 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 UseCaseUsage that includes a certain <code>includedUseCase</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 UseCaseDefinition that includes a certain <code>includedUseCase</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>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 - portionKind = PortionKind::timeslice implies - specializesFromLibrary('Occurrences::Occurrence::timeSlices') + includedUseCase = ownedUseCase-> + selectByKind(IncludeUseCaseUsage). + useCaseIncluded - - - <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>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 - portionKind <> null implies - owningType <> null and - (owningType.oclIsKindOf(OccurrenceDefinition) or - owningType.oclIsKindOf(OccurrenceUsage)) + specializesFromLibrary('UseCases::useCases') - - - <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>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 - portionKind <> null implies isPortion + isComposite and owningType <> null and +(owningType.oclIsKindOf(UseCaseDefinition) or + owningType.oclIsKindOf(UseCaseUsage)) implies + specializesFromLibrary('UseCases::UseCase::subUseCases') - - - - <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>The <code>UseCaseDefinition</code> that is the <code>definition</code> of this <code>UseCaseUsage</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>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 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 UseCaseUsages being typed by a certain UseCaseDefinition.</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>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>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>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 - isIndividual implies specializesFromLibrary('Occurrences::Life') + includedUseCase = ownedUseCase-> + selectByKind(IncludeUseCaseUsage). + useCaseIncluded - - - <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>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 - isIndividual implies - multiplicity <> null and - multiplicity.specializesFromLibrary('Base::zeroOrOne') + specializesFromLibrary('UseCases::UseCase') - - - - - - - <p>Whether this <code>OccurrenceDefinition</code> is constrained to represent at most one thing.</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 EventOccurrenceUsages that reference a certain <code>eventOccurrence</code>.</p> + + + + <p>The CaseUsages that have a certain Usage as their <code>subjectParameter</code>.</p> - - + + + + - - - - <p>The <code>OccurrenceUsages</code> being typed by a certain <code>Class</code>.</p> + + + + <p>The CaseDefinitions that have a certain RequirementUsage as their <code>objectiveRequirement</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 CaseDefinitions that have a certain Usage as their <code>subjectParameter</code>.</p> - + + + + + - - - - <p>The <code>OccurrenceUsage</code> that has a certain <code>individualDefinition</code>.</p> + + + + <p>The ObjectMembership that owns a particular RequirementUsage as its <code>ownedObjectiveRequirement</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>CaseUsage</code> is a <code>Usage</code> of a <code>CaseDefinition</code>.</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>objectiveRequirement</code> of a <code>CaseUsage</code> is the <code>RequirementUsage</code> it owns via an <case>ObjectiveMembership</code>, if any.</p> - + OCL2.0 - eventOccurrence = - if referencedFeatureTarget() = null then self - else if referencedFeatureTarget().oclIsKindOf(OccurrenceUsage) then - referencedFeatureTarget().oclAsType(OccurrenceUsage) - else null - endif endif + objectiveRequirement = + let objectives: OrderedSet(RequirementUsage) = + featureMembership-> + selectByKind(ObjectiveMembership). + ownedRequirement in + if objectives->isEmpty() then null + else objectives->first().ownedObjectiveRequirement + 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>A <code>CaseUsage</code> must have at most one <code>featureMembership</code> that is a <code>ObjectiveMembership</code>.</p> - + OCL2.0 - referencedFeatureTarget() <> null implies - referencedFeatureTarget().oclIsKindOf(OccurrenceUsage) + featureMembership-> + selectByKind(ObjectiveMembership)-> + size() <= 1 - - - <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>A <code>CaseUsage</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> - + OCL2.0 - owningType <> null and -(owningType.oclIsKindOf(OccurrenceDefinition) or - owningType.oclIsKindOf(OccurrenceUsage)) implies - specializesFromLibrary('Occurrences::Occurrence::timeEnclosedOccurrences') + featureMembership-> + selectByKind(SubjectMembership)-> + size() <= 1 - - - <p>An <code>EventOccurrenceUsage</code> must be referential.</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 - isReference + actorParameter = featureMembership-> + selectByKind(ActorMembership). + ownedActorParameter - - - - <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>subjectParameter</code> of a <code>CaseUsage</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>subjectParameter</code> of a <code>CaseUsage</code> must be its first <code>input</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 + 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> + + + 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>Always true for an <code>EventOccurrenceUsage</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>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 CaseDefinitions that have a certain PartUsage as an <code>actorParameter</code>.</p> + + + + + + + + + + + <p>The Usage in which the <code>nestedCase</code> is nested.</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>partDefinitions</code> of an <code>PartUsage</code> are those <code>itemDefinitions</code> that are <code>PartDefinitions</code>.</p> + + + <p>The <code>owningType</code> of an <code>ObjectiveMembership</code> must be a <code>CaseDefinition</code> or <code>CaseUsage</code>.</p> - + OCL2.0 - itemDefinition->selectByKind(PartDefinition) + owningType.oclIsType(CaseDefinition) or +owningType.oclIsType(CaseUsage) + - - - <p>At least one of the <code>itemDefinitions</code> of a <code>PartUsage</code> must be a <code>PartDefinition</code>.</p> + + + <p>The <code>ownedObjectiveRequirement</code> of an <code>ObjectiveMembership</code> must be composite.</p> - + OCL2.0 - partDefinition->notEmpty() + ownedObjectiveRequirement.isComposite - - - <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>The RequirementUsage that is the <code>ownedMemberFeature</code> of this RequirementUsage.</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 - specializesFromLibrary('Parts::parts') + objectiveRequirement = + let objectives: OrderedSet(RequirementUsage) = + featureMembership-> + selectByKind(ObjectiveMembership). + ownedRequirement in + if objectives->isEmpty() then null + else objectives->first().ownedObjectiveRequirement + endif - - - <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>CaseDefinition</code> must have at most one <code>featureMembership</code> that is a <code>ObjectiveMembership</code>.</p> - + OCL2.0 - isComposite and owningType <> null and -(owningType.oclIsKindOf(ItemDefinition) or - owningType.oclIsKindOf(ItemUsage)) implies - specializesFromLibrary('Items::Item::subparts') + featureMembership-> + selectByKind(ObjectiveMembership)-> + size() <= 1 - - - <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>The <code>subjectParameter</code> of a <code>CaseDefinition</code> is the <code>ownedSubjectParameter</code> of its <code>SubjectMembership</code> (if any).</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') + subjectParameter = + let subjectMems : OrderedSet(SubjectMembership) = + featureMembership->selectByKind(SubjectMembership) in + if subjectMems->isEmpty() then null + else subjectMems->first().ownedSubjectParameter + endif - - - <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> + + + <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 - owningFeatureMembership <> null and -owningFeatureMembership.oclIsKindOf(StakeholderMembership) implies - specializesFromLibrary('Requirements::RequirementCheck::stakeholders') + actorParameter = featureMembership-> + selectByKind(ActorMembership). + ownedActorParameter - - - - <p>The <code>itemDefinitions</code> of this PartUsage that are PartDefinitions.</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>A <code>CaseDefinition</code> must have at most one <code>featureMembership</code> that is a <code>SubjectMembership</code>.</p> - - OCL2.0 - specializesFromLibrary('Parts::Part') + + English + featureMembership->selectByKind(SubjectMembership)->size() <= 1 - - - - - - <p>The PartUsages typed by a certain PartDefinition.</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> + + + <p>The <code>subjectParameter</code> of a <code>CaaseDefinition</code> must be its first <code>input</code>.</p> - + OCL2.0 - ownedEndFeature->size() = 2 implies - specializesFromLibrary('Interfaces::binaryInterfaces') + input->notEmpty() and input->first() = subjectParameter - - - <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>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('Interfaces::interfaces') + specializesFromLibrary('Cases::Case') - - - - <p>The <code>InterfaceDefinitions</code> that type this <code>InterfaceUsage</code>.</p> + + + + <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 InterfaceUsages typed by a certain InterfaceDefinition.</p> + + + + <p>The CaseUsages that have a certain PartUsage as an <code>actorParameter</code>.</p> - - + + + + - - - - <p>The InterfaceDefinitions that have a certain PortUsage as an <code>interfaceEnd</code>.</p> + + + + <p>The CaseUsages being typed by a certain CaseDefinition.</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 - specializesFromLibrary('Interfaces::Interface') - - - - - <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 - ownedEndFeature->size() = 2 implies - specializesFromLibrary('Interfaces::BinaryInterface') - - - - - - <p>The <code>PortUsages</code> that are the <code>connectionEnds</code> of this <code>InterfaceDefinition</code>. - - - - - - + + + + + diff --git a/org.omg.sysml/model/SysML_only_xmi.uml b/org.omg.sysml/model/SysML_only_xmi.uml index f7263460f..5f5d91774 100644 --- a/org.omg.sysml/model/SysML_only_xmi.uml +++ b/org.omg.sysml/model/SysML_only_xmi.uml @@ -1,5 +1,5 @@ - + diff --git a/org.omg.sysml/model/SysML_xmi.uml b/org.omg.sysml/model/SysML_xmi.uml index 18f6d5bcf..2402d4bdc 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. @@ -6638,14 +6638,14 @@ endif - <p>If the <code>owningType</code> of a <code>MultiplicityRange</code> is a <code>Feature</code>, but not an owned cross <code>Feature</code>, then the <code>bounds</code> of the <code>MultiplicityRange</code> must have the same <code>featuringTypes</code> as the <code>MultiplicityRange</code>. If the <code>owningType</code> is an owned cross <code>Feature</code>, then the <code>bounds</code> must have the same <code>featuringTypes</code> as the owning end <code>Feature</code> of the <code>owningType</code>. (This allows a cross multiplicity to be evaluated in the same context as the multiplicity of the end <code>Feature</code>.)</p> + <p>If the <code>owningNamespace</code> of a <code>MultiplicityRange</code> is a <code>Feature</code>, but not an owned cross <code>Feature</code>, then the <code>bounds</code> of the <code>MultiplicityRange</code> must have the same <code>featuringTypes</code> as the <code>MultiplicityRange</code>. If the <code>owningNamespace</code> is an owned cross <code>Feature</code>, then the <code>bounds</code> must have the same <code>featuringTypes</code> as the owning end <code>Feature</code> of the <code>owningNamespace</code>. (This allows a cross multiplicity to be evaluated in the same context as the multiplicity of the end <code>Feature</code>.)</p> OCL2.0 let boundsFeaturingType : OrderedSet(Type) = - if owningType <> null and owningType.oclIsKindOf(Feature) and - owningType.oclAsType(Feature).isOwnedCrossFeature() then - owningType.oclAsType(Feature).owningType.oclAsType(Feature).featuringType + if owningNamespace <> null and owningNamespace.oclIsKindOf(Feature) and + owningNamespace.oclAsType(Feature).isOwnedCrossFeature() then + owningNamespace.oclAsType(Feature).owningNamespace.oclAsType(Feature).featuringType else featuringType endif in diff --git a/org.omg.sysml/model/kerml.ecore b/org.omg.sysml/model/kerml.ecore index 42e08d99b..b2e34e5ff 100644 --- a/org.omg.sysml/model/kerml.ecore +++ b/org.omg.sysml/model/kerml.ecore @@ -1,59 +1,6 @@ - - -
- - - -
- - - - -
- - - - - -
- - - -
- - - - -
- - - - - -
- - - - - -
- - -
- - -
@@ -607,6 +554,59 @@ + + +
+ + + +
+ + + + +
+ + + + + +
+ + + +
+ + +
+ + + + +
+ + + + + +
+ + + + +
+ + + +
@@ -629,13 +629,13 @@ - + -
+
- + - + -
+
- + @@ -705,64 +705,64 @@ - + -
+
- +
-
+
- + -
+
- +
-
+
- + -
+
- - -
- - - - -
+
-
+
- + +
+ + + + -
+
-
+
@@ -893,6 +893,14 @@
+ + +
+ + + @@ -1088,13 +1096,37 @@ - + + + +
+ + + +
+ -
+
- + + + + +
+ + +
+ + + + + +
+ + @@ -1681,38 +1713,6 @@ - - -
- - - -
- - -
- - - - - -
- - -
- - - - - -
- - - -
@@ -1822,12 +1822,39 @@ - + -
+
- - + + +
+ + +
+ + + + + +
+ + + + + +
+ + +
+ + + + +
@@ -1840,77 +1867,238 @@ - + -
+
- + + + +
+ + + +
+ + +
+ + + -
+
-
+
- + - + + + +
+ + -
+
-
+
- + - + + +
+ -
+
- + - + -
+
- + + + +
+ + -
+
-
+
- + - + -
+
-
+
- + - + + + +
+ + + +
+ -
+
+ - + + +
+ -
+
+ + + + + + +
+ + +
+ + + + + + +
+ + +
+ + + + + + +
+ + + + +
+ + + + +
+ + + +
+ + +
+ + + + + +
+ + +
+ + + + + +
+ + +
+ + + + + +
+ + +
+ + + + + + +
+ + +
+ + + + + + +
+ + +
+ + +
+ + + + +
+ + + + +
+ + + +
+ + + + + +
+ +
@@ -1951,80 +2139,25 @@
- - - -
- - -
- - - - - -
- - - - - -
- - - -
- - -
- - - - - -
- - -
- - - - - - -
- - + + -
+
-
+
- + - - -
- + -
+
- - - -
- -
@@ -2057,37 +2190,29 @@ - - -
- - - - -
- - - + -
+
- + -
+
+ + +
+ + + + +
+ + +
+ - - -
- - - - -
- -
@@ -2137,27 +2262,63 @@ + + +
+ + + + +
+ +
+ + +
+ + + +
+ + +
- + -
+
+ lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//Real"> -
+
+ + +
+ + + +
+ + +
+ + + +
@@ -2169,11 +2330,6 @@ - - -
- -
@@ -2234,164 +2390,28 @@ -
- - -
- - - - - - -
- - - - -
- - - - -
- - - -
- - -
- - - - - - -
- - - -
- - - - - -
- - - -
- - -
- - - - -
- - -
- - - - - - -
- - - - -
- - - - -
- - - -
- - -
- - - - - -
- - -
- - - - - - -
- - -
- - - - - - -
- - -
- - - - - - -
- - - -
- - -
- - - - -
+
-
+
- + - + -
+
+ + + + +
+ + + + +
- - -
- - @@ -2413,6 +2433,23 @@
+ + +
+ + + + +
+ + + +
+ + +
@@ -2429,90 +2466,91 @@ - + -
+
- + -
+
- + -
+
-
+
- - + -
+
-
+
- - -
+
-
+
- - + -
+
-
+
- - + - + -
+
-
+
- - + - + -
+
-
+
+ - + -
+
- + -
+
+ + + + +
-
+
@@ -2564,43 +2602,43 @@ - + -
+
- + +
+ + +
+ + + + -
+
-
+
- - - -
- - + -
- - -
- - - - - -
+
+ + -
+
- @@ -2615,86 +2653,48 @@ - + -
+
- - -
- - -
- - - - -
- - -
- - - - -
- + -
- - - - -
+
- -
+ +
- - - + + + -
+
-
+
- + - + + + +
+ + -
+
-
+
- + - - -
- - - - -
- - - - -
- - - + -
+
diff --git a/org.omg.sysml/model/sysml_clean.ecore b/org.omg.sysml/model/sysml_clean.ecore index 81c4ce743..d199ec948 100644 --- a/org.omg.sysml/model/sysml_clean.ecore +++ b/org.omg.sysml/model/sysml_clean.ecore @@ -1,1328 +1,1348 @@ - - -
- - - - -
- - - -
- - - - - -
- - - + -
+
- - -
- - - + -
+
-
+
+ - + -
+
-
+
- + - + -
+
- - -
- - - - + -
+
- - - + + + -
+
- - - + + + -
+
-
+
- - + -
- - -
+
- - - -
+
+ - - - -
- - + -
+
-
+
- + - - -
- + -
+
- - + -
+
- + -
+
- - + -
+
- + -
+
- - + -
+
- - + -
+
- - - + -
+
- - + + + -
+
- - + + -
+
- - + + -
+
- - + + -
+
- - + + -
+
- - + + -
+
- - - + + -
+
- - - + + + -
+
- - - + + + -
+
- + - + -
+
- - + -
+
- - - -
- - - + -
+
- - -
- - -
- - - - -
- -
+
- - + -
+
- - + -
+
- -
- - - - -
- - - - - -
- - -
- - - - -
+
- - + volatile="true" transient="true" derived="true"> -
+
- - -
- + + + +
+ + -
+
+ - + -
+
- + - + -
+
- + - + -
+
+ + - + + + +
+ + -
+
- - + + + -
+
- + -
+
- + + - - -
- + -
+
- + -
+
-
+
+ - + -
+
- + -
+
- - + -
+
- + -
+
- - - + - + -
+
- - - + - + -
+
- - - + + + - + -
+
- + - + -
+
- + + - + -
+
- + - + -
+
- - + - + -
+
- + - + -
+
+ - - -
- - - - - -
- - - - + -
+
- + - + -
+
+ - - -
- - - - - -
- - - - + -
- - -
+
- - - -
+
- + - - -
- + -
+
- + - + -
+
-
+
- - + -
+
+ - -
+
-
+
- - -
- + -
+
- + - + + + +
+ + -
+
- - - + + + -
+
- + -
+
- - + defaultValueLiteral="false"> -
+
- + -
+
-
+
- - - -
- + -
+
- + + - - -
- + + + +
+ + -
+
- - + + -
+
- - - - -
+ + + +
+ + + + +
+ + -
+
+ + - + + + +
+ + -
+
- - + -
+
- - + + + +
+ + -
+
-
+
- - -
- + -
+
+ - + -
+
- - - -
- + -
+
- + - + -
+
- + -
+
+ + + + + +
- - - -
+
- - - + + + -
+
- - - - - + + + -
+
- - - + + + -
+
- - - - + + + + + +
+ + -
+
- - - + + -
+
- - - + + -
+
+ + + + + + + +
+ + + +
- - - -
+
+ + + + + + +
+ + + +
- - - -
+
- + + + + + +
+ + + +
+ + + + + +
+ + + + +
+ + + +
+ + - + -
+
- + - + -
+
+ + + + + +
- - - -
+
- + - + -
+
-
+
- + - + -
+
- - + + + +
+ + -
+
-
+
+ - + -
+
-
+
- + - + -
+
- + -
+
+ - + -
+
- + -
+
+ - + -
+
+ - + -
+
+ + - + -
+
- + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + - + -
+
+ + + + + +
+ + + + + +
+ + + + +
+ + + + +
+ + +
- + + +
+ -
+
+ - + -
+
+ - + -
+
- + -
+
- + -
+
+ - + + +
+ -
+
- - + -
+
- + -
+
- - - -
+ + +
- - -
+
- + -
+
+ - + -
+
+ - + -
+
- + -
+
- -
+
- + -
+
+ - - - -
- - + + +
+ -
+
- - + + +
+ -
+
- - + -
+
- - + -
+
- - + - + -
+
- + -
+
- + + + - + -
+
- - + + + + + -
+
- - - - + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + + +
+ + + + + +
+ + + + +
+ + + + + +
+ + + + -
- - - - -
+
+ + + -
+
- - - + + -
+
+ - + -
+
+ - - - -
- - + -
+
-
+
+ - - -
- + -
+
- + - + -
+
-
+
- + - - -
+ + +
- - - -
+
- + - -
- - - - - -
- - - -
- - - - -
- - - - -
- - - - - -
- - - -
+
- - - - - -
- - - -
+ + +
- - -
+
+ - - - -
- - + -
+
-
+
+ - + -
+
- + - + -
+
- + -
+
- + - - - -
- - + -
+
- - + -
+
-
+
- + - + + +
+ -
+
- + - + + +
+ -
+
- - + -
+
- + - - - -
- - + + +
+ -
+
- + -
+
+ - + -
+
- - + - - - -
- - - -
+ + +
- - - -
+
- + + +
+ -
+
- + -
+
+ - + -
- - -
+
- - -
+
- - + @@ -1871,51 +1891,55 @@ - - -
- - - + -
+
- + -
+
- - -
- + -
+
- - + -
+
- - -
- - - + -
+
- + -
+
+ + + + +
+ + +
+ + + + +
+ +
+ + @@ -1938,6 +1962,11 @@ + + +
+ +
@@ -2004,15 +2033,19 @@
- + -
+
- + + +
+ -
+
+ @@ -2020,163 +2053,155 @@
- + -
+
+ + +
+ + - + -
+
- + -
+
+ + +
+ + - + -
+
+ + + + +
+ lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"> -
+
- + -
+
- - -
- - - - - - -
- - - - + + + +
+ + -
+
-
+
- + - -
+
-
+
- + - - -
+ + +
+ + -
+
- - - -
- - - + -
+
- + + +
+ + +
+ + + + +
+ -
+
- - + + -
+
-
+
- - - - -
- - + + +
+ -
+
+ - - - -
- - + -
+
-
+
- + - - - -
- - - - -
- - + -
+
-
+
- + - - -
- - - - -
- -
@@ -2290,130 +2315,160 @@ - + -
+
- + -
+
- - -
- - -
- - - - - -
- - -
- - - - - -
- - - - -
- - - + -
+
- - -
+ + + +
+ + + + +
+ + + + +
+ + + + +
+ + + +
+ + + + -
+
- - + + + -
+
-
+
+ - + -
+
-
+
+ - + -
+
-
+
- + - + + + +
+ + -
+
-
+
- + - + + + +
+ + + + +
+ + + + +
+ + + +
+ + + -
+
-
+
- + - - -
- - - + -
+
+ + +
+ + - + -
+
+ + +
+ + +
+ + + - + -
+
@@ -2474,85 +2529,164 @@
- + -
+
- + -
+
-
+
- + - + + + +
+ + -
+
-
+
- + - - - -
- - + + +
+ + + + + +
+ + + -
+
-
+
- + - - - -
- - + -
+
-
+
- + + + + +
+ + +
+ + + + + +
+ + +
+ + + + + +
+ + +
+ + + + + +
+ + +
+ + - - -
- - - + -
+
- + -
+
-
+
- + - + -
+
+ + +
+ + +
+ + + + + +
+ + +
+ + + + + +
+ + + + +
+ + @@ -3291,90 +3425,25 @@ - - -
- - - -
- - -
- - - - - - -
- - - - -
- - - -
- - -
- - - - - -
- - -
- - - - - -
- - - - -
- - - - - -
- - - -
- - - - + -
+
- - -
+ + +
- - -
+
- + + + + + +
+ @@ -3416,6 +3485,18 @@
+ + +
+ + + +
+ + +
@@ -3488,6 +3569,63 @@ + + +
+ + + + +
+ + + +
+ + +
+ + + + + + +
+ + + +
+ + + + +
+ + + + + +
+ + + + + +
+ + + + +
+ + +
+ + + +
@@ -3580,43 +3718,6 @@ - - -
- - - -
- - - - -
- - - - - -
- - - - - -
- - - - -
- - -
- - - -
@@ -3800,110 +3901,25 @@ - + -
+
- + -
+
-
+
- + - + -
+
- - -
- - -
- - - - - -
- - - - - -
- - - - -
- - -
- - - - - -
- - -
- - - - - -
- - -
- - - - - -
- - -
- - - - - -
- - -
- - - - - -
- - -
- - - @@ -3971,42 +3987,22 @@
- - - - -
- - -
- - - - - - -
- - - - -
- - + + + -
+
-
+
- + - + -
+
@@ -4424,108 +4420,49 @@ - - -
- - - -
- - -
- - - - - - -
- - - -
- - -
- - - - + -
+
- - -
- - - + -
+
- + -
+
- + -
+
- + -
+
-
+
- - -
- - - - -
- - - -
- - - - - - - + -
+
- - -
- - -
- - - + -
+
-
+
+ @@ -4558,165 +4495,134 @@ - - -
- - - + -
+
- - -
- - -
- - - - -
- + -
+
- + -
+
-
+
- + - + -
+
- + -
+
- + + + +
+ + + + +
+ + - + -
+
- - -
- + -
+
- -
- - -
- - - - -
+
-
+
+ - - -
- - - - -
- - - + -
+
- - -
- + -
+
- - - -
+ + + +
+ + -
+
- + - + -
+
- + + +
+ + +
+ + + + -
+
-
+
- + -
+
-
+
- + -
+
-
+
- - - -
- - - -
- + -
+
@@ -4794,359 +4700,453 @@ - + -
+
- + + + +
+ + + + +
+ + + + +
+ + -
+
-
+
- + - + -
+
- + + + +
+ + + + +
+ + + + +
+ + + + +
+ + -
+
-
+
- + - + -
+
-
+
- - + -
+
- - -
- + -
+
- - + + + + - + -
+
- + + + +
+ + -
+
-
+
- - - - -
- - + -
+
-
+
- - -
+
-
+
+ - + -
+
- + + + +
+ + -
+
-
+
+ + + + +
+ + +
+ + + + +
+ + +
- - + -
+
- - -
- + + + +
+ + -
+
- - + -
+
+ + + +
+ + + + +
+ + + + +
+ + + + + +
- + -
+
+ + +
+ + +
+ + - + -
+
- + -
+
-
+
- + -
+
-
+
- - - -
- - - + -
+
- - -
+ + +
- - -
+
+ + + + +
- - -
+
- + - + -
+
- + -
+
-
+
- - + -
+
-
+
- + -
+
-
+
- + + + +
+ + -
+
-
+
- + + + +
+ + + +
+ -
+
+ - + -
+
- - -
+ + +
- - -
+
+ + + + + +
- - -
+
- + - + -
+
- + -
+
-
+
- + - + -
+
- - -
- - - + -
+
-
+
- + - + -
+
- + + +
+ -
+
+ - + -
+
-
+
- + - - -
- - - - -
- - - + -
+
+ + +
+ + +
+ + + - + -
+
- -
+
-
+
- - + -
+
-
+
+ From c1a76cebcff41f7a4bd105e48f8aaccbc446d835 Mon Sep 17 00:00:00 2001 From: Ed Seidewitz Date: Mon, 3 Aug 2026 13:29:19 -0400 Subject: [PATCH 5/5] ST6RI-956 Regenerated MultiplicityRange class. --- .../java/org/omg/sysml/lang/sysml/MultiplicityRange.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/MultiplicityRange.java b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/MultiplicityRange.java index 9de425166..b77bf332b 100644 --- a/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/MultiplicityRange.java +++ b/org.omg.sysml.model/src/main/java/org/omg/sysml/lang/sysml/MultiplicityRange.java @@ -13,9 +13,9 @@ *

A MultiplicityRange is a Multiplicity whose value is defined to be the (inclusive) range of natural numbers given by the result of a lowerBound Expression and the result of an upperBound Expression. The result of these Expressions shall be of type Natural. If the result of the upperBound Expression is the unbounded value *, then the specified range includes all natural numbers greater than or equal to the lowerBound value. If no lowerBound Expression, then the default is that the lower bound has the same value as the upper bound, except if the upperBound evaluates to *, in which case the default for the lower bound is 0.

* * let boundsFeaturingType : OrderedSet(Type) = - * if owningType <> null and owningType.oclIsKindOf(Feature) and - * owningType.oclAsType(Feature).isOwnedCrossFeature() then - * owningType.oclAsType(Feature).owningType.oclAsType(Feature).featuringType + * if owningNamespace <> null and owningNamespace.oclIsKindOf(Feature) and + * owningNamespace.oclAsType(Feature).isOwnedCrossFeature() then + * owningNamespace.oclAsType(Feature).owningNamespace.oclAsType(Feature).featuringType * else * featuringType * endif in