Ano ang gamit ng YAML?

Ang isa pang format ng data ng text ay YAML ( Yet Another Markup Language ; mamaya, YAML Ain't Markup Language ). Ito ay ginagamit upang i-serialize ang mga bagay para sa paghahatid sa network (tulad ng XML at JSON ay ginagamit sa ganitong paraan). Dahil nababasa ito ng tao, ginagamit din ito para magsulat ng mga configuration file, halimbawa, para sa Docker, Kubernetes, Ansible, atbp. Kapag kailangang i-save ang YAML sa isang file (halimbawa, isang configuration file), ginagamit namin ang isa sa dalawa mga extension: .yaml o .yml.

Syntax ng wika

Sa XML, ang mga angle bracket ( <> ) ay ginagamit upang magtalaga ng mga tag. Sa JSON, gumagamit kami ng mga kulot na bracket ( {} ). Gumagamit ang YAML ng mga bagong linya at indentation.

Ang data ay nakaimbak bilang key-value pairs, kung saan ang key ay isang string, at ang value ay maaaring iba't ibang uri ng data (string, numero, true/false, array, atbp.). Ang mga susi ay isinusulat nang walang mga panipi.

Tingnan natin kung paano iniimbak ang impormasyon sa YAML:

Uri Java YAML
Integer
int number = 5
numero: 5
Fractional na numero
double number = 4.3
numero: 4.3
Boolean variable
boolean valid = false
valid: false
valid: walang
valid: off

* Mga wastong halaga ng boolean: true/false, yes/no, on/off.

String
String city = "New York"
lungsod: Lungsod ng New York
: lungsod ng 'New York'
: "New York"

* Lahat ng tatlong mga pagpipilian ay katumbas.

String na may mga espesyal na character
String line = "aaa\nbbb"
linya: "aaa\nbbb"
Magkomento sa code
// comment
# komento
Bagay
public class Person {
  String name = "Dennis";
  int age = 32;
}

* Ibinigay ang klase ng object para makita mo ang structure ng object.

tao:
  pangalan: "Dennis"
  edad: 32

* Bigyang-pansin ang indentation bago ang mga katangian. Ito ay dapat na pareho para sa lahat ng mga katangian.

Listahan ng mga simpleng halaga
var ages =
    List.of(1, 3, 5, 9, 78, -5);
edad: [1, 3,5,9,78, -5]
edad:
  - 1
  - 3
  - 5
  - 9
  - 78
  - -5

* Ang parehong mga pagpipilian ay katumbas.
** Ang bawat elemento ng listahan ay minarkahan ng gitling.

Listahan ng mga bagay
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)      );
tao:
  - pangalan: "Ian"
    edad: 21
  - pangalan: "Marina"
    edad: 25
  - pangalan: "Owen"
    edad: 73

Tulad ng sa Java, ang isang elemento ng isang listahan ay maaaring isang listahan, iyon ay, ang mga bagay ay maaaring ma-nest sa loob ng isa't isa. Ang gitling na nagpapahiwatig ng susunod na elemento ng listahan ay maaaring pahalang na i-offset kaugnay ng parent key, o matatagpuan mismo sa ibaba nito. Ang pangunahing bagay ay ang lahat ng mga elemento ay may parehong format. Makakatulong ito na maiwasan ang pagkalito at isang hindi tiyak na hierarchy ng nesting.

edad:
  - 1
  - 3
  - 5
  - 9
  - 78
  - -5
edad:
- 1
- 3
- 5
- 9
- 78
- -5

Mayroong dalawang higit pang mga nuances kapag nagtatrabaho sa mga halaga ng teksto:

  1. Multiline na teksto. Maaari naming i-save ang teksto tulad nito:

    multilineText: "linya 1\nlinya 2\n....linya n"

    Ngunit magiging lubhang hindi kanais-nais na subukang basahin iyon. Kaya mayroong | (pipe) na simbolo, na maaari mong gamitin upang isulat ang teksto sa ibang paraan:

    multilineText: |
     linya 1
     linya 2
     ....
     linya n

    Sasang-ayon ka na ang pangalawang opsyon ay mas maginhawa, tama ba?

  2. Mahabang linya. Kung gusto mong panatilihin ang text sa isang linya ngunit gusto mo ring magkasya ito sa nakikitang workspace ng IDE, maaari mong gamitin ang > (mas malaki kaysa) na simbolo.

    singlelineText: >
     simulan
     ...
     magpatuloy sa parehong linya
     ...
     wakas

    Ang lahat ng teksto ay ituturing bilang isang linya.

Kung kailangan mong magsulat ng ilang istruktura ng data ng YAML sa isang file, kailangan mong paghiwalayin ang mga ito gamit ang --- (tatlong gitling). Sa pagsasagawa, bihirang kailanganin ito, ngunit pinakamainam na malaman ang posibilidad na ito.

Halimbawa ng isang YAML na dokumento

Gumawa tayo ng ilang istraktura ng data ng Java (isang klase) at isang katumbas na bagay, at subukang katawanin ang bagay bilang 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);
}

Wastong representasyon sa YAML:

---
kasalPetsa: 2000-12-03
asawa:
 pangalan: Ann
 edad: 37
 ay Babae: oo
asawa:
 pangalan: Alex
 edad: 40
 ay Babae: walang
anak:
 - pangalan: Iris
   edad: 12
   ay Babae: totoo
 - pangalan: Olivia
   edad: 5
   isWoman: totoo
---