YAML cơ bản Image YAML cơ bản

Bài viết này sẽ giới thiệu với các bạn về ngôn ngữ YAML một cách cơ bản.

1. Giới thiệu ngôn ngữ YAML

YAML Language

YAML (YAML Ain’t Markup Language) là một ngôn ngữ dữ liệu trung gian được tạo ra để người dùng cùng với ngôn ngữ lập trình có thể đọc và xử lý cho các công việc hằng ngày. Nó được ra mắt vào ngày 11/5/2001. YAML có thể sử dụng cùng với các ngôn ngữ tại đây. Ngôn ngữ YAML dùng để chứ dử liệu ở dạng text, dùng trong các file config, lưu các file log,... Các file viết bằng ngôn ngữ YAML có phần mở rộng .yaml hoặc .yml.

Ưu điểm của YAML:

  • YAML hỗ trợ chúng ta commen trong file.
  • Linh hoạt trong biểu diễn dữ liệu: array, list,...
  • Ngôn ngữ YAML giúp cho chúng ta dễ đọc, dễ viết, dễ hiểu.
  • Hệ thống thư viện đa dạng cho các ngôn ngữ khác nhau.
  • Dữ liệu YAML có thể di chuyển giữa các ngôn ngữ lập trình.

2. Cú pháp của YAML

Cú pháp của YAML giống với Python là yêu cầu thụt đầu dòng trước mỗi câu, thục dòng với phím Space không sử dụng phím Tab. Sử dụng phím # để thực hiện việc comment trong file cú pháp như sau:

# This is single line comment.

Cú pháp cơ bản của YAML là chúng ta có thể tùy ý bắt dầu bằng --- và khi muốn kết thúc phải sử dụng .... Đây là dấu hiệu của việc bắt đầu và kết thúc của một tài liệu.

Lưu ý: Không gõ TAB/SPACE tùy tiện trong code YAM vì việc này có thể phát sinh nhiều lỗi.

Kí hiệuChức năng
-Dùng biểu thị một chuỗi khối.
?Dùng biểu thị mapping key
:Dùng biểu thị mapping value
,Ngăn cách giữ các bộ
[Bắt đầu một flow sequence
]Kết thúc một flow sequence
{Bắt đầu một flow mapping
}Kết thúc một flow mapping
#Dùng để viết comment
&Dùng để gáng giá trị
*Dùng để lấy giá trị
!Biểu thị thẻ của nút
'Trích dẫn kép
"Trích dẫn đơn
%Dùng để chỉ thị directive được sử dụng

Ví dụ 1: Bắt đầu và kết thúc của ngôn ngữ YAML. Để có thể bắt đầu chúng ta sử dụng 3 dấu --- và kết thúc đoạn code thì sử dụng 3 dấu ...:

---
name: Blogd.net
...

Ví dụ 2: 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: 2020-03-02T15:59:43.1Z
iso8601: 2020-03-02t15:59:32.1-05:00
spaced: 2020-03-02 15:59:32.1 -5
date: 2020-03-02

Ví dụ 3: Nếu chúng ta muốn sử dụng giá trị Boolean trong ngôn ngữ YAML thì như minh họa sau:

---
Boolean 1: yes
Boolean 2: no
Boolean 3: True
Boolean 4: False
...

Ví dụ 4: Khi chúng ta muốn tạo list trong ngôn ngữ YAML chúng ta cần sử dụng dấu - kết hợp với phím Space như bên dưới sau:

---
# A list of blogd.net
- Domain blogd
- TLD net
...

Ví dụ 5: Trong mọi ngôn ngữ thì các biến là không thể thiếu, như vậy ngôn ngữ YAML cũng sử dụng cú pháp biến bằng dấu : cùng với phím Space như bên dưới:

---
integer: 100
string: "100"
fload: 100.0
boolean: Yes
...

