・   「Java/XML入門」実習 第5回

名前空間、XLSTと変換フィルタ

名前空間、XLSTと変換フィルタの処理について解説します。


・ 準備1(学内向け):
マシンを立ち上げ、UNIX(Linux)かWindowsのいずれかの環境でログインしなさい。
端末エミュレータのウィンドウ(kterm もしくは Cygwin)を開き、 そこで以下の作業をしてください。

・ 準備2:
この後のプログラムの処理の対象となる適当なXMLファイルを用意しておきます。 sample4.xml, sample5.xml, sample6.xml, error4.xml, error5.xml, わざと適切でないXMLの記述を含むものも作っておきます。
この後のプログラムの処理で利用するXSLTファイルも用意しておきます。 doc2html.xsl, doc2html2.xsl, doc2html3.xsl


・ 基本課題1:「ContentHandlerの改造」

  1. ソースファイル MyContentHandler.java の出力部分を Name Spaceの処理に対応できるように改造します。
  2. コンパイルしなさい。(このクラスは単独では実行できません。 次の課題に進みなさい。)

・ 基本課題2:「パーサにネームスペースを認識させる」

  1. ソースファイル ParseTest2.java を作成し、コンパイルしなさい。
  2. コマンドラインの引数に準備しておいたネームスペースの記述を含む XMLのファイル名を与えて、どんな処理結果が出るか調べなさい。
  3. 以前の ParserTest で処理した場合と、出力を比較してみなさい。

・ 基本課題3:「startPrefixMapping(),endPrefixMapping()」

  1. sample4.xml, sample5.xmlを ParseTest2 で処理した時の出力から、 ContentHandlerの startPrefixMapping(),endPrefixMapping() メソッドがどのようなタイミングで呼び出されているか確認しなさい。

・ 基本課題4:「ネームスペースの記述の検証」

  1. ネームスペースを認識するようになると、パーサの処理がより厳格になります。 error4.xml, error5.xml について、ParseTest と ParseTest2で処理した場合、 どのような違いが生じるか調べなさい。

・ 基本課題5:「XSLTによるフィルタ処理」

  1. ソースファイル XSLTTest.java を作成し、コンパイルしなさい。
  2. 実行すると、sample6.xmlを元にして生成される sample6.htmlが生成されるはずです。確認しなさい。

・ 基本課題6:「XSLTによるフィルタ処理(2)」

  1. 前問のサンプルはファイル名が全て固定なため、 別のファイルを処理するのに不便です。 XSLTファイルの名前はコマンドライン引数から受け取るようにしなさい。
  2. さらに複雑な記述を持つ XSLTファイルから、 sample6.html がどう生成されるか調べてみなさい。

・ レポート課題:
ここまでの課題が終わった人は、下記の項目を tatsuo宛のメール で報告しなさい。 Subject(件名):は java5 としてください。

  1. ContentHandlerの endPrefixMapping() が呼び出されるのは、どのタイミングでしたか? またアプリケーションにとって、 この通知はどのような意味を持つと考えられますか?
  2. error4.xml, error5.xmlのエラーの理由を説明しなさい。
  3. 課題5によって生成された sample6.html の内容

・ 応用課題1:「ネームスペースの定義」

  1. 自分で定義したネームスペースを含む XMLファイルを作成しなさい。
  2. それを上記のプログラムで処理して結果を確認しなさい。

・ 応用課題2:「ネームスペースの使用の切替え」

  1. ParseTest2 を改良して、 ネームスペースを認識する、しないをオプション指定 あるいはシステムプロパティを通じて切替えることができるように してみなさい。

・ 応用課題3:「実装クラスのソース」

  1. J2SE SDK 1.4 のソースファイルのディレクトリ、 および、 Apache XML Projectのサイト からダウンロードしたソースファイルを調べて、 ネームスペースの処理の呼び出しのコントロール、 および処理自体がどのクラスの中で、どのように行われているのか考えなさい。

・ 応用課題4:「XSLTのさらに実験」

  1. XSLTファイルの名前だけではなく、処理の対象のXMLファイルの名前も コマンドライン引数から受け取るようにしなさい。
  2. さらに複雑な記述を持つ XMLファイルも 処理できるXSLTファイルを作成して実験してみなさい。