html - DTD 相关的 Entity 和 EntityReference DOM 节点类型的目的是什么?

标签 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 节点能否以某种方式出现在 DTD 的外部,在 XML 文档中?

最佳答案

Entity EntityReference 接口(interface)不在网络上使用,并且至少在某些(如果不是全部)网络浏览器中没有实现。 DOM 规范并不局限于网络,因此这些对象可以出现在 DOM 的非浏览器实现中。

Entity对象确实代表了习俗 <!ENTITY ...>声明,可以通过 DocumentType::entities 获得.我猜 EntityNode 的子类因为实体可以扩展为节点树。

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/

相关文章:

html - 如何在 <a> 标签中居中字体超棒的图标并禁用链接颜色

PHP:如何在按下 html 按钮时更改 php 页面的 url?

html - 如何在 float :left element to stop next element to move position if current element changes size? 之间设置一个固定间隙

javascript - Dom 加载事件跨浏览器原生 javascript 代码

html - CSS float 溢出

php - 将 XML 中的值检索到 PHP 数组中

javascript - PHP、ajax、xml、jQuery - 动态搜索仅返回一个值

php - 当 maxInclusive 有 25 位或更多位时,为什么 Libxml 说无效架构?

java - 如何使用 java XPATH 处理空 XML 标签?

javascript - previoussibling 和 previouselementsibling-javascript 的区别