データ交換の目的で、XML 形式の有限深度グラフと見なすことができる表現を調べています。問題点は、エッジタグでどのようにノードを参照するかです。私が見る 2 つの戦略は、a) 一意の識別子を使用するか、b) パスを使用することです。
一意の ID:
<graph id="g0">
<node id="n0"/>
<node id="n1"/>
<edge from="n1" to="n0"/>
</graph>
<graph id="g1">
<node id="n2"/>
</graph>
<edge from="n2" to="n1"/>
パス:
<graph id="0">
<node id="0"/>
<node id="1"/>
<node id="2"/>
<edge from="1" to="0"/>
<edge from="2" to="1"/>
</graph>
<graph id="1">
<node id="0"/>
</graph>
<edge from="1:0" to="0:2"/>
これらの種類のものの標準的な手順は何ですか? 私が集めたものから、一意の識別子のアプローチがより広まっているようです。それに関する私の問題は、グラフが非常に大きくなったときです。
- XML ファイルとの間でエッジを読み書きする目的で、オブジェクトを ID にマップする非常に大きなハッシュ テーブルの必要性
- エッジがグラフの内部にある場合、冗長なパス コンポーネントを省略できないため、ファイル自体はパスを使用して書き込まれたものよりも大きくなります。
考え?
更新 1 :
1 つの平坦なグラフではないことに注意してください。相互接続された 1 つまたは複数のグラフ。それらはそれぞれローカルにインデックス化された要素を持っていますが、それらをすべて平坦化し、それら全体のエッジを追跡するのは少し面倒です。
更新 1.1 : GraphML のサブグラフでは、実際にはローカル ノード ID をグローバル ノード ID から分離できるようにする複雑なキーを使用していることに気付きました。
更新 2 :
はい、明らかにこれは整形式の XML ではなく、タグやあらゆる種類のスキーマ宣言が欠落しています。