One of the most trying aspects of being the PM in charge of XML schema technologies in the .NET Framework is dealing with backwards compatibility and the fact that our v1.0 implementation was buggy (i.e. almost standards compliant).The bugs in our v1.0 implementation of the W3C XML Schema recommendation are compounded by the numerous errata to the W3C XML Schema recommendation which required several changes of behavior from our v1.0 implementation.
Now I've had to deal with two camps of users, the first being those who do not like breaking changes from release to release who would be pissed if upgrading from Everett (most recent version of .NET Framework) to Whidbey (next version of .NET Framework) meant that their applications that were working fine would break because an XML config file that was being read in and validated against a schema on startup was now being considered invalid due to some esoteric part of the W3C XML Schema recommendation. On the other hand, we have customers who depend on W3C XML Schema as a way to share a message contract between producers and consumers of XML potentially on different platforms who expect us to be as standards compliant as possible for validation purposes.
These goals are often contradictory and we constantly have to make tradeoffs between the two on my team given that we work on technologies produced by standards bodies. I'm currently at my wits end as to the best way to ship schema validation in Whidbey. Currently we are trying to figure out how to satisfy both classes of users. One option which I'm unlikely to choose is that our schema validation APIs should have a flag that selects between the buggy or old v1.0 behavior or the most recent, more standards compliant behavior. This solution seems extremely ghetto and I'm not even sure what the flag should be called perhaps BuggyAndGhettoV1Behavior ? Or perhaps even a flag per bug or change made due to clarifications made to the W3C XML Schema recommendation? Or maybe a brand new set of classes for XML schema validation that don't have the baggage? Or is it something else I haven't yet realized? I'd love any feedback from the peanut gallery.
In v1.0 of the .NET Framework we could have been considered Almost Standard Compliant. Unlike myself from my college days I don't see this as such a bad thing anymore.