XML名称中允许字符的演变?

时间:2017-03-04 20:56:37

标签: xml w3c standards-compliance

我正在尝试编写XML解析器,并且我对NameStartChar感到困惑,根据标准是

NameStartChar      ::=      ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]

W3C一致性测试套件20080827提供的其中一项测试认为以下示例格式不正确,因为名称以#x309a开头。虽然根据定义,它应该在NameStartChar

的可接受范围内
<!DOCTYPE doc [
<!ENTITY e "<&#x309a;></&#x309a;>">
]>
<doc>&e;</doc>

请告知。

1 个答案:

答案 0 :(得分:1)

断开连接是由于最初定义XML名称与以后定义的名称之间的差异......

XML第1版到第4版

XML 1.0 (Second Edition) errata 20020320, W3C Conformance Test Suite 20020606确实包含规则not-wf-sa-140

  

字符&#x309a;CombiningChar,而非字母,所以可能不是   开始一个名字。

但是,该规则基于Extensible Markup Language (XML) 1.0 (Second Edition), W3C Recommendation 6 October 2000,其中Name的定义基于Letter

Name ::= (Letter | '_' | ':') (NameChar)*

其中Letter的定义不包括CombingChar,其中包含#x309A

XML第5版

Name基于您引用的NameStartChar的定义,

Name ::= NameStartChar (NameChar)*
NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]

来自更近期的Extensible Markup Language (XML) 1.0 (Fifth Edition), W3C Recommendation 26 November 2008。它确实允许&#x309a; - 请参阅上面的[#x3001-#xD7FF]范围。

您应该使用更新的测试套件XML W3C Conformance Test Suite, 27 August 2008来进行解析器工作。在那里,你会找到关于这个的说明

  

字符&#x309a;CombiningChar,不是字母, ,但截止到5日   版本,可以开始一个名称(c.f。xmltest/not-wf/sa/140.xml )。

[ 强调添加 ]