DAGをJSONテキストとして表現したいと思います。誰かがこれを試したかどうか、およびJSONが実際にDAGであるかどうかの検証に関して彼らが扱った問題があるかどうか疑問に思います。
3 に答える
各ノードにラベルを付け、エッジリストを作成します。つまり、ノードごとに、エッジのあるノードを格納します。たとえば、次のようになります。
{
"a": [ "b", "c", "d" ],
"b": [ "d" ],
"c": [ "d" ],
"d": [ ]
}
この方法では、DAGだけでなく、さまざまな種類のグラフを保存できるため、ループがないことを確認するために後処理する必要があります。DAGではないノードが複数回表示される場合は、ノードDFSを選択するだけです。次に、今見たすべてのノードを削除し、残りのノードで繰り返します。ループが見つかるか、すべてのノードを削除するまでこれを行います。後者の場合、グラフはDAGです。
これは冗長な情報であるため、親ノードは保存されないことに注意してください。そのデータが必要な場合は、グラフのロード後にそれらを生成できます。
リンクされたデータを表す独自の規則を作成しない限り、JSONにはDAGを表すネイティブ機能がありません。JSON-LD(W3C提案)は、まさにそれを行おうとしているJSON拡張機能です。提案はここで見つけることができます:http://json-ld.org/spec/latest/json-ld/。
厳密に言えば、JSONで直接それを行うことはできません。データ構造の他の場所で参照によって識別できるオブジェクトを表す独自の方法を考え出す必要があります。次に、JSON文字列の逆シリアル化の結果を後処理する必要があります。
JSON式がオブジェクトグラフであるという単純な理由でJSONでそれを行うことはできません。また、プロパティの値はデータ構造の他の場所にある別のプロパティの値である必要があるという概念を表現するための規定がありません。言い換えると、グラフ内のオブジェクトに複数の親を含めることはできません。これは、すべてのオブジェクトが、他の1つのオブジェクトの1つのプロパティの値であることを意味します。