2016-08-12 72 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

相关问题