YAML কি জন্য ব্যবহৃত হয়?

আরেকটি টেক্সট ডেটা ফরম্যাট হল YAML ( এখনও আরেকটি মার্কআপ ভাষা ; পরে, YAML মার্কআপ ভাষা নয় )। এটি নেটওয়ার্কের মাধ্যমে ট্রান্সমিশনের জন্য বস্তুকে সিরিয়ালাইজ করতে ব্যবহৃত হয় (যেমন XML এবং JSON এইভাবে ব্যবহার করা হয়)। যেহেতু এটি মানুষের পঠনযোগ্য, এটি কনফিগারেশন ফাইলগুলি লিখতেও ব্যবহৃত হয়, উদাহরণস্বরূপ, ডকার, কুবারনেটস, অ্যানসিবল, ইত্যাদির জন্য৷ যখন YAML একটি ফাইলে (উদাহরণস্বরূপ, একটি কনফিগারেশন ফাইল) সংরক্ষণ করার প্রয়োজন হয়, তখন আমরা দুটির মধ্যে একটি ব্যবহার করি এক্সটেনশন: .yaml বা .yml।

ভাষা সিনট্যাক্স

XML-এ, কোণ বন্ধনী ( <> ) ট্যাগ নির্ধারণ করতে ব্যবহৃত হয়। JSON-এ, আমরা কোঁকড়া বন্ধনী ব্যবহার করি ( {} )। YAML নতুন লাইন এবং ইন্ডেন্টেশন ব্যবহার করে।

ডেটা কী-মান জোড়া হিসাবে সংরক্ষণ করা হয়, যেখানে কীটি একটি স্ট্রিং, এবং মানটি বিভিন্ন ধরনের ডেটা হতে পারে (স্ট্রিং, সংখ্যা, সত্য/মিথ্যা, অ্যারে, ইত্যাদি)। কীগুলি উদ্ধৃতি চিহ্ন ছাড়াই লেখা হয়।

চলুন দেখে নেওয়া যাক 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: >
     begin
     ...
     একই লাইন চালিয়ে যান
     ...
     শেষ

    সমস্ত টেক্সট এক লাইন হিসাবে গণ্য করা হবে.

আপনার যদি একটি ফাইলে একাধিক YAML ডেটা স্ট্রাকচার লিখতে হয়, তাহলে আপনাকে সেগুলিকে --- (তিনটি হাইফেন) দিয়ে আলাদা করতে হবে। অনুশীলনে, এটির খুব কমই প্রয়োজন আছে, তবে এই সম্ভাবনা সম্পর্কে সচেতন হওয়া ভাল।

একটি YAML নথির উদাহরণ

আসুন কিছু জাভা ডেটা স্ট্রাকচার (একটি ক্লাস) এবং একটি সংশ্লিষ্ট অবজেক্ট তৈরি করি এবং অবজেক্টটিকে 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
   নারী: সত্য
---