<?xml version="1.0" encoding="Shift_JIS"?>

<document>

 <properties>
  <title>VTL Reference Guide</title>
  <author email="jvanzyl@locus.apache.org">Velocity Documentation Team</author>
  <author email="jcastura@apache.org">John Castura</author>
  <translator>山野内 義一</translator>
  <translator>新穂 洋史</translator>
  <original>vtl-reference-guide</original>
 </properties>

<body>

<a name="about"/><section name="このガイドについて">
<p>
    このガイドは、Velocity テンプレート言語 (VTL) のためのリファレンスです。
    詳細は、<a href="user-guide.html">Velocity ユーザガイド</a>を参照してください。
</p>

</section>

<a name="references" /><section name="リファレンス">

  <a name="variables" /><subsection name="変数">
    <p>
    表記:
    </p>
    
    <p>
    <strong>$</strong> [ <strong>!</strong> ][ <strong>{</strong> ][
    <strong>a..z</strong>, <strong>A..Z</strong> ][ <strong>a..z</strong>,
    <strong>A..Z</strong>, <strong>0..9</strong>, <strong>-</strong>,
    <strong>_</strong> ][ <strong>}</strong> ]
    </p>
    
    <p>
	例:
	</p>
    
    <ul>
        <li>通常表記: <variable>$mud-Slinger_9</variable></li>
        <li>沈黙表記: <variable>$!mud-Slinger_9</variable></li>
        <li>正式表記: <variable>${mud-Slinger_9}</variable></li>
    </ul>
    
  </subsection>
  
  <a name="properties" /><subsection name="プロパティ">
    <p>
    表記:
    </p>
    
    <p>
      <strong>$</strong> [ <strong>{</strong> ][ <strong>a..z</strong>,
      <strong>A..Z</strong> ][ <strong>a..z</strong>, <strong>A..Z</strong>,
      <strong>0..9</strong>, <strong>-</strong>, <strong>_</strong> ]*
      <strong>.</strong>[<strong>a..z</strong>, <strong>A..Z</strong> ][
      <strong>a..z</strong>, <strong>A-Z</strong>, <strong>0..9</strong>,
      <strong>-</strong>, <strong>_</strong> ]* [ <strong>}</strong> ]
    </p>
    
    <p>
    例:
    </p>
    
    <ul>
        <li>通常表記: $customer.Address</li>
        <li>正式表記: ${purchase.Total}</li>
    </ul>
  </subsection>

  <a name="methods" /><subsection name="メソッド">
    <p>
    表記:
    </p>
    
    <p>
      <strong>$</strong> [ <strong>{</strong> ][ <strong>a..z</strong>,
      <strong>A..Z</strong> ][ <strong>a..z</strong>, <strong>A..Z</strong>,
      <strong>0..9</strong>, <strong>-</strong>, <strong>_</strong> ]*
      <strong>.</strong>[ <strong>a..z</strong>, <strong>A..Z</strong> ][
      <strong>a..z</strong>, <strong>A..Z</strong>, <strong>0..9</strong>,
      <strong>-</strong>, <strong>_</strong> ]*<strong>(</strong> [
      <i>opional parameter list...</i> ] <strong>)</strong> [
      <strong> } </strong>]
    </p>

    <p>
    例:
    </p>
    
    <ul>
      <li>通常表記: $customer.getAddress()</li>
      <li>正式表記: ${purchase.getTotal()}</li>
      <li>通常表記(パラメータ付き): $page.setTitle( "My Home Page" )</li>
    </ul>
  </subsection>
  
  <p>
  VTL プロパティは、<em>get</em> と <em>set</em> をとる VTL メソッドのために、
簡略表記として使うことができます。
  <em>$object.getMethod()</em> や <em>$object.setMethod()</em> は、<em>$object.Method</em> と略記できます。
  一般的に、利用できる場合はプロパティを使う方が好ましいです。
  プロパティとメソッドの主な違いは、メソッドにはパラメータリストを指定できるということです。
  </p>
</section>

