如何使用字符表示图关系?

  知识图谱听起来很高大上,而且也应用广泛。而图数据库,你可以到网上搜搜,基本就是像 neo4j, janusgraph, HugeGraph...
  如果想让做个类似的图谱的东西,你会怎么办呢?一来就上真的图谱真的好吗?也许前期就三两个关系链,也许只是业务试水,你就去搞个真的图数据库过来?是不是太浪费了。
  是的,实际上前期我们最好自己实现一些简单的关系链维护即可。
  那么,为了能够适应稍微的关系变化,也许我们还是需要效仿下图数据库的概念。那么,现在的第一个问题就是:如何使用文字表述一个图关系链?

 

1. 如何定义规范?

  图数据库三大要素: 实体, 关系, 客体 。
  实际上要解决这个问题倒也不难,只要自己定一种表示方法,自己能看懂就行,不去管其他人。比如用 '1,2,3' 代表先1后2再3... 但实际上,想要表示稍微复杂点的结构,也许并不是特别容易呢。而且,如果想要考虑后续可能的切真正的图数据库,为何不参考下别人的标准呢?
  比如现在通用些的,cypher, gremlin... 大家可以网上搜索下资料,参考下来,好像cypher更形象化些,尤其是各种箭头的使用比较方便。
  比如要表示A与的B的关系可以是: (:A)-[:关系]->(:B)
  而对于多个复杂关系,则可以用多个类似的关系关联起来就可以了。
  嗯,看起来不错。表示的方式定好了,那么我们如何具体处理关系呢?

 

2. 如何表示一个现实的图关系?

  如下图所示,我们有如下关系,应该如何定义字符表达方法,以达到配置的目的?

如何使用字符表示图关系?

 

  按照第1节中我们定义的规范,我们可以用如下字符串表示。

(:PEOPLE)-[:养宠物]->(:CAT)-[:吃]->(:RICE) ,(:PEOPLE)-[:吃]->(:RICE) ,(:PEOPLE)-[:养宠物]->(:DOG) ,(:PEOPLE)-[:拥有]->(:HOUSE) ,(:PEOPLE)-[:干活]->(:JOB) ,(:CAT)-[:朋友]->(:DOG) ,(:DOG)-[:吃]->(:RICE) ,(:JOB)-[:产出]->(:BRICK) ,(:HOUSE)<-[:构件]-(:BRICK) ,(:HOUSE)<-[:构件]-(:GLASS)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpygzy.html