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
(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ệu | Chứ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.