SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

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

XmlTransformの利用方法

ページの結合

 たとえば、複数のWebページで構成されたチュートリアルのように、自然な順番で表示される一連のWebページがあるとします。各ページには、前後のページや目次ページに移動するためのナビゲーションボタンがあります。ここに新しいページを追加したり、ページを削除したり、あるいはページの順序を変えたりする場合、静的なページを使用していると、おそらく、すべてのリンクを自分で編集しなくてはなりません。これは、時間がかかるうえに間違いを起こしやすい作業です。

 このような連結されたページを図3に示します。各ページに、先頭ページと最終ページ、前のページと次のページ、そして親ページに移動するためのボタンがあります。XSLT変換のマッピングを適切に使用すれば、これらのナビゲーションの連結部分を、XmlTransformで自動的に生成することができます。

図3 周りのページとの連結: XmlTransformによって、親にあたる「web info.html」目次ページが生成されます。このページには、各ページの中央のナビゲーションボタン(「上へ」ボタン)から到達できます。その他のボタンは、子ページ間での前後の移動や先頭および末尾への移動を制御します。
図3 周りのページとの連結: XmlTransformによって、親にあたる「web info.html」目次ページが生成されます。このページには、各ページの中央のナビゲーションボタン(「上へ」ボタン)から到達できます。その他のボタンは、子ページ間での前後の移動や先頭および末尾への移動を制御します。

 図3をよく見ると、すべてのページに「先頭ページ」および「最終ページ」に進むボタンが表示されることがわかります。それに対して、その間にある「戻る」「上へ」「進む」の3つのボタンは条件付きで表示されます。たとえば、先頭ページに「戻る」を表示したり、最終ページに「進む」を表示したくはありません。また場合によっては、2つのボタンが同じページを指すこともあります。たとえば2ページ目に表示される「先頭ページ」ボタンと「戻る」ボタンは、どちらも1ページ目に移動します。

 「上へ」ボタンは、特にディレクトリ構造が深い場合に便利です。先に解説した目次の自動生成処理を思い出してください。一般的な慣例では、あるディレクトリについての「index.html」ファイルは、対象ディレクトリ内に置きます。しかしこの慣例に従うと、生成されるナビゲーションボタンは「index.html」を「戻る」ボタンや「進む」ボタンで移動できるページと同様のものとして扱うため、「上へ」ボタンで移動することができません。これを「親」にするためには、「index.html」を子よりも1つ上のディレクトリに置く必要があります。

 しかし、複数のディレクトリについての目次を生成する場合はどうでしょうか。言うまでもなく、複数のファイルに「index.html」という同じ名前を付けることはできません。これを解決するために、XmlTransformでは、目次ファイルにディレクトリと同じ名前を付けるという方法を採用しています。つまり、「stuff」というディレクトリであれば「stuff.html」という目次ファイルが生成されるのです。

 この2通りの要件を考慮し、XmlTransformでは目次ページの生成方法を選択できるようになっています。つまり、いつもの慣例に従いたい場合は同一ディレクトリに「index.html」という名前で生成し、より自然な階層モデルを使用したい場合(「上へ」ナビゲーションボタンを利用したい場合)は1つ上のディレクトリに「<ディレクトリ名>.html」という名前で生成することができます。

 各Webページのナビゲーションボタンを生成するXSLTコードの一部をリスト1に示します。通常の<body>要素ではなく<cc:body>要素を使用すると、このXSLTが(検索ボックス、ロゴ、メニューなどを表示する他の多くのコードと一緒に)各Webページへ自動的に組み込まれます。あるページのナビゲーション部分として出力されたXHTMLコードの抜粋を以下に示します。よく見ると、このコードは図3の先頭ページ(access.html)からの抜粋であることがわかります。「戻る」ボタンの部分に矢印ではなく空白の画像が配置され、アクティブなリンクも作成されていないからです。

<span style="margin-left:10px" class="headerFont"
    title="Shortcut keys in Internet Explorer:
    1=First, 2=Previous, 3=Next, 4=Last, 5=Up">NAVIGATION:</span>
<span>
     <a href="accessibility.html">
       <img src="/image/firstButton.gif" alt="first page in section"
         width="14" height="14" />
     </a>   
     <img src="/image/dot_clear.gif" alt="" width="14" height="14" />
   
     <a href="../webRules.html">
        <img src="/image/upButton.gif" alt="up one level"
            width="14" height="14" />
     </a>
   
     <a href="antispam.html">
        <img src="/image/nextButton.gif" alt="next page"
            width="14" height="14" />
     </a>
   
     <a href="style.html">
        <img src="/image/finalButton.gif" alt="final page in section"
            width="14" height="14" />
     </a>
</span>

 ここまでの解説で、XmlTransformの基本的な動作と、目次ページを生成する機能、さらにファイル間のナビゲーションを自動化する機能について見てきました。この2つの機能は、XMLをHTMLに変換する場合に非常に便利ですが、その他のXMLダイアレクトに変換する場合には必要ないかもしれません。

XmlTransformの実行

 XmlTransformを実行するには、以下のコンポーネントを読み込む必要があります。

  • Java(バージョン1.5以上)。必要なのはJavaのランタイムエンジンだけです。持っていない場合はSunからダウンロードしてください。
  • XML解析用Xercesライブラリ。
  • XSLT変換用Xalanライブラリ。
  • cleancode-javaオープンソースライブラリ。
  • CleanCodeライブラリ(cleancode.jar)、Xercesライブラリ(xml-apis.jarとxercesImpl.jar)、およびXalanライブラリ(serializer.jarとxalan.jar)のJARファイルをJavaのクラスパスに追加する必要があります。

 動作を確認するために、使用方法を表示するオプションを呼び出します。

> java com.cleancode.xml.XmlTransform --help

 このコマンドを実行すると、利用可能なすべてのコマンドラインオプションが一覧で表示され、それぞれが1行で説明されます。

 オプションの数が多いため、すべてのオプションをパラメータファイルに記述し、コマンドラインからパラメータファイルを参照するという方法も用意されています。その場合は、次の例のようにファイル名の先頭に@マークを指定します。

> java com.cleancode.xml.XmlTransform @myParams.dat

 XmlTransformはパラメータファイル内のオプションを、コマンドラインから入力されたオプションと同じように扱います。ただし、シェル画面には表示されません。コマンドラインから特殊文字(引用符やリダイレクトなど)を直接入力すると、シェルが特殊文字を先に処理するために衝突が起こる場合もありますが、パラメータファイルを使用すれば回避できます。パラメータファイルのもう1つのメリットは、デフォルトのオプションセットを含むパラメータファイルを作成し、その設定を、コマンドラインで直接入力したオプションや別のパラメータファイルで指定したオプションによって上書きしたり、補足したりできるという点です。

 たとえば、「inline.conf」というパラメータファイルに以下の3つのパラメータを記述したとします(わかりやすくするために架空のオプション名を使っています)。

--x1=2
--x2=4.3
--x3=true

 そして、コマンドラインで以下のように指定します。

> java class_name --x1=4 @inline.conf --x4=0.5

 すると、パラメータが挿入され、以下のコマンドラインを指定したのと同じことになります。

> java class_name --x1=4 --x1=2 --x2=4.3 --x3=true --x4=0.5

 x1オプションは2回指定されることになりますが、最後に指定された値が採用されるため、x1の値は4ではなく2になります。したがって、デフォルトのオプションセットを含むパラメータファイルを使用し、そのオプションを必要に応じてコマンドラインから上書きしたい場合は、上記の例のようにパラメータファイルをオプション間に指定するのではなく、先にパラメータファイルを指定し、後からそれを上書きするためのオプションを直接入力します。

 この手法のバリエーションとして、デフォルトのオプションセットを含むパラメータファイルを指定した後に、そのオプションの一部を書き換える別のパラメータファイルを指定することもできます。以下に例を示します。

> java class_name @default.dat @variation-one.dat

次のページ
オプションの要約

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

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

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Michael Sorens(Michael Sorens)

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2333 2008/04/03 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー