我正在查看一些文档here。
我很好奇,为什么Grakn选择使用名词语义而不是动词语义来表示关系?在我涵盖的大多数其他图形工作和研究中,通常认为两个实体(名词)通过动词链接是有意义的。 person worked at company
。确实,对于我正在处理的一些实体,将关系作为名词进行推理有点困难,例如,如果artist remixed track
。
我倾向于将动词用作关系,但我想知道这是否不是我应该在Grakn设置中考虑的方式。如果我决定使用动词语义,最终会遇到困难吗?
答案 0 :(得分:3)
通常,图形数据库使用有向边表示二进制关系。在这种情况下,使用动词来描述关系是有意义的,因为动词通常指示主语和宾语之间的定向动作。
Grakn是一个知识图,其工作原理有所不同。这是因为Grakn中的关系充当超边缘。这意味着在一个关系中可以有两个以上的参与者(称为角色玩家)。这对于灵活的建模非常有用,但它可能会破坏动词命名约定。
要从您的示例而不是artist remixed track
开始,我们可以(在这种情况下非常方便)使用名词remix
作为关系。对域模型进行猜测后,艺术家会重新混合曲目,因此他们创建了新曲目。这是在grakn中建立三元(三向)关系的绝好机会。的模型如下:
define
remix sub relation,
relates original-track,
relates remixed-track,
relates remixing-artist;
track sub entity,
plays original-track,
plays remixed-track;
artist sub entity,
plays remixing-artist;
一旦在Grakn中定义了上面的模式,我们可以添加一个remix实例,它连接两个新轨道和一个新艺术家,如下所示:
insert
$o isa track, has name "Brimful of Asha";
$rt isa track, has name "Brimful of Asha (Norman Cook Remix)";
$a isa artist, has name "Norman Cook";
$r(original-track: $o, remixed-track: $rt, remixing-artist: $a) isa remix;
然后证明了对关系使用名词是有用的,因为它没有以二进制方式连接它可以拥有的3个角色扮演者中的任何一个。取而代之的是,我们命名了位于两条轨道和艺术家之间的概念。
通过这种方式,我们发现该关系很好地描述了任意一对角色之间的(无向)链接:
original-track <-remix-> remixed-track
original-track <-remix-> remixing-artist
remixed-track <-remix-> remixing-artist
我们可以看到,使用remixed
代替remix
并不是很好,它会尝试为没有链接的这些链接添加方向。
Grakn的数据模型可以即时扩展。因此,即使您从二元关系开始,以后再添加更多角色,使其成为三元或N元,动词命名就不再有意义。
用名词命名关系并不总是那么容易。 我的建议是:
remixing-artist
使用此角色。答案 1 :(得分:0)
如果必须使用动词作为关系名称,请使用gerund形式(对于所有实际效果,其作用类似于名词)。例如
faceting sub relation, relates facet-assignment, relates assigned-facet. listing sub relation, relates list-assignment, relates assigned-list.