XmlSchemaRedefine.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. // Author: Dwivedi, Ajay kumar
  2. // [email protected]
  3. using System;
  4. using System.Xml;
  5. using System.Xml.Serialization;
  6. namespace System.Xml.Schema
  7. {
  8. /// <summary>
  9. /// Summary description for XmlSchemaRedefine.
  10. /// </summary>
  11. public class XmlSchemaRedefine : XmlSchemaExternal
  12. {
  13. private XmlSchemaObjectTable attributeGroups;
  14. private XmlSchemaObjectTable groups;
  15. private XmlSchemaObjectCollection items;
  16. private XmlSchemaObjectTable schemaTypes;
  17. private static string xmlname = "redefine";
  18. public XmlSchemaRedefine()
  19. {
  20. attributeGroups = new XmlSchemaObjectTable();
  21. groups = new XmlSchemaObjectTable();
  22. items = new XmlSchemaObjectCollection(this);
  23. schemaTypes = new XmlSchemaObjectTable();
  24. }
  25. [XmlElement("annotation",typeof(XmlSchemaAnnotation),Namespace=XmlSchema.Namespace)]
  26. [XmlElement("simpleType",typeof(XmlSchemaSimpleType),Namespace=XmlSchema.Namespace)]
  27. [XmlElement("complexType",typeof(XmlSchemaComplexType),Namespace=XmlSchema.Namespace)]
  28. [XmlElement("group",typeof(XmlSchemaGroup),Namespace=XmlSchema.Namespace)]
  29. //NOTE: AttributeGroup and not AttributeGroupRef
  30. [XmlElement("attributeGroup",typeof(XmlSchemaAttributeGroup),Namespace=XmlSchema.Namespace)]
  31. public XmlSchemaObjectCollection Items
  32. {
  33. get{ return items; }
  34. }
  35. [XmlIgnore]
  36. public XmlSchemaObjectTable AttributeGroups
  37. {
  38. get{ return attributeGroups; }
  39. }
  40. [XmlIgnore]
  41. public XmlSchemaObjectTable SchemaTypes
  42. {
  43. get{ return schemaTypes; }
  44. }
  45. [XmlIgnore]
  46. public XmlSchemaObjectTable Groups
  47. {
  48. get{ return groups; }
  49. }
  50. //<redefine
  51. // id = ID
  52. // schemaLocation = anyURI
  53. // {any attributes with non-schema namespace . . .}>
  54. // Content: (annotation | (simpleType | complexType | group | attributeGroup))*
  55. //</redefine>
  56. internal static XmlSchemaRedefine Read(XmlSchemaReader reader, ValidationEventHandler h)
  57. {
  58. XmlSchemaRedefine redefine = new XmlSchemaRedefine();
  59. reader.MoveToElement();
  60. if(reader.NamespaceURI != XmlSchema.Namespace || reader.LocalName != xmlname)
  61. {
  62. error(h,"Should not happen :1: XmlSchemaRedefine.Read, name="+reader.Name,null);
  63. reader.Skip();
  64. return null;
  65. }
  66. redefine.LineNumber = reader.LineNumber;
  67. redefine.LinePosition = reader.LinePosition;
  68. redefine.SourceUri = reader.BaseURI;
  69. while(reader.MoveToNextAttribute())
  70. {
  71. if(reader.Name == "id")
  72. {
  73. redefine.Id = reader.Value;
  74. }
  75. else if(reader.Name == "schemaLocation")
  76. {
  77. redefine.SchemaLocation = reader.Value;
  78. }
  79. else if((reader.NamespaceURI == "" && reader.Name != "xmlns") || reader.NamespaceURI == XmlSchema.Namespace)
  80. {
  81. error(h,reader.Name + " is not a valid attribute for redefine",null);
  82. }
  83. else
  84. {
  85. XmlSchemaUtil.ReadUnhandledAttribute(reader,redefine);
  86. }
  87. }
  88. reader.MoveToElement();
  89. if(reader.IsEmptyElement)
  90. return redefine;
  91. //(annotation | (simpleType | complexType | group | attributeGroup))*
  92. while(reader.ReadNextElement())
  93. {
  94. if(reader.NodeType == XmlNodeType.EndElement)
  95. {
  96. if(reader.LocalName != xmlname)
  97. error(h,"Should not happen :2: XmlSchemaRedefine.Read, name="+reader.Name,null);
  98. break;
  99. }
  100. if(reader.LocalName == "annotation")
  101. {
  102. XmlSchemaAnnotation annotation = XmlSchemaAnnotation.Read(reader,h);
  103. if(annotation != null)
  104. redefine.items.Add(annotation);
  105. continue;
  106. }
  107. if(reader.LocalName == "simpleType")
  108. {
  109. XmlSchemaSimpleType simpleType = XmlSchemaSimpleType.Read(reader,h);
  110. if(simpleType != null)
  111. redefine.items.Add(simpleType);
  112. continue;
  113. }
  114. if(reader.LocalName == "complexType")
  115. {
  116. XmlSchemaComplexType complexType = XmlSchemaComplexType.Read(reader,h);
  117. if(complexType != null)
  118. redefine.items.Add(complexType);
  119. continue;
  120. }
  121. if(reader.LocalName == "group")
  122. {
  123. XmlSchemaGroup group = XmlSchemaGroup.Read(reader,h);
  124. if(group != null)
  125. redefine.items.Add(group);
  126. continue;
  127. }
  128. if(reader.LocalName == "attributeGroup")
  129. {
  130. XmlSchemaAttributeGroup attributeGroup = XmlSchemaAttributeGroup.Read(reader,h);
  131. if(attributeGroup != null)
  132. redefine.items.Add(attributeGroup);
  133. continue;
  134. }
  135. reader.RaiseInvalidElementError();
  136. }
  137. return redefine;
  138. }
  139. }
  140. }