Skip to main content

Module shape_source

Module shape_source 

Source
Expand description

Where a family’s shape table comes from.

By default it is the table cimgen generated. With the dynamic-shapes feature, a directory of SHACL TTL files can supply it instead, so a new profile version is a data load rather than a recompile.

Resolution order, highest first:

  1. [load_from] — an explicit call, for libraries and tests
  2. CIMOXIDE_SHACL_DIR — for the CLI and the Python bindings. It may list several directories, separated as in PATH; each serves the family whose files it holds (see [family_of_dir]), so …/NCP/SHACL alone still loads only NC, as it always did
  3. the generated table

CGMES classes are compiled structs, so a CGMES table loaded from another release can name classes this build cannot decode; shapes on those simply match nothing.

A directory that is missing or fails to parse falls back to the generated table with a warning. Silently validating against a stale profile because a path had a typo is the worst outcome available here.

This mirrors cimmodel::schema_source closely enough that the two should be read side by side. The one difference that matters: there, the generator and the loader build the table by separate code paths and a test compares them. Here both call cimschema::shacl::resolve, so there is no second implementation to drift — this module only turns the resolved model into the &'static form the interpreter needs.

Functions§

resolve
Resolve the shape table for a family.
resolve_profiles
Resolve the profile index for a bag family.