« 日記 |Main| 日記 »

« log | log | テスト重要 »

フォーマットに関する考察

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というキーを持たないなら、デフォルトの物理法則が指定されたものと見なす。
もし物理法則を本当に指定したくない場合には「Law: {}」とやれば済む(頂点の移動すらできないからかなり無意味だが)(勘違い。頂点の移動はできる。単なる動的な整形のない「グラフ描画ソフト」に変わる)。そのほかの点については現在のフォーマットと共存させることに何の問題もない。こっちにしよう。

トラックバック(Trackback)

Trackback URL: http://www.nishiohirokazu.org/mt/mt-tb.cgi/388

ご意見・ご感想をお送りください(フィードバック)

(フィードバックはメールで送信され、基本的に表示されませんが、内容によっては公開させていただくこともございます。ご了承ください。Your comment doesn't appear the page immediately. If the comment has value to other people, it will be put on the page or subsequent entries. Thank you.)

上の情報は、いずれも未記入でかまいません。 All of above questions are optional.