HTML规范中的后代和内容模型

时间:2014-02-25 18:05:24

标签: html html5 w3c specifications

让我们说我们有这个标记:

<ul>
    <li>
        <span></span>
    </li>
</ul>
  • li ul 的儿童和后代
  • span li
  • 的子孙后代
  • span ul
  • 的后代

阅读我们的specifications for ul

  

内容模型
   零或更多li和脚本支持元素。

内容模型的语义部分说,(强调我的)

  

内容模型
  必须包含哪些内容的规范性描述为   子元素 和后代

我肯定会想到这个错误,但我无法让这两个人计算。由于 span 不是“零或更多li元素”的一部分,而且它是 ul 的后代。

如果规范说:“必须包含哪些内容作为元素的子项的规范性描述。”我会得到它,但这可能会与规范的其他部分一起崩溃。

我的问题是如何解释这个。


添加更多上下文。 ul 只能将 li 作为子项。但是从上面来看,如果一个人忘记了所有关于HTML等的知识,我会把它解释为两个中的一个:

  • 必须有零个或多个 li 元素,但也可以有其他任何内容,或
  • 只能 li 元素作为子元素和后代。

“零或更多”后者更强大。

1 个答案:

答案 0 :(得分:3)

3.2.3元素定义中引用的描述相当松散甚至误导。下一部分3.2.4内容模型描述了内容模型的真正含义:“本规范中定义的每个元素都有一个内容模型:元素预期内容的描述。 HTML元素必须具有与元素内容模型中描述的要求相匹配的内容。元素的内容是DOM中的子元素,模板元素除外,其中子元素是模板内容中的子元素。“

因此,内容模型根据子项指定允许和所需内容(尽管并非所有元素都具有所需内容),这意味着子节点。这包括(如果适用)元素childen和文本节点子节点(例如,某些元素仅允许文本作为内容)。

这意味着ul元素可能只有liscript元素作为子元素。 li元素具有自己的内容模型,这些内容模型相当宽松。没有必要的内容; HTML5中允许使用<ul></ul>