相変わらずDiffgramにはまる

先日のエントリで言及した、生成したDiffgramを読めない問題だが、

Exception: System.Data.DataException
Message: diffGram を読み込めません。'sql' ノードが見つかりません。

何故この例外が発生するかが、やっと判明した。

問題のDiffgramをもう一度見てみる。


    
        
            Kazzz
            日本のどこか
            53/27/2006 02:53:55
        
    
    
        
    

当該メソッドであるXMLDiffLoader::ProcessErrorsを調べてみたが、この例のerrors要素配下の要素のLocalName(ここでは"Table"だ)と同じ名前を持つデータテーブル(System.Data.DataTable)が、ReadXMLを実行したデータセット(System.Data.DataSet)内に既に存在していない場合に例外が発生するらしい、ということが判った。(ソースコードは無いのが前提なので、あくまで推測。)

Diffgramはその名前の通り、データセットに対する差分(Diff)を表現(gram)するXMLだが、なんと、XML内での整合性は元より、生成したDiffgramの元になったデータセット(System.Data.DataSet)との整合性も意識しなくてはならないようだ。読み込む際にその文書内で整合性が閉じてないXML文書なんて今までで初めてかもしれない。(と思ったが、SOAP文書はある意味、処理系に依存させることができるかもしれない)

それにしてもなんで例外のメッセージが「'sql' ノードが見つかりません。」なんだ。未だに意味不明。