2009-04-28 15 views
0

私のプロジェクトでは、XMLリクエストとサードパーティへの応答を検証するために使用する非常に大きなXSDファイルがあります。上記のシナリオの場合xsd validation againts xsdがクラスレベルの検証を生成しました

私は2を持つことができますは、XMLを作成し、 2)はXSD世代ツールの助けを借りて、XSDからクラスを作成します所与のXSDに対して検証、attirbutesのエクストラビットを追加し、それらを使用)

1に近づきます検証のため。第二の方法で

検証 a)は、XMLシリアル化 BとオブジェクトにXML要求/応答を変換し、このように多少動作する)、すなわちメソッドにオブジェクトを渡し、各プロパティに設定されたカスタム属性を持つオブジェクトを検証します各プロパティで設定されたプロパティとカスタム属性を反復してオブジェクトを検証します。オブジェクトが検証され、xml要求が有効かどうかを判断する場合はブール値を返します。

ここでは、パフォーマンスとその他の点でどのアプローチが良いかという懸念はありますか?

答えて

0

XMLをオブジェクトにデシリアライズすると、必要な検証が行われることはわかりません。

たとえば、文字列フィールドを定義し、そのフィールドに表示されるテキストをいくつかの正規表現に一致するように制限するXSDを取ります。あなたの生成されたクラスはその制約に敬意を表しますか?このような微妙な問題がいくつかあり、無効なxmlを受け入れるか、そうでなければ有効なxmlを拒否してしまう状況に陥る可能性があります。

サードパーティがあなたにXSDを与えて妥当性を確認している場合は、おそらく短縮版を見つけるのではなく、この契約の定義に固執するのが最善です。

ただし、間違いや間違いがあり、すばやく除外できます。すべてが信号対雑音比に依存しますが、完全なXSDの実行に時間を費やす前に、単純なXSDまたはプログラムテストを作成して「失敗」することを検討することもできます。しかし、多くの失敗があり、XSDで完全に検証するコストが高い場合にのみ、これは意味をなさないでしょう。

また、シナリオで最も高速なXSD検証を使用していることを確認してください。あなたはこれが.NET環境かどうかは言いませんが、そうであれば、XmlDocument、XmlValidatingReader、XElementをXMLを読み込み、schemeに対して検証する3つの方法があります。 XMLをどこから取得したか、後でやっていることなどに応じて、これらのメカニズムのどれがあなたに最高のパフォーマンスをもたらすかを評価する必要があります。

1

のパフォーマンスがの場合は、検証のためにXSDスキーマが添付されたXmlReaderを使用する必要があります。ここに例があります:

// Store a reference to this object 
// to reuse the compiled XSD schema 
// for multiple parsing operations 
XmlReaderSettings settings = new XmlReaderSettings(); 
settings.Schemas.Add("http://www.contoso.com/books", "books.xsd"); 
settings.ValidationType = ValidationType.Schema; 

using (XmlReader reader = XmlReader.Create("books.xml", settings)) 
{ 
    while (reader.Read()) 
    { 
     // Do parsing logic 
    } 
}