Linked.Archi

Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes

SHACL Shapes

https://meta.linked.archi/archimate/element-shapes#

v3.2.0 draft amelsh: Linked.Archi Modified: 2026-04-13 License

SHACL shapes for validating ArchiMate element instances and metamodel patterns. Covers structural integrity, assignment/access/serving direction, cross-layer constraints, specialization rules, junction homogeneity, motivation realization direction, strategy realization targets, and deep specialization warnings. Based on ArchiMate 3.2 spec Figures 5, 34, 45, 46, 51, 52, 70, 82, 99, 104-106. For relationship pair validation, see archimate3.2-relationship-shapes.ttl.

Contents

AccessSourceConstraint

SPARQL constraint: In core layers, access can only originate from behavior elements. Violation
            SELECT $this WHERE {
                $this am:accesses ?target .
                $this rdf:type/rdfs:subClassOf* am:CoreLayerElement .
                FILTER NOT EXISTS {
                    $this rdf:type/rdfs:subClassOf* am:BehaviorElement .
                }
            }
        

AccessTargetConstraint

SPARQL constraint: In core layers, access can only target passive structure elements. Violation
            SELECT $this WHERE {
                ?source am:accesses $this .
                $this rdf:type/rdfs:subClassOf* am:CoreLayerElement .
                FILTER NOT EXISTS {
                    $this rdf:type/rdfs:subClassOf* am:PassiveStructureElement .
                }
            }
        

AccessTypeShape — target: Access

PropertyConstraintValueSeverityMessage
accessType datatype string Violation
accessType in 390da8b770d2cb5f Violation
accessType maxCount 1 Violation

ArchiMateElementShape — target: Element

PropertyConstraintValueSeverityMessage
prefLabel datatype langString Violation
prefLabel minCount 1 Violation

AssignmentSourceConstraint

SPARQL constraint: In core layers, assignment can only originate from active structure elements. Violation
            SELECT $this WHERE {
                $this am:assignedTo ?target .
                $this rdf:type/rdfs:subClassOf* am:CoreLayerElement .
                FILTER NOT EXISTS {
                    $this rdf:type/rdfs:subClassOf* am:ActiveStructureElement .
                }
            }
        

AssignmentTargetConstraint

SPARQL constraint: In core layers, assignment can only target behavior elements. Violation
            SELECT $this WHERE {
                ?source am:assignedTo $this .
                $this rdf:type/rdfs:subClassOf* am:CoreLayerElement .
                FILTER NOT EXISTS {
                    $this rdf:type/rdfs:subClassOf* am:BehaviorElement .
                }
            }
        

CompositionPartUniquenessShape

SPARQL constraint: A composed part can only belong to one whole (composition implies exclusive ownership). Violation
            SELECT $this WHERE {
                ?whole1 am:composedOf $this .
                ?whole2 am:composedOf $this .
                FILTER(?whole1 != ?whole2)
            }
        

CoreInterfaceAssignmentShape

SPARQL constraint: Interface assignment target must be an external behavior element (service) in the same layer. Violation
            SELECT $this ?target WHERE {
                $this am:assignedTo ?target .
                $this rdf:type/rdfs:subClassOf* am:ExternalActiveStructureElement .
                $this rdf:type/rdfs:subClassOf* am:CoreLayerElement .
                VALUES ?layer {
                    am:BusinessLayerElement
                    am:ApplicationLayerElement
                    am:TechnologyLayerElement
                }
                $this rdf:type/rdfs:subClassOf* ?layer .
                FILTER NOT EXISTS {
                    ?target rdf:type/rdfs:subClassOf* am:ExternalBehaviorElement .
                    ?target rdf:type/rdfs:subClassOf* ?layer .
                }
            }
        

CoreServiceRealizationDirectionShape

SPARQL constraint: Service should not realize internal behavior — realization flows from process/function toward service. Info
            SELECT $this ?target WHERE {
                $this am:realizes ?target .
                $this rdf:type/rdfs:subClassOf* am:ExternalBehaviorElement .
                VALUES ?layer {
                    am:BusinessLayerElement
                    am:ApplicationLayerElement
                    am:TechnologyLayerElement
                }
                $this rdf:type/rdfs:subClassOf* ?layer .
                ?target rdf:type/rdfs:subClassOf* am:BehaviorElement .
                ?target rdf:type/rdfs:subClassOf* ?layer .
                FILTER NOT EXISTS {
                    ?target rdf:type/rdfs:subClassOf* am:ExternalBehaviorElement .
                }
            }
        

