Linked.Archi

Linked.Archi ArchiMate 3.2 Element & Metamodel Shapes

SHACL Shapes

https://meta.linked.archi/archimate3/element-shapes#

v3.2 draft amelsh: Kalin Maldzhanski Linked.Archi Modified: 2026-11-06 License

SHACL shapes for validating ArchiMate 3.2 element instances and the metamodel patterns the relationship tables cannot express: element names, self-loops and cycles of composition and aggregation, a part in one whole only, the direction of serving between layers (a warning), a gap associated with plateaus, attribute values, junctions joining relationships of one type, and deep specialization chains. Which element types a relationship may connect is checked by archimate3.2-relationship-shapes.ttl, generated from the specification's relationship tables (Appendix B), and is not repeated here.

Contents

AccessTypeShape — target: Access

PropertyConstraintValueSeverityMessage
accessType maxCount 0 Violation

ArchiMateElementShape — target: BehaviorElement

PropertyConstraintValueSeverityMessage
prefLabel datatype langString Violation
prefLabel datatype langString Violation
prefLabel datatype langString Violation
prefLabel datatype langString Violation
prefLabel datatype langString Violation
prefLabel datatype langString Violation
prefLabel datatype langString Violation
prefLabel minCount 1 Violation
prefLabel minCount 1 Violation
prefLabel minCount 1 Violation
prefLabel minCount 1 Violation
prefLabel minCount 1 Violation
prefLabel minCount 1 Violation
prefLabel minCount 1 Violation

CompositionPartUniquenessShape

SPARQL constraint: A composed part can only belong to one whole (composition implies exclusive ownership). Violation
            SELECT $this WHERE {
                ?whole1 am:composedOf $this .
                ?whole2 am:composedOf $this .
                FILTER(?whole1 != ?whole2)
            }
        

DeepSpecializationChainShape

SPARQL constraint: Element has a deep specialization chain (5+ levels) — consider if this complexity is necessary. Info
            SELECT $this WHERE {
                $this am:specializes+ ?t1 .
                ?t1 am:specializes+ ?t2 .
                ?t2 am:specializes+ ?t3 .
                ?t3 am:specializes+ ?t4 .
            }
        

GapPlateauAssociationShape — target: Gap

SPARQL constraint: Gap should be associated with at least one Plateau — a gap represents a difference between two plateaus. Warning
            SELECT $this WHERE {
                FILTER NOT EXISTS {
                    {
                        $this am:associatedWith ?plateau .
                        ?plateau a am:Plateau .
                    } UNION {
                        ?plateau am:associatedWith $this .
                        ?plateau a am:Plateau .
                    }
                }
            }
        

InfluenceStrengthShape — target: Influence

PropertyConstraintValueSeverityMessage
influenceStrength datatype string Violation
influenceStrength in 19957834bcaaf2bb Violation
influenceStrength maxCount 1 Violation

JunctionTypeShape — target: Junction_And

SPARQL constraint: All relationships connected to an AndJunction must be of the same type. Violation
            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)
            }
        

NoCircularAggregationShape

SPARQL constraint: Circular aggregation is not allowed. Violation
            SELECT $this WHERE { $this am:aggregates+ $this . }
        

NoCircularCompositionShape

SPARQL constraint: Circular composition is not allowed. Violation
            SELECT $this WHERE { $this am:composedOf+ $this . }
        

NoSelfAggregationShape

SPARQL constraint: An element cannot aggregate itself. Violation
            SELECT $this WHERE { $this am:aggregates $this . }
        

NoSelfCompositionShape

SPARQL constraint: An element cannot compose itself. Violation
            SELECT $this WHERE { $this am:composedOf $this . }
        

NoSelfSpecializationShape

SPARQL constraint: An element cannot specialize itself. Violation
            SELECT $this WHERE { $this am:specializes $this . }
        

OrJunctionTypeShape — target: Junction_Or

SPARQL constraint: All relationships connected to an OrJunction must be of the same type. Violation
            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)
            }
        

ServingLayerDirectionShape

SPARQL constraint: Serving relationships should flow upward from lower to higher layers (Physical → Technology → Application → Business). Warning
            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 .
                }
            }