データの形式について [from G+ 2015-01-14]

[2019-03-09追記]

私がこの記事を書いた時に気にしていたのは、シンタックスというよりセマンティクスだった。
1日後、twitterでJKFの作者の方といろいろ議論できたのはいい思い出。

togetter.com

昔、Yahoo!知恵袋で見た時、私はかなり共感したんだけど反応がほとんどなく、あまり気にしている人が少ないのかなと思って控えていた。

detail.chiebukuro.yahoo.co.jp

[2015-01-14当時の内容]

Notationというのはあくまでも記法のことである。

2つの形式A, Bがあったとして、その2つは表現が異なるだけで、その意味するところが同じなのであれば、等価変換可能である。BtoA(AtoB(Data)) = Data である。

しかし、片方の形式にしかない情報があるのだとすれば、変換によって情報が失われる。もしくは変換後の情報が足りず不完全となる。A∩B の部分しか情報が残らない。

従って、2つの形式変換のソフトウェアを多数作るのではなく、すべての情報を包含したデータ交換のための形式を定義し、そのデータ交換用の形式を中心として、複数の形式変換を行う。

データ交換用の形式を定義するにあたって、

  1. まず、このドメインにおいて必要な情報とは何かを定義する。存在するすべての形式が保有可能である情報の和集合を取る。
  2. その情報を表現するための記法(表現形式)を定義する。

すべての形式を包含する情報の定義に失敗すると、様々な形式がある中の一形式に成り下がるので注意が必要である。

完全なものを最初から定義するのは難しい。よって、段階的に拡張する戦略を取る。これは、バージョン間の互換性を考慮して設計しなければならない。大きな技術革新が起きると、バージョン間の互換性がなくなりやすい。

主にデータの交換を目的とする形式ではあるが、データの保存形式として利用することも可能である。その場合の要求として、

  • 古いバージョンのみサポートするソフトウェアに対して、新しいバージョンのデータが入力されるとき、拡張部分は無視されること。
  • 新しいバージョンをサポートするソフトウェアに対して、古いバージョンのデータが入力されるとき、古い形式に従って処理されること。可能であれば、古いバージョンのデータには単純に拡張された部分がないだけで、ソフトウェア側でバージョンの違いによる特別な分岐処理は行わないのが望ましい。