お試しで実装した JSON から HTML へのTranslatorの 構成要素を整理する

動的 Element 生成を実装するときの状況例を明文化する - quwaharaの日記で整理した項目と、 Translatorの構成要素がどの程度適合しているか確認するため、 Translatorの構成要素を整理したい。

Translatorのデータ構造

TranslatorはテンプレートになるElementを保持するデータ構造を持っている。
データ構造はKey-value形式のマップだ。
Key は String、Value は Element になる。
そのデータ構造をテンプレートマップと呼ぶことにする。
テンプレートマップのKeyをテンプレートKeyと呼ぶことにする。

Translatorは Translate を実行するとき、 Translate の設計図になるデータ構造を引数にとる。
データ構造はKey-value形式のマップだ。
Key は String、Value については後述する。
そのデータ構造をトランスレーションマップと呼ぶことにする。
トランスレーションマップのKeyをトランスレーションKeyと呼ぶことにする。

Translatorの Key

Translatorは変換のために、要素を関連付けする Key がある。
データ構造の章ですでに、テンプレートKeyとトランスレーションKeyが出た。
テンプレートはHTMLのElementになっている。
テンプレートの用途に、テンプレートのあるElementのChild elementへ、 別なテンプレートを埋め込みたいことがある。
それを実現するために、埋め込みたい位置を示すためのKeyがある。
そのKeyをプレースホルダーKeyと呼ぶことにする。 プレースホルダーKeyと識別するために、プレースホルダーKeyは@で始まる。
変換の基本的な動きは、プレースホルダーKeyと一致する、トランスレーションKeyがあったら、 トランスレーションKeyのValueを、プレースホルダーKeyがある位置へ、埋め込む。
プレースホルダーKeyと一致する、トランスレーションKeyがなかったらなにもしない。
プレースホルダーKeyはそのテンプレートの要素の下に残ったままになる。
この動作は、変換後のテンプレートを再度、テンプレートとして使うことを想定している。

また埋め込みたい位置に、テンプレートKeyも指定できる。
テンプレートKeyと識別するために、テンプレートKeyは#で始まる。   テンプレートKeyの変換は、埋め込まれていたテンプレートKeyでテンプレートマップに一致するKeyがないか探す。
一致するKeyがあれば、そのKeyがさす Value の Element をテンプレートKeyがあった位置へ埋め込む。
埋め込まれた Element もプレースホルダーKeyやテンプレートKeyが埋め込まれていないかの、走査の対象になる。
一致がなかったら何もしない。

変換時のプレースホルダーKeyの暗黙の別名

プレースホルダーKeyは、変換を行うとき暗黙の別名を付けられる。
その暗黙の別名ををプレースホルダーロケーションKey(PL-Key)と呼ぶことにする。
PL-Keyは、プレースホルダーKeyが重複することが想定されるので、 変換時に処理が付ける連番で、プレースホルダーKeyを唯一に指定できるようにするためだ。
変換はトランスレーションマップの指定の仕方で、再帰的に呼び出されることがある。
PL-Keyは再帰の回数と、テンプレート内でのプレースホルダーKeyの出現順を '-' で繋いで表す。
回数と出現順はともに '0'始まりだ。
例えば、最初の変換の呼び出しの、最初に現れたプレースホルダーKeyの PL-Key は '0-0' になる。
再帰1段目で、3番目に現れるプレースホルダーKeyの PL-Key は '1-2' になる。

トランスレーションマップのValue

トランスレーションマップのValue に指定できる値は次のものがある。
それぞれのValueに指定した値は、トランスレーションKeyが一致するプレースホルダーKeyの位置へ、 埋め込まれる。
単純な文字列はその文字列が埋め込まれる。
ElementはそのElementが埋め込まれる。
Elementは木構造を下る操作をして、プレースホルダーKeyがあれば、変換の対象になる。
テンプレートKeyは、そのテンプレートが埋め込まれる。
もし見つからなかったら、ValueにあったテンプレートKeyそのものが埋め込まれる。
埋め込まれたテンプレートは再帰的に、変換の対象になる。
トランスレーションKeyは、そのトランスレーションKeyを使って、 再帰的にトランスレーションマップを検索し、変換する。
変換結果もまた、再帰的に変換の対象になる。
もし見つからなかったら、ValueにあったトランスレーションKeyそのものが埋め込まれる。
配列は配列の要素の並びが、Elementの兄弟として順に埋め込まれる。
この並び順がPL-Keyの出現順にあたる。

キーワードの整理

ここまでの振り返りで出現したキーワードを箇条書きに整理する。

原始的な要素

  • 関連するKeyがない
  • 単純な文字列
  • Element
  • 配列

データ構造

  • テンプレートマップ
  • トランスレーションマップ

データ構造構成要素

処理中の文脈であらわれる情報

展望

この整理と実装を照らし合わせたり、状況例と照らし合わせたりしながら、実装をすすめたい。