修改密码

请输入密码
请输入密码 请输入8-64长度密码 和 email 地址不相同 至少包括数字、大写字母、小写字母、半角符号中的 3 个
请输入密码
提交

修改昵称

当前昵称:
提交

??certificate-table.title_zh_CN??

??certificate-table.name_zh_CN?? ??certificate-table.issued-at_zh_CN?? ??certificate-table.valid-until_zh_CN?? ??certificate-table.serial_zh_CN?? ??certificate-table.actions_zh_CN??
??certificate-table.serial_zh_CN?? ??certificate-table.valid-until_zh_CN?? ??certificate-table.actions_zh_CN??

??certificate-table.no-data.p1_zh_CN?? ??certificate-table.no-data.p2_zh_CN??

v4.3
搜索
    中文EN
    v4.3

      图数据

      本文介绍图数据的基本构成,以及如何使用 UQL 描述和表达图数据,这些概念是学习和掌握 Ultipa 产品的前提。

      图数据

      图1:Areith works as Waiter

      图1 中用圆圈表示的 AreithWaiter 是点。
      点表示真实世界中的实体。

      图1 中的箭头 workAs 是一条边,由 Areith 指向 Waiter
      边表示实体之间的关系。

      Schema

      图1 中代码里出现的 PersonJobworkAs 是 schema,可理解为模式。
      Schema 表示点、边的不同类型。

      属性

      图1 中代码里出现的 nametitle 是属性。
      属性是 schema 的组成部分,用来具体描述某种 schema 的构成。

      路径

      图2:3 种点schema和 2 种边schema

      图2 中由 AreithworksAsWaiter 所形成的连续且点、边交替出现的序列 是一条路径。同理,由 WaiterworksAsAreithstudyAtOxford 构成的序列也是一条路径。
      路径由点开始,以点结束,包含至少一条边。路径表达了实体之间的多步关联关系,也是图计算中经常查询的目标。

      描述点

      图3:点的描述

      很多 UQL 参数都可以描述点,以 n() 为例:

      n()									// 任何点
      n({@Student})						// schema 为 'Student' 的点
      n({name == "Jason"})				// 属性 'name' 为 'Jason' 的点
      n({@Student.name == "Jason"})		// schema 为 'Student' 且属性 'name' 为 'Jason' 的点
      n(as a)								// 任何一个点,并命名为 'a'
      n({@Student} as a)					// ...
      ...
      

      以上描述的语法特征:

      • 参数 n() 内为空时不对点做任何要求
      • 过滤点的 schema 时须用到符号 @
      • 点的 schema 和属性可以分开描述,也可以联合过滤
      • 给满足要求的点定义别名时须用到关键词 as

      UQL 中可以用来描述点的参数有:

      • nodes():用于点的查找、更新、删除
      • n():用于模板查询(一种路径查询方法)
      • nf():用于模板查询
      • src():用于非模板的路径查询
      • dest():用于非模板的路径查询
      • node_filter():用于非模板的路径查询

      描述边

      图4:边的描述

      e() 为例说明如何对边进行描述:

      e()									// 任何边
      e({@workAs})						// schema 为 'workAs' 的边
      e({since == 2012})					// 属性 'since' 为 '2012' 的边
      e({@workAs.start_year == 2012})		// schema 为 'workAs' 且属性 'since' 为 '2012' 的边
      e(as b)								// 任何一个边,并命名为 'b'
      e({@workAs} as b)					// ...
      ...
      

      n() 类似,使用参数 e() 对边进行描述时有以下特征:

      • 参数 e() 内为空时不对边做任何要求
      • 过滤边的 schema 时须用到符号 @
      • 边的 schema 和属性可以分开描述,也可以联合过滤
      • 给满足要求的边定义别名时须用到关键词 as(注意:有时 e() 中不支持定义别名)

      UQL 中可以用来描述边的参数有:

      • edges():用于边的查找、更新、删除
      • e():用于模板查询
      • le():用于模板查询
      • re():用于模板查询
      • edge_filter():用于非模板的路径查询

      描述路径(模板)

      图5:路径的描述

      使用 n()e() 描述的路径称为模板:

      // 任何一步路径
      n().e().n()
      
      // 任何二步路径
      n().e().n().e().n()
      n().e()[2].n()
      
      // 表示 'Person-workAs-waiter' 的一步路径
      // 将其中表示 Person 的点命名为 'individual',将这些路径命名为 'career'
      n({@Person} as individual).e({@workAs}).n({@Job.title == "Waiter"}) as career
      
      // 表示 'Areith-workAs-Job-workAs-Person' 的二步路径
      // 将其中表示 Job 的点命名为 'job',将末尾的 Person 命名为 'other'
      n({@Person.name == "Areith"}).e({@workAs}).n({@Job} as job).e({@workAs}).n({@Person} as other)
      
      ...
      

      路径模板的特征:

      • 是一种非常直观、形象的路径描述方式
      • 路径中的某个点、某个边、整条路径都可以定义别名
      图6:将同样的图数据描述为不同的路径

      图6 中两个模板所描述的路径是否相同?由于 Ultipa 的路径是从左向右书写并解析的,这两个路径模板的点、边顺序不一致,因此不相同。但它们都描述了相同的图数据。

      请完成以下信息后可下载此书
      *
      公司名称不能为空
      *
      公司邮箱必须填写
      *
      你的名字必须填写
      *
      你的电话必须填写
      *
      你的电话必须填写