Linked.Archi ArchiMate 3.2 Derivation Rules
type: Ontology
imports: core#
imports: 3.2#
license: http://creativecommons.org/licenses/by/4.0/
preferred namespace prefix: amderiv
description: SHACL Rules (sh:SPARQLRule) implementing ArchiMate derivation rules DR1-DR8 (valid) and PDR1-PDR12 (potential) from the ArchiMate 3.2 specification Appendix B. Derived relationships are annotated with confidence level and provenance via RDF 1.2 reification.
created: 2026-04-13
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#
declare:
  namespace: Linked.Archi ArchiMate 3.2 Derivation Rules

confidence
type: DatatypeProperty
definition: Confidence level of a derived relationship: valid, potential, or suggestion.
range: string

derived via
type: DatatypeProperty
definition: Name of the derivation rule that produced this relationship.
range: string

derived from
type: ObjectProperty
definition: Source relationship(s) that led to this derivation.

structural strength
type: DatatypeProperty
range: integer

dependency strength
type: DatatypeProperty
range: integer

realizes
structural strength: 1

assignedTo
structural strength: 2

aggregates
structural strength: 3

composedOf
structural strength: 4

associatedWith
dependency strength: 1

influences
dependency strength: 2

accesses
dependency strength: 3

serves
dependency strength: 4

DR1 SpecializationTransitivity
type: NodeShape
target subjects of: specializes
rule: DR1: Specialization Transitivity
  type: SPARQLRule
  prefixes: Linked.Archi ArchiMate 3.2 Derivation Rules
  construct: CONSTRUCT { $this am:specializes ?c . <<$this am:specializes ?c>> :confidence "valid" ; :derivedVia "DR1: specialization transitivity" . } WHERE { $this am:specializes ?b . ?b am:specializes ?c . FILTER($this != ?c) FILTER NOT EXISTS { $this am:specializes ?c } }

DR2 StructuralChain
type: NodeShape
target class: Element
rule: DR2: Structural Relationship Chain
  type: SPARQLRule
  prefixes: Linked.Archi ArchiMate 3.2 Derivation Rules
  construct: CONSTRUCT { $this am:realizes ?c . <<$this am:realizes ?c>> :confidence "valid" ; :derivedVia "DR2: structural chain (result: realization)" . } WHERE { $this ?rel1 ?b . ?b ?rel2 ?c . ?rel1 :structuralStrength ?s1 . ?rel2 :structuralStrength ?s2 . BIND(IF(?s1 <= ?s2, ?s1, ?s2) AS ?minS) FILTER(?minS = 1) FILTER($this != ?c) FILTER NOT EXISTS { $this am:realizes ?c } }
rule: DR2: Structural Chain → Assignment
  type: SPARQLRule
  prefixes: Linked.Archi ArchiMate 3.2 Derivation Rules
  construct: CONSTRUCT { $this am:assignedTo ?c . <<$this am:assignedTo ?c>> :confidence "valid" ; :derivedVia "DR2: structural chain (result: assignment)" . } WHERE { $this ?rel1 ?b . ?b ?rel2 ?c . ?rel1 :structuralStrength ?s1 . ?rel2 :structuralStrength ?s2 . BIND(IF(?s1 <= ?s2, ?s1, ?s2) AS ?minS) FILTER(?minS = 2) FILTER($this != ?c) FILTER NOT EXISTS { $this am:assignedTo ?c } }
rule: DR2: Structural Chain → Aggregation
  type: SPARQLRule
  prefixes: Linked.Archi ArchiMate 3.2 Derivation Rules
  construct: CONSTRUCT { $this am:aggregates ?c . <<$this am:aggregates ?c>> :confidence "valid" ; :derivedVia "DR2: structural chain (result: aggregation)" . } WHERE { $this ?rel1 ?b . ?b ?rel2 ?c . ?rel1 :structuralStrength ?s1 . ?rel2 :structuralStrength ?s2 . BIND(IF(?s1 <= ?s2, ?s1, ?s2) AS ?minS) FILTER(?minS = 3) FILTER($this != ?c) FILTER NOT EXISTS { $this am:aggregates ?c } }
