web-dev-qa-db-ja.com

JSONでのグラフの表現

this 質問に触発されて、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 ?
    }
}

私が持っていた1つのアイデアは、エッジのキーを、それが接続する2つの頂点IDの連結にすることでした。たとえば、abac、およびbcは、このグラフの3つのエッジです。これを行うためのより標準的な方法があるかどうかを知りたいです。

編集:これは私が今考えていることです

{
    "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
            }
        }
    }
}
8
Carpetfizz

DAGのエッジはデータを保持するので、ノードと同じように、独自の識別子を持つ方が適切です。つまり、json表現は3つのコンポーネントで構成する必要があります。

  1. ノードレコード:各ノード識別子をノードのデータにマッピングします。
  2. エッジレコード:各エッジ識別子をエッジのデータにマッピングします。
  3. 隣接リスト:各ノード識別子をエッジ識別子の配列にマッピングします。それぞれがノードから出て行くエッジに対応します。

    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
          }
        }
      }
    }
    
8
snakile

この種のもののために出現しようとしている標準があることがわかります。私は最近、自分のプロジェクトのためにこれらを調べる必要がありました。たとえば http://jsongraphformat.info/ や、Webサイトで参照しているピアプロジェクトの1つに興味があるかもしれません。目標には、DOT言語で表現できるあらゆるものをJSONで表現しようとすることが含まれます( https://en.wikipedia.org/wiki/DOT_(graph_description_language) )。

5
Nathan

json-ld はこのために作成されました。学習曲線はやや急勾配ですが、jsonでグラフデータを表現するための堅牢な方法です。

0
jshen