Canonical_XML

Canonical XML （ 規範化形式的XML ） XML規範的一個子集 。 任何XML文檔都可以轉換爲規範化形式的XML ， 因此將特定類型的微小差異去除卻仍是該XML文檔 。 由於這些特定的差異通常不認爲是有意義的 ， 轉換成規範化形式的XML是判斷兩個XML文檔邏輯上是否是同一個文檔的好辦法 。 舉例來說 ， XML允許在開始標籤 （ tag ） 的不同點出現 ， 屬性可以按任何順序書寫 ， 這些差異很少用來表達含義 ， 因此這些形式通常被認爲是相等的 <p class="a" secure="1"> < p secure = " 1 " class =' a' > 在將一個任意XML文檔到規範化形式的XML的轉換中 ， 屬性將按標準書序 （ 名字的字母順序 ） 排列 ， 空格和引號被標準化 。 這樣上面的第二種形式將轉換成第一種 。 Canonical XML定義了一些規範化形式的規則 ， 包括 ： 使用UTF - 8編碼 用0x0A字符表示換行符 屬性值裏的白空格被正規化 添加缺省屬性的說明 CDATA標記的部分替換爲相應的文字字符 展開實體引用 刪除XML的聲明和DTD 空元素使用開始 / 結束標籤對 ， 而不是用特殊的空元素語法 屬性按照屬性名的字母順序排序 刪除元素中多餘的命名空間聲明 講一個文檔轉換爲規範化形式的XML是冪等的 。 也就是說 ， 第一次轉換通常產生與原文檔不同的字符串 ， 而重複的轉換將不再產生變化 。 根據W3C的規範 ， 如果兩個XML文檔具有相同的規範化形式 ， 那麼在一定的應用上下文 （ 極少見的情形除外 ） 中 ， 這兩個文檔在邏輯上是相等的 。 然而 ， 在特殊的上下文中 ， 用戶可能關心規範形式的XML邏輯等價之外的特殊語義 。 比如說 ， 隱寫術系統可能在XML文檔中通過不同的白空格 ， 屬性引號和順序 ， 使用十進制或十六進制數字字符等等來隱藏信息 。 顯然 ， 將這樣的文件轉換爲標準化形式的XML將丟失這些特殊的語義 。 而另一方面 ， XML文件使用大小寫的不同 ， 單詞使用古代的拼寫或現代的拼寫等 ， 在某種意義上可以看作是相同的 ， 這樣的語境超過了標準化形式XML的範圍 。