我有點想知道為什么<必須在 XML 屬性中進行轉義,例如
<foo bar="3 < 4" />
從周圍(標簽內部,屬性值內部)來看,決議器應該很清楚它不能是新標簽的開始。
XML 規范禁止這樣做的原因是什么?
uj5u.com熱心網友回復:
不到字符(<)必須確實可以逃過屬性值中:
格式良好約束:
<屬性值中沒有屬性值(“
<”除外)中直接或間接參考的任何物體的替換文本不得包含<.
為什么?
正如您所觀察到的,<可以明確決議包含的屬性值。然而,動機是使 XML 的決議規則盡可能簡單......
根據 XML 1.0 W3C Recommendation 編輯之一和The Annotated XML Specification 的作者 Tim Bray 的說法,該規范捕捉了 XML 設計決策背后的一些基本原理:
驅逐
<從表面上看,這條規則似乎有點不必要。既然你不能在屬性值中使用標簽,那么使用 < 幾乎不會讓人感到困惑,那么為什么要禁止它呢?
這是另一種讓DPH生活更輕松的嘗試。XML 中的規則很簡單:當您閱讀文本時,點擊了一個
<,這就是一個標記分隔符。不只是有時,總是。當您想要資料中的一個時,您必須使用<. 不只是有時,總是。在屬性值中也是如此。這條規則還有另一個意想不到的有益副作用;它使捕獲某些錯誤變得更加容易。假設您有一大塊 XML,如下所示:
<a href="notes.html> <img src='notes.gif'></a>請注意,notes.html 缺少其結束語。如果沒有禁止
<規則,就很難檢測到這個問題并發出合理的錯誤訊息。由于屬性值幾乎可以包含任何內容,因此在處理器找到下一個引號之前不會檢測到任何錯誤。相反,當您第一次點擊 a 時,您會收到一條錯誤訊息<,在上面的示例中,在許多情況下,這幾乎是立即發生的。反向鏈接到規范
uj5u.com熱心網友回復:
我不知道確切,但在許多情況下,解釋是 SGML 兼容性。XML 被設計為 SGML 的一個子集,因此不允許 SGML 不允許的事情。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/351157.html