<a name="directives" /><section name="指示子">
  <a name="set" /><subsection name="#set - リファレンスの値を設定">
    <p>
    書式:
    </p>
    
    <p>
    <strong>#set( $</strong>ref <strong>=</strong> [ <strong>"</strong>,
    <strong>'</strong> ]arg[ <strong>"</strong>, <strong>'</strong> ] )
    </p>
    
    <p>
    使い方:
    </p>
    
    <ul>
    	<li><em>$ref</em> - 左辺は、変数リファレンスまたはプロパティリファレンスでなければなりません。</li>
    	<li><em>arg</em> - 右辺において、<em>arg</em> は、ダブルクォーテーションで囲まれた場合解析され、シングルクォーテーションで囲まれた場合解析されません。</li>
    </ul>
    
    <p>
    例:
    </p>
    
    <ul>
      <li>変数リファレンス: #set( $monkey = "bill" )</li>
      <li>文字列リテラル: #set( $monkey.Friend = "monica" )</li>
      <li>プロパティリファレンス: #set( $monkey.Blame = $whitehouse.Leak )</li>
      <li>メソッドリファレンス: #set( $monkey.Plan = $spindoctor.weave($web) )</li>
      <li>数値リテラル: #set( $monkey.Number = 123 )</li>
      <li>オブジェクト配列: #set( $monkey.Say = ["Not", $my, "fault"] )</li>
    </ul>
    
    <p>
    右辺には、単純な算術式も記述できます:
    </p>
    
    <ul>
      <li>加算: #set( $value = $foo + 1 )</li>
      <li>減算: #set( $value = $bar - 1 )</li>
      <li>乗算: #set( $value = $foo * $bar )</li>
      <li>除算: #set( $value = $foo / $bar )</li>
      <li>剰余: #set( $value = $foo % $bar )</li>
    </ul>
  </subsection>

  <a name="ifelse" /><subsection name="#if / #elseif / #else - 条件分岐">
    <p>
    書式:
    </p>
    
    <p>
    <strong>#if(</strong> [condition] <strong>)</strong> [output] [
    <strong>#elseif( </strong>[condition] <strong>)</strong> [output] ]* [
    <strong>#else</strong> [output] ]
    <strong>#end</strong>
    </p>
    
    <p>
    使い方:
    </p>
    
    <ul>
    <li><em>condition</em> - boolean 型の場合、値そのもので true もしくは false と解釈されます。boolean 型以外の場合、null 以外が true と解釈されます。</li>
    <li><em>output</em> - VTL を含みます。</li>
    </ul>
    <p>
    例:
    </p>

    <ul>
       <li>等号演算子: #if( $foo == $bar )</li>
       <li>より大きい: #if( $foo > 42 )</li>
       <li>より小さい: #if( $foo &lt; 42 )</li>
       <li>以上　　　: #if( $foo >= 42 )</li>
       <li>以下　　　: #if( $foo &lt;= 42 )</li>
       <li>数値の等号: #if( $foo = 42 )</li>
       <li>文字列等号: #if( $foo = "bar" )</li>
    </ul>    
  </subsection>

  <a name="foreach" /><subsection name="#foreach - オブジェクトのリストでループ">
    <p>
    書式:
    </p>
    
    <p>
    <strong>#foreach(</strong> $ref1 <strong>in</strong> $ref2
    <strong>)</strong> [ statement... ] <strong>#end</strong>
    </p>
    
    <p>
    使い方:
    </p>
    
    <ul>
    <li><em>$ref1</em> - 最初の変数リファレンスは、アイテムです。</li>
    <li><em>$ref2</em> - 第二の変数リファレンスは、アイテムを持つリストです。</li>
    <li><em>statement</em> - Velocity はリスト ($ref2) 内に有効なアイテム ($ref1) がある間、statement が出力されます。</li>
    </ul>
    
    <p>
    Velocity は、以下のようにループ回数を取得する簡単な方法を提供します。:
    </p>

<source><![CDATA[
<table>
#foreach( $customer in $customerList )
    <tr><td>$velocityCount</td><td>$customer.Name</td></tr>
#end
</table>
]]></source>

    <p>
    ループカウンタの変数リファレンスのデフォルトの名前は、$velocityCount です。
    名前は velocity.properties で指定することが出来ます。
    デフォルトで、カウンタは 1 から開始しますが、
    <code>velocity.properties</code> ファイルで 0 や 1 にセットすることができます。
    <code>velocity.properties</code> ファイルに現れるループカウンタの
    プロパティセクションを示します。
    </p>

