我一直在敲打xsd:ID,不允许在id属性中使用冒号(“:”)。我在Emacs中使用James Clark的nxml-mode时首先注意到这一点,因为它验证了我正在使用的XHTML文件。然后我使用Jing运行针对RNG的XHTML文件(随nxml-mode-20041004提供)并收到以下错误:
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属性中使用冒号,但你应该被允许。”鉴于这种解释,我很难过为什么京说我不能。
谢谢你,
扎卡里
答案 0 :(得分:4)
你在这里看到两个略有不同的定义。 xsd:根据defined中的NCName类型,ID为Namespaces in XML 1.0,基本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兼容属性的任何内容都将对基本定义有效,但不一定相反。