rule: DR2: Structural Chain → Composition
  type: SPARQLRule
  prefixes: Linked.Archi ArchiMate 3.2 Derivation Rules
  construct: CONSTRUCT { $this am:composedOf ?c . <<$this am:composedOf ?c>> :confidence "valid" ; :derivedVia "DR2: structural chain (result: composition)" . } WHERE { $this ?rel1 ?b . ?b ?rel2 ?c . ?rel1 :structuralStrength ?s1 . ?rel2 :structuralStrength ?s2 . BIND(IF(?s1 <= ?s2, ?s1, ?s2) AS ?minS) FILTER(?minS = 4) FILTER($this != ?c) FILTER NOT EXISTS { $this am:composedOf ?c } }

DR3 StructuralDependency
type: NodeShape
target class: Element
rule: DR3: Structural + Dependency → Dependency
  type: SPARQLRule
  prefixes: Linked.Archi ArchiMate 3.2 Derivation Rules
  construct: CONSTRUCT { $this ?depRel ?c . <<$this ?depRel ?c>> :confidence "valid" ; :derivedVia "DR3: structural + dependency" . } WHERE { $this ?structRel ?b . ?b ?depRel ?c . ?structRel :structuralStrength ?ss . ?depRel :dependencyStrength ?ds . FILTER($this != ?c) FILTER NOT EXISTS { $this ?depRel ?c } }

DR4 OpposingStructuralDependency
type: NodeShape
target class: Element
rule: DR4: Opposing Structural + Dependency → Dependency
  type: SPARQLRule
  prefixes: Linked.Archi ArchiMate 3.2 Derivation Rules
  construct: CONSTRUCT { ?c ?depRel $this . <<?c ?depRel $this>> :confidence "valid" ; :derivedVia "DR4: opposing structural + dependency" . } WHERE { $this ?structRel ?b . ?c ?depRel ?b . ?structRel :structuralStrength ?ss . ?depRel :dependencyStrength ?ds . FILTER($this != ?c) FILTER NOT EXISTS { ?c ?depRel $this } }

DR5 StructuralDynamic
type: NodeShape
target class: Element
rule: DR5: Structural + Dynamic → Triggering
  type: SPARQLRule
  prefixes: Linked.Archi ArchiMate 3.2 Derivation Rules
  construct: CONSTRUCT { $this am:triggers ?c . <<$this am:triggers ?c>> :confidence "valid" ; :derivedVia "DR5: structural + triggering" . } WHERE { $this ?structRel ?b . ?b am:triggers ?c . ?structRel :structuralStrength ?ss . FILTER($this != ?c) FILTER NOT EXISTS { $this am:triggers ?c } }
rule: DR5: Structural + Dynamic → Flow
  type: SPARQLRule
  prefixes: Linked.Archi ArchiMate 3.2 Derivation Rules
  construct: CONSTRUCT { $this am:flowsTo ?c . <<$this am:flowsTo ?c>> :confidence "valid" ; :derivedVia "DR5: structural + flow" . } WHERE { $this ?structRel ?b . ?b am:flowsTo ?c . ?structRel :structuralStrength ?ss . FILTER($this != ?c) FILTER NOT EXISTS { $this am:flowsTo ?c } }

DR6 StructuralFlowOpposite
type: NodeShape
target class: Element
rule: DR6: Structural + Flow (opposite) → Flow
  type: SPARQLRule
  prefixes: Linked.Archi ArchiMate 3.2 Derivation Rules
  construct: CONSTRUCT { ?c am:flowsTo $this . <<?c am:flowsTo $this>> :confidence "valid" ; :derivedVia "DR6: structural + flow (opposite)" . } WHERE { $this ?structRel ?b . ?c am:flowsTo ?b . ?structRel :structuralStrength ?ss . FILTER($this != ?c) FILTER NOT EXISTS { ?c am:flowsTo $this } }