<source><![CDATA[
# ループカウンタ変数リファレンスのデフォルト名.
counter.name = velocityCount

# ループカウンタ変数リファレンスのデフォルト開始値.
counter.initial.value = 1
]]></source>

  </subsection>

  <a name="include" />
  <subsection name="#include - ローカルファイルを処理するが、Velocity に解析させない">
    <p>
    書式:
    </p>

    <p>
    <strong>#include( </strong>arg[, arg2, ... argn]<strong> )</strong>
    </p>

    <ul>
    <li><em>arg</em> - TEMPLATE_ROOT 下で有効なファイルを参照します。</li>
    </ul>

    <p>
    例:
    </p>
    
    <ul>
      <li>文字列: #include( "disclaimer.txt", "opinion.txt" )</li>
      <li>変数:   #include( $foo, $bar )</li>
    </ul>
  </subsection>

  <a name="parse" />
  <subsection name="#parse - ローカルテンプレートを処理して Velocity に解析させる">
    <p>
    書式:
    </p>
    
    <p>
    <strong>#parse(</strong> arg <strong>)</strong>
    </p>
    
    <ul>
    <li><em>arg</em> - TEMPLATE_ROOT 下で有効なファイルを参照します。</li>
    </ul>

    <p>
    例:
    </p>

    <ul>
      <li>文字列: #parse( "lecorbusier.vm" )</li>
      <li>変数: #parse( $foo )</li>
    </ul>

    <p>
    再帰解析できます。
    解析レベルを変更するためには、<code>velocity.properties</code >内の <em>parse_directive.maxdepth</em> を確認してください。
    (デフォルトの解析レベルは 10 です。)
    </p>
    
  </subsection>

  <a name="stop" />
  <subsection name="#stop - テンプレートエンジンを停止する">
    <p>
    書式:
    </p>
    
    <p>
    <strong>#stop</strong>
    </p>

    <p>
    使い方:
    </p>
    
    <p>
    現在のテンプレートで実行を止めます。
    テンプレートをデバッグするのに使えます。
    </p>
    
  </subsection>

  <a name="velocimacro" />
  <subsection name="#macro - Velocimacro (VM)を定義する。 
        必要であれば、VTL テンプレートのセグメントで繰り返される">
    <p>
    書式:
    </p>
    
    <p>
    <strong>#macro(</strong> vmname $arg1[, $arg2, $arg3, ... $argn ]
    <strong>)</strong> [ VM VTL code... ] <strong>#end</strong>
    </p>
    
    <ul>
    <li><em>vmname</em> - VM を呼ぶのに使う名前
    (<em>#vmname</em>)</li>
    <li><em>$arg1 $arg2 [ ... ]</em> - VM に対する引数です。引数の数はいくつでもかまいませんが、呼び出し側の引数の数と定義側の引数の数が一致しなければなりません。</li>
    <li><em>[ VM VTL code... ]</em> - テンプレートに置くことができる有効な VTL コードなら何でも、VM に入れることができます。</li>
    </ul>
    
    <p>
    定義された VM は、テンプレート内で他の VTL 指示子と同様に扱われます。
    </p>

<source><![CDATA[
#vmname( $arg1 $arg2 )
]]></source>

    <p>
    VM は、2つの場所のいずれかで定義することができます。
    </p>

    <ol>
    <li><i>テンプレート ライブラリ:</i> Velocity に同梱のVMである場合と、
    カスタムメイドで、ユーザが定義し、サイト固有の VM である場合があります。
    どのテンプレートからでも使えます。</li>
    <li><i>インライン:</i> 通常のテンプレート内で定義されたもので、 <code>velocity.properties</code>内で<em>velocimacro.permissions.allowInline=true</em>となっている場合のみ使用可能です。</li>
    </ol>

  </subsection>

</section>

<a name="Comments" />
<section name="コメント">
    <p>
    コメントは実行時には解析されません。
    </p>
    
    <a name="Single Line" /><subsection name="単一行コメント">
    <p>
    例:
    </p>
    
    <p>
    <strong>## コメントです。</strong>
    </p>
    
    </subsection>
    <a name="Multi Line" /><subsection name="複数行コメント">
    <p>
    例:
    </p>
    
    <p>
    <strong>
    #*<br/>
    複数行コメントです。<br/>
    2行目です。<br/>
    *#
    </strong>
    </p>
    
    </subsection>
</section>

</body>
</document>


