YAML - Hướng dẫn nhanh
YAML Ain’t Markup Language là ngôn ngữ tuần tự hóa dữ liệu phù hợp với mong đợi của người dùng về dữ liệu. Nó được thiết kế để thân thiện với con người và hoạt động hoàn hảo với các ngôn ngữ lập trình khác. Nó rất hữu ích để quản lý dữ liệu và bao gồm các ký tự Unicode có thể in được. Chương này sẽ giới thiệu cho bạn về YAML và cung cấp cho bạn ý tưởng về các tính năng của nó.
định dạng
Hãy xem xét văn bản được hiển thị bên dưới -
Quick brown fox jumped over the lazy dog.
Văn bản YAML cho điều này sẽ được trình bày như hình dưới đây -
yaml.load(Quick brown fox jumped over the lazy dog.)
>>'Quick brown fox jumped over the lazy dog.'
Lưu ý rằng YAML nhận giá trị ở định dạng chuỗi và đại diện cho đầu ra như đã đề cập ở trên.
Ví dụ
Hãy để chúng tôi hiểu các định dạng trong YAML với sự trợ giúp của các ví dụ sau:
Hãy xem xét số điểm sau đây của “pi”, có giá trị là 3,1415926. Trong YAML, nó được biểu diễn dưới dạng số thực như hình dưới đây:
>>> yaml.load('3.1415926536')
3.1415926536
Giả sử, nhiều giá trị được tải trong cấu trúc dữ liệu cụ thể như được đề cập bên dưới:
eggs
ham
spam
French basil salmon terrine
Khi bạn tải dữ liệu này vào YAML, các giá trị được lấy trong cấu trúc dữ liệu mảng là một dạng danh sách. Đầu ra như hình dưới đây -
>>> yaml.load('''
- eggs
- ham
- spam
- French basil salmon terrine
''')
['eggs', 'ham', 'spam', 'French basil salmon terrine']
Đặc trưng
YAML bao gồm một ngôn ngữ đánh dấu với cấu trúc quan trọng, để phân biệt ngôn ngữ hướng dữ liệu với đánh dấu tài liệu. Các mục tiêu thiết kế và tính năng của YAML được đưa ra dưới đây:
Khớp với cấu trúc dữ liệu gốc của phương pháp linh hoạt và các ngôn ngữ của nó như Perl, Python, PHP, Ruby và JavaScript
Dữ liệu YAML có thể di động giữa các ngôn ngữ lập trình
Bao gồm mô hình dữ liệu nhất quán dữ liệu
Con người dễ dàng đọc được
Hỗ trợ xử lý một hướng
Dễ triển khai và sử dụng
Bây giờ bạn đã có ý tưởng về YAML và các tính năng của nó, hãy cùng chúng tôi tìm hiểu những điều cơ bản về nó với cú pháp và các thao tác khác. Hãy nhớ rằng YAML bao gồm một định dạng có cấu trúc mà con người có thể đọc được.
Quy tắc tạo tệp YAML
Khi tạo tệp trong YAML, bạn nên nhớ các quy tắc cơ bản sau:
YAML phân biệt chữ hoa chữ thường
Các tệp nên có .yaml như phần mở rộng
YAML không cho phép sử dụng các tab trong khi tạo tệp YAML; không gian được phép thay thế
Các thành phần cơ bản của tệp YAML
Các thành phần cơ bản của YAML được mô tả dưới đây:
Định dạng khối thông thường
Định dạng khối này sử dụng hyphen+spaceđể bắt đầu một mục mới trong một danh sách được chỉ định. Quan sát ví dụ dưới đây -
--- # Favorite movies
- Casablanca
- North by Northwest
- The Man Who Wasn't There
Inline Format
Định dạng nội tuyến được phân tách bằng comma and spacevà các mục được bao gồm trong JSON. Quan sát ví dụ dưới đây -
--- # Shopping list
[milk, groceries, eggs, juice, fruits]
Folded Text
Văn bản được gấp chuyển đổi dòng mới thành khoảng trắng và xóa khoảng trắng ở đầu. Quan sát ví dụ dưới đây -
- {name: John Smith, age: 33}
- name: Mary Smith
age: 27
Cấu trúc tuân theo tất cả các quy ước cơ bản của YAML được hiển thị bên dưới:
men: [John Smith, Bill Jones]
women:
- Mary Smith
- Susan Williams
Tóm tắt các yếu tố cơ bản của YAML
Tóm tắt các phần tử cơ bản của YAML được đưa ra ở đây: Các nhận xét trong YAML bắt đầu bằng dấu (#) tính cách.
Nhận xét phải được phân tách với các mã thông báo khác bằng khoảng trắng.
Thụt lề của khoảng trắng được sử dụng để biểu thị cấu trúc.
Các tab không được bao gồm dưới dạng thụt lề cho tệp YAML.
Các thành viên trong danh sách được biểu thị bằng dấu gạch ngang ở đầu (-).
Các thành viên trong danh sách được đặt trong dấu ngoặc vuông và được phân tách bằng dấu phẩy.
Các mảng liên kết được biểu diễn bằng dấu hai chấm ( : )theo định dạng của cặp giá trị khóa. Chúng được đặt trong dấu ngoặc nhọn{}.
Nhiều tài liệu có các luồng đơn được phân tách bằng 3 dấu gạch ngang (---).
Các nút lặp lại trong mỗi tệp ban đầu được biểu thị bằng dấu và (&) và bằng dấu hoa thị (*) đánh dấu sau.
YAML luôn yêu cầu dấu hai chấm và dấu phẩy được sử dụng làm dấu phân tách danh sách theo sau là dấu cách với giá trị vô hướng.
Các nút phải được gắn nhãn bằng dấu chấm than (!) hoặc dấu chấm than kép (!!), theo sau là chuỗi có thể được mở rộng thành URI hoặc URL.
Thụt lề và tách là hai khái niệm chính khi bạn học bất kỳ ngôn ngữ lập trình nào. Chương này nói chi tiết về hai khái niệm liên quan đến YAML.
Thụt lề của YAML
YAML không bao gồm bất kỳ khoảng trống bắt buộc nào. Hơn nữa, không cần phải nhất quán. Thụt lề YAML hợp lệ được hiển thị bên dưới -
a:
b:
- c
- d
- e
f:
"ghi"
Bạn nên nhớ các quy tắc sau khi làm việc với thụt lề trong YAML: Các khối dòng phải được thiết kế với ít nhất một số khoảng trắng với mức khối hiện tại xung quanh.
Nội dung luồng của YAML trải dài trên nhiều dòng. Phần bắt đầu của nội dung luồng bắt đầu bằng{ hoặc là [.
Các mục trong danh sách khối bao gồm thụt lề giống như cấp độ khối xung quanh vì - được coi là một phần của thụt lề.
Ví dụ về Khối dự định
Quan sát đoạn mã sau cho thấy thụt lề với các ví dụ:
--- !clarkevans.com/^invoice
invoice: 34843
date : 2001-01-23
bill-to: &id001
given : Chris
family : Dumars
address:
lines: |
458 Walkman Dr.
Suite #292
city : Royal Oak
state : MI
postal : 48046
ship-to: *id001
product:
- sku : BL394D
quantity : 4
description : Basketball
price : 450.00
- sku : BL4438H
quantity : 1
description : Super Hoop
price : 2392.00
tax : 251.42
total: 4443.52
comments: >
Late afternoon is best.
Backup contact is Nancy
Billsmer @ 338-4338.
Tách các chuỗi
Các chuỗi được phân tách bằng cách sử dụng chuỗi dấu ngoặc kép. Nếu bạn thoát khỏi các ký tự dòng mới trong một chuỗi nhất định, nó sẽ bị loại bỏ hoàn toàn và chuyển thành giá trị khoảng trắng.
Thí dụ
Trong ví dụ này, chúng tôi đã liệt kê tập trung các động vật được liệt kê dưới dạng cấu trúc mảng với kiểu dữ liệu là chuỗi. Mỗi phần tử mới được liệt kê với một tiền tố gạch nối như đã đề cập dưới dạng tiền tố.
-
- Cat
- Dog
- Goldfish
-
- Python
- Lion
- Tiger
Một ví dụ khác để giải thích biểu diễn chuỗi trong YAML được đề cập bên dưới.
errors:
messages:
already_confirmed: "was already confirmed, please try signing in"
confirmation_period_expired: "needs to be confirmed within %{period}, please request a new one"
expired: "has expired, please request a new one"
not_found: "not found"
not_locked: "was not locked"
not_saved:
one: "1 error prohibited this %{resource} from being saved:"
other: "%{count} errors prohibited this %{resource} from being saved:"
Ví dụ này đề cập đến tập hợp các thông báo lỗi mà người dùng có thể sử dụng chỉ bằng cách đề cập đến khía cạnh chính và tìm nạp các giá trị tương ứng. Mẫu YAML này tuân theo cấu trúc của JSON mà người dùng mới sử dụng YAML có thể hiểu được.
Bây giờ bạn đã cảm thấy thoải mái với cú pháp và khái niệm cơ bản của YAML, hãy để chúng tôi tiếp tục tìm hiểu chi tiết về nó. Trong chương này, chúng ta sẽ xem cách sử dụng chú thích trong YAML.
YAML supports single line comments. Cấu trúc của nó được giải thích bên dưới với sự trợ giúp của một ví dụ:
# this is single line comment.
YAML does not support multi line comments. Nếu bạn muốn cung cấp nhận xét cho nhiều dòng, bạn có thể làm như vậy như thể hiện trong ví dụ dưới đây -
# this
# is a multiple
# line comment
Tính năng của Nhận xét
Các tính năng của nhận xét trong YAML được đưa ra dưới đây:
Một khối đã nhận xét bị bỏ qua trong quá trình thực thi.
Nhận xét giúp thêm mô tả cho khối mã được chỉ định.
Chú thích không được xuất hiện bên trong vô hướng.
YAML không bao gồm bất kỳ cách nào để thoát khỏi ký hiệu băm (#) vì vậy trong chuỗi nhiều dòng, do đó không có cách nào để phân chia nhận xét khỏi giá trị chuỗi thô.
Các nhận xét trong một bộ sưu tập được hiển thị bên dưới -
key: #comment 1
- value line 1
#comment 2
- value line 2
#comment 3
- value line 3
Tổ hợp phím tắt để nhận xét khối YAML là Ctrl+Q.
Nếu bạn đang sử dụng Sublime Text editor, các bước để nhận xét khối được đề cập bên dưới -
Chọn khối. Sử dụng “CTRL + /” trên Linux và Windows và “CMD + /” cho hệ điều hành Mac. Thực thi khối.
Lưu ý rằng các bước tương tự có thể áp dụng nếu bạn đang sử dụng Visual Studio Code Editor. Nó luôn được khuyến khích sử dụngSublime Text Editor để tạo tệp YAML vì nó được hầu hết các hệ điều hành hỗ trợ và bao gồm các phím tắt thân thiện với nhà phát triển.
YAML bao gồm các tập hợp khối sử dụng thụt lề cho phạm vi. Ở đây, mỗi mục nhập bắt đầu bằng một dòng mới. Chuỗi khối trong bộ sưu tập chỉ ra mỗi mục nhập códash and space(-). Trong YAML, các kiểu tập hợp khối không được biểu thị bằng bất kỳ chỉ báo cụ thể nào. Tập hợp khối trong YAML có thể phân biệt với các đại lượng vô hướng khác bằng việc xác định cặp giá trị khóa có trong chúng.
Ánh xạ là biểu diễn giá trị khóa được bao gồm trong cấu trúc JSON. Nó thường được sử dụng trong các hệ thống hỗ trợ đa ngôn ngữ và tạo API trong các ứng dụng di động. Ánh xạ sử dụng biểu diễn cặp giá trị khóa với việc sử dụngcolon and space (:).
Ví dụ
Hãy xem xét một ví dụ về chuỗi vô hướng, ví dụ danh sách các cầu thủ bóng như hình dưới đây -
- Mark Joseph
- James Stephen
- Ken Griffey
Ví dụ sau cho thấy ánh xạ các đại lượng vô hướng thành các đại lượng vô hướng:
hr: 87
avg: 0.298
rbi: 149
Ví dụ sau đây cho thấy ánh xạ vô hướng thành chuỗi:
European:
- Boston Red Sox
- Detroit Tigers
- New York Yankees
national:
- New York Mets
- Chicago Cubs
- Atlanta Braves
Bộ sưu tập có thể được sử dụng cho ánh xạ trình tự được hiển thị bên dưới -
-
name: Mark Joseph
hr: 87
avg: 0.278
-
name: James Stephen
hr: 63
avg: 0.288
Với các bộ sưu tập, YAML bao gồm các kiểu dòng sử dụng các chỉ báo rõ ràng thay vì sử dụng thụt lề để biểu thị khoảng trắng. Chuỗi dòng trong các bộ sưu tập được viết dưới dạng danh sách được phân tách bằng dấu phẩy đặt trong dấu ngoặc vuông. Hình minh họa tốt nhất cho bộ sưu tập được bao gồm trong các khung PHP như bản giao hưởng.
[PHP, Perl, Python]
Các bộ sưu tập này được lưu trữ trong các tài liệu. Việc phân tách các tài liệu trong YAML được biểu thị bằng ba dấu gạch ngang hoặc dấu gạch ngang (---). Phần cuối của tài liệu được đánh dấu bằng ba dấu chấm (…).
Việc phân tách các tài liệu trong YAML được biểu thị bằng ba dấu gạch ngang (---). Phần cuối của tài liệu được biểu thị bằng ba dấu chấm (…).
Biểu diễn tài liệu được gọi là định dạng cấu trúc được đề cập bên dưới:
# Ranking of 1998 home runs
---
- Mark Joseph
- James Stephen
- Ken Griffey
# Team ranking
---
- Chicago Cubs
- St Louis Cardinals
Dấu chấm hỏi với sự kết hợp của khoảng trắng cho thấy một cấu trúc ánh xạ phức tạp. Trong một tập hợp khối, người dùng có thể bao gồm cấu trúc với dấu gạch ngang, dấu hai chấm và dấu chấm hỏi. Ví dụ sau đây cho thấy ánh xạ giữa các chuỗi:
- 2001-07-23
? [ New York Yankees,Atlanta Braves ]
: [ 2001-07-02, 2001-08-12, 2001-08-14]
Vô hướng trong YAML được viết ở định dạng khối sử dụng kiểu chữ được ký hiệu là (|). Nó biểu thị số lượng ngắt dòng. Trong YAML, các đại lượng vô hướng được viết theo kiểu gấp (>) trong đó mỗi dòng biểu thị một không gian gấp lại kết thúc bằng dấu empty line hoặc là more indented hàng.
Các dòng mới được giữ nguyên bằng chữ được hiển thị bên dưới -
ASCII Art
--- |
\//||\/||
// || ||__
Các dòng mới gấp được giữ nguyên cho more indented lines và blank lines như hình dưới đây -
>
Sammy Sosa completed another
fine season with great stats.
63 Home Runs
0.288 Batting Average
What a year!
Các vô hướng luồng YAML bao gồm các kiểu đơn giản và kiểu được trích dẫn. Kiểu trích dẫn kép bao gồm các chuỗi thoát khác nhau. Vô hướng dòng chảy có thể bao gồm nhiều dòng; ngắt dòng luôn được gấp lại trong cấu trúc này.
plain:
This unquoted scalar
spans many lines.
quoted: "So does this
quoted scalar.\n"
Trong YAML, các nút không được gắn thẻ được chỉ định với một loại ứng dụng cụ thể. Các ví dụ về đặc tả thẻ thường sử dụngseq, map và strcác loại cho kho thẻ YAML. Các thẻ được trình bày dưới dạng các ví dụ được đề cập như dưới đây:
Thẻ số nguyên
Các thẻ này bao gồm các giá trị số nguyên trong đó. Chúng còn được gọi là thẻ số.
canonical: 12345
decimal: +12,345
sexagecimal: 3:25:45
octal: 014
hexadecimal: 0xC
Số dấu phẩy động
Các thẻ này bao gồm các giá trị thập phân và hàm mũ. Chúng còn được gọi là thẻ theo cấp số nhân.
canonical: 1.23015e+3
exponential: 12.3015e+02
sexagecimal: 20:30.15
fixed: 1,230.15
negative infinity: -.inf
not a number: .NaN
Các thẻ khác
Nó bao gồm một loạt các giá trị số nguyên, số động và chuỗi được nhúng trong chúng. Do đó nó được gọi là thẻ linh tinh.
null: ~
true: y
false: n
string: '12345'
Ví dụ đầy đủ sau đây chỉ định cấu trúc của YAML bao gồm các ký hiệu và các biểu diễn khác nhau sẽ hữu ích khi chuyển đổi hoặc xử lý chúng ở định dạng JSON. Các thuộc tính này cũng được gọi là tên khóa trong tài liệu JSON. Các ký hiệu này được tạo ra cho mục đích bảo mật.
Định dạng YAML ở trên đại diện cho các thuộc tính khác nhau của giá trị mặc định, bộ điều hợp và máy chủ lưu trữ cùng với nhiều thuộc tính khác. YAML cũng giữ nhật ký của mọi tệp được tạo để duy trì theo dõi các thông báo lỗi được tạo ra. Khi chuyển đổi tệp YAML được chỉ định ở định dạng JSON, chúng tôi nhận được đầu ra mong muốn như được đề cập bên dưới:
defaults: &defaults
adapter: postgres
host: localhost
development:
database: myapp_development
<<: *defaults
test:
database: myapp_test
<<: *defaults
Hãy chuyển đổi định dạng YAML sang JSON và kiểm tra đầu ra.
{
"defaults": {
"adapter": "postgres",
"host": "localhost"
},
"development": {
"database": "myapp_development",
"adapter": "postgres",
"host": "localhost"
},
"test": {
"database": "myapp_test",
"adapter": "postgres",
"host": "localhost"
}
}
Khóa mặc định có tiền tố “<<: *” được đưa vào khi cần thiết mà không cần phải viết lặp lại cùng một đoạn mã.
YAML tuân theo quy trình tiêu chuẩn cho quy trình. Cấu trúc dữ liệu gốc trong YAML bao gồm các biểu diễn đơn giản như các nút. Nó còn được gọi là Biểu đồ nút đại diện.
Nó bao gồm ánh xạ, chuỗi và đại lượng vô hướng đang được tuần tự hóa để tạo ra một cây tuần tự hóa. Với tuần tự hóa, các đối tượng được chuyển đổi với dòng byte.
Cây sự kiện tuần tự hóa giúp tạo bản trình bày các luồng ký tự như được biểu diễn trong sơ đồ sau.
Quy trình ngược lại phân tích luồng byte thành cây sự kiện được tuần tự hóa. Sau đó, các nút được chuyển đổi thành đồ thị nút. Các giá trị này sau đó được chuyển đổi trong cấu trúc dữ liệu gốc YAML. Hình bên dưới giải thích điều này -
Thông tin trong YAML được sử dụng theo hai cách: machine processing và human consumption. Bộ xử lý trong YAML được sử dụng như một công cụ cho quy trình chuyển đổi thông tin giữa các khung nhìn bổ sung trong sơ đồ trên. Chương này mô tả các cấu trúc thông tin mà bộ xử lý YAML phải cung cấp trong một ứng dụng nhất định.
YAML bao gồm một thủ tục tuần tự hóa để biểu diễn các đối tượng dữ liệu ở định dạng nối tiếp. Quá trình xử lý thông tin YAML bao gồm ba giai đoạn:Representation, Serialization, Presentation and parsing. Hãy để chúng tôi thảo luận chi tiết từng người trong số họ.
Đại diện
YAML đại diện cho cấu trúc dữ liệu bằng cách sử dụng ba loại nút: sequence, mapping và scalar.
Sự nối tiếp
Trình tự đề cập đến số lượng mục nhập có thứ tự, ánh xạ liên kết không có thứ tự của cặp giá trị khóa. Nó tương ứng với danh sách mảng Perl hoặc Python.
Đoạn mã được hiển thị bên dưới là một ví dụ về biểu diễn trình tự -
product:
- sku : BL394D
quantity : 4
description : Football
price : 450.00
- sku : BL4438H
quantity : 1
description : Super Hoop
price : 2392.00
Lập bản đồ
Mặt khác, ánh xạ đại diện cho cấu trúc dữ liệu từ điển hoặc bảng băm. Một ví dụ cho điều tương tự được đề cập dưới đây:
batchLimit: 1000
threadCountLimit: 2
key: value
keyMapping: <What goes here?>
Vô hướng
Vô hướng đại diện cho các giá trị chuẩn của chuỗi, số nguyên, ngày tháng và kiểu dữ liệu nguyên tử. Lưu ý rằng YAML cũng bao gồm các nút chỉ định cấu trúc kiểu dữ liệu. Để biết thêm thông tin về đại lượng vô hướng, vui lòng tham khảo chương 6 của hướng dẫn này.
Serialization
Quá trình tuần tự hóa là bắt buộc trong YAML để giảm bớt thứ tự khóa và tên neo thân thiện với con người. Kết quả của tuần tự hóa là một cây tuần tự hóa YAML. Nó có thể được duyệt để tạo ra một loạt các lệnh gọi sự kiện của dữ liệu YAML.
Ví dụ về tuần tự hóa được đưa ra dưới đây:
consumer:
class: 'AppBundle\Entity\consumer'
attributes:
filters: ['customer.search', 'customer.order', 'customer.boolean']
collectionOperations:
get:
method: 'GET'
normalization_context:
groups: ['customer_list']
itemOperations:
get:
method: 'GET'
normalization_context:
groups: ['customer_get']
Bài thuyết trình
Đầu ra cuối cùng của tuần tự hóa YAML được gọi là bản trình bày. Nó thể hiện một luồng nhân vật theo cách thân thiện với con người. Bộ xử lý YAML bao gồm các chi tiết trình bày khác nhau để tạo luồng, xử lý thụt lề và định dạng nội dung. Quá trình hoàn chỉnh này được hướng dẫn bởi các tùy chọn của người dùng.
Một ví dụ cho quá trình trình bày YAML là kết quả của giá trị JSON được tạo. Hãy quan sát đoạn mã dưới đây để hiểu rõ hơn -
{
"consumer": {
"class": "AppBundle\\Entity\\consumer",
"attributes": {
"filters": [
"customer.search",
"customer.order",
"customer.boolean"
]
},
"collectionOperations": {
"get": {
"method": "GET",
"normalization_context": {
"groups": [
"customer_list"
]
}
}
},
"itemOperations": {
"get": {
"method": "GET",
"normalization_context": {
"groups": [
"customer_get"
]
}
}
}
}
}
Phân tích cú pháp
Phân tích cú pháp là quá trình trình bày ngược lại; nó bao gồm một luồng ký tự và tạo ra một chuỗi sự kiện. Nó loại bỏ các chi tiết được giới thiệu trong quá trình trình bày gây ra các sự kiện tuần tự hóa. Quy trình phân tích cú pháp có thể không thành công do đầu vào không đúng định dạng. Về cơ bản nó là một thủ tục để kiểm tra xem YAML có được định hình tốt hay không.
Hãy xem xét một ví dụ YAML được đề cập bên dưới:
---
environment: production
classes:
nfs::server:
exports:
- /srv/share1
- /srv/share3
parameters:
paramter1
Với ba dấu gạch nối, nó thể hiện phần bắt đầu của tài liệu với các thuộc tính khác nhau được định nghĩa sau đó.
YAML lint là trình phân tích cú pháp trực tuyến của YAML và giúp phân tích cú pháp cấu trúc YAML để kiểm tra xem nó có hợp lệ hay không. Liên kết chính thức cho YAML lint được đề cập dưới đây:http://www.yamllint.com/
Bạn có thể thấy kết quả phân tích cú pháp như hình dưới đây:
Chương này sẽ giải thích chi tiết về các thủ tục và quy trình mà chúng ta đã thảo luận trong chương trước. Mô hình thông tin trong YAML sẽ chỉ rõ các tính năng của quy trình tuần tự hóa và trình bày theo định dạng có hệ thống bằng cách sử dụng một sơ đồ cụ thể.
Đối với một mô hình thông tin, điều quan trọng là phải đại diện cho thông tin ứng dụng có thể di động giữa các môi trường lập trình.
Biểu đồ trên thể hiện một mô hình thông tin bình thường được biểu diễn dưới dạng đồ thị. Trong YAML, việc biểu diễn dữ liệu gốc được lấy từ gốc, được kết nối và là biểu đồ có hướng của các nút được gắn thẻ. Nếu chúng ta đề cập đến đồ thị có hướng, nó bao gồm một tập hợp các nút có đồ thị có hướng. Như đã đề cập trong mô hình thông tin, YAML hỗ trợ ba loại nút:
- Sequences
- Scalars
- Mappings
Các định nghĩa cơ bản của các nút biểu diễn này đã được thảo luận trong chương trước. Trong chương này, chúng tôi sẽ tập trung vào cái nhìn sơ đồ của các thuật ngữ này. Biểu đồ trình tự sau đây thể hiện quy trình làm việc của các huyền thoại với nhiều loại thẻ và nút ánh xạ khác nhau.
Có ba loại nút: sequence node, scalar node và mapping node.
Trình tự
Nút tuần tự tuân theo một kiến trúc tuần tự và bao gồm một chuỗi không hoặc nhiều nút có thứ tự. Một chuỗi YAML có thể chứa nhiều lần cùng một nút hoặc một nút duy nhất.
Vô hướng
Nội dung của các đại lượng vô hướng trong YAML bao gồm các ký tự Unicode có thể được biểu diễn ở định dạng với một chuỗi số 0. Nói chung, nút vô hướng bao gồm các đại lượng vô hướng.
Lập bản đồ
Nút ánh xạ bao gồm biểu diễn cặp giá trị khóa. Nội dung của nút ánh xạ bao gồm sự kết hợp của cặp khóa-giá trị với điều kiện bắt buộc là tên khóa phải được duy trì là duy nhất. Các dãy và ánh xạ gọi chung tạo thành một tập hợp.
Lưu ý rằng như được biểu diễn trong biểu đồ ở trên, các đại lượng vô hướng, chuỗi và ánh xạ được biểu diễn ở định dạng có hệ thống.
Nhiều loại ký tự khác nhau được sử dụng cho các chức năng khác nhau. Chương này nói chi tiết về cú pháp được sử dụng trong YAML và tập trung vào thao tác ký tự.
Các ký tự chỉ báo
Các ký tự chỉ báo bao gồm một ngữ nghĩa đặc biệt được sử dụng để mô tả nội dung của tài liệu YAML. Bảng sau đây cho thấy điều này một cách chi tiết.
Sr.No. | Đặc tính & Chức năng |
---|---|
1 | _ Nó biểu thị một mục trình tự khối |
2 | ? Nó biểu thị một khóa ánh xạ |
3 | : Nó biểu thị một giá trị ánh xạ |
4 | , Nó biểu thị mục nhập thu thập luồng |
5 | [ Nó bắt đầu một chuỗi dòng chảy |
6 | ] Nó kết thúc một chuỗi dòng chảy |
7 | { Nó bắt đầu một ánh xạ luồng |
số 8 | } Nó kết thúc một ánh xạ luồng |
9 | # Nó biểu thị các bình luận |
10 | & Nó biểu thị thuộc tính neo của nút |
11 | * Nó biểu thị nút bí danh |
12 | ! Nó biểu thị thẻ của nút |
13 | | Nó biểu thị một khối vô hướng theo nghĩa đen |
14 | > Nó biểu thị một khối vô hướng gấp lại |
15 | ` Trích dẫn duy nhất bao quanh đại lượng vô hướng dòng được trích dẫn |
16 | " Dấu ngoặc kép bao quanh vô hướng luồng được trích dẫn kép |
17 | % Nó biểu thị chỉ thị được sử dụng |
Ví dụ sau đây cho thấy các ký tự được sử dụng trong cú pháp:
%YAML 1.1
---
!!map {
? !!str "sequence"
: !!seq [
!!str "one", !!str "two"
],
? !!str "mapping"
: !!map {
? !!str "sky" : !!str "blue",
? !!str "sea" : !!str "green",
}
}
# This represents
# only comments.
---
!!map1 {
? !!str "anchored"
: !local &A1 "value",
? !!str "alias"
: *A1,
}
!!str "text"
Trong chương này, bạn sẽ tìm hiểu về các khía cạnh sau của 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 trên 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 đó. 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 styles và flow 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, clip và keep. 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 chặt chẽ -
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 ghi nhớ 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ã sau đây cho thấy việc sử dụng các khoảng cách ly:
{ · first: · Sammy, · last: · Sosa · }
{
"\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"
Trong YAML, bạn bắt gặp các luồng ký tự khác nhau như sau:
- Directives
- Điểm đánh dấu ranh giới tài liệu
- Documents
- Hoàn thành luồng
Trong chương này, chúng ta sẽ thảo luận chi tiết về chúng.
Chỉ thị
Lệnh là các lệnh cơ bản được sử dụng trong bộ xử lý YAML. Chỉ thị là các chi tiết trình bày giống như nhận xét không được phản ánh trong cây tuần tự. Trong YAML, không có cách nào để xác định các chỉ thị riêng. Phần này thảo luận về các loại chỉ thị khác nhau với các ví dụ liên quan -
Chỉ thị dành riêng
Các chỉ thị dành riêng được khởi tạo bằng ba ký tự gạch nối (---) như trong ví dụ bên dưới. Các chỉ thị dành riêng được chuyển đổi thành giá trị cụ thể của JSON.
%YAML 1.1
--- !!str
"foo"
Chỉ thị YAML
Chỉ thị YAML là chỉ thị mặc định. Nếu được chuyển đổi trong JSON, giá trị được tìm nạp bao gồm ký tự gạch chéo ở các ký tự đứng trước và ký tự kết thúc.
%YAML 1.1
---
!!str "foo"
Điểm đánh dấu ranh giới tài liệu
YAML sử dụng các điểm đánh dấu này để cho phép chứa nhiều tài liệu trong một luồng. Những điểm đánh dấu này được sử dụng đặc biệt để chuyển tải cấu trúc của tài liệu YAML. Lưu ý rằng một dòng bắt đầu bằng “---“ được sử dụng để bắt đầu một tài liệu mới.
Đoạn mã sau giải thích về điều này với các ví dụ:
%YAML 1.1
---
!!str "foo"
%YAML 1.1
---
!!str "bar"
%YAML 1.1
---
!!str "baz"
Các tài liệu
Tài liệu YAML được coi là một cấu trúc dữ liệu gốc duy nhất được trình bày dưới dạng một nút gốc duy nhất. Các chi tiết trình bày trong tài liệu YAML như chỉ thị, nhận xét, thụt lề và kiểu không được coi là nội dung có trong chúng.
Có hai loại tài liệu được sử dụng trong YAML. Chúng được giải thích trong phần này -
Tài liệu rõ ràng
Nó bắt đầu với điểm đánh dấu bắt đầu tài liệu, sau đó là sự trình bày của nút gốc. Ví dụ về khai báo rõ ràng YAML được đưa ra dưới đây:
---
some: yaml
...
Nó bao gồm các điểm đánh dấu bắt đầu và kết thúc rõ ràng là “---“ và “…” trong ví dụ đã cho. Khi chuyển đổi YAML được chỉ định ở định dạng JSON, chúng tôi nhận được đầu ra như hình dưới đây:
{
"some": "yaml"
}
Tài liệu ngầm
Các tài liệu này không bắt đầu bằng điểm đánh dấu bắt đầu tài liệu. Quan sát đoạn mã dưới đây -
fruits:
- Apple
- Orange
- Pineapple
- Mango
Chuyển đổi các giá trị này ở định dạng JSON, chúng ta nhận được đầu ra là một đối tượng JSON đơn giản như được đưa ra bên dưới:
{
"fruits": [
"Apple",
"Orange",
"Pineapple",
"Mango"
]
}
Hoàn thành luồng
YAML bao gồm một chuỗi các byte được gọi là dòng ký tự. Luồng bắt đầu bằng tiền tố chứa thứ tự byte biểu thị mã hóa ký tự. Luồng hoàn chỉnh bắt đầu với tiền tố chứa mã hóa ký tự, sau đó là nhận xét.
Dưới đây là một ví dụ về luồng hoàn chỉnh (luồng ký tự):
%YAML 1.1
---
!!str "Text content\n"
Mỗi nút trình bày bao gồm hai đặc điểm chính được gọi là anchor và tag. Thuộc tính nút có thể được chỉ định với nội dung nút, bị bỏ qua khỏi luồng ký tự.
Ví dụ cơ bản về biểu diễn nút như sau:
%YAML 1.1
---
!!map {
? &A1 !!str "foo"
: !!str "bar",
? !!str &A2 "baz"
: *a1
}
Node Anchors
Thuộc tính neo đại diện cho một nút để tham khảo trong tương lai. Dòng ký tự của biểu diễn YAML trong nút được biểu thị bằngampersand (&)chỉ báo. Bộ xử lý YAML không cần bảo tồn tên neo với các chi tiết biểu diễn được tạo trong đó. Đoạn mã sau giải thích điều này:
%YAML 1.1
---
!!map {
? !!str "First occurence"
: &A !!str "Value",
? !!str "Second occurence"
: *A
}
Đầu ra của YAML được tạo với các nút neo được hiển thị bên dưới:
---
!!map {
? !!str "First occurence"
: !!str "Value",
? !!str "Second occurence"
: !!str "Value",
}
Thẻ nút
Thuộc tính thẻ đại diện cho kiểu cấu trúc dữ liệu gốc xác định một nút hoàn toàn. Một thẻ được đại diện bằng (!) chỉ báo. Các thẻ được coi là một phần vốn có của biểu đồ biểu diễn. Ví dụ sau về giải thích chi tiết các thẻ nút:
%YAML 1.1
---
!!map {
? !<tag:yaml.org,2002:str> "foo"
: !<!bar> "baz"
}
Nội dung nút
Nội dung nút có thể được biểu diễn dưới dạng nội dung luồng hoặc định dạng khối. Nội dung khối kéo dài đến cuối dòng và sử dụng thụt lề để biểu thị cấu trúc. Mỗi loại tập hợp có thể được biểu diễn theo một kiểu thu thập luồng đơn cụ thể hoặc có thể được coi là một khối duy nhất. Đoạn mã sau giải thích chi tiết điều này:
%YAML 1.1
---
!!map {
? !!str "foo"
: !!str "bar baz"
}
%YAML 1.1
---
!!str "foo bar"
%YAML 1.1
---
!!str "foo bar"
%YAML 1.1
---
!!str "foo bar\n"
Trong chương này, chúng ta sẽ tập trung vào các kiểu vô hướng khác nhau được sử dụng để biểu diễn nội dung. Trong YAML, nhận xét có thể đứng trước hoặc theo sau nội dung vô hướng. Điều quan trọng cần lưu ý là không nên đưa nhận xét vào nội dung vô hướng.
Lưu ý rằng tất cả các kiểu vô hướng luồng có thể bao gồm nhiều dòng, ngoại trừ việc sử dụng nhiều khóa.
Biểu diễn của các đại lượng vô hướng được đưa ra dưới đây:
%YAML 1.1
---
!!map {
? !!str "simple key"
: !!map {
? !!str "also simple"
: !!str "value",
? !!str "not a simple key"
: !!str "any value"
}
}
Đầu ra được tạo của tiêu đề vô hướng khối được hiển thị bên dưới:
{
"simple key": {
"not a simple key": "any value",
"also simple": "value"
}
}
Nội dung vô hướng của điểm đánh dấu tài liệu
Tất cả các ký tự trong ví dụ này được coi là nội dung, bao gồm cả các ký tự khoảng trắng bên trong.
%YAML 1.1
---
!!map {
? !!str "---"
: !!str "foo",
? !!str "...",
: !!str "bar"
}
%YAML 1.1
---
!!seq [
!!str "---",
!!str "...",
!!map {
? !!str "---"
: !!str "..."
}
]
Các dấu ngắt dòng đơn giản được biểu diễn bằng ví dụ dưới đây:
%YAML 1.1
---
!!str "as space \
trimmed\n\
specific\L\n\
none"
Đầu ra JSON tương ứng cho cùng một được đề cập bên dưới:
"as space trimmed\nspecific\u2028\nnone"
Các kiểu dòng trong YAML có thể được coi như một phần mở rộng tự nhiên của JSON để bao phủ các dòng nội dung gấp để có tính năng dễ đọc hơn, sử dụng neo và bí danh để tạo các thể hiện đối tượng. Trong chương này, chúng ta sẽ tập trung vào biểu diễn luồng của các khái niệm sau:
- Nút bí danh
- Nút trống
- Kiểu dòng chảy vô hướng
- Các kiểu thu thập dòng chảy
- Các nút luồng
Ví dụ về các nút bí danh được hiển thị bên dưới:
%YAML 1.2
---
!!map {
? !!str "First occurrence"
: &A !!str "Foo",
? !!str "Override anchor"
: &B !!str "Bar",
? !!str "Second occurrence"
: *A,
? !!str "Reuse anchor"
: *B,
}
Đầu ra JSON của mã được cung cấp ở trên được đưa ra bên dưới:
{
"First occurrence": "Foo",
"Second occurrence": "Foo",
"Override anchor": "Bar",
"Reuse anchor": "Bar"
}
Các nút có nội dung trống được coi là các nút trống. Ví dụ sau đây cho thấy điều này -
%YAML 1.2
---
!!map {
? !!str "foo" : !!str "",
? !!str "" : !!str "bar",
}
Đầu ra của các nút trống trong JSON được biểu diễn như sau:
{
"": "bar",
"foo": ""
}
Kiểu vô hướng luồng bao gồm các kiểu được trích dẫn kép, được trích dẫn đơn và kiểu đơn giản. Ví dụ cơ bản cho điều tương tự được đưa ra dưới đây:
%YAML 1.2
---
!!map {
? !!str "implicit block key"
: !!seq [
!!map {
? !!str "implicit flow key"
: !!str "value",
}
]
}
Đầu ra ở định dạng JSON cho ví dụ ở trên được hiển thị bên dưới:
{
"implicit block key": [
{
"implicit flow key": "value"
}
]
}
Tập hợp luồng trong YAML được lồng với một tập hợp khối trong một tập hợp luồng khác. Các mục thu thập luồng được kết thúc bằngcomma (,) chỉ báo. Ví dụ sau giải thích chi tiết về khối thu thập luồng:
%YAML 1.2
---
!!seq [
!!seq [
!!str "one",
!!str "two",
],
!!seq [
!!str "three",
!!str "four",
],
]
Đầu ra cho thu thập luồng trong JSON được hiển thị bên dưới:
[
[
"one",
"two"
],
[
"three",
"four"
]
]
Các kiểu luồng như JSON bao gồm các chỉ báo bắt đầu và kết thúc. Kiểu luồng duy nhất không có bất kỳ thuộc tính nào là kiểu vô hướng đơn giản.
%YAML 1.2
---
!!seq [
!!seq [ !!str "a", !!str "b" ],
!!map { ? !!str "a" : !!str "b" },
!!str "a",
!!str "b",
!!str "c",]
Đầu ra cho mã hiển thị ở trên ở định dạng JSON được đưa ra bên dưới:
[
[
"a",
"b"
],
{
"a": "b"
},
"a",
"b",
"c"
]
YAML bao gồm hai kiểu vô hướng khối: literal và folded. Các khối vô hướng được kiểm soát với một số chỉ báo với tiêu đề đứng trước nội dung. Dưới đây là một ví dụ về tiêu đề vô hướng của khối:
%YAML 1.2
---
!!seq [
!!str "literal\n",
!!str "·folded\n",
!!str "keep\n\n",
!!str "·strip",
]
Đầu ra ở định dạng JSON với hành vi mặc định được đưa ra bên dưới:
[
"literal\n",
"\u00b7folded\n",
"keep\n\n",
"\u00b7strip"
]
Các loại kiểu khối
Có bốn loại kiểu khối: literal, folded, keep và stripphong cách. Các kiểu khối này được xác định với sự trợ giúp của kịch bản Block Chomping. Dưới đây là một ví dụ về kịch bản chomping khối:
%YAML 1.2
---
!!map {
? !!str "strip"
: !!str "# text",
? !!str "clip"
: !!str "# text\n",
? !!str "keep"
: !!str "# text\n",
}
Bạn có thể thấy đầu ra được tạo với ba định dạng trong JSON như được đưa ra bên dưới:
{
"strip": "# text",
"clip": "# text\n",
"keep": "# text\n"
}
Chomping trong YAML kiểm soát các ngắt cuối cùng và các dòng trống theo sau được diễn giải dưới nhiều dạng khác nhau.
Tước
Trong trường hợp này, ngắt dòng cuối cùng và các dòng trống bị loại trừ đối với nội dung vô hướng. Nó được chỉ định bởi chỉ báo chomping “-“.
Cắt
Cắt được coi là một hành vi mặc định nếu không có chỉ báo cắt rõ ràng nào được chỉ định. Ký tự ngắt cuối cùng được giữ nguyên trong nội dung của vô hướng. Ví dụ tốt nhất về việc cắt bớt được trình bày trong ví dụ trên. Nó kết thúc bằng dòng mới“\n” tính cách.
Duy trì
Giữ liên quan đến việc bổ sung với đại diện của chỉ báo chomping “+”. Các dòng bổ sung được tạo ra không bị gấp. Các dòng bổ sung không bị gấp.
Để hiểu các kiểu trình tự, điều quan trọng là phải hiểu các bộ sưu tập. Khái niệm về bộ sưu tập và kiểu trình tự hoạt động song song. Bộ sưu tập trong YAML được biểu diễn với các kiểu trình tự thích hợp. Nếu bạn muốn tham khảo trình tự thích hợp của các thẻ, hãy luôn tham khảo các bộ sưu tập. Các tập hợp trong YAML được lập chỉ mục bởi các số nguyên tuần tự bắt đầu bằng 0 như được biểu diễn trong mảng. Trọng tâm của các kiểu trình tự bắt đầu với các bộ sưu tập.
Thí dụ
Chúng ta hãy coi số lượng hành tinh trong vũ trụ là một chuỗi có thể được tạo ra như một tập hợp. Đoạn mã sau đây cho thấy cách biểu diễn kiểu trình tự của các hành tinh trong vũ trụ:
# Ordered sequence of nodes in YAML STRUCTURE
Block style: !!seq
- Mercury # Rotates - no light/dark sides.
- Venus # Deadliest. Aptly named.
- Earth # Mostly dirt.
- Mars # Seems empty.
- Jupiter # The king.
- Saturn # Pretty.
- Uranus # Where the sun hardly shines.
- Neptune # Boring. No rings.
- Pluto # You call this a planet?
Flow style: !!seq [ Mercury, Venus, Earth, Mars, # Rocks
Jupiter, Saturn, Uranus, Neptune, # Gas
Pluto ] # Overrated
Sau đó, bạn có thể thấy đầu ra sau đây cho trình tự có thứ tự ở định dạng JSON:
{
"Flow style": [
"Mercury",
"Venus",
"Earth",
"Mars",
"Jupiter",
"Saturn",
"Uranus",
"Neptune",
"Pluto"
],
"Block style": [
"Mercury",
"Venus",
"Earth",
"Mars",
"Jupiter",
"Saturn",
"Uranus",
"Neptune",
"Pluto"
]
}
Ánh xạ luồng trong YAML đại diện cho tập hợp các cặp giá trị khóa không có thứ tự. Chúng còn được gọi là nút ánh xạ. Lưu ý rằng các khóa phải được duy trì là duy nhất. Nếu có sự trùng lặp các khóa trong cấu trúc ánh xạ luồng, nó sẽ tạo ra lỗi. Thứ tự khóa được tạo trong cây tuần tự hóa.
Thí dụ
Dưới đây là một ví dụ về cấu trúc ánh xạ luồng:
%YAML 1.1
paper:
uuid: 8a8cbf60-e067-11e3-8b68-0800200c9a66
name: On formally undecidable propositions of Principia Mathematica and related systems I.
author: Kurt Gödel.
tags:
- tag:
uuid: 98fb0d90-e067-11e3-8b68-0800200c9a66
name: Mathematics
- tag:
uuid: 3f25f680-e068-11e3-8b68-0800200c9a66
name: Logic
Đầu ra của chuỗi được ánh xạ (danh sách không có thứ tự) ở định dạng JSON như được hiển thị bên dưới:
{
"paper": {
"uuid": "8a8cbf60-e067-11e3-8b68-0800200c9a66",
"name": "On formally undecidable propositions of Principia Mathematica and related systems I.",
"author": "Kurt Gödel."
},
"tags": [
{
"tag": {
"uuid": "98fb0d90-e067-11e3-8b68-0800200c9a66",
"name": "Mathematics"
}
},
{
"tag": {
"uuid": "3f25f680-e068-11e3-8b68-0800200c9a66",
"name": "Logic"
}
}
]
}
Nếu bạn quan sát đầu ra này như được hiển thị ở trên, có thể thấy rằng các tên khóa được duy trì duy nhất trong cấu trúc ánh xạ YAML.
Các chuỗi khối của YAML đại diện cho một loạt các nút. Mỗi mục được biểu thị bằng một chỉ báo “-“ hàng đầu. Lưu ý rằng chỉ báo “-“ trong YAML phải được phân tách khỏi nút bằng khoảng trắng.
Biểu diễn cơ bản của chuỗi khối được đưa ra dưới đây:
block sequence:
··- one↓
- two : three↓
Thí dụ
Quan sát các ví dụ sau để hiểu rõ hơn về chuỗi khối.
ví dụ 1
port: &ports
adapter: postgres
host: localhost
development:
database: myapp_development
<<: *ports
Đầu ra của chuỗi khối ở định dạng JSON được đưa ra dưới đây:
{
"port": {
"adapter": "postgres",
"host": "localhost"
},
"development": {
"database": "myapp_development",
"adapter": "postgres",
"host": "localhost"
}
}
Lược đồ YAML được định nghĩa là sự kết hợp của tập hợp các thẻ và bao gồm cơ chế phân giải các thẻ không cụ thể. Lược đồ an toàn dự phòng trong YAML được tạo theo cách mà nó có thể được sử dụng với bất kỳ tài liệu YAML nào. Nó cũng được coi là một lược đồ được đề xuất cho một tài liệu YAML chung.
Các loại
Có hai loại lược đồ an toàn dự phòng: Generic Mapping và Generic Sequence
Ánh xạ chung
Nó đại diện cho một vùng chứa kết hợp. Ở đây, mỗi khóa là duy nhất trong liên kết và được ánh xạ tới chính xác một giá trị. YAML không có giới hạn nào đối với các định nghĩa chính.
Dưới đây là một ví dụ để biểu diễn ánh xạ chung:
Clark : Evans
Ingy : döt Net
Oren : Ben-Kiki
Flow style: !!map { Clark: Evans, Ingy: döt Net, Oren: Ben-Kiki }
Đầu ra của cấu trúc ánh xạ chung ở định dạng JSON được hiển thị bên dưới:
{
"Oren": "Ben-Kiki",
"Ingy": "d\u00f6t Net",
"Clark": "Evans",
"Flow style": {
"Oren": "Ben-Kiki",
"Ingy": "d\u00f6t Net",
"Clark": "Evans"
}
}
Trình tự chung
Nó đại diện cho một loại trình tự. Nó bao gồm một tập hợp được lập chỉ mục bởi các số nguyên tuần tự bắt đầu bằng số không. Nó được đại diện với!!seq nhãn.
Clark : Evans
Ingy : döt Net
Oren : Ben-Kiki
Flow style: !!seq { Clark: Evans, Ingy: döt Net, Oren: Ben-Kiki }
Đầu ra cho chuỗi an toàn dự phòng chung này
schema is shown below:
{
"Oren": "Ben-Kiki",
"Ingy": "d\u00f6t Net",
"Clark": "Evans",
"Flow style": {
"Oren": "Ben-Kiki",
"Ingy": "d\u00f6t Net",
"Clark": "Evans"
}
}
Lược đồ JSON trong YAML được coi là mẫu số chung của hầu hết các ngôn ngữ máy tính hiện đại. Nó cho phép phân tích cú pháp các tệp JSON. Trong YAML, chúng tôi khuyên bạn nên xem xét các lược đồ khác trên lược đồ JSON. Lý do chính cho điều này là nó bao gồm tổ hợp giá trị khóa thân thiện với người dùng. Các tin nhắn có thể được mã hóa dưới dạng khóa và có thể được sử dụng khi cần thiết.
Lược đồ JSON là vô hướng và thiếu giá trị. Một mục nhập ánh xạ trong lược đồ JSON được biểu diễn ở định dạng của một số cặp khóa và giá trị trong đó null được coi là hợp lệ.
Thí dụ
Một lược đồ JSON rỗng được biểu diễn như hình dưới đây:
!!null null: value for null key
key with null value: !!null null
Đầu ra của biểu diễn JSON được đề cập bên dưới:
{
"null": "value for null key",
"key with null value": null
}
Thí dụ
Ví dụ sau đại diện cho lược đồ Boolean JSON:
YAML is a superset of JSON: !!bool true
Pluto is a planet: !!bool false
Sau đây là đầu ra cho cùng một định dạng JSON:
{
"YAML is a superset of JSON": true,
"Pluto is a planet": false
}
Thí dụ
Ví dụ sau đại diện cho lược đồ JSON số nguyên:
negative: !!int -12
zero: !!int 0
positive: !!int 34
{
"positive": 34,
"zero": 0,
"negative": -12
}
Thí dụ
Các thẻ trong lược đồ JSON được trình bày bằng ví dụ sau:
A null: null
Booleans: [ true, false ]
Integers: [ 0, -0, 3, -19 ]
Floats: [ 0., -0.0, 12e03, -2E+05 ]
Invalid: [ True, Null, 0o7, 0x3A, +12.3 ]
Bạn có thể tìm thấy Đầu ra JSON như hình dưới đây:
{
"Integers": [
0,
0,
3,
-19
],
"Booleans": [
true,
false
],
"A null": null,
"Invalid": [
true,
null,
"0o7",
58,
12.300000000000001
],
"Floats": [
0.0,
-0.0,
"12e03",
"-2E+05"
]
}