お試しで実装した 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
- 配列
データ構造
- テンプレートマップ
- トランスレーションマップ
データ構造構成要素
処理中の文脈であらわれる情報
展望
この整理と実装を照らし合わせたり、状況例と照らし合わせたりしながら、実装をすすめたい。
了