1.1 XML是什么:一份被标记的文档


1.1 XML 是什么:一份被标记的文档

XML(Extensible Markup Language,可扩展标记语言)是一种用自定义标签描述数据结构的文本格式,1998 年由 W3C 定为推荐标准。它不做显示,只做描述——这是它与 HTML 最根本的分界线。本节把一份真实文档放上解剖台,认识标签、元素、属性与文本内容。

一、从一个真实场景说起

某图书电商要与供应商系统对接,供应商发来的存货数据长这样:

<?xml version="1.0" encoding="UTF-8"?> <inventory> <!-- 供应商编号:S-1024,每日报送一次 --> <supplier id="S-1024">华东书源</supplier> <book sku="978-7-111-40701-0"> <title>算法导论</title> <stock>42</stock> <price currency="CNY">128.00</price> </book> <book sku="978-7-115-42802-8"> <title>JavaScript DOM编程艺术</title> <stock>7</stock> <price currency="CNY">59.00</price> </book> </inventory>

即便从没学过 XML,你也能一眼看出:这家供应商叫"华东书源",第一本书库存 42 本、定价 128 元。这就是 XML 的核心价值——自描述。数据自己带着结构说明书,人和程序都不需要额外的口译。

拿这份文档逐层解剖。最上面一行 <?xml ...?> 是 XML 声明,注明版本与编码。<inventory> 是根元素,整份文档只允许这一个根。<supplier id="S-1024">华东书源</supplier> 是一个完整元素:开始标签、内容、结束标签三段式;id="S-1024" 是属性,附着在开始标签上,像关节处的铭牌。<book> 内部嵌套 <title><stock><price>,层层嵌套构成树。

二、和 HTML 是什么关系

两者同源于 SGML,但分工不同。看一组对照:

<!-- HTML:告诉浏览器"怎么显示" --> <ul> <li><b>算法导论</b> —— 库存 42 本</li> <li><b>JavaScript DOM编程艺术</b> —— 库存 7 本</li> </ul> <!-- XML:描述"数据是什么" --> <book> <title>算法导论</title> <stock>42</stock> </book>

HTML 的标签集是固定的,<li> 表示列表项、<b> 表示加粗,浏览器照单渲染;XML 的标签随你定义,<stock> 是谁发明的?写这份文档的人。浏览器不认识它,也不需要认识——XML 文档的读者是程序,程序按约定取用。

⚠️ 常见误解:把 XML 当"更严格的 HTML"来学。两者用途几乎不重叠——HTML 造给人看,XML 造给系统看。前端页面里直接写 XML 的场景很少,配置文件、报文、数据交换才是它的主场。

三、为什么它至今没被取代

JSON 确实抢走了大量接口场景,但 XML 在三块阵地依然稳固,原因都写在它的语言特性里:

特性 含义 典型受益场景
可扩展 标签自定义,无预定义集合 各行业自定方言:Spring 配置、SVG、SOAP
平台无关 纯文本,任何系统可读写 跨企业、跨语言的数据交换
结构校验 有 DTD/XSD 契约可验 金融、医疗等对格式零容忍的报文
生态成熟 转换、查询、签名全套标准 XSLT 出版流水线、XML 签名

第一,校验能力。JSON Schema 之前,JSON 没有广泛落地的校验标准;XML 从第一天就有 DTD,后来又有 XSD,"收到的报文必须长这样"可以写成机器可查的契约(第 3 章专门讲)。第二,文档能力。XML 天生适合表达"带层级的文档"——混合文本与结构,Office 的 docx、开放出版流程都是它。第三,历史存量。银行、保险、政务的对接规范三十年累积下来都是 XML,改造成本高过继续使用。

动手验证一下"平台无关"。把上面的 inventory 文档存成文件,用浏览器直接打开,浏览器会以可折叠的树形展示它;用记事本打开,它就是普通文本。同一份数据,零转换。

一段极简的历史坐标

知道 XML 从哪来,能避免很多误会。上世纪八十年代,出版业用 SGML 管理海量书稿——能力极强、复杂度也极高,只有大出版社养得起。九十年代 Web 兴起,HTML 从 SGML 精简而来但标签定死;同时"数据在系统间搬运"的需求爆发,业界想要一种"SGML 的能力、HTML 的简洁"的格式。1996 年 W3C 成立工作组,1998 年发布 XML 1.0——目标是让普通开发者也用得起结构化标记。

这个出身解释了它的两个"性格"。其一,它天生面向文档:书稿是"正文里嵌结构"的混合形态,所以 XML 支持混合内容(第 2 章会详讲),这是后来 JSON 不具备的表达。其二,它强调国际文本:出版业多语种混排是常态,所以 XML 从第一版就认真对待编码与 Unicode,第 2 章的编码声明正是这份认真落下的零件。理解了"它替谁解决什么",再学语法就不再是背条文,而是看一件工具如何贴合它的用途。

动手小练习收尾:把本节开头的 inventory 文档改成你自己领域的数据——学生选课、服务器清单、菜谱都行,保留声明、根元素、至少两层嵌套、一个属性。写完用浏览器打开检查。这个小文档建议保存好,后面章节会反复对它开刀。

本节要点回顾

  • XML 是描述数据的标记语言:标签自定义、结构自描述,1998 年成为 W3C 标准;
  • 元素三段式:开始标签 + 内容 + 结束标签;属性是开始标签上的"铭牌";
  • 与 HTML 分工:HTML 管显示、标签固定,XML 管描述、标签自定义;
  • 根元素唯一:整份文档只有一棵树,所有内容挂在根下;
  • 三大存活理由:可校验的契约、文档表达能力、行业存量。

下一节把这份数据放回解剖台,沿着切面看清语法规则——哪些刀口是标准姿势,哪些一刀下去文档就报废。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U