1 //------------------------------------------------------------------------------
2 // <copyright file="AutoValidator.cs" company="Microsoft">
3 // Copyright (c) Microsoft Corporation. All rights reserved.
5 // <owner current="true" primary="true">[....]</owner>
6 //------------------------------------------------------------------------------
8 namespace System.Xml.Schema {
10 using System.Diagnostics;
11 using System.Globalization;
13 #pragma warning disable 618
15 internal class AutoValidator : BaseValidator {
16 const string x_schema = "x-schema";
18 public AutoValidator(XmlValidatingReaderImpl reader, XmlSchemaCollection schemaCollection, IValidationEventHandling eventHandling) : base(reader, schemaCollection, eventHandling) {
19 schemaInfo = new SchemaInfo();
22 public override bool PreserveWhitespace {
26 public override void Validate() {
27 ValidationType valType = DetectValidationType();
29 case ValidationType.XDR:
30 reader.Validator = new XdrValidator(this);
31 reader.Validator.Validate();
34 case ValidationType.Schema:
35 reader.Validator = new XsdValidator(this);
36 reader.Validator.Validate();
39 case ValidationType.Auto:
44 public override void CompleteValidation() {}
46 public override object FindId(string name) {
50 private ValidationType DetectValidationType() {
51 //Type not yet detected : Check in Schema Collection
52 if (reader.Schemas != null && reader.Schemas.Count > 0) {
53 XmlSchemaCollectionEnumerator enumerator = reader.Schemas.GetEnumerator();
54 while (enumerator.MoveNext()) {
55 XmlSchemaCollectionNode node = enumerator.CurrentNode;
56 SchemaInfo schemaInfo = node.SchemaInfo;
57 if(schemaInfo.SchemaType == SchemaType.XSD)
58 return ValidationType.Schema;
59 else if(schemaInfo.SchemaType == SchemaType.XDR)
60 return ValidationType.XDR;
64 if (reader.NodeType == XmlNodeType.Element) {
65 SchemaType schemaType = SchemaNames.SchemaTypeFromRoot(reader.LocalName, reader.NamespaceURI);
66 if (schemaType == SchemaType.XSD) {
67 return ValidationType.Schema;
69 else if (schemaType == SchemaType.XDR) {
70 return ValidationType.XDR;
73 int count = reader.AttributeCount;
74 for (int i = 0; i < count ; i++) {
75 reader.MoveToAttribute(i);
76 string objectNs = reader.NamespaceURI;
77 string objectName = reader.LocalName;
78 if (Ref.Equal(objectNs, SchemaNames.NsXmlNs)) {
79 if(XdrBuilder.IsXdrSchema(reader.Value)) {
80 reader.MoveToElement();
81 return ValidationType.XDR;
84 else if (Ref.Equal(objectNs, SchemaNames.NsXsi)) {
85 reader.MoveToElement();
86 return ValidationType.Schema;
88 else if (Ref.Equal(objectNs, SchemaNames.QnDtDt.Namespace) && Ref.Equal(objectName, SchemaNames.QnDtDt.Name)) {
89 reader.SchemaTypeObject = XmlSchemaDatatype.FromXdrName(reader.Value);
90 reader.MoveToElement();
91 return ValidationType.XDR;
95 reader.MoveToElement();
99 return ValidationType.Auto;
103 #pragma warning restore 618