XML和SGML有什么历史渊源和区别

发布时间 - 2026-01-07 00:00:00    点击率:
XML是SGML的精简子集,继承其结构化思想但大幅简化语法;SGML复杂难用,面向出版系统,XML轻量易解析,专为网络数据交换设计。

XML 是从 SGML 直接演化而来的精简版,两者是“祖孙关系”:SGML 是祖父,XML 是孙子,HTML 则是另一个孙辈(SGML 的应用分支)。

历史渊源:一条清晰的演进线

1969 年 IBM 提出 GML(Generalized Markup Language),目标是让文档能在不同系统间可移植;1985 年升级为 SGML(Standard Generalized Markup Language),1986 年成为 ISO 国际标准(ISO 8879)。SGML 是一种元语言——它不定义具体标签,而是提供一套规则,让人能自定义任意领域的标记语言(比如法律文书、航空手册)。但 SGML 过于复杂、实现成本高,不适合网络环境。

到了 1990 年代中期,Web 快速发展,HTML 借助 SGML 的语法基础诞生,但它只用了 SGML 的一小部分功能,且标签固定(ptable 等),无法扩展。

为解决 HTML 的僵化和 SGML 的臃肿,W3C 在 1998 年推出 XML——它保留了 SGML 的核心思想(如用标签描述结构、支持 DTD/XSD 定义格式),但砍掉了大量冷门特性(比如复杂的实体声明、可选结束标签、标记省略等),规范长度不到 SGML 的十分之一。

关键区别:设计目标决定行为差异

  • 复杂度不同:SGML 允许高度灵活的语法变体(比如标签可以不闭合、属性值引号可省略),XML 要求严格闭合、大小写敏感、必须有根元素,错误即停止解析。
  • 用途定位不同:SGML 主要用于大型出版系统、军工/航空等强结构化文档管理;XML 明确面向互联网,专为数据交换与存储设计,轻量、易解析、跨平台兼容性好。
  • 可实现性不同:SGML 解析器开发难度大、商业软件昂贵;XML 解析器(如 DOM、SAX)早已内置于各类编程语言中,浏览器、服务器、嵌入式设备都能高效处理。
  • 兼容性关系:所有合法 XML 文档都是 SGML 文档(符合其子集规则),但反过来不成立——SGML 文档通常不符合 XML 语法。

为什么 XML 成功而 SGML 没在 Web 上普及

SGML 太重:它的标准文档长达 500 多页,连专业排版系统都难以完整支持;XML 把重点收束到“结构化数据表达”这一个场景,去掉冗余,明确约束,让开发者能快速上手、工具链迅速成熟。简单说——SGML 是给文档工程师用的工业标准,XML 是给程序员和系统集成者用的网络协议级数据格式。


# html  # 浏览器  # 编程语言  # 工具  # 区别  # 为什么  # xml  # 继承  # dom  # table  # 文档  # 结构化  # 专为  # 数据交换  # 都是  # 这一  # 互联网  # 是一种  # 都能  # 则是 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  Laravel如何配置Horizon来管理队列?(安装和使用)  如何选择PHP开源工具快速搭建网站?  ,在苏州找工作,上哪个网站比较好?  Python自动化办公教程_ExcelWordPDF批量处理案例  如何用好域名打造高点击率的自主建站?  如何快速搭建安全的FTP站点?  郑州企业网站制作公司,郑州招聘网站有哪些?  iOS正则表达式验证手机号、邮箱、身份证号等  网站制作免费,什么网站能看正片电影?  焦点电影公司作品,电影焦点结局是什么?  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  如何在香港免费服务器上快速搭建网站?  如何在IIS中新建站点并配置端口与IP地址?  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  微信推文制作网站有哪些,怎么做微信推文,急?  如何用低价快速搭建高质量网站?  网站制作企业,网站的banner和导航栏是指什么?  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  IOS倒计时设置UIButton标题title的抖动问题  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  Laravel如何实现用户注册和登录?(Auth脚手架指南)  BootStrap整体框架之基础布局组件  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  Laravel如何记录自定义日志?(Log频道配置)  Laravel怎么在Blade中安全地输出原始HTML内容  如何在万网开始建站?分步指南解析  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  如何快速查询网站的真实建站时间?  详解jQuery停止动画——stop()方法的使用  WEB开发之注册页面验证码倒计时代码的实现  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  如何快速选择适合个人网站的云服务器配置?  如何挑选高效建站主机与优质域名?  zabbix利用python脚本发送报警邮件的方法  免费网站制作appp,免费制作app哪个平台好?  想要更高端的建设网站,这些原则一定要坚持!  如何快速生成橙子建站落地页链接?  如何自定义建站之星模板颜色并下载新样式?  如何解决hover在ie6中的兼容性问题  微信小程序 input输入框控件详解及实例(多种示例)  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  JS弹性运动实现方法分析  如何构建满足综合性能需求的优质建站方案?  canvas 画布在主流浏览器中的尺寸限制详细介绍  Laravel怎么清理缓存_Laravel optimize clear命令详解  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  Python数据仓库与ETL构建实战_Airflow调度流程详解