DeepSpecializationChainShape

SPARQL constraint: Element has a deep specialization chain (5+ levels) — consider if this complexity is necessary. Info
            SELECT $this WHERE {
                $this am:specializes+ ?t1 .
                ?t1 am:specializes+ ?t2 .
                ?t2 am:specializes+ ?t3 .
                ?t3 am:specializes+ ?t4 .
            }
        

DeprecatedWorkPackageRealizesDeliverableShape

SPARQL constraint: WorkPackage → Deliverable realization is deprecated per ArchiMate 3.2 — use an access relationship instead. Warning
            SELECT $this ?target WHERE {
                $this am:realizes ?target .
                $this a am:WorkPackage .
                ?target a am:Deliverable .
            }
        

FlowSourceConstraint

SPARQL constraint: In core layers, flow can only originate from behavior elements. Violation
            SELECT $this WHERE {
                $this am:flowsTo ?target .
                $this rdf:type/rdfs:subClassOf* am:CoreLayerElement .
                FILTER NOT EXISTS {
                    $this rdf:type/rdfs:subClassOf* am:BehaviorElement .
                }
            }
        

FlowTargetConstraint

SPARQL constraint: In core layers, flow can only target behavior elements. Violation
            SELECT $this WHERE {
                ?source am:flowsTo $this .
                $this rdf:type/rdfs:subClassOf* am:CoreLayerElement .
                FILTER NOT EXISTS {
                    $this rdf:type/rdfs:subClassOf* am:BehaviorElement .
                }
            }
        

GapPlateauAssociationShape — target: Gap

SPARQL constraint: Gap should be associated with at least one Plateau — a gap represents a difference between two plateaus. Warning
            SELECT $this WHERE {
                FILTER NOT EXISTS {
                    {
                        $this am:associatedWith ?plateau .
                        ?plateau a am:Plateau .
                    } UNION {
                        ?plateau am:associatedWith $this .
                        ?plateau a am:Plateau .
                    }
                }
            }
        

InfluenceStrengthShape — target: Influence

PropertyConstraintValueSeverityMessage
influenceStrength datatype string Violation
influenceStrength in 390da8b770d2cb5a Violation
influenceStrength maxCount 1 Violation

JunctionTypeShape — target: AndJunction

SPARQL constraint: All relationships connected to an AndJunction must be of the same type. Violation
            SELECT $this WHERE {
                {
                    ?a ?rel1 $this .
                    ?b ?rel2 $this .
                } UNION {
                    $this ?rel1 ?a .
                    $this ?rel2 ?b .
                } UNION {
                    ?a ?rel1 $this .
                    $this ?rel2 ?b .
                }
                ?rel1 rdfs:subPropertyOf* am:composedOf .
                FILTER NOT EXISTS {
                    ?rel2 rdfs:subPropertyOf* am:composedOf .
                }
                FILTER(?rel1 != ?rel2)
            }
        

MotivationAssignmentShape

SPARQL constraint: Only Business active structure elements can be assigned to Stakeholder. Violation
            SELECT $this ?source WHERE {
                ?source am:assignedTo $this .
                $this a am:Stakeholder .
                FILTER NOT EXISTS {
                    ?source rdf:type/rdfs:subClassOf* am:ActiveStructureElement .
                    ?source rdf:type/rdfs:subClassOf* am:BusinessLayerElement .
                }
            }
        

MotivationNoFlowShape

SPARQL constraint: Motivation elements cannot participate in flow relationships. Violation
            SELECT $this WHERE {
                $this am:flowsTo ?target .
                $this rdf:type/rdfs:subClassOf* am:MotivationElement .
            }
        

MotivationNoFlowTargetShape

