XMLテキストの書き方: スタイルシートの適用

2002年5月26日(日)更新


■スタイルシートの適用

さらら: 外部エンティティを使ったXMLドキュメントにXSLスタイルシートを適用するのにはなにか特別な指定が要るの?

たけち: ううん。XSLスタイルシートの学習でやったのと同じでいいんだよ。

さらら: あっ、なんだ。そうなの。

たけち: それにスタイルシートの内容は、外部エンティティが取り込まれた状態をイメージして指定すればいいんだよ。


■XSLスタイルシートファイルの指定

さらら: じゃあ、外部エンティティを使わないでひとつのファイルでXMLドキュメントを作ったときと同じなのね。

たけち: そうそう。じゃぁ、XSLスタイルシートファイルを指定してみようね。

万葉集サンプルドキュメント(XSL指定有り)

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE manyosyu [
<!ENTITY volume1 SYSTEM "volume1.xml">
<!ENTITY volume2 SYSTEM "volume2.xml">

]>

<?xml-stylesheet type="text/xsl" href="sample-2.xsl"?>

<manyosyu>
&volume1;
&volume2;

</manyosyu>

さらら: あ・・・緑色で書いたところね。前に学習したスタイルシートの指定と同じね。安心したわ。"sample-2.xsl"は今回見せてくれるサンプルのXSLスタイルシートのファイル名ね。

たけち: そうそう。じゃあ、そのXSLスタイルシートの内容を見てみよう。特別なことはしていないからすぐにわかると思うよ。

さらら: うん!


■XMLスタイルシートのサンプル

たけち: じゃあ、つぎの図を見てね。サンプルドキュメントmanyosyu(万葉集)第1巻第2巻から構成されているよね。だから、ここでは第1巻第2巻を区別するようなスタイルシートになっているんだ。

さらら: 巻ごとにvolume要素で分かれているから、それがわかるように表示するのよね。

スタイルシートのサンプルの概要

たけち: そうそう。そして、volume要素のpno属性に巻数が入っているから、これを表示に利用しよう。じゃあ、次にスタイルシートのリストを載せておこうね。

スタイルシートのリスト "sample-2.xsl"

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <html>
  <head>
  <title>たのしいXML: 外部エンティティの利用とXSL適用</title>
  <link rel="stylesheet" type="text/css" href="manyo-2.css" />
  </head>

  <body>

  <xsl:apply-templates />

  </body>
  </html>
</xsl:template>


<xsl:template match="volume">
<p class="subtitle">■万葉集第<xsl:value-of select="@no" />巻(抜粋)</p>

<table border="0" width="500" align="center">
  <xsl:apply-templates />
</table>
</xsl:template>


<xsl:template match="poem">
<xsl:if test="(pno mod 2) = 0">
  <tr>
    <th>歌番号: <xsl:value-of select="pno" /></th>
    <th>作者:<xsl:value-of select="poet" /></th>
  </tr>
  <tr>
    <td colspan="2"><xsl:value-of select="yomi" /></td>
  </tr>
  <tr>
    <td><xsl:value-of select="mean" /></td>
    <td>
      <img>
      <xsl:attribute name="src">
      <xsl:value-of select="image" />
      </xsl:attribute>
      </img>
    </td>
  </tr>
</xsl:if>
</xsl:template>

</xsl:stylesheet>

さらら: うんうん。わかるわ。でも、<xsl:if test="(pno mod 2) = 0">ってどうしてあるの?

たけち: あっ、全部表示するとイメージが多いので重たくなるから、歌の数を絞り込むために入れたんだ。

さらら: そっか。これで偶数番号の歌だけを表示するようにしているのね。

たけち: そうそう。じゃあ、サンプルへのリンクを次に載せておくからクリックしてみて(Internet Explorer 6.0をお使いくださいね。)。

外部エンティティ参照/スタイルシート適用のサンプル: ext_sample-2.xml

外部エンティティ参照/スタイルシート適用のサンプルの表示結果

さらら: あっ、見えた見えた。それぞれの巻を示したタイトルと歌を載せた表がちゃんと見えるわね。

たけち: これで、外部エンティティを使ったXMLドキュメントの表示の仕方がわかったね。このコーナーでの学習はひととおり終わりです。

さらら: は〜い。ありがと。