-// Author: Dwivedi, Ajay kumar\r
-// Adwiv@Yahoo.com\r
+// Author: Dwivedi, Ajay kumar
+// Adwiv@Yahoo.com
//
// Permission is hereby granted, free of charge, to any person obtaining
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-using System;\r
-using System.Collections;\r
-using System.Xml;\r
-using System.Xml.Serialization;\r
-\r
-namespace System.Xml.Schema\r
-{\r
- /// <summary>\r
- /// Summary description for XmlSchemaSimpleTypeUnion.\r
- /// </summary>\r
- public class XmlSchemaSimpleTypeUnion : XmlSchemaSimpleTypeContent\r
- {\r
- private XmlSchemaObjectCollection baseTypes;\r
- private XmlQualifiedName[] memberTypes;\r
- const string xmlname = "union";\r
- private object [] validatedTypes;\r
-#if NET_2_0\r
- private XmlSchemaSimpleType [] validatedSchemaTypes;\r
-#endif\r
-\r
- public XmlSchemaSimpleTypeUnion()\r
- {\r
- baseTypes = new XmlSchemaObjectCollection();\r
- }\r
-\r
- [XmlElement("simpleType",typeof(XmlSchemaSimpleType))]\r
- public XmlSchemaObjectCollection BaseTypes \r
- {\r
- get{ return baseTypes; }\r
- }\r
-\r
- [System.Xml.Serialization.XmlAttribute("memberTypes")]\r
- public XmlQualifiedName[] MemberTypes\r
- {\r
- get{ return memberTypes; } \r
- set{ memberTypes = value; }\r
- }\r
-\r
-#if NET_2_0\r
- [XmlIgnore]\r
- public XmlSchemaSimpleType [] BaseMemberTypes {\r
- get { return validatedSchemaTypes; }\r
- }\r
-#endif\r
-\r
- internal object [] ValidatedTypes\r
- {\r
- get { return validatedTypes; }\r
- }\r
-\r
- /// <remarks>\r
- /// 1. Circular union type definition is disallowed. (WTH is this?)\r
- /// 2. id must be a valid ID\r
- /// </remarks>\r
- internal override int Compile(ValidationEventHandler h, XmlSchema schema)\r
- {\r
- // If this is already compiled this time, simply skip.\r
- if (CompilationId == schema.CompilationId)\r
- return 0;\r
-\r
-#if NET_2_0\r
- foreach (XmlSchemaObject obj in BaseTypes)\r
- obj.Parent = this;\r
-#endif\r
-\r
- errorCount = 0;\r
-\r
- int count = BaseTypes.Count;\r
-\r
- foreach(XmlSchemaObject obj in baseTypes)\r
- {\r
- if(obj != null && obj is XmlSchemaSimpleType)\r
- {\r
- XmlSchemaSimpleType stype = (XmlSchemaSimpleType) obj;\r
- errorCount += stype.Compile(h, schema);\r
- }\r
- else\r
- {\r
- error(h, "baseTypes can't have objects other than a simpletype");\r
- }\r
- }\r
- \r
- if(memberTypes!=null)\r
- {\r
- for(int i=0; i< memberTypes.Length; i++)\r
- {\r
- if(memberTypes[i] == null || !XmlSchemaUtil.CheckQName(MemberTypes[i]))\r
- {\r
- error (h,"Invalid membertype");\r
- memberTypes[i] = XmlQualifiedName.Empty;\r
- }\r
- else\r
- {\r
- count += MemberTypes.Length;\r
- }\r
- }\r
- }\r
-\r
- if(count == 0)\r
- error(h, "Atleast one simpletype or membertype must be present");\r
-\r
- XmlSchemaUtil.CompileID(Id,this,schema.IDCollection,h);\r
-\r
- \r
-\r
- this.CompilationId = schema.CompilationId;\r
- return errorCount;\r
- }\r
- \r
- internal override int Validate(ValidationEventHandler h, XmlSchema schema)\r
- {\r
- if (IsValidated (schema.ValidationId))\r
- return errorCount;\r
-\r
- ArrayList al = new ArrayList ();\r
- // Validate MemberTypes\r
- if (MemberTypes != null) {\r
- foreach (XmlQualifiedName memberTypeName in MemberTypes) {\r
- object type = null;\r
- XmlSchemaType xstype = schema.FindSchemaType (memberTypeName) as XmlSchemaSimpleType;\r
- if (xstype != null) {\r
- errorCount += xstype.Validate (h, schema);\r
- type = xstype;\r
- } else if (memberTypeName == XmlSchemaComplexType.AnyTypeName) {\r
+using System;
+using System.Collections;
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace System.Xml.Schema
+{
+ /// <summary>
+ /// Summary description for XmlSchemaSimpleTypeUnion.
+ /// </summary>
+ public class XmlSchemaSimpleTypeUnion : XmlSchemaSimpleTypeContent
+ {
+ private XmlSchemaObjectCollection baseTypes;
+ private XmlQualifiedName[] memberTypes;
+ const string xmlname = "union";
+ private object [] validatedTypes;
+#if NET_2_0
+ private XmlSchemaSimpleType [] validatedSchemaTypes;
+#endif
+
+ public XmlSchemaSimpleTypeUnion()
+ {
+ baseTypes = new XmlSchemaObjectCollection();
+ }
+
+ [XmlElement("simpleType",typeof(XmlSchemaSimpleType))]
+ public XmlSchemaObjectCollection BaseTypes
+ {
+ get{ return baseTypes; }
+ }
+
+ [System.Xml.Serialization.XmlAttribute("memberTypes")]
+ public XmlQualifiedName[] MemberTypes
+ {
+ get{ return memberTypes; }
+ set{ memberTypes = value; }
+ }
+
+#if NET_2_0
+ [XmlIgnore]
+ public XmlSchemaSimpleType [] BaseMemberTypes {
+ get { return validatedSchemaTypes; }
+ }
+#endif
+
+ internal object [] ValidatedTypes
+ {
+ get { return validatedTypes; }
+ }
+
+ internal override void SetParent (XmlSchemaObject parent)
+ {
+ base.SetParent (parent);
+ foreach (XmlSchemaObject obj in BaseTypes)
+ obj.SetParent (this);
+ }
+
+ /// <remarks>
+ /// 1. Circular union type definition is disallowed. (WTH is this?)
+ /// 2. id must be a valid ID
+ /// </remarks>
+ internal override int Compile(ValidationEventHandler h, XmlSchema schema)
+ {
+ // If this is already compiled this time, simply skip.
+ if (CompilationId == schema.CompilationId)
+ return 0;
+
+ errorCount = 0;
+
+ int count = BaseTypes.Count;
+
+ foreach(XmlSchemaObject obj in baseTypes)
+ {
+ if(obj != null && obj is XmlSchemaSimpleType)
+ {
+ XmlSchemaSimpleType stype = (XmlSchemaSimpleType) obj;
+ errorCount += stype.Compile(h, schema);
+ }
+ else
+ {
+ error(h, "baseTypes can't have objects other than a simpletype");
+ }
+ }
+
+ if(memberTypes!=null)
+ {
+ for(int i=0; i< memberTypes.Length; i++)
+ {
+ if(memberTypes[i] == null || !XmlSchemaUtil.CheckQName(MemberTypes[i]))
+ {
+ error (h,"Invalid membertype");
+ memberTypes[i] = XmlQualifiedName.Empty;
+ }
+ else
+ {
+ count += MemberTypes.Length;
+ }
+ }
+ }
+
+ if(count == 0)
+ error(h, "Atleast one simpletype or membertype must be present");
+
+ XmlSchemaUtil.CompileID(Id,this,schema.IDCollection,h);
+
+
+
+ this.CompilationId = schema.CompilationId;
+ return errorCount;
+ }
+
+ internal override int Validate(ValidationEventHandler h, XmlSchema schema)
+ {
+ if (IsValidated (schema.ValidationId))
+ return errorCount;
+
+ ArrayList al = new ArrayList ();
+ // Validate MemberTypes
+ if (MemberTypes != null) {
+ foreach (XmlQualifiedName memberTypeName in MemberTypes) {
+ object type = null;
+ XmlSchemaType xstype = schema.FindSchemaType (memberTypeName) as XmlSchemaSimpleType;
+ if (xstype != null) {
+ errorCount += xstype.Validate (h, schema);
+ type = xstype;
+ } else if (memberTypeName == XmlSchemaComplexType.AnyTypeName) {
type = XmlSchemaSimpleType.AnySimpleType;
- } else if (memberTypeName.Namespace == XmlSchema.Namespace ||\r
- memberTypeName.Namespace == XmlSchema.XdtNamespace) {\r
- type = XmlSchemaDatatype.FromName (memberTypeName);\r
- if (type == null)\r
- error (h, "Invalid schema type name was specified: " + memberTypeName);\r
- }\r
- // otherwise, it might be missing sub components.\r
- else if (!schema.IsNamespaceAbsent (memberTypeName.Namespace))\r
- error (h, "Referenced base schema type " + memberTypeName + " was not found in the corresponding schema.");\r
-\r
- al.Add (type);\r
- }\r
- }\r
- if (BaseTypes != null) {\r
- foreach (XmlSchemaSimpleType st in BaseTypes) {\r
- st.Validate (h, schema);\r
- al.Add (st);\r
- }\r
- }\r
- this.validatedTypes = al.ToArray ();\r
-\r
-#if NET_2_0\r
- if (validatedTypes != null) {\r
- validatedSchemaTypes = new XmlSchemaSimpleType [validatedTypes.Length];\r
- for (int i = 0; i < validatedTypes.Length; i++) {\r
- object t = validatedTypes [i];\r
- XmlSchemaSimpleType st = t as XmlSchemaSimpleType;\r
- if (st == null && t != null)\r
- st = XmlSchemaType.GetBuiltInSimpleType (((XmlSchemaDatatype) t).TypeCode);\r
- validatedSchemaTypes [i] = st;\r
- }\r
- }\r
-#endif\r
-\r
- ValidationId = schema.ValidationId;\r
- return errorCount;\r
- }\r
-\r
- //<union \r
- // id = ID \r
- // memberTypes = List of QName \r
- // {any attributes with non-schema namespace . . .}>\r
- // Content: (annotation?, (simpleType*))\r
- //</union>\r
- internal static XmlSchemaSimpleTypeUnion Read(XmlSchemaReader reader, ValidationEventHandler h)\r
- {\r
- XmlSchemaSimpleTypeUnion union = new XmlSchemaSimpleTypeUnion();\r
- reader.MoveToElement();\r
-\r
- if(reader.NamespaceURI != XmlSchema.Namespace || reader.LocalName != xmlname)\r
- {\r
- error(h,"Should not happen :1: XmlSchemaSimpleTypeUnion.Read, name="+reader.Name,null);\r
- reader.Skip();\r
- return null;\r
- }\r
-\r
- union.LineNumber = reader.LineNumber;\r
- union.LinePosition = reader.LinePosition;\r
- union.SourceUri = reader.BaseURI;\r
-\r
- //Read Attributes\r
- while(reader.MoveToNextAttribute())\r
- {\r
- if(reader.Name == "id")\r
- {\r
- union.Id = reader.Value;\r
- }\r
- else if(reader.Name == "memberTypes")\r
- {\r
- Exception innerEx;\r
- string[] names = XmlSchemaUtil.SplitList(reader.Value);\r
- union.memberTypes = new XmlQualifiedName[names.Length];\r
- for(int i=0;i<names.Length;i++)\r
- {\r
- union.memberTypes[i] = XmlSchemaUtil.ToQName(reader,names[i],out innerEx);\r
- if(innerEx != null)\r
- error(h,"'"+names[i] + "' is not a valid memberType",innerEx);\r
- }\r
- }\r
- else if((reader.NamespaceURI == "" && reader.Name != "xmlns") || reader.NamespaceURI == XmlSchema.Namespace)\r
- {\r
- error(h,reader.Name + " is not a valid attribute for union",null);\r
- }\r
- else\r
- {\r
- XmlSchemaUtil.ReadUnhandledAttribute(reader,union);\r
- }\r
- }\r
- \r
- reader.MoveToElement();\r
- if(reader.IsEmptyElement)\r
- return union;\r
-\r
- // Content: annotation?, simpleType*\r
- int level = 1;\r
- while(reader.ReadNextElement())\r
- {\r
- if(reader.NodeType == XmlNodeType.EndElement)\r
- {\r
- if(reader.LocalName != xmlname)\r
- error(h,"Should not happen :2: XmlSchemaSimpleTypeUnion.Read, name="+reader.Name,null);\r
- break;\r
- }\r
- if(level <= 1 && reader.LocalName == "annotation")\r
- {\r
- level = 2; //Only one annotation\r
- XmlSchemaAnnotation annotation = XmlSchemaAnnotation.Read(reader,h);\r
- if(annotation != null)\r
- union.Annotation = annotation;\r
- continue;\r
- }\r
- if(level <=2 && reader.LocalName == "simpleType")\r
- {\r
- level = 2;\r
- XmlSchemaSimpleType stype = XmlSchemaSimpleType.Read(reader,h);\r
- if(stype != null)\r
- union.baseTypes.Add(stype);\r
- continue;\r
- }\r
- reader.RaiseInvalidElementError();\r
- }\r
- return union;\r
- }\r
-\r
- }\r
-}\r
+ } else if (memberTypeName.Namespace == XmlSchema.Namespace ||
+ memberTypeName.Namespace == XmlSchema.XdtNamespace) {
+ type = XmlSchemaDatatype.FromName (memberTypeName);
+ if (type == null)
+ error (h, "Invalid schema type name was specified: " + memberTypeName);
+ }
+ // otherwise, it might be missing sub components.
+ else if (!schema.IsNamespaceAbsent (memberTypeName.Namespace))
+ error (h, "Referenced base schema type " + memberTypeName + " was not found in the corresponding schema.");
+
+ al.Add (type);
+ }
+ }
+ if (BaseTypes != null) {
+ foreach (XmlSchemaSimpleType st in BaseTypes) {
+ st.Validate (h, schema);
+ al.Add (st);
+ }
+ }
+ this.validatedTypes = al.ToArray ();
+
+#if NET_2_0
+ if (validatedTypes != null) {
+ validatedSchemaTypes = new XmlSchemaSimpleType [validatedTypes.Length];
+ for (int i = 0; i < validatedTypes.Length; i++) {
+ object t = validatedTypes [i];
+ XmlSchemaSimpleType st = t as XmlSchemaSimpleType;
+ if (st == null && t != null)
+ st = XmlSchemaType.GetBuiltInSimpleType (((XmlSchemaDatatype) t).TypeCode);
+ validatedSchemaTypes [i] = st;
+ }
+ }
+#endif
+
+ ValidationId = schema.ValidationId;
+ return errorCount;
+ }
+
+ //<union
+ // id = ID
+ // memberTypes = List of QName
+ // {any attributes with non-schema namespace . . .}>
+ // Content: (annotation?, (simpleType*))
+ //</union>
+ internal static XmlSchemaSimpleTypeUnion Read(XmlSchemaReader reader, ValidationEventHandler h)
+ {
+ XmlSchemaSimpleTypeUnion union = new XmlSchemaSimpleTypeUnion();
+ reader.MoveToElement();
+
+ if(reader.NamespaceURI != XmlSchema.Namespace || reader.LocalName != xmlname)
+ {
+ error(h,"Should not happen :1: XmlSchemaSimpleTypeUnion.Read, name="+reader.Name,null);
+ reader.Skip();
+ return null;
+ }
+
+ union.LineNumber = reader.LineNumber;
+ union.LinePosition = reader.LinePosition;
+ union.SourceUri = reader.BaseURI;
+
+ //Read Attributes
+ while(reader.MoveToNextAttribute())
+ {
+ if(reader.Name == "id")
+ {
+ union.Id = reader.Value;
+ }
+ else if(reader.Name == "memberTypes")
+ {
+ Exception innerEx;
+ string[] names = XmlSchemaUtil.SplitList(reader.Value);
+ union.memberTypes = new XmlQualifiedName[names.Length];
+ for(int i=0;i<names.Length;i++)
+ {
+ union.memberTypes[i] = XmlSchemaUtil.ToQName(reader,names[i],out innerEx);
+ if(innerEx != null)
+ error(h,"'"+names[i] + "' is not a valid memberType",innerEx);
+ }
+ }
+ else if((reader.NamespaceURI == "" && reader.Name != "xmlns") || reader.NamespaceURI == XmlSchema.Namespace)
+ {
+ error(h,reader.Name + " is not a valid attribute for union",null);
+ }
+ else
+ {
+ XmlSchemaUtil.ReadUnhandledAttribute(reader,union);
+ }
+ }
+
+ reader.MoveToElement();
+ if(reader.IsEmptyElement)
+ return union;
+
+ // Content: annotation?, simpleType*
+ int level = 1;
+ while(reader.ReadNextElement())
+ {
+ if(reader.NodeType == XmlNodeType.EndElement)
+ {
+ if(reader.LocalName != xmlname)
+ error(h,"Should not happen :2: XmlSchemaSimpleTypeUnion.Read, name="+reader.Name,null);
+ break;
+ }
+ if(level <= 1 && reader.LocalName == "annotation")
+ {
+ level = 2; //Only one annotation
+ XmlSchemaAnnotation annotation = XmlSchemaAnnotation.Read(reader,h);
+ if(annotation != null)
+ union.Annotation = annotation;
+ continue;
+ }
+ if(level <=2 && reader.LocalName == "simpleType")
+ {
+ level = 2;
+ XmlSchemaSimpleType stype = XmlSchemaSimpleType.Read(reader,h);
+ if(stype != null)
+ union.baseTypes.Add(stype);
+ continue;
+ }
+ reader.RaiseInvalidElementError();
+ }
+ return union;
+ }
+
+ }
+}