我已经在.NET中制作了自定义的xhtml验证器(通过dtd +一些额外的规则进行验证),并且我注意到我的验证和w3c验证之间存在差异。
在我的验证器中,当id中有冒号时,我会得到以下错误(假设是: id="mustang:horse")
(错误)根据数据类型,'id‘属性具有无效值。
但是对于这个模式,我没有在w3c上得到任何错误。
我试图在xml/xhtml中查找属性的无效字符列表,但找不到?
谢谢你的帮助,
发布于 2011-07-08 22:57:31
造成这种差异的原因是W3C验证器似乎不会进行名称空间感知的XHTML处理。尽管XHTML文档需要在XHTML名称空间中,但这实际上是合理的,因为HTML文档没有使用名称空间,并且XHTML文档的标准有效结构(如HTML)是由DTD文件定义的,而DTD实际上并不知道名称空间。
就像@Alochi已经提到的那样:
ID类型的
值必须与名称production匹配。
当文档被解析为不支持名称空间时,这是正确的,但如果文档需要符合名称空间,则不是这样。Namespaces in XML规范规定IDs must match NCName production明确禁止冒号字符。名称空间感知解析是一种常见的约定,因此不推荐在id的值中使用冒号,即使当文档解析不支持名称空间时也是允许的。
摘要:如果名称空间被忽略,则ID值必须是有效的Name,并且可以包含冒号;否则,它必须是有效的NCName,并且不能包含冒号。
https://stackoverflow.com/questions/6471829
复制相似问题