gpt4 book ai didi

vaticle-typedb - 如何在graql中定义传递关系

转载 作者:行者123 更新时间:2023-12-04 19:25:23 26 4
gpt4 key购买 nike

我的模型由有项目的组织组成,而项目有桶。存储桶可以共享给同一组织中的其他项目。我定义了一个项目共享规则,这意味着两个项目在第一次与另一个共享存储桶时处于这种关系中。

    define

organization sub entity,
plays organizationRole,
key identifier;

project sub entity,
plays projectRole,
plays projectSourceRole,
plays projectTargetRole,
plays transitiveProjectSourceRole,
plays transitiveProjectTargetRole,
key identifier;

bucket sub entity,
plays bucketRole,
plays sharedBucketSourceRole,
plays sharedBucketTargetRole,
key identifier;


organizationToProject sub relation,
relates organizationRole,
relates projectRole;

projectToBucket sub relation,
relates projectRole,
relates bucketRole;

sharedBucket sub relation,
relates sharedBucketSourceRole,
relates sharedBucketTargetRole;

projectSharing sub relation,
relates projectSourceRole,
relates projectTargetRole;

project-sharing sub rule,
when {
(projectRole: $ps, bucketRole: $bs) isa projectToBucket;
(projectRole: $pt, bucketRole: $bt) isa projectToBucket;
(sharedBucketSourceRole: $bs, sharedBucketTargetRole: $bt) isa sharedBucket;
$ps != $pt;
}, then {
(projectSourceRole: $ps, projectTargetRole: $pt) isa projectSharing;
};

它工作正常。 (见 enter image description here)

但是我想为传递关系定义一个规则(根据我在文档中找到的一些祖先示例),所以我添加到架构中:
    transitiveProjectSharing sub relation,
relates transitiveProjectSourceRole,
relates transitiveProjectTargetRole;

transitive-project-sharing sub rule,
when {
(projectSourceRole: $a, projectTargetRole: $b) isa projectSharing;
(projectSourceRole: $b, projectTargetRole: $c) isa projectSharing;
}, then {
(transitiveProjectSourceRole: $a, transitiveProjectTargetRole: $c) isa transitiveProjectSharing;
};

它什么也没找到(但有几个可传递的,见 enter image description here )

有人会建议错误在哪里吗?

最佳答案

我从 Grakn.ai Slack 得到了一个提示。传递性应该在 projectSharing 上定义角色本身,附加 transitiveProjectSharing没有必要。所以定义应该是:

transitive-project-sharing sub rule,
when {
(projectSourceRole: $a, projectTargetRole: $b) isa projectSharing;
(projectSourceRole: $b, projectTargetRole: $c) isa projectSharing;
}, then {
(projectSourceRole: $a, projectTargetRole: $c) isa projectSharing;
};


并且查询运行良好:
enter image description here

关于vaticle-typedb - 如何在graql中定义传递关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58802094/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com