has statement
The statement <OWNER VAR> has <ATTRIBUTE VAR> is used to identify the <OWNER VAR> as owning the <ATTRIBUTE VAR>.
Schema for the following examples
#!test[schema]
define
attribute name, value string;
entity person, owns name;
Inserting attribute ownership
The has keyword can be used to attach an attribute to an object.
#!test[write]
#{{
match $person isa person; $name isa name;
#}}
insert $person has $name;
An attribute can be created in-place by providing its type and value.
#!test[write]
#{{
match $person isa person;
#}}
insert $person has name "Alice";
Deleting attribute ownership
The has keyword is used to remove an attribute from its owner.
#!test[write]
#{{
match $person isa person, has name $name;
#}}
delete has $name of $person;
Matching attributes
The has keyword can be used to match attributes of an object.
#!test[read]
match $person has $name;
The attribute type may be provided.
#!test[read]
match $person has name $name;
The attribute can be matched by attribute type and value instead of binding it to a variable.
#!test[read]
match $person has name "Alice";
Alternatively, a comparison can be used to constrain the attribute value.
#!test[read]
match $person has name < "Bob";