XML语法的HTML中能否使用HTML、SVG、MathML外的命名空间元素
关于HTML文档中引入自定义命名空间元素的规范说明
我们可以分两种文档场景判断这类用法是否合规:
场景1:使用text/html MIME类型的普通HTML文档
这类场景下不支持自定义命名空间,你示例中写的xmlns属性会被当作普通属性处理,不会生效,<book>元素会被识别为未知HTML元素,不符合规范要求:
每个独立元素允许的具体内容取决于本规范前文所述的元素内容模型,元素不得包含其内容模型所不允许的内容。
普通HTML的body元素内容模型仅允许Flow content,其中仅包含HTML规范定义的标准元素、符合命名要求的自主自定义元素,以及SVG、MathML命名空间的元素,其他自定义命名空间元素不被允许。
如果有存储自定义数据的需求,可以用以下合规方案替代:
- 使用符合规范的自主自定义元素:命名必须包含短横线,例如
<my-book>,这类元素属于规范允许的Flow content,可直接放在body中,JS可以正常读取其内容 - 使用
<script type="application/json">或<script type="text/plain">存储结构化数据,浏览器不会渲染该类标签内容,JS可直接读取 - 借助标准元素的
data-*自定义属性存储零散数据
场景2:使用application/xhtml+xml MIME类型的XHTML文档
这类场景下文档采用XML解析模式,允许引入自定义命名空间的元素,你示例中的写法是符合规范的:
<html xmlns="http://www.w3.org/1999/xhtml"> <head> … </head> <body> <h1>Title</h1> <book xmlns="http://example.com/my-book-namespace"> … </book> </body> </html>
XML本身支持命名空间扩展,类似JSF这类框架在XHTML中使用自定义命名空间元素的用法是合规的,浏览器会正确识别元素的命名空间归属,不会将其当作HTML元素处理,符合你预期的使用效果。
内容的提问来源于stack exchange,提问作者Olivier Cailloux
相关产品推荐
相关产品推荐

