为什么 Jing 不允许在 id 属性中使用冒号(“:”)?

发布于 2024-11-26 12:24:32 字数 524 浏览 0 评论 0 原文

我一直在努力反对 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说我不能。

谢谢你,
扎卡里

I've been banging my head against xsd:ID not allowing a colon (":") in an id attribute. I first noticed this when using James Clark's nxml-mode in Emacs as it validated an XHTML file I was working with. I then ran the XHTML file against the RNG (provided with nxml-mode-20041004) using Jing and received the following error(s):

error: value of attribute "id" is invalid; must be an XML name without colons

Most of the W3 pages I've seen indicate that a colon is valid. Then I found this, http://www.w3.org/XML/xml-19980210-errata#E98, which I take to mean: "you shouldn't use a colon in an id attribute, but you should be allowed to." Given that interpretation, I'm stumped why Jing says I can't.

Thank you,
Zachary

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心的憧憬 2024-12-03 12:24:32

您在这里看到的是两个略有不同的定义。 xsd:ID 是根据 定义的 "http://www.w3.org/TR/xml-names/#ns-decl" rel="nofollow">XML 1.0 中的命名空间 和基本 XML 标准的 ID 类型是根据以下内容定义的名称类型。两者共享以下定义:

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 模式兼容属性的内容都将根据基本定义有效,但反之则不一定。

You're looking at two subtly different definitions here. xsd:ID is defined in terms of the NCName type in Namespaces in XML 1.0 and the ID type of the base XML standard is defined in terms of the Name type. Both share the following definition:

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 is defined as:

NCName ::=  Name - (Char* ':' Char*) 

which is Name minus the colon.

The result of this is that in terms of XML itself, the value of something typed as ID can contain a colon. In terms of anything that uses the XML Schema datatypes (such as your RelaxNG schema) there is more restricted data type in use which forbids the use of the colon. Anything that uses an XML Schema compliant attribute will be valid against the base definition but not necessarily the other way around.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文