首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Jing不允许在id属性中使用冒号(":")?

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

Stack Overflow用户
提问于 2011-07-25 10:05:46
回答 1查看 1.2K关注 0票数 2

我一直在反对xsd:ID不允许在id属性中使用冒号(":")。我第一次注意到这一点是在Emacs中使用James Clark的nxml-mode时,因为它验证了我正在处理的一个XHTML文件。然后,我使用Jing对RNG (随nxml-mode-20041004提供)运行XHTML文件,并收到以下错误:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-25 14:33:38

您在这里看到的是两个细微不同的定义。ID是根据Namespaces in XML 1.0中的NCName类型定义的defined,基础XML标准的ID类型是根据Name类型定义的。两者都有以下定义:

代码语言:javascript
复制
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定义为:

代码语言:javascript
复制
NCName ::=  Name - (Char* ':' Char*) 

就是名字减去冒号。

这样做的结果是,就XML本身而言,ID类型的值可以包含冒号。对于任何使用XML Schema数据类型的数据类型(比如您的RelaxNG模式),有更多的受限数据类型在使用,这禁止使用冒号。任何使用XML Schema兼容属性的属性都将对基本定义有效,但反之亦然。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6811188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档