XML入门教程:实体-XML/XSLT
XML中的实体声明:超越基础的进阶理解
一说起XML的实体,很多人脑子里先蹦出来的可能就是那几个基础的预定义实体,比如 < 代表小于号。这没错,但XML的实体系统远比你想象的更强大、更灵活。今天,我们就来深入聊聊那些在复杂DTD和大型文档中扮演关键角色的实体——不仅仅是文本替换那么简单。
未析实体:当XML遇到非XML数据
我们都知道,并非所有数据都是XML格式的。比如一张JPEG图片,或者一段MPEG视频。XML该如何在文档中“引用”这些内容呢?答案就是“未析实体”。它更像是一个指向外部非XML资源的“快捷方式”。
在DTD中,你可以这样定义一个未析实体:
注意看最后的 NDATA a vi。这里的 a vi 并非随意书写,它必须是一个在 NOTATION 中预先声明过的MIME媒体类型标识符。NDATA的作用就是明确告诉处理器:“嘿,这个实体指向的数据不是XML,它的类型是a vi。”
不过,有一说一,直接在XML文档中嵌入这类未析实体在实践上比较复杂,也不算很规范,所以除非有特殊需求,一般建议尽量避免使用。
参数实体:DTD内部的“宏”与模块化利器
如果说通用实体是给文档内容用的“变量”,那么参数实体就是专门服务于DTD本身的“宏定义”。它在大型、模块化的DTD设计中不可或缺。
它的定义语法和通用实体很像,只是中间多了一个百分号 %:
使用时,也需要带上百分号:%person;。处理器会直接用字符串 name,address,postcode 来替换它。这有什么用呢?最直接的,它能避免在DTD中反复输入一长串相同的元素列表,提高可维护性。
但参数实体更强大的地方在于实现DTD的模块化。想象一下,像DocBook这样的庞大DTD,长度可能超过一万行,全部塞在一个文件里简直是维护者的噩梦。聪明的做法是把它按功能拆分成多个文件。
这时,参数实体就派上用场了。你可以在主DTD文件中这样写:
%names;
第一行定义了一个参数实体 %names;,它引用了外部的 names.dtd 文件。第二行通过引用这个参数实体,实际上就把整个外部DTD子集的内容“包含”了进来。这种结构让管理和维护大型DTD变得清晰、可行。
条件化处理:用INCLUDE与IGNORE实现灵活开关
你有没有想过,DTD里的某些声明能不能像代码一样,根据需要“开启”或“关闭”?XML确实提供了这种机制,那就是 INCLUDE 和 IGNORE 节。
IGNORE 块内的声明会被处理器忽略,效果类似注释:
]]>
当然,你也可以用 达到相同目的。INCLUDE 则恰恰相反,它明确表示其内的声明有效:
]]>
单独看,这个 INCLUDE 似乎有点多余,有没有它声明都有效。但妙处在于,当它们和参数实体结合时,就能产生奇妙的化学反应。
我们可以先定义一个参数实体作为“开关”:
然后,在声明处使用这个参数实体,而非直接使用关键字:
]]>
这样一来,元素 note 的声明是否生效,就完全由参数实体 %note_allowed; 的值决定了。只要在DTD别处将 %note_allowed; 重定义为 IGNORE,对应的声明就会瞬间“失效”。这种模式为DTD提供了强大的条件化包含和功能定制能力。
说到底,XML的这些高级实体特性,其核心思想是相同的:抽象与复用。无论是引用一段外部文本、一个非XML资源,还是组织复杂的DTD结构,目的都是让文档和它的模式定义更加清晰、灵活且易于管理。掌握它们,才算真正读懂了XML设计哲学中关于“可扩展”的那一部分。
本文由本站(https://www.jb51.net)整理发布!转载请注明出处,谢谢!
相关攻略
XML中的实体声明:超越基础的进阶理解 一说起XML的实体,很多人脑子里先蹦出来的可能就是那几个基础的预定义实体,比如 注意看最后的 NDATA a vi。这里的 a vi 并非随意书写,它必须是一个在 NOTATION 中预先声明过的MIME媒体类型标识符。NDATA的作用就是明确告诉处理器:“嘿
XML与HTML的本质差异 在深入探讨技术细节前,不妨先明确一个核心概念:XML和HTML虽然长相相似,都使用标签,但它们生来就是为了完成截然不同的任务。理解这一点,是掌握两者关系的关键。 设计初衷:数据内容 vs 数据外观 XML被设计用来描述和携带数据,它的全部焦点在于数据本身的内容和结构。
Solaris Express Developer Edition:开发者的免费利器 对于想在Solaris平台上进行开发的用户来说,Solaris Express Developer Edition(简称SXDE)无疑是一个绝佳的起点。这个版本完全免费,并保持着每个季度发布一个新版本的节奏,堪称专
1 环境检查与配置 1) 安装前检查电脑的node配置与nvm配置 万事开头先摸底,动手安装前,最好先确认一下你的电脑环境是否就位。第一步,检查Node js环境是否存在。 打开你的命令行工具,输入: node -v 如果系统已经安装,会立刻显示出版本号,就像这样: 看到版本信息,恭喜,这一关就算
一、概述: 要深入理解SQLite数据库的稳定与可靠特性,其核心的锁与并发控制机制是必须掌握的关键。这套机制的具体实现,主要由pager_module模块负责。它如同一位严谨的守护者,严格保障着数据库事务的ACID(原子性、一致性、隔离性、持久性)特性,确保每一次数据操作要么完整提交,要么彻底回滚,
热门专题
热门推荐
机器人行业迎来里程碑式突破。以视频生成模型Vidu著称的生数科技,正式发布了名为Motubrain的“世界动作模型”。这并非一次普通迭代,而是被定位为机器人的“物理大脑”,其核心目标在于:用一个统一的通用模型,彻底取代以往依赖多个专用系统拼凑而成的复杂架构。 正如其“一个大脑,无限可能”的口号所揭示
xAI正式进军AI编程智能体领域,于近日发布了专为软件工程与复杂编程任务设计的Grok Build。 简单来说,Grok Build是一款能在终端里直接跑起来的AI编程助手。它被定位为一个具备智能体能力的命令行工具,开发者用自然语言告诉它要做什么,它就能生成代码,甚至帮你搞定一系列编程和自动化任务。
近日,谷歌对其搜索引擎的核心规则进行了重要更新,此次调整直指当前备受关注的AI搜索领域。具体而言,谷歌在其垃圾内容政策中新增了明确条款,正式将“操纵AI搜索结果”的行为列为违规操作,划定了新的质量红线。 根据权威行业媒体Search Engine Land的报道,本次谷歌算法更新的核心在于,将任何企
硅谷的科技巨头们或许曾以为,自己已经远离了AI数据中心带来的电力压力——毕竟,高昂的地价和电费早就把大型数据中心项目“赶”到了别处。但现实总是出人意料,这场能源危机的涟漪,正悄然涌向他们心爱的度假后院。 没错,说的就是太浩湖。这个湾区精英们钟爱的避世天堂,如今正站在一场电力风暴的边缘。距离它必须找到
这项由高通AI研究院(Qualcomm AI Research)主导的创新研究于2026年5月正式发布,论文预印本编号为arXiv:2605 07721。 研究背景:当AI越想越费内存,我们该怎么办 设想一下,手机导航应用会在出发前规划好整条路线,而一位真正智慧的向导则会边走边思考,遇到路障时灵活应





