Apakah kegunaan YAML?

Format data teks lain ialah YAML ( Yet Another Markup Language ; kemudian, YAML Ain't Markup Language ). Ia digunakan untuk menyusun objek untuk penghantaran melalui rangkaian (sama seperti XML dan JSON digunakan dengan cara ini). Kerana ia boleh dibaca oleh manusia, ia juga digunakan untuk menulis fail konfigurasi, contohnya, untuk Docker, Kubernetes, Ansible, dll. Apabila YAML perlu disimpan ke fail (contohnya, fail konfigurasi), kami menggunakan satu daripada dua sambungan: .yaml atau .yml.

Sintaks bahasa

Dalam XML, kurungan sudut ( <> ) digunakan untuk menetapkan tag. Dalam JSON, kami menggunakan kurungan kerinting ( {} ). YAML menggunakan baris dan lekukan baharu.

Data disimpan sebagai pasangan nilai kunci, di mana kuncinya ialah rentetan, dan nilainya boleh terdiri daripada pelbagai jenis data (rentetan, nombor, benar/salah, tatasusunan, dll.). Kekunci ditulis tanpa tanda petikan.

Mari kita lihat cara maklumat disimpan dalam YAML:

taip Jawa YAML
Integer

int number = 5
nombor: 5
Nombor pecahan

double number = 4.3
nombor: 4.3
Pembolehubah Boolean

boolean valid = false
sah: palsu
sah: tidak
sah: mati

* Nilai boolean yang sah: benar/salah, ya/tidak, hidup/mati.

Tali

String city = "New York"
bandar: bandar New York
: bandar 'New York'
: "New York"

* Ketiga-tiga pilihan adalah setara.

Rentetan dengan aksara khas

String line = "aaa\nbbb"
baris: "aaa\nbbb"
Komen dalam kod

// comment
# komen
Objek

public class Person {
  String name = "Dennis";
  int age = 32;
}

* Kelas objek diberikan supaya anda boleh melihat struktur objek.

orang:
  nama: "Dennis"
  umur: 32

* Perhatikan lekukan sebelum atribut. Ia mestilah sama untuk semua atribut.

Senarai nilai mudah

var ages = 
    List.of(1, 3, 5, 9, 78, -5);
umur: [1, 3,5,9,78, -5]
umur:
  - 1
  - 3
  - 5
  - 9
  - 78
  - -5

* Kedua-dua pilihan adalah setara.
** Setiap elemen senarai ditandakan dengan sempang.

Senarai objek

class Person {
    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
…
List<Person> people = List.of(
        new Person("Ian", 21),     
        new Person("Marina", 25),     
        new Person("Owen", 73)      );
orang:
  - nama: "Ian"
    umur: 21
  - nama: "Marina"
    umur: 25
  - nama: "Owen"
    umur: 73

Seperti dalam Java, elemen senarai boleh menjadi senarai, iaitu, objek boleh bersarang di dalam satu sama lain. Tanda sempang yang menunjukkan elemen senarai seterusnya boleh diimbangi secara mendatar berbanding kunci induk, atau terletak betul-betul di bawahnya. Perkara utama ialah semua elemen mempunyai format yang sama. Ini akan membantu mengelakkan kekeliruan dan hierarki sarang yang tidak jelas.

umur:
  - 1
  - 3
  - 5
  - 9
  - 78
  - -5
umur:
- 1
- 3
- 5
- 9
- 78
- -5

Terdapat dua lagi nuansa apabila bekerja dengan nilai teks:

  1. Teks berbilang baris. Kita boleh menyimpan teks seperti ini:

    multilineTeks: "baris 1\nbaris 2\n....baris n"

    Tetapi ia akan menjadi sangat tidak menyenangkan untuk mencuba membacanya. Jadi terdapat | simbol (paip), yang boleh anda gunakan untuk menulis teks secara berbeza:

    multilineTeks: |
     baris 1
     baris 2
     ....
     baris n

    Anda akan bersetuju bahawa pilihan kedua adalah lebih mudah, bukan?

  2. Beratur panjang. Jika anda ingin menyimpan teks pada satu baris tetapi juga mahu ia muat dalam ruang kerja IDE yang boleh dilihat, anda boleh menggunakan simbol > (lebih besar daripada).

    singlelineTeks: >
     mula
     ...
     teruskan baris yang sama
     ...
     tamat

    Semua teks akan dianggap sebagai satu baris.

Jika anda perlu menulis beberapa struktur data YAML ke dalam satu fail, maka anda perlu memisahkannya dengan --- (tiga sempang). Dalam amalan, jarang sekali terdapat keperluan untuk ini, tetapi yang terbaik adalah untuk mengetahui kemungkinan ini.

Contoh dokumen YAML

Mari kita cipta beberapa struktur data Java (kelas) dan objek yang sepadan, dan cuba mewakili objek sebagai YAML.


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("Ann", 37, true);
   Person husband = new Person("Alex", 40, false);
   var children = List.of(
           new Person("Iris", 12, true),
           new Person("Olivia", 5, true)
   );
   Date weddingDate = new Date(/* some long */);

   Family family = new Family();
   family.setWeddingDate(weddingDate);
   family.setWife(wife);
   family.setHusband(husband);
   family.setChildren(children);
}

Perwakilan yang sah dalam YAML:

---
perkahwinanTarikh: 2000-12-03
isteri:
 nama: Ann
 umur: 37
 ialahWanita: ya
suami:
 nama: Alex
 umur: 40
 ialahWanita: tiada
anak:
 - nama: Iris
   umur: 12
   ialahWanita: benar
 - nama: Olivia
   umur: 5
   ialahWanita: benar
---