YAML nima uchun ishlatiladi
Yana bir matnli ma'lumot formati — YAML (Yet Another Markup Language, keyinchalik — YAML Ain't Markup Language). Ob'ektlarni tarmoq orqali uzatish uchun serializatsiya qilish uchun ishlatiladi (xml va json singari). O'qilishi qulayligi tufayli uni konfiguratsiya fayllarini yozishda ham ishlatishadi, masalan, Docker, Kubernetes, Ansible, etc. YAML ni faylda saqlash kerak bo'lsa (masalan, konfiguratsion), ikkita kengaytma ishlatiladi: .yaml va .yml.
Til sintaksisi
Xml'dagi teglarni belgilash uchun burchakli qavslardan (<>), JSON'da esa figurali qavslardan ({}) foydalaniladi. YAML uchun esa satr ajratgichi (Enter) va bo'shliqlar (probel yoki tab) ishlatiladi.
Ma'lumotlar key-value juftliklari ko'rinishida saqlanadi, bu key string bo'lib, qiymat turli ma'lumotlar turi bo'lishi mumkin: string, raqam, true/false, array... Kalitlar tirnoqsiz yoziladi.
YAML'da ma'lumotlar qanday saqlanishini ketma-ket ko'rib chiqamiz:
| Tur | Java | YAML |
|---|---|---|
| Butun son | |
number: 5
|
| O'nlik son | |
number: 4.3
|
| Boolean o'zgaruvchi | |
valid: false
valid: no valid: off * Ruxsat etilgan boolean qiymatlar: true/false, yes/no, on/off. |
| String | |
city: Kyiv
city: 'Kyiv' city: "Kyiv" * Uchala variant ham tengdir. |
| Maxsus belgili string | |
line: "aaa\nbbb"
|
| Koddagi izoh | |
# comment
|
| Ob'ekt | * Ob'ektni ko'rsatish uchun, ob'ektning tuzilishi aniq bo'lishi uchun sinf keltirilgan. |
person:
name: "Vasyl" age: 32 * Atributlar oldidagi bo'shliqqa e'tibor bering. U barcha atributlar uchun bir xil bo'lishi kerak. |
| Sodda qiymatlar ro'yxati | |
ages: [1, 3,5,9,78, -5]
ages: - 1 - 3 - 5 - 9 - 78 - -5 * Ikkala variant ham teng. |
| Ob'ektlar ro'yxati | |
people:
- name: "Ivan" age: 21 - name: "Marina" age: 25 - name: "Oleh" age: 73 |
Java'dagi kabi, ro'yxat elementi ham ro'yxat bo'lishi mumkin, ya'ni ob'ektlarni bir biriga joylashtirish mumkin. Ro'yxatdagi keyingi elementni aniqlovchi defis, asosiy kalitga nisbatan gorizontal o'zgartirilishi mumkin yoki bevosita uning ostida bo'lishi mumkin. Muhimi, barcha elementlar bir xil formatga ega bo'lishi kerak. Bu chalkashlik va kengaytirilgan iyerarxiyaga sabab bo'lishini oldini oladi.
|
ages:
- 1 - 3 - 5 - 9 - 78 - -5 |
ages:
- 1 - 3 - 5 - 9 - 78 - -5 |
Matnli qiymatlar bilan ishlashda yana ikkita noziklik mavjud:
-
Ko'p qatorli matn. Biz matnni quyidagicha saqlashimiz mumkin:
multilineText: "line 1\nline 2\n....line n"Lekin uni o'qish juda noqulay bo'ladi. Shuning uchun | (pipe) belgisi mavjud, yordamida matnni boshqacha yozib qo'yish mumkin:
multilineText: |
line 1
line 2
....
line nQabul qilasizmi, ikkinchi variant qulayroq, to'g'rimi?
-
Uzun satrlar. Agar matnni bitta satrda saqlash kerak bo'lsa, lekin uni IDE ishchi oynasida joylashishini xohlasangiz, > (greater) belgisidan foydalanishingiz mumkin.
singlelineText: >
begin
...
continue same line
...
endBarcha matn bitta satr sifatida qabul qilinadi.
Agar bir necha YAML tuzilmalarni bir faylda yozish kerak bo'lsa, ularning orasida ajratgich — (uchta defis) ishlatiladi. Amalda bu kamdan-kam hollarda kerak bo'lib qoladi, lekin bu variantni bilish foydali bo'ladi.
YAML hujjati misoli
Java'da qandaydir ma'lumot tuzilmasi (klass) va shu turdagi ob'ekt yarataylik — va bu ob'ektning ma'lumotlarini YAML formatida serializatsiya qilingan holda tasvirlashga harakat qilamiz.
class Family {
private Date weddingDate;
private Person wife;
private Person husband;
private List<Person> children;
// getters and setters are omitted
}
class Person {
private final String name;
private final boolean isWoman;
private int age;
public Person(String name, int age, boolean isWoman) {
this.name = name;
this.age = age;
this.isWoman = isWoman;
}
// getters and setters are omitted
}
public static void main(String[] args) {
Person wife = new Person("Anya", 37, true);
Person husband = new Person("Alex", 40, false);
var children = List.of(
new Person("Inna", 12, true),
new Person("Olya", 5, true)
);
Date weddingDate = new Date(/*some long*/);
Family family = new Family();
family.setWeddingDate(weddingDate);
family.setWife(wife);
family.setHusband(husband);
family.setChildren(children);
}
YAML'da yaroqli tasvirlanishi:
weddingDate: 2000-12-03
wife:
name: Anya
age: 37
isWoman: yes
husband:
name: Alex
age: 40
isWoman: no
children:
- name: Inna
age: 12
isWoman: true
- name: Olya
age: 5
isWoman: true
---
GO TO FULL VERSION