XML saves the world <?>

Extensibility challenges

XML has (several) mechanisms for describing constraints for a document to be "valid" for a given application. (Initially, DTDs, and more recently XML Schema, Relax NG, Schematron.)

This notion of validity is almost entirely syntactic. These are pretty much based on formal syntax description techniques, or regular expressions.

The various syntactic constraint mechanisms present varying degrees of challenge for extensibility of data formats.  DTDs are notoriously infexible in this respect. XML Schemas are better, provided that the desired extension points have been correctly identified in the original schema design.

XML is still weak in the area of "language mixing".  The introduction of XML namespaces goes some way to addressing these issues by providing a framework for avoiding element and attribute name clashes.  The limitations of XML are particularly noticeable when one tries to embedd XML data from an application into another application's XML document format.  Surprisingly, XML does not provide a reliable way to encapsulate one XML document inside another:  there are scoped mechanisms (e.g. language tagging and namespace declarations) that can change an application's interpretation of an XML document when it is nested in another.

This means that XML-based languages that are to be combined in a single XML document should be designed each with some knowledge of the others.