relates

The relates keyword is used in TypeQL schema to define a role of a relation type.

Syntax

The syntax of a relates statement includes:

  • Subject — type label of a relation type

  • Predicate — the relates keyword

  • Object — type label of a role

Syntax
<relation-type> relates <role> [as overridden-type];

An optional override can be added at the end.

Behavior

TypeQL statements with the relates keyword can be used only in Define and Undefine queries.

The relates keyword adds a new role to a relation type.

Usage in a schema definition

Unresolved include directive in modules/ROOT/pages/statements/relates.adoc - include::typeql::partial$iam-database-links.adoc[]

Since in Define and Undefine queries you can’t use variables, both subject and object can only be type labels.

For example, to define a new role subject for the permission relation type, use:

Define role query example
define
permission relates subject;

To remove the new role, use:

Undefine query example
undefine
permission relates subject;

Usage with override

By default, a subtype of a relation type inherits all roles that were defined for its supertype. To override an inherited role, use the as keyword.

Let’s see an example, of a schema, where the owned role of the ownership relation type gets overridden by the object role:

Override owned attribute type example
define

object-ownership sub ownership,
    owns ownership-type,
    relates object as owned;

Learn more

Learn more about type statement in TypeQL.

Learn about types in TypeQL.