ColdFusion Markup Language
ColdFusion Markup Language(CFML)は、アドビシステムズの ColdFusion で使われているマークアップ言語である。他にも、BlueDragon、Coral Web Builder、IgniteFusion、Railo などで使われている。タグを使っている点、形式にこだわらない点、マークアップ内にスクリプトを組み込める点などが HTML に類似している。
構文
編集中核部に含まれるタグの名前には常に cf が前置され、その後にユニークな識別文字列が続く。CFML で書かれたカスタムタグには cf_ が前置されるが、他にも呼び出し方が存在する。
手続き的な関数は、CFScript を通して利用可能である。
CFML は一般に動的プログラミング言語と見なされている。しかし、各種タグで入力パラメータの型チェックが可能である(cffunction、cfparam、cfqueryparam など。ただし、プログラマが型を指定した場合)。型チェックが使われているか否かに関わらず実行時に失敗が発生するのだが、これがよい方式かどうかについては異論もある。
CFML は大文字と小文字を区別しない。
CFML では C の map コンテナのようなデータ構造を多用する。キーは常に文字列だが、値の型は特に指定されない。値はドット記法でアクセスされることが多いが、CFML の実装によっては手続き的関数からアクセスできたり、一種のオブジェクトのように扱って get メソッドで値を取り出す形式もある。
最近の CFML 実装では、コンポーネントとしてオブジェクトをサポートしている。コンポーネント定義はファイル内にあり、cfcomponent タグで囲まれている。
コンポーネント間のメッセージパッシングもドット記法で行われる。これはJavaなどのオブジェクト指向言語と似た記法である。メソッド呼び出しの括弧を省略すると、ColdFusion ではその関数を値オブジェクトの map とみなす。これによりメソッドが一種の第一級オブジェクトとして扱われる。
CFML は形式にこだわらない。タグに本体がないのが普通である場合、文法的にもそのタグを閉じる必要がない。例えば、
<cfset value = "hello">
と書いても
<cfset value = "hello"/>
と書いても正しい。どちらを使うべきかという議論もよく発生する。
カスタムタグ
編集CFML はカスタムタグという形で言語の拡張が可能である。カスタムタグはタグとして呼び出される通常ファイルであるが、テンプレートをカスタムタグおよび通常のテンプレートとして扱うことも可能である。
テンプレートがカスタムタグとして呼び出された場合、そのタグを呼び出すのに使われた属性が特殊なデータ構造 attributes に格納され、呼び出したページにある変数は caller 構造体を通してそれにアクセスできる。例えば、2つの属性をとり、それらを加算する add タグを書くとき、add.cfm ページは次のようになる。
<cfset caller.sum = attributes.first attributes.second / >
このタグは次のように呼び出される。
<cf_sum first="1" second="2">
このとき、テンプレートとタグは同じディレクトリにあるものとする。