绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
知识推理之TypeDB预定义关键词使用入门
2022-04-18 15:08:10
【摘要】 文将围绕TypeDB的预定义关键词来带大家入门TypeDB。

概述

在TypeDB简介中,我们提到了TypeDB的schema和预定义的关键词,本文将围绕TypeDB的预定义关键词来带大家入门TypeDB。

TypeDB关键词

Define

我们使用Define将新的实体、关系、属性和规则添加到schema中。 在单个schema.tql文件中定义schema时,define只需要在顶部出现一次。需要注意的是,当执行完define的query语句后需要及时commit,否则define的内容将不会在数据库中生效。

Entity

entity是一个thing,如person,location,organisation。 这些实体中均独立于该领域中的任何其他概念。

1.定义一个新实体的方法如下:

define
person sub entity

2.给实体设置属性

define
person sub entity,
owns full-name,
owns full-name,
owns gender;

3.给实体分配属性,我们使用@+key关键字:

define
person sub entity,
owns email @key;

4.entity扮演一个角色

一个entity在一个关系中可以扮演一个角色,这里使用plays关键字定义一个entity扮演的角色。

define
person sub entity,
plays employment:employee;
organisation sub entity,
plays employment:employer;

5.可以定义一个实体,去继承另一个实体的属性和角色

define
post sub entity,
plays reply:to,
plays tagging:in,
plays reaction:to;
comment sub post,
owns content,
plays attachment:to;
media sub post,
owns caption,
owns file,
plays attachment:attached;
video sub media;
photo sub media;

上例中media和comment均是post的子类,video和photo也是media的子类。所以media和comment继承了post的属性和角色,video和photo继承了media和post的属性和角色。

Relation

relation描述了两个或更多的thing是如何以某种方式相互连接的 。

1.定义一个关系使用 sub + relation. 要完成关系的定义,我们必须确定与之相关的角色。

define

employment sub relation;

完善关系的定义,我们必须确定与之相关的角色。 我们使用relates关键字定义关系的角色

define
employment sub relation,
relates employee,
relates employer;

2.定义关系扮演角色

一个简单的例子,说明一个关系如何在另一个关系中扮演角色。

define
friendship sub relation,
relates friend,
plays friend-request:friendship;
friend-request sub relation,
relates friendship,
relates requester,
relates respondent;
person sub entity,
plays friendship:friend,
plays friend-request:requester,
plays friend-request:respondent;

上例中,friendship在friend-reques关系中扮演friendship角色

3.一个关系可以与多个角色有关联

define
reaction sub relation,
relates emotion,
relates to,
relates by;
emotion sub attribute,
value string,
plays reaction:emotion;
post sub entity,
plays reaction:to;
person sub entity,
plays reaction:by;

上例中,reaction与三个角色有关联,分别是emotion、to、by。

4.我们还能够为一个关系分配多个属性,使用owns关键字+属性标签。

define
friend-request sub relation,
owns approved-date,
relates friendship,
relates requester,
relates respondent;

5.若需要为一个关系指定一个属性,可以用key关键字加属性标签

define
employment sub relation,
owns reference-id @key,
relates employer,
relates employee;

6.我们可以定义一个关系继承另一个关系的属性、角色等信息。

define
request sub relation,
abstract,
relates subject,
relates requester,
relates respondent;
friend-request sub request,
owns approved-date,
relates friendship as subject,
relates friend-requester as requester,
relates friend-respondent as respondent;
membership-request sub request,
owns approved-date,
relates approved as subject,
relates membership-requester as requester,
relates membership-respondent as respondent;

上例中,friend-request和membership-request是request的子类型

Attribute

1.我们可以适用sub + attribute、value定义一个属性及其值的类型。

define
name sub attribute,
value string;

TypeDB知识图中可用的数据类型有:

long: 64位整数
double: 双精度浮点数
string:字符串用单引号或者双引号括起来
boolean: true 或 false
datetime: 日期类型

  • yyyy-mm-dd
  • yyyy-mm-ddThh:mm
  • yyyy-mm-ddThh:mm:ss
  • yyyy-mm-ddThh:mm:ss.f
  • yyyy-mm-ddThh:mm:ss.ff
  • yyyy-mm-ddThh:mm:ss.fff

2.概念类型可以具有任何数量的相同属性,这些属性包含不同的值。概念类型与其属性具有多对多关系。

define
phone-number sub attribute,
value string;
person sub entity,
owns phone-number;

3.属性本身也可以被分配其他属性

define
content sub attribute, value string,
owns language;
language sub attribute,
value string;

如content属性的类型是string,拥有language属性,language属性类型是string。

4.定义一个属性使其扮演一个角色,使用plays关键字加角色标签。

define
language sub attribute, value string,
plays fluency:language;
person sub entity,
plays fluency:speaker;
fluency sub relation,
relates speaker,
relates language;

5.我们可以定义一个属性来继承另一个属性的valuetype、拥有的属性和角色。

define
event-date sub attribute, abstract, value datetime;
birth-date sub event-date;
start-date sub event-date;
end-date sub event-date;

来源 https://bbs.huaweicloud.com/blogs/285666

分享好友

分享这个小栈给你的朋友们,一起进步吧。

TypeDB
创建时间:2022-04-18 15:04:38
TypeDB
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • itt0918
    专家
戳我,来吐槽~