Car*_*izz 6 json graph directed-acyclic-graphs data-structures
受这个问题的启发,我试图用JSON代表DAG.我的案例包括包含一些数据的边和节点(而不仅仅是本例中的字符串).我在考虑这样的规范:
{
"graph": {
"a": ["b", "c"],
"b": ["c"]
"c"
},
"nodes": {
"a": {
"name": "Adam"
},
"b": {
"name": "Bob"
},
"c": {
"name": "Caillou"
}
},
"edges": {
// how to do the same for edges?
// ie: how to query edges ?
}
}
Run Code Online (Sandbox Code Playgroud)
我的一个想法是使边的键是它连接的两个顶点id的串联.例如,ab,ac,和bc在这个图中的三个边缘.我想知道是否有更标准的方法来做到这一点.
编辑:这就是我现在想的
{
"graph": {
"a": {
"data": {
// a's vertex data
},
"neighbors": {
"b": {
"data": {
// data in edge ab
}
},
"c": {
"data": {
// data in edge ac
}
}
}
},
"b": {
"data": {
// b's vertex data
},
"neighbors": {
"c": {
"data": {
// data in edge bc
}
}
}
},
"c": {
"data": {
// c's vertex data
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
由于DAG的边缘保存数据,因此它们最好拥有自己的标识符,就像节点一样.也就是说,json表示应该由三个组成部分组成:
邻接列表:将每个节点标识符映射到边缘标识符阵列,每个边缘标识符对应于从节点出来的边缘.
DAG = {
"adjacency": {
"a": ["1", "2"],
"b": ["3"]
},
"nodes": {
"a": {
// data
},
"b": {
// data
},
"c": {
// data
}
},
"edges": {
"1": {
"from": "a", "to": "b",
"data": {
// data
}
},
"2": {
"from": "a", "to": "b",
"data": {
// data
}
},
"3": {
"from": "b", "to": "c",
"data": {
// data
}
}
}
}
Run Code Online (Sandbox Code Playgroud)事实证明,有一些标准正在试图为这种事情而出现。最近,我不得不为自己的项目查找这些内容。例如,您可能对http://jsongraphformat.info/感兴趣,或者它在其网站上引用的同级项目之一。目标包括尝试用JSON表示可以用DOT语言(https://en.wikipedia.org/wiki/DOT_(graph_description_language))表示的任何内容。