2016-08-12 89 views
3

根據specification,字符[#x10000-#xEFFFF]在XML名稱中是合法的。然而,W3驗證說,這XML不能很好地形成:XML名稱中是否允許使用補充字符?

<?xml version="1.0"?> 
<>value</> 

(該屬性的名稱是Unicode字符#x10400)。一些瀏覽器,如Firefox,也對此抱怨(Chrome顯示XML,IE顯示空白頁面)。工具中的錯誤還是XML的格式不正確?

+0

儘管我找不到問題的答案,但我可以說的是,對於使用XML這種字符看起來並不是一個好主意,因爲引用了規範: 「鼓勵文檔作者使用自然語言中有意義的單詞或單詞組合的名稱,並避免名稱中的符號或空白字符。「 XML是爲自然語言編寫的,您爲什麼要使用它? 「 – Azaghal

+0

」「僅僅是一個例子。這是來自Deseret字母表的一封信,所以有人可以用這些字母做出有意義的名字。我不知道是否有人真的使用這個字母,但這不是不可能的。 – pkalinow

回答

1

是的,在XML名稱中允許使用補充字符。

您的XML 格式良好,因爲元素名稱使用W3C XML Recommendation中生產Name所允許的字符。

但是:

  • 在線驗證是得到你的文件通過HTTP將不得不 照顧介意的字符編碼。看來,到時候 的W3C Markup Validation Service得到你的XML,你的性格是 在編碼洗牌迷路:

    警告缺少"charset"屬性爲"text/xml"文件。

    通過Web瀏覽器 (Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36)發送的HTTP標頭Content-Typetext/xml)沒有 包含"charset"參數,但Content-Type是XML text/*子類型之一。

    有關規範(RFC 3023)指定的 "us-ascii"這種文檔的默認強,所以我們將使用這個值,而不管 你可能已經表明其他地方的任何編碼。

    如果你想使用不同的編碼,你應該安排到 讓你的瀏覽器發送這個新的編碼信息。

    嘗試脫機XML解析器。例如,基於Xerces-J的驗證器可以正確識別XML是否格式正確。

  • 請注意,並非所有允許NAME的字符都允許在NCNAMEs。 因此,雖然格式良好,但根據不允許使用此類名稱的XSD,使用此類字符的XML無法生效 。

2

它是在工具的錯誤或XML確實沒有很好地形成的呢?

這是well formed在最新的規範,這是XML 1.0第五版。但是在之前的版本中是not well-formed,直到2008年。

最初的XML 1.0規範(從1998年開始)將一組名稱字符鎖定爲在當時的Unicode標準中定義爲字母的字符。這並不包括,幾年之後,它只有Unicode 3.1。

XML 1.1對於名稱中接受的字符(主要是因爲這個原因,允許來自未來Unicode版本的字符)要寬鬆得多,這是一件好事。然而,XML 1.1從來沒有真正引起人們的注意,因此編輯們決定將更新的,更寬鬆的namechar規則從1.0那裏移植回來。這是controversial,總而言之,這可能不是一件好事。

這意味着您可以在XML 1.0文檔的名稱中使用,並且可以被已爲第五版更新的解析器子集使用(或者從未首先實施嚴格的規則),或者您可以在XML中使用它們1.1文檔,並可被支持XML 1.1的一組不同的解析器使用。

或者,更現實的說,你可以避免那些形式良好的人物 - 完全依賴,並感到有點難過。

+0

很好的瞭解XML版本之間的這種區別。在我看來,一個XML 1.0可能與另一個XML 1.0不兼容,這似乎很奇怪...... – pkalinow

相關問題