Validation XHTML验证、自定义名称空间和属性

Validation XHTML验证、自定义名称空间和属性,validation,xhtml,namespaces,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验证

我有一个客户要求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文档,它只是根据已知的DTD检查XHTML。有没有人能告诉我如何解决这个问题?

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

这个版本的XHTML提供了严格一致的XHTML 1.0文档的定义,这些文档仅限于XML和XHTML 1.0名称空间中的元素和属性

我的理解是,XHTML2.0旨在提供一个框架来实现您想要的功能

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

没有。自定义名称空间在XML中的格式非常好,但是“valid”具有特定的含义,即使用的每个元素和属性都在文档的模式中声明。该模式可以是DTD、XML模式或其他模式,但您必须声明它

因此,您可以声明自己的模式以向语言添加自定义属性,事实上,XHTML模块化使这非常容易。您必须在prolog中将对DTD的引用添加为a;仅仅设置名称空间URI并不会给XML处理器任何钩子来查找模式本身

但是你写的是“有效的my-language-which-is-bit-like-XHTML”,而不是“有效的XHTML”。其中一些“我的语言”是众所周知的,比如“XHTML+MathML+SVG”,但它本身仍然不是XHTML,如果您的客户机死心塌地地使用“有效的XHTML”,那么您就不能使用它们中的任何一种

您还可能遇到浏览器问题,尤其是IE,IE(IE8之前)对元素。*etAttribute*DOM调用家族做了一些奇怪的事情。而且,除非您实际上是将文档作为XML内容类型(IE也无法处理)提供,否则您的所有名称空间内容实际上都没有使用名称空间

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

<div class="userid-123">...</div>
。。。
然后对脚本中的类名使用适当的字符串处理来提取数据

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

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

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


我同意您需要的不是XHTML,而是XHTML的超集。但是,如果您的客户机准备通过将W3C验证器指向您的URL来进行测试,那么请继续。有关建议,请参阅1.0“不允许这样做”。如果确实要这样做,请下载现有dtd并将其保存在服务器中,然后定义“专用”而不是“公用”。但是w3c验证没有通过,因为它只针对原始验证进行验证

我不明白验证程序为什么要检查名称空间的DTD。无论如何,浏览器也不会检查DTD,我倾向于相信您实际上没有使用正确的XHTML,即您为该网页发送了内容类型:text/html标题。但我可能错了。是的,在class属性中隐藏值是我的回退解决方案,但显然这不是很优雅,我想要的东西少一点“脏”。最优雅的解决方案是以数据开头的属性名-如您所述,但目前看来我不得不等待:-)如果您通过W3C验证程序运行这样一个文件,您会发现它的验证非常好。。。。不幸的是,当您在浏览器中显示文件时,屏幕上会显示]>。这个错误是无法避免的,所以这种方法是正确的。但是文章接着说“一种有效的方法需要您获得XHTML DTD并将您的修改添加到该文件中。”它在W3C验证器和WDG验证器上对我有效。