YAML Bukan Bahasa Markup (YAML), dan seiring berjalannya format konfigurasi, mudah dilihat. Ini memiliki struktur visual yang intuitif, dan logikanya cukup sederhana:poin-poin berindentasi mewarisi properti poin-poin induk.
Tapi kesederhanaan yang tampak ini bisa menipu.
Sangat mudah (dan menyesatkan) untuk menganggap YAML hanya sebagai daftar nilai terkait, tidak lebih kompleks dari daftar belanja. Ada heading dan beberapa item di bawahnya. Item di bawah judul berhubungan langsung dengan itu, bukan? Nah, Anda bisa menguji teori ini dengan menulis sedikit YAML yang valid.
Buka editor teks dan masukkan teks ini, pertahankan tanda hubung di bagian atas file dan spasi di depan untuk dua item terakhir:
---
Store: Bakery
Sourdough loaf
Bagels
Simpan file sebagai example.yaml (atau yang serupa).
Jika Anda belum memiliki yamllint
terinstal, instal:
$ sudo dnf install -y yamllint
Sebuah linter adalah aplikasi yang memverifikasi sintaks file. yamllint
perintah adalah cara yang bagus untuk memastikan YAML Anda valid sebelum Anda menyerahkannya ke aplikasi apa pun yang Anda gunakan untuk menulis YAML (Mungkin, misalnya).
Gunakan yamllint
untuk memvalidasi file YAML Anda:
$ yamllint --strict shop.yaml || echo “Fail”
$
Tetapi ketika dikonversi ke JSON dengan skrip konverter sederhana, struktur data YAML sederhana ini menjadi lebih jelas:
$ ~/bin/json2yaml.py shop.yaml
{“Store”: “Bakery Sourdough loaf Bagels”}
Diurai tanpa konteks visual jeda baris dan lekukan, cakupan sebenarnya dari data Anda terlihat jauh berbeda. Data sebagian besar datar, hampir tanpa hierarki. Tidak ada indikasi bahwa roti dan bagel penghuni pertama adalah anak-anak dari nama toko.
[ Pembaca juga menyukai: Dapat dilakukan:Otomatisasi TI untuk semua orang ]
Bagaimana data disimpan dalam YAML
YAML dapat berisi berbagai jenis blok data:
- Urutan:nilai yang tercantum dalam urutan tertentu. Urutan dimulai dengan tanda hubung dan spasi (
-
). Anda dapat menganggap urutan sebagai daftar Python atau larik di Bash atau Perl. - Pemetaan:pasangan kunci dan nilai. Setiap kunci harus unik, dan urutannya tidak masalah. Pikirkan kamus Python atau penugasan variabel dalam skrip Bash.
Ada jenis ketiga yang disebut scalar
, yang merupakan data arbitrer (dikodekan dalam Unicode) seperti string, integer, tanggal, dan sebagainya. Dalam praktiknya, ini adalah kata dan angka yang Anda ketikkan saat membuat blok pemetaan dan urutan, jadi Anda tidak akan memikirkan hal ini lebih dari sekadar merenungkan kata-kata dalam bahasa ibu Anda.
Saat membangun YAML, mungkin membantu untuk menganggap YAML sebagai urutan urutan atau peta peta, tetapi tidak keduanya.
Blok pemetaan YAML
Saat Anda memulai file YAML dengan pernyataan pemetaan, YAML mengharapkan serangkaian pemetaan. Blok pemetaan di YAML tidak akan ditutup sampai diselesaikan, dan blok pemetaan baru dibuat secara eksplisit. Blok baru hanya dapat dibuat salah satu dengan meningkatkan level indentasi (dalam hal ini, blok baru ada di dalam blok sebelumnya) atau dengan menyelesaikan pemetaan sebelumnya dan memulai blok pemetaan yang berdekatan.
Alasan contoh YAML asli dalam artikel ini gagal menghasilkan data dengan hierarki adalah karena sebenarnya hanya satu blok data:kunci Store
memiliki nilai tunggal Bakery Sourdough loaf Bagels
. YAML mengabaikan spasi putih karena tidak ada blok pemetaan baru yang dimulai.
Apakah mungkin untuk memperbaiki contoh YAML dengan menambahkan setiap item urutan dengan tanda hubung dan spasi?
---
Store: Bakery
- Sourdough loaf
- Bagels
Sekali lagi, ini adalah YAML yang valid, tetapi masih cukup datar:
$ ~/bin/json2yaml.py shop.yaml
{“Store”: “Bakery - Sourdough loaf - Bagels”}
Masalahnya adalah file YAML ini membuka blok pemetaan dan tidak pernah menutupnya. Untuk menutup Store
blokir dan buka yang baru, Anda harus memulai pemetaan baru. Nilai pemetaan dapat berupa urutan, tetapi Anda memerlukan kunci pertama.
Inilah resolusi yang benar (dan diperluas):
---
Store:
Bakery:
- ‘Sourdough loaf’
- ‘Bagels’
Cheesemonger:
- ‘Blue cheese’
- ‘Feta’
Di JSON, ini memutuskan untuk:
{“Store”: {“Bakery”: [“Sourdough loaf”, “Bagels”],
“Cheesemonger”: [“Blue cheese”, “Feta”]}}
Seperti yang Anda lihat, direktif YAML ini berisi satu pemetaan (Store
) ke dua nilai anak (Bakery
dan Cheesemonger
), yang masing-masing dipetakan ke urutan anak.
blok urutan YAML
Prinsip yang sama berlaku jika Anda memulai arahan YAML sebagai urutan. Misalnya, direktif YAML ini valid:
Flour
Water
Salt
Setiap item berbeda jika dilihat sebagai JSON:
[“Flour”, “Water”, “Salt”]
Tapi file YAML ini tidak valid karena mencoba memulai blok pemetaan pada tingkat yang berdekatan dengan blok urutan :
---
- Flour
- Water
- Salt
Sugar: caster
Ini dapat diperbaiki dengan memindahkan blok pemetaan ke dalam urutannya:
---
- Flour
- Water
- Salt
- Sugar: caster
Anda dapat, seperti biasa, menyematkan urutan ke item pemetaan Anda:
---
- Flour
- Water
- Salt
- Sugar:
- caster
- granulated
- icing
Dilihat melalui lensa pelingkupan JSON eksplisit, cuplikan YAML itu berbunyi seperti ini:
[“Flour”, “Salt”, “Water”, {“Sugar”: [“caster”, “granulated”, “icing”]}]
[ Panduan gratis dari Red Hat:5 langkah untuk mengotomatisasi bisnis Anda. ]
Sintaks YAML
Jika Anda ingin menulis YAML dengan nyaman, penting untuk mengetahui struktur datanya. Seperti yang Anda tahu, tidak banyak yang harus Anda ingat. Anda tahu tentang pemetaan dan urutan blok, sehingga Anda tahu semua yang Anda butuhkan untuk bekerja. Yang tersisa hanyalah mengingat bagaimana mereka berinteraksi dan tidak berinteraksi satu sama lain. Selamat mengkode!