OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

SAXでparseを行う際の、DTDとの妥当性チェックついて

  • すぐに回答を!
  • 質問No.190848
  • 閲覧数485
  • ありがとう数4
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 53% (55/102)

Java&XMLの初心者です。
用語の使い方など間違っているかもしれませんが、
よろしくお願いします。

XMLパーサーにxercesを利用しています。

以下のようなXMLをがあったときに、
<?xml version="1.0"?>
<!DOCTYPE a SYSTEM "a.dtd">
<a>
<b>1</b>
<b>1</b>
</a>

以下のコードを実行すると、
 SAXParserFactory f = SAXParserFactory.newInstance();
 f.setValidating(true);
 SAXParser p = f.newSAXParser();
 p.parse((InputSource)xml, handler);

カレントディレクトリにあるa.dtdとの妥当性をチェックしますが、
これをファイルは無視し、指定した文字列とチェックをさせるなどと
いうことは可能でしょうか?
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル14

ベストアンサー率 50% (1122/2211)

> 「a.dtdというファイルからではなく、文字列としてDTDの定義を
>  保持しておき、文字列とXMLデータとの妥当性をチェックする」

質問は、ばっちり理解しましたが、回答できるだけの力量がありません (^^;
「何か知っていることがあれば」とのことなので、できる範囲で。

参考URLのひとつめ apache プロジェクトのマニュアルから SAXParser のページを見ると
AbstractSAXParser クラスの startDTD() というメソッドがオーバーライドされて
います。

こいつには XMLLocator というのを受け取ります(参考URLのふたつめ)。
それを適切に置き換えれば、何か出来そうな気が…

後、DTDGrammar というクラスもちょっと気になります。


# と言いつつ、マニュアルをあさってみましたが、いまいち有効な手段が見当たりません m(_ _)m
お礼コメント
ns18

お礼率 53% (55/102)

回答ありがとうございます。

いろいろ調べましたが、
「a.dtdというファイルからではなく、文字列としてDTDの定義を
 保持しておき、文字列とXMLデータとの妥当性をチェックする」
という方法は無理なような気がしてきました。

読み込んだXMLファイルの<!DOCTYPE>を保持しているDTDに変えて、
parseすれば妥当性のチェックはできると思うので、そうします。
ありがとうございました。
投稿日時 - 2001-12-27 14:45:32
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル14

ベストアンサー率 50% (1122/2211)

SAX は使ったことは無いんですが、マニュアルから分かる範囲で。 > カレントディレクトリにあるa.dtdとの妥当性をチェックしますが、 > これをファイルは無視し、 これは、SAXParseFactory に対して setValidating(true) をしなければ 良いんですよね。念の為、ということであれば setValidating(false) と しておけば良さそ ...続きを読む
SAX は使ったことは無いんですが、マニュアルから分かる範囲で。

> カレントディレクトリにあるa.dtdとの妥当性をチェックしますが、
> これをファイルは無視し、

これは、SAXParseFactory に対して setValidating(true) をしなければ
良いんですよね。念の為、ということであれば setValidating(false) と
しておけば良さそう。

> 指定した文字列とチェックをさせる

については、それぞれの Handler でチェック込みの処理をすれば良いだけ
のことです。
補足コメント
ns18

お礼率 53% (55/102)

回答ありがとうございます。

私の質問の仕方が悪かった&自分の理解が不十分でした。
すみません。m(__)m

補足します。

Javaで以下の処理をさせたいと考えています。
「a.dtdというファイルからではなく、文字列としてDTDの定義を
 保持しておき、文字列とXMLデータとの妥当性をチェックする」
parseする必要はなく、あくまでも"妥当性のチェック"がやりたいのです。

もし、何か知っていることがあれば回答をお願いします。
投稿日時 - 2001-12-26 17:09:55


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