I'm always rattling on about abstraction layers, how they seem like extra work, but with a little bit of foresight, can save a lot of work in the long run. The XML families of markup languages are a great tool when it comes to abstraction layers. Sure, they aren't perfect, but they are simple, extensible, and consistent.
I hope that people continue to see XML as the abstraction layer of choice for software applications. A lot of times, people try to change the dynamics of how the abstraction layer works, and when I see that, I feel like its the wrong part of the program to focus upon.
Abstraction layers aren't really supposed to do anything in particular, they are only meant to provide a layer of independence to something with a specific purpose. Seems like a vague concept, but is so useful its worth it to wrap your mind around it.