MagSite1をVersion 0.35にバージョンアップしました。
汎用的に導入される長いページの分割機能 §
ModulaFに実装する予定だった長いページの分割機能が実現しました。
これは、生成されたページのサイズが大きい場合に、自動的に分割する機能です。中間コンテンツ記述言語のレイヤーと、XSLT変換のレイヤーの中間で機能するもので、モジュール開発者も、モジュール定義ファイルの作成者も基本的に意識する必要がありません。XSLT変換の作成者は、ページ分割をハンドリングするUIを生成する部分を作っておく必要はありますが、1回作るだけでどのページにも対応されます。
自動分割の実例 §
実例は、裏オータムのキーワードのコンテンツ一覧のあたりで見ることができます。従来このページは、1ページの中に該当する全てのコンテンツのリストが含まれていました。その結果として、1つのキーワードに100個ぐらいコンテンツを書くとリストを見るのも一苦労という状況になっていました。このページを見ると分かると思いますが、今回のバージョンを使うと(これを書いている時点では)、これは3分割されます。より短いページ×3に分解されたわけです。もちろん、量が多くなれば、ページ数は増えます。
このような分割は、モジュールからは透過的に実現されています。モジュールは、1つのリストしか返していません。ModulaFモジュールが、そのリストを含む中間コンテンツ記述文書を評価して、いくつに分割するかを決定し、ハンドリングします。
どんな基準で分割するか §
UserAgentの種類ごとに、分割発動の敷居値と、分割基準サイズが指定されています。UserAgentの種類ごとですので、PC用とi-mode用では異なる数値が指定されています。
分割発動の敷居値は、中間コンテンツ記述文書の文字数によって指定されます。この文字数が指定値を超えた場合に、分割機能が発動されます。分割機能は重い処理であるために、大半の短い文書ではスキップされます。
分割基準サイズは、中間コンテンツ記述文書に含まれる要素内容のテキストデータの文字数を指定します。この数値前後を目安に、中間コンテンツ記述文書は複数に分割されます。ここで、要素内容のテキストデータの文字数という基準になっているのは、XML文書形式の場合には切り方によって文字数の変動があるためです。たとえば、中間コンテンツ記述文書に含まれる1要素を、OuterXmlプロパティなどで取り出すと、名前空間を宣言する属性が付加されてしまい、サイズが一定しません。もちろん、そのような揺れを抑え、より正確に正しい文字数を調べる手段はあり得ますが、XSLT変換によって更にサイズが変動するため、これ以上正確な数値を算出するのは無駄と判断してこのような仕様にしています。
この説明から分かるとおり、XSLT変換次第でいくらでも変動があり得るので、分割基準サイズは極めて大ざっぱな目安にしかなりません。厳密なサイズ制限のあるデバイス向けに定義を記述する場合には、大きく余裕を見込んだ数値設定を行う必要があります。
これが凄い! §
ページ分割は、ModulaFというフレームワークがコンテンツに対して透過的に提供する機能であるため、何もせずとも全てのページが対象になります。表紙も、コンテンツ表示ページも、コンテンツ一覧ページも、ModulaFベースのページは全て対象になります。たとえば、子キーワードが極端に増えすぎた表紙ページも、分割の対象になります。
抽象的な階層分割を行うアーキテクチャによって、わずかな手間で、大きな成果を得られる事例と言えるでしょう。今回の事例では、よくあるWebアプリケーション開発システムよりも、少ない手間で大きな成果を出せたと思いますが、この傾向はこの先にも更に加速していくと思います。
入手先 §
MagSite1 0.35は、MagSiteMan1上からダウンロードできるほか、MagSiteDistシステムよりダウンロードできます。
MagSite1手動ダウンロード
変更点 §
変更点は以下の通り。
- ModulaFモジュールをバージョンアップ
- 長いページの自動分割に対応
- キーワードのコンテンツ一覧ページをModulaF化