YAML Basic

--

YAML သည် YAML Ain’t Markup Language ဖြစ်သည်။ YAML သည် Unicode base ဖြစ်ပြီး Data serialization languageဖြစ်သည်။ Data serialization ဆိုသည်မှာ လက်ရှိ data objects ကို အခြား data structures တစ်ခုသို့ပြောင်းလဲပေးခြင်းဖြစ်သည်။ ရေးရ/ဖတ်ရလွယ်ကူသည့် Human-friendly/readable ဖြစ်သည်။

YAML သည် configuration files များအတွက် အသုံးများသည်။ YAML ၏ configuration files သည် programming ၏လိုအပ်ချက်အပေါ်မူတည်ပြီး အမျိုးမျိုးအသုံးချနိုင်သည်။ Modern Programming များနဲ့ တွဲဖက်အသုံးပြုနိုင်သည်။ YAML ၏ features များသည် Perl, C, XML, HTMLနဲ့ အခြားသော programming languagesများ၏ features များအပေါ်အခြေခံထားသည်။ YAML သည် JSON ပုံစံကိုလည်းအထူးပြုထားသဖြင့် JSON file များနဲ့ လွယ်ကူစွာဖလှယ်အသုံးပြုနိုင်သည်။

ဤမှတ်စုတွင် YAML ကို လေ့လာရန် လိုအပ်သော အသုံးအနှုန်းများနဲ့ အသုံးများ‌သောပုံစံများ၏ သဘောတရားများကိုသာ မှတ်သားထားခြင်းဖြစ်သည်။ အကြောင်းအရာအပြည့်အစုံဖော်ပြချက်များကို ဖတ်လိုလျှင် သက်ဆိုင်ရာ https://yaml.org တွင်ထပ်မံ၍အ‌သေးစိတ်လေ့လာနိုင်ပါသည်။

YAML Structure

1. YAML file ၏ extensionမှာ .yaml ဖြစ်သည်။ .ymlဟုလည်းသုံးကြသည်၊ .ymlကို extension သုံးလုံးထက်ပိုမသုံးသင့်သော System များတွင်လည်းသုံးနိုင်သည်။

2. YAML သည် case sensitive ဖြစ်သည်။

3. YAML တွင် identation များအတွက် Tab အစား white space ကိုသုံးနိုင်သည်။ အကြောင်းမှာကွဲပြားသော editors နဲ့ tools များတွင် tab သတ်မှတ်ပုံခြင်းကွဲပြားသောကြောင့် tabs key ကိုခွင့်မပြုပါ။

4. YAML ၏ operation process လုပ်ငန်းစဥ်တစ်ခုကို stream ဟုခေါ်နိုင်ပြီး၊ ၄င်း stream တစ်ခုတွင် လုပ်ငန်းစဥ်တစ်ခုစီအတွက် သီးခြားစီခွဲထားသော multiple structures များစွာပါ၀င်သည့် Document များပါ၀င်သည်။

၅. Single Document ဘဲဆိုလျှင် Dashes "---”သုံးခု နဲ့ Dotes “…” သုံးခုသည် optional ဖြစ်ပြီး၊ Multiple document ရှိသော streams တွင် Dashes "---”သုံးခုသည် မပါမဖြစ်ဖြစ်သည်။ Directive များကို Triple Dash "---” အပေါ်တွင်ရေးပေးရသည်။ Triple Dashes "---”သုံးခုသည် Document များ၏ initial Mark ဖြစ်ပြီး၊ Mltiple Document များကိုတစ်ခုနဲ့တစ်ခုကို ပိုင်းခြားပေးထားသည်။ Triple dotes “…” သုံးခုသည် end mark ဖြစ်သည်၊ Stream ကို ပိတ်ရန်သုံးသည်။

ဥပမာ။ two documents in a stream

# Ranking of 1998 home runs
---
- Mark McGwire
- Sammy Sosa
- Ken Griffey
# Team ranking
---
- Chicago Cubs
- St Louis Cardinals

ဥပမာ။ Stream by Steam

---
time: 20:03:20
player: Sammy Sosa
action: strike (miss)

