什么是标记语言?为何XML是标记语言而YAML、JSON不是?
标记语言定义及分类说明
一、标记语言的核心定义
标记语言的核心设计目标是用预定义的、带语义的标记对原始文本内容进行标注,用来描述内容的结构、属性或展示逻辑,核心特征如下:
- 存在和原始内容明确分离的独立标记,标记本身不属于要传递的文本内容的一部分
- 标记可以直接插入文本流的任意位置,对局部内容进行标注,不需要破坏原本的文本结构
- 移除所有标记之后,剩余的原始文本仍然可以被人类正常阅读
二、XML属于标记语言的原因
XML的全称为可扩展标记语言,本身就是为内容标注场景设计的,完全符合标记语言的所有核心特征。
示例:标注一篇文章的结构和内容
<article category="科技" publish_date="2024-05-20"> <title>标记语言的区别</title> <author id="123">张三</author> <content> <p>这是正文的第一段,里面有个<em>需要重点强调</em>的词汇。</p> <p>这是正文的第二段。</p> </content> </article>
以上示例中,<article>、<title>、<em>等都是独立于内容的标记,用来描述对应内容的属性和语义。哪怕移除所有标签,剩下的「标记语言的区别 张三 这是正文的第一段,里面有个需要重点强调的词汇。这是正文的第二段。」仍然是完整可读的文本。
三、YAML、JSON不属于标记语言的原因
JSON和YAML的本质是数据序列化格式,核心设计目标是结构化存储和传输数据,所有字段都是数据本身的组成部分,不存在独立于数据之外的标记,不符合标记语言的核心特征。
JSON示例
同样存储上述文章信息的JSON写法如下:
{ "article": { "category": "科技", "publish_date": "2024-05-20", "title": "标记语言的区别", "author": { "id": 123, "name": "张三" }, "content": [ "这是正文的第一段,里面有个需要重点强调的词汇。", "这是正文的第二段。" ] } }
这里的"article"、"title"都不是标记,是数据的键,属于数据结构的一部分。如果要实现XML示例中「标注段落内局部词汇强调」的效果,只能把原本完整的段落拆成多个数据字段:
{ "content": [ {"text": "这是正文的第一段,里面有个", "type": "normal"}, {"text": "需要重点强调", "type": "emphasis"}, {"text": "的词汇。", "type": "normal"} ] }
这种实现本质是把标注逻辑转换成了数据结构的一部分,和标记语言「在文本流中插入独立标记」的逻辑完全不同。如果移除所有键,剩下的零散值完全无法组成可读的完整内容。
YAML示例
YAML是JSON的轻量化写法,核心逻辑和JSON完全一致,同样属于数据序列化格式:
article: category: 科技 publish_date: 2024-05-20 title: 标记语言的区别 author: id: 123 name: 张三 content: - 这是正文的第一段,里面有个需要重点强调的词汇。 - 这是正文的第二段。
YAML里的所有键同样是数据的组成部分,没有独立的标记存在,无法在不破坏文本结构的前提下对局部内容进行标注,因此不属于标记语言。
核心区别总结
- 标记语言的核心是「给内容加独立标记」,更适合文本文档的结构标注场景
- JSON、YAML的核心是「结构化存储数据」,更适合接口数据传输、配置文件存储场景
内容的提问来源于stack exchange,提问作者Healthy Bowl
相关产品推荐
相关产品推荐

