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

妥当性の検証(DTDとXML Schema)

XML文書の妥当性(Varidity)のチェックを行うようにします。 DTD(Document Type Definision)と XML Schemaのそれぞれの場合について解説します。


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

・ 準備2:
この後のプログラムの処理の対象となる適当なXMLファイルを用意しておきます。
sample7.xml, sample8.xml, sample9.xml, sample10.xml, sample11.xml, sample12.xml, sample13.xml, sample14.xml
わざと適切でないXMLの記述を含むものも作っておきます。
error7.xml, error8.xml, error9.xml, error10.xml, error11.xml, error12.xml, error14.xml,
データの型を定義するDTD もしくは XML Schema のファイルも用意します。
sample8.dtd, sample9.dtd, sample10.dtd, sample11.dtd, sample12.dtd, sample13.xsd, sample14.xsd,
わざと適切でないXMLの記述を含むものも作っておきます。
error8.dtd, error12.dtd, error14.xsd,
他のファイルから読み込むためのデータファイルも作っておきます。 data12.xml,


・ 基本課題1:「妥当性のチェックを行う」

  1. ソースファイル ParseTest3.java を作成し、コンパイルしなさい。
  2. コマンドラインの引数にデータ型の正しい記述を含む XMLのファイル名を与えて、どんな処理結果が出るか調べなさい。
  3. 以前の型宣言がないファイルを処理しようとすると、 エラーになることを確認しなしなさい。

・ 基本課題2:「ContentHandlerの調整」

  1. 型チェックを厳密に行うようになると、 タグ間にある改行文字などを 「無視すべきスペース文字」として処理するようになります。 そのことを確認しなさい。 それ以外にも MyContntHandlerの出力が少し変化します。 もし、出力が見づらいと思われる部分は適当に修正しておいてください。
  2. ignorableWhitespace()メソッドがどのタイミングで呼びだされているかを 確認しなさい。

・ 基本課題3:「Schemaによる検証」

  1. ソースファイル ParseTest4.java を作成し、コンパイルしなさい。
  2. コマンドラインの引数に sample13.xml, sampel14.xml のファイル名を与えて、どんな処理結果が出るか調べなさい。
  3. これらのサンプルは、 以前のパーサのサンプルで処理しようとするとエラーになること、 逆に ParserTest4では DTDの型定義は処理できないことを確認しなしなさい。

・ 基本課題4:「さらに複雑なSchemaの型定義」

  1. sample13,14には属性の処理はありませんが、 Schemaの属性の扱いを調べて、sample10.dtdに相当するような XSDファイルを考えてみなさい。

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

  1. ErrorHandlerが処理するエラーには 3種類がありましたが、 検証に失敗した時の処理はどの取り扱いでしたか?

・ 応用課題1:「DTDにもSchemaにも対応するパーサ」

  1. ParseTest4 を改良して、 DTDでチェックするか Schemaでチェックするかを、 オプション指定あるいはシステムプロパティを通じて切替えることができるように してみなさい。
  2. あるいは、最初 DTDでチェックを試み、駄目ならば再度 Schemaでチェックするなど の方法で自動的な処理をするようにしてもかまいません。