YAML Nə Üçün İstifadə Olunur
Daha bir mətn məlumat formatı — YAML (Yet Another Markup Language, sonradan — YAML Ain't Markup Language). Obyektlərin şəbəkə vasitəsilə ötürülməsi üçün serializasiya edilməsində istifadə olunur (xml və json kimi). Oxunma rahatlığı səbəbindən, həmçinin konfiqurasiya fayllarının yazılması üçün də istifadə olunur, məsələn, Docker, Kubernetes, Ansible və s. YAML faylda saxlanılmalıdırsa (məsələn, konfiqurasiya), o zaman iki genişlənmə istifadə olunur: .yaml və .yml.
Dilin Sintaksisi
Xml-də teqləri göstərmək üçün bucaq mötərizələri (<>) istifadə olunur, JSON üçün isə köşə mötərizələri ({}). YAML üçün isə sətir ayracı (Enter) və mesafələr (boşluqlar ya da tab) istifadə olunur.
Məlumatlar key-value cütləri şəklində saxlanılır, burada açar bir sətirdir, dəyər isə müxtəlif məlumat tipləri ola bilər: sətir, rəqəm, doğru/yanlış, massiv... Açarlar dırnaqsız yazılır.
Gəlin ardıcıl olaraq YAML-da məlumatların necə saxlandığını baxaq:
Tip | Java | YAML |
---|---|---|
Tam ədədlər |
|
number: 5
|
Ədədi kəsr |
|
number: 4.3
|
Boolean dəyişəni |
|
valid: false
valid: no valid: off * İcazə verilən boolean dəyərlər: true/false, yes/no, on/off. |
Sətir |
|
city: Kyiv
city: 'Kyiv' city: "Kyiv" * Hər üç variant bərabərdir. |
Xüsusi simvollarla sətir |
|
line: "aaa\nbbb"
|
Kodda şərh |
|
# comment
|
Obyekt | * Obyektin strukturunu göstərmək üçün sinif gətirilmişdir. |
person:
name: "Vasyl" age: 32 * Attributların önündəki mesafəyə diqqət yetir. Bütün atributlar üçün eyni olmalıdır. |
Sadalama dəyərləri |
|
ages: [1, 3,5,9,78, -5]
ages: - 1 - 3 - 5 - 9 - 78 - -5 * Hər iki variant bərabərdir. |
Obyektlər siyahısı |
|
people:
- name: "Ivan" age: 21 - name: "Marina" age: 25 - name: "Oleh" age: 73 |
Java da olduğu kimi, siyahının elementi başqa siyahı ola bilər, yəni obyektlər bir-birinin içinə yerləşdirilə bilər. Siyahının növbəti elementini müəyyən edən defis üfüqi olaraq əsas açarın yanında və ya onun altında ola bilər. Əsas olanı — bütün elementlərin eyni formatda olmasıdır. Bu çaşqınlığın və iç-içəlik iyerarxiyasının qeyri-müəyyənliyinin qarşısını alacaq.
ages:
- 1 - 3 - 5 - 9 - 78 - -5 |
ages:
- 1 - 3 - 5 - 9 - 78 - -5 |
Mətn dəyərləri ilə işləyərkən daha iki nüans var:
-
Çok sətirli mətn. Mətn bu şəkildə saxlanıla bilər:
multilineText: "line 1\nline 2\n....line n"Amma oxumaq çox rahat olmayacaq. Ona görə də | (pipe) simvolu var, bununla mətn başqa cür yazıla bilər:
multilineText: |
line 1
line 2
....
line nRazılaş, ikinci variant daha rahatdır, hə?
-
Uzun sətirlər. Əgər mətn bir sətirdə saxlanılmalıdır, amma proqramın işçi sahəsində tam görünməsini istəyirsənsə, > (greater) simvolundan istifadə edə bilərsən.
singlelineText: >
begin
...
continue same line
...
endBütün mətn bir sətir kimi qəbul olunacaq.
Əgər bir neçə YAML data strukturunu bir fayla yazmaq lazım olarsa, onlardan arasında — (üç defis) ayırıcı istifadə edilməlidir. Əməliyyat praktikada nadir hallarda rast gəlinir, amma bu variant haqqında bilmək yaxşıdır.
YAML Sənədi Nümunəsi
Java-da hansısa data strukturu (sinif) və bu tip obyekt yaradaq — və bu obyektin məlumatlarını YAML formatında serializasiya olunmuş şəkildə təsvir etməyə cəhd edək.
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-də doğru təmsil olunması:
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