b121b415b546464e8750e6b7846f9a4d345a826e
[mono.git] / mcs / class / System.XML / System.Xml.Schema / XmlSchemaAnnotation.cs
1 // Author: Dwivedi, Ajay kumar\r
2 //            Adwiv@Yahoo.com\r
3 using System;\r
4 using System.Collections;\r
5 using System.Xml;\r
6 using System.Xml.Serialization;\r
7 \r
8 namespace System.Xml.Schema\r
9 {\r
10         /// <summary>\r
11         /// Summary description for XmlSchemaAnnotation.\r
12         /// </summary>\r
13         public class XmlSchemaAnnotation : XmlSchemaObject\r
14         {\r
15                 private string id;\r
16                 private XmlSchemaObjectCollection items;\r
17                 private XmlAttribute[] unhandledAttributes;\r
18                 private static string xmlname = "annotation";\r
19                 public XmlSchemaAnnotation()\r
20                 {\r
21                         items = new XmlSchemaObjectCollection();\r
22                 }\r
23 \r
24                 [System.Xml.Serialization.XmlAttribute("id")]\r
25                 public string Id \r
26                 {\r
27                         get{ return  id; } \r
28                         set{ id = value; }\r
29                 }\r
30                 \r
31                 [XmlElement("appinfo",typeof(XmlSchemaAppInfo),Namespace="http://www.w3.org/2001/XMLSchema")]\r
32                 [XmlElement("documentation",typeof(XmlSchemaDocumentation),Namespace="http://www.w3.org/2001/XMLSchema")]\r
33                 public XmlSchemaObjectCollection Items\r
34                 {\r
35                         get{ return items; }\r
36                 }\r
37                 \r
38                 [XmlAnyAttribute]\r
39                 public XmlAttribute[] UnhandledAttributes \r
40                 {\r
41                         get\r
42                         {\r
43                                 if(unhandledAttributeList != null)\r
44                                 {\r
45                                         unhandledAttributes = (XmlAttribute[]) unhandledAttributeList.ToArray(typeof(XmlAttribute));\r
46                                         unhandledAttributeList = null;\r
47                                 }\r
48                                 return unhandledAttributes;\r
49                         }\r
50                         set\r
51                         { \r
52                                 unhandledAttributes = value; \r
53                                 unhandledAttributeList = null;\r
54                         }\r
55                 }\r
56 \r
57                 [MonoTODO]\r
58                 internal int Compile(ValidationEventHandler h, XmlSchemaInfo info)\r
59                 {\r
60                         return 0;\r
61                 }\r
62                 \r
63                 [MonoTODO]\r
64                 internal int Validate(ValidationEventHandler h)\r
65                 {\r
66                         return 0;\r
67                 }\r
68 \r
69                 //<annotation\r
70                 //  id = ID\r
71                 //  {any attributes with non-schema namespace . . .}>\r
72                 //  Content: (appinfo | documentation)*\r
73                 //</annotation>\r
74                 internal static XmlSchemaAnnotation Read(XmlSchemaReader reader, ValidationEventHandler h)\r
75                 {\r
76                         XmlSchemaAnnotation annotation = new XmlSchemaAnnotation();\r
77                         reader.MoveToElement();\r
78 \r
79                         if(reader.NamespaceURI != XmlSchema.Namespace || reader.LocalName != xmlname)\r
80                         {\r
81                                 error(h,"Should not happen :1: XmlSchemaAnnotation.Read, name="+reader.Name,null);\r
82                                 reader.SkipToEnd();\r
83                                 return null;\r
84                         }\r
85 \r
86                         annotation.LineNumber = reader.LineNumber;\r
87                         annotation.LinePosition = reader.LinePosition;\r
88                         annotation.SourceUri = reader.BaseURI;\r
89 \r
90                         //Read Attributes\r
91                         while(reader.MoveToNextAttribute())\r
92                         {\r
93                                 if(reader.Name == "id")\r
94                                 {\r
95                                         annotation.Id = reader.Value;\r
96                                 }\r
97                                 else if((reader.NamespaceURI == "" && reader.Name != "xmlns") || reader.NamespaceURI == XmlSchema.Namespace)\r
98                                 {\r
99                                         error(h,reader.Name + " is not a valid attribute for annotation",null);\r
100                                 }\r
101                                 else\r
102                                 {\r
103                                         XmlSchemaUtil.ReadUnhandledAttribute(reader,annotation);\r
104                                 }\r
105                         }\r
106                         \r
107                         reader.MoveToElement();\r
108                         if(reader.IsEmptyElement)\r
109                                 return annotation;\r
110 \r
111                         //Content: (appinfo | documentation)*\r
112                         bool skip = false;\r
113                         string expectedEnd = null;\r
114                         while(!reader.EOF)\r
115                         {\r
116                                 if(skip) \r
117                                         skip=false;\r
118                                 else \r
119                                         reader.ReadNextElement();\r
120 \r
121                                 if(reader.NodeType == XmlNodeType.EndElement)\r
122                                 {\r
123                                         bool end = true;\r
124                                         string expected = xmlname;\r
125                                         if(expectedEnd != null)\r
126                                         {\r
127                                                 expected = expectedEnd;\r
128                                                 expectedEnd = null;\r
129                                                 end = false;\r
130                                         }\r
131                                         if(reader.LocalName != expected)\r
132                                                 error(h,"Should not happen :2: XmlSchemaAnnotation.Read, name="+reader.Name+",expected="+expected,null);\r
133                                         if (end)\r
134                                                 break;\r
135                                         else\r
136                                                 continue;\r
137                                 }\r
138                                 if(reader.LocalName == "appinfo")\r
139                                 {\r
140                                         XmlSchemaAppInfo appinfo = XmlSchemaAppInfo.Read(reader,h,out skip);\r
141                                         if(appinfo != null)\r
142                                                 annotation.items.Add(appinfo);\r
143                                         expectedEnd = "appinfo";\r
144                                         continue;\r
145                                 }\r
146                                 if(reader.LocalName == "documentation")\r
147                                 {\r
148                                         XmlSchemaDocumentation documentation = XmlSchemaDocumentation.Read(reader,h, out skip);\r
149                                         if(documentation != null)\r
150                                                 annotation.items.Add(documentation);\r
151                                         expectedEnd = "documentation";\r
152                                         continue;\r
153                                 }\r
154                                 reader.RaiseInvalidElementError();\r
155                         }\r
156                         return annotation;\r
157                 }\r
158         }\r
159 }\r