The biggest problem with constraints that I've seen has to do with the fact that data itself, in the real world, has this very annoying tendency to morph over time. That's in great part because programmers do not think in terms of resources that evolve but data structures that represent state that is most useful to them, something that strong typing in particular has reinforced. XML was a radical departure from that model - unlike databases, where type was intrinsic, atomic, and implicit to the implementation, and binary objects, which similarly placed constraints upon type for optimization, XML was extrinsically typed, in an advisory rather than compulsory fashion.