如何提取 Grakn 中的属性值?
How to extract a value of an attribute in Grakn?
我想使用 GRAKN 对自动驾驶汽车的知识进行建模。在一个示例中,我想得出我必须向自动驾驶汽车建议的速度。我知道汽车的最高速度,我知道道路的速度限制,如果道路上的速度限制不超过汽车的最高速度,我想建议汽车行驶允许的速度限制。 maximum-speed、speed-limit 和 proposed-speed 是汽车或道路的属性。在我的示例中,我想将 'speed-limit' 的值分配为 'proposed-speed' 的值。这在 GRAKN 中可能吗?
以下是我试过的。我知道这是不正确的,但我希望解决方案看起来像这样,但不是分配值而不是整个属性。
define
max-speed sub attribute, datatype double;
proposed-speed sub attribute, datatype double;
speed-limit sub attribute, datatype double;
drives-on sub relation,
relates vehicle-role,
relates type-of-road;
vehicle sub entity,
has max-speed,
has proposed-speed,
plays vehicle-role;
car sub vehicle;
road-type sub entity,
has speed-limit,
plays type-of-road;
highway sub road-type;
proposed-speed-by-road-type sub rule,
when {
$x isa vehicle, has max-speed $s;
$y isa road-type, has speed-limit $z;
($x,$y) isa drives-on;
$z <= $s;
}, then {
$x has proposed-speed $z;
};
proposed-speed-by-car-max sub rule,
when {
$x isa vehicle, has max-speed $s;
$y isa road-type, has speed-limit $z;
($x,$y) isa drives-on;
$z > $s;
}, then {
$x has proposed-speed $s;
};
insert
$owncar isa car, has max-speed 190;
$highway isa highway, has speed-limit 130;
(vehicle-role: $owncar, type-of-road: $highway) isa drives-on;`
现在,如果我查询以下内容:match $x id V82016, has proposed-speed $z; get;
我得到:
grakn.core.server.exception.TransactionException-The type [car] is not allowed to have an attribute of type [speed-limit]. Please check server logs for the stack trace.
我明白了,因为这是不正确的。所以我想要的是提取 'speed-limit' 的值并将其分配给建议速度。这可能吗?
这是可能的。你的例子是正确的。目前唯一的条件是各自的属性数据类型相同,类型允许有。在引擎盖下创建了一个新属性,其中包含复制的值。我们计划扩展用例以涵盖兼容的数据类型对。
它在当前主分支上按预期工作。一般来说,它也应该适用于 1.5.7,但是 1.5.7 在计算规则等式方面存在问题,这可能会导致不正确的结果。 1.5.8版本应该没有这个问题。
希望对您有所帮助!
我想使用 GRAKN 对自动驾驶汽车的知识进行建模。在一个示例中,我想得出我必须向自动驾驶汽车建议的速度。我知道汽车的最高速度,我知道道路的速度限制,如果道路上的速度限制不超过汽车的最高速度,我想建议汽车行驶允许的速度限制。 maximum-speed、speed-limit 和 proposed-speed 是汽车或道路的属性。在我的示例中,我想将 'speed-limit' 的值分配为 'proposed-speed' 的值。这在 GRAKN 中可能吗?
以下是我试过的。我知道这是不正确的,但我希望解决方案看起来像这样,但不是分配值而不是整个属性。
define
max-speed sub attribute, datatype double;
proposed-speed sub attribute, datatype double;
speed-limit sub attribute, datatype double;
drives-on sub relation,
relates vehicle-role,
relates type-of-road;
vehicle sub entity,
has max-speed,
has proposed-speed,
plays vehicle-role;
car sub vehicle;
road-type sub entity,
has speed-limit,
plays type-of-road;
highway sub road-type;
proposed-speed-by-road-type sub rule,
when {
$x isa vehicle, has max-speed $s;
$y isa road-type, has speed-limit $z;
($x,$y) isa drives-on;
$z <= $s;
}, then {
$x has proposed-speed $z;
};
proposed-speed-by-car-max sub rule,
when {
$x isa vehicle, has max-speed $s;
$y isa road-type, has speed-limit $z;
($x,$y) isa drives-on;
$z > $s;
}, then {
$x has proposed-speed $s;
};
insert
$owncar isa car, has max-speed 190;
$highway isa highway, has speed-limit 130;
(vehicle-role: $owncar, type-of-road: $highway) isa drives-on;`
现在,如果我查询以下内容:match $x id V82016, has proposed-speed $z; get;
我得到:
grakn.core.server.exception.TransactionException-The type [car] is not allowed to have an attribute of type [speed-limit]. Please check server logs for the stack trace.
我明白了,因为这是不正确的。所以我想要的是提取 'speed-limit' 的值并将其分配给建议速度。这可能吗?
这是可能的。你的例子是正确的。目前唯一的条件是各自的属性数据类型相同,类型允许有。在引擎盖下创建了一个新属性,其中包含复制的值。我们计划扩展用例以涵盖兼容的数据类型对。
它在当前主分支上按预期工作。一般来说,它也应该适用于 1.5.7,但是 1.5.7 在计算规则等式方面存在问题,这可能会导致不正确的结果。 1.5.8版本应该没有这个问题。
希望对您有所帮助!