public static SchemaInfo ReadAndValidateSchema(XmlReader reader, string baseDirectoryForIncludes, IncludeInfo include) { #if SOODA_NO_VALIDATING_READER XmlSerializer ser = new XmlSerializer(typeof(Sooda.Schema.SchemaInfo)); SchemaInfo schemaInfo = (SchemaInfo)ser.Deserialize(reader); #else XmlReaderSettings readerSettings = new XmlReaderSettings(); readerSettings.ValidationType = ValidationType.Schema; readerSettings.Schemas.Add(NamespaceURI, GetSchemaXsdStreamXmlReader()); XmlReader validatingReader = XmlReader.Create(reader, readerSettings); XmlSerializer ser = new XmlSerializer(typeof(Sooda.Schema.SchemaInfo)); SchemaInfo schemaInfo = (SchemaInfo)ser.Deserialize(validatingReader); #endif if (baseDirectoryForIncludes != null) { ProcessIncludes(schemaInfo, schemaInfo.Includes, baseDirectoryForIncludes); } if (include == null) { schemaInfo.Resolve(); } else if (!string.IsNullOrEmpty(include.AssemblyName)) { foreach (ClassInfo ci in schemaInfo.Classes) { ci.Schema = schemaInfo; } } return(schemaInfo); }
static void Resolve(SchemaInfo schema, HashSet <ClassInfo> affectedClasses) { // add subclasses foreach (ClassInfo ci in affectedClasses.ToArray()) { foreach (ClassInfo sci in schema.GetSubclasses(ci)) { affectedClasses.Add(sci); } } schema.Resolve(affectedClasses); }
static void Resolve(SchemaInfo schema, HashSet<ClassInfo> affectedClasses) { // add subclasses foreach (ClassInfo ci in affectedClasses.ToArray()) { foreach (ClassInfo sci in schema.GetSubclasses(ci)) affectedClasses.Add(sci); } schema.Resolve(affectedClasses); }