我是GRAKN.AI的新手,我想知道在GRAKN的图表中我是否可以创建一个由“enitity”组成的“实体”。我知道我可以执行以下代码:
table sub entity
has book;
book sub resources datatype string;
但我可以将“书”作为一个实体与“表格”联系起来吗?
我需要将“book”作为一个复杂的概念,而不是一个简单的资源。
谢谢,
的Davide。
答案 0 :(得分:3)
你可以模拟两个人book
和table
,并建立一种可以称之为belongs
的关系并添加你需要的角色,例如book-role
和table-role
如果概念是分层相关的,则可以使用继承。
table sub entity
has some property
book sub table
has additional property
继承对于分类很有用,您可以很容易地理解两个子实体是相关的,并且可以通过查询父级来检索它们。
match $t isa table;
将返回书籍,因为它们是桌子的子实体。
答案 1 :(得分:3)
另一种解决方案是通过一种关系,允许您更明确地定义事物。例如,
要定义关系,首先要定义角色,这些角色提供事物相互关联方式的上下文。例如:
insert
thing-on-top-of-table sub role;
table-with-thing-on-top sub role;
然后说明这些角色如何链接到关系和实体:
insert
sits-on sub relation
relates thing-on-top-of-table
relates table-with-thing-on-top;
table plays table-with-thing-on-top;
book plays thing-on-top-of-table;
以上几乎就是您简单知识库的架构。
现在我们可以添加一些数据。让我们说一些书在某些表格之上:
insert
$book isa book;
$table isa table;
(thing-on-top-of-table: $book, table-with-thing-on-top: $table) isa sits-on
当然,你可以从这里扩展一些东西。例如,您可以通过资源为您的图书添加标题。
旁注:资源与实体
将某些内容作为资源或另一个实体关联的基本经验取决于您希望在模型中表达多少信息以及是否可以通过数据文字定义某些内容(例如String,Int,Long,等等。)。
例如,图书是一个实体,因为它由多个资源组成,有助于识别图书。即标题,isbn等。 。另一方面,这些资源是简单的数据值。标题只不过是一个字符串,所以没有理由将标题作为一个实体,这应该只是一个资源。