2002-06-14 Dwivedi, Ajay kumar <adwiv@yahoo.com>
[mono.git] / mcs / class / System.XML / System.Xml.Schema / XmlSchemaInclude.cs
1 // Author: Dwivedi, Ajay kumar\r
2 //            Adwiv@Yahoo.com\r
3 using System;\r
4 using System.Xml.Serialization;\r
5 using System.Xml;\r
6 \r
7 namespace System.Xml.Schema\r
8 {\r
9         /// <summary>\r
10         /// Summary description for XmlSchemaInclude.\r
11         /// </summary>\r
12         public class XmlSchemaInclude : XmlSchemaExternal\r
13         {\r
14                 private XmlSchemaAnnotation annotation;\r
15                 public static string xmlname = "include";\r
16 \r
17                 public XmlSchemaInclude()\r
18                 {\r
19                 }\r
20                 [XmlElement("annotation",Namespace="http://www.w3.org/2001/XMLSchema")]\r
21                 public XmlSchemaAnnotation Annotation \r
22                 {\r
23                         get{ return  annotation; } \r
24                         set{ annotation = value; }\r
25                 }\r
26 //<include \r
27 //  id = ID \r
28 //  schemaLocation = anyURI \r
29 //  {any attributes with non-schema namespace . . .}>\r
30 //  Content: (annotation?)\r
31 //</include>\r
32                 internal static XmlSchemaInclude Read(XmlSchemaReader reader, ValidationEventHandler h)\r
33                 {\r
34                         XmlSchemaInclude include = new XmlSchemaInclude();\r
35                         reader.MoveToElement();\r
36 \r
37                         if(reader.NamespaceURI != XmlSchema.Namespace || reader.LocalName != xmlname)\r
38                         {\r
39                                 error(h,"Should not happen :1: XmlSchemaInclude.Read, name="+reader.Name,null);\r
40                                 reader.SkipToEnd();\r
41                                 return null;\r
42                         }\r
43 \r
44                         include.LineNumber = reader.LineNumber;\r
45                         include.LinePosition = reader.LinePosition;\r
46                         include.SourceUri = reader.BaseURI;\r
47 \r
48                         while(reader.MoveToNextAttribute())\r
49                         {\r
50                                 if(reader.Name == "id")\r
51                                 {\r
52                                         include.Id = reader.Value;\r
53                                 }\r
54                                 else if(reader.Name == "schemaLocation")\r
55                                 {\r
56                                         include.SchemaLocation = reader.Value;\r
57                                 }\r
58                                 else if(reader.NamespaceURI == "" || reader.NamespaceURI == XmlSchema.Namespace)\r
59                                 {\r
60                                         error(h,reader.Name + " is not a valid attribute for include",null);\r
61                                 }\r
62                                 else\r
63                                 {\r
64                                         if(reader.Prefix == "xmlns")\r
65                                                 include.Namespaces.Add(reader.LocalName, reader.Value);\r
66                                         else if(reader.Name == "xmlns")\r
67                                                 include.Namespaces.Add("",reader.Value);\r
68                                         //TODO: Add to Unhandled attributes\r
69                                 }\r
70                         }\r
71 \r
72                         reader.MoveToElement(); \r
73                         if(reader.IsEmptyElement)\r
74                                 return include;\r
75 \r
76                         //  Content: (annotation?)\r
77                         int level = 1;\r
78                         while(reader.ReadNextElement())\r
79                         {\r
80                                 if(reader.NodeType == XmlNodeType.EndElement)\r
81                                 {\r
82                                         if(reader.LocalName != xmlname)\r
83                                                 error(h,"Should not happen :2: XmlSchemaInclude.Read, name="+reader.Name,null);\r
84                                         break;\r
85                                 }\r
86                                 if(level <= 1 && reader.LocalName == "annotation")\r
87                                 {\r
88                                         level = 2;      //Only one annotation\r
89                                         XmlSchemaAnnotation annotation = XmlSchemaAnnotation.Read(reader,h);\r
90                                         if(annotation != null)\r
91                                                 include.Annotation = annotation;\r
92                                         continue;\r
93                                 }\r
94                                 reader.RaiseInvalidElementError();\r
95                         }\r
96 \r
97                         return include;\r
98                 }\r
99         }\r
100 }