格拉克中的规则错误:"rule does not form a valid clause, as it contains a multi-atom head"



我有一个无法提交的规则。这就是规则:

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; 
};

相关内容

最新更新