---
time: 20:03:47
player: Sammy Sosa
action: grand slam

Comment —

Comment ကို “#” ခံပြီး “#”Sign နောက်မှ comment များကိုရေးနိုင်ပါတယ်။

YAML Styles

YAML ကို ပုံစံနှစ်မျိုးဖြင့်ရေးနိုင်သည်။

1. Block Styles နဲ့

2. Flow Styles

Block Styles

Block style သည် mapping နဲ sequence တို့ကို indentation များကိုသုံးပြီး စုစည်းထာ:သည်။ block style ရေးထုံးသည် human friendly ဖြစ်သည်။

Sequence ပုံစံကိုရေးရာတွင် dash “-” ၏နောက်တွင် space ခံပြီးမှ တန်ဖိုးများကို ရေးရသည်။ dash and spaceဟု အလွယ်မှတ်နိုင်သည်။ Sequenceတွင် (- ) items များသည် တူညီသော identationတွင် ရှိရမည်။

Mapping သည် key-value တန်ဖိုးအတွဲ ပုံစံဖြစ်ပြီး၊ ရေးနည်းမှာ key ၏နောက်တွင် “colon : “ တစ်ခုခံကာ ၎င်း colon နောက်တွင် space ခံပြီမှ value တန်ဖိုးကိုထည့်သည့် intended ပုံစံကိုသုံးသည်။

နောက်တနည်းမှာ Key-Value ၏ canonical ရေးနည်းဖြစ်သည်။ ရေးနည်းမှာ — question mask ”?” သည် Key ကို ကိုယ်စားပြုပြီး၊ — colum ” :” သည် Value ကို ကိုယ်စားပြုသည်။ complex key များအတွက်သုံးသည်။

x: 1
y: 2
ကို canonical နည်းအရ
?x
:1
?y
:2 ဟူ၍ရေးနိုင်သည်။

Mapping between Sequence

? - Detroit Tigers
- Chicago cubs
:
- 2001-07-23
? [ New York Yankees,
Atlanta Braves ]
: [ 2001-07-02, 2001-08-12,
2001-08-14 ]

2. Flow Style

Flow style သည် JSON ရေးထုံး၏ ပုံစံခွဲ (extension) ဖြစ်သည်။ Flow style တွင် tag node ဖြင့် data structures များကို control ခြင်း၊ Anchor & alias node များကိုအသုံးပြုခြင်းဖြင့် object instance များကို ပြန်လည်အသုံးပြုစေနိုင်ကာ၊ ရှည်လျှားသော content lines များကို (folding) ချုံ့ readability ပိုရှိစေရန်ရေးနိုင်သည်။ eg. —

%YAML 1.2
---
!!map {
? !!str "First occurrence"
: &A !!str "Foo",
? !!str "Override anchor"
: &B !!str "Bar",
? !!str "Second occurrence"
: *A,
? !!str "Reuse anchor"
: *B,
}

DATA Type

YAML မှာ Data type သုံးမျိုးရှိပါတယ်။

1. Scalar

2. Sequences (List/array)

3. Mapping (hashes/dictionaries) တို့ဖြစ်ပါတယ်။

1. Scalar

Scalar ဆိုသည်မှာ simple data typeဖြစ်သည်။ Yaml ၏ key-value စနစ်တွင် Scalar ဆိုသည်မှာ key တစ်ခုအတွက် simple value တန်ဖိုးတစ်ခုဖြစ်သည်။ YAML အတွက် scalar type နှစ်မျိုးကတော့

a. Numeric Data type

b. Sting တို့ဖြစ်သည်။

(a) Numeric Data type သုံးမျိုးရှိပါတယ်။

Integer — Integer data type မှာ decimal, octal, hexadecimal စတဲ့စနစ်များဖြစ်သည်။

Floating-point numbers — Floating-point မှာတော့ Fixed နဲ့ exponential ဖြင့်ဖော်ပြနိုင်သည်။

Booleans — Boolean value များတွင် True/False or Yes/No or On/Off တို့ဖြစ်ကြသည်။

(b) String

Yaml တွင် string များကို multiple line ရေးရာတွင် —

Block Style ဖြင့်ရေးသည့်အခါ literal နှင့် folded style နှစ်မျိုးဖြင့်ရေးနိုင်သည်။

Literal sytle ဖြင့်ရေးသားရာတွင် —

String:>၎င်းစာရေးနည်းသည် စာကြောင်းများကို တစ်ကြောင်းတည်းဖြင့်ဖော်ပြရန်သုံးသည်။

Folded style ဖြင့် ရေးရာတွင် —

String: |၎င်းစာရေးနည်းသည် စာကြောင်းများကိုတစ်ကြောင်းပြီးတစ်ကြောင်းဖော်ပြရန်သုံးသည်။

Flow style တွင် plain style နဲ့ quoted style နှစ်မျိုးရှိသည်။ Escape charactersများကို double quote “\n” အတွင်းရေးရသည်။ Special characters များကို ထည့်သွင်းလိုလျှင် single quote ‘ “Hello” yaml! ’အတွင်းရေးရသည်။ Flow style ဖြင့်ရေးသည့်အခါ စာကြောင်းအဆုံး၏ line breakသည် foldedဖြစ်သည်။

plain:
This unquoted scalar
spans many lines.
quoted: "So does this
quoted scalar.\n"

2. Sequences (List/Array)

Sequences သည် ordered collection type ဖြစ်သည်။ Data များသည် တိကျသည့် order list တွင်ရှိသည်။ List items တစ်ခုစီသည် တူညီသော indentation တွင်ရှိရသည်။Sequences ၏ value များကို Block styleတွင် list ဖြင့်ဖော်ပြပြီး၊ Flow Style တွင် value များကို Array ပုံစံဖြင့် ရေးနိုင်သည်။

List ဖြင့်ဖော်ပြရာတွင် Blank မဖြစ်ရပါ။ Blank ကိုဖော်ပြရာတွင် “” quotes သုံးနိုင်သည်။

eg.1 နှင့် 2 သည် data တူသော်လည်း၊ order မတူသောကြောင့် ကွဲပြားသော list blockနှစ်ခုဖြစ်သည်။ listing တွင် blank မထားရဘာ၊ blank နေရာတွင် “”ကိုထည့်ထားနိုင်သည်။

eg.1

- apple
- banana
-
- orange

eg. 2

- banana
- apple
- “”
- orange

Block Style တစ်ခုတွင်ပါ၀င်သော Sequences ပုံစံများမှာ

Sequence of Scalars

- Mark McGwire
- Sammy Sosa
- Ken Griffey

Mapping in sequence

-
name: Mark McGwire
hr: 65
avg: 0.278
-
name: Sammy Sosa
hr: 63
avg: 0.288

In-line Nested Mapping

---
# products purchased
- item : Super Hoop
quantity: 1
- item : Basketball
quantity: 4
- item : Big Shoes
quantity: 1

Flow Sequences

Flow sequence ကိုရေးရာတွင် Square brackets []ထဲတွင် comma ",”ဖြင့် list valueတစ်ခုစီကို ခွဲကာ ပေါင်းရေးနိုင်သည်။

Sequence in Mapping

animals: [dog, cat, mouse]

Sequences of Sequences

- [name        , hr, avg  ]
- [Mark McGwire, 65, 0.278]
- [Sammy Sosa , 63, 0.288]

3. Mapping (Hashses/Dictionaries)

Mapping သည် unorder associations type ဖြစ်သည်။ Data များကို ordering လုပ်ရန်မလိုပါ။ Mappng ရေးနည်းဖြင့် complex data structure များကို yaml file တွင် ‌ရေးနိုင်သည်။ ရှုပ်ထွေးသော dataများအတွက် အဆိုပါ key-value pairs အတွဲများကို ထပ်ဆင့်ထပ်ဆင့်၍ nested, complex ပုံစံအဖြစ်လည်းသုံးနိုင်သည်။

Block Style တစ်ခုတွင်ပါ၀င်သော Mapping ပုံစံများမှာ —

1. Simple mapping

2. Sequence in mapping

3. Nested mapping

4. Mixed mapping

စသော mapping collections ပုံစံများဖြင့်ဖွဲ့စည်းထားသည်။

Sample Mapping

---
host: phl-42
student: harry

Sequence in Mapping

---
student: marry
hobbies:
- music
- dancing
- singing

Nested Mapping

---  
host: phl_42
datacenter:
location: canada
cab: 13
cab_unit: 3

Mixed Mapping

---  
student: john
details:
fatherName: william
motherName: marry
more:
- subject1
- subject2

Flow mapping

Flow mapping ရေးရာတွင် key: value mapping များကို curly braces {} ထဲတွင်ထည့်ရေးနိုင်သည်။

Simple mapping

Simple mapping ကို flow style ပြောင်းလိုလျှင် scalar တန်ဖိုးကို "" တွင်ထည့်ပေးရသည်။

host: “phl-42” 
student: “harry”

Mapping of Mapping

datacenter: {location: yagnon, rack:15}

Nested Mapping

host: "phl-42"  
datacenter: { location: canada , cab: 13 , cab_unit: 3 }

Mixed mapping

student1: "john"  
details: { fatherName: william , motherName: marry }
more: [subject1 , subject2]

YAML Anchors

Yaml file အတွင်း recursive data structures ကို သိမ်းဆည်ရန်နှင့် ပြန်လည်သုံးရန် ရည်ရွယ်သည်။ သတ်မှတ်ထားသော anchors ကို ပြန်လည်သုံးနိုင်သည်။ Anchor node ဖြင့် data သတ်မှတ်ရာတွင် AND sysmbol “ & ” ကိုသုံးသည်။ Star symbol “ * ” ဖြင့် ‌anchor node တွင်သတ်မှတ်ထားသော data ကိုခေါ် alias node အတွက် ပြန်လည်‌‌ခေါ်ညွှန်းနိုင်သည်။

 ---
hr:
- Mark McGwire
#Following node labeled SS
- &SS Sammy Sosa #&SS ဖြင့် Sammy sosa ကို anchor မှတ်ထားလိုက်သည်။rbi:- *SS #anchor မှတ်ထားသော sammy sosa သည် ဤနေရာတွင်လာပြရမည်။- Ken Griffey

or

---roles: &wphost #Role၏document blockကို anchor မှတ်ထားသည်။- Webserver- Wp_database
---
host: server3datacenter:location: yangonroles: *wphost #Role ၏ sequences value နှစ်ခုကိုရနိုင်သည်။

Or

<<: *wphost # role block တစ်ခုလုံးကိုရနိုင်သည်။

YAML TAG

YAML ၏ Directive များကို % ဖြင့်စပြီး၄င်း၏နောက်တွင် identifier, parameters တစ်ခုကို ထည့်ပေးရသည်။ YAML ၏ Directive ပုံစီများသည် %YAML နဲ %TAG စသည်ဖြင့်ရှိသည်။ Directive %TAG, %YAML များကို Yaml file၏ Document indicators ဖြစ်သည့်“---” three dashs အပေါ်တွင် ရေးပေးရသည်။

Tags ကို ရည်ရွယ်ချက်သုံးမျိုးအတွက်အသုံးပြုသည်။

- Tag ဖြင့် Custom URI (universal resource indicator)ကိုပြုလုပ်ပြီး၊ ၄င်း url ဖြင့် tag ကိုပြန် reference လုပ်နိုင်သည်။

- Local tagsသည်အသုံးပြုနေသော yaml file အတွင်းနဲ့သာသက်ဆိုင်သည်။ local tag ကို file တွင် သတ်မှတ်အသုံးပြုထားပါက၊ အဆိုပါ tag ကို ပြန် call ရန် URI၏အဆုံးနားတွင် local tag ကို tagged နိုင်သည်။

- Tag များကို data type များသတ်မှတ်ရန်လည်းသုံးသည်။

Set a URI:

URI tage သည် ပုံမှန် configurations file များအတွက် မလိုအပ်ပါ။ သို့သော် yml file အတွင်း data ကိုညွှန်းလိုသည့် အခြေအနေများတွင် URI tags ကိုသုံးနိုင်သည်။

Custom URI Tage ၏ syntax သည် %TAG!prefix ဖြစ်သည်။ Yaml ၏ directive %TAG နောက်တွင် exclamation mark ! ဖြင့် URI tage အတွက် prefix ကိုသတ်မှတ်သည်။ !prefix သည် localtag ကဲသို့အလုပ်လုပ်သည်။ ဤဥပမာတွင် tag:hostsdata:ygn: ကို prefix အတွက် သတ်မှတ်သည်။ URI tag ကို "---" အပေါ်တွင် ရေးပေးရသည်။

%TAG ! tag:hostsdata:ygn:---host: ygn-42datacenter:location: Yangonrack: “13”rack_unit: “3”roles:- webserver- wp_database

Set a local tag:

လက်ရှိ Yaml file တွင် datacenter ၏ location ကို yangon အဖြစ်အသုံးပြုထားသည်။ logcal tag ကိုသတ်မှတ်ရန် Tag ကို Single exclamation point, no space (!) !YGNor !<YGN>စသည်ဖြင့်သတ်မှတ်ပြီး ညွှန်းနိုင်သည်။ ၄င်း localtag ကို URI tag ဖြင့်ခေါ်ယူရန် local tage ကို URI ၏ နောက်ဆုံးမှ ထည့် ပြီး tag:hostsdata:ygn:YGN ဟုခေါ်နိုင်သည်။

%TAG! :tag:hostsdata:ygn:---host: phl-42datacenter:location: !YGN Yagnoncab: “13”cab_unit: “3”roles:- webserver- wp_database

Set data type

Data type ကို ပြောင်းရာတွင်သုံးသည်။ ပြောင်းလိုသော data type ၏ရှေ့တွင် Exclamation points နှစ်ခုကို space မခြားဘဲ၊ ကပ်ကာ(!!) ရေးပေးရသည်။

Cabinet: !!str 13Ab_unit: !!str 2

နိဂုံးချုပ်

နောက်ဆုံးအထိဖတ်ပေးတဲ့အတွက် ကျေးဇူးတင်ပါတယ်။ အ‌ကြောင်းအရာအများစုကို တိုက်ရိုက်ဘာသာပြန်ထားသော်လည်း၊တချို့ကိုသင့်တော်သလိုပြန်ရေးထားပါသည်။ အကျိုးအမြတ်အတွက်မဟုတ်ဘဲ ‌ပညာရေးအတွက်အထောက်အကူဖြစ်စေရန်သာရည်ရွယ်ပါသည်။ အမှားများပါပါက ထောက်ပြပေးဖို့ တောင်းဆိုလိုပါတယ်။

ယခုဖော်ပြထားသော YAML အကြောင်းအရာများသည် YAML ကို စတင်လေ့လာလိုသူများအတွက်အထောက်အကူပြုနိုင်မည်ဟု ယုံကြည်ပါသည်။ သို့သော်လည်း အ‌သေးစိတ်လေ့လာစရာများစွာကျန်ရှိနေပါသည်။ ထပ်မံလေ့လာနိုင်ရန်လည်း yaml.org ၏ စာများနှာတွင် Documents များ၀င်ဖတ်ခြင်း၊ တခြား tutorials site များမှ tutorial များကိုလိုက်လုပ်ခြင်းဖြင့် အသိပညာနှင့် ကျွမ်းကျင်မှုများတိုးတက်ပြီး၊ ရည်မှန်းထားသော အောင်မြင်မှုများကိုရနိုင်ကြပါစေ။

Online Sources:

--

--

suum (RHCE| CC-ISC2| NSE3| AZ-900)

စာရေးသားခြင်းဟာ အသိမြင်ကိုဖလှယ်ခြင်းနဲ့ အတွေးအမြင်ကို ဖွင့်တဲ့တံခါးလို့ခံယူပါတယ်။ စာပေတွေဟာ တူညီတဲ့ခရီးကိုလာမယ့်သူတွေအတွက် ပိုပြီးခရီးတွင်စေမယ်လို့ ယုံကြည်ပါတယ်