<?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>
  <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>Silent表記法: <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 です。
    デフォルトで、カウンターは、1 から開始しますが、
    それは <code>velocity.properties</code> ファイルで 0 や 1 にセットすることができます。
    これは <code>velocity.properties</code> ファイルでのループカウンタの
    プロパティセクションです。
    </p>

<source><![CDATA[
# Default name of the loop counter
# variable refernce.
counter.name = velocityCount

# Default starting value of the loop
# counter variable reference.
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 は、まとめて定義することができます。
    </p>

    <ol>
    <li><i>テンプレート ライブラリ:</i> Velocity に同梱のもしくは custom-made の VM、ユーザー定義 VM、site-specific VM のことで、どのテンプレートからでも有効です。</li>
    <li><i>インライン:</i> <code>velocity.properties</code>内で<em>velocimacro.permissions.allowInline=true</em>となっている場合のみ有効な通常のテンプレート。</li>
    </ol>

  </subsection>

</section>
</body>
</document>


