macula_mri_graph behaviour (macula v0.20.5)
View SourceMRI Graph Behaviour
Defines the interface for MRI relationship (graph) storage. Implementations must provide relationship CRUD and traversal.
Relationships are triples: {Subject, Predicate, Object} Both forward (subject→object) and reverse (object→subject) queries should be efficient.
Built-in predicates include: - Spatial: located_at, contains, adjacent_to - Organizational: member_of, has_member, manages, managed_by, owns, owned_by - Technical: depends_on, depended_on_by, provides, provided_by, connects_to - Data: trained_on, derived_from, source_of, version_of - Taxonomic: instance_of, has_instance, subclass_of, superclass_of
Custom predicates use the format: {custom, Binary} where Binary is the predicate name
Summary
Functions
Get the configured graph adapter module.
Get all relationships from a subject.
Get the classes an instance belongs to.
Create a relationship between two MRIs.
Create a relationship with metadata.
Delete a relationship.
Get a specific relationship with its metadata.
Get direct instances of a class.
Get all instances of a class including subclasses (transitive).
Get the inverse of a predicate (for bidirectional queries).
Check if a predicate is a built-in predicate.
Query what relates to Object via Predicate.
Query what Subject relates to via Predicate.
Set the graph adapter module.
Get direct subclasses of a class.
Get direct superclasses of a class.
Traverse relationships transitively.
Types
-type direction() :: forward | reverse.
-type relationship() :: #{subject := macula_mri:mri(), predicate := predicate(), object := macula_mri:mri(), metadata => map()}.
Callbacks
-callback classes_of(Instance :: macula_mri:mri()) -> [macula_mri:mri()].
-callback create_relationship(Subject :: macula_mri:mri(), Predicate :: predicate(), Object :: macula_mri:mri()) -> ok | {error, term()}.
-callback create_relationship(Subject :: macula_mri:mri(), Predicate :: predicate(), Object :: macula_mri:mri(), Metadata :: map()) -> ok | {error, term()}.
-callback delete_relationship(Subject :: macula_mri:mri(), Predicate :: predicate(), Object :: macula_mri:mri()) -> ok | {error, term()}.
-callback get_relationship(Subject :: macula_mri:mri(), Predicate :: predicate(), Object :: macula_mri:mri()) -> {ok, relationship()} | {error, not_found | term()}.
-callback instances_of(Class :: macula_mri:mri()) -> [macula_mri:mri()].
-callback instances_of_transitive(Class :: macula_mri:mri()) -> [macula_mri:mri()].
-callback subclasses(Class :: macula_mri:mri()) -> [macula_mri:mri()].
-callback superclasses(Class :: macula_mri:mri()) -> [macula_mri:mri()].
-callback traverse_transitive(Start :: macula_mri:mri(), Predicate :: predicate(), Direction :: direction()) -> [macula_mri:mri()].
Functions
-spec adapter() -> module().
Get the configured graph adapter module.
-spec classes_of(macula_mri:mri()) -> [macula_mri:mri()].
Get the classes an instance belongs to.
-spec create_relationship(macula_mri:mri(), predicate(), macula_mri:mri()) -> ok | {error, term()}.
Create a relationship between two MRIs.
-spec create_relationship(macula_mri:mri(), predicate(), macula_mri:mri(), map()) -> ok | {error, term()}.
Create a relationship with metadata.
-spec delete_relationship(macula_mri:mri(), predicate(), macula_mri:mri()) -> ok | {error, term()}.
Delete a relationship.
-spec get_relationship(macula_mri:mri(), predicate(), macula_mri:mri()) -> {ok, relationship()} | {error, not_found | term()}.
Get a specific relationship with its metadata.
-spec instances_of(macula_mri:mri()) -> [macula_mri:mri()].
Get direct instances of a class.
-spec instances_of_transitive(macula_mri:mri()) -> [macula_mri:mri()].
Get all instances of a class including subclasses (transitive).
Get the inverse of a predicate (for bidirectional queries).
Check if a predicate is a built-in predicate.
-spec set_adapter(module()) -> ok.
Set the graph adapter module.
-spec subclasses(macula_mri:mri()) -> [macula_mri:mri()].
Get direct subclasses of a class.
-spec superclasses(macula_mri:mri()) -> [macula_mri:mri()].
Get direct superclasses of a class.
-spec traverse_transitive(macula_mri:mri(), predicate(), direction()) -> [macula_mri:mri()].
Traverse relationships transitively.