プログラミング基礎 II

第十二回 (2007年 1月10日)

名前付きテンプレート

http://www.sw.it.aoyama.ac.jp/2006/PB2/lecture12.html

Martin J. Dürst

duerst@it.aoyama.ac.jp

O 棟 529号室

AGU

© 2007 Martin J. Dürst 青山学院大学

今日の予定

去年の復習

去年の演習

演習 1

本をテーブルとして出力する変換ファイルを次のように変更する:

正解例: tableStripes.xsl, その出力: resultStripes.html

演習 2

今まで使った簡単な変換ファイルをベースに、<xsl:apply-templates> を少しずつ <xsl:for-each> (や <xsl:value-of>) に変換。

注意: この演習はあくまで <xsl:apply-templates><xsl:for-each> の関係や複数の <xsl:for-each> の限界を実感するためのもので、このような「団子変換」を絶対使って欲しくない。

正解例: tableClump.xsl (出力は <xsl:apply-templates> を使ったものと変わらない)

ミニテストの返却

準備不足の学生がいました

正解例公開 (正解例を見るためにはブラウザのメニューから「表示」→「スタイル」→「solution」を選ぶ)

定期試験の予定

1月22日 (月曜日) 3時限 (13:10-14:10)

名前付きテンプレートの目的

名前付きテンプレートの基本形

<xsl:template name='greeting'>
  <p>Hello <strong>dear customer</strong>!</p>
</xsl:template>

名前付きテンプレートの呼び方

<xsl:template ...>
  ...
  <xsl:call-template name='greeting'/>
  ...
</xsl:template>

引数

parameter (ひきすう)

引数の例

<xsl:template name='greeting'>
  <xsl:param name='who' select='"customer"'/>
  <p>Hello <strong>dear <xsl:value-of select='$who'/></strong>!</p>
</xsl:template>
...
<xsl:call-template name='greeting'>
  <xsl:with-param name='who'>青山 例子</xsl:with-param>
</xsl:call-template>

応用例: 階乗を計算するテンプレート

<xsl:template name='階乗'>
  <xsl:param name='n'/>
  <xsl:choose>
    <xsl:when test='$n = 1'>1</xsl:when>
    <xsl:otherwise>
      <xsl:variable name='n1'>
        <xsl:call-template name='階乗'>
          <xsl:with-param name='n' select='$n - 1'/>
        </xsl:call-template>
      </xsl:variable>
      <xsl:value-of select='$n * $n1'/>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

再帰

<xsl:param> のもう一つの使い方

演習 1

  1. 応用例 (階乗) を使った変換ファイルを作成して、何かの数字の階乗を計算してください

    ヒント:

  2. 1. を変更して、n を外から指定できるようにする

正解例: fac.xsl

演習 2

提出: 1月13日 (土曜日) 22:00 までに Moodle に投稿

(例えば新年の) 挨拶文を (X)HTML で出力する変換ファイルを作る。

相手の名前と挨拶文の回数は外側から指定できるようにする。

ヒント: 「n 回の挨拶文」を階乗と同じように定義する