- PR -

SAXについて

1
投稿者投稿内容
未記入
会議室デビュー日: 2004/05/07
投稿数: 4
投稿日時: 2004-05-07 18:15
はじめまして。HIROKOと申します。SAXの動作確認についてお聞きしたい事があります。よろしければご解答頂けたらと思います。

@SAXの妥当性検証をする際にXMLReaderのsetFeatureの設定は何のためにするのでしょうか。
私が試した所、Featureでvalidationの設定をしなくてもパーサーによってDTDを記述しただけで「無視できる空白文字」をcharactersイベントではなくignorableWhitespaceとして取得しています。
 また、XMLReaderにerrorHandlerを実装したクラスを登録した状態でsetFeatureでvalidationがfalseの場合もfatalError等コールバックメソッドが検出されました。
 次に、XMLReaderにContentHandlerを実装したクラスだけを登録(ErrorHandlerを未登録)かつ、FeatureのvalidationがtrueでもfatalError等ErrorHandlerのコールバックメソッドが呼ばれました。
この結果から、これらのfeatureの設定は使用するパーサーによっては設定しないと
validationの検証を行ってくれない場合があるという認識でよろしいのでしょうか。

AXMLプロフェッショナルの試験対策としてお聞きしたいのですが
Webサービスを実現するためには SOAP,WSDL,UDDI 全てが必須ではないというのは
理解できたのですが、逆に必須であるものとして SOAP, WSDLの2つがある。と参考書で学習しました。しかし、例えば2者間でのWebサービス等、限られた範囲の場合WSDLを利用しなくても同等の内容を伝達できればWSDLは必須ではないと思います。
 よってWebサービスとはSOAPもWSDLもUDDIも必須ではなく、XMLを送受信で使用すれば
Webサービスと言ってよいのでしょうか。参考書によって記述内容が違いましたので
教えて頂けたら幸いです。
以上、質問内容がわかりづらいと思いますが、ご教授頂けたらと思います。
失礼します
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-05-07 18:42
とりあえず2番目の質問だけ。

まず、そもそもWebサービスという言葉の定義自体が曖昧なので、どのような定義に従うかに
よります。現時点ではWebサービスというとSOAPを通信プロトコルに使用するものが多いの
ですが、Apache WSIFのように通信プロトコルに依存せずに実装できるものもあります。

最大公約数的な定義を考えると、「通常はネットワーク経由で利用される、実装やプラット
フォームに依存しないソフトウェア部品」というところでしょうか これを実現するには、
データの受け渡しにはXMLを使うのが現時点では妥当と思われますが、それすらも必須でない
と思います。

[ メッセージ編集済み 編集者: uk 編集日時 2004-05-07 19:18 ]
けむ
常連さん
会議室デビュー日: 2003/09/26
投稿数: 40
投稿日時: 2004-05-07 19:12
Webサービスには詳しくないので、1番目についてだけコメントします。

まず、fatalError等が呼ばれたということですが、fatalErrorだけしか呼ばれていないのではないでしょうか?fatalErrorはXMLが整形式ではないときに呼ばれるものであり、妥当性検証とは関係ありません。妥当性違反の場合は、errorが呼ばれます。

また、妥当性検証をしなくてもDTDの読込みは行うので、ignorableWhitespaceが呼ばれるのではないでしょうか?試しに、DTDに違反するような箇所(ignorableWhitespaceが呼ばれるような箇所)に文字列を入力したXMLをパースしてみても、妥当性違反(error)にはなりませんでした。
未記入
会議室デビュー日: 2004/05/07
投稿数: 4
投稿日時: 2004-05-07 20:21
ukさん、けむさん早速のご解答ありがとうございます。
ukさんの解答より、SOAP,UDDI,WSDLがいづれもWebサービスについて必須ではない。と確信できました。ありがとうございます。
けむさんの解答より、DTDの読み込みと妥当性検証の明確な違いが理解できました。ありがとうございます。fatalErrorが呼ばれるという件なのですが、fatalErrorメソッドはErrorHandlerに定義されているメソッドなのでErrorHandlerをパーサーに登録しないと呼ばれないのではないか。と思っていました。お二方アドバイスありがとうございました。
けむ
常連さん
会議室デビュー日: 2003/09/26
投稿数: 40
投稿日時: 2004-05-07 22:38
誤解を招いてしまったようですが、ErrorHandlerをパーサーに登録しないとそのErrorHandlerのfatalErrorは呼ばれませんよ。
未記入
会議室デビュー日: 2004/05/07
投稿数: 4
投稿日時: 2004-05-07 22:50
ご指摘ありがとうございます。けむさんに頂いた私の理解では
@ErrorHandlerを実装したクラス設定無し、DTDあり、Feature設定なし
 →DTDは読み込むので無視できる文字をcharactersではなくignorableWhitespaceで通知

AErrorHandlerを実装したクラス設定、DTD無し、Feature設定なし
 →上記@の内容に加えて、整形式ではないXMLの際にfatalErrorを通知

BErrorHandlerを実装したクラス設定、DTDあり、Feature設定あり
 →@Aに加えて、妥当性違反があった場合にerrorやwarningが検出
と理解いたしました。(fatalErrorはErrorHandlerをパーサーに設定したらDTDと関係なく検出される。)
 
 ここで、warningやerrorは通知してもよい等と参考書には書かれているのですが
例え、ErrorHandlerを実装したクラスを設定したり、Featureでvalidationを設定してもwarning等は通知されない場合もあるということでよろしいのでしょうか。

けむ
常連さん
会議室デビュー日: 2003/09/26
投稿数: 40
投稿日時: 2004-05-10 01:57
fatalErrorは、ErrorHandlerの設定・DTDの有無・Featureの設定に関わらず発生しうるということは、理解しているでしょうか?(場合分けが微妙だったので、念のため)
ErrorHandlerを設定することでそのエラーの発生をハンドリングできるにすぎません。

[W3C XML 1.0 勧告セクション 1.2]にfatalErrorやerrorの定義があります。(warningはfatalErrorとerror以外のようです)
読んでも具体的な記述がないのでよくわかりませんが、私の手元の参考書によると、
fatalErrorは主に整形式制約違反で発生。
errorは主に妥当性制約違反で発生。
warningはDTD記述の不備(参考書には5つ例がありますが、割愛)で発生する可能性がある。実装によっては(参考書の警告の例だけが?警告そのものが?)通知されない場合もある。
となっていました。

「warningやerrorは通知してもよい等と参考書には書かれているのですが・・・」とのことですが、errorに関してもそのように書かれていましたか?

それから、ignorableWhitespaceに関しては、たまたま私が試したパーサーの実装がそうなっていただけかもしれません。SAXの仕様で定められているのかまではわかりません。
未記入
会議室デビュー日: 2004/05/07
投稿数: 4
投稿日時: 2004-05-12 01:15
返信が送れてしまい申し訳ありません。ご丁寧な解答ありがとうございます。けむさんのお答えより再確認できる部分が多々ありました。今後は私の中でもっと整理してからお聞きしたいと思います。尚、
「warningやerrorは通知してもよい等と参考書には書かれているのですが・・・」とのことですが、errorに関してもそのように書かれていましたか?
の部分ですが 私の参考書よりwarningにおいて「XMLパーサがユーザ設定に応じてwarningを発生させてもよい」と記述されていました。
お手数をおかけいたしました。
1

スキルアップ/キャリアアップ(JOB@IT)