Linked.Archi Architecture Principle Shapes
type: Ontology
imports: core#
imports: core-shapes#
license: http://creativecommons.org/licenses/by/4.0/
preferred namespace prefix: ampsh
description: SHACL shapes encoding common enterprise architecture principles and best practices as executable constraints. These shapes validate architecture models against governance patterns such as redundancy avoidance, single authoritative source, separation of concerns, stewardship, and technology standardization. Inspired by the ontology-based EA principle validation approach described in: Montecchiari, D.; Hinkelmann, K. (2026) "Ontology-Based Validation of Enterprise Architecture Principles", Applied Sciences, 16(7):3352. These shapes are designed to be loaded alongside the standard ArchiMate element and relationship shapes. They operate on instance data (architecture models) and detect violations of common governance principles. All shapes use sh:severity sh:Warning by default — organizations should promote specific shapes to sh:Violation based on their governance policies. Usage: ./validate.sh --shacl archimate-principles Or load manually alongside other shapes: core-shapes.ttl + archimate3.2-principle-shapes.ttl + your-model-data.ttl
created: 2026-04-14
modified: 2026-04-14
publisher: Linked.Archi
publisher: linked.archi
status: draft
version IRI: 0.1.0#
version info: 0.1.0
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:
  prefix: skos
  namespace: http://www.w3.org/2004/02/skos/core#

Redundant Application Serving
type: NodeShape
target class: BusinessProcess
severity: Warning
definition: Detects business processes served by more than one application component. Multiple applications serving the same process may indicate redundancy that should be consolidated or justified.
sparql:
  prefixes: Linked.Archi Architecture Principle Shapes
  message: Business process {$this} is served by multiple application components ({?app1} and {?app2}), indicating potential redundancy.
  select: SELECT $this ?app1 ?app2 WHERE { $this a am:BusinessProcess . ?app1 a am:ApplicationComponent ; am:serves $this . ?app2 a am:ApplicationComponent ; am:serves $this . FILTER(STR(?app1) < STR(?app2)) }

Redundant Application Realizing Service
type: NodeShape
target class: ApplicationService
severity: Warning
definition: Detects application services realized by more than one application component. Multiple components realizing the same service may indicate duplication in the application landscape.
sparql:
  prefixes: Linked.Archi Architecture Principle Shapes
  message: Application service {$this} is realized by multiple application components ({?app1} and {?app2}).
  select: SELECT $this ?app1 ?app2 WHERE { $this a am:ApplicationService . ?app1 a am:ApplicationComponent ; am:realizes $this . ?app2 a am:ApplicationComponent ; am:realizes $this . FILTER(STR(?app1) < STR(?app2)) }

Redundant Function Support
type: NodeShape
target class: BusinessFunction
severity: Warning
definition: Detects business functions served by more than one application component. Consolidation candidates for application rationalization.
sparql:
  prefixes: Linked.Archi Architecture Principle Shapes
  message: Business function {$this} is served by multiple application components ({?app1} and {?app2}).
  select: SELECT $this ?app1 ?app2 WHERE { $this a am:BusinessFunction . ?app1 a am:ApplicationComponent ; am:serves $this . ?app2 a am:ApplicationComponent ; am:serves $this . FILTER(STR(?app1) < STR(?app2)) }

Single Authoritative Data Writer
type: NodeShape
target class: DataObject
severity: Warning
definition: Detects data objects accessed with write by more than one application component. Each data object should have a single authoritative source of updates to ensure consistency.
sparql:
  prefixes: Linked.Archi Architecture Principle Shapes
  message: Data object {$this} is written by multiple application components ({?app1} and {?app2}). Designate a single authoritative source.
  select: SELECT $this ?app1 ?app2 WHERE { $this a am:DataObject . ?app1 a am:ApplicationComponent ; am:accesses $this . ?app2 a am:ApplicationComponent ; am:accesses $this . FILTER(STR(?app1) < STR(?app2)) }

Single Business Object Owner
type: NodeShape
target class: BusinessObject
severity: Warning
definition: Detects business objects accessed by more than one application component. Shared access without clear ownership creates governance ambiguity.
sparql:
  prefixes: Linked.Archi Architecture Principle Shapes
  message: Business object {$this} is accessed by multiple application components ({?app1} and {?app2}). Clarify ownership.
  select: SELECT $this ?app1 ?app2 WHERE { $this a am:BusinessObject . ?app1 a am:ApplicationComponent ; am:accesses $this . ?app2 a am:ApplicationComponent ; am:accesses $this . FILTER(STR(?app1) < STR(?app2)) }

Application Component Ownership
type: NodeShape
target class: ApplicationComponent
severity: Warning
definition: Every application component should be assigned to at least one business actor or role that owns or operates it.
sparql:
  prefixes: Linked.Archi Architecture Principle Shapes
  message: Application component {$this} has no assigned business actor or role. Assign ownership.
  select: SELECT $this WHERE { $this a am:ApplicationComponent . FILTER NOT EXISTS { { ?actor am:assignedTo $this . ?actor rdf:type/rdfs:subClassOf* am:ActiveStructureElement . ?actor rdf:type/rdfs:subClassOf* am:BusinessLayerElement . } UNION { $this am:assignedTo ?actor . ?actor rdf:type/rdfs:subClassOf* am:ActiveStructureElement . ?actor rdf:type/rdfs:subClassOf* am:BusinessLayerElement . } } }

Business Process Ownership
type: NodeShape
target class: BusinessProcess
severity: Warning
definition: Every business process should be assigned to at least one business role or actor that is responsible for it.
sparql:
  prefixes: Linked.Archi Architecture Principle Shapes
  message: Business process {$this} has no assigned business role or actor.
  select: SELECT $this WHERE { $this a am:BusinessProcess . FILTER NOT EXISTS { ?role rdf:type/rdfs:subClassOf* am:ActiveStructureElement . ?role rdf:type/rdfs:subClassOf* am:BusinessLayerElement . ?role am:assignedTo $this . } }

Data Object Stewardship
type: NodeShape
target class: DataObject
severity: Warning
definition: Critical data objects should have at least one application component that realizes or accesses them, establishing a clear system of record.
sparql:
  prefixes: Linked.Archi Architecture Principle Shapes
  message: Data object {$this} has no application component accessing or realizing it. Assign a system of record.
  select: SELECT $this WHERE { $this a am:DataObject . FILTER NOT EXISTS { ?app a am:ApplicationComponent . { ?app am:accesses $this . } UNION { ?app am:realizes $this . } } }

Business Process Direct Technology Dependency
type: NodeShape
target class: BusinessProcess
severity: Warning
definition: Business processes should not directly depend on technology layer elements. An application layer should mediate between business and technology.
sparql:
  prefixes: Linked.Archi Architecture Principle Shapes
  message: Business process {$this} has a direct serving/realization dependency on technology element {?tech}. Introduce an application layer mediator.
  select: SELECT $this ?tech WHERE { $this a am:BusinessProcess . { ?tech am:serves $this . } UNION { ?tech am:realizes $this . } ?tech rdf:type/rdfs:subClassOf* am:TechnologyLayerElement . }

Technology Serving Business Directly
type: NodeShape
target class: Node
severity: Warning
definition: Technology nodes should not directly serve business layer elements. Services should be exposed through the application layer.
sparql:
  prefixes: Linked.Archi Architecture Principle Shapes
  message: Technology node {$this} directly serves business element {?biz}. Route through the application layer.
  select: SELECT $this ?biz WHERE { $this a am:Node . $this am:serves ?biz . ?biz rdf:type/rdfs:subClassOf* am:BusinessLayerElement . }

Application Component Without Service
type: NodeShape
target class: ApplicationComponent
severity: Info
definition: Application components should expose at least one application service. Components without services may indicate missing service definitions or tightly coupled integrations.
sparql:
  prefixes: Linked.Archi Architecture Principle Shapes
  message: Application component {$this} does not expose any application service.
  select: SELECT $this WHERE { $this a am:ApplicationComponent . FILTER NOT EXISTS { $this am:realizes ?svc . ?svc a am:ApplicationService . } }

Direct Component-to-Component Serving
type: NodeShape
target class: ApplicationComponent
severity: Warning
definition: Application components should serve other components through services, not directly. Direct serving creates tight coupling that hinders independent evolution.
sparql:
  prefixes: Linked.Archi Architecture Principle Shapes
  message: Application component {$this} directly serves another application component {?target} without an intermediary service.
  select: SELECT $this ?target WHERE { $this a am:ApplicationComponent . $this am:serves ?target . ?target a am:ApplicationComponent . }

Excessive Technology Diversity Per Service
type: NodeShape
target class: ApplicationService
severity: Info
definition: Application services realized by components deployed on many different technology nodes may indicate excessive technology diversity.
sparql:
  prefixes: Linked.Archi Architecture Principle Shapes
  message: Application service {$this} depends on {?nodeCount} distinct technology nodes. Consider standardizing.
  select: SELECT $this (COUNT(DISTINCT ?node) AS ?nodeCount) WHERE { $this a am:ApplicationService . ?app am:realizes $this . ?app a am:ApplicationComponent . ?node am:assignedTo ?app . ?node rdf:type/rdfs:subClassOf* am:TechnologyLayerElement . } GROUP BY $this HAVING (COUNT(DISTINCT ?node) > 3)

Single Point of Failure
type: NodeShape
target class: BusinessService
severity: Info
definition: Business services realized by exactly one application component with no redundancy may represent a single point of failure.
sparql:
  prefixes: Linked.Archi Architecture Principle Shapes
  message: Business service {$this} is realized by only one application component ({?app}). Consider redundancy for critical services.
  select: SELECT $this ?app WHERE { $this a am:BusinessService . ?app am:realizes $this . ?app a am:ApplicationComponent . FILTER NOT EXISTS { ?app2 am:realizes $this . ?app2 a am:ApplicationComponent . FILTER(?app2 != ?app) } }

Single Deployment Node
type: NodeShape
target class: ApplicationComponent
severity: Info
definition: Application components deployed on only one technology node may lack resilience. Critical components should be deployed across multiple nodes.
sparql:
  prefixes: Linked.Archi Architecture Principle Shapes
  message: Application component {$this} is deployed on only one node ({?node}). Consider multi-node deployment for resilience.
  select: SELECT $this ?node WHERE { $this a am:ApplicationComponent . ?node am:assignedTo $this . ?node a am:Node . FILTER NOT EXISTS { ?node2 am:assignedTo $this . ?node2 a am:Node . FILTER(?node2 != ?node) } }

Business Service Without Realization
type: NodeShape
target class: BusinessService
severity: Warning
definition: Every business service should be realized by at least one business process or function. Unrealized services indicate incomplete modeling.
sparql:
  prefixes: Linked.Archi Architecture Principle Shapes
  message: Business service {$this} is not realized by any business process or function.
  select: SELECT $this WHERE { $this a am:BusinessService . FILTER NOT EXISTS { ?behavior am:realizes $this . ?behavior rdf:type/rdfs:subClassOf* am:BehaviorElement . ?behavior rdf:type/rdfs:subClassOf* am:BusinessLayerElement . } }

Application Service Without Realization
type: NodeShape
target class: ApplicationService
severity: Warning
definition: Every application service should be realized by at least one application component. Unrealized services indicate incomplete modeling or orphaned service definitions.
sparql:
  prefixes: Linked.Archi Architecture Principle Shapes
  message: Application service {$this} is not realized by any application component.
  select: SELECT $this WHERE { $this a am:ApplicationService . FILTER NOT EXISTS { ?app am:realizes $this . ?app a am:ApplicationComponent . } }

Capability Without Business Behavior Realization
type: NodeShape
target class: Capability
severity: Warning
definition: Capabilities should be realized by at least one business behavior element (process, function, or interaction). A capability without realization is aspirational only and cannot be assessed for operational readiness.
sparql:
  prefixes: Linked.Archi Architecture Principle Shapes
  message: Capability {$this} is not realized by any business process, function, or interaction.
  select: SELECT $this WHERE { $this a am:Capability . FILTER NOT EXISTS { ?behavior am:realizes $this . ?behavior rdf:type/rdfs:subClassOf* am:BehaviorElement . ?behavior rdf:type/rdfs:subClassOf* am:BusinessLayerElement . } }

Business Behavior Realized by Multiple Application Components
type: NodeShape
target class: BusinessProcess
severity: Warning
definition: Detects business processes (or functions) realized by more than one application component. Multiple components realizing the same business behavior may indicate redundant automation or unclear application ownership of the process.
sparql:
  prefixes: Linked.Archi Architecture Principle Shapes
  message: Business process {$this} is realized by multiple application components ({?app1} and {?app2}). Clarify which component is authoritative.
  select: SELECT $this ?app1 ?app2 WHERE { $this rdf:type/rdfs:subClassOf* am:BehaviorElement . $this rdf:type/rdfs:subClassOf* am:BusinessLayerElement . ?app1 a am:ApplicationComponent ; am:realizes $this . ?app2 a am:ApplicationComponent ; am:realizes $this . FILTER(STR(?app1) < STR(?app2)) }

Business Function Realized by Multiple Application Components
type: NodeShape
target class: BusinessFunction
severity: Warning
definition: Detects business functions realized by more than one application component. Same concern as for processes — multiple realizers indicate potential duplication or unclear automation boundaries.
sparql:
  prefixes: Linked.Archi Architecture Principle Shapes
  message: Business function {$this} is realized by multiple application components ({?app1} and {?app2}).
  select: SELECT $this ?app1 ?app2 WHERE { $this a am:BusinessFunction . ?app1 a am:ApplicationComponent ; am:realizes $this . ?app2 a am:ApplicationComponent ; am:realizes $this . FILTER(STR(?app1) < STR(?app2)) }

Orphaned Element
type: NodeShape
target class: Element
severity: Info
definition: Elements with no relationships to other elements may be orphaned or incompletely modeled. Every element should participate in at least one relationship.
sparql:
  prefixes: Linked.Archi Architecture Principle Shapes
  message: Element {$this} has no relationships to any other element.
  select: SELECT $this WHERE { $this a/rdfs:subClassOf* arch:Element . FILTER NOT EXISTS { { $this ?p ?other . ?other a/rdfs:subClassOf* arch:Element . } UNION { ?other ?p $this . ?other a/rdfs:subClassOf* arch:Element . } } }

Capability Without Goal
type: NodeShape
target class: Capability
severity: Info
definition: Capabilities should be linked to at least one goal or outcome to establish business justification.
sparql:
  prefixes: Linked.Archi Architecture Principle Shapes
  message: Capability {$this} is not linked to any goal or outcome.
  select: SELECT $this WHERE { $this a am:Capability . FILTER NOT EXISTS { { $this am:realizes ?goal . { ?goal a am:Goal . } UNION { ?goal a am:Outcome . } } UNION { ?goal am:serves $this . { ?goal a am:Goal . } UNION { ?goal a am:Outcome . } } UNION { $this am:associatedWith ?goal . { ?goal a am:Goal . } UNION { ?goal a am:Outcome . } } } }

Requirement Without Realization
type: NodeShape
target class: Requirement
severity: Warning
definition: Requirements should be realized by at least one core element. Unrealized requirements indicate gaps in the architecture.
sparql:
  prefixes: Linked.Archi Architecture Principle Shapes
  message: Requirement {$this} is not realized by any architecture element.
  select: SELECT $this WHERE { $this a am:Requirement . FILTER NOT EXISTS { ?element am:realizes $this . FILTER NOT EXISTS { ?element rdf:type/rdfs:subClassOf* am:MotivationElement . } } }