blob: f340c3b7b30721a599b4a15bf0beb82c6ae388c5 [file] [log] [blame]
#################################################################################
# Copyright (c) 2016 CEA LIST.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
# Benoit Maggi (CEA LIST) benoit.maggi@cea.fr - initial API and implementation
##################################################################################
Bundle-Name=Papyrus SysML 1.4 Validation
Bundle-Description=This plug-in contains the rules for SyML 1.4 model validation
Bundle-Vendor=Eclipse Modeling Project
##### Non normative #####
inv_RequirementId=Requirement is missing an id
ocl_RequirementId=id <> ''
inv_RequirementText=Requirement is missing a text
ocl_RequirementText=text <> ''
# FIXME : there seems to be no constraint in the norm for Requirement id and text
inv_NestedConnectorEndMissing=NestedConnectorEnd stereotype should be applied to the <Connector end> {0}.
##### End Non normative #####
#7.3.2.1 Conform
inv_ConformGeneralClassifierViewpoint=7.3.2.1 Conform [1] The general classifier must be an element stereotyped by Viewpoint.
ocl_ConformGeneralClassifierViewpoint=base_Generalization.general.getAppliedStereotype('SysML::ModelElements::Viewpoint')->notEmpty()
inv_ConformSpecificClassifierView=7.3.2.1 Conform [2] The specific classifier must be an element that is stereotyped by View.
ocl_ConformSpecificClassifierView=base_Generalization.specific.getAppliedStereotype('SysML::ModelElements::View')->notEmpty()
#7.3.2.3 Expose
inv_ExposeClientStereotypedByView=7.3.2.3 Expose [1] The client must be an element stereotyped by View.
#7.3.2.7 View
# FIXME: the constraint should only ensure one conform generalization
inv_ViewSingleViewpoint=7.3.2.7 View [1] A view must only conform to a single viewpoint.
#FIXME: not a constraint (query?): 7.3.2.7 View [2] The derived value of the viewpoint is the classifier stereotyped by Viewpoint that is the general classifier of the generalization relationship stereotyped by Conform for which the View is the specific classifier.
#FIXME: not a constraint (query?): 7.3.2.7 View [3] The derived values of the stakeholder attribute are the names of the classifiers stereotyped by Stakeholder that are the values of the stakeholder attribute of the general classifier of the generalization relationship stereotyped by Conform for which the View is the specific classifier.
#7.3.2.8 Viewpoint
#FIXME: not a constraint (query?):7.3.2.8 Viewpoint [1] The derived values of the method attribute are the names of the methods of the operations stereotyped by the UML Create stereotype on the classifier stereotyped by Viewpoint.
inv_ViewpointOwnedView=7.3.2.8 Viewpoint [2] The property ownedOperation must include at least one operation named «View» with the UML Create stereotype applied.
#8.3.2.2 Binding Connector
inv_BindingConnectorSameEndsType=8.3.2.2 Binding Connector [1] The two ends of a binding connector must have either the same type or types that are compatible so that equality of their values can be defined.
#FIXME can have more that 2 ends
#8.3.2.3 Block
inv_AssociationBlock=8.3.2.3 Block [1] For an association in which both ends are typed by blocks, the number of ends must be exactly two.
inv_BlockConnectorTwoEnds=8.3.2.3 Block [2] The number of ends of a connector owned by a block must be exactly two.
#(In SysML, a binding connector is not typed by an association, so this constraint is not implied entirely by the preceding constraint.)
inv_BlockPropertyNoName=8.3.2.3 Block [3] In the UML metamodel on which SysML is built, any instance of the Property metaclass that is typed by a block (a Class with the «block» stereotype applied) and which is owned by an Association may not have a name and may not be defined as a navigable owned end of the association. (While the Property has a «name» property as defined by its NamedElement
inv_BlockPropertyAssociationEnd=8.3.2.3 Block [4] In the UML metamodel on which SysML is built, a Property that is typed by a block must be defined as an end of an association. (An inverse end of this association, whether owned by another block or the association itself, must always be present so there is always a metamodel element to record the inverse multiplicity of the reference.)
#No Implementation [5] The following constraint under sub clause 9.3.6, «Connector» in the UML 2 Superstructure Specification is removed by SysML: «[3] The ConnectableElements attached as roles to each ConnectorEnd owned by a Connector must be roles of the Classifier that owned the Connector, or they must be ports of such roles.»
inv_BlockPropertyComposite=8.3.2.3 Block [6] If a property owned by a SysML Block or SysML ValueType is typed by a SysML ValueType, then the aggregation attribute of the property must be «composite
#Need more explanation
#TODO[7] Within an instance of a SysML Block, the values of any property with composite aggregation (aggregation = composite) must not contain the block in any of its own properties that also have composite aggregation, or within any unbroken chain of properties that all have composite aggregation. (Within an instance of a SysML Block, the instances of properties with composite aggregation must form an acyclic graph.)
inv_BlockSpecialization=8.3.2.3 Block [8] Any classifier that specializes a Block must also have the Block stereotype or one of its specializations applied.
#No Implementation [9] The following constraint under sub clause 9.3.7, «ConnectorEnd» in the UML 2 Superstructure Specification is removed by SysML: «[3] The property held in self.partWithPort must not be a Port.»
#8.3.2.4 Bound Reference
#[1] Properties to which BoundReference is applied must be the role of a connector end of at least one binding connector, or generalized by such a property through redefinition.
#[2] The value of boundEnd must be a connector end of a binding connector, as identified in constraint 8.3.2.4 [1], opposite the property, as identified in constraint 8.3.2.4 [1].
#[3] The role of boundEnd must be a property accessible by navigation from instances of the block owning the property to which BoundReference is applied, but must not be the property to which BoundReference is applied, or one that it is related to by redefinition.
#[4] The last value of bindingPath is the role of boundEnd, and the other values are the propertyPath of the NestedConnectorEnd applied to boundEnd, if any.
#[5] Properties to which BoundReference is applied must either be a reference properties or value properties.
#[6] Properties with BoundReference applied that have an upper multiplicity greater than one must be ordered and non-unique.
#[7] BoundReferences must not be applied to properties that are related by redefinition to other properties with BoundReference applied.
#[8] The binding connector identified in constraint 8.3.2.4 [1] must not have the same property on both ends, or properties related by redefinition.
#8.3.2.5 ClassifierBehaviorProperty
inv_ClassifierBehaviorPropertyOnBlock=8.3.2.5 ClassifierBehaviorProperty [1] ClassifierBehaviorProperty may only be applied to properties owned (not inherited) by blocks that have classifier behaviors.
inv_ClassifierBehaviorPropertyIsComposite=8.3.2.5 ClassifierBehaviorProperty [2] Properties to which ClassifierBehaviorProperty applied must be composite.
ocl_ClassifierBehaviorPropertyIsComposite=base_Property.isComposite()
inv_ClassifierBehaviorPropertyTypedBy=8.3.2.5 ClassifierBehaviorProperty [3] Properties to which ClassifierBehaviorProperty applied must be typed by the classifier behavior of their owning block or a generalization of the classifier behavior.
#8.3.2.6 ConnectorProperty
inv_ConnectorPropertyOnlyOnBlock=8.3.2.6 ConnectorProperty [1] ConnectorProperty may only be applied to properties of classes stereotyped by Block.
#inv inv_ConnectorPropertyOnlyOnBlock: self.base_Property.owner.getAppliedStereotype('Blocks::Block')->notEmpty()
inv_ConnectorPropertyReferOwnedConnector=8.3.2.6 ConnectorProperty [2] The connector attribute of the applied stereotype must refer to a connector owned or inherited by a block owning the property on which the stereotype is applied.
inv_ConnectorPropertyOnlyComposite=8.3.2.6 ConnectorProperty [3] The aggregation of a property stereotyped by ConnectorProperty must be composite.
ocl_ConnectorPropertyOnlyComposite=base_Property.isComposite()
inv_ConnectorPropertyTypedByAssociationBlock=8.3.2.6 ConnectorProperty [4] The type of the connector referred to by a connector attribute must be an association class stereotyped by Block.
inv_ConnectorPropertySameName=8.3.2.6 ConnectorProperty [5] A property stereotyped by ConnectorProperty must have the same name and type as the connector referred to by the connector attribute.
#8.3.2.7 DirectedRelationshipPropertyPath
inv_DirectedRelationshipPropertyPathRequireSourceContext=8.3.2.7 DirectedRelationshipPropertyPath [1] source#context must have a value when sourcePropertyPath has a value.
inv_DirectedRelationshipPropertyPathRequireTargetContext=8.3.2.7 DirectedRelationshipPropertyPath [2] target#context must have a value when targetPropertyPath has a value.
inv_DirectedRelationshipPropertyPathSourceFirst=8.3.2.7 DirectedRelationshipPropertyPath [3] The property in the first position of the sourcePropertyPath list, if any, must be owned by the source#context or one of its generalizations.
inv_DirectedRelationshipPropertyPathTargetFirst=8.3.2.7 DirectedRelationshipPropertyPath [4] The property in the first position of the targetPropertyPath list, if any, must be owned by the target#context or one of its generalizations.
#TODO [5] The property at each successive position of the sourcePropertyPath and targetPropertyPath, following the first position, must be owned by the Block or ValueType that types the property at the immediately preceding position, or a generalization of the Block or ValueType.
inv_DirectedRelationshipPropertyPathSourceLast=8.3.2.7 DirectedRelationshipPropertyPath [6] The type of the property at the last position of the sourcePropertyPath list must own or inherit the source of the stereotyped directed relationship.
inv_DirectedRelationshipPropertyPathTargetLast=8.3.2.7 DirectedRelationshipPropertyPath [7] The type of the property at the last position of the targetPropertyPath list must own or inherit the target of the stereotyped directed relationship.
#8.3.2.8 DistributedProperty
inv_DistributedPropertyTypedBy=8.3.2.8 DistributedProperty [1] The DistributedProperty stereotype may be applied only to properties of classifiers stereotyped by Block or ValueType.
#inv inv_DistributedPropertyOnlyOnBlock: self.base_Property.owner.getAppliedStereotype('Blocks::Block')->notEmpty() or self.base_Property.owner.getAppliedStereotype('Blocks::ValueType')->notEmpty()
#8.3.2.9 ElementPropertyPath
inv_ElementPropertyPathPropertiesOwner=8.3.2.9 ElementPropertyPath [1] The property at each successive position of the propertyPath attribute, following the first position, must be owned by the Block or ValueType that types the property at the immediately preceding position, or a generalization of the Block or ValueType.
#8.3.2.10 EndPathMultiplicity
inv_EndPathMultiplicityBoundReferenceProperty=8.3.2.10 EndPathMultiplicity [1] Properties to which EndPathMultiplicity is applied must be related by redefinition to a property to which BoundReference is applied.
inv_EndPathMultiplicityNotNegative=8.3.2.10 EndPathMultiplicity [2] endPathLower must be non-negative.
ocl_EndPathMultiplicityNotNegative=lower >= 0
#8.3.2.11 NestedConnectorEnd
inv_NestedConnectorEndFirstProperty=8.3.2.11 NestedConnectorEnd [1] The first property in propertyPath must be owned by the block that owns the connector, or one of the block's generalizations.
inv_NestedConnectorEndLastProperty=8.3.2.11 NestedConnectorEnd [2] The type of the property at the last position of the propertyPath list must own or inherit the role property of the stereotyped connector end.
inv_NestedConnectorEndOnlyConnectorEnds=8.3.2.11 NestedConnectorEnd [3] NestedConnectorEnd may only be applied to connector ends
#8.3.2.12 ParticipantProperty
inv_ParticipantPropertyOnlyAssociationBlock=8.3.2.12 ParticipantProperty [1] ParticipantProperty may only be applied to properties of association classes stereotyped by Block.
inv_ParticipantPropertyNoAssociationMemberEnds=8.3.2.12 ParticipantProperty [2] ParticipantProperty may not be applied to properties that are member ends of an association.
inv_ParticipantPropertyOnlyNoneAggregation=8.3.2.12 ParticipantProperty [3] The aggregation of a property stereotyped by ParticipantProperty must be none.
inv_ParticipantPropertySameEnd=8.3.2.12 ParticipantProperty [4] The end attribute of the applied stereotype must refer to a member end of the association block owning the property on which the stereotype is applied.
inv_ParticipantPropertySameType=8.3.2.12 ParticipantProperty [5] A property stereotyped by ParticipantProperty must have the same type as the property referred to by the end attribute.
inv_ParticipantPropertyEndMultiplicity=8.3.2.12 ParticipantProperty [6] The property referred to by end must have a multiplicity of 1.
#8.3.2.13 PropertySpecificType
inv_PropertySpecificTypeUniqueProperty=8.3.2.13 PropertySpecificType [1] A classifier to which the PropertySpecificType stereotype is applied must be referenced as the type of one and only one property.
inv_PropertySpecificTypeMissingName=8.3.2.13 PropertySpecificType [2] The name of a classifier to which a PropertySpecificType is applied must be missing. (The «name» attribute of the NamedElement metaclass must be empty.)
#8.3.2.14 ValueType
#[1] Any classifier that specializes a ValueType must also have the ValueType stereotype applied.
#[2] The unit of a ValueType, if any, must be an InstanceSpecification classified by SysML's Unit block in the UnitAndQuantityKind model library or a specialization of it.
#inv: unit->notEmpty() and unit.classifier->notEmpty()implies unit.classifier->
#[3] The quantityKind of a ValueType, if any, must be an InstanceSpecification classified by SysML's QuantityKind block in the UnitAndQuantityKind model library or a specialization of it.
#inv: quantityKind->notEmpty() and quantityKind.classifier->notEmpty() implies
#9.3.2.1 AcceptChangeStructuralFeatureEventAction
#inv_AcceptChangeStructuralFeatureEventActionOneTrigger=9.3.2.1 AcceptChangeStructuralFeatureEventAction [1] The action has exactly one trigger, the event of which must be a change structural feature event.
#[2] The action has two result pins with type and ordering the same as the type and ordering of the structural feature of the trigger event, and multiplicity compatible with the multiplicity of the structural feature.
#[3] The structural feature of the trigger event must be owned by or inherited by the #context of the behavior containing the action. (The #context of a behavior is either its owning block or itself if it is not owned by a block. See definition in the UML 2 Superstructure Specification.)
#[4] Visibility of the structural feature of the trigger event must allow access to the object performing the action.
#No implementation[5] The constraint under sub clause 11.3.2, «AcceptEventAction» in the UML 2 Superstructure Specification, «[2] There are no output pins if the trigger events are only ChangeEvents,» is removed for accept event actions that have AcceptChangeStructuralFeatureEventAction applied.
#9.3.2.3 ChangeStructuralFeatureEvent
inv_ChangeStructuralFeatureEventNotStatic=9.3.2.3 ChangeStructuralFeatureEvent [1] The structural feature must not be static.
#inv inv_StructuralFeatureNotStatic: self.base_Class. FIXME : structural feature <- Property what is the link with the base_Class?
inv_ChangeStructuralFeatureEventOneFeaturingClassifier=9.3.2.3 ChangeStructuralFeatureEvent [2] The structural feature must have exactly one featuringClassifier.
#9.3.2.4 DirectedFeature
inv_DirectedFeatureOnlyBehavioral=9.3.2.4 DirectedFeature [1] DirectedFeature can only be applied to behavioral features, or to properties that do not have FlowProperty applied, including on subsetted or redefined features.
#FIXME: what is the link? non-provided direction enum, but no idea for the rest
#TODO [2] A non-provided operation cannot be associated with a behavior as its method.
#9.3.2.5 FeatureDirection
inv_FlowPropertyTypedBy=9.3.2.5 FeatureDirection [1] A FlowProperty is typed by a ValueType, Block, or Signal.
#9.3.2.8 FullPort
inv_FullPortNotProxyPort=9.3.2.8 FullPort [1]: Full ports cannot also be proxy ports. This applies even if some of the stereotypes are on subsetted or redefined ports.
#[2] Binding connectors cannot link full ports (either directly or indirectly through other binding connectors) to other composite properties of the block owning the full port (or that block's generalizations or specializations), unless the composite properties are non-full ports.
inv_FullPortNotBehavioral=9.3.2.8 FullPort [3]: Full ports cannot be behavioral (isBehavior=false).
ocl_FullPortNotBehavioral=base_Port.isBehavior = false
inv_FullPortNotConjugated=9.3.2.8 FullPort [4]: Full ports cannot be conjugated (isConjugated=false).
ocl_FullPortNotConjugated=base_Port.isConjugated = false
#9.3.2.9 InterfaceBlock
inv_InterfaceBlockNoBehavior=9.3.2.9 InterfaceBlock [1] Interface blocks cannot own or inherit behaviors, have classifier behaviors, or methods for their behavioral features.
inv_InterfaceBlockNoCompositeProperty=9.3.2.9 InterfaceBlock [2] Interface blocks cannot have composite properties that are not ports.
inv_InterfaceBlockPortType=9.3.2.9 InterfaceBlock [3] Ports owned by interface blocks can only be typed by interface blocks.
#9.3.2.10 InvocationOnNestedPortAction
inv_InvocationOnNestedPortActionRequiredOnPort=9.3.2.10 InvocationOnNestedPortAction [1] The onPort property of an invocation action must have a value when this stereotype is applied.
#[2] The port at the first position in the onNestedPort list must be owned (directly or via inheritance) by a block that types the target pin of the invocation action, or one of the block\u2019s generalizations.
# Where comes the contraint from ?
#TODO[3] The first constraint of ElementPropertyPath applies to onNestedPort.
#[4] The type of the port at the last position of the onNestedPort list must own or inherit the onPort port of the stereotyped invocation action.
inv_InvocationOnNestedPortActionOnlyInvocationAction=9.3.2.10 InvocationOnNestedPortAction [5] InvocationOnNestedPortAction may only be applied to invocation actions.
#9.3.2.11 ItemFlow
#[1] A Connector or an Association, or an inherited Association must exist between the source and the target of the InformationFlow.
inv_ItemFlowSamePropertyTypedBy=9.3.2.11 ItemFlow [2] An ItemFlow itemProperty is typed by a ValueType, Block, or Signal.
#inv inv_ItemFlowItemPropertyTypedByValueTypeBlockSignal: self.itemProperty.type.getAppliedStereotype('Blocks::ValueType')->notEmpty() or self.itemProperty.type.getAppliedStereotype('Blocks::Block')->notEmpty() or self.itemProperty.type.oclIsTypeOf(UML::Signal)
#[3] itemProperty is a property of the common (possibly indirect) owner of the source and the target.
#[4] itemProperty cannot have a value if the item flow is realized by an Association.
#[5] If an ItemFlow has an itemProperty, one of the classifiers of conveyed items must be the same as the type of the item property.
# FIXME the item flow doesn't have a name (should be inforamtion flow)
inv_ItemFlowSamePropertyName=9.3.2.11 ItemFlow [6] If an ItemFlow has an itemProperty, its name should be the same as the name of the item flow.
#9.3.2.12 ProxyPort
inv_ProxyPortNotFullPort=9.3.2.12 ProxyPort [1] Proxy ports cannot also be full ports. This applies even if some of the stereotypes are on subsetted or redefined ports.
inv_ProxyPortTypedByInterfaceBlock=9.3.2.12 ProxyPort [2] Proxy ports can only be typed by interface blocks.
inv_ProxyPortForceInnerProxyPort=9.3.2.12 ProxyPort [3] Ports owned by the type of a proxy port must be proxy ports.
#
#9.3.2.13 TriggerOnNestedPort
#[1] The port property of the stereotyped trigger must have exactly one value, and the value cannot be a full port.
#[2] The values of the onNestedPort property must not be full ports.
#[3] The port at the first position in the onNestedPort list must be owned by a block in which the trigger is used, or one of the block\u2019s generalizations.
#[4] The first constraint of ElementPropertyPath applies to onNestedPort.
#[5] The type of the port at the last position of the onNestedPort list must own or inherit the port port of must own or inherit the port port of
#Bad description [6] the stereotyped invocation action the stereotyped invocation action.
#11.3.2.3 Discrete
inv_DiscreteNoContinuous=11.3.2.3 Discrete [1] The «discrete» and «continuous» stereotypes cannot be applied to the same element at the same time.
#11.3.2.4 NoBuffer
inv_NoBufferNoOverwrite=11.3.2.4 NoBuffer [1] The «nobuffer» and «overwrite» stereotypes cannot be applied to the same element at the same time.
ocl_NoBufferNoOverwrite=base_ObjectNode.getAppliedStereotype('SysML::Activities::Overwrite')->isEmpty()
#11.3.2.5 Overwrite
inv_OverwriteNoNoBuffer=11.3.2.5 Overwrite [1] The «overwrite» and «nobuffer» stereotypes cannot be applied to the same element at the same time.
ocl_OverwriteNoNoBuffer=base_ObjectNode.getAppliedStereotype('SysML::Activities::NoBuffer')->isEmpty()
#11.3.2.6 Optional
inv_OptionalParameterMultiplicity=11.3.2.6 Optional [1] Optional parameter lower value has to be 0
ocl_OptionalParameterMultiplicity=base_Parameter.lower = 0
#11.3.2.7 Probability
inv_ProbabilityBaseElement=11.3.2.7 Probability [1] The «probability» stereotype can only be applied to activity edges that have decision nodes or object nodes as sources, or to output parameter sets.
inv_ProbabilityAllEdges=11.3.2.7 Probability [2] When the «probability» stereotype is applied to an activity edge, then it must be applied to all edges coming out of the same source.
inv_ProbabilityToAllParameterSet=11.3.2.7 Probability [3] When the «probability» stereotype is applied to an output parameter set, it must also be applied to all the parameter sets of the behavior or operation owning the original parameter set. .
inv_ProbabilityOutputParameters=11.3.2.7 Probability [4] When the «probability» stereotype is applied to an output parameter set, all the output parameters must be in some parameter set.
#11.3.2.8 Rate
inv_RateParameterIsStream=11.3.2.8 Rate [1] When the «rate» stereotype is applied to a parameter, the parameter must be streaming.
inv_RateParameterLessInout=11.3.2.8 Rate [2] The rate of a parameter must be less than or equal to rates on edges that come into or go out from pins and parameters nodes corresponding to the parameter.
#15.3.2.1 Allocate(from Allocations)
inv_AllocateOnlyAbstraction=15.3.2.1 Allocate [1] The Allocate stereotype may only be applied to abstractions.
inv_AllocateOneClientSupplier=15.3.2.1 Allocate [2] A single «allocate» dependency shall have only one client (from) and one supplier (to).
#No implementation [3] If subtypes of the «allocate» dependency are introduced to represent more specialized forms of allocation, then they should have constraints applied to supplier and client as appropriate.
#15.3.2.2 AllocateActivityPartition(from Allocations)
# FIXME avoid "will" when defining a constraint
#No implementation [1] An Action appearing in an «AllocateActivityPartition» will be the /client (from) end of an «allocate» dependency. The element that represents the «AllocateActivityPartition» will be the /supplier (to) end of the same «allocate» dependency. In the «AllocateActivityPartition» name field, Properties are designated by the use of a fully qualified name (including colon, e.g., «part_name:Block_Name»), and Classifiers are designated by a simple name (no colons, e.g., «Block_Name»).
#No implementation [2] The «AllocateActivityPartition» maintains the constraints, but not the semantics, of the UML2::ActivityPartition. Classifiers or Properties represented by an «AllocateActivityPartition» do not have any direct responsibility for invoking behavior depicted within the partition boundaries. To depict this kind of direct responsibility, the modeler is directed to the UML 2 Superstructure specification, sub clause 12.3.10, «ActivityPartition,» Semantics topic.
#16.3.2.1 Copy
inv_CopyBetweenRequirementsModelConstraint=16.3.2.1 Copy [1] A Copy dependency may only be created between two classes that have the «requirement»stereotype, or a subtype of the «requirement» stereotype applied.
inv_CopyReadOnlyModelConstraint=16.3.2.1 Copy [2] The text property of the client requirement is constrained to be a read-only copy of the text property of the supplier requirement.
#16.3.2.2 DeriveReqt
inv_DeriveReqtSupplierModelConstraint=16.3.2.2 DeriveReqt [1] The supplier must be an element stereotyped by «requirement» or one of «requirement» subtypes.
inv_DeriveReqtClientModelConstraint=16.3.2.2 DeriveReqt [2] The client must be an element stereotyped by «requirement» or one of «requirement» subtypes.
#16.3.2.3 Refine
inv_RefineDependencyModelConstraint=16.3.2.3 [1] Refine The Refine stereotype may only be applied to dependencies.
inv_RefineOneClientSupplierModelConstraint=16.3.2.3 [2] Dependencies with a Refine stereotype or one of its specializations applied must have exactly one client and one supplier.
#16.3.2.4 Requirement
inv_RequirementEmptyOwnedOperation=16.3.2.4 Requirement [1] The property «ownedOperation» must be empty.
ocl_RequirementEmptyOwnedOperation=base_Class.ownedOperation->isEmpty()
inv_RequirementEmptyOwnedAttribute=16.3.2.4 Requirement [2] The property «ownedAttribute» must be empty.
ocl_RequirementEmptyOwnedAttribute=base_Class.ownedAttribute->isEmpty()
inv_RequirementNoAssociationModelConstraint=16.3.2.4 Requirement [3] Classes stereotyped by «requirement» may not participate in associations.
inv_RequirementNoGeneralizationModelConstraint=16.3.2.4 Requirement [4] Classes stereotyped by «requirement» may not participate in generalizations.
inv_RequirementNestedRequirementModelConstraint=16.3.2.4 Requirement [5] A nested classifier of a class stereotyped by «requirement» must also be stereotyped by «requirement».
inv_RequirementNotType=16.3.2.4 Requirement [6] Classes stereotyped by «requirement» may not be used to type any other model element.
#16.3.2.5 TestCase
inv_TestCaseParameterVerdictKindModelConstraint=16.3.2.5 TestCase [1] The type of return parameter of the stereotyped model element must be VerdictKind.
#16.3.2.6 Satisfy
inv_SatisfySupplierModelConstraint=16.3.2.6 Satisfy [1] The supplier must be an element stereotyped by «requirement» or one of «requirement» subtypes.
#16.3.2.7 Trace
inv_TraceDependencyModelConstraint=16.3.2.7 Trace [1] The Trace stereotype may only be applied to dependencies.
inv_TraceOneClientSupplierModelConstraint=16.3.2.7 Trace [2] Dependencies with a Trace stereotype or one of its specializations applied must have exactly one client and one supplier.
#16.3.2.8 Verify
inv_VerifySupplierModelConstraint=16.3.2.8 Verify [1] The supplier must be an element stereotyped by «requirement» or one of «requirement» subtypes.