# Validation Rules

**(UML001) Name expected.**

* Element should have a name.
* Applies to: `UMLModelElement`.
* Exceptions: `UMLParameter (only if direction === 'return')`, `UMLDirectedRelationship`, `UMLRelationshipEnd`, `UMLUndirectedRelationship`, `UMLAssociationClassLink`, `UMLRegion`, `UMLPseudostate`, `UMLFinalState`, `UMLControlNode`, `UMLEndpoint`, `UMLGate`, `UMLImage`.

**(UML002) Name is already defined.**

* If element has a name, then it should be unique in the namespace.
* Applies to: `UMLModelElement`.
* Exceptions: `UMLOperation`.

**(UML003) Conflict with inherited attributes.**

* Applies to: `UMLAttribute`.

**(UML004) Signature conflict.**

* Same signature is not allowed in a classifier.
* Applies To: `UMLOperation`.

**(UML006) Final and leaf element must not have child.**

* If `isFinalSpecifiction` or `isLeaf` is true, then it should not have child.
* Applies to: `UMLClassifier`.

**(UML007) Duplicated generalizations.**

* Do not make duplicated generalizations from the same element.
* Applies to: `UMLClassifier`.

**(UML008) Circular generalizations.**

* Do not generalize from one of the children.
* Applies to: `UMLClassifier`.

**(UML009) Duplicated realizations.**

* Applies to: `UMLClassifier`.

**(UML010) Duplicated role names of associated classifiers.**

* Applies to: `UMLClassifier`.

**(UML011) All attributes and operations of interface must be public.**

* All attributes and operations of an interface should have public visibility.
* Applies to: `UMLInterface`.

**(UML012) Aggregation must be one in an association.**

* Applies to: `UMLAssociation`.

**(UML013) Type of an artifact instance must be an artifact.**

* Applies to: `UMLArtifactInstance`.

**(UML014) Type of a component instance must be a component.**

* Applies to: `UMLComponentInstance`.

**(UML015) Type of a node instance must be a node.**

* Applies to: `UMLNodeInstance`.

**(UML016) A metaclass must have name defined in metamodel.**

* Applies to: `UMLMetaClass`

**(UML017) A stereotype must inherits from stereotype.**

* Applies To: `UMLStereotype`

**(UML018) A stereotype must contained by a profile.**

* Applies To: `UMLStereotype`

**(UML019) An actor only can associate with use cases, components, and classes.**

* Applies To: `UMLActor`

**(UML020) A use case cannot include use cases that directly or indirectly include it.**

* Applies To: `UMLUseCase`

**(UML021) An initial vertex can have at most one outgoing transition.**

* Applies To: `UMLPseudostate (kind = 'initial')`

**(UML022) The outgoing transition from an initial vertex must not have a trigger or guard.**

* Applies To: `UMLPseudostate (kind = 'initial')`

**(UML023) History vertices can have at most one outgoing transition.**

* Applies To: `UMLPseudostate (kind = 'deepHistory' | 'shallowHistory'`

**(UML024) A join vertex must have at least two incoming transitions and exactly one outgoing transition.**

* Applies To: `UMLPseudostate (kind = 'join')`

**(UML025) A fork vertex must have at least two outgoing transitions and exactly one incoming transition.**

* Applies To: `UMLPseudostate (kind = 'fork')`

**(UML026) A junction vertex must have at least one incoming and one outgoing transition.**

* Applies To: `UMLPseudostate (kind = 'junction')`

**(UML027) A choice vertex must have at least one incoming and one outgoing transition.**

* Applies To: `UMLPseudostate (kind = 'choice')`

**(UML028) Only submachine states can have connection point references.**

* Applies To: `UMLState`

**(UML029) A state is not allowed to have both a submachine and regions.**

* Applies To: `UMLState`

**(UML030) A region can have at most one initial vertex.**

* Applies To: `UMLRegion`

**(UML031) A region can have at most one deep history vertex.**

* Applies To: `UMLRegion`

**(UML032) A region can have at most one shallow history vertex.**

* Applies To: `UMLRegion`

**(UML033) A final state cannot have any outgoing transitions.**

* Applies To: `UMLFinalState`

**(UML034) A final state cannot have regions.**

* Applies To: `UMLFinalState`

**(UML035) A final state cannot reference a submachine.**

* Applies To: `UMLFinalState`

**(UML036) A final state has no entry behavior.**

* Applies To: `UMLFinalState`

**(UML037) A final state has no exit behavior.**

* Applies To: `UMLFinalState`

**(UML038) A final state has no state (doActivity) behavior.**

* Applies To: `UMLFinalState`

**(UML039) A fork segment must not have guards or triggers.**

* Applies To: `UMLTransition`

**(UML040) A join segment must not have guards or triggers.**

* Applies To: `UMLTransition`

**(UML041) A fork segment must always target a state.**

* Applies To: `UMLTransition`

**(UML042) A join segment must always originate from a state.**

* Applies To: `UMLTransition`

**(UML043) Transitions outgoing pseudostates may not have a trigger (except for those coming out of the initial pseudostate).**

* Applies To: `UMLTransition`

**(UML044) The classifier context of a state machine cannot be an interface.**

* Applies To: `UMLStateMachine`

**(UML045) A decision node has one or two incoming edges and at least one outgoing edge.**

\_ Applies To: `UMLDecisionNode`

**(UML046) A merge node has one outgoing edge.**

* Applies To: `UMLMergeNode`

**(UML047) The edges coming into and out of a merge node must be either all object flows or all control flows.**

* Applies To: `UMLMergeNode`

**(UML048) An initial node has no incoming edges.**

* Applies To: `UMLInitialNode`

**(UML049) Only control edges can have initial nodes as source.**

* Applies To: `UMLInitialNode`

**(UML050) A final node has no outgoing edges.**

* Applies To: `UMLFinalNode`

**(UML051) A fork node has one incoming edge.**

* Applies To: `UMLForkNode`

**(UML052) The edges coming into and out of a fork node must be either all object flows or all control flows.**

* Applies To: `UMLForkNode`

**(UML053) A join node has one outgoing edge.**

* Applies To: `UMLJoinNode`

**(UML054) The edges coming into and out of a join node must be either all object flows or all control flows.**

* Applies To: `UMLJoinNode`

**(UML055) All edges coming into or going out of object nodes must be object flow edges.**

* Applies To: `UMLObjectNode`

**(UML056) Control flows may not have object nodes at either end, except for object nodes with control type.**

* Applies To: `UMLControlFlow`

**(UML057) Object flows may not have actions at either end.**

* Applies To: `UMLObjectFlow`
