DTD相关实体和EntityReference DOM节点类型的目的是什么?

时间:2015-02-04 04:43:22

标签: html xml dom dtd w3c

我对各种DOM节点类型如何适应DTD感到困惑。

好的,所以W3C DOM规范将XML / HTML组件分类为节点(我们大多数人都通过Javascript编程或XML解析熟悉它们。)

nodes types是:

Document
DocumentFragment
DocumentType
EntityReference
Element
Attr
ProcessingInstruction
Comment
Text
CDATASection
Entity
Notation

这里让我感到困惑的是Entity节点的想法。

我理解Entity节点是什么 - 它基本上是让你定义一个"实体"稍后可以使用&;语法引用,并进行扩展。它有点像在XML中使用变量的方式。

好的,但真正令我困惑的是,据我所知,!ENTITY节点通常只能出现在DTD(文档类型定义)中。但DTD实际上是一种完全独立于XML的格式,完全独立的节点类型,如!ELEMENT节点,!ATTLIST节点和!ENTITY节点。使用无处不在的!DOCTYPE声明,DTD可以嵌入在XML文档中,但我的问题是:

为什么!ENTITY节点具体在W3C DOM规范中给定节点类型,而其他DTD节点类型不是?为什么我们在W3C DOM模型中看不到!ELEMENT个节点和!ATTLIST个节点?为什么只包含!ENTITY个节点作为节点类型? !ENTITY节点是否可以以某种方式在XML文档中出现之外

1 个答案:

答案 0 :(得分:0)

EntityEntityReference接口未在Web上使用,并且至少在某些(如果不是全部)Web浏览器中未实现。 DOM规范不仅限于Web,因此这些对象可以出现在DOM的非浏览器实现中。

Entity个对象确实代表自定义<!ENTITY ...>声明,可以通过DocumentType::entities获取。我猜EntityNode的子类,因为实体可以扩展到节点树。

EntityReference可以出现在DOM树中,代替实体引用(&ent;)。只有在XML / HTML解析器以实体保留模式运行时才会发生这种情况。解析器还将在EntityReference

的子树中提供实体扩展

"Reading Entity Declarations and Entity References into the DOM"以及.NET Framework文档中的以下部分"Entity References are Preserved"更详细地解释了这一点。