gpt4 book ai didi

model - 如何使用 Grakn/Graql 建模角色层次结构(以及它们之间的关系)?

转载 作者:行者123 更新时间:2023-12-03 19:13:13 24 4
gpt4 key购买 nike

我开始使用 Grakn,但我很难理解角色和关系是如何“关联”的。具体来说,我在建模角色层次结构时遇到了一些困难。

考虑一个有两个场景的虚构例子,首先假设我只有两种类型:人和物体;以及客户角色层次结构和产品角色层次结构之间的采购关系。

所以,我会有类似的东西:

类型:人

  • 角色:客户级别 1
  • 角色:客户级别 2(子客户级别 1)
  • 角色:客户级别 3(子客户级别 2)

    ...

  • 类型:对象
  • 作用:产品级别 1
  • 角色:产品级别2(子产品级别1)
  • 作用:产品级别3(子产品级别2)
    ...

  • 该关系是唯一的(购买),用于关联考虑层次结构中各个级别的角色:
         customer level 1 --- buys --- product level 1
    customer level 2 --- buys --- product level 2
    customer level 3 --- buys --- product level 3

    在第二种情况下,我只有一个角色层次结构,客户一个角色,对象类型只有一个角色:产品。因此,关系将类似于:
         customer level 1 --- buys --- product
    customer level 2 --- buys --- product
    customer level 3 --- buys --- product

    如何使用 Grakn (Graql) 对此类问题进行建模?如果有人能展示如何使用 Graql 对这个(或类似的)问题进行建模,我将不胜感激。

    最佳答案

    要在 Graql 中构建角色层次结构,您需要通过定义子关系来用子角色覆盖父角色。

    我认为对于您的第一种情况,有两种可能的选择,具体取决于您要限制的内容:

    define

    buys sub relation,
    abstract,
    relates product,
    relates customer;

    buys-level-1 sub buys,
    relates product-level-1 as product,
    relates customer-level-1 as customer;

    buys-level-2 sub buys-level-1,
    relates product-level-2 as product-level-1,
    relates customer-level-2 as customer-level-1;

    buys-level-3 sub buys-level-2,
    relates product-level-3 as product-level-2,
    relates customer-level-3 as customer-level-2;

    person sub entity,
    plays customer-level-1,
    plays customer-level-2,
    plays customer-level-3;

    object sub entity,
    plays product-level-1,
    plays product-level-2,
    plays product-level-3;

    在这种情况下,如果您插入了 buys-level-3关系:
    insert 
    $per isa person; $obj isa object;
    $b(product-level-3: $obj, customer-level-3: $per) isa buys-level-3;

    您可以使用 buys-level-2 匹配它, buys-level-1buys .所以这个查询将返回我们刚刚插入的人和关系:
    match $b(customer-level-1: $per) isa buys-level-1; get;

    或者,您可以像这样更改限制:
    buys-level-3 sub buys,
    relates product-level-3 as product,
    relates customer-level-3 as customer;

    在这种情况下, match我们所做的不会返回插入的关系或人。让您想对查询/数据施加的限制指导您选择最佳模型。

    第二种情况很容易看到,我们有:
    define

    buys sub relation,
    abstract,
    relates product,
    relates customer;

    buys-level-1 sub buys,
    relates product,
    relates customer-level-1 as customer;

    buys-level-2 sub buys-level-1,
    relates product,
    relates customer-level-2 as customer-level-1;

    buys-level-3 sub buys-level-2,
    relates product,
    relates customer-level-3 as customer-level-2;

    person sub entity,
    plays customer-level-1,
    plays customer-level-2,
    plays customer-level-3;

    object sub entity,
    plays product;

    在任何这些场景中,您都可以检索所有 buys关系及其角色扮演者与:
    match $b(customer: $per, product: $obj) isa buys; get;

    关于model - 如何使用 Grakn/Graql 建模角色层次结构(以及它们之间的关系)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61484738/

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