SPARQL constraint: Motivation elements cannot be targets of flow relationships. Violation
            SELECT $this WHERE {
                ?source am:flowsTo $this .
                $this rdf:type/rdfs:subClassOf* am:MotivationElement .
            }
        

MotivationNoTriggeringShape

SPARQL constraint: Motivation elements cannot participate in triggering relationships. Violation
            SELECT $this WHERE {
                $this am:triggers ?target .
                $this rdf:type/rdfs:subClassOf* am:MotivationElement .
            }
        

MotivationNoTriggeringTargetShape

SPARQL constraint: Motivation elements cannot be targets of triggering relationships. Violation
            SELECT $this WHERE {
                ?source am:triggers $this .
                $this rdf:type/rdfs:subClassOf* am:MotivationElement .
            }
        

MotivationRealizationDirectionShape

SPARQL constraint: Motivation elements should not realize non-Motivation elements — realization flows from core/strategy toward Motivation. Violation
            SELECT $this ?target WHERE {
                $this am:realizes ?target .
                $this rdf:type/rdfs:subClassOf* am:MotivationElement .
                FILTER NOT EXISTS {
                    ?target rdf:type/rdfs:subClassOf* am:MotivationElement .
                }
                FILTER NOT EXISTS {
                    ?target a am:Grouping .
                }
            }
        

NoCircularAggregationShape

SPARQL constraint: Circular aggregation is not allowed. Violation
            SELECT $this WHERE { $this am:aggregates+ $this . }
        

NoCircularCompositionShape

SPARQL constraint: Circular composition is not allowed. Violation
            SELECT $this WHERE { $this am:composedOf+ $this . }
        

NoRealizationOfBusinessActiveStructureShape

SPARQL constraint: Application and Technology elements cannot realize Business active structure elements — only Business behavior can be realized by lower layers. Violation
            SELECT $this ?target WHERE {
                $this am:realizes ?target .
                ?target rdf:type/rdfs:subClassOf* am:ActiveStructureElement .
                ?target rdf:type/rdfs:subClassOf* am:BusinessLayerElement .
                {
                    $this rdf:type/rdfs:subClassOf* am:ApplicationLayerElement .
                } UNION {
                    $this rdf:type/rdfs:subClassOf* am:TechnologyLayerElement .
                } UNION {
                    $this rdf:type/rdfs:subClassOf* am:PhysicalLayerElement .
                }
            }
        

NoSelfAggregationShape

SPARQL constraint: An element cannot aggregate itself. Violation
            SELECT $this WHERE { $this am:aggregates $this . }
        

NoSelfCompositionShape

SPARQL constraint: An element cannot compose itself. Violation
            SELECT $this WHERE { $this am:composedOf $this . }
        

NoSelfSpecializationShape

SPARQL constraint: An element cannot specialize itself. Violation
            SELECT $this WHERE { $this am:specializes $this . }
        

OrJunctionTypeShape — target: OrJunction

SPARQL constraint: All relationships connected to an OrJunction must be of the same type. Violation
            SELECT $this WHERE {
                {
                    ?a ?rel1 $this .
                    ?b ?rel2 $this .
                } UNION {
                    $this ?rel1 ?a .
                    $this ?rel2 ?b .
                } UNION {
                    ?a ?rel1 $this .
                    $this ?rel2 ?b .
                }
                ?rel1 rdfs:subPropertyOf* am:composedOf .
                FILTER NOT EXISTS {
                    ?rel2 rdfs:subPropertyOf* am:composedOf .
                }
                FILTER(?rel1 != ?rel2)
            }
        

PhysicalAssignmentSourceShape

SPARQL constraint: In Physical layer, assignment can only originate from active structure elements. Violation
            SELECT $this WHERE {
                $this am:assignedTo ?target .
                $this rdf:type/rdfs:subClassOf* am:PhysicalLayerElement .
                FILTER NOT EXISTS {
                    $this rdf:type/rdfs:subClassOf* am:ActiveStructureElement .
                }
            }
        

PhysicalAssignmentTargetShape

SPARQL constraint: In Physical layer, assignment can only target active or passive structure elements. Violation
            SELECT $this WHERE {
                ?source am:assignedTo $this .
                $this rdf:type/rdfs:subClassOf* am:PhysicalLayerElement .
                FILTER NOT EXISTS {
                    $this rdf:type/rdfs:subClassOf* am:ActiveStructureElement .
                }
                FILTER NOT EXISTS {
                    $this rdf:type/rdfs:subClassOf* am:PassiveStructureElement .
                }
            }
        

ServingLayerDirectionShape

SPARQL constraint: Serving relationships should flow upward from lower to higher layers (Physical → Technology → Application → Business). Warning
            SELECT $this ?target WHERE {
                $this am:serves ?target .
                {
                    $this rdf:type/rdfs:subClassOf* am:BusinessLayerElement .
                    ?target rdf:type/rdfs:subClassOf* am:ApplicationLayerElement .
                } UNION {
                    $this rdf:type/rdfs:subClassOf* am:BusinessLayerElement .
                    ?target rdf:type/rdfs:subClassOf* am:TechnologyLayerElement .
                } UNION {
                    $this rdf:type/rdfs:subClassOf* am:ApplicationLayerElement .
                    ?target rdf:type/rdfs:subClassOf* am:TechnologyLayerElement .
                }
            }
        

SpecializationSameTypeShape

SPARQL constraint: Specialization must connect elements of the same ArchiMate type. Violation
            SELECT $this ?target WHERE {
                $this am:specializes ?target .
                $this rdf:type ?sourceType .
                ?target rdf:type ?targetType .
                ?sourceType rdfs:subClassOf* arch:Element .
                ?targetType rdfs:subClassOf* arch:Element .
                FILTER NOT EXISTS {
                    $this rdf:type ?commonType .
                    ?target rdf:type ?commonType .
                    ?commonType rdfs:subClassOf* arch:Element .
                }
            }
        

StrategyAssignmentTargetShape

SPARQL constraint: Within Strategy layer, Resource can only be assigned to Capability or ValueStream. Violation
            SELECT $this ?target WHERE {
                $this am:assignedTo ?target .
                $this rdf:type/rdfs:subClassOf* am:StructureElement .
                $this rdf:type/rdfs:subClassOf* am:StrategyLayerElement .
                ?target rdf:type/rdfs:subClassOf* am:StrategyLayerElement .
                FILTER NOT EXISTS {
                    { ?target a am:Capability . }
                    UNION
                    { ?target a am:ValueStream . }
                }
            }
        

StrategyRealizationDirectionShape

SPARQL constraint: CourseOfAction should not realize Capability or ValueStream — realization flows the other direction. Violation
            SELECT $this ?target WHERE {
                $this am:realizes ?target .
                $this a am:CourseOfAction .
                {
                    ?target a am:Capability .
                } UNION {
                    ?target a am:ValueStream .
                }
            }
        

StrategyRealizationTargetShape

SPARQL constraint: Strategy elements can only realize other Strategy elements or Motivation elements — not Core layer elements. Violation
            SELECT $this ?target WHERE {
                $this am:realizes ?target .
                $this rdf:type/rdfs:subClassOf* am:StrategyLayerElement .
                FILTER NOT EXISTS {
                    ?target rdf:type/rdfs:subClassOf* am:StrategyLayerElement .
                }
                FILTER NOT EXISTS {
                    ?target rdf:type/rdfs:subClassOf* am:MotivationElement .
                }
                FILTER NOT EXISTS {
                    ?target a am:Grouping .
                }
            }
        

TriggeringSourceConstraint

SPARQL constraint: In core layers, triggering can only originate from behavior elements. Violation
            SELECT $this WHERE {
                $this am:triggers ?target .
                $this rdf:type/rdfs:subClassOf* am:CoreLayerElement .
                FILTER NOT EXISTS {
                    $this rdf:type/rdfs:subClassOf* am:BehaviorElement .
                }
            }
        

TriggeringTargetConstraint

SPARQL constraint: In core layers, triggering can only target behavior elements. Violation
            SELECT $this WHERE {
                ?source am:triggers $this .
                $this rdf:type/rdfs:subClassOf* am:CoreLayerElement .
                FILTER NOT EXISTS {
                    $this rdf:type/rdfs:subClassOf* am:BehaviorElement .
                }
            }