2009-04-28 6 views
0

In meinem Projekt habe ich sehr große XSD-Datei, die ich verwende, um einige XML-Anfrage und Antwort auf eine dritte Partei zu validieren.xsd validierung againts xsd generierte klasse level validation

Für das obige Szenario kann ich 2 haben Ansätze

1) XML erstellen und dann validieren gegen give XSD 2) Erstellen Sie Klassen aus XSD mit Hilfe von XSD gen Werkzeug, xtra wenig attirbutes hinzufügen und sie verwenden zur Validierung.

Validation in der zweiten Art und Weise wird ein wenig auf diese Weise arbeitet, a) XML-Anfrage/Antwort in Objekt mit XML Serialisierung b) validieren, das Objekt mit benutzerdefinierten Attributen umwandeln auf jede Eigenschaft festgelegt, dh, Übergeben die Aufgabe ein Verfahren Das validiert das Objekt, indem es durch Eigenschaften und seine benutzerdefinierten Attribute, die für jede Eigenschaft festgelegt sind, iteriert. Dadurch wird ein boolescher Wert zurückgegeben, wenn das Objekt validiert wird und bestimmt, ob die XML-Anforderung gültig ist oder nicht.

Jetzt die Sorge, welche Ansatz in Bezug auf Leistung und alles andere gut ist ???

Antwort

0

Ich bin nicht sicher, dass die Deserialisierung Ihres XML in ein Objekt Ihnen die erforderliche Validierung geben wird.

Nehmen Sie zum Beispiel eine XSD, die ein Zeichenfolgenfeld definiert und dann den Text einschränkt, der in diesem Feld angezeigt werden kann, um mit einem regulären Ausdruck übereinzustimmen. Wird Ihre generierte Klasse diese Beschränkung einhalten? Es gibt eine Reihe von subtilen Problemen wie diese, die Sie in eine Situation bringen können, in der Sie entweder ungültiges xml akzeptieren oder ansonsten gültiges xml ablehnen.

Wenn Ihre dritte Partei Ihnen eine XSD zur Validierung gegeben hat, ist es wahrscheinlich am besten, dass Sie sich an diese Vertragsdefinition halten, anstatt Abkürzungen zu finden.

JEDOCH können Sie feststellen, dass es häufig Fehler und Fehler gibt, die Sie schnell ausfiltern können. Alles hängt von Ihrem Signal-Rausch-Verhältnis ab, aber Sie könnten in Erwägung ziehen, einen einfachen XSD- oder einen programmatischen Test zu erstellen, der "schnell ausfallen" kann, bevor Sie dann Zeit für die Ausführung des vollständigen XSD investieren. Dies macht jedoch nur Sinn, wenn viele Fehler auftreten und die Kosten für die vollständige Validierung mit einem XSD hoch sind.

Stellen Sie außerdem sicher, dass Sie die schnellste XSD-Validierung für Ihr Szenario verwenden. Sie haben nicht gesagt, ob dies eine .NET-Umgebung ist oder nicht, aber wenn dies der Fall ist, haben Sie XmlDocument, XmlValidatingReader und XElement als 3 Möglichkeiten, XML zu lesen und gegen Schema zu validieren. Abhängig davon, woher du das XML bekommst, was du danach machst, solltest du herausfinden, welcher dieser Mechanismen dir die beste Leistung bringt.

1

Wenn Ihr Hauptanliegen Leistung ist, sollten Sie die XmlReader mit dem XSD-Schema für die Validierung verwendet werden. Hier ein Beispiel:

// 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 
    } 
}