SHOEISHA iD

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

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

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

japan.internet.com翻訳記事

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

XmlTransformの利用方法

オプションの要約

 以下はXmlTransformで使用可能なすべてのオプションの一覧です。後述の各ステップでは、これらのオプションを論理的に分類して詳しく説明します。さらに詳しく知りたい場合は、XmlTransform APIを参照してください。

contentsBaseName       -- 目次ファイルのベース名(indexなど)
contentsToParent       -- 目次を親ディレクトリと同じディレクトリの
                          どちらに置くかをブール値で指定
debug                  -- Trueの場合にすべて(ライブラリを含む)の
                          診断を有効にする
diagList               -- アクティブにする診断を1文字の文字列で指定
dirList                -- 処理対象のディレクトリをコンマで区切って指定
enable                 -- 処理を行う場合はTrue、
                          レポートのみの場合はFalse
generateContents       -- 目次を生成するかどうかをブール値で指定
generatorNode          -- ジェネレータ情報で置き換えるノードのタグ名
groupIdXpath           -- 各ファイル内のグループIDノードを指す
                          簡単なXpath
groupPlaceHolder       -- 目次ファイル内でファイルリストを挿入する
                          タグの名前
help                   -- この一覧を表示する
inExtension            -- 処理対象のファイルの拡張子
inputSchemaSource      -- 入力の検証用グローバルスキーマファイル
outExtension           -- 変換後のファイルの拡張子
outputSchemaSource     -- 出力の検証用グローバルスキーマファイル
processAll             -- Trueの場合、日付スタンプをチェックせずに
                          処理する
sourcePath             -- 変換元のXMLツリーのルート
startDepth             -- ツリーの最上位から各自の相対ルートまでの
                          ディレクトリ数
targetPath             -- 変換先のXMLツリーのルート
validateInputToSchema  -- 入力の検証をブール値で指定
validateOutputToSchema -- 出力の検証をブール値で指定
validateXslBySchema    -- 必要なXSLファイルの検証をブール値で指定
xslName                -- 各ディレクトリのプライマリXSLファイル
xslParmList            -- XSLパラメータをコンマで区切って指定
xslSchema              -- XSLファイルのスキーマファイルの名前
xslTransform           -- XSL変換をブール値で指定

 XmlTransformで利用可能なオプションのうち、このアプリケーション固有でないものを以下に示します。CleanCode診断システムを使用するアプリケーションであれば、必ずこれらのオプションを使用できます。Diagnostic APIのすべてが説明されたドキュメントをこちらで参照できます。

.*_DIAG                -- すべてのクラスの診断レベル
CREATE_DIAG            -- オブジェクト作成の診断レベル
DIAG_LEVEL             -- 診断マスク
ENV_DIAG               -- システム環境の診断レベル
FORMATTER              -- Webチャネルの書式設定のクラス名
LOG_DIAG_NAME          -- 通常のメッセージのベースファイル名
LOG_DIR                -- ログファイルの作成先ディレクトリ
LOG_ERR_NAME           -- 警告/エラーメッセージのベースファイル名
OUTPUT_DIAG            -- 通常のメッセージの出力チャネル
OUTPUT_ERR             -- 警告/エラーメッセージの出力チャネル
SHOW_THREAD            -- スレッド情報の表示/非表示の切り替え
TRACE_DIAG             -- メソッド入/出の診断レベル
TRACE_INDENT           -- ネストされた出力のインデント文字列
VERSION_DIAG           -- モジュールのバージョン管理の診断レベル
WARNINGS_ON            -- 警告メッセージの表示/非表示の切り替え

 サンプルプロジェクトの完全なパラメータファイルをリスト2に示します。以降では、各オプションに値を正しく設定する方法についてさらに詳しく説明します。

ステップ1:何を?

 XmlTransformでは多数のブール型オプションを使用して、各機能の有効と無効を切り替えます。

  • xslTransformでは、指定されたXSLTを使用してファイルを検証するだけでなく、入力から出力へ変換を行うことを指定します。
  • generateContentsでは、入力ツリー内に目次ファイルを生成することを指定します(前述の目次テンプレートファイルを使用)。
  • validateInputToSchemaでは、XMLスキーマ定義を使用して入力を検証することを指定します。
  • validateOutputToSchemaでは、XMLスキーマ定義を使用して出力を検証することを指定します。
  • validateXslBySchemaは高度な目的に使用されるオプションで、XSLファイルそのものを検証することを指定します(xslTransformが有効になっていればどのエラーもすぐに見つかるのであまり使用されません)。

ステップ2:どこへ?

 入力ファイルのツリーの場所(sourcePath)と出力ファイルのツリーの生成場所(targetPath)を指定します。指定しなければ、デフォルトでどちらも現在のディレクトリにセットされます。次に、入力ファイルの拡張子(inExtension)と出力ファイルの拡張子(outExtension)を指定します。デフォルトではinExtensionがxml、outExtensionがhtmlです。

ステップ3:何を使って?

 各ファイルを変換するには、変換情報を定義したXSLファイルをxslNameに指定する必要があります。絶対パスで指定した場合、XmlTransformはすべてのサブディレクトリに対してそのファイルを使用しますが、ファイル名のみ(stuff.xslなど)を指定した場合は、処理対象のサブディレクトリ内でその名前のファイルを探します。ファイルが見つからなければルートディレクトリ(sourcePath)を探します。これを利用して、XSLファイルを柔軟に指定することができます。つまり、グローバルなXSL定義を1つ指定し、一方で特別な処理が必要なサブディレクトリでは定義を上書きすればよいのです。あるいは、ルートにXSLファイルを置かず、処理を行いたいサブディレクトリにだけXSLファイルを格納するという方法も便利です。

 特定のサブディレクトリで目次を生成する場合は、XMLテンプレートファイルを指定する必要があります。これは他のファイルと同じく普通のXMLファイルですが、前にも説明したように、他のファイルを参照してリストを作成するためのプレースホルダが1つ以上記述されます。テンプレートファイルの名前は、「_myDir.xml」などのように、アンダースコア(_)、contentsBaseNameの値、ドット(.)、inExtensionの値を並べるというルールに従って作成しなければなりません。

 XmlTransformはテンプレートにデータを挿入し、データが挿入されたファイルを中間ファイルとして入力ファイルツリーに格納します。この中間ファイルの名前は、目次ファイルを参照先ファイル群と同じディレクトリに格納するか、その親ディレクトリに格納するか(contentsToParent)によって変わります。同じディレクトリに格納する場合は、テンプレートと同じベース名(contentsBaseName)、ドット(.)、inExtensionの値を並べた名前になります(アンダースコアは付けません)。さらに、目次項目を目次テンプレートのどこに挿入するかを、グループプレースホルダ(groupPlaceHolder)で指定する必要があります。

 中間ファイルは変換元のツリーに作成されるので、目次ファイルをうっかり上書きしないように注意する必要があります。しかし、それをXmlTransformでチェックすることはできません。なぜなら、前回の実行時に作成されたファイルと区別が付かないからです。そのため、生成される中間ファイルの指定のノードにジェネレータIDの文字列を書き込み、そのノードの存在を調べてファイルを上書きしてよいかを判断するようになっています。このジェネレータIDの文字列をXMLのどの要素で受け取るかはgeneratorNodeオプションに指定します。最後に、目次ファイルの生成ではgroupIdXpathオプションが必要です。ここには各ファイルのグループ識別子の検索に使用するXPath式を指定します。

次のページ
ステップ4:どのように?

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

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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー