有一个允许定义和使用自定义 HTML 元素的规范草案。
由于这个草案没有提到XHTML5 多语言文档,而且据我所知,有效(与格式良好的)XML 文档需要一个 DTD 来声明所有可能的元素,这是否意味着不可能在 HTML5 文档中包含自定义元素也验证为 XML?
有一个允许定义和使用自定义 HTML 元素的规范草案。
由于这个草案没有提到XHTML5 多语言文档,而且据我所知,有效(与格式良好的)XML 文档需要一个 DTD 来声明所有可能的元素,这是否意味着不可能在 HTML5 文档中包含自定义元素也验证为 XML?
鉴于 XML 验证是针对 DTD 或模式进行的,但 HTML5 允许用户定义元素和data-*
属性(而且它本身就是一种生活标准,这取决于你问谁),你的怀疑很可能是正确的——这两件事是不相容的。当然,可以编写一个 DTD/模式,通过考虑所有自定义元素和属性来迎合他们的文档,并且它肯定会在最严格的意义上进行验证,但这并不是它的工作原理。
好消息是,在多语言标记中,这不会成为问题。在多语言标记规范的第 3.1 节中,它说:
多语言标记导致:
- 一个有效的 HTML 文档。[ HTML5 ]
- 格式良好的 XML 文档。[ XML10 ]
- 当作为 HTML 处理和作为 XML 处理时,相同的 DOM,除了一些值得注意的例外:HTML 和 XML 解析器为某些
xml
(xml:lang
、xml:space
和xml:base
)、xmlns
(xmlns=""
和xmlns:xlink=""
) 和xlink
(例如xlink:href
) 属性生成不同的 DOM。XML 需要并且 HTML5 允许在某些位置使用这些属性,并且这些属性由 HTML 解析器保留。例外不得破坏成为有效 HTML 文档的要求。Polyglot Markup 指定了一个Robust Syntax,这意味着它是一种最大限度地支持并最大限度地减少创作选择的语法。
然而:
多语言标记不受限制:
- 是有效的 XML。[ XML10 ]
- 通过符合任何 XML DTD。
这意味着多语言标记在情况下符合 HTML5,但不需要符合任何 XML DTD 即可工作。它只是 HTML 的序列化,而不是其本身的 XML 文档类型。XML 验证的概念实际上与多语言标记完全无关,就像 XML 验证与任何未声明符合任何特定模式的 XML 文档无关一样。