ModulaFで、MagSite1のコンテンツ表示ページにほぼ相当するものを表現するため、中間言語からHTMLを生成するXSLTを作ってみましたが、一応最低限の形になってきたので紹介します。
これは、XSLTの入力になるXML文書を手動で用意したものです。本来は、これはプログラムによって複数のモジュールから構成されるものです。
入力となる中間言語文書の例はたとえばこんな感じです。
そして、サイトの構造などを記した独立したXML文書があります。この中に、どんなページがあるとか、主要な用語をどんな表記にするのか等が記されています。
これを扱うスタイルシート変換は長すぎ、しかも試行錯誤して意図が分かりやすくもないので割愛しますが、これをレンダリングすると、以下のようになります。
一見凄くないけれど…… §
レンダリング結果を見ても、何が凄いのか分からないと思います。
しかし、2つのXML文書と見比べてもらえると、実はバラバラの情報を組み合わせてページが構築されていることが分かると思います。たとえば、メニューに項目を追加するには、サイト定義ファイルにちょっと書き加えるだけで自動的に増えます。
そして、完全に、デザインを担当するファイルと、サイトを設計するファイルと、モジュールそのものが分離されます。(最後の2つの分離は、現段階では明確に示されていないところもありますが)
たとえば、サイトを構築するページを増やす場合、それはサイト定義ファイルへの追加で実現され、XSLT文書を変更する必要はありません。具体的なファイル名、URIの情報は、全てXSLT文書から取り除かれているからです。
その結果、デザインの作成、サイト構成の作成、モジュールの作成は完全に独立して実行できる作業となります。万能ツールは目指していないとはいえ、これほど綺麗に、この3つを分離できるとは思っていませんでしたが、これはなかなかエキサイティングです。
ちょっとは技術者が夢を見られる新しいソフトに進化できそうかな?
いや本当に。技術者たるもの、ちょっとは技術で夢を見ないといかんでしょう。
オマケ: レイアウトについて §
上記の例では良く分かりませんが、汎用のレイアウト機能があります。
個々のモジュールが、上記のどれにあたるか、mainなどの名前で指定しておくと、それぞれが適切な位置に自動的に配置されます。また、それが必須であるかを指定する機能があるので、重要ではないモジュールは、小さな表示デバイス向けに出力する時には切り落とすこともできます。
それから、これらの位置関係は、物理的な位置関係を強制するものではありません。あくまで位置に関するヒントです。
上記のレンダリング例は、mainが1つ、footerが2つというレイアウトの使用例となります。
以下はレイアウト機能をフルに使った使用例です。