XmlValidatingReader is now obsolete

.NET Framework2.0β2におけるXMLの読込みに関してXmlValidatingReaderクラスは既にobsolteだった。(一瞬びびったけれど)コンクリートクラスを使用せずにFactoryパターンに移行するだけらしい。
.NET2.0によるDTD検証を行うXmlReaderの生成

//リゾルバの生成(ここではXmlUrlResolverクラスを使用)
XmlResolver resolver = new XmlUrlResolver();

//設定オブジェクトの生成
XmlReaderSettings settings = new XmlReaderSettings();
settings.XmlResolver = resolver;
settings.ProhibitDtd = false;
settings.ValidationType = ValidationType.DTD;
//検証時のイベントハンドラも設定オブジェクトのプロパティ
settings.ValidationEventHandler += delegate(object sender, ValidationEventArgs e)
{
    Console.WriteLine("Validation Error: {0}", e.Message);
};
//XMLReaderの生成
XmlReader reader = XmlReader.Create("http://host/data/hogehoge.xml", settings);
〜

見慣れないプロパティXmlReaderSettings.ProhibitDtdはDTDの脆弱性を突くDoS対策で追加されたらしい。どのように使うんだろう。Prohibitということはtrue(Dafault)でDTDのパースを禁止するってことかな。(※1)

ADO.NETといい.NET2.0はFactoryパターン等のGofデザイパターンをかなり意識的に採用しているみたいですね。少し前まではそういうのにこだわらない(むしろ自分でを作っちゃう)のがMSだとイメージしていたのだけれど最近はそうでもないらしい。

そういやMSDNマガジンの邦訳にこんな記事もありました。

NET Framework で使用されているデザイン パターンを見つける

※1実際に試してみるとこのプロパティをtrueにセットするか何もセットしない場合はリゾルバ経由でDTDを食わせてもXmlException(DTD の使用はこのXMLドキュメントでは禁止されています。)がスローされてXML自体パースできませんでした。DTDXML文書内に定義しても同様でした。DTDの検証を行う場合はこのコードのように明示的にfalseをセットしなければならないようです。