Let's say I have a circuit with which I want the input document to match. I upload the file according to the diagram as follows:
// Load the ABC XSD var schemata = new XmlSchemaSet(); string abcSchema = FooResources.AbcTemplate; using (var reader = new StringReader(abcSchema)) using (var schemaReader = XmlReader.Create(reader)) { schemata.Add(string.Empty, schemaReader); } // Load the ABC file itself var settings = new XmlReaderSettings { CheckCharacters = true, CloseInput = false, ConformanceLevel = ConformanceLevel.Document, IgnoreComments = true, Schemas = schemata, ValidationType = ValidationType.Schema, ValidationFlags = XmlSchemaValidationFlags.ReportValidationWarnings }; XDocument inputDoc; try { using (var docReader = XmlReader.Create(configurationFile, settings)) { inputDoc = XDocument.Load(docReader); } } catch (XmlSchemaException xsdViolation) { throw new InvalidDataException(".abc file format constraint violated.", xsdViolation); }
This works great when detecting trivial errors in a file. However, since the schema is locked for the namespace, a document like the one below is invalid, but sneaks through:
<badDoc xmlns="http://Foo/Bar/Bax"> This is not a valid document; but Schema doesn't catch it because of that xmlns in the badDoc element. </badDoc>
I would like to say that only namespaces for which I have schemas should pass schema validation.
Billy oneal
source share