Linked.Archi ArchiMate 3.2 Viewpoint Conformance Shapes
type: Ontology
imports: core#
imports: core-shapes#
license: http://creativecommons.org/licenses/by/4.0/
preferred namespace prefix: amvpsh
description: SHACL shapes for validating that architecture Views conform to their declared Viewpoints. These shapes enforce: 1. Element conformance — elements exposed in a View must be instances of types listed in the viewpoint's arch:includesConcept. 2. View type conformance — a View's rdf:type must match one of the viewpoint's arch:viewType values (Diagram, Catalog, Matrix). 3. Viewpoint declaration — every View must declare which viewpoint it conforms to via arch:viewConformsToViewpoint. These shapes are data-driven: they read the viewpoint definitions from the loaded graph (arch:includesConcept, arch:viewType) rather than hardcoding per-viewpoint rules. This means they work for any viewpoint — ArchiMate example viewpoints, custom viewpoints, or viewpoints from other frameworks — as long as the viewpoint data is loaded. Shapes use sh:severity sh:Warning by default. Organizations may promote specific shapes to sh:Violation based on governance policies. Usage: .scripts/validate.sh --shacl archimate-viewpoints Or load manually: core-shapes.ttl + archimate3.2-viewpoint-shapes.ttl + archimate3.2-viewpoints.ttl + your-model-data.ttl
created: 2026-04-16
modified: 2026-04-16
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#

ViewMustDeclareViewpointShape
type: NodeShape
target class: View
severity: Warning
property:
  path: viewConformsToViewpoint
  min count: 1
  max count: 1
  class: Viewpoint
  message: Every View must declare exactly one arch:viewConformsToViewpoint.

ViewTypeConformanceShape
type: NodeShape
target class: View
severity: Warning
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Viewpoint Conformance Shapes
  message: View type {?viewType} does not match any arch:viewType declared by viewpoint {?vp}.
  select: SELECT $this ?vp ?viewType WHERE { $this arch:viewConformsToViewpoint ?vp . $this rdf:type ?viewType . ?viewType rdfs:subClassOf* arch:View . FILTER(?viewType != arch:View) FILTER NOT EXISTS { ?vp arch:viewType ?allowedType . ?viewType rdfs:subClassOf* ?allowedType . } FILTER EXISTS { ?vp arch:viewType ?anyType . } }

ElementConformanceShape
type: NodeShape
target class: View
severity: Warning
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Viewpoint Conformance Shapes
  message: Element {?element} of type {?elemType} is not allowed in viewpoint {?vp} (not in arch:includesConcept).
  select: SELECT $this ?vp ?element ?elemType WHERE { $this arch:viewConformsToViewpoint ?vp . ?element arch:exposedInView $this . ?element rdf:type ?elemType . ?elemType rdfs:subClassOf* arch:Element . FILTER(?elemType != arch:Element) # The viewpoint must have at least one includesConcept FILTER EXISTS { ?vp arch:includesConcept ?anyConcept . } # The element's type (or any of its superclasses) must match FILTER NOT EXISTS { ?element rdf:type/rdfs:subClassOf* ?allowedType . ?vp arch:includesConcept ?allowedType . } }

RelationshipEndpointConformanceShape
type: NodeShape
target class: View
severity: Info
sparql:
  prefixes: Linked.Archi ArchiMate 3.2 Viewpoint Conformance Shapes
  message: Relationship {?rel} in view has endpoint {?endpoint} of type {?endpointType} not in viewpoint {?vp} palette.
  select: SELECT $this ?vp ?rel ?endpoint ?endpointType WHERE { $this arch:viewConformsToViewpoint ?vp . ?rel arch:exposedInView $this . ?rel a/rdfs:subClassOf* arch:QualifiedRelationship . # Check both source and target { ?rel arch:source ?endpoint . } UNION { ?rel arch:target ?endpoint . } ?endpoint rdf:type ?endpointType . ?endpointType rdfs:subClassOf* arch:Element . FILTER(?endpointType != arch:Element) FILTER EXISTS { ?vp arch:includesConcept ?anyConcept . } FILTER NOT EXISTS { ?endpoint rdf:type/rdfs:subClassOf* ?allowedType . ?vp arch:includesConcept ?allowedType . } }

ViewpointCompletenessShape
type: NodeShape
target class: Viewpoint
severity: Info
property:
  path: includesConcept
  min count: 1
  message: Viewpoint should declare at least one arch:includesConcept.
property:
  path: viewpointFramesConcern
  min count: 1
  message: Viewpoint should declare at least one arch:viewpointFramesConcern.
property:
  path: viewType
  min count: 1
  message: Viewpoint should declare at least one arch:viewType.