基礎仕様 01 / DATA MODEL

Data Model — 文書nodeとvalueの定義。

Data Model v0.2は、domainに依存しないMatra文書の意味と形を定義する基礎仕様です。nodeのtag・props・children、valueとして許される型、文書の等価性、MatraJSONでの交換方法を定めます。Grammar v0.3やpackage versionとは別の仕様です。

仕様v0.3、個別npm package version、compiler ABIは別々に管理されます。

  • tag — nodeの名前
  • props — 属性データ
  • children — 順序付きの子要素

01 / NODE

nodeはtag・props・children

文書はroot nodeをちょうど1つ持ちます。tagはnodeを識別するstring、propsはstring keyからvalueへのmap、childrenはnodeまたはvalueの順序付きlistです。tag名に組み込みのHTML的意味はありません。

["p", {"class":"lead"}, ["Hello",0]]

02 / VALUE

JSON互換の値

valueはstring、有限number、boolean、null、valueのlist、string-keyed mapです。undefined、function、symbol、bigint、非有限number、循環構造は含みません。childの順序とscalarの型は保持されます。

["group", {}, [
  ["item", {}, ["one"]],
  ["item", {}, ["two"]]
]]

03 / MATRAJSON

交換形式は3要素配列

MatraJSON nodeは[tag, props, children]で表します。children直下でこの形に合う配列はnodeとして読みますが、property valueなどの配列内部をnodeとして再解釈しません。node形式と紛らわしいvalue配列はmapまたは配列で包んで区別します。

["div", {"data":[["chart",{},[]]]}, []]

04 / EQUALITY

値と順序を保つ

2つの文書はtag、property key/value、child valueと順序が再帰的に等しいとき等価です。propertyのserialize順序は意味を持ちません。source positionはparser metadataで、等価性と標準MatraJSONには含まれません。

05 / MATRA独自の提案

文書モーフィオン

モーフィオンはMatra設計者が提唱した独自概念です。文書nodeを「指数から値への有限写像」として捉え、数値指数0をtag、正整数nをchildren[n - 1]、文字列keyをprops[key]に対応させます。ここでの指数は文書構造の位置を示すためのもので、一般に確立した用語や数式の冪演算を意味しません。変換制約を含む正式な定義は一次資料を参照してください。

区別すること

このページは概要です。

このページは要約です。規範的な定義、全API契約、検証fixtureはリンク先のMatra仕様書を参照してください。

一次資料