【问题标题】:Xhtml Invalid Characters?Xhtml 无效字符?
【发布时间】:2011-09-22 05:52:16
【问题描述】:

我在 .NET 中制作了自定义 xhtml 验证器(通过 dtd + 一些额外规则进行验证),我注意到我的验证和 w3c 验证之间存在差异。

在我的验证器中,当 id 中有冒号时出现以下错误(比如说:id="mustang:horse")

(错误)根据其数据类型,“id”属性的值无效。

但我在 w3c 上没有收到任何关于这种模式的错误。

我试图在 xml/xhtml 中查找属性的无效字符列表,但找不到?

感谢您的帮助,

【问题讨论】:

  • 我只是想弄清楚 xml/xhtml 中属性的无效字符是什么
  • 这个id应用在哪个元素上id="mustang:horse"
  • 这是一个例子:
  • 你可以这样写 id <p id="ExampleID1">test</p> 冒号和特殊字符是不可接受的定义一个 id。 W3C 否认。
  • 我同意这一点,这就是我的观点,为什么 w3c 验证器没有指出这一点?

标签: xhtml dtd invalid-characters dtd-parsing


【解决方案1】:

有一个列表,它允许使用冒号。

XHTML 1.0 规范在http://www.w3.org/TR/xhtml1/#h-4.10 上说

...在 XHTML 1.0 中,id 属性被定义为类型 ID ...

XML 1.0 规范在http://www.w3.org/TR/2008/REC-xml-20081126/#id 上说

ID 类型的值必须与名称产生式匹配。

名称产生式定义在http://www.w3.org/TR/2008/REC-xml-20081126/#NT-Name

[4] 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] [4a] NameChar ::= NameStartChar | "-" | “。” | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040] [5] 名称 ::= NameStartChar (NameChar)*

上面还有这个正式的定义:

鼓励文档作者使用 名称是有意义的词或 自然词的组合 语言,并避免符号或 名称中的空格字符。笔记 冒号,连字符-减号,句号 (句点)、LOW LINE(下划线)和 明确允许中间点。

(我的重点)

【讨论】:

    【解决方案2】:

    造成这种差异的原因是 W3C 验证器似乎不进行命名空间感知 XHTML 处理。尽管 XHTML 文档需要位于 XHTML 命名空间中,但这实际上是合理的,因为 HTML 文档不使用命名空间,并且 XHTML 文档(如 HTML)的规范有效结构是由 DTD 文件定义的,而 DTD 实际上并不知道命名空间。

    就像@Alochi 已经指出的那样:

    ID 类型的值必须与名称匹配 生产。

    当文档被解析为不知道命名空间时这是正确的,但如果文档需要与命名空间一致则不是正确的。 XML 规范中的命名空间声明 IDs must match NCName production 明确禁止冒号字符。命名空间感知解析是一种常见约定,因此不建议在 id 的值中使用冒号,即使在文档解析不感知命名空间时允许这样做。

    总结:如果命名空间被忽略,ID 值必须是有效的Name,并且可以包含冒号;否则它必须是有效的NCName,并且不能包含冒号。

    【讨论】:

      猜你喜欢
      • 2011-10-21
      • 1970-01-01
      • 2010-09-05
      • 1970-01-01
      • 2017-02-02
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多