【问题标题】:XHTML validation, custom namespaces and attributesXHTML 验证、自定义名称空间和属性
【发布时间】:2010-10-09 12:55:31
【问题描述】:

我有一个客户要求 XHTML 有效的网站。他们使用 W3C 验证器对其进行检查。

我想添加我自己的命名空间和属性,这样我就可以做这样的事情:

<div my:userid="123"> ... </div>

据我了解,定义自定义命名空间是完全有效的 XHTML,只要我这样做:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:my="http://www.example.com/my">

但是,我的 XHTML 验证失败。问题似乎是验证器实际上并没有检查我的自定义 DTD 文档是否有我的自定义命名空间,它只检查 XHTML 与已知的 DTD。任何人都可以阐明我如何解决这个问题?

【问题讨论】:

  • 我不明白为什么验证器会检查命名空间的 DTD。无论如何,浏览器也不检查 DTD,我倾向于相信您实际上并没有使用正确的 XHTML,即您为该网页发送了 Content-type: text/html 标头。但我可能错了。

标签: validation xhtml namespaces


【解决方案1】:

对于 XHTML 1.0,您只能使用 XHTML 1.0 元素和属性:

Normative Definition of XHTML 1.0

此版本的 XHTML 提供了严格符合 XHTML 1.0 文档的定义,这些文档仅限于来自 XML 和 XHTML 1.0 命名空间的元素和属性。

我的理解是 XHTML 2.0 旨在提供一个框架来做你想做的事。

【讨论】:

    【解决方案2】:

    据我了解,定义自定义命名空间是完全有效的 XHTML

    不。自定义命名空间在 XML 中完全格式良好,但“有效”具有特定含义,即使用的每个元素和属性都在文档的模式中声明。该架构可以是 DTD、XML 架构或其他形式,但您必须声明它。

    因此,您可以声明自己的模式来为语言添加自定义属性,而 XHTML 模块化确实使这变得非常容易。您必须在序言中添加对 DTD 的引用作为 ;仅仅设置命名空间 URI 并没有给 XML 处理器提供任何钩子来查找其自身的模式。

    但是你写的是“valid my-language-which-is-a-bit-like-XHTML”,而不是“valid XHTML”。其中一些“我的语言”是众所周知的,例如“XHTML+MathML+SVG”,但它仍然不是 XHTML,如果您的客户端死守“有效 XHTML”,您将无法使用其中任何一种。

    您还遇到了潜在的浏览器问题,尤其是 IE,它(IE8 之前)对 DOM 调用的 Element.*etAttribute* 系列做了一些奇怪的事情。除非您实际上将文档作为 XML Content-Type 提供(IE 也无法处理),否则您的所有命名空间内容实际上并没有使用命名空间。

    在 [X]HTML5 中,有一项建议允许用户自定义属性(主要用于脚本目的)进入名称以“data-”开头的属性。但与此同时,通常的方法是将值隐藏在另一个属性中,例如类:

    <div class="userid-123">...</div>
    

    然后在脚本中对 className 使用合适的字符串处理来提取数据。

    【讨论】:

    • 是的,隐藏类属性中的值是我的后备解决方案,但显然它不是很优雅,我想要一些不那么“脏”的东西。最优雅的解决方案是以数据开头的属性名称 - 就像你提到的那样,但看起来现在我必须等待这个:-)
    【解决方案3】:

    我有一个客户要求 XHTML 有效的网站。他们使用 W3C 进行检查 验证器。

    我在 W3C 验证器上取得了一些成功,使用的不是 xmlns=,而是采用标准 XHTML DTD 并在末尾添加一些属性,如 bobince 所述。我正在使用它来添加 PHPTAL 模板系统使用的属性,例如

    <html metal:define-macro="m">
    

    我同意您需要的不是 XHTML,而是 XHTML 的超集。但是,如果您的客户准备好通过将 W3C 验证器指向您的 URL 来进行测试,那么请继续。如需建议,请参阅WDG

    【讨论】:

    • alistapart.com/articles/customdtd 如果您通过 W3C 验证器运行这样的文件,您会发现它的验证非常好.... 不幸的是,当您在浏览器中显示该文件时,]> 会显示在屏幕。没有办法解决这个错误,所以这种方法是正确的。
    • 但是文章继续说“一种有效的方法要求您获取 XHTML DTD 并将您的修改添加到该文件中。”它适用于 W3C 验证器和 WDG 验证器。
    【解决方案4】:

    1.0 不允许这样做。如果您真的想这样做,您应该下载现有的 dtd 并将其保存在您的服务器中并定义私有而不是公共。但 w3c 验证未通过,因为它仅针对原始验证进行验证

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-16
      • 1970-01-01
      • 1970-01-01
      • 2011-04-04
      • 1970-01-01
      • 2012-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多