ここまでの学習を通じて、「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 という行がその関数・手続きを呼び出している、と見なす事が出来ます。