Some important best practices for using XML Schema. Use ANY - To make a schema extensible it must be possible to add new children to an existing element. As a rule all elements in a schema should be extensible. This derives from the general architectural principle "don't paint yourself into corners". As such throw in ANY elements everywhere. In the early W3C schema specs it was possible to just set an attribute on the schema that made everything extensible but unfortunately this feature was removed.
An alternative is to use type substitution but this is a bad idea for protocols because type substitution only works if the processor has the extended schema which is usually never the case.
Extensible Messaging and Presence Protocol (XMPP) is an open, XML-inspired protocol for near-real-time, extensible instant messaging (IM) and presence information
Protocol Buffers are a way of encoding structured data in an efficient yet extensible format. Google uses Protocol Buffers for almost all of its internal RPC protocols and file formats.
We use literally thousands of different data formats to represent networked messages between servers, index records in repositories, geospatial datasets, and more. Most of these formats are structured, not flat. How do we encode it all?
XML? No, that wouldn't work. As nice as XML is, it isn't going to be efficient enough for this scale. When all of your machines and network links are running at capacity, XML is<sep/>