升级到Grakn核心和python API 1.8.1会使几种Type方法失败-如何解决?

问题描述

以下代码在适用于Grakn 1.5.9的python API中起作用:

concept_type = next(iterator_conceptMap).get("x")
concepts_sub = concept_type.subs()

由于将Grakn和Python API更新为1.8.1,因此代码会产生错误

AttributeError:'AttributeType'对象没有属性'subs'

(以及EntityType,RelationType和角色的相同错误

其他方法也会发生相同的错误:attributes(),keys()..(尚未测试全部)。

我已检查concept_type.is_type()返回True

不确定是否相关,但是在删除了整个方法后,使用上述语法或列表理解替换了collect_concepts()方法,该错误发生了,前提是该方法删除(请参见Pull Request)。 / p>

相关的concept API docs尚未更改。

出了什么问题?

解决方法

与此问题相关的文档位于: https://dev.grakn.ai/docs/concept-api/overview

在Grakn客户端1.8.0之前的版本中,概念始终会保留直接与服务器的连接。这使用户可以使用subs()keys()之类的方法向Grakn服务器发出呼叫。

从1.8.0开始,客户端概念是 Local概念或Remote概念:

  • Local概念是简单的值对象,它们保留Id,Label,Type,Value(用于属性)和它们直接包含的其他状态。客户通常会通过查询和其他操作返回Local
  • 通过使用Remote将事务传递给概念来从Local概念获得
  • concept.asRemote(tx)概念。像旧版本的grakn客户端一样,这使它们能够重新连接到服务器。

进行此更改是为了确保用户知道哪些操作可能会很昂贵,并且需要通过网络旅行,哪些操作会很快,并且只能使用本地值进行操作。