1 // Author: Dwivedi, Ajay kumar
\r
6 namespace System.Xml.Schema
\r
9 /// Summary description for XmlSchemaKey.
\r
11 public class XmlSchemaKey : XmlSchemaIdentityConstraint
\r
13 private static string xmlname = "key";
\r
15 public XmlSchemaKey()
\r
19 /// 1. name must be present
\r
20 /// 2. selector and field must be present
\r
23 internal new int Compile(ValidationEventHandler h, XmlSchemaInfo info)
\r
25 return base.Compile(h,info);
\r
29 internal int Validate(ValidationEventHandler h)
\r
34 internal new void error(ValidationEventHandler handle, string message)
\r
37 ValidationHandler.RaiseValidationError(handle, this, message);
\r
43 // {any attributes with non-schema namespace . . .}>
\r
44 // Content: (annotation?, (selector, field+))
\r
46 internal static XmlSchemaKey Read(XmlSchemaReader reader, ValidationEventHandler h)
\r
48 XmlSchemaKey key = new XmlSchemaKey();
\r
49 reader.MoveToElement();
\r
51 if(reader.NamespaceURI != XmlSchema.Namespace || reader.LocalName != xmlname)
\r
53 error(h,"Should not happen :1: XmlSchemaKey.Read, name="+reader.Name,null);
\r
58 key.LineNumber = reader.LineNumber;
\r
59 key.LinePosition = reader.LinePosition;
\r
60 key.SourceUri = reader.BaseURI;
\r
62 while(reader.MoveToNextAttribute())
\r
64 if(reader.Name == "id")
\r
66 key.Id = reader.Value;
\r
68 else if(reader.Name == "name")
\r
70 key.Name = reader.Value;
\r
72 else if(reader.NamespaceURI == "" || reader.NamespaceURI == XmlSchema.Namespace)
\r
74 error(h,reader.Name + " is not a valid attribute for key",null);
\r
78 //TODO: Add to Unhandled attributes
\r
82 reader.MoveToElement();
\r
83 if(reader.IsEmptyElement)
\r
86 // Content: annotation?, selector, field+
\r
88 while(reader.ReadNextElement())
\r
90 if(reader.NodeType == XmlNodeType.EndElement)
\r
92 if(reader.LocalName != xmlname)
\r
93 error(h,"Should not happen :2: XmlSchemaKey.Read, name="+reader.Name,null);
\r
96 if(level <= 1 && reader.LocalName == "annotation")
\r
98 level = 2; //Only one annotation
\r
99 XmlSchemaAnnotation annotation = XmlSchemaAnnotation.Read(reader,h);
\r
100 if(annotation != null)
\r
101 key.Annotation = annotation;
\r
104 if(level <= 2 && reader.LocalName == "selector")
\r
107 XmlSchemaXPath selector = XmlSchemaXPath.Read(reader,h,"selector");
\r
108 if(selector != null)
\r
109 key.Selector = selector;
\r
112 if(level <= 3 && reader.LocalName == "field")
\r
115 XmlSchemaXPath field = XmlSchemaXPath.Read(reader,h,"field");
\r
117 key.Fields.Add(field);
\r
120 reader.RaiseInvalidElementError();
\r