internal static XmlSchemaKeyref Read(XmlSchemaReader reader, ValidationEventHandler h) { XmlSchemaKeyref xmlSchemaKeyref = new XmlSchemaKeyref(); reader.MoveToElement(); if (reader.NamespaceURI != "http://www.w3.org/2001/XMLSchema" || reader.LocalName != "keyref") { XmlSchemaObject.error(h, "Should not happen :1: XmlSchemaKeyref.Read, name=" + reader.Name, null); reader.Skip(); return(null); } xmlSchemaKeyref.LineNumber = reader.LineNumber; xmlSchemaKeyref.LinePosition = reader.LinePosition; xmlSchemaKeyref.SourceUri = reader.BaseURI; while (reader.MoveToNextAttribute()) { if (reader.Name == "id") { xmlSchemaKeyref.Id = reader.Value; } else if (reader.Name == "name") { xmlSchemaKeyref.Name = reader.Value; } else if (reader.Name == "refer") { Exception ex; xmlSchemaKeyref.refer = XmlSchemaUtil.ReadQNameAttribute(reader, out ex); if (ex != null) { XmlSchemaObject.error(h, reader.Value + " is not a valid value for refer attribute", ex); } } else if ((reader.NamespaceURI == string.Empty && reader.Name != "xmlns") || reader.NamespaceURI == "http://www.w3.org/2001/XMLSchema") { XmlSchemaObject.error(h, reader.Name + " is not a valid attribute for keyref", null); } else { XmlSchemaUtil.ReadUnhandledAttribute(reader, xmlSchemaKeyref); } } reader.MoveToElement(); if (reader.IsEmptyElement) { return(xmlSchemaKeyref); } int num = 1; while (reader.ReadNextElement()) { if (reader.NodeType == XmlNodeType.EndElement) { if (reader.LocalName != "keyref") { XmlSchemaObject.error(h, "Should not happen :2: XmlSchemaKeyref.Read, name=" + reader.Name, null); } break; } if (num <= 1 && reader.LocalName == "annotation") { num = 2; XmlSchemaAnnotation xmlSchemaAnnotation = XmlSchemaAnnotation.Read(reader, h); if (xmlSchemaAnnotation != null) { xmlSchemaKeyref.Annotation = xmlSchemaAnnotation; } } else if (num <= 2 && reader.LocalName == "selector") { num = 3; XmlSchemaXPath xmlSchemaXPath = XmlSchemaXPath.Read(reader, h, "selector"); if (xmlSchemaXPath != null) { xmlSchemaKeyref.Selector = xmlSchemaXPath; } } else if (num <= 3 && reader.LocalName == "field") { num = 3; if (xmlSchemaKeyref.Selector == null) { XmlSchemaObject.error(h, "selector must be defined before field declarations", null); } XmlSchemaXPath xmlSchemaXPath2 = XmlSchemaXPath.Read(reader, h, "field"); if (xmlSchemaXPath2 != null) { xmlSchemaKeyref.Fields.Add(xmlSchemaXPath2); } } else { reader.RaiseInvalidElementError(); } } return(xmlSchemaKeyref); }
/* * internal new void error(ValidationEventHandler handle, string message) * { * errorCount++; * ValidationHandler.RaiseValidationError(handle, this, message); * } */ //<key // id = ID // name = NCName // {any attributes with non-schema namespace . . .}> // Content: (annotation?, (selector, field+)) //</key> internal static XmlSchemaKey Read(XmlSchemaReader reader, ValidationEventHandler h) { XmlSchemaKey key = new XmlSchemaKey(); reader.MoveToElement(); if (reader.NamespaceURI != XmlSchema.Namespace || reader.LocalName != xmlname) { error(h, "Should not happen :1: XmlSchemaKey.Read, name=" + reader.Name, null); reader.Skip(); return(null); } key.LineNumber = reader.LineNumber; key.LinePosition = reader.LinePosition; key.SourceUri = reader.BaseURI; while (reader.MoveToNextAttribute()) { if (reader.Name == "id") { key.Id = reader.Value; } else if (reader.Name == "name") { key.Name = reader.Value; } else if ((reader.NamespaceURI == "" && reader.Name != "xmlns") || reader.NamespaceURI == XmlSchema.Namespace) { error(h, reader.Name + " is not a valid attribute for key", null); } else { XmlSchemaUtil.ReadUnhandledAttribute(reader, key); } } reader.MoveToElement(); if (reader.IsEmptyElement) { return(key); } // Content: annotation?, selector, field+ int level = 1; while (reader.ReadNextElement()) { if (reader.NodeType == XmlNodeType.EndElement) { if (reader.LocalName != xmlname) { error(h, "Should not happen :2: XmlSchemaKey.Read, name=" + reader.Name, null); } break; } if (level <= 1 && reader.LocalName == "annotation") { level = 2; //Only one annotation XmlSchemaAnnotation annotation = XmlSchemaAnnotation.Read(reader, h); if (annotation != null) { key.Annotation = annotation; } continue; } if (level <= 2 && reader.LocalName == "selector") { level = 3; XmlSchemaXPath selector = XmlSchemaXPath.Read(reader, h, "selector"); if (selector != null) { key.Selector = selector; } continue; } if (level <= 3 && reader.LocalName == "field") { level = 3; if (key.Selector == null) { error(h, "selector must be defined before field declarations", null); } XmlSchemaXPath field = XmlSchemaXPath.Read(reader, h, "field"); if (field != null) { key.Fields.Add(field); } continue; } reader.RaiseInvalidElementError(); } return(key); }