XML文書をCocoonでパブリッシュする注文データを表形式で出力さて、これでCocoonによってXML文書をHTMLに変換する手続きについての概要は理解していただけたでしょう。次はもう少し本格的なサンプルを取り上げてみます。WebコンテンツのXML化のようなものも面白いのですが、いきなり複雑なものを取り上げる前に、XMLで表現された帳票データの表示例を紹介しましょう。帳票データといってもいろいろ考えられますが、ここでは以下のような発注データを想定してみます。例ということで非常に単純化してありますが、EDI(電子データ交換)でやりとりされるような発注データを想定しています。実際にはここに発注元や発注先などの情報が追加される形になるでしょう。このデータがXML形式でやりとりされているという設定で、リスト3のような形式のXMLデータとして表現しておきます。order.xml明細ごとのデータを<item>で表現し、それの繰り返しをルートタグである<order>でまとめています。<item>は商品情報を表す<product>と、数量を表す<quantity>から成っています。<product>が表す商品情報は、商品コードを表す<code>、商品名を表す<name>、そして、単価を表す<price>から構成されます。■HTML化のためのスタイルシートを作成するリスト3のXML形式のデータを、Webブラウザで表示できるよう、HTMLに変換してみましょう。ここではWebブラウザに表示させるイメージとして、画面3のようなものを想定してみることにします。Webブラウザ上の表示イメージ画面3を表示するためのHTMLのソースリストは、リスト4のようになります。出力イメージのHTMLソース■再びスタイルシートを作成するそれではこのHTMLへと、元のXMLを変換するためのスタイルシートを作成していきましょう。既存のHTMLのイメージをもとにXSLTのスタイルシートを作成する場合、いろいろなやり方がありますが、ここでは最も簡単なアプローチをとることにします。ルート(/)にマッチするテンプレートを1つだけ作成します。その中に出力イメージをすべて書き込み、必要に応じて<xsl:value-of>などのXSLTの命令を挿入していくのです。凝った出力には向かないやり方ですが、ぱっと見て直感的に出力がイメージできるため、今回のような簡単な出力には向いています。このやり方で準備したスタイルシートをリスト5に示します。order.xslここで新しく用いてるXSLのタグは<xsl:for-each>のみです。このタグは、select属性で選択した各要素について、<xsl:for-each>と</xsl:for-each>の間を繰り返し適用します。この例では、“/order/item”、すなわちルートタグ<order>の直下にある各<item>タグについて、テーブルの行<tr>〜</tr>を出力しています。<xsl:value-of>を用い、<item>の中から商品情報や個数を取り出していることを確認してください。■Cocoonで動作確認それでは念のために動作を確認しておきましょう。最初に、order.xmlの先頭に以下のプロセッシング・インストラクションを追加しておきます。?>Cocoonに対して変換指示を行うために、これらが必要になってくることは先ほど述べました。追加する作業を終えたorder.xmlおよびorder.xslのファイルを、先ほどと同じくsamplesフォルダの下にコピーし、以下のURLをオープンします。http://localhost:8080/cocoon/order.xmlWebブラウザで画面4のような出力が確認できればOKです。注文データサンプルの動作を確認してみるここでは省略しますが、ソースも表示させてみてください。リスト5のスタイルシートが適用されて、リスト4のようなHTMLが出力されていることが確認できるはずです。■わざわざCocoonを使うまでもない?今回は、Cocoonを実際に用いて、XML文書をHTMLに変換するサンプルを2つほど取り上げてみました。今回の内容だけならば、わざわざCocoonを使うほどのことは......と感じた方もいらっしゃるでしょう。そこで次回はCocoonならではの機能を使い、スタイルシートの切り替えなどに挑戦したいと思います。DTDで記述され、XSLTによって生成されている。(2005/8/16)セキュリティ関連のXML仕様に進展あり。