データフォーマット: SGF
JavaScript: SGF ファイルの処理 に関連して、補足や注意書きなど
未定義のプロパティ
SGF テキストでは未定義のプロパティが 1) 1つの値だけ持つプロパティか、 2) 値が配列のプロパティか、を区別できません。
例: 囲碁の SGF AB[no][oo][np] // AB は配列のプロパティ B[pr] // B は値が 1つだけのプロパティ 例: 未定義のプロパティ UNKNOWN[value] // 1つの値なのか、要素が 1個の配列なのか区別できない
SGF のテキストを眺めただけでは 1) と 2) の区別はできません。 暗黙の了解で AB は配列のプロパティ、B は値が 1つのプロパティとみなしているだけです。 暗黙の了解があると プログラミングでしばしばトラブルの原因になります。
SGFParse2022.js で 1) 1つの値だけを持つプロパティか 2) 配列のプロパティか は、下のコードで区別しています。 //配列のプロパティ名は下にキーを足す。 SGFParse.ARRAY_VALUE_KEY = [ "AW", "AB", "AE", "LB", "SQ", "TR", "MA", "CR", "AWC", "ABC" ];
似たような話は XML でも出てきます。
XML テキストのタグを見ただけでは
1) 1つの値だけ持つ要素なのか、
2) 配列の要素なのか、を区別できない話が出てきます。
データフォーマット: JSON と XML の比較
この話は HTML でも同様です。 p や span や div などは単体の要素、 li や td や tr なら配列の要素という暗黙の了解で使っています。 HTML テキストを見ただけでは配列か配列でないかを区別できません。
古い時代のデータフォーマットはデータテキストを見ただけでは
文字列と数値と論理型の区別、
原始型と配列や連想配列の区別ができないことが多く、
このあたりで問題が起こりやすいです。
これらの欠点をなくすと近年多用される JSON の話になります。
JavaScript: JSON シリアライズ
データフォーマットの話 (3): 歴史的な話