C-8 XSL (1)

 ここまでの学習を通じて、「XML 文書も HTML 文書と同じように Web ページに表示できないのかな?」と思った人がいることと思います。それは可能です。実は、HTML へ簡単に変換して表示出来ることが、XML のもう一つの長所なのです。ここでは、XSL (eXtensible Stylesheet Language) と呼ばれる仕組みを使って、XML 文書を HTML へと変換して表示させる方法を学びましょう。

XML 文書に関するプログラミングは前節まででほぼ終わりです。本節と次節は (プログラミング学習にとっては)付録の様な内容ですが、最近は「XML がビジネスを変える!」等という見出しが雑誌をにぎわすようになりました。ここで説明した内容を知っておくと、きっと役に立ちますよ。

それでは早速、C-5 で表示させた

という XML 文書を HTMLへと変換して表示させてみましょう。

【練習問題】

まずは、この XML 文書に次の1行を書き加えて下さい。

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet type="text/xsl" href="data.xsl"?>
<メンバーデータ>
  <団体名>青空テニスクラブ</団体名>
  <メンバー>佐藤一郎 石川県 090-1234-5678</メンバー>
  <メンバー>鈴木二郎 宮崎県 070-8765-4321</メンバー>
  <メンバー>宮崎三郎 福島県 024-681-3579</メンバー>
  <メンバー>石川花子 北海道 0123-45-6789</メンバー>
  <メンバー>佐藤四郎 東京都 03-3333-3333</メンバー>
</メンバーデータ>

この1行は、「data.xsl というファイルの内容に従って XML を変換せよ」という意味の行です。

次に、以下の内容で data.xsl というファイルを作ります。

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

<xsl:template match="/">
  <html lang="ja">
    <head>
      <title>メンバーデータ</title>
    </head>
    <body>
      <xsl:apply-templates select="メンバーデータ" />
    </body>
  </html>
</xsl:template>

<xsl:template match="メンバーデータ">
  <xsl:apply-templates select="団体名" />
  <xsl:apply-templates select="メンバー" />
</xsl:template>

<xsl:template match="団体名">
  <h1><xsl:value-of /></h1>
</xsl:template>

<xsl:template match="メンバー">
  <p><xsl:value-of /></p>
</xsl:template>

</xsl:stylesheet>

改めて data.xml を表示させてみましょう。HTML 文書として表示されましたか?

この data.xsl を順に解説します。

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

この2行は、この文書が XSL 文書であることを示しています。どんな XSL 文書にも必須です。

<xsl:template match="/">
  <html lang="ja">
    <head>
      <title>メンバーデータ</title>
    </head>
    <body>
      <xsl:apply-templates select="メンバーデータ" />
    </body>
  </html>
</xsl:template>

最初と最後の xsl:template で囲まれた部分が、XSL 文書の中のひとまとまりになります。最初の行の match="/" という部分が、「XML 文書を変換する一番最初に、このまとまりを出力せよ」ということを意味しています。そのため、この囲まれた部分が出力されます。

途中にある <xsl:apply-templates select="メンバーデータ" /> という行は、「XML 文書の中に『メンバーデータ』という要素 (節) が見つかれば、そこの部分の出力は <xsl:template match="メンバーデータ">から始まるひとまとまりに任せる」という意味です。

<xsl:template match="メンバーデータ">
  <xsl:apply-templates select="団体名" />
  <xsl:apply-templates select="メンバー" />
</xsl:template>

これは、「メンバーデータ」という要素 (節) が見つかった場合の動作を示すひとまとまりです。

2行目の <xsl:apply-templates select="団体名" /> は、「XML 文書の中に『団体名』という要素 (節) が見つかれば、そこの部分の出力は <xsl:template match="団体名">から始まるひとまとまりに任せる」という意味です。

3行目の <xsl:apply-templates select="メンバー" /> は、「XML 文書の中に『メンバー』という要素 (節) が見つかれば、そこの部分の出力は <xsl:template match="メンバー">から始まるひとまとまりに任せる」という意味です。

<xsl:template match="団体名">
  <h1><xsl:value-of /></h1>
</xsl:template>

これは、「団体名」という要素 (節) が見つかった場合の動作を示すひとまとまりです。

2行目の <h1><xsl:value-of /></h1> は、「<h1> + この要素の内容 (つまり団体名) + </h1> と出力せよ」という意味です。

<xsl:template match="メンバー">
  <p><xsl:value-of /></p>
</xsl:template>

これは、「メンバー」という要素 (節) が見つかった場合の動作を示すひとまとまりです。

2行目の <p><xsl:value-of /></p> は、「<p> + この要素の内容 (つまりメンバー) + </p>と出力せよ」という意味です。

このように読み解くと分かる通り、xsl:template の行で囲まれた部分は、プログラムにおける関数・手続きのようなものです。そして、xsl:apply-templates という行がその関数・手続きを呼び出している、と見なす事が出来ます。