同階層はマージ/異階層は上書き Edit

上位ページはすべて参照しなければならない。属性単位のオーバーライドで、状況によらず最上位に継承すべき属性があり得るので。でもキャッシュを作成しておけば何階層も辿らなくていい。

上位ページは複数存在するので、同じ近さの上位ページはまとめてマージ
編集衝突時のページ/版のマージと同じ?共通点は重複せず、相違点だけ追加していく??
そして遠いほうから順に上書き(オーバーライド)。属性名が上下異階層間で重複していたら、最も近いものだけを使うということになる。最上位ページ属性は常に参照されるも最も上書きされやすい。
実装では1階層上を継承する処理を再帰呼び出し。最上位まで処理される。

マージは却下、優先順位を定義 Edit

属性名に重複があったらいずれかを優先させなければならない。てもまとめて、複数の値を持つようにする。複数選択可能な列挙ならともかく、フラグや数値ならマージしようがないので結局優先順位が必要になる。同階層間の優先順位とは…?

を変えてはいけないので、集合や配列でもない限りひとつ以外を無視することになる。集合や配列ならマージ可能。でも配列では順序が必要なのでやっぱり優先順位は必要。

同階層にあるページ間で属性名が重複したら、無効化するエラーにするしかないマージは却下。エラーはWikiらしくない。

属性ごとにそれを使う処理側で「どんな値を優先するか」を定義する?
大きいほう、長いほうなど。集合化なども可能に。選択肢はフレームワークが用意したものか、処理側で定義したもの(引数2つ受けて一方を返すコード)のいずれか。処理側で定義すれば、どちらか一方ではなくマージ(合成)することも可能になる。

属性名が重複したとき、この「どんな値を優先するか」の定義が無ければ属性参照時にエラー無効化。(設定時はいろいろあるし、ページ名変更でもエラーチェックが必要になるので参照時)

エラー処理が必要。エラーならどうするか?
属性が無かったことにするとなると、既存設定を後から無効化できてしまう。
属性管理者のものなのでそれでいい。定義が無くても安全になるように(重複時の処理も属性も無いのを基本として)実装しなければならない。

異なる階層間でも独自のオーバーライド処理を書ければ、テンプレートの中に下位のテンプレートを埋め込むことも可能になる。同階層間の場合とは別に定義。
:/属性はオーバーライド時にデコレーションも可能にしたい

継承ルール Edit

属性未定義のものだけページから継承する。先祖に無ければデフォルト値。デフォルト値はWikiの設定にある。

ページ/内容内に章見出しか定義リストの形式で…

…を与えられるように。
通常のページ/内容は元からこの定義リストになっていることにする。属性名が無いと通常の内容の定義になる。


未定義の属性だけ継承…というのはやめる。継承されるはずの値は全て評価しないと、属性にした要素が呼ばれないことになる。要素はただ呼ばれるだけでも意味があるが、それがなくなると応用が利かなくなってしまう。
継承は最上位からの上書きで。

属性名を検出、継承ルールを適用するのはフレームワーク/WikiEngineの役目。属性記述に使える要素もフレームワーク次第。記述方法もフレームワークに従う。

継承ルール Edit

/1/2/3 (/2/3/1なども同じページを指す)

上記のページは以下のページ(上位ページ)が持つ属性継承する。

/1/2 (/2/1と同じページ

/1/3 (/3/1と同じページ

/2/3 (/3/2と同じページ

/1

/2

/3

/ (ルートページ

継承順は上位から下位へ。異階層間は上書きなので下位が有効になる。同階層間は属性の定義によるマージ。1ページ内での重複も属性の定義によるマージ
属性は1つ。継承ルールも1つ。、上書きとマージの仕方も1つ。