- ベストアンサー
SAXでparseを行う際の妥当性チェックについて
- XMLのパーサーにxercesを利用している場合、SAXでparseを行う際には、DTDとの妥当性をチェックすることができます。
- ただし、通常はカレントディレクトリにあるDTDファイルを参照してチェックしますが、ファイルを無視して指定した文字列でチェックを行うことも可能です。
- 具体的には、SAXParserFactoryクラスのsetValidatingメソッドをtrueに設定し、SAXParserクラスのparseメソッドでXMLをパースするときに、パースするXMLの妥当性をチェックすることができます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> 「a.dtdというファイルからではなく、文字列としてDTDの定義を > 保持しておき、文字列とXMLデータとの妥当性をチェックする」 質問は、ばっちり理解しましたが、回答できるだけの力量がありません (^^; 「何か知っていることがあれば」とのことなので、できる範囲で。 参考URLのひとつめ apache プロジェクトのマニュアルから SAXParser のページを見ると AbstractSAXParser クラスの startDTD() というメソッドがオーバーライドされて います。 こいつには XMLLocator というのを受け取ります(参考URLのふたつめ)。 それを適切に置き換えれば、何か出来そうな気が… 後、DTDGrammar というクラスもちょっと気になります。 # と言いつつ、マニュアルをあさってみましたが、いまいち有効な手段が見当たりません m(_ _)m
その他の回答 (1)
- a-kuma
- ベストアンサー率50% (1122/2211)
SAX は使ったことは無いんですが、マニュアルから分かる範囲で。 > カレントディレクトリにあるa.dtdとの妥当性をチェックしますが、 > これをファイルは無視し、 これは、SAXParseFactory に対して setValidating(true) をしなければ 良いんですよね。念の為、ということであれば setValidating(false) と しておけば良さそう。 > 指定した文字列とチェックをさせる については、それぞれの Handler でチェック込みの処理をすれば良いだけ のことです。
補足
回答ありがとうございます。 私の質問の仕方が悪かった&自分の理解が不十分でした。 すみません。m(__)m 補足します。 Javaで以下の処理をさせたいと考えています。 「a.dtdというファイルからではなく、文字列としてDTDの定義を 保持しておき、文字列とXMLデータとの妥当性をチェックする」 parseする必要はなく、あくまでも"妥当性のチェック"がやりたいのです。 もし、何か知っていることがあれば回答をお願いします。
お礼
回答ありがとうございます。 いろいろ調べましたが、 「a.dtdというファイルからではなく、文字列としてDTDの定義を 保持しておき、文字列とXMLデータとの妥当性をチェックする」 という方法は無理なような気がしてきました。 読み込んだXMLファイルの<!DOCTYPE>を保持しているDTDに変えて、 parseすれば妥当性のチェックはできると思うので、そうします。 ありがとうございました。