我有一个客户端要求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。谁能够解释我如何解决这个问题?
答案 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验证没有通过,因为它只对原始的验证