Canonical XML


Canonical XML is a normal form of XML, intended to allow relatively simple comparison of pairs of XML documents for equivalence; for this purpose, the Canonical XML transformation removes non-meaningful differences between the documents. Any XML document can be converted to Canonical XML.
For example, XML permits whitespace to occur at various points within start-tags, and attributes to be specified in any order. Such differences are seldom if ever used to convey meaning, and so these forms are generally considered equivalent:
<p class="a" secure="1">
<p secure = "1"
class='a' >
In converting an arbitrary XML document to Canonical XML, attributes are encoded in a normative order, and with normative spacing and quoting. Thus, the second form above would be converted to the first.
Canonical XML specifies a number of other details, some of which are:
According to the W3C, if two XML documents have the same canonical form, then the two documents are logically equivalent within the given application context.
However, in a special context users might care about special semantics beyond the generic logical equivalence with which Canonical XML is associated. For example, a steganography system could conceal information in an XML document by varying whitespace, attribute quoting and order, the use of hexadecimal vs. decimal numeric character references, and so on. Obviously converting such a file to Canonical XML would lose those specialized semantics. On the other hand, XML files that differ in their use of upper- vs. lower-case, or that use archaic versus modern spelling, and so on, might be considered equivalent for certain purposes. Such contexts are beyond the scope of Canonical XML.