Graph 如何更改Grakn中属性的值

Graph 如何更改Grakn中属性的值,graph,entity,vaticle-typeql,vaticle-typedb,Graph,Entity,Vaticle Typeql,Vaticle Typedb,在Grakn中,我想更改附加到实体的名称属性的值 目前我正在这样做(见下文),这只是删除属性,然后将一个新属性插入到country实体中 match $b isa country, has name "Old Name"; $a isa name; $a val contains "Old Name"; delete $a; insert $b has name "New Name"; 我找不到任何关于如何实际编辑属性值的文档 有什么想法吗?实际上现在,我不确定你能不能。。。如果您进行匹

在Grakn中,我想更改附加到
实体的
名称
属性的值

目前我正在这样做(见下文),这只是删除属性,然后将一个新属性插入到country实体中

match
$b isa country, has name "Old Name";
$a isa name; 
$a val contains "Old Name";
delete $a;

insert 
$b has name "New Name";
我找不到任何关于如何实际编辑属性值的文档


有什么想法吗?

实际上现在,我不确定你能不能。。。如果您进行
匹配
,我没有找到任何解决方案<代码>插入
您将添加一个新的资源,需要删除旧的资源。它不会被更新。不过,我相信它将推出一个新功能;)


不要忘记提交您的
删除
事务。所有对图形的修改都需要提交。

在Grakn中,重要的是要理解,具有相同类型和值的属性在所有者之间共享

这意味着删除属于特定概念的属性也将删除所有其他概念的属性

以下是几个例子:

例1

这里我们插入了两个同名的概念

match $x isa company, has name $n; $n "grakn"; delete $n;
现在,
name
grakn
已被删除,这意味着它不再存在于数据库中,因此您会发现它也已被网站删除

例2

在本例中,我们插入了两个不同的公司,它们共享业务名称“grakn”,以及一个网站名称为“grakn”的网站

在这种情况下,
网站名称
“grakn”不会被删除,但公司的共享名称将被删除

示例3-可能就是您想要的示例

insert $x isa company, has name "grakn";
insert $x isa website, has name "grakn";
与ex1一样,我们添加了一个共享属性的公司和网站(因为属性类型值相同)

这一次我们只想删除公司和属性之间的关联,并且保持网站不变:

match $x isa company, has name "grakn" via $r; delete $r;
这将查找关系,
$r
,即将属性链接到其所有者的幕后实际连接,并将其删除

与示例1相比,在本例中,您会发现网站保留了它的名称,因为属性本身没有被删除,只有一个到它的连接

解决方案

更新属性需要额外的步骤,因为我们需要添加一个新属性来替换我们删除的属性。在执行此操作时,我们需要确保引用的公司(实例)与我们从中删除名称(属性)的公司(实例)相同。否则,您如何重新找到您为了添加新名称而删除其名称的公司

我们可以通过
匹配来实现这一点。。。插入
查询,然后插入
查询:

match $x isa company, has name "grakn";
insert $x has name "new-name";

match $x isa company, has name "grakn" via $r; delete $r;

嗨,这是目前的做法。下一个版本将使用新的
via
语法简化该过程。关于更新不允许的资源的值。资源值是不可变的。我们将在未来简化更改与实体关联的资源的过程。
insert $x isa company, has name "grakn";
insert $x isa website, has name "grakn";
match $x isa company, has name "grakn" via $r; delete $r;
match $x isa company, has name "grakn";
insert $x has name "new-name";

match $x isa company, has name "grakn" via $r; delete $r;