数据交换语言用于在应用程序之间交换和储存元数据。
它常是人类可读且完全独立于程序语言的,这里列举XMLJSONYAML

XML

XML 即可扩展标记语言,是第一个被广泛用来数据交换的语言。
它通过可嵌套并始终关闭的标签、元素和属性值来格式化数据内容。

<?xml version="1.0" encoding="UTF-8"?>

<section>
	<greeting>Hello, world!</greeting>
	<step number="3">Connect A to B.</step>
	<div class="inner greeting-box">Welcome!</div>
</section>

<line-break />
<img src="madonna.jpg" alt="Madonna" />

<!--no need to escape <code> & such in comments-->

&lt;
&gt;
&amp;
&apos;
&quot;

JSON

JSON 即 JavaScript 对象表示法,在许多方面有替代 XML 的趋势。
它被 javaScript 原生支持,并且相对 XML 有更唯一的表达、更少的字符使用,但认为可读性稍差。

{
  "id": 1,
  "name": "Foo",
  "price": 123,
  "tags": [
    "Bar",
    "Eek"
  ],
  "stock": {
    "warehouse": 300,
    "retail": 20
  }
}

YAML

YAML 是【YAML Ain’t Markup Language】的递归缩写,由于它使用空白字符和分行来分隔数据,使得它特别适合使用 grep/Python/Perl/Ruby 操作。
另外它巧妙地避开了各种封闭符号,比如引号、各种括号等,使得它表达的嵌套结构更好辨认。

---
receipt:     Oz-Ware Purchase Invoice
date:        2012-08-06
customer:
    first_name:   Dorothy
    family_name:  Gale

items:
    - part_no:   A4786
      descrip:   Water Bucket (Filled)
      price:     1.47
      quantity:  4

    - part_no:   E1628
      descrip:   High Heeled "Ruby" Slippers
      size:      8
      price:     133.7
      quantity:  1

bill-to:  &id001
    street: |
            123 Tornado Alley
            Suite 16
    city:   East Centerville
    state:  KS

ship-to:  *id001

specialDelivery:  >
    Follow the Yellow Brick
    Road to the Emerald City.
    Pay no attention to the
    man behind the curtain.
...

强制转换数据类型:

---
a: 123                     # an integer
b: "123"                   # a string, disambiguated by quotes
c: 123.0                   # a float
d: !!float 123             # also a float via explicit data type prefixed by (!!)
e: !!str 123               # a string, disambiguated by explicit type
f: !!str Yes               # a string via explicit type
g: Yes                     # a boolean True (yaml1.1), string "Yes" (yaml1.2)
h: Yes we have No bananas  # a string, "Yes" and "No" disambiguated by context.

另外的点:

  • 缩进多少是无所谓的,只要保证同一层在一个层级
  • 不能使用 tab 缩进
  • 在一个文件中,可同时包含多个文件,并用 --- 分隔
  • 可选的,用 ... 表示文件结尾(在利用流的通信中,这很有用,可以在不关闭流的情况下,发送结束信号)

最后

可以根据情况选用不同的语言,但个人还是最喜欢 XML 的。