我一直在努力反对 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 http://www.w3.org/XML/xml-19980210-errata#E98,我的意思是:“你不应该在 id 属性中使用冒号,但你应该被允许这样做。”鉴于这种解释,我很困惑为什么Jing说我不能。
谢谢你,
Zachary
您在这里看到的是两个略有不同的定义。 xsd:ID 是defined http://www.w3.org/TR/xmlschema-2/#ID就 NCName 类型而言XML 1.0 中的命名空间 http://www.w3.org/TR/xml-names/#ns-decl基本 XML 标准的 ID 类型是根据Name http://www.w3.org/TR/REC-xml/#NT-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 模式数据类型的任何内容(例如您的 RelaxNG 模式),存在更受限制的数据类型,禁止使用冒号。任何使用 XML 模式兼容属性的内容都将根据基本定义有效,但反之则不一定。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)