YAML ใช้สำหรับอะไร

รูปแบบข้อมูลข้อความอื่นคือ YAML ( Yet Another Markup Languageต่อมาคือYAML Ain't Markup Language ) มันถูกใช้เพื่อซีเรียลไลซ์วัตถุสำหรับการส่งผ่านเครือข่าย (เช่นเดียวกับ XML และ JSON ที่ใช้วิธีนี้) เนื่องจากเป็นไฟล์ที่มนุษย์อ่านได้ จึงใช้ในการเขียนไฟล์การกำหนดค่า เช่น สำหรับ Docker, Kubernetes, Ansible เป็นต้น เมื่อจำเป็นต้องบันทึก YAML ลงในไฟล์ (เช่น ไฟล์การกำหนดค่า) เราจะใช้หนึ่งในสองไฟล์ นามสกุล: .yaml หรือ .yml

ไวยากรณ์ของภาษา

ใน XML จะใช้ วงเล็บมุม ( <> ) เพื่อระบุแท็ก ใน JSON เราใช้วงเล็บปีกกา ( {} ) YAML ใช้การขึ้นบรรทัดใหม่และการเยื้อง

ข้อมูลจะถูกจัดเก็บเป็นคู่คีย์-ค่า โดยที่คีย์คือสตริง และค่าสามารถเป็นประเภทข้อมูลต่างๆ ได้ (สตริง ตัวเลข จริง/เท็จ อาร์เรย์ ฯลฯ) คีย์ถูกเขียนโดยไม่มีเครื่องหมายอัญประกาศ

มาดูกันว่าข้อมูลถูกจัดเก็บอย่างไรใน YAML:

พิมพ์ ชวา ย.ม
จำนวนเต็ม
int number = 5
จำนวน: 5
จำนวนเศษส่วน
double number = 4.3
หมายเลข: 4.3
ตัวแปรบูลีน
boolean valid = false
ถูกต้อง: เท็จ
ถูกต้อง: ไม่
ถูกต้อง: ปิด

* ค่าบูลีนที่ถูกต้อง: จริง/เท็จ ใช่/ไม่ใช่ เปิด/ปิด

สตริง
String city = "New York"
เมือง: นิวยอร์ก
เมือง: 'นิวยอร์ก'
เมือง: "นิวยอร์ก"

* ทั้งสามตัวเลือกเท่ากัน

สตริงที่มีอักขระพิเศษ
String line = "aaa\nbbb"
บรรทัด: "aaa\nbbb"
แสดงความคิดเห็นในรหัส
// comment
#ความคิดเห็น
วัตถุ
public class Person {
  String name = "Dennis";
  int age = 32;
}

* มีการกำหนดคลาสของวัตถุเพื่อให้คุณเห็นโครงสร้างของวัตถุ

คน:
  ชื่อ: "เดนนิส"
  อายุ: 32

* ให้ความสนใจกับการเยื้องหน้าแอตทริบิวต์ จะต้องเหมือนกันสำหรับแอตทริบิวต์ทั้งหมด

รายการของค่าอย่างง่าย
var ages =
    List.of(1, 3, 5, 9, 78, -5);
อายุ: [1, 3,5,9,78, -5]
อายุ:
  - 1
  - 3
  - 5
  - 9
  - 78
  - -5

* ตัวเลือกทั้งสองเทียบเท่ากัน
** แต่ละองค์ประกอบของรายการจะถูกทำเครื่องหมายด้วยยัติภังค์

รายการวัตถุ
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)      );
คน:
  - ชื่อ: "เอียน"
    อายุ: 21
  - ชื่อ: "มารีน่า"
    อายุ: 25
  - ชื่อ: "โอเว่น"
    อายุ: 73

เช่นเดียวกับในภาษาจาวา องค์ประกอบของรายการสามารถเป็นรายการได้ กล่าวคือ วัตถุสามารถซ้อนอยู่ภายในกันได้ ยัติภังค์ที่ระบุองค์ประกอบถัดไปของรายการสามารถหักล้างในแนวนอนโดยสัมพันธ์กับคีย์หลัก หรืออยู่ด้านล่างโดยตรง สิ่งสำคัญคือองค์ประกอบทั้งหมดมีรูปแบบเดียวกัน สิ่งนี้จะช่วยหลีกเลี่ยงความสับสนและลำดับชั้นการซ้อนที่ไม่ชัดเจน

อายุ:
  - 1
  - 3
  - 5
  - 9
  - 78
  - -5
อายุ:
- 1
- 3
- 5
- 9
- 78
- -5

มีความแตกต่างอีกสองประการเมื่อทำงานกับค่าข้อความ:

  1. ข้อความหลายบรรทัด เราสามารถบันทึกข้อความได้ดังนี้

    ข้อความหลายบรรทัด: "บรรทัด 1\nบรรทัด 2\n....บรรทัด n"

    แต่คงไม่เป็นที่พอใจนักหากลองอ่านดู ดังนั้นจึงมี| สัญลักษณ์ (ไปป์) ซึ่งคุณสามารถใช้เพื่อเขียนข้อความในลักษณะต่างๆ ได้:

    ข้อความหลายบรรทัด: |
     บรรทัดที่ 1
     บรรทัดที่ 2
     ....
     บรรทัดที่ n

    คุณจะยอมรับว่าตัวเลือกที่สองสะดวกกว่าใช่ไหม

  2. เส้นยาว หากคุณต้องการให้ข้อความอยู่ในบรรทัดเดียวแต่ต้องการให้พอดีกับพื้นที่ทำงานที่มองเห็นได้ของ IDE คุณสามารถใช้สัญลักษณ์> (มากกว่า)

    singlelineText: >
     เริ่มต้น
     ...
     ต่อบรรทัดเดิม
     ...
     จบ

    ข้อความทั้งหมดจะถือเป็นบรรทัดเดียว

หากคุณต้องการเขียนโครงสร้างข้อมูล YAML หลายรายการเป็นไฟล์เดียว คุณต้องแยกโครงสร้างเหล่านั้นด้วย--- (ยัติภังค์สามตัว) ในทางปฏิบัติ แทบไม่มีความจำเป็นสำหรับสิ่งนี้ แต่ทางที่ดีควรตระหนักถึงความเป็นไปได้นี้

ตัวอย่างเอกสาร YAML

มาสร้างโครงสร้างข้อมูล Java (คลาส) และวัตถุที่สอดคล้องกัน และพยายามแสดงวัตถุเป็น 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);
}

การเป็นตัวแทนที่ถูกต้องใน YAML:

---
งานแต่งงานวันที่: 2000-12-03
ภรรยา:
 ชื่อ: แอน
 อายุ: 37
 ปี ผู้หญิง: ใช่
สามี:
 ชื่อ: อเล็กซ์
 อายุ: 40 ปี
 ผู้หญิง: ไม่มี
ลูก:
 - ชื่อ: ไอริส
   อายุ: 12 ปี
   ผู้หญิง: จริง
 - ชื่อ: โอลิเวีย
   อายุ: 5
   isWoman: จริง
---