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的範圍。

參見

外部連結