Version identifiers and XML: continuing the conversation

Volume 7, Issue 215; 16 Dec 2004; last modified 08 Oct 2010

More thoughts on the appropriateness of “1.1”.

David has updated his essay about version identifiers and XML.

It's factually on solid ground now, but I still balk at the statement “Thus an XML 1.1 processor cannot read all XML 1.0 content.” I can't argue that some person writing an XML 1.1 processor with no prior knowledge of XML 1.0 might blow it, but I don't see any reason why a halfway competent engineer would write an XML 1.1 processor that couldn't cope with XML 1.0.

Anyone writing an XML 1.1 processor can trivially read all XML 1.0 content. They have to:

  1. Notice the “version='1.0'” in the declaration (or the absence of a declaration).

  2. Fault on 0x01-0x1F, if they occur.

  3. Not fault on 0x7F-0x9F, if they occur unescaped.

There is no reason on earth not to build a 1.1 processor that is backwards compatible with 1.0. This is just not rocket science.

I think epithets like “blew it” should be reserved for cases where the incompatible change is at the semantic level or where reasonable backwards compatibility is syntactically difficult or impossible.

The real trouble with XML 1.1 isn't that it's not backwards compatible anyway. It's the fact that your whole application has to be prepared for XML 1.1 content. There's no point parsing Ethiopic tag names correctly if your application is going to fall over later on.

And Dave still hasn't answered my last question: Do you really think “must ignore” would have been a sensible policy for forwards-compatible evolution of XML name characters?


Well, not quite. You need to use the 1.0 rules for names, and make sure your namespace names are proper URIs, and turn off the special treatment of U+0085 and U+2028. And maybe another thing or two that doesn't come to my mind just now. But after that's done, yes.

And that's why I wanted to call it "XML 1.0.1". To convey the smallness, the utter triviality, of the changes needed to XML parsers.

—Posted by John Cowan on 16 Dec 2004 @ 05:28 UTC #

Fair point. There's a little more too it. But we're both trying to emphasize the same thing: it's dead easy for an implementor to make her 1.1 parser correctly handle 1.0 documents in a backwards compatible way.

—Posted by Norman Walsh on 16 Dec 2004 @ 07:03 UTC #