如何提取 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版本应该没有这个问题。

希望对您有所帮助!