मान लें कि मेरे पास एक स्कीमा है जिसके साथ मैं एक इनपुट दस्तावेज़ का अनुपालन करना चाहता हूं। मैं इस प्रकार स्कीमा के अनुसार फ़ाइल लोड करता हूं:मैं .NET में दिए गए स्कीमा के अनुपालन को कैसे मजबूर कर सकता हूं?
// 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);
}
यह फ़ाइल में छोटी त्रुटियों का पता लगाने में ठीक काम करता है। हालांकि, क्योंकि स्कीमा एक नाम स्थान के लिए बंद कर दिया जाता है, निम्नलिखित की तरह एक दस्तावेज़ अमान्य है, लेकिन के माध्यम से sneaks:
<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>
मैं कहना है कि केवल नामस्थान जिसके लिए मैं स्कीमेता है स्कीमा प्रमाणीकरण पास करना चाहिए चाहते हैं।
काम नहीं किया। अभी भी अमान्य दस्तावेज़ पास करने देता है। तदनुसार अद्यतन उदाहरण कोड। –