YAML - Nguyên thủy cú pháp

Trong chương này, bạn sẽ tìm hiểu về các khía cạnh sau của các nguyên mẫu cú pháp trong YAML:

  • Thông số sản xuất
  • Dấu cách thụt lề
  • Khoảng cách ngăn cách
  • Tiền tố dòng bị bỏ qua
  • Gấp dòng

Hãy để chúng tôi hiểu chi tiết từng khía cạnh.

Thông số sản xuất

Thông số sản xuất bao gồm một tập hợp các thông số và phạm vi giá trị cho phép được sử dụng cho một sản xuất cụ thể. Danh sách các thông số sản xuất sau đây được sử dụng trong YAML:

Thụt lề

Nó được biểu thị bằng ký tự n hoặc là mDòng ký tự phụ thuộc vào mức độ thụt lề của các khối có trong nó. Nhiều sản phẩm đã tham số hóa các tính năng này.

Bối cảnh

Nó được ký hiệu là c. YAML hỗ trợ hai nhóm ngữ cảnh:block stylesflow styles.

Phong cách

Nó được ký hiệu là s. Nội dung vô hướng có thể được trình bày theo một trong năm kiểu:plain, double quoted and single quoted flow, literal and folded block.

Chomping

Nó được ký hiệu là t. Khối vô hướng cung cấp nhiều cơ chế giúp cắt bớt khối:strip, clipkeep. Chomping giúp định dạng chuỗi dòng mới. Nó được sử dụng biểu diễn kiểu khối. Quá trình băm xảy ra với sự trợ giúp của các chỉ báo. Các chỉ báo kiểm soát đầu ra nào nên được tạo ra với các dòng mới của chuỗi. Các dòng mới được xóa bằng(-) toán tử và các dòng mới được thêm với (+) nhà điều hành.

Dưới đây là một ví dụ về quy trình cắt cuộn -

strip: |-
   text↓
clip: |
   text↓
keep: |+
   text↓

Kết quả sau khi phân tích cú pháp ví dụ YAML được chỉ định như sau:

Dấu cách thụt lề

Trong luồng ký tự YAML, thụt lề được định nghĩa là ký tự ngắt dòng bởi không hoặc nhiều ký tự. Điểm quan trọng nhất cần lưu ý là thụt lề không được chứa bất kỳ ký tự tab nào. Các ký tự trong thụt lề không bao giờ được coi là một phần của thông tin nội dung của nút. Hãy quan sát đoạn mã sau để hiểu rõ hơn:

%YAML 1.1
---
!!map {
   ? !!str "Not indented"
   : !!map {
      ? !!str "By one space"
      : !!str "By four\n spaces\n",
      ? !!str "Flow style"
      : !!seq [
         !!str "By two",
         !!str "Still by two",
         !!str "Again by two",
      ]
   }
}

Kết quả mà bạn có thể thấy sau khi thụt lề như sau:

{
   "Not indented": {
      "By one space": "By four\n spaces\n", 
      "Flow style": [
         "By two", 
         "Still by two", 
         "Again by two"
      ]
   }
}

Khoảng cách ngăn cách

YAML sử dụng các ký tự khoảng trắng để phân tách giữa các mã thông báo. Lưu ý quan trọng nhất là phân tách trong YAML không được chứa các ký tự tab.

Đoạn mã đơn sau đây cho thấy việc sử dụng các khoảng cách ly:

{ · first: · Sammy, · last: · Sosa · }
Cú pháp hiển thị ở trên cung cấp cho bạn kết quả sau:
{
   "\u00b7 last": "\u00b7 Sosa \u00b7", 
   "\u00b7 first": "\u00b7 Sammy"
}

Tiền tố dòng bị bỏ qua

Tiền tố rỗng luôn bao gồm thụt đầu dòng tùy thuộc vào kiểu vô hướng cũng bao gồm khoảng trắng ở đầu. Vô hướng đơn thuần không được chứa bất kỳ ký tự tab nào. Mặt khác, các đại lượng vô hướng được trích dẫn có thể chứa các ký tự tab. Khối vô hướng hoàn toàn phụ thuộc vào thụt đầu dòng.

Ví dụ sau đây cho thấy hoạt động của tiền tố dòng bị bỏ qua theo cách có hệ thống:

%YAML 1.1
---
!!map {
   ? !!str "plain"
   : !!str "text lines",
   ? !!str "quoted"
   : !!str "text lines",
   ? !!str "block"
   : !!str "text·®lines\n"
}

Đầu ra đạt được cho các luồng khối như sau:

{
   "plain": "text lines", 
   "quoted": "text lines", 
   "block": "text\u00b7\u00aelines\n"
}

Gấp dòng

Gấp dòng cho phép ngắt các dòng dài để dễ đọc. Nhiều dòng ngắn hơn có nghĩa là khả năng đọc tốt hơn. Gấp dòng đạt được bằng cách lưu ý ngữ nghĩa ban đầu của dòng dài. Ví dụ sau minh họa cách gấp dòng -

%YAML 1.1
--- !!str
"specific\L\
trimmed\n\n\n\
as space"

Bạn có thể thấy đầu ra cho gấp dòng ở định dạng JSON như sau:

"specific\u2028trimmed\n\n\nas space"