我对各种DOM节点类型如何适应DTD感到困惑。
好的,所以W3C DOM规范将XML / HTML组件分类为节点(我们大多数人都通过Javascript编程或XML解析熟悉它们。)
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文档中出现在之外
答案 0 :(得分:0)
Entity
和EntityReference
接口未在Web上使用,并且至少在某些(如果不是全部)Web浏览器中未实现。 DOM规范不仅限于Web,因此这些对象可以出现在DOM的非浏览器实现中。
Entity
个对象确实代表自定义<!ENTITY ...>
声明,可以通过DocumentType::entities
获取。我猜Entity
是Node
的子类,因为实体可以扩展到节点树。
EntityReference
可以出现在DOM树中,代替实体引用(&ent;
)。只有在XML / HTML解析器以实体保留模式运行时才会发生这种情况。解析器还将在EntityReference
。
"Reading Entity Declarations and Entity References into the DOM"以及.NET Framework文档中的以下部分"Entity References are Preserved"更详细地解释了这一点。