So say the Grumpy Old Programmers, and who am I to argue?
It struck me a long while ago that talking about the XML “data model” was barking up the wrong tree, so to speak. A large percentage of the data structures serialized into XML aren’t actually trees (the simple ones are just name-value associative maps; the complex ones tend to be graphs), so approaching them through a tree-oriented interface is always going to be a little clumsy. Better, in the complex cases at least, to get the data deserialized into a more comfortable container, and do your validation and processing with that.
Now there is XQuery, which I hesitate to call a waste of time (much smarter people than me have given their time to it, although I half suspect their real interest was in formulating a graph query language that just happened to be useful for XML processing) but still can’t help thinking of as an attempt to formalize the semantics of all those barks. It’s still the wrong tree, even if it now takes a several-hundred page draft specification document to figure out how to say “woof”.