Nội dung bài viết
#

YAML là gì? Đặc điểm và các kiểu dữ liệu YAML

Nội dung bài viết

    Trong vài năm qua Ain’t Markup Language (YAML) là một trong những ngôn ngữ tuần tự hóa được sử dụng khá rộng rãi.

    Thông thường YAML được dùng để định dạng cho các file cấu hình, tuy nhiên với việc sở hữu một số thế mạnh nó được đánh giá là đối thủ nặng ký để thay thế một vài ngôn ngữ chẳng hạnh như JSON.

    Hãy cùng BKHOST tìm hiểu chi tiết về YAML trong bài viết dưới đây.

    YAML là gì?

    YAML

    YAML (Ain’t Markup Language) được sử dụng để biểu diễn dữ liệu dưới dạng text (giống XML, JSON …). YAML được dùng vào mục đích tương tự JSON, XML nhưng nó lại có nhiều tính năng nổi bật hơn vì cấu trúc dữ liệu linh hoạt hơn, hỗ trợ nhiều ngôn ngữ lập trình, diễn đạt và mở rộng dữ liệu hơn và dễ sử dụng vì khá có nhiều kiểu dữ liệu lập trình.

    Đặc điểm của file YAML

    Nào! Hãy cùng chúng tôi xem xét một file YAML sau để có cái nhìn tổng quan nhất.

    {{EJS0}}

    Dấu hiệu để nhận biết một tài liệu YAML đó chính là ba dấu gạch ngang ở đầu dòng. Những dấu gạch ngang này đánh dấu cho sự xuất hiện của một file mới. Quan sát tiếp ta sẽ thấy cấu trúc điển hình của một tài liệu YAML là một cặp key – value đi đôi với nhau.

    File YAML ở trên bắt đầu với 6 cặp key – value. Trong đó có thể thấy các key “Doe, ray, pi, xmas, french-hens” đều có những value tương ứng. Một điều bạn cần biết là YAML có khả năng hỗ trợ nhiều chuỗi value và chúng sẽ có 4 kiểu dữ liệu khác nhau.

    Doe và ray là chuỗi (Doe hướng đến hai chuỗi value: “a deer, a female deer”), pi là dấu phẩy động, xmas là một boolean trong khi đó french-hens lại là một số nguyên. Khi mô tả các chuỗi value bạn được phép bỏ chúng trong dấu ngoặc kép, dấu ngoặc đơn. Trường hợp các số không được trích dẫn bằng dấu phẩy động hoặc số nguyên vẫn được ngôn ngữ YAML nhận dạng.

    Mục tiếp theo là một mảng, quan sát sẽ thấy calling-birds có 4 phần tử và trước mỗi phần tử đều được biểu thị bằng một dấu gạch ngang. Ngoài ra các phần tử đều được thụt đầu dòng hai khoảng trắng. Đây là cách thức để thể hiện các phần tử con được bao hàm bởi phần tử cha. Tương tự như vậy, xmas-fifth-day cũng chứa 5 phần tử và các phần tử này đều được thụt vào.

    Và bây giờ, bạn hãy xem tài liệu trên sẽ trông như thế nào ở ngôn ngữ JSON. Và nếu như bạn muốn thì hoàn toàn có thể chuyển đổi tài liệu từ định dạng YAML sang JSON và ngược lại.

    {{EJS1}}

    Định dạng YAML

    Một trong những định dạng của YAML là khoảng trắng. Khi bạn thiết kế một tài liệu YAML tùy thuộc vào từng trường hợp để thụt lề đúng với quy định. Mức thụt lề là một hoặc nhiều khoảng trắng. Dưới đây là một tài liệu có phần lề thụt vào hai khoảng trắng:

    {{EJS2}}

    Bây giờ chúng ta hãy xem cách một tập lệnh Python phân tích tài liệu YAML. Chúng tôi sẽ lưu tài liệu dưới dạng tệp có tên là foo.yaml. Để Python có thể đọc file YAML phải cần đến thư viện PyYAML. Chức năng chính của PyYAML là ánh xạ file YAML vào từ điển.

    {{EJS3}}

    Đầu ra sẽ là:

    {{EJS4}}

    Comment trong YAML

    Sử dụng dấu# để bắt đầu comment trong file YAML. Phần comment này có thể xuất hiện sau value hoặc chiếm nguyên toàn bộ dòng.

    {{EJS5}}

    Kiểu dữ liệu YAML

    Mỗi cặp key – value ở YAML đều chứa những value vô hướng. Cách thức hoạt động của chúng tương tự như các kiểu vô hướng ở những ngôn ngữ khác như Python, Javascript, Perl. Một số kiểu dữ liệu phổ biến của YAML có thể kể đến như:

    Từ điển và cặp key – value

    Key – value là yếu tố chủ chốt trong cú pháp của YAML. Trong file YAML, mỗi mục của nó có thể thuộc một từ điển bất kì. Trong khi key luôn là một chuỗi thì value lại có tính chất vô hướng nên nó có thể là kiểu dữ liệu chuỗi, số hoặc một từ điển.

     Loại số

    Kiểu số cũng được YAML nhận dạng chẳng hạn như dấu phẩy động và số nguyên ở ví dụ đầu tiên mà chúng ta đã phân tích. Số nguyên trong file YAML có thể là thập phân, lục phân hoặc bát phân.

    {{EJS6}}

    Và ngay sau đây hãy chạy tập lệnh python để phân tích cú pháp của tài liệu này.

    {{EJS7}}

    Không ngoài mong đợi, Ox biểu thị một value là hex và tất nhiên số 0 đứng đầu sẽ biểu thị một value bát phân. Qua kết quả có thể thấy YAML còn có tính năng hỗ trợ hàm mũ và dấu phẩy động cố định.

    {{EJS8}}

    Khi tiến hành đánh giá các mục này chúng tôi nhận thấy:

    {{EJS9}}

    Và bây giờ chúng ta sẽ biểu diễn tập lệnh dưới dạng not-a-number (NAN) hoặc infinity (Foo là inf, bar là âm inf còn plop là NAN).

    {{EJS10}}

    Strings

    Ở hầu hết các trường hợp bạn không cần phải bắt buộc chuỗi được đặt trong dấu ngoặc kép, ví dụ như:

    {{EJS11}}

    Phần mềm chạy thử của chúng tôi sẽ xử lý chuỗi trên như sau:

    {{EJS12}}

    Tuy nhiên nếu bạn muốn xử lý một escape sequences (chuỗi thoát) bạn phải cần tới dấu ngoặc kép.

    {{EJS13}}

    Vì giá trị thứ hai không được trích dẫn do đó YAML sẽ xử lý giá trị đầu tiên khi kết thúc bằng ký tự xuống dòng. Trong file dưới đây YAML xem \ n là hai kí tự.

    {{EJS14}}

    Các chuỗi trong YAML vẫn thường chứa các dấu nháy đơn để biểu thị cho văn bản dài với giá trị chuỗi kéo dài ở nhiều dòng.

    {{EJS15}}

    Tuy nhiên các chuỗi đó có thể được giải thích chỉ ở trên một dòng.

    {{EJS16}}

    Mặc dù ký tự khối (pipe) cũng có thể thực hiện được điều nói trên nhưng YAML thông dịch một cách chính xác hơn.

    {{EJS17}}

    Chính vì thế mà chúng ta có thể thấy các dòng mới xuất hiện ở vị trí của chúng trong file YAML.

    {{EJS18}}

    Nulls

    Bạn hãy nhập null với dấu ngã hoặc một chuỗi null nguyên vẹn.

    {{EJS19}}

    Chương trình sẽ cho ra kết quả:

    {{EJS20}}

    Như vậy có thể thấy Python không hỗ trợ biểu diễn null.

    Booleans

    Các giá trị boolean được YAML chỉ ra thông qua keyword True hoặc False. On và Yes biểu thị cho True còn Off hoặc No biểu thị cho False.

    {{EJS21}}

    Mảng

    Bạn có thể chỉ định mảng hoặc danh sách trên một dòng.

    {{EJS22}}

    Ngoài ra bạn cũng có thể biểu diễn chúng trên nhiều dòng.

    {{EJS23}}

    Với những danh sách chứa nhiều đối tượng phức tạp thì tốt nhất là định dạng nhiều dòng.

    {{EJS24}}

    Từ điển

    Tương tự như mảng, bạn có thể biểu diễn từ điển trên một dòng.

    {{EJS25}}

    Và đây là một cách khác.

    {{EJS26}}

    Bên cạnh đó chúng cũng có thể được lồng vào nhau, ví dụ như:

    {{EJS27}}

    Tổng kết về YAML

    Bài viết trên chúng tôi đã thông tin về cú pháp và một số vấn đề liên quan tới YAML Ain’t Markup Language. Nếu bạn muốn đọc code nhanh chóng và dễ dàng hơn thì phương án tối ưu là kết hợp YAML với những ngôn ngữ lập trình khác.

    Nếu bạn có thắc mắc về YAML bạn có thể tham khảo thêm ở trang https://yaml.org/, hoặc để lại ở bên bình luận bên dưới, BKHOST sẽ trả lời bạn trong thời gian sớm nhất.

    P/s: Bạn cũng có thể truy cập vào Blog của BKHOST để đọc thêm các bài viết chia sẻ kiến thức về lập trình, quản trị mạng, website, domain, hosting, vps, server, email,… Chúc bạn thành công.

    Thuê Cloud Server tại BKHOST

    Giảm giá cực sâu, chất lượng hàng đầu. Đăng ký ngay hôm nay:

    cloud server

    Tôi là Trịnh Duy Thanh, CEO & Founder Công ty Cổ Phần Giải Pháp Mạng Trực Tuyến Việt Nam - BKHOST. Với sứ mệnh mang tới các dịch vụ trên Internet tốt nhất cho các cá nhân và doanh nghiệp trong nước và quốc tế, tôi luôn nỗ lực hết mình nâng cấp đầu tư hệ thống phần cứng, nâng cao chất lượng dịch vụ chăm sóc khách hàng để đem đến những sản phẩm hoàn hảo nhất cho người tiêu dùng. Vì vậy, tôi tin tưởng sẽ đem đến các giải pháp CNTT mới nhất, tối ưu nhất, hiệu quả nhất và chi phí hợp lý nhất cho tất cả các doanh nghiệp.
    Bình luận

    Trượt lên đầu trang
    Gọi ĐT tư vấn ngay
    Chat ngay qua Zalo
    Chat ngay qua Messenger
    Bạn đã hài lòng với trải nghiệm trên Bkhost.vn?
    Cảm ơn lượt bình chọn của bạn, Chúc bạn 1 ngày tốt lành !