YAML
| Phần mở rộng tên file | .yml, .yaml |
|---|---|
| Kiểu phương tiện | application/x-yaml |
| Mã loại | TEXT |
| Phát triển bởi | Clark Evans, Ingy döt Net, Oren Ben-Kiki |
| Phát hành lần đầu | tháng 5 năm 2001 |
| Bản mới nhất | 1.2 / tháng 10 năm 2009 |
| Kiểu định dạng | Ngôn ngữ tuần tự hóa dữ liệu |
| Dùng để chứa | Dữ liệu có cấu trúc |
| Được mở rộng từ | XML, JSON |
| Tiêu chuẩn | YAML 1.2 |
| Website | yaml |
YAML (/ˈjæməl/; viết tắt của "YAML Ain't Markup Language" – "YAML không phải là ngôn ngữ đánh dấu") là một ngôn ngữ tuần tự hóa dữ liệu dành cho con người, thường được sử dụng cho các tệp cấu hình và trong các ứng dụng lưu trữ hoặc truyền tải dữ liệu.[1] Mục tiêu thiết kế của YAML là dễ đọc, dễ viết đối với con người, đồng thời vẫn có thể ánh xạ dễ dàng sang các cấu trúc dữ liệu của nhiều ngôn ngữ lập trình phổ biến như Python, JavaScript, Java, C++, Ruby và Go.
YAML hỗ trợ đầy đủ các kiểu dữ liệu phổ biến như số nguyên, số thực, chuỗi, mảng, đối tượng (bảng băm) và các kiểu dữ liệu đệ quy (danh sách liên kết, bản đồ lồng nhau). Cú pháp của YAML được thiết kế để tối giản dấu câu, thay vào đó sử dụng khoảng trắng và thụt đầu dòng để thể hiện cấu trúc.[2]
Lịch sử
[sửa | sửa mã nguồn]YAML được đề xuất lần đầu tiên vào năm 2001 bởi Clark Evans, Ingy döt Net và Oren Ben-Kiki, những người muốn tạo ra một ngôn ngữ tuần tự hóa dữ liệu thân thiện với con người, nhưng vẫn đủ mạnh để đáp ứng các nhu cầu lưu trữ cấu hình và trao đổi dữ liệu.[3] Tên gọi YAML ban đầu là viết tắt của "Yet Another Markup Language" (thêm một ngôn ngữ đánh dấu nữa) nhằm ám chỉ vai trò của nó như là một ngôn ngữ đánh dấu tương tự XML. Tuy nhiên, sau đó các tác giả đã đổi lại thành "YAML Ain't Markup Language" (YAML không phải là ngôn ngữ đánh dấu) để nhấn mạnh rằng mục đích chính của YAML là lưu trữ dữ liệu chứ không phải đánh dấu văn bản.[4]
Phiên bản 1.0 của YAML được phát hành vào năm 2004, đánh dấu sự trưởng thành của ngôn ngữ này. Phiên bản 1.1 ra đời năm 2005 bổ sung thêm hỗ trợ cho các kiểu dữ liệu không thuần ASCII và cải thiện khả năng xử lý luồng dữ liệu. Phiên bản 1.2 hiện tại được công bố năm 2009, hợp nhất YAML với JSON bằng cách xác định JSON là một tập con hoàn chỉnh của YAML 1.2.[2]
Cú pháp cơ bản
[sửa | sửa mã nguồn]YAML sử dụng thụt đầu dòng và khoảng trắng để xác định cấp độ của các phần tử. Một số quy tắc cú pháp cơ bản bao gồm:
- Khóa - Giá trị (Key-Value Pairs): Được viết dưới dạng `key: value` với dấu hai chấm và một khoảng trắng.
- Danh sách (Lists): Bắt đầu mỗi phần tử bằng dấu gạch ngang `-` và một khoảng trắng.
- Đối tượng lồng nhau (Nested Objects): Sử dụng thụt đầu dòng để thể hiện quan hệ cha-con.
- Chuỗi (Strings): Có thể viết không cần dấu ngoặc; dùng dấu ngoặc kép (`"`), ngoặc đơn (`'`) cho các chuỗi đặc biệt.
- Bình luận (Comments): Bắt đầu bằng dấu `#` và kéo dài đến cuối dòng.
Ví dụ:
# Đây là một bình luận trong YAML
server:
host: localhost
port: 8080
ssl: true
databases:
- name: users
driver: postgresql
pool: 10
- name: logs
driver: mongodb
features:
- logging
- metrics
- "caching"
Ứng dụng
[sửa | sửa mã nguồn]YAML được sử dụng rộng rãi trong các lĩnh vực sau:
Cấu hình phần mềm
[sửa | sửa mã nguồn]- Docker Compose (tệp
docker-compose.yml) - Kubernetes (các tệp manifest)
- Ansible (playbooks và inventories)
- GitHub Actions (workflows)
- GitLab CI/CD (tệp
.gitlab-ci.yml)
Trao đổi dữ liệu
[sửa | sửa mã nguồn]YAML được ưa chuộng cho việc định nghĩa API và trao đổi cấu hình phức tạp nhờ tính dễ đọc và khả năng biểu diễn dữ liệu có cấu trúc lồng nhau sâu.
Phát triển phần mềm
[sửa | sửa mã nguồn]Trong quy trình DevOps, YAML đã trở thành một công cụ không thể thiếu để viết các tệp cấu hình triển khai, tự động hóa, và quản lý hạ tầng.
So sánh với các định dạng khác
[sửa | sửa mã nguồn]YAML so với JSON
[sửa | sửa mã nguồn]- Khả năng đọc: YAML dễ đọc và viết cho con người hơn JSON nhờ cú pháp ít dấu câu.
- Hỗ trợ chú thích: YAML hỗ trợ bình luận (`#`), trong khi JSON thì không.
- Kích thước: JSON thường nhỏ hơn và nhanh hơn để xử lý bằng máy.
- Quan hệ: JSON là một tập con của YAML 1.2, nghĩa là mọi tệp JSON hợp lệ đều là YAML hợp lệ.
YAML so với XML
[sửa | sửa mã nguồn]- Độ phức tạp: YAML nhẹ và dễ học hơn XML.
- Cấu trúc: XML hỗ trợ thuộc tính, không gian tên và schema phức tạp, trong khi YAML tập trung vào dữ liệu có cấu trúc đơn giản hơn.
- Sử dụng: XML thường được dùng trong các hệ thống doanh nghiệp, tài liệu, SOAP; YAML phổ biến trong DevOps và cấu hình.
Đánh giá và phê bình
[sửa | sửa mã nguồn]YAML được cộng đồng đánh giá cao nhờ tính dễ đọc và khả năng biểu diễn dữ liệu phức tạp một cách trực quan. Tuy nhiên, một số nhược điểm đã được chỉ ra:
- Nhạy cảm với khoảng trắng: Sai sót trong thụt đầu dòng có thể gây ra lỗi khó phát hiện.
- Quá phức tạp cho những tác vụ đơn giản: Đối với các cấu hình đơn giản, YAML có thể "quá sức" so với JSON hoặc các định dạng khác.
- Bảo mật: YAML hỗ trợ các đối tượng tùy ý (arbitrary objects) có thể dẫn đến lỗ hổng bảo mật nếu không được xử lý cẩn thận (vấn đề tấn công deserialization).
Xem thêm
[sửa | sửa mã nguồn]Tham khảo
[sửa | sửa mã nguồn]- ↑ "YAML – the official website". yaml.org. Truy cập ngày 2 tháng 8 năm 2026.
- 1 2 "YAML 1.2 Specification". yaml.org. Truy cập ngày 2 tháng 8 năm 2026.
- ↑ "YAML History". yaml.org. Truy cập ngày 2 tháng 8 năm 2026.
- ↑ "About YAML". yaml.org. Bản gốc lưu trữ ngày 14 tháng 4 năm 2019. Truy cập ngày 2 tháng 8 năm 2026.
Liên kết ngoài
[sửa | sửa mã nguồn]Bản mẫu:Ngôn ngữ tuần tự hóa dữ liệu Bản mẫu:Các định dạng tệp tin cấu hình