The Labs \ Source Viewer \ SSCLI \ System.Xml.Schema \ AutoValidator

  1. //------------------------------------------------------------------------------
  2. // <copyright file="AutoValidator.cs" company="Microsoft">
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. // </copyright>
  14. //------------------------------------------------------------------------------
  15. namespace System.Xml.Schema
  16. {
  17.    
  18.     using System.Diagnostics;
  19.     using System.Globalization;
  20.    
  21.     #pragma warning disable 618
  22.    
  23.     internal class AutoValidator : BaseValidator
  24.     {
  25.         const string x_schema = "x-schema";
  26.        
  27.         public AutoValidator(XmlValidatingReaderImpl reader, XmlSchemaCollection schemaCollection, ValidationEventHandler eventHandler) : base(reader, schemaCollection, eventHandler)
  28.         {
  29.             schemaInfo = new SchemaInfo();
  30.         }
  31.        
  32.         public override bool PreserveWhitespace {
  33.             get { return false; }
  34.         }
  35.        
  36.         public override void Validate()
  37.         {
  38.             ValidationType valType = DetectValidationType();
  39.             switch (valType) {
  40.                 case ValidationType.XDR:
  41.                     reader.Validator = new XdrValidator(this);
  42.                     reader.Validator.Validate();
  43.                     break;
  44.                 case ValidationType.Schema:
  45.                    
  46.                     reader.Validator = new XsdValidator(this);
  47.                     reader.Validator.Validate();
  48.                     break;
  49.                 case ValidationType.Auto:
  50.                    
  51.                     break;
  52.             }
  53.         }
  54.        
  55.         public override void CompleteValidation()
  56.         {
  57.         }
  58.        
  59.         public override object FindId(string name)
  60.         {
  61.             return null;
  62.         }
  63.        
  64.         private ValidationType DetectValidationType()
  65.         {
  66.             //Type not yet detected : Check in Schema Collection
  67.             if (reader.Schemas != null && reader.Schemas.Count > 0) {
  68.                 XmlSchemaCollectionEnumerator enumerator = reader.Schemas.GetEnumerator();
  69.                 while (enumerator.MoveNext()) {
  70.                     XmlSchemaCollectionNode node = enumerator.CurrentNode;
  71.                     SchemaInfo schemaInfo = node.SchemaInfo;
  72.                     if (schemaInfo.SchemaType == SchemaType.XSD)
  73.                         return ValidationType.Schema;
  74.                     else if (schemaInfo.SchemaType == SchemaType.XDR)
  75.                         return ValidationType.XDR;
  76.                 }
  77.             }
  78.            
  79.             if (reader.NodeType == XmlNodeType.Element) {
  80.                 SchemaType schemaType = SchemaNames.SchemaTypeFromRoot(reader.LocalName, reader.NamespaceURI);
  81.                 if (schemaType == SchemaType.XSD) {
  82.                     return ValidationType.Schema;
  83.                 }
  84.                 else if (schemaType == SchemaType.XDR) {
  85.                     return ValidationType.XDR;
  86.                 }
  87.                 else {
  88.                     int count = reader.AttributeCount;
  89.                     for (int i = 0; i < count; i++) {
  90.                         reader.MoveToAttribute(i);
  91.                         string objectNs = reader.NamespaceURI;
  92.                         string objectName = reader.LocalName;
  93.                         if (Ref.Equal(objectNs, SchemaNames.NsXmlNs)) {
  94.                             if (XdrBuilder.IsXdrSchema(reader.Value)) {
  95.                                 reader.MoveToElement();
  96.                                 return ValidationType.XDR;
  97.                             }
  98.                         }
  99.                         else if (Ref.Equal(objectNs, SchemaNames.NsXsi)) {
  100.                             reader.MoveToElement();
  101.                             return ValidationType.Schema;
  102.                         }
  103.                         else if (Ref.Equal(objectNs, SchemaNames.QnDtDt.Namespace) && Ref.Equal(objectName, SchemaNames.QnDtDt.Name)) {
  104.                             reader.SchemaTypeObject = XmlSchemaDatatype.FromXdrName(reader.Value);
  105.                             reader.MoveToElement();
  106.                             return ValidationType.XDR;
  107.                         }
  108.                     }
  109.                     //end of for
  110.                     if (count > 0) {
  111.                         reader.MoveToElement();
  112.                     }
  113.                 }
  114.             }
  115.             return ValidationType.Auto;
  116.         }
  117.        
  118.     }
  119.     #pragma warning restore 618
  120.    
  121. }

Developer Fusion