1 // Author: Dwivedi, Ajay kumar
\r
5 using System.Xml.Serialization;
\r
6 using System.ComponentModel;
\r
8 namespace System.Xml.Schema
\r
11 /// Summary description for XmlSchemaAny.
\r
13 public class XmlSchemaAny : XmlSchemaParticle
\r
15 private string nameSpace;
\r
16 private XmlSchemaContentProcessing processing;
\r
17 private static string xmlname = "any";
\r
19 public XmlSchemaAny()
\r
23 [System.Xml.Serialization.XmlAttribute("namespace")]
\r
24 public string Namespace
\r
26 get{ return nameSpace; }
\r
27 set{ nameSpace = value; }
\r
30 [DefaultValue(XmlSchemaContentProcessing.None)]
\r
31 [System.Xml.Serialization.XmlAttribute("processContents")]
\r
32 public XmlSchemaContentProcessing ProcessContents
\r
34 get{ return processing; }
\r
35 set{ processing = value; }
\r
39 /// 1. id must be of type ID
\r
40 /// 2. namespace can have one of the following values:
\r
41 /// a) ##any or ##other
\r
42 /// b) list of anyURI and ##targetNamespace and ##local
\r
45 internal int Compile(ValidationEventHandler h, XmlSchemaInfo info)
\r
49 XmlSchemaUtil.CompileID(Id,this,info.IDCollection,h);
\r
51 //define ##any=1,##other=2,##targetNamespace=4,##local=8,anyURI=16
\r
53 string[] nslist = XmlSchemaUtil.SplitList(Namespace);
\r
54 foreach(string ns in nslist)
\r
64 case "##targetNamespace":
\r
71 if(!XmlSchemaUtil.CheckAnyUri(ns))
\r
72 error(h,"the namespace is not a valid anyURI");
\r
78 if((nscount&1) == 1 && nscount != 1)
\r
79 error(h,"##any if present must be the only namespace attribute");
\r
80 if((nscount&2) == 2 && nscount != 2)
\r
81 error(h,"##other if present must be the only namespace attribute");
\r
87 internal int Validate(ValidationEventHandler h)
\r
93 // maxOccurs = (nonNegativeInteger | unbounded) : 1
\r
94 // minOccurs = nonNegativeInteger : 1
\r
95 // namespace = ((##any | ##other) | List of (anyURI | (##targetNamespace | ##local)) ) : ##any
\r
96 // processContents = (lax | skip | strict) : strict
\r
97 // {any attributes with non-schema namespace . . .}>
\r
98 // Content: (annotation?)
\r
100 internal static XmlSchemaAny Read(XmlSchemaReader reader, ValidationEventHandler h)
\r
102 XmlSchemaAny any = new XmlSchemaAny();
\r
103 reader.MoveToElement();
\r
105 if(reader.NamespaceURI != XmlSchema.Namespace || reader.LocalName != xmlname)
\r
107 error(h,"Should not happen :1: XmlSchemaAny.Read, name="+reader.Name,null);
\r
108 reader.SkipToEnd();
\r
112 any.LineNumber = reader.LineNumber;
\r
113 any.LinePosition = reader.LinePosition;
\r
114 any.SourceUri = reader.BaseURI;
\r
116 while(reader.MoveToNextAttribute())
\r
118 if(reader.Name == "id")
\r
120 any.Id = reader.Value;
\r
122 else if(reader.Name == "maxOccurs")
\r
126 any.MaxOccursString = reader.Value;
\r
130 error(h,reader.Value + " is an invalid value for maxOccurs",e);
\r
133 else if(reader.Name == "minOccurs")
\r
137 any.MinOccursString = reader.Value;
\r
141 error(h,reader.Value + " is an invalid value for minOccurs", e);
\r
144 else if(reader.Name == "namespace")
\r
146 any.nameSpace = reader.Value;
\r
148 else if(reader.Name == "processContents")
\r
151 any.processing = XmlSchemaUtil.ReadProcessingAttribute(reader,out innerex);
\r
152 if(innerex != null)
\r
153 error(h, reader.Value + " is not a valid value for processContents",innerex);
\r
155 else if((reader.NamespaceURI == "" && reader.Name != "xmlns") || reader.NamespaceURI == XmlSchema.Namespace)
\r
157 error(h,reader.Name + " is not a valid attribute for any",null);
\r
161 XmlSchemaUtil.ReadUnhandledAttribute(reader,any);
\r
165 reader.MoveToElement();
\r
166 if(reader.IsEmptyElement)
\r
169 // Content: (annotation?)
\r
171 while(reader.ReadNextElement())
\r
173 if(reader.NodeType == XmlNodeType.EndElement)
\r
175 if(reader.LocalName != xmlname)
\r
176 error(h,"Should not happen :2: XmlSchemaAny.Read, name="+reader.Name,null);
\r
179 if(level <= 1 && reader.LocalName == "annotation")
\r
181 level = 2; //Only one annotation
\r
182 XmlSchemaAnnotation annotation = XmlSchemaAnnotation.Read(reader,h);
\r
183 if(annotation != null)
\r
184 any.Annotation = annotation;
\r
187 reader.RaiseInvalidElementError();
\r