
On 4/23/06, Thorsten Ottosen <thorsten.ottosen@dezide.com> wrote:
Daniel Walker wrote:
On 4/23/06, Thorsten Ottosen <thorsten.ottosen@dezide.com> wrote:
Schemas give you data types and type checking, which obviously is nice to have when you're dealing with data. I think XML schema validation is one of the most import features of XML for the same reason that I like C++ templates and type-safe compile time polymorphism: making sure your data types are correct before hand gives you one less thing to worry about.
Why is that better than a run-time exception when loading the file?
Why is what better? Maybe I wasn't clear. When an XML file includes a schema and fails validation when loaded, you do get a run-time exception. I was trying to say that's a good thing. An XML validating parser is similar to a compiler for a strongly typed language: it catches type errors (in addition to syntax errors) immediately before you actually try to use the file.
Ok, why is that exception better than the one I generate if I don't meet the tag I expect, of if the contents of a tag is not of the type I expect?
Well, you don't have to write C++ code to check if the tag/content is what you expect. You declare the acceptable content (tags, attribute/values, branch structures/sub-trees, etc) for your config file in a schema, and the parser determines whether or not the XML file conforms to the format declared in the schema. It has time-saving, organization, and code-reuse advantages among others. Most importantly, it has correctness advantages because one bug you don't have to worry about when you're traversing the tree is running into a tag you don't expect. By the time the file is loaded, all the tags, tree structure, etc. has been validated by the parser and is guaranteed to be the format you expect.