Linked.Archi

Linked.Archi Architecture Principle Shapes

SHACL Shapes

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

v0.1.0 draft ampsh: Linked.Archi Modified: 2026-04-14 License

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

Contents

ApplicationComponentOwnershipShape — target: ApplicationComponent

SPARQL constraint: Application component {$this} has no assigned business actor or role. Assign ownership. Warning
            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 .
                    }
                }
            }
        

ApplicationComponentWithoutServiceShape — target: ApplicationComponent

SPARQL constraint: Application component {$this} does not expose any application service. Info
            SELECT $this
            WHERE {
                $this a am:ApplicationComponent .
                FILTER NOT EXISTS {
                    $this am:realizes ?svc .
                    ?svc a am:ApplicationService .
                }
            }
        

ApplicationServiceWithoutRealizationShape — target: ApplicationService

SPARQL constraint: Application service {$this} is not realized by any application component. Warning
            SELECT $this
            WHERE {
                $this a am:ApplicationService .
                FILTER NOT EXISTS {
                    ?app am:realizes $this .
                    ?app a am:ApplicationComponent .
                }
            }
        

BusinessBehaviorRedundantApplicationRealizationShape — target: BusinessProcess

SPARQL constraint: Business process {$this} is realized by multiple application components ({?app1} and {?app2}). Clarify which component is authoritative. Warning
            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))
            }
        

BusinessFunctionRedundantApplicationRealizationShape — target: BusinessFunction

SPARQL constraint: Business function {$this} is realized by multiple application components ({?app1} and {?app2}). Warning
            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))
            }
        

BusinessProcessDirectTechnologyDependencyShape — target: BusinessProcess

SPARQL constraint: Business process {$this} has a direct serving/realization dependency on technology element {?tech}. Introduce an application layer mediator. Warning
            SELECT $this ?tech
            WHERE {
                $this a am:BusinessProcess .
                {
                    ?tech am:serves $this .
                } UNION {
                    ?tech am:realizes $this .
                }
                ?tech rdf:type/rdfs:subClassOf* am:TechnologyLayerElement .
            }
        

BusinessProcessOwnershipShape — target: BusinessProcess

SPARQL constraint: Business process {$this} has no assigned business role or actor. Warning
            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 .
                }
            }
        

BusinessServiceWithoutRealizationShape — target: BusinessService

SPARQL constraint: Business service {$this} is not realized by any business process or function. Warning
            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 .
                }
            }
        

CapabilityWithoutBehaviorRealizationShape — target: Capability

SPARQL constraint: Capability {$this} is not realized by any business process, function, or interaction. Warning
            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 .
                }
            }
        

CapabilityWithoutGoalShape — target: Capability

SPARQL constraint: Capability {$this} is not linked to any goal or outcome. Info
            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 . }
                    }
                }
            }
        

CriticalNodeSingleDeploymentShape — target: ApplicationComponent

SPARQL constraint: Application component {$this} is deployed on only one node ({?node}). Consider multi-node deployment for resilience. Info
            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)
                }
            }
        

DataObjectStewardshipShape — target: DataObject

SPARQL constraint: Data object {$this} has no application component accessing or realizing it. Assign a system of record. Warning
            SELECT $this
            WHERE {
                $this a am:DataObject .
                FILTER NOT EXISTS {
                    ?app a am:ApplicationComponent .
                    {
                        ?app am:accesses $this .
                    } UNION {
                        ?app am:realizes $this .
                    }
                }
            }
        

DirectComponentToComponentServingShape — target: ApplicationComponent

SPARQL constraint: Application component {$this} directly serves another application component {?target} without an intermediary service. Warning
            SELECT $this ?target
            WHERE {
                $this a am:ApplicationComponent .
                $this am:serves ?target .
                ?target a am:ApplicationComponent .
            }
        

ExcessiveTechnologyDiversityPerServiceShape — target: ApplicationService

SPARQL constraint: Application service {$this} depends on {?nodeCount} distinct technology nodes. Consider standardizing. Info
            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)
        

OrphanedElementShape — target: Element

SPARQL constraint: Element {$this} has no relationships to any other element. Info
            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 . }
                }
            }
        

RedundantApplicationRealizingServiceShape — target: ApplicationService

SPARQL constraint: Application service {$this} is realized by multiple application components ({?app1} and {?app2}). Warning
            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))
            }
        

RedundantApplicationServingShape — target: BusinessProcess

SPARQL constraint: Business process {$this} is served by multiple application components ({?app1} and {?app2}), indicating potential redundancy. Warning
            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))
            }
        

RedundantFunctionRealizationShape — target: BusinessFunction

SPARQL constraint: Business function {$this} is served by multiple application components ({?app1} and {?app2}). Warning
            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))
            }
        

RequirementWithoutRealizationShape — target: Requirement

SPARQL constraint: Requirement {$this} is not realized by any architecture element. Warning
            SELECT $this
            WHERE {
                $this a am:Requirement .
                FILTER NOT EXISTS {
                    ?element am:realizes $this .
                    FILTER NOT EXISTS {
                        ?element rdf:type/rdfs:subClassOf* am:MotivationElement .
                    }
                }
            }
        

SingleBusinessObjectOwnerShape — target: BusinessObject

SPARQL constraint: Business object {$this} is accessed by multiple application components ({?app1} and {?app2}). Clarify ownership. Warning
            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))
            }
        

SingleDataWriterShape — target: DataObject

SPARQL constraint: Data object {$this} is written by multiple application components ({?app1} and {?app2}). Designate a single authoritative source. Warning
            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))
            }
        

SinglePointOfFailureShape — target: BusinessService

SPARQL constraint: Business service {$this} is realized by only one application component ({?app}). Consider redundancy for critical services. Info
            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)
                }
            }
        

TechnologyServingBusinessDirectlyShape — target: Node

SPARQL constraint: Technology node {$this} directly serves business element {?biz}. Route through the application layer. Warning
            SELECT $this ?biz
            WHERE {
                $this a am:Node .
                $this am:serves ?biz .
                ?biz rdf:type/rdfs:subClassOf* am:BusinessLayerElement .
            }