I.YAML là gì ?

  • YAML chính thức ra mắt ngày 11/5/2001.
  • YAML là viết tắt của cụm từ YAML Ain’t Markup Language : YAML không phải là 1 ngôn ngữ đánh dấu (như HTML, XML).
  • Là một chuẩn dữ liệu kiểu serialization dành cho tất cả các ngôn ngữ. Nó được sử dụng phổ biến để tạo ra các file config cho nhiều ứng dụng, VD: như Docker Compose.
  • YAML thường được sử dụng cho các file cấu hình ( configuration files ), nhưng cũng có thể được sử dụng cho những mục đích khác như lưu các file log

II.Mục tiêu của YAML

  • YAML được thiết kế để dễ đọc và hiểu.
    Ví dụ 1 đoạn code YAML biểu diễn dữ liệu so với JSON
user: 
  name: Michael X
  address: California
  job: Police
  
  language: 
    - English
    - Japanese
    - Spanish

và JSON

{
  "user": {
    "name": "Michael X",
    "address": "California",
    "job": "Police",
    "language": [
      "English",
      "Japanese",
      "Spanish"
    ],
  }
}
  • Dữ liệu YAML có thể được trao đổi giữa các ngôn ngữ lập trình.
  • YAML phù hợp với native data của các ngôn ngữ agile.
  • YAML hỗ trợ các tool thông dụng.
  • YAML hỗ trợ one-pass processing.
  • YAML có thể dễ dàng mở rộng.
  • YAML rất dễ implement và dùng.

III.Cú pháp cơ bản

YAML sử dụng ba dấu gạch ngang --- để tách biệt các nội dung hoặc biểu đạt sự bắt đầu của một nội dung khác. Ba dấu chấm ... kết thúc một đoạn nội dung.

# Ranking of 1998 home runs
---
- Mark McGwire
- Sammy Sosa
- Ken Griffey

# Team ranking
---
- Chicago Cubs
- St Louis Cardinals
---
time: 20:03:20
player: Sammy Sosa
action: strike (miss)
...
---
time: 20:03:47
player: Sammy Sosa
action: grand slam
...

Các nodes lặp lại (objects) được đánh dấu bằng ký hiệu & khi khai báo lần đầu và sau đó được đặt * ở cái lần sau.

---
hr: # 1998 hr ranking
  - Mark McGwire
  - Sammy Sosa
rbi:
  # 1998 rbi ranking
  - Sammy Sosa
  - Ken Griffey
---
hr:
  - Mark McGwire
  # Following node labeled SS
  - &SS Sammy Sosa
rbi:
  - *SS # Subsequent occurrence
  - Ken Griffey

Một dấu hỏi và dấu cách ? biểu hiện một mapping key. Các key:value có thể bắt đầu ngay sau dấu gạch ngang , dấu hai chấm hoặc dấu hỏi.

? - Detroit Tigers
  - Chicago cubs
:
  - 2001-07-23

? [ New York Yankees,
    Atlanta Braves ]
: [ 2001-07-02, 2001-08-12,
    2001-08-14 ]
---
# Products purchased
- item    : Super Hoop
  quantity: 1
- item    : Basketball
  quantity: 4
- item    : Big Shoes
  quantity: 1

IV.Các cách sử dụng kiểu dữ liệu trong YAML

Integers

canonical: 12345
decimal: +12345
octal: 0o14
hexadecimal: 0xC

Floating Point

canonical: 1.23015e+3
exponential: 12.3015e+02
fixed: 1230.15
negative infinity: -.inf
not a number: .NaN

Miscellaneous

null:
booleans: [ true, false ]
string: '012345'

Timestamps

canonical: 2001-12-15T02:59:43.1Z
iso8601: 2001-12-14t21:59:43.10-05:00
spaced: 2001-12-14 21:59:43.10 -5
date: 2002-12-14

V. Luồng Thực Thi

Việc dịch giữa native data structures và character stream được thực hiện trong một số giai đoạn khác nhau, mỗi giai đoạn có một mô hình dữ liệu đầu vào và đầu ra được xác định rõ, được biểu thị trong sơ đồ sau:

YAML có thể dịch trực tiếp giữa native data structures và character stream. Tuy nhiên khi làm như vậy native data structures chỉ được xây dựng từ thông tin có sẵn.

Trong phần tiếp theo mình sẽ trình bày tiếp về model , graph và nodes của YAML

VI.Nguồn tham khảo

https://yaml.org/