Представление графика в JSON
Вдохновленныйэтим вопросом, я пытаюсь представить DAG в JSON. Мой случай включает ребра и узлы, которые содержат некоторые данные (а не только строки, как в этом примере). Я думал о спецификации, как это:
{
"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 ?
}
}
Одна из моих идей состояла в том, чтобы сделать ключи ребер конкатенацией двух идентификаторов вершин, которые они соединяют. Например:, ab
, ac
, и bc
- это три ребра в этом графе. Я хочу знать, есть ли более стандартный способ сделать это. этот.
EDIT: вот о чем я сейчас думаю
{
"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
}
}
}
}
2 ответа:
Поскольку ребра 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 } } } }
Оказывается, есть стандарты, которые пытаются появиться для такого рода вещей. Недавно мне пришлось искать их для собственного проекта. Возможно, вас заинтересует http://jsongraphformat.info/ например, или один из одноранговых проектов, на которые он ссылается на своем веб-сайте. Цели включают в себя попытку представить в JSON все, что вы можете представить на языке точек (https://en.wikipedia.org/wiki/DOT_(graph_description_language)).