データセットとHDFファイル
ディスクからデータセットの要素をロードすると便利です。通常、データはHDFと呼ばれているClearSilverファイル形式からロードされます、しかし、XMLまたはもう一つのフォーマットから簡単にロードすることもできます。
HDFは、Hierarchical Data Formatの略です(はい、別のHDF)。それは、任意に混在させることができ、データセットの階層を表現するための2つの異なる構文をサポートしています。最初は単純な点線のパススキームである:
Page.Name = My Index Page.URL = /myindex.html Page.Menu.0 = Home Page.Menu.1 = Preferences Page.Menu.2 = Help Page.Menu.3 = Support
第二は、ネストされた要素スキームである:
Page { Name = My Index URL = /myindex.html Menu { 0 = Home 1 = Preferences 2 = Help 3 = Support } }
HDFファイル内の階層は、任意にネスト状でありえて、望まれるどんなデータ・エレメントでも含むことがありえます。 たとえば、上のメニューのフォーマットを広げるために、我々は以下を加えることができました:
Page { Menu { 0 { Name = Home URL = / } 1 { Name = Preferences URL = /prefs } 2 { Name = Help URL = /help.html } 3 { Name = Support URL = /feedback/ } } }
HDFのためのAPIがこれらのフォーマットでファイルを読込み及び書込みを行うことをサポートするので、HDFは大きな構成または持続言語として用いられることができます。しかし、ここではその主な目的は、ClearSilverテンプレートで使用するためのデータセットに静的な要素をロードすることです。
ClearSilverテンプレートがレンダリングされると、データセット内の特定の変数を参照またはデータセット階層内の特定の時点でのすべての要素を反復処理することができます。たとえば、上記のHDFデータセットをレンダリングしたCSテンプレートは、各メニュー項目の.NAMEと.URLの要素をレンダリングする、Page.Menuを反復することができます。
HDFファイルの構文の2つの重要な部分があります。
- 名前は、等号の代わりにコロンを使用して別の名前の内容をコピーすることができます。例えば、
Page.Name : Page.Menu.0.Name
これはPage.NameはPage.Menu.0.Nameと同じであることを意味します。
あなたはPage.Menu.0.Nameをコピーする前にPage.Nameを定義する必要があることに注意してください。 - Nameは、複数行の文字列を値に設定することができる。これは、標準的なUNIXのシェル/ Perlの構文に似た構文を使用しています。例えば:
Page.Name << EOM This is my multi-line page name. Isn't it spiffy? EOM