我正在尝试使用html5数据,但仍然拥有有效的XHTML 1.1。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>title</title>
</head>
<body>
<div data-test="test">
</div>
</body>
</html>
=&GT;没有属性数据测试。 (在W3C验证器中)
行。尝试添加自定义命名空间:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:data="http://whatever">
<head>
<title>title</title>
</head>
<body>
<div data:test="test">
</div>
</body>
</html>
同样的问题。
我在Stackoverflow上查看了有关此主题的许多问题。有人提到可以使用自定义命名空间解决此问题。但我看不到任何有效的例子。我上面的尝试没有验证。这是因为XHTML的DOCTYPE不支持添加自定义命名空间吗? (即使这可以工作,我有一个新的问题,对于html5数据类型我需要我的属性是数据 - 连字符将导致问题 - 但一次一步)。
另一种方法是使用自定义DTD。本文解释了如何执行此操作http://alistapart.com/article/customdtd - 但这对我没有帮助,因为这需要您使用可以告诉DTD使用的解析器 - 即不是浏览器。
实际案例是我正在制作一小块软件,输出最终用户将插入其网站的html。它使用html5数据属性,我不想打破他们的网站。我希望能够至少告诉他们:像这样修改你的xhtml它会起作用。
答案 0 :(得分:1)
我正在尝试使用html5数据,并且仍然拥有有效的XHTML 1.1。
这是不可能的。
有人提到可以使用自定义命名空间解决此问题。
你可以,但是你会写XHTML 1.1 + SOMETHING ELSE而不是XHTML 1.1。
浏览器无论如何都不会支持它,至少不是通过他们专门为访问data-*
属性提供的标准API,因为他们不会查看外部名称空间。
另一种方法是使用自定义DTD。
然后你会编写一个你发明的基于XHTML 1.1的自定义标记语言,而不是XHTML 1.1。
实际案例是我正在制作一小块软件,输出最终用户将插入其网站的html。它使用html5数据属性,我不想打破他们的网站。我希望能够至少告诉他们:像这样修改你的xhtml它会起作用。
我从来没有遇到过一个浏览器,当它被赋予无效但结构良好的XHTML时会崩溃。
只需编写XML序列化HTML 5。
您可以鼓励最终用户转移到HTML 5. XHTML 1.1无论如何都是一个技术的死胡同。 W3C在HTML 5的XML序列化之外放弃了对XHTML的进一步研究。