Ví dụ 6: Khi chúng ta cần sử dụng chuỗi có thể trải rộng trên nhiều dòng bằng cách sử dụng kí hiệu sau | hoặc nối dài trên một dòng sử dụng kí hiệu sau >:

---
The fist: |
    Hiển thị dòng 1
    Hiển thị dòng 2
    Hiển thị dòng 3
The second: >
    Hiển thị chung 
    trên một hàng dài.
...

Qua đây nếu chúng ta sử dụng | thì nó sẽ bảo tồn các dòng mới, còn chúng ta sử dụng > thì nó sẽ gọp các dòng mới lại thành một dòng duy nhất.

Giả sử chúng ta sử dụng kí hiệu > để ghép các dòng:

---
Test: >
    a
    b

    c
    d
        e
    f
...

Thì chúng ta sẽ thu được kết quả sẽ được như sau:

a b\nc d\n e\nf\n

Ví dụ 7: Kiểu cấu trúc dữ liệu phức hợp như nhìu danh sách dictionary, hay dictionary có nhiều danh sách:

---
- https://www/blogd.net/:
    Protocol: https
    Subdomain:
        - www
        - forum
    Domain: blogd
    TLD: net
- Chuyen muc:
    Fist: Linux
    Second: Docker
    Kubernetes:
        - Setup Kubernetes
        - What Kubernetes
...

Ví dụ 8: Với các giá trị lặp lại hoặc dùng nhiều lần chúng ta không cần khai báo đi khai báo lại mà dùng kí hiệu & để gán và kí hiệu * để lấy giá trị ra như sau:

---
Test 1:
    - Domain: blogd
    - TLD: &tld net
Test2:
    - Domain: google
    - TLD: *tld
...

Chúng ta sẽ được kết quả khi dịch sang JSON như sau:

{
  "Test2": [
    {
      "Domain": "google"
    }, 
    {
      "TLD": "net"
    }
  ], 
  "Test 1": [
    {
      "Domain": "blogd"
    }, 
    {
      "TLD": "net"
    }
  ]
}

Ở đây net được gán nhãn bằng &tld ở đầu. Để lấy lại giá trị net chúng ta dùng *tld. Phần này tương tự như con trỏ trong C & để ghi địa chỉ, * để lấy giá trị.

Ví dụ 9: Khi chúng ta sử dụng một dấu hỏi ? theo sau nó là dấu space thì 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:

---
? Blogd
  - net
:
  - 2020-03-01
...

Ví dụ 10: Khi chúng ta muốn sử dụng array trong ngôn ngữ YAML thì mỗi phần tử trong 1 mảng/danh sách được xác định bằng dấu gạch ngang -, nhớ xuống dòng và lùi 2 space khi thêm 1 phần tử vào mảng/danh sách của chúng ta:

---

Number: 
  - 1: one
  - 2: two
  - 3: three
...

Bên trên là ví dụ về mảng/danh sách được xác định trong 1 đối tượng, chúng ta cũng có thể xác định nhiều đối tượng trong 1 phần tử của mảng/danh sách, hoặc có thể kết hợp cả 2:

---
items:
  - things:
      thing1: www
      thing2: blogd
      thing3: net
  - other things:
      key: www.blogd.net
...

Ví dụ 11: Kết hợp ngôn ngữ YAML với Markdown để tạo 1 cấu trúc dữ liệu mặc định cho văn bản Markdown. Chúng ta thực hiện bằng cách đặt đoạn dữ liệu được viết bằng YAML giữa 3 dấu gạch đầu dòng ---:

---
title: YAML cơ bản
series: kubernetes
tags: ["Cơ bản"]
image: kubernetes.png
---

3. Lời kết

Qua bài trên, giúp cho chúng ta cách sử dụng ngôn ngữ YAML cũng như cú pháp của nó. Chúng ta có thể đọc hiểu code dễ dàng hơn với kết hợp YAML với các ngôn ngữ lập trình khác.