CodeZine(コードジン)

特集ページ一覧

汎用XSLTプリプロセッサ「XmlTransform」

XmlTransformの利用方法

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/04/03 14:00

XmlTransformを使用してHTMLページやSQLドキュメントを生成する方法や、独自の用途にXmlTransformを利用する方法を解説します。

目次

はじめに

 この記事では、汎用のXMLトランスフォーマ/バリデータであるXmlTransformについて解説します。XmlTransformは、変換対象のファイルがどのような深さのディレクトリツリーに格納されていても問題なく機能します。出力時には複数レベルの索引を生成でき、必要に応じてナビゲーションリンクを追加することも可能です。

 XmlTransformの検証機能はかなりシンプルにできていて、変換に使用したXMLファイル一式が妥当かどうかを指定のXMLスキーマに従って検証します。入力ファイルと(変換後の)出力ファイルの両方、あるいはどちらか一方を検証するよう選択できます。

 より興味深いのは変換機能の方です。変換エンジンはよくプリプロセッサとして使用され、Webページを制作するときに大いに役立ちます。

プリプロセッサとHTML

 最新の技法を取り入れた整形式のHTMLは、XMLの名前を真似てXHTMLと呼ばれます。XHTMLには普通のHTMLと比べて、わずかですが重要な違いがあります。XmlTransformを使用すると、XMLファイルをきわめて効率よくWebページに変換できます。XmlTransformでは、実際には任意のXML出力を生成できるのですが、HTMLなど、読者の皆さんが既に知っているであろう具体的なファイル形式を扱った方がプロセスを想像しやすいと思うので、今回の説明ではHTMLの生成に焦点を絞ることにします。

 ところでプリプロセッサとは何でしょうか。また、なぜこれが便利なのでしょうか。どのソフトウェアプロジェクトにおいても言えることですが、メンテナンスには大量のリソースが必要とされ、プロジェクト初期の設計やその後の実装よりも多くのリソースが費やされることもよくあります。プリプロセッサは、このメンテナンスコストの削減に役立ちます。

 たとえば、ある会社のWebサイトを保守しているとします。このサイトは509もの単純なHTMLページから構成されていて、そのそれぞれに一定のサイズのロゴが表示されています。この会社が突然、サイトの見栄え、つまりページヘッダや書体、さらにはロゴのサイズを変更しようと決めた場合、新しいロゴの画像を表示するために500以上のページを1つひとつ編集しなくてはなりません。こういった変更に必要な作業量はページの設計方法に左右されるのですが、ここで重要なのは、この変更作業では、頻繁に登場するWebページ要素に対して同じ変更を繰り返しているということです。

 そこでプリプロセッサの出番です。この考え方はスタイルシートに似ています。スタイルシートでは、あらかじめ定義しておいたスタイルを何度でも利用できます。それと同様に、プリプロセッサでは、スタイルに限らずWebページのあらゆるものに対して同じ処理を実行できます。たとえば、XML内で独自の<footer>要素を作成しておき、そのXMLソースからページを生成するときに、<footer>要素のマーカーを以下のXHTMLコード(コメントを含む)に自動的に置き換えることができます。

<!-- BEGIN footer -->
<div>
  <div style="float:left">
    <img src="image/logo.gif"
      alt="XYZ logo" width="143" height="25"/>
  </div>
  <div style="float:right">
   XYZ Corporation -- (c) 2008 All rights reserved
  </div>
</div>
<!-- END footer -->

 この置換処理は重要です。ソースファイル内の<footer>要素のインスタンスを、ターゲットXHTMLファイル内で上記のコードに展開するためには、展開方法を正確に指定するXSLTを用いて、ソースの「変換」を行う必要があります。上記のHTMLを出力するXSLTコードは以下のようになります。

<xsl:template name="footer">
  <xsl:comment>BEGIN footer</xsl:comment>
  <div>
    <div style="float:left">
      <img src="image/logo.gif" alt="XYZ logo" 
        width="143" height="25" />
    </div>
    <div style="float:right">XYZ Corporation -- &copy; 
       2008 All rights reserved</div>
    </div>
  <xsl:comment>END footer</xsl:comment>
</xsl:template>

 今回はこの記事のダウンロードサンプルに収録されているXSLTファイルを利用しますが、XmlTransformをうまく利用するにはXSLTの理解が不可欠です。作業の大半は、変換をコントロールするXSLTコードの作成に費やされます。簡潔で便利なXSLTを作成するにはかなりの努力が必要ですが、うまくできれば長い間利用できます。

 XmlTransformの設定では、ソースファイルの共通の要素をすべてカプセル化するXMLダイアレクトを独自に定義します。また、その後にXSLTマッピングファイルを作成し、特定のダイアレクトをXHTML(あるいは変換後の任意のXMLダイアレクト)にどのように対応付けるかを指定する必要があります。この初期設定にはある程度時間が必要ですが、一度設定してしまえば、ロゴの変更(あるいは著作権表記などサイト全体を通じて使用される要素の変更)が、XSLTファイル内の1ヶ所を書き換えて出力ファイルを生成し直すだけで簡単に行えるようになります。

 XmlTransformの動作を図1に示します。この図に説明をたくさん詰め込みましたが、1つひとつ分けて考えれば理解しやすいはずです。

図1 実行時のXmlTransformエンジン: 中央に示されているのがXmlTransformの主要な動作ですが、変換元または変換先のツリーに対してスキーマ検証を起動することもできます。変換エンジンのさまざまなオプションを使用した、ツリー操作の細かい制御が可能です。
図1 実行時のXmlTransformエンジン: 中央に示されているのがXmlTransformの主要な動作ですが、変換元または変換先のツリーに対してスキーマ検証を起動することもできます。変換エンジンのさまざまなオプションを使用した、ツリー操作の細かい制御が可能です。

 ここでの目的は変換元のツリー(左上)を変換後のツリー(右下)に対応付けることです。「Schema validator」と「XSLT engine」という3つの黄色い長方形に注目してください。これらはアクティブなコンポーネントで、パスごとのオンとオフを、ブール型のコマンドラインスイッチオプション(図中では丸いスイッチで表現)で切り替えることによって制御します。この切り替えには、xslTransformvalidateInputToSchema、およびvalidateOutputToSchemaのオプションを使用します。図1にはすべてのオプションが点線で囲んで表示されています。inExtensionoutExtensionを使えば、変換元と変換先のファイルに異なる拡張子を指定できます。

 たとえば、XMLをHTMLに変換する場合は、inExtensionに.xmlを指定し、outExtensionに.htmlを指定します。最後に、変換元のツリーの場所(sourcePath)と変換を実行するディレクトリのリスト(dirList)、そしてファイルの出力場所(targetPath)を指定する必要があります。図1では、dirListに指定された変換元ツリー内のディレクトリが赤い長方形で囲まれています。それ以外のディレクトリは変換が行われないので、変換先ツリー内で×印が付いています。他にも考慮すべきパラメータが多数ありますが、そのほとんどはデフォルト値をそのまま使用できます。

 上記以外にも、XmlTransformにはメンテナンスを簡単にする強力な機能が2つあります。それは、サマリ(目次)ページの作成と、ナビゲーションリンクの追加です。以降ではこの2つについて解説します。


  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

あなたにオススメ

著者プロフィール

  • Michael Sorens(Michael Sorens)

    フリーランスのソフトウェアエンジニア。フェニックス大学やコミュニティカレッジでの指導、2冊の本とさまざまな記事の執筆、さらにオープンソースのWebサイトを通して、優れたデザインの種をまき続けている。Fortune 500企業やベンチャー企業でJava、C#、Perl、C、Lisp、PostScrip...

  • japan.internet.com(ジャパンインターネットコム)

    japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.com や EarthWeb.c...

バックナンバー

連載:japan.internet.com翻訳記事

もっと読む

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5