我一直在反对xsd:ID不允许在id属性中使用冒号(":")。我第一次注意到这一点是在Emacs中使用James Clark的nxml-mode时,因为它验证了我正在处理的一个XHTML文件。然后,我使用Jing对RNG (随nxml-mode-20041004提供)运行XHTML文件,并收到以下错误:
error: value of attribute "id" is invalid; must be an XML name without colons我见过的大多数W3页面都指出冒号是有效的。然后我发现了这个,http://www.w3.org/XML/xml-19980210-errata#E98,我理解它的意思是:“您不应该在id属性中使用冒号,但应该允许这样做。”考虑到这种解释,我很困惑为什么Jing说我不能。
谢谢,
Zachary
发布于 2011-07-25 14:33:38
您在这里看到的是两个细微不同的定义。ID是根据Namespaces in XML 1.0中的NCName类型定义的defined,基础XML标准的ID类型是根据Name类型定义的。两者都有以下定义:
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]
NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 |
[#x0300-#x036F] | [#x203F-#x2040]
Name ::= NameStartChar (NameChar)*NCName定义为:
NCName ::= Name - (Char* ':' Char*) 就是名字减去冒号。
这样做的结果是,就XML本身而言,ID类型的值可以包含冒号。对于任何使用XML Schema数据类型的数据类型(比如您的RelaxNG模式),有更多的受限数据类型在使用,这禁止使用冒号。任何使用XML Schema兼容属性的属性都将对基本定义有效,但反之亦然。
https://stackoverflow.com/questions/6811188
复制相似问题