Semantic identity used by Ash, SQL uniqueness, and rr:template admission.
@type t() :: %AshR2RML.SemanticIR.Identity{ keys: [atom()], name: atom(), primary?: boolean(), template: String.t() | nil }