我正在尝试编写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 "<゚></゚>">
]>
<doc>&e;</doc>
请告知。
答案 0 :(得分:1)
断开连接是由于最初定义XML名称与以后定义的名称之间的差异......
XML 1.0 (Second Edition) errata 20020320, W3C Conformance Test Suite 20020606确实包含规则not-wf-sa-140
,
字符
゚
是CombiningChar
,而非字母,所以可能不是 开始一个名字。
但是,该规则基于Extensible Markup Language (XML) 1.0 (Second Edition), W3C Recommendation 6 October 2000,其中Name
的定义基于Letter
:
Name ::= (Letter | '_' | ':') (NameChar)*
其中Letter
的定义不包括CombingChar
,其中包含#x309A
。
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。它确实允许゚
- 请参阅上面的[#x3001-#xD7FF]
范围。
您应该使用更新的测试套件XML W3C Conformance Test Suite, 27 August 2008来进行解析器工作。在那里,你会找到关于这个的说明
字符
゚
是CombiningChar
,不是字母, ,但截止到5日 版本,可以开始一个名称(c.f。xmltest/not-wf/sa/140.xml
)。
[ 强调添加 ]