我有一个无法提交的规则。这就是规则:
when {
$t isa person;
$car isa car;
$t2 isa person;
$r ($t, $car) isa ownership;
$r2 ($t2, $car) isa ownership;
}, then {
$car has age 23;
($car, $t2) isa ownership;
};
这是我在commit
这个之后得到的错误:
INVALID_ARGUMENT: InvalidKBException-A structural validation error has occurred. Please correct the [`1`] errors found.
The rule [rule-32] does not form a valid clause, as it contains a multi-atom head
. Please check server logs for the stack trace.
All uncommitted data is cleared
规则只能推断一个事实:
在Graql中,规则的"when"部分需要是一个连接词模式,而"then"应该是原子的-每个规则都可以派生单事实
文档
@Jon T所说的是正确的,因此针对您的问题的解决方案是将规则拆分为两个规则。
两个规则都有一个相同的when
子句,其中then
子句只有一个结论:
when {
$t isa person;
$car isa car;
$t2 isa person;
$r ($t, $car) isa ownership;
$r2 ($t2, $car) isa ownership;
}, then {
$car has age 23;
};
when {
$t isa person;
$car isa car;
$t2 isa person;
$r ($t, $car) isa ownership;
$r2 ($t2, $car) isa ownership;
}, then {
($car, $t2) isa ownership;
};