DR7 TriggeringStructural
type: NodeShape
target class: Element
rule: DR7: Triggering + Structural → Triggering
  type: SPARQLRule
  prefixes: Linked.Archi ArchiMate 3.2 Derivation Rules
  construct: CONSTRUCT { ?a am:triggers $this . <<?a am:triggers $this>> :confidence "valid" ; :derivedVia "DR7: triggering + structural" . } WHERE { ?a am:triggers ?b . ?b ?structRel $this . ?structRel :structuralStrength ?ss . FILTER(?a != $this) FILTER NOT EXISTS { ?a am:triggers $this } }

DR8 TriggeringTransitivity
type: NodeShape
target class: Element
rule: DR8: Triggering Transitivity
  type: SPARQLRule
  prefixes: Linked.Archi ArchiMate 3.2 Derivation Rules
  construct: CONSTRUCT { $this am:triggers ?c . <<$this am:triggers ?c>> :confidence "valid" ; :derivedVia "DR8: triggering transitivity" . } WHERE { $this am:triggers ?b . ?b am:triggers ?c . FILTER($this != ?c) FILTER NOT EXISTS { $this am:triggers ?c } }

PDR1 SpecializationForward
type: NodeShape
target subjects of: specializes
rule: PDR1: Specialization Inheritance (Forward)
  type: SPARQLRule
  prefixes: Linked.Archi ArchiMate 3.2 Derivation Rules
  construct: CONSTRUCT { $this ?rel ?c . <<$this ?rel ?c>> :confidence "potential" ; :derivedVia "PDR1: specialization inheritance (forward)" . } WHERE { $this am:specializes ?b . ?b ?rel ?c . { ?rel :structuralStrength ?s } UNION { ?rel :dependencyStrength ?s } UNION { FILTER(?rel IN (am:triggers, am:flowsTo)) } FILTER($this != ?c) FILTER NOT EXISTS { $this ?rel ?c } }

PDR2 SpecializationReverse
type: NodeShape
target subjects of: specializes
rule: PDR2: Specialization Inheritance (Reverse)
  type: SPARQLRule
  prefixes: Linked.Archi ArchiMate 3.2 Derivation Rules
  construct: CONSTRUCT { ?c ?rel $this . <<?c ?rel $this>> :confidence "potential" ; :derivedVia "PDR2: specialization inheritance (reverse)" . } WHERE { $this am:specializes ?b . ?c ?rel ?b . { ?rel :structuralStrength ?s } UNION { ?rel :dependencyStrength ?s } UNION { FILTER(?rel IN (am:triggers, am:flowsTo)) } FILTER(?c != $this) FILTER NOT EXISTS { ?c ?rel $this } }

PDR3 SpecializationSourceInheritance
type: NodeShape
target subjects of: specializes
rule: PDR3: Specialization Source Inheritance
  type: SPARQLRule
  prefixes: Linked.Archi ArchiMate 3.2 Derivation Rules
  construct: CONSTRUCT { ?b ?rel ?c . <<?b ?rel ?c>> :confidence "potential" ; :derivedVia "PDR3: specialization source inheritance" . } WHERE { $this am:specializes ?b . $this ?rel ?c . { ?rel :structuralStrength ?s } UNION { ?rel :dependencyStrength ?s } UNION { FILTER(?rel IN (am:triggers, am:flowsTo)) } FILTER(?b != ?c) FILTER NOT EXISTS { ?b ?rel ?c } }

PDR4 SpecializationTargetInheritance
type: NodeShape
target subjects of: specializes
rule: PDR4: Specialization Target Inheritance
  type: SPARQLRule
  prefixes: Linked.Archi ArchiMate 3.2 Derivation Rules
  construct: CONSTRUCT { ?c ?rel ?b . <<?c ?rel ?b>> :confidence "potential" ; :derivedVia "PDR4: specialization target inheritance" . } WHERE { $this am:specializes ?b . ?c ?rel $this . { ?rel :structuralStrength ?s } UNION { ?rel :dependencyStrength ?s } UNION { FILTER(?rel IN (am:triggers, am:flowsTo)) } FILTER(?c != ?b) FILTER NOT EXISTS { ?c ?rel ?b } }

PDR5 StructuralDependencyAtSource
type: NodeShape
target class: Element
rule: PDR5: Structural + Dependency (at source)
  type: SPARQLRule
  prefixes: Linked.Archi ArchiMate 3.2 Derivation Rules
  construct: CONSTRUCT { ?c ?depRel ?b . <<?c ?depRel ?b>> :confidence "potential" ; :derivedVia "PDR5: structural + dependency (at source)" . } WHERE { $this ?structRel ?b . ?c ?depRel $this . ?structRel :structuralStrength ?ss . ?depRel :dependencyStrength ?ds . FILTER(?c != ?b) FILTER NOT EXISTS { ?c ?depRel ?b } }

PDR6 StructuralDependencyFromSource
type: NodeShape
target class: Element
rule: PDR6: Structural + Dependency (from source)
  type: SPARQLRule
  prefixes: Linked.Archi ArchiMate 3.2 Derivation Rules
  construct: CONSTRUCT { ?b ?depRel ?c . <<?b ?depRel ?c>> :confidence "potential" ; :derivedVia "PDR6: structural + dependency (from source)" . } WHERE { $this ?structRel ?b . $this ?depRel ?c . ?structRel :structuralStrength ?ss . ?depRel :dependencyStrength ?ds . FILTER(?b != ?c) FILTER NOT EXISTS { ?b ?depRel ?c } }

PDR7 DependencyChain
type: NodeShape
target class: Element
rule: PDR7: Dependency Chain → Weakest
  type: SPARQLRule
  prefixes: Linked.Archi ArchiMate 3.2 Derivation Rules
  construct: CONSTRUCT { $this am:associatedWith ?c . <<$this am:associatedWith ?c>> :confidence "potential" ; :derivedVia "PDR7: dependency chain (result: association — weakest)" . } WHERE { $this ?rel1 ?b . ?b ?rel2 ?c . ?rel1 :dependencyStrength ?d1 . ?rel2 :dependencyStrength ?d2 . BIND(IF(?d1 <= ?d2, ?d1, ?d2) AS ?minD) FILTER(?minD = 1) FILTER($this != ?c) FILTER NOT EXISTS { $this am:associatedWith ?c } }
rule: PDR7: Dependency Chain → Influence
  type: SPARQLRule
  prefixes: Linked.Archi ArchiMate 3.2 Derivation Rules
  construct: CONSTRUCT { $this am:influences ?c . <<$this am:influences ?c>> :confidence "potential" ; :derivedVia "PDR7: dependency chain (result: influence)" . } WHERE { $this ?rel1 ?b . ?b ?rel2 ?c . ?rel1 :dependencyStrength ?d1 . ?rel2 :dependencyStrength ?d2 . BIND(IF(?d1 <= ?d2, ?d1, ?d2) AS ?minD) FILTER(?minD = 2) FILTER($this != ?c) FILTER NOT EXISTS { $this am:influences ?c } }
rule: PDR7: Dependency Chain → Access
  type: SPARQLRule
  prefixes: Linked.Archi ArchiMate 3.2 Derivation Rules
  construct: CONSTRUCT { $this am:accesses ?c . <<$this am:accesses ?c>> :confidence "potential" ; :derivedVia "PDR7: dependency chain (result: access)" . } WHERE { $this ?rel1 ?b . ?b ?rel2 ?c . ?rel1 :dependencyStrength ?d1 . ?rel2 :dependencyStrength ?d2 . BIND(IF(?d1 <= ?d2, ?d1, ?d2) AS ?minD) FILTER(?minD = 3) FILTER($this != ?c) FILTER NOT EXISTS { $this am:accesses ?c } }
rule: PDR7: Dependency Chain → Serving
  type: SPARQLRule
  prefixes: Linked.Archi ArchiMate 3.2 Derivation Rules
  construct: CONSTRUCT { $this am:serves ?c . <<$this am:serves ?c>> :confidence "potential" ; :derivedVia "PDR7: dependency chain (result: serving)" . } WHERE { $this ?rel1 ?b . ?b ?rel2 ?c . ?rel1 :dependencyStrength ?d1 . ?rel2 :dependencyStrength ?d2 . BIND(IF(?d1 <= ?d2, ?d1, ?d2) AS ?minD) FILTER(?minD = 4) FILTER($this != ?c) FILTER NOT EXISTS { $this am:serves ?c } }

PDR8 FlowStructural
type: NodeShape
target subjects of: flowsTo
rule: PDR8: Flow + Structural → Flow
  type: SPARQLRule
  prefixes: Linked.Archi ArchiMate 3.2 Derivation Rules
  construct: CONSTRUCT { $this am:flowsTo ?c . <<$this am:flowsTo ?c>> :confidence "potential" ; :derivedVia "PDR8: flow + structural" . } WHERE { $this am:flowsTo ?b . ?b ?structRel ?c . ?structRel :structuralStrength ?ss . FILTER($this != ?c) FILTER NOT EXISTS { $this am:flowsTo ?c } }

PDR9 StructuralDynamicReverse
type: NodeShape
target class: Element
rule: PDR9: Structural + Triggering (reverse)
  type: SPARQLRule
  prefixes: Linked.Archi ArchiMate 3.2 Derivation Rules
  construct: CONSTRUCT { ?b am:triggers ?c . <<?b am:triggers ?c>> :confidence "potential" ; :derivedVia "PDR9: structural + triggering (reverse)" . } WHERE { $this ?structRel ?b . $this am:triggers ?c . ?structRel :structuralStrength ?ss . FILTER(?b != ?c) FILTER NOT EXISTS { ?b am:triggers ?c } }
rule: PDR9: Structural + Flow (reverse)
  type: SPARQLRule
  prefixes: Linked.Archi ArchiMate 3.2 Derivation Rules
  construct: CONSTRUCT { ?b am:flowsTo ?c . <<?b am:flowsTo ?c>> :confidence "potential" ; :derivedVia "PDR9: structural + flow (reverse)" . } WHERE { $this ?structRel ?b . $this am:flowsTo ?c . ?structRel :structuralStrength ?ss . FILTER(?b != ?c) FILTER NOT EXISTS { ?b am:flowsTo ?c } }

PDR10 FlowTransitivity
type: NodeShape
target subjects of: flowsTo
rule: PDR10: Flow Transitivity
  type: SPARQLRule
  prefixes: Linked.Archi ArchiMate 3.2 Derivation Rules
  construct: CONSTRUCT { $this am:flowsTo ?c . <<$this am:flowsTo ?c>> :confidence "potential" ; :derivedVia "PDR10: flow transitivity" . } WHERE { $this am:flowsTo ?b . ?b am:flowsTo ?c . FILTER($this != ?c) FILTER NOT EXISTS { $this am:flowsTo ?c } }

PDR11 TriggeringStructuralReverse
type: NodeShape
target subjects of: triggers
rule: PDR11: Triggering + Structural (reverse)
  type: SPARQLRule
  prefixes: Linked.Archi ArchiMate 3.2 Derivation Rules
  construct: CONSTRUCT { $this am:triggers ?c . <<$this am:triggers ?c>> :confidence "potential" ; :derivedVia "PDR11: triggering + structural (reverse)" . } WHERE { $this am:triggers ?b . ?c ?structRel ?b . ?structRel :structuralStrength ?ss . FILTER($this != ?c) FILTER NOT EXISTS { $this am:triggers ?c } }

PDR12 GroupingDerivation
type: NodeShape
target class: Grouping
rule: PDR12: Grouping Element Derivation
  type: SPARQLRule
  prefixes: Linked.Archi ArchiMate 3.2 Derivation Rules
  construct: CONSTRUCT { ?member ?targetRel ?c . <<?member ?targetRel ?c>> :confidence "potential" ; :derivedVia "PDR12: grouping element derivation" . } WHERE { { $this am:aggregates ?member . } UNION { $this am:composedOf ?member . } { $this am:realizes ?c . BIND(am:realizes AS ?targetRel) } UNION { $this am:assignedTo ?c . BIND(am:assignedTo AS ?targetRel) } FILTER(?member != ?c) FILTER NOT EXISTS { ?member ?targetRel ?c } }