如何在Grakn中更改属性的值

时间:2017-10-25 11:54:53

标签: graph entity graql grakn

在Grakn中,我想更改附加到name的{​​{1}}属性的值。

目前我这样做(见下文),这只是删除属性,然后向国家实体插入一个新属性。

entity

我无法找到有关如何实际编辑属性值的任何文档。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

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

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

以下是一些示例:

示例1

insert $x isa company, has name "grakn";
insert $x isa website, has name "grakn";

在这里,我们插入了两个共享名称的概念。

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

现在name grakn已被删除,这意味着它不再存在于数据库中,因此,您会发现它也已被网站删除。

示例2

insert $x isa company, has business-name "grakn", has company-number 01234;
insert $x isa company, has business-name "grakn", has company-number 56789;
insert $x isa website, has website-name "grakn";

在这种情况下,我们插入了两个不同的公司,它们的公司名称均为“ grakn”,一个网站的网站名为“ grakn”。

match $x isa company, has business-name $n, has company-number 01234; $n "grakn"; delete $n;

在这种情况下,不会删除website-name“ grann”,但是公司的共享名称将被删除。

示例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... insert查询,然后再进行insert查询:

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

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

答案 1 :(得分:1)

实际上现在,我不确定你能...我没有找到任何解决方案,如果你做了<script type="text/javascript"> function downloadReport() { var x = upload(); if(x){ download(); } } function upload(){ alert("Waseem"); if(response){ return true; } return false; } function download(){ alert("Xax"); } </script> ... match你将添加一个新的资源,你需要删除旧的。它不会更新。我确信它会出现一个新功能;)

不要忘记insert您的commit交易。需要提交对图表的所有修改。