知识图谱分为模式层和数据层两部分:其中模式层是是知识图谱的核心,在模式层存储的是经过提炼的知识;数据层存储的是具体数据信息。
我们的图谱模式层和数据层定义如下:
(一)模式层:
我们的模式层使用mysql数据库来存储,设计方式如下:
1,类层次结构:有些知识图谱采用的是树状的类结构,每个子类继承其祖先节点的属性。我们的图谱采用的是简单的两层类层次结构,object_object类是根节点,其他所有类是其子节点。
2,类关系定义:类之间存在相互的关系,类之间可以定义单向的关系,也可以定义双向的关系。如果需要定义主逆关系,需要约定其主关系及逆关系。例如歌手指向歌曲的关系是演唱歌曲,歌曲指向歌手的关系是被演唱。
3,类领域定义:为了管理方便,定义了多个领域便于将类进行分组管理。例如音乐域之下会有歌曲,专辑,歌手等类,电影域之下会有影片,导演,演员等类。
4,类属性定义:公共类里抽取了一些非常基础的属性做为公共属性,例如名称,创建时间之类。另外每个类定义了自己的专有属性,例如音乐时长,电影评分等。
(二)数据层:
我们的数据存储使用了图数据库,存储方式如下:
1,类层次结构:类使用图节点存储,关系是用图的边来存储,object_object在物理上不需要单独建立节点,所有的子节点都继承object_object的基础属性。
2,类关系定义:为每种类型建立了一个节点叫做object_type,将属于该类型的实体都增加一条指向该类型节点的边,这样如果需要修改类型定义,只需要修改一个节点即可。
3,类领域定义:为每种领域也定义了一个专门的节点叫object_domain,将属于该领域的实体增加一条指向该领域节点的边。
4,类属性定义:对于属性分为公共属性和私有属性,公共属性即上面模式层提到的object_object根节点的属性,私有属性是各个类型节点自身独有的属性。其中公共属性因为基本不会变化,我们存储在节点的属性字段里;而私有属性可能会经常需要增删改,而我们的图数据库不是schema free的,为了方便修改,将私有属性全部做为边来存储。