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)整理发布!转载请注明出处,谢谢!
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
Layui弹出层监听子页面键盘快捷键实现方法
子页面键盘事件监听需在DOM加载完成后绑定,父页无法直接监听子页按键,必须由子页自身监听后通过parent或postMessage通知父页。典型写法为子页调用父页已定义的关闭函数。需注意焦点状态、输入法及layui版本兼容性等陷阱。
Layui表单提交时携带当前页面Meta信息的实现方法
Layui表单提交不会自动携带页面Meta信息,需在form on( submit )回调中手动读取meta内容并拼接到表单数据,注意后端字段映射及特殊字符编码,多meta时按需选取。
HTML5拖拽事件流状态转移监控调试
HTML5拖拽事件流易因漏监听或未调用preventDefault而中断。需掌握dragstart设置数据、dragover接受放置、drop触发条件等关键点。通过统一日志捕获事件上下文、识别常见状态丢失场景并配合可视化面板,可清晰定位拖拽过程断点。
uni-app实现小红书商品详情图卡片切换
通过手写touch事件与transform控制五张卡片,动态计算translateX、scale、opacity及z-index模拟层叠滑动效果。滑动距离超过80rpx触发切换,否则复位。图片仅渲染当前及前后两张,有效优化加载性能与渲染效率。
图像旋转倾斜与扭曲的Canvas像素矩阵变换
Canvas图像变形本质是操作坐标系,图像被动跟随。旋转需先平移原点至目标中心再旋转后复位;倾斜通过仿射变换矩阵实现;扭曲无原生API,可用分块模拟或转用WebGL。每次变换前保存状态,完成后恢复,避免坐标系偏移。
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
相关攻略
2026-07-06 07:02
2026-07-06 07:00
2026-07-06 07:00
2026-07-06 07:00
2026-07-06 07:00
2026-07-06 07:00
2026-07-06 06:59
2026-07-06 06:59
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

