## YAML ဆိုတာ ဘာလဲ - YAML ဆိုတာက နေ့စဥ်အလုပ်တွေမှာ Programming Languages တွေနဲ့ တွဲဖက်ပြီး အသုံးပြုတဲ့ Data Serialization Language တစ်ခု ဖြစ်ပါတယ်။ အထူးသဖြင့် data / cloud technologies တွေမှာ Configuration တွေ ၊ Setting တွေ ၊ Permission တွေ စသဖြင့် ဒေတာမျိုးစုံကို `.yaml` (or) `.yml` file အနေနဲ့ ရေးသားပြီး အသုံးပြုကြတာ တွေ့ရပါလိမ့်မယ်။ - အများသိနိုင်တဲ့ YAML ကို အသုံးပြုတဲ့ Data/Cloud tools တွေကတော့ - - dbt - Github Actions (CI/CD) - Docker Compose YAML - Kubernetes - Airflow , Dagstar - YAML မှာက ရေးသားတဲ့ ပုံစံ Structural characters တွေပေါ် မူတည်ပြီး ရှင်းရှင်းလင်းလင်း နဲ့ အဓိပ္ပါယ် ဖွင့်ဆိုနိုင်ပါတယ်။ ဥပမာ - - ==indentation== တွေက code structure ပိုင်းခြားဖို့အတွက် သုံးတယ်။ - ==colons== `:` တွေက key/value pair တွေကို ပိုင်းခြားဖို့အတွက် သုံးတယ်။ - ==dashes== `-` တွေက bulleted list တွေကို တည်ဆောက်ဖို့ သုံးတယ်။ ## YAML Data Structures - YAML မှာက အခြေခံကျတဲ့ Data Structures ၃ မျိုး ရှိတယ်။ 1. mappings - Hashes တွေ Dictionaries `{}` တွေ 2. sequences - Arrays / Lists `[]` တွေ 3. scalars - သင်္ချာဂဏန်း Number (သို့) စာသား String တွေ - အထက်ပါ Data Structures ၃ မျိုးကို မျက်စိထဲ မြင်ဖို့အတွက် အောက်မှာ YAML ရေးပုံ နဲ့ အဲဒီ ရေးပုံရဲ့ results ကို JSON format နဲ့ အလွယ် မြင်နိုင်ပုံ ကို တွဲပြီး ဖော်ပြချင်ပါတယ်။ - မိမိ ဘာသာ စမ်းချင်ရင်လဲ [YAML Formatter](https://yamltools.dev/en/format-converter) website မှာ စမ်းကြည့်လို့ ရပါတယ်။ #### Mapping - Mapping - Dictionary in YAML ```yaml hr: 65 avg: 0.278 name: "Mg Hla" location: Myanmar ``` - Mapping - Dictionary result in JSON ```json { "hr": 65, "avg": 0.278, "name": "Mg Hla", "location": "Myanmar" } ``` #### Sequence - Sequence/List of scalars in YAML ```yaml - Mg Mg - Mya Mya - U Ba ``` - List result in JSON ```json [ "Mg Mg", "Mya Mya", "U Ba" ] ``` #### Scalars - အထက်မှာ ရေးပြထားတဲ့ Dictionary (or) List တွေထဲမှာ ပါဝင်နေတဲ့ value တွေ - numbers (or) string တွေက Scalars တွေပါပဲ။ - string နဲ့ ပတ်သတ်ရင် မေးနိုင်တာ တစ်ခုက single or double quotes `" "` တွေ သုံးတာ အရေးပါ၊မပါ ဆိုတာပါ။ - YAML မှာက အဲဒီအတွက် strict rule မရှိပါဘူး ။ မသုံးလဲ ရသလို သုံးလဲ ရပါတယ်။ - ဒါပေမယ့် များသောအားဖြင့်တော့ double quotes `" "` ကို special characters `@,#` သို့မဟုတ် newline breaks `\n` စသဖြင့် ပါတဲ့ အခါမှာ error မဖြစ်စေဖို့အတွက် သုံးကြပါတယ်။ - သာမန် ရိုးရှင်းတဲ့ string တွေ (သို့) special character မပါတဲ့ တစ်လုံးထဲသော string တွေမှာတော့ quotes တွေ မပါပဲ ရေးကြတာများတယ်။ #### Nested Structure (Mixed) - Sequences , Mapping တွေကို ရောပြီးတော့လဲ သုံးလို့ ရတယ်။ တကယ့်လက်တွေ့ အသုံးချတဲ့အခါ ဒီလိုမျိုး ထပ်ဆင့် ထပ်ဆင့် ရေးသားတဲ့ ပုံမျိုးကိုပဲ အများဆုံး တွေ့ရမှာပါ။ - Nested structure in YAML ```yaml name: - Mg Mg - Mya Mya - U Ba location: - Mandalay - Yangon - Sagaing ``` - Nested structure result in JSON ```json { "name": [ "Mg Mg", "Mya Mya", "U Ba" ], "location": [ "Mandalay", "Yangon", "Sagaing" ] } ``` - Another nested structure example in YAML ```yaml person: first_name : Mg Hla family: - U Ba - Daw Hla - Mya Mya location: Township: - Aung Myay Thar Zan State: - Mandalay Country: - Myanmar ``` - Result JSON ```json { "person": { "first_name": "Mg Hla", "family": [ "U Ba", "Daw Hla", "Mya Mya" ] }, "location": { "Township": [ "Aung Myay Thar Zan" ], "State": [ "Mandalay" ], "Country": [ "Myanmar" ] } } ``` #### Flow Style (Compact Format) - Sequences , Mapping တွေကို လိုင်းမခွဲတော့ပဲ တဆက်ထဲ ရေးလို့လဲ ရပါတယ်။ ```yaml names: [Mg Mg, U Ba, Daw Hla] location: {township: Mandalay, country: Myanmar} ``` - Result in JSON ```json { "names": [ "Mg Mg", "U Ba", "Daw Hla" ], "location": { "township": "Mandalay", "country": "Myanmar" } } ``` ## References - YAML 1.2.2 [Official Documentation](https://yaml.org/spec/1.2.2/)