Ver.2006-12-16
基本的文法
MML-light では、マシーンや通信、人間に対し軽くするため、 XML ではなく Javascript などで利用される JSON の書式を採用している。 ただし、視認性を高めるため key と value の間をつなぐ記号は「:」ではなく plist 形式の「=」を採用した (ここはオリジナルに添うべきか否か議論を待ちたい)。
なお JSON の記法と XML との相互変換は極めて容易であり、 システムによっては XML で記述しても構わない。
このような柔軟性を持たせるため、 JSON / XML のマッピング・サービスがあるとよい。
key(属性名) と、それに対する value(値)との組み合わせからなる
key = value
value は以下のように、オブジェクトの「入れ子構造」として扱える
"連絡先" = {
"住所" = {
"郵便番号" = "142-0012",
"都道府県" = "東京都",
"市区町村" = "品川区",
"町村" = "荏原",
"番地ほか" = "1-1-1-1208",
}
"電話" = {
"職場" = [ "03-1111-2222", "03-1111-2223" ],
"自宅" = "03-3333-4444",
"携帯" = "090-5555-6666",
}
};
配列は、オブジェクトを [ ] でくくることにより表現される
"色" = ["赤", "黄", "緑"]
" " でくくられた範囲外の空白や改行は、無視される。
MML light で独自に拡張したもの
文中へのコメント埋め込み
// から行末までは、コメントとして無視される。
012000"通信" = "FAX"@"MML0003" // コメント
name space の採用 -- 2006-12-16 変更
name space の必要性は明らかでないので、当面は使わずに考えてみる。
key(属性名・タグ名)に code を組み合わせる -- 2006-12-16 追加
key の先頭は machine readable なコード番号から始まる。
コード番号の後には human readable な文字を表記することができる。
human readable な文字も、 テーブルで規定したものを使うよう努めるべきだが、 任意の文字列を " " でくくって使用することも可能とする。
123456 value = "1304000000077", // id そのもの
123457 "メモ" = "これはメモです"
key のコードを規定するテーブル名は header 内で定義することとする (従って body 内で記述される key のコードの参照先は header で規定されたテーブルに統一される)。
コード番号が省略されている場合も、人間が読むだけのものとして使えるが、 機械的に整合性のとれるものではない。
タグの独自拡張が可能
従って、以下のように " " でくくる形で、タグをユーザ定義できる。 ただし、これは送付先の相手に理解される必要があるので、 相手に間違いなく理解されるようなタグ名にする必要がある。
"当方で定義したタグ" = "当方のデータ" // タグ意味不明の場合お問い合わせください
属性の継承 (Object 指向に対応)
creator.person のように記述されていれば、 これは person のサブクラス であることを示し、 上位クラス person の属性を継承する。
サブクラス内で属性を再定義すれば、そちらが優先される。
000023 id = {
123456 value = "1304000000077", // id そのもの
123458 type = "facility"@"MML0024" // ? id のタイプ
};
複数 value の記述 (Ontology に対応)
以下のように同じ値を並列表記できるようにした。 「|」で区切られた値のどれかひとつを解釈できれば良いという考えである。 厳密性を求める面から議論もあろうが 「異なるシステムからの認識性が高まる」ため、 実用性で勝ると考える。
000120sex = "男" | "男性" | "male"
上の手法はあくまでも簡単に済ませられる場合で、 これとは別に Ontology のための参照テーブルへ問い合わせに行く方法も 併用できるようにすべきであろう。
参照テーブルの並記
以下のように @ マーク以後に参照テーブルを並記。 ここで挙げる例では MML のテーブルを用いることが多いが、 Web などで世の中に公開されたテーブルであれば他のものでも構わない。
012000"通信" = "FAX"@"MML0003"
上記の例では MML0003 で定義された FAX という value を示す。 この場合、コード 012000 を規定するテーブルとは異なってもよい。