Linked.Archi

Linked.Archi ArchiMate 4.0 Architecture Principle Shapes

SHACL Shapes

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

v4.0 draft am4psh: Kalin Maldzhanski Linked.Archi Modified: 2026-04-29 License

SHACL shapes encoding common enterprise architecture principles as executable constraints. Adapted from 3.2 principle shapes for ArchiMate 4.0 domain-based structure.

Contents

ApplicationComponentOwnershipShape — target: ApplicationComponent

SPARQL constraint: Application component {$this} has no assigned business actor or role. Assign ownership. Warning
            SELECT $this
            WHERE {
                $this a am4:ApplicationComponent .
                FILTER NOT EXISTS {
                    {
                        ?actor am4:assignedTo $this .
                        { ?actor a am4:BusinessActor . } UNION { ?actor a am4:Role . }
                    } UNION {
                        $this am4:assignedTo ?actor .
                        { ?actor a am4:BusinessActor . } UNION { ?actor a am4:Role . }
                    }
                }
            }
        

ApplicationComponentWithoutServiceShape — target: ApplicationComponent

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

ApplicationServiceWithoutRealizationShape — target: Service

SPARQL constraint: Application-domain service {$this} is not realized by any application component. Warning
            SELECT $this
            WHERE {
                $this a am4:Service .
                $this rdf:type/rdfs:subClassOf* am4:ApplicationDomainElement .
                FILTER NOT EXISTS {
                    ?app am4:realizes $this .
                    ?app a am4:ApplicationComponent .
                }
            }
        

BusinessBehaviorRedundantApplicationRealizationShape — target: Process

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 a am4:Process .
                $this rdf:type/rdfs:subClassOf* am4:BusinessDomainElement .
                ?app1 a am4:ApplicationComponent ;
                      am4:realizes $this .
                ?app2 a am4:ApplicationComponent ;
                      am4:realizes $this .
                FILTER(STR(?app1) < STR(?app2))
            }
        

BusinessFunctionRedundantApplicationRealizationShape — target: Function

SPARQL constraint: Business function {$this} is realized by multiple application components ({?app1} and {?app2}). Warning
            SELECT $this ?app1 ?app2
            WHERE {
                $this a am4:Function .
                $this rdf:type/rdfs:subClassOf* am4:BusinessDomainElement .
                ?app1 a am4:ApplicationComponent ;
                      am4:realizes $this .
                ?app2 a am4:ApplicationComponent ;
                      am4:realizes $this .
                FILTER(STR(?app1) < STR(?app2))
            }
        

BusinessProcessDirectTechnologyDependencyShape — target: Process

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

BusinessProcessOwnershipShape — target: Process

SPARQL constraint: Process {$this} has no assigned business role or actor. Warning
            SELECT $this
            WHERE {
                $this a am4:Process .
                $this rdf:type/rdfs:subClassOf* am4:BusinessDomainElement .
                FILTER NOT EXISTS {
                    ?role am4:assignedTo $this .
                    { ?role a am4:BusinessActor . } UNION { ?role a am4:Role . }
                }
            }
        

BusinessServiceWithoutRealizationShape — target: Service

SPARQL constraint: Business-domain service {$this} is not realized by any business process or function. Warning
            SELECT $this
            WHERE {
                $this a am4:Service .
                $this rdf:type/rdfs:subClassOf* am4:BusinessDomainElement .
                FILTER NOT EXISTS {
                    ?behavior am4:realizes $this .
                    ?behavior rdf:type/rdfs:subClassOf* am4:BehaviorElement .
                    ?behavior rdf:type/rdfs:subClassOf* am4:BusinessDomainElement .
                }
            }
        

CapabilityWithoutBehaviorRealizationShape — target: Capability

SPARQL constraint: Capability {$this} is not realized by any business process, function, or interaction. Warning
            SELECT $this
            WHERE {
                $this a am4:Capability .
                FILTER NOT EXISTS {
                    ?behavior am4:realizes $this .
                    ?behavior rdf:type/rdfs:subClassOf* am4:BehaviorElement .
                    ?behavior rdf:type/rdfs:subClassOf* am4:BusinessDomainElement .
                }
            }
        

CapabilityWithoutGoalShape — target: Capability

SPARQL constraint: Capability {$this} is not linked to any goal or outcome. Info
            SELECT $this
            WHERE {
                $this a am4:Capability .
                FILTER NOT EXISTS {
                    {
                        $this am4:realizes ?goal .
                        { ?goal a am4:Goal . } UNION { ?goal a am4:Outcome . }
                    } UNION {
                        ?goal am4:serves $this .
                        { ?goal a am4:Goal . } UNION { ?goal a am4:Outcome . }
                    } UNION {
                        $this am4:associatedWith ?goal .
                        { ?goal a am4:Goal . } UNION { ?goal a am4: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 am4:ApplicationComponent .
                ?node am4:assignedTo $this .
                ?node a am4:Node .
                FILTER NOT EXISTS {
                    ?node2 am4:assignedTo $this .
                    ?node2 a am4: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 am4:DataObject .
                FILTER NOT EXISTS {
                    ?app a am4:ApplicationComponent .
                    {
                        ?app am4:accesses $this .
                    } UNION {
                        ?app am4: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 am4:ApplicationComponent .
                $this am4:serves ?target .
                ?target a am4:ApplicationComponent .
            }
        

ExcessiveTechnologyDiversityPerServiceShape — target: Service

SPARQL constraint: Service {$this} depends on {?nodeCount} distinct technology nodes. Consider standardizing. Info
            SELECT $this (COUNT(DISTINCT ?node) AS ?nodeCount)
            WHERE {
                $this a am4:Service .
                ?app am4:realizes $this .
                ?app a am4:ApplicationComponent .
                ?node am4:assignedTo ?app .
                ?node rdf:type/rdfs:subClassOf* am4:TechnologyDomainElement .
            }
            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 . }
                }
            }
        

RedundancyAvoidanceShape — target: Service

SPARQL constraint: Multiple components realize the same service — potential redundancy. Warning
            SELECT $this (COUNT(DISTINCT ?comp) AS ?count) WHERE {
                ?comp am4:realizes $this .
                ?comp rdf:type/rdfs:subClassOf* am4:InternalActiveStructureElement .
            }
            GROUP BY $this
            HAVING (COUNT(DISTINCT ?comp) > 1)
        

RedundantApplicationRealizingServiceShape — target: Service

SPARQL constraint: Service {$this} is realized by multiple application components ({?app1} and {?app2}). Warning
            SELECT $this ?app1 ?app2
            WHERE {
                $this a am4:Service .
                ?app1 a am4:ApplicationComponent ;
                      am4:realizes $this .
                ?app2 a am4:ApplicationComponent ;
                      am4:realizes $this .
                FILTER(STR(?app1) < STR(?app2))
            }
        

RedundantFunctionRealizationShape — target: Function

SPARQL constraint: Function {$this} is served by multiple application components ({?app1} and {?app2}). Warning
            SELECT $this ?app1 ?app2
            WHERE {
                $this a am4:Function .
                $this rdf:type/rdfs:subClassOf* am4:BusinessDomainElement .
                ?app1 a am4:ApplicationComponent ;
                      am4:serves $this .
                ?app2 a am4:ApplicationComponent ;
                      am4: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 am4:Requirement .
                FILTER NOT EXISTS {
                    ?element am4:realizes $this .
                    FILTER NOT EXISTS {
                        ?element rdf:type/rdfs:subClassOf* am4: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 am4:BusinessObject .
                ?app1 a am4:ApplicationComponent ;
                      am4:accesses $this .
                ?app2 a am4:ApplicationComponent ;
                      am4: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 am4:DataObject .
                ?app1 a am4:ApplicationComponent ;
                      am4:accesses $this .
                ?app2 a am4:ApplicationComponent ;
                      am4:accesses $this .
                FILTER(STR(?app1) < STR(?app2))
            }
        

SinglePointOfFailureShape — target: Service

SPARQL constraint: Service {$this} is realized by only one application component ({?app}). Consider redundancy for critical services. Info
            SELECT $this ?app
            WHERE {
                $this a am4:Service .
                $this rdf:type/rdfs:subClassOf* am4:BusinessDomainElement .
                ?app am4:realizes $this .
                ?app a am4:ApplicationComponent .
                FILTER NOT EXISTS {
                    ?app2 am4:realizes $this .
                    ?app2 a am4:ApplicationComponent .
                    FILTER(?app2 != ?app)
                }
            }
        

TechnologyServingBusinessDirectlyShape — target: Node

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