## 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/)