Canonical XML Canonical XML规范化形式的XMLXML规范的一个子集任何XML文档都可以转换为规范化形式的XML因此将特定类型的微小差异去除却仍是该XML文档由于这些特定的差异通常不认为是有意义的转换成规范化形式的XML是判断两个XML文档逻辑上是否是同一个文档的好办法 举例来说XML允许在开始标签tag的不同点出现属性可以按任何顺序书写这些差异很少用来表达含义因此这些形式通常被认为是相等的 p classa secure p secure   classa  在将一个任意XML文档到规范化形式的XML的转换中属性将按标准书序名字的字母顺序排列空格和引号被标准化 这样上面的第二种形式将转换成第一种 Canonical XML定义了一些规范化形式的规则包括 使用UTF编码 用xA字符表示换行符 属性值里的白空格被正规化 添加缺省属性的说明 CDATA标记的部分替换为相应的文字字符 展开实体引用 删除XML的声明和DTD 空元素使用开始结束标签对而不是用特殊的空元素语法 属性按照属性名的字母顺序排序 删除元素中多余的命名空间声明 讲一个文档转换为规范化形式的XML是幂等的 也就是说第一次转换通常产生与原文档不同的字符串而重复的转换将不再产生变化 根据WC的规范如果两个XML文档具有相同的规范化形式那么在一定的应用上下文极少见的情形除外中这两个文档在逻辑上是相等的 然而在特殊的上下文中用户可能关心规范形式的XML逻辑等价之外的特殊语义比如说隐写术系统可能在XML文档中通过不同的白空格属性引号和顺序使用十进制或十六进制数字字符等等来隐藏信息显然将这样的文件转换为标准化形式的XML将丢失这些特殊的语义而另一方面XML文件使用大小写的不同单词使用古代的拼写或现代的拼写等在某种意义上可以看作是相同的这样的语境超过了标准化形式XML的范围