与 DTD 相关的实体和实体引用 DOM 节点类型的用途是什么?



我对各种 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节点。 DTD 可以使用无处不在的 !DOCTYPE 声明嵌入到 XML 文档中,但我的问题是:

为什么 W3C DOM 规范中专门!ENTITY节点指定了节点类型,而其他 DTD 节点类型则没有? 为什么我们在 W3C DOM 模型中看不到!ELEMENT节点和!ATTLIST节点? 为什么只有!ENTITY节点作为节点类型包含在内? !ENTITY节点是否可以以某种方式出现在 DTD 之外、XML 文档中?

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

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

EntityReference s 可以代替实体引用 (&ent;) 出现在 DOM 树中。仅当 XML/HTML 解析器在实体保留模式下运行时,才会发生这种情况。解析器还将在EntityReference的子树中提供实体扩展。

.NET Framework 文档中的"将实体声明和实体引用读入 DOM "和下一节"保留实体引用"对此进行了更详细的说明。

相关内容

最新更新