我对各种 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
节点能否以某种方式出现在 DTD 的外部,在 XML 文档中?
最佳答案
Entity
和 EntityReference
接口(interface)不在网络上使用,并且至少在某些(如果不是全部)网络浏览器中没有实现。 DOM 规范并不局限于网络,因此这些对象可以出现在 DOM 的非浏览器实现中。
Entity
对象确实代表了习俗 <!ENTITY ...>
声明,可以通过 DocumentType::entities
获得.我猜 Entity
是 Node
的子类因为实体可以扩展为节点树。
EntityReference
s 可以出现在 DOM 树中代替实体引用 ( &ent;
)。只有当 XML/HTML 解析器以实体保留模式运行时才会发生这种情况。解析器还将在 EntityReference
的子树中提供实体扩展。 .
"Reading Entity Declarations and Entity References into the DOM"和以下部分,"Entity References are Preserved" ,来自 .NET Framework 文档对此进行了更详细的解释。
关于html - DTD 相关的 Entity 和 EntityReference DOM 节点类型的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28313661/