我有一个客户端要求XHTML有效的网站.他们使用W3C验证器进行检查.
我想添加自己的命名空间和属性,所以我可以这样做:
...
据我所知,定义自定义命名空间是完全有效的XHTML,只要我这样做:
但是,我的XHTML验证失败.问题似乎是验证器实际上没有出去检查我的自定义DTD文档以查找我的自定义命名空间,它只检查XHTML与已知的DTD.谁能够解释我如何解决这个问题呢?
对于XHTML 1.0,您只能使用XHTML 1.0元素和属性:
XHTML 1.0的规范定义
此版本的XHTML提供了严格符合XHTML 1.0文档的定义,这些文档仅限于XML和XHTML 1.0命名空间中的元素和属性.
我的理解是XHTML 2.0旨在提供一个框架来做你想要的.
据我所知,定义自定义命名空间是完全有效的XHTML
不.自定义命名空间在XML 中完美地形成,但"有效"具有特定含义,即使用的每个元素和属性都在文档的模式中声明.该模式可以是DTD,XML模式或其他东西,但您必须声明它.
因此,您可以声明自己的架构以向该语言添加自定义属性,实际上XHTML Modularization使这非常简单.你必须在prolog中添加对DTD的引用作为; 只设置命名空间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:
...
然后在脚本中使用className上的合适字符串处理提取数据.