2009-04-28 4 views
0

제 프로젝트에는 제 3 자에 대한 XML 요청 및 응답의 유효성을 검사하는 데 사용하는 매우 큰 XSD 파일이 있습니다. 위의 시나리오에 대한xsd validation againts xsd가 클래스 수준 유효성 검사를 생성했습니다.

내가 2를 가질 수는 XML을 만든 다음 2) XSD 세대 도구의 도움으로 XSD에서 클래스를 생성주고의 XSD에 대해 검증 attirbutes의 엑스트라 비트를 추가하고 사용)

한 접근 검증을 위해. 이러한 방식으로 어느 정도 작동 두 번째 방법으로

검증, 가) XML 직렬화 b)는 각 속성, 즉 설정 사용자 지정 특성을 가진 개체를 검증와 객체로 XML 요청/응답을 변환하는 방법으로 개체를 전달 각 프로퍼티에 설정된 프로퍼티와 커스텀 속성을 반복하여 객체의 유효성을 검사 할 것이고, 객체가 유효성을 검사하고 xml 요청이 유효한지 여부를 결정할 경우 부울 값을 반환 할 것입니다.

이제 성능과 기타 측면에서 어떤 접근 방식이 좋은가?

답변

0

XML을 객체로 비 직렬화하면 필요한 유효성 검사를 수행 할 수 있을지 확신하지 못합니다.

예를 들어 문자열 필드를 정의한 XSD를 가져 와서 해당 필드에 나타날 수있는 텍스트를 일부 정규식과 일치하도록 제한합니다. 생성 된 클래스가 해당 제약 조건을 준수합니까? 이와 같이 여러 가지 미묘한 문제로 인해 잘못된 xml을 수락하거나 다른 유효한 xml을 거부하는 상황에 처할 수 있습니다.

타사에서 유효성을 검사 할 XSD를 제공 한 경우 지름길을 찾는 것보다 계약서 정의에 충실하는 것이 가장 바람직합니다.

그러나 대부분의 실수와 실수로 빠르게 걸러 낼 수 있습니다. 모두 신호 대 잡음비에 따라 다르지만 전체 XSD를 실행하기 전에 시간을 투자하기 전에 간단한 "XSD"또는 "빠른 실행"이 가능한 프로그램 테스트를 작성하는 것이 좋습니다. 그러나 많은 실패를 경험하고 XSD로 완전히 검증하는 데 드는 비용이 높을 때만 의미가 있습니다.

또한 시나리오에서 가장 빠른 XSD 유효성 검사를 사용하고 있는지 확인하십시오. 당신은 이것이 .NET 환경인지 말하지 않았지만, 그렇다면 XmlDocument, XmlValidatingReader 및 XElement가 XML을 읽고 체계에 대해 유효성을 검사하는 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 
    } 
}