フォーマットに関する考察
JSONがほとんどPythonなのを利用して、PythonでpprintするだけでJSON形式で出力し、evalするだけでJSON形式を読む、という作戦が失敗したので次はXMLにするかYAMLにするか検討していたのだけども、YAMLはよく考えたらそれ自体でネットワーク構造を表現できるので、legacyフォーマット相当のことがシンプルに書けそう。頂点クラスの指定などの細かいことまでできるフォーマットの他に、ちょっと試してみるのに楽ちんなシンプルフォーマットがあってもいいのかも知れない。
- Vertex:
- &vertex1 {label: Hello}
- &vertex2 {label: World, bgcolor: [255, 0, 0]}
- Edge:
- {v1: *vertex1, v2: *vertex2}
こんな感じかな。これなら見てすぐ理解できるし、print文しか使えないような
ユーザでも問題なく出力できるだろう。
YAMLでグラフ構造を表現できる、と英語で書こうとして「YAML can represent ...」なんて書きかけたんだけど、Google先生に「YAML supports serializing native graph data structures through an aliasing mechanism」という例文を教えてもらった。「supports serialization of native graph structure」ではいけないのだろうか?いいらしい。
__ 早めに寝ようと思ったのに無意識にブラックブラックガムを口に入れるのは何とかしないと。もうすぐ26時。
Version: simplified
Vertex:
- {label: Hello, id: vertex1}
- {label: World, bgcolor: [255, 0, 0], id: vertex2}
Edge:
- {v1: vertex1, v2: vertex2}
アンカーを使ったりしなくても、GRINEditでは全てのオブジェクトがid属性というアンカーに使えるものを持っているからこう表現できるんだった。シンプル表記用のフォーマットでやるべきことは、- キーVertexやEdgeに対応する値がマッピングでなくシーケンスの時は、シーケンスの中の各オブジェクトのidの値をキーとするハッシュの簡略表記として解釈する。
- 各オブジェクトはマッピングを使って{classname: 文字列, params: マッピング}と表現されているが、もしこのマッピングがclassnameというキーを持たないなら、デフォルトのものが指定されたと見なし、そのマッピングはparamsに指定されたものと見なす。
- もしトップのマッピングがLawというキーを持たないなら、デフォルトの物理法則が指定されたものと見なす。