XHTML验证,自定义命名空间和属性

时间:2009-02-24 10:43:26

标签: validation xhtml namespaces

我有一个客户端要求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。谁能够解释我如何解决这个问题?

4 个答案:

答案 0 :(得分:6)

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

Normative Definition of XHTML 1.0

  

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

我的理解是XHTML 2.0旨在为您提供所需的框架。

答案 1 :(得分:5)

  

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

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

因此,您可以声明自己的架构以向该语言添加自定义属性,事实上XHTML Modularization使这非常简单。您必须将对DTD的引用添加为&lt;!DOCTYPE&gt;在序言中;只设置名称空间URI并不会给XML处理器带来任何钩子来查找模式本身。

但是你写的是“有效的my-language-like-a-bit-like-XHTML”,而不是“有效的XHTML”。其中一些“我的语言”是众所周知的,比如“XHTML + MathML + SVG”,但它仍然不是XHTML,如果你的客户端设置在“有效的XHTML”上,你就不能使用它们中的任何一种。

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

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

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

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

答案 2 :(得分:3)

  

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

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

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

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

答案 3 :(得分:0)

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