I know I am just the latest in a long line of people to “comment” on this subject – but I just wanted to give my two cents. 


I appreciate the fact that the XSD designers wanted to vastly enrich my datatype life.  But why come up with a bunch of built-in SimpleType datatypes which are just derivations of other SimpleTypes when you gave me a nice mechanism for doing so myself?  If I really want a nonPositiveInteger – then I can easily define it myself using constraining facets.   If I really want a gYearMonth then... does anyone really need a gYearMonth?


(I also don’t really understand having a set of limitless integers – at least they could have come up with a name that people would not pick by default - something like IntegerDontUseThisUnlessYouAbsolutelyHaveTo – but that is another rant for another time).


One can point out that there is the primitive datatypes – but again, too much here and I would argue that most users would not tend to limit their SimpleType datatype usage to the primitives – particularly because the primitives don’t contain an integer type. 


I really think XSD would be a lot better off here if they had gone the programming language route and really limited the amount of built-in value types.  I understand that there is value with have a large set of built-in datatypes, but I think they have gone well beyond the 90/10 rule on this.