如何在Grakn中提取属性值?

时间:2019-07-04 13:54:13

标签: grakn graql

我想使用GRAKN对有关自动驾驶汽车的知识进行建模。在一个示例中,我想得出必须向自动驾驶汽车建议的速度。我知道汽车的最大速度,我知道道路的速度限制,如果道路上的速度限制没有超过汽车的最大速度,我想建议汽车驾驶允许的速度限制。最大速度,限速和建议速度是汽车或道路的属性。在我的示例中,我想将“速度限制”的值分配为“建议速度”的值。在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.

我明白了,因为这是不正确的。因此,我想提取“速度限制”的值并将其分配给建议的速度。这可能吗?

1 个答案:

答案 0 :(得分:0)

这是可能的。您的例子是正确的。目前唯一的条件是各个属性数据类型相同,并且允许这些类型具有它们。在幕后,将创建一个新属性,并复制值。我们计划将用例扩展到涵盖兼容的数据类型对。

它在当前的master分支上按预期工作。通常,它也应与1.5.7一起使用,但是1.5.7在计算规则等式方面存在问题,可能会导致错误的结果。该问题在1.5.8版本中应该没有。

希望有帮助!