Programming

xml,json,yaml 都是描述性语言。它们各自定义了自己的结构语义。但它们并没有定义它们被传输的格式,所以有些结构更利于无损传输,有些则不。

还有个 schema,不太一样,暂未能准确定义,似乎可以理解为 描述类型的语言,范畴缩小了。先了解 JSON Schema 再说。

XML

标记形式的描述语言,微软开发,最早的中间数据存储/传输格式,存储空间占用最大,由于严格的标签语法,可以安全地用于中间数据传输,或配置,过于复杂,结构繁琐逐渐被淘汰。

JSON

用括号分隔,类js对象结构的描述语言,常用于数据传输,所以又常称为数据交换格式。存储空间适中,既可以用于配置文件,也可用于中间数据。
因易用简单又结构清晰,传输安全,得到广泛使用,唯一比较大的缺点是不支持注释,且人工编写是较为繁琐,且不被规整化时依旧不易于阅读。
应用:
太多

YAML

空格做分隔,几乎纯文本的描述语言。一般只做本地配置文件,基本不用于中间数据传输(因为空格很容易丢失造成既而语义丢失)。存储占空间小于JSON。
易用性更强,由于只用空格,所以容易造成编辑/阅读困难。很适合用于本地单纯的记录。
应用:
yarn.lock
markdown front matter
各种日志

TOML

为了完美解决配置文件场景的描述语言。
应用
cargo.toml

TOML aims to be a minimal configuration file format that’s easy to read due to obvious semantics.

https://zhuanlan.zhihu.com/p/50412485
以上都是标准的描述性语言,所以为了完美迎合实际场景,很多使用者会在它们的基础上定制自己的描述性语言,如 markdown 中 front matter,就是 yaml 格式,vscode 的 launch setting json,虽然是 json 格式,但是它们却支持注释。