Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
type: Ontology
imports: core#
imports: core-shapes#
license: http://creativecommons.org/licenses/by/4.0/
preferred namespace prefix: amelsh
description: 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.
created: 2026-04-12
modified: 2026-04-13
publisher: Linked.Archi
publisher: linked.archi
status: draft
version IRI: 3.2#
version info: 3.2
declare:
  prefix: am
  namespace: https://meta.linked.archi/archimate3/onto#
declare:
  prefix: arch
  namespace: https://meta.linked.archi/core#
declare:
  prefix: rdf
  namespace: http://www.w3.org/1999/02/22-rdf-syntax-ns#
declare:
  prefix: rdfs
  namespace: http://www.w3.org/2000/01/rdf-schema#

ArchiMateElementShape
type: NodeShape
target class: Element
property:
  path: prefLabel
  min count: 1
  datatype: langString
  message: Every ArchiMate element instance must have at least one skos:prefLabel.

NoSelfCompositionShape
type: NodeShape
target subjects of: composedOf
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: An element cannot compose itself.
  select: SELECT $this WHERE { $this am:composedOf $this . }

NoSelfAggregationShape
type: NodeShape
target subjects of: aggregates
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: An element cannot aggregate itself.
  select: SELECT $this WHERE { $this am:aggregates $this . }

NoSelfSpecializationShape
type: NodeShape
target subjects of: specializes
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: An element cannot specialize itself.
  select: SELECT $this WHERE { $this am:specializes $this . }

NoCircularCompositionShape
type: NodeShape
target subjects of: composedOf
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: Circular composition is not allowed.
  select: SELECT $this WHERE { $this am:composedOf+ $this . }

NoCircularAggregationShape
type: NodeShape
target subjects of: aggregates
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: Circular aggregation is not allowed.
  select: SELECT $this WHERE { $this am:aggregates+ $this . }

CompositionPartUniquenessShape
type: NodeShape
target objects of: composedOf
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: A composed part can only belong to one whole (composition implies exclusive ownership).
  select: SELECT $this WHERE { ?whole1 am:composedOf $this . ?whole2 am:composedOf $this . FILTER(?whole1 != ?whole2) }

SpecializationSameTypeShape
type: NodeShape
target subjects of: specializes
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: Specialization must connect elements of the same ArchiMate type.
  select: 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 . } }

AssignmentSourceConstraint
type: NodeShape
target subjects of: assignedTo
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: In core layers, assignment can only originate from active structure elements.
  select: 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
type: NodeShape
target objects of: assignedTo
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: In core layers, assignment can only target behavior elements.
  select: SELECT $this WHERE { ?source am:assignedTo $this . $this rdf:type/rdfs:subClassOf* am:CoreLayerElement . FILTER NOT EXISTS { $this rdf:type/rdfs:subClassOf* am:BehaviorElement . } }

AccessSourceConstraint
type: NodeShape
target subjects of: accesses
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: In core layers, access can only originate from behavior elements.
  select: 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
type: NodeShape
target objects of: accesses
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: In core layers, access can only target passive structure elements.
  select: SELECT $this WHERE { ?source am:accesses $this . $this rdf:type/rdfs:subClassOf* am:CoreLayerElement . FILTER NOT EXISTS { $this rdf:type/rdfs:subClassOf* am:PassiveStructureElement . } }

TriggeringSourceConstraint
type: NodeShape
target subjects of: triggers
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: In core layers, triggering can only originate from behavior elements.
  select: 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
type: NodeShape
target objects of: triggers
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: In core layers, triggering can only target behavior elements.
  select: SELECT $this WHERE { ?source am:triggers $this . $this rdf:type/rdfs:subClassOf* am:CoreLayerElement . FILTER NOT EXISTS { $this rdf:type/rdfs:subClassOf* am:BehaviorElement . } }

FlowSourceConstraint
type: NodeShape
target subjects of: flowsTo
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: In core layers, flow can only originate from behavior elements.
  select: 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
type: NodeShape
target objects of: flowsTo
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: In core layers, flow can only target behavior elements.
  select: SELECT $this WHERE { ?source am:flowsTo $this . $this rdf:type/rdfs:subClassOf* am:CoreLayerElement . FILTER NOT EXISTS { $this rdf:type/rdfs:subClassOf* am:BehaviorElement . } }

ServingLayerDirectionShape
type: NodeShape
target subjects of: serves
severity: Warning
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: Serving relationships should flow upward from lower to higher layers (Physical → Technology → Application → Business).
  select: 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 . } }

NoRealizationOfBusinessActiveStructureShape
type: NodeShape
target subjects of: realizes
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: Application and Technology elements cannot realize Business active structure elements — only Business behavior can be realized by lower layers.
  select: 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 . } }

StrategyAssignmentTargetShape
type: NodeShape
target subjects of: assignedTo
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: Within Strategy layer, Resource can only be assigned to Capability or ValueStream.
  select: 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
type: NodeShape
target subjects of: realizes
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: CourseOfAction should not realize Capability or ValueStream — realization flows the other direction.
  select: SELECT $this ?target WHERE { $this am:realizes ?target . $this a am:CourseOfAction . { ?target a am:Capability . } UNION { ?target a am:ValueStream . } }

CoreInterfaceAssignmentShape
type: NodeShape
target subjects of: assignedTo
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: Interface assignment target must be an external behavior element (service) in the same layer.
  select: 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
type: NodeShape
target subjects of: realizes
severity: Info
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: Service should not realize internal behavior — realization flows from process/function toward service.
  select: 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 . } }

PhysicalAssignmentSourceShape
type: NodeShape
target subjects of: assignedTo
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: In Physical layer, assignment can only originate from active structure elements.
  select: 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
type: NodeShape
target objects of: assignedTo
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: In Physical layer, assignment can only target active or passive structure elements.
  select: 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 . } }

DeprecatedWorkPackageRealizesDeliverableShape
type: NodeShape
target subjects of: realizes
severity: Warning
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: WorkPackage → Deliverable realization is deprecated per ArchiMate 3.2 — use an access relationship instead.
  select: SELECT $this ?target WHERE { $this am:realizes ?target . $this a am:WorkPackage . ?target a am:Deliverable . }

GapPlateauAssociationShape
type: NodeShape
target class: Gap
severity: Warning
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: Gap should be associated with at least one Plateau — a gap represents a difference between two plateaus.
  select: SELECT $this WHERE { FILTER NOT EXISTS { { $this am:associatedWith ?plateau . ?plateau a am:Plateau . } UNION { ?plateau am:associatedWith $this . ?plateau a am:Plateau . } } }

MotivationAssignmentShape
type: NodeShape
target objects of: assignedTo
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: Only Business active structure elements can be assigned to Stakeholder.
  select: 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 . } }

MotivationNoTriggeringShape
type: NodeShape
target subjects of: triggers
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: Motivation elements cannot participate in triggering relationships.
  select: SELECT $this WHERE { $this am:triggers ?target . $this rdf:type/rdfs:subClassOf* am:MotivationElement . }

MotivationNoFlowShape
type: NodeShape
target subjects of: flowsTo
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: Motivation elements cannot participate in flow relationships.
  select: SELECT $this WHERE { $this am:flowsTo ?target . $this rdf:type/rdfs:subClassOf* am:MotivationElement . }

AccessTypeShape
type: NodeShape
target class: Access
property:
  path: accessType
  max count: 1
  datatype: string
  in: Read
  in: Write
  in: ReadWrite
  in: Access
  message: accessType must be one of: Read, Write, ReadWrite, Access.

InfluenceStrengthShape
type: NodeShape
target class: Influence
property:
  path: influenceStrength
  max count: 1
  datatype: string
  in: +
  in: ++
  in: -
  in: --
  message: influenceStrength must be one of: +, ++, -, --.

JunctionTypeShape
type: NodeShape
target class: AndJunction
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: All relationships connected to an AndJunction must be of the same type.
  select: 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) }

OrJunctionTypeShape
type: NodeShape
target class: OrJunction
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: All relationships connected to an OrJunction must be of the same type.
  select: 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) }

MotivationRealizationDirectionShape
type: NodeShape
target subjects of: realizes
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: Motivation elements should not realize non-Motivation elements — realization flows from core/strategy toward Motivation.
  select: 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 . } }

MotivationNoTriggeringTargetShape
type: NodeShape
target objects of: triggers
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: Motivation elements cannot be targets of triggering relationships.
  select: SELECT $this WHERE { ?source am:triggers $this . $this rdf:type/rdfs:subClassOf* am:MotivationElement . }

MotivationNoFlowTargetShape
type: NodeShape
target objects of: flowsTo
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: Motivation elements cannot be targets of flow relationships.
  select: SELECT $this WHERE { ?source am:flowsTo $this . $this rdf:type/rdfs:subClassOf* am:MotivationElement . }

StrategyRealizationTargetShape
type: NodeShape
target subjects of: realizes
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: Strategy elements can only realize other Strategy elements or Motivation elements — not Core layer elements.
  select: 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 . } }

DeepSpecializationChainShape
type: NodeShape
target subjects of: specializes
severity: Info
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes
  message: Element has a deep specialization chain (5+ levels) — consider if this complexity is necessary.
  select: SELECT $this WHERE { $this am:specializes+ ?t1 . ?t1 am:specializes+ ?t2 . ?t2 am:specializes+ ?t3 . ?t3 am:specializes+ ?t4 . }