■
つぅかこれすげー…
1週間で作るXML検証系?
NvdlReaderはできた。つもり。あとNvdlValidatingReaderさえ出来ればいっちょ上がり。といっても単なるバリデータとしてのXmlReaderというより、ノードをプッシュするXmlReaderの実装みたいなものを作らなきゃいけないはずなんだけど。相変わらず、セマンティクスはほとんど読んでいない。いいのかこんなんで。
うーん、schema rewritingもvalidation provider抽象クラスに追加せんと…ていうか連休が終わっちゃったから、明日からまたDataSetの仕事をやっつけねば…
DataSet.WriteXmlSchema() XmlSerializerNamespaces sucks
なんで? それは、以下のようなコードを実行してみると分かります:
dataset.WriteXmlSchema (Console.Out);
IXmlSerializable ixs = dataset;
XmlSchema schema =ixs.GetSchema ();
schema.Write (Console.Out);
お手元のスキーマで試してみれば分かりますが、この出力は全然違うものになります。つまり、MSのDataSet.WriteXmlSchema()は、XmlSchemaを使っていないのです。ちなみにXmlSchema.Write()はXmlSerializerを使っています1。
重要な違いはxmlns=""の出力。これ、どう逆立ちしてもXmlSerializerでは出力できないんですね。
…というわけで、DataSetのためだけにXmlSchema writerを別途自作するのはあまりにもバカバカしいので、MSにこれどうにかしろ、と投げつつ、Lluisに「MSのXmlSerializerの設計のここは間が抜けてるから真似しないでおこうよ」とお願いしてみることにしました。bug #68008みたいなのはMSには投げられなかったのかねぇ…?
Footnotes
-
書き込みエラーを起こすようなXmlWriterをXmlSchema.Write()に渡してみよう ↩