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]]01 / NODE
文書はroot nodeをちょうど1つ持ちます。tagはnodeを識別するstring、propsはstring keyからvalueへのmap、childrenはnodeまたはvalueの順序付きlistです。tag名に組み込みのHTML的意味はありません。
["p", {"class":"lead"}, ["Hello",0]]02 / VALUE
valueはstring、有限number、boolean、null、valueのlist、string-keyed mapです。undefined、function、symbol、bigint、非有限number、循環構造は含みません。childの順序とscalarの型は保持されます。
["group", {}, [
["item", {}, ["one"]],
["item", {}, ["two"]]
]]03 / MATRAJSON
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仕様書を参照してください。