The hype was that XML was solving the problem of knowing how data was structured. So you could send someone a message, and if you wanted to include a vector image you'd just embed an SVG. If you wanted to send equations you'd just embed MathML. If you wanted to send a Warhammer army list, you'd embed that XML.
The messaging system wouldn't have to individually add support for these things - it would just use XML schema to validate anything that got passed through. Data could come with XSLT to explain how to display it (i.e. your warhammer army list would come with a transform that told wave how to turn it into XHTML for display) - but the source data was still available in machine-readable form, with a canonical schema defined by a URL - we could have a single canonical format for everything, even things like addresses, and then rather than defining their own address type, any more complex data format that needed to include an address would just say "embed the address element defined at this schema".
It would work in the other direction too. Rather than fetching a wikipedia page, say, or a blog post, and getting a bunch of unstructured HTML, you'd get the article source in XML format, and an XSLT that said how to display that as the web page. There'd be no need for separate "web API" endpoints to fetch data in structured form, because every web page would simply be that structured data, plus a transform to render it as XHTML.
It was a glorious dream, and one that resonates even now. To my eyes the main - perhaps only - reason it failed is that XSLT turns out to be a horrible language to write and even more horrible to read, to the extent that even for transforming XML-like documents - literally the sole design purpose of XSLT - I'd prefer to use a general-purpose programming language, or even, shudder, Javascript. And people did.
The messaging system wouldn't have to individually add support for these things - it would just use XML schema to validate anything that got passed through. Data could come with XSLT to explain how to display it (i.e. your warhammer army list would come with a transform that told wave how to turn it into XHTML for display) - but the source data was still available in machine-readable form, with a canonical schema defined by a URL - we could have a single canonical format for everything, even things like addresses, and then rather than defining their own address type, any more complex data format that needed to include an address would just say "embed the address element defined at this schema".
It would work in the other direction too. Rather than fetching a wikipedia page, say, or a blog post, and getting a bunch of unstructured HTML, you'd get the article source in XML format, and an XSLT that said how to display that as the web page. There'd be no need for separate "web API" endpoints to fetch data in structured form, because every web page would simply be that structured data, plus a transform to render it as XHTML.
It was a glorious dream, and one that resonates even now. To my eyes the main - perhaps only - reason it failed is that XSLT turns out to be a horrible language to write and even more horrible to read, to the extent that even for transforming XML-like documents - literally the sole design purpose of XSLT - I'd prefer to use a general-purpose programming language, or even, shudder, Javascript. And people did.