2002-06-14 Dwivedi, Ajay kumar <adwiv@yahoo.com>
[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.Xml;\r
5 using System.Xml.Serialization;\r
6 \r
7 namespace System.Xml.Schema\r
8 {\r
9         /// <summary>\r
10         /// Summary description for XmlSchemaAnnotation.\r
11         /// </summary>\r
12         public class XmlSchemaAnnotation : XmlSchemaObject\r
13         {\r
14                 private string id;\r
15                 private XmlSchemaObjectCollection items;\r
16                 private XmlAttribute[] unhandledAttributes;\r
17                 private static string xmlname = "annotation";\r
18                 public XmlSchemaAnnotation()\r
19                 {\r
20                         items = new XmlSchemaObjectCollection();\r
21                 }\r
22 \r
23                 [System.Xml.Serialization.XmlAttribute("id")]\r
24                 public string Id \r
25                 {\r
26                         get{ return  id; } \r
27                         set{ id = value; }\r
28                 }\r
29                 \r
30                 [XmlElement("appinfo",typeof(XmlSchemaAppInfo),Namespace="http://www.w3.org/2001/XMLSchema")]\r
31                 [XmlElement("documentation",typeof(XmlSchemaDocumentation),Namespace="http://www.w3.org/2001/XMLSchema")]\r
32                 public XmlSchemaObjectCollection Items\r
33                 {\r
34                         get{ return items; }\r
35                 }\r
36                 \r
37                 [XmlAnyAttribute]\r
38                 public XmlAttribute[] UnhandledAttributes \r
39                 {\r
40                         get{ return  unhandledAttributes; } \r
41                         set{ unhandledAttributes = value; }\r
42                 }\r
43 \r
44                 [MonoTODO]\r
45                 internal int Compile(ValidationEventHandler h, XmlSchemaInfo info)\r
46                 {\r
47                         return 0;\r
48                 }\r
49                 \r
50                 [MonoTODO]\r
51                 internal int Validate(ValidationEventHandler h)\r
52                 {\r
53                         return 0;\r
54                 }\r
55 \r
56                 //<annotation\r
57                 //  id = ID\r
58                 //  {any attributes with non-schema namespace . . .}>\r
59                 //  Content: (appinfo | documentation)*\r
60                 //</annotation>\r
61                 internal static XmlSchemaAnnotation Read(XmlSchemaReader reader, ValidationEventHandler h)\r
62                 {\r
63                         XmlSchemaAnnotation annotation = new XmlSchemaAnnotation();\r
64                         reader.MoveToElement();\r
65 \r
66                         if(reader.NamespaceURI != XmlSchema.Namespace || reader.LocalName != xmlname)\r
67                         {\r
68                                 error(h,"Should not happen :1: XmlSchemaAnnotation.Read, name="+reader.Name,null);\r
69                                 reader.SkipToEnd();\r
70                                 return null;\r
71                         }\r
72 \r
73                         annotation.LineNumber = reader.LineNumber;\r
74                         annotation.LinePosition = reader.LinePosition;\r
75                         annotation.SourceUri = reader.BaseURI;\r
76 \r
77                         //Read Attributes\r
78                         while(reader.MoveToNextAttribute())\r
79                         {\r
80                                 if(reader.Name == "id")\r
81                                 {\r
82                                         annotation.Id = reader.Value;\r
83                                 }\r
84                                 else if(reader.NamespaceURI == "" || reader.NamespaceURI == XmlSchema.Namespace)\r
85                                 {\r
86                                         error(h,reader.Name + " is not a valid attribute for annotation",null);\r
87                                 }\r
88                                 else\r
89                                 {\r
90                                                                                         if(reader.Prefix == "xmlns")\r
91                                                                                                 annotation.Namespaces.Add(reader.LocalName, reader.Value);\r
92                                                                                         else if(reader.Name == "xmlns")\r
93                                                                                                 annotation.Namespaces.Add("",reader.Value);\r
94                                                 //TODO: Add to Unhandled attributes\r
95                                 }\r
96                         }\r
97                         \r
98                         reader.MoveToElement();\r
99                         if(reader.IsEmptyElement)\r
100                                 return annotation;\r
101 \r
102                         //Content: (appinfo | documentation)*\r
103                         while(reader.ReadNextElement())\r
104                         {\r
105                                 if(reader.NodeType == XmlNodeType.EndElement)\r
106                                 {\r
107                                         if(reader.LocalName != xmlname)\r
108                                                 error(h,"Should not happen :2: XmlSchemaAnnotation.Read, name="+reader.Name,null);\r
109                                         break;\r
110                                 }\r
111                                 if(reader.LocalName == "appinfo")\r
112                                 {\r
113                                         XmlSchemaAppInfo appinfo = XmlSchemaAppInfo.Read(reader,h);\r
114                                         if(appinfo != null)\r
115                                                 annotation.items.Add(appinfo);\r
116                                         continue;\r
117                                 }\r
118                                 if(reader.LocalName == "documentation")\r
119                                 {\r
120                                         XmlSchemaDocumentation documentation = XmlSchemaDocumentation.Read(reader,h);\r
121                                         if(documentation != null)\r
122                                                 annotation.items.Add(documentation);\r
123                                         continue;\r
124                                 }\r
125                                 reader.RaiseInvalidElementError();\r
126                         }\r
127                         return annotation;\r
128                 }\r
129         }\r
130 }\r