අපි හැමෝම Ansible වලට ආදරෙයි, නමුත් Ansible කියන්නේ YAML. වින්යාස ගොනු සඳහා බොහෝ ආකෘති ඇත: අගයන් ලැයිස්තුව, පරාමිති-අගය යුගල, INI ගොනු, YAML, JSON, XML සහ තවත් බොහෝ දේ. කෙසේ වෙතත්, ඒ සියල්ලෙන් හේතු කිහිපයක් නිසා, YAML බොහෝ විට විශේෂයෙන් දුෂ්කර ලෙස සැලකේ. විශේෂයෙන්, එහි ප්රබෝධමත් අවමවාදය සහ ධූරාවලි අගයන් සමඟ වැඩ කිරීමේ ආකර්ෂණීය හැකියාවන් තිබියදීත්, YAML වාක්ය ඛණ්ඩය එහි පයිතන් වැනි ඉන්ඩෙන්ටේෂන් ප්රවේශය සමඟ කරදරකාරී විය හැකිය.
YAML ඔබව කෝපයට පත් කරන්නේ නම්, ඔබට පුළුවන් - සහ ඔබට කළ යුතුයි! - ඔබේ කලකිරීම පිළිගත හැකි මට්ටමකට අඩු කර ගැනීමට සහ YAML සමඟ ආදරයෙන් බැඳීමට පහත පියවර 10 ගන්න. මෙම ලැයිස්තුවට ගැලපෙන පරිදි, අපගේ ඉඟි දහය මුල සිටම අංකනය කරනු ලැබේ, අපි කැමැත්තෙන් භාවනාව සහ අධ්යාත්මික පුරුදු එකතු කරන්නෙමු 😉
0. ඔබේ සංස්කාරකය වැඩ කරන්න
ඔබට කුමන පෙළ සංස්කාරකයක් තිබේද යන්න ගැටළුවක් නොවේ, YAML සමඟ වැඩ කිරීම සඳහා අවම වශයෙන් එක් ප්ලගිනයක්වත් තිබේ. ඔබට එකක් නොමැති නම්, එය වහාම සොයාගෙන ස්ථාපනය කරන්න. ඔබට YAML සංස්කරණය කිරීමට සිදුවන සෑම අවස්ථාවකදීම සෙවීමට සහ සැකසීමට ගත කළ කාලය බොහෝ වාරයක් ගෙවනු ඇත.
උදාහරණයක් ලෙස, සංස්කාරක
YAML මාදිලියේ Emacs සහ අවකාශයන් පෙන්වයි.
ඔබගේ ප්රියතම සංස්කාරකයට YAML මාදිලියක් නොමැති නම්, සැකසුම් සමඟ වැඩ කිරීමෙන් සමහර ගැටළු විසඳා ගත හැකිය. උදාහරණයක් ලෙස, සම්මත GNOME පෙළ සංස්කාරකය Gedit හි YAML මාදිලියක් නොමැත, නමුත් පෙරනිමියෙන් එය YAML වාක්ය ඛණ්ඩය උද්දීපනය කරන අතර ඔබට ඉන්ඩෙන්ටේෂන් සමඟ වැඩ වින්යාස කිරීමට ඉඩ දෙයි:
Gedit හි ඉන්ඩෙන්ට් සැකසීම.
ප්ලගිනයක්
වෙනත් වචන වලින් කිවහොත්, ඔබේ ප්රියතම සංස්කාරකය ගැන ඉගෙන ගැනීමට කාලය ගත කරන්න. YAML සමඟ වැඩ කිරීම සඳහා ඔහුට හෝ ඔහුගේ සංවර්ධන ප්රජාවට ලබා දිය යුතු දේ සොයා බලා එම විශේෂාංග භාවිත කරන්න. ඔබ අනිවාර්යයෙන්ම ඒ ගැන පසුතැවෙන්නේ නැත.
1. ලින්ටරයක් භාවිතා කරන්න
ඉතා මැනවින්, ක්රමලේඛන භාෂා සහ සලකුණු භාෂා පුරෝකථනය කළ හැකි සින්ටැක්ස් භාවිතා කරයි. පරිගනක පුරෝකථනය කිරීමේ හැකියාවෙන් දක්ෂයි, ඒ නිසයි සංකල්පය
ස්ථාපනය කරන්න
$ sudo dnf install yamllint
එවිට ඔබ yamllint ධාවනය කරන්න, එය පරීක්ෂා කිරීමට YAML ගොනුව පසුකර යන්න. ඔබ දෝෂයක් සහිත ගොනුවක් ලින්ටරයට යොමු කළහොත් පෙනෙන්නේ මෙයයි:
$ yamllint errorprone.yaml
errorprone.yaml
23:10 error syntax error: mapping values are not allowed here
23:11 error trailing spaces (trailing-spaces)
වම් පස ඇති අංක කාලය නොවේ, නමුත් දෝෂයේ ඛණ්ඩාංක: පේළිය සහ තීරු අංකය. දෝෂයේ විස්තරය ඔබට කිසිවක් නොකියනු ඇත, නමුත් එය කොතැනදැයි ඔබ හරියටම දනී. කේතයේ මෙම ස්ථානය දෙස බලන්න, බොහෝ විට සියල්ල පැහැදිලි වනු ඇත.
yamllint ගොනුවක දෝෂයක් සොයා නොගත් විට, තිරයට කිසිවක් මුද්රණය නොවේ. එවැනි නිශ්ශබ්දතාවයක් ඔබව බිය ගන්වන්නේ නම් සහ ඔබට තව ටිකක් ප්රතිපෝෂණ අවශ්ය නම්, ඔබට කොන්දේසි සහිත echo විධානය සමඟ ද්විත්ව ඇම්පර්සන්ඩ් (&&) හරහා ලින්ටරය ධාවනය කළ හැකිය:
$ yamllint perfect.yaml && echo "OK"
OK
POSIX හි, ද්විත්ව ඇම්පර්සන්ඩ් ගිනිබත් වන්නේ පෙර විධානය 0 ලබා දෙන්නේ නම් සහ පමණි. තවද yamllint විසින් සොයාගත් දෝෂ ගණන පමණක් ලබා දෙයි, මෙම සම්පූර්ණ කොන්දේසි සහිත ගොඩනැගීම ක්රියාත්මක වන්නේ එබැවිනි.
2. YAML නොව Python වලින් ලියන්න
YAML ඇත්තටම ඔබව අමනාප කරන්නේ නම්, වචනාර්ථයෙන් එහි ලියන්න එපා. යෙදුම තේරුම් ගන්නා එකම ආකෘතිය YAML බව සිදු වේ. නමුත් මෙම අවස්ථාවේදී පවා, YAML ගොනුවක් සෑදීම අවශ්ය නොවේ. ඔබ කැමති දේ ලියා ඉන්පසු පරිවර්තනය කරන්න. උදාහරණයක් ලෙස, Python සඳහා විශාල පුස්තකාලයක් ඇත
ස්වයං පරිවර්තනය
මෙම අවස්ථාවෙහිදී, දත්ත ගොනුව YAML ජනනය කරන පයිතන් ස්ක්රිප්ට් එකකි. මෙම ක්රමය කුඩා දත්ත කට්ටල සඳහා වඩාත් සුදුසු වේ. ඔබ හුදෙක් JSON දත්ත පයිතන් විචල්යයකට ලියා, ආනයන විධානයක් සමඟ පෙරවදනක් යොදන්න, සහ ගොනුව අවසානයේ ප්රතිදානය ක්රියාත්මක කිරීමට පේළි තුනක් එක් කරන්න.
#!/usr/bin/python3
import yaml
d={
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
f=open('output.yaml','w')
f.write(yaml.dump(d))
f.close
දැන් අපි මෙම ගොනුව Python හි ධාවනය කර output.yaml ගොනුව ලබා ගනිමු:
$ python3 ./example.json
$ cat output.yaml
glossary:
GlossDiv:
GlossList:
GlossEntry:
Abbrev: ISO 8879:1986
Acronym: SGML
GlossDef:
GlossSeeAlso: [GML, XML]
para: A meta-markup language, used to create markup languages such as DocBook.
GlossSee: markup
GlossTerm: Standard Generalized Markup Language
ID: SGML
SortAs: SGML
title: S
title: example glossary
මෙය සම්පූර්ණයෙන්ම වලංගු YAML වේ, නමුත් yamllint ඔබට එය ආරම්භ නොකරන බවට අනතුරු අඟවයි -. හොඳයි, මෙය පහසුවෙන් අතින් නිවැරදි කිරීමට හෝ පයිතන් ස්ක්රිප්ටයේ සුළු වශයෙන් වෙනස් කිරීමට හැකිය.
ස්ක්රිප්ට් හරහා පරිවර්තනය
මෙම අවස්ථාවේදී, අපි මුලින්ම JSON හි ලියන්නෙමු, පසුව පරිවර්තකය වෙනම Python ස්ක්රිප්ට් එකක් ලෙස ක්රියාත්මක කරන්නෙමු, එය YAML ප්රතිදානය ලෙස නිපදවයි. පෙර ක්රමය හා සසඳන විට, මෙම ක්රමය වඩා හොඳින් පරිවර්ථනය වේ, මන්ද පරිවර්තනය දත්ත වලින් වෙන්ව පවතී.
පළමුව, අපි JSON ගොනුව example.json නිර්මාණය කරමු, උදාහරණයක් ලෙස, ඔබට එය ලබාගත හැකිය
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
එවිට අපි සරල පරිවර්තක ස්ක්රිප්ට් එකක් සාදා එය json2yaml.py නමින් සුරකිමු. මෙම ස්ක්රිප්ට් YAML සහ JSON Python මොඩියුල දෙකම ආයාත කරයි, සහ පරිශීලක-නිශ්චිත JSON ගොනුවක් පූරණය කරයි, පරිවර්තනය සිදු කරයි, සහ output.yaml ගොනුවට දත්ත ලියයි.
#!/usr/bin/python3
import yaml
import sys
import json
OUT=open('output.yaml','w')
IN=open(sys.argv[1], 'r')
JSON = json.load(IN)
IN.close()
yaml.dump(JSON, OUT)
OUT.close()
මෙම ස්ක්රිප්ට් එක පද්ධති පථයේ සුරකින්න සහ අවශ්ය පරිදි ක්රියාත්මක කරන්න:
$ ~/bin/json2yaml.py example.json
3. ගොඩක් සහ නිතර විග්රහ කරන්න
සමහර විට ගැටලුවක් වෙනත් කෝණයකින් බැලීම ප්රයෝජනවත් වේ. YAML හි ඔබගේ දත්ත අතර සම්බන්ධතා නියෝජනය කිරීමේ ගැටලුවක් ඔබට තිබේ නම්, ඔබට එය තාවකාලිකව වඩාත් හුරුපුරුදු දෙයක් බවට පරිවර්තනය කළ හැක.
උදාහරණයක් ලෙස, ඔබට ශබ්ද කෝෂ ලැයිස්තු හෝ JSON සමඟ වැඩ කිරීමට පහසු නම්, අන්තර්ක්රියාකාරී පයිතන් කවචයේ ඇති විධාන දෙකකින් ඔබට YAML JSON බවට පරිවර්තනය කළ හැකිය. ඔබ සතුව YAML ගොනුවක් mydata.yaml ඇතැයි කියමු, එවිට එය පෙනෙන්නේ මෙයයි:
$ python3
>>> f=open('mydata.yaml','r')
>>> yaml.load(f)
{'document': 34843, 'date': datetime.date(2019, 5, 23), 'bill-to': {'given': 'Seth', 'family': 'Kenlon', 'address': {'street': '51b Mornington Roadn', 'city': 'Brooklyn', 'state': 'Wellington', 'postal': 6021, 'country': 'NZ'}}, 'words': 938, 'comments': 'Good article. Could be better.'}
මෙම මාතෘකාව පිළිබඳ තවත් බොහෝ උදාහරණ ඔබට සොයාගත හැකිය. මීට අමතරව, බොහෝ මාර්ගගත පරිවර්තක සහ දේශීය විග්රහ කරන්නන් තිබේ. ඒ නිසා ඔබ එහි නොතේරෙන අවුල් ජාලාවක් පමණක් දකින විට දත්ත නැවත ආකෘතිකරණය කිරීමට පසුබට නොවන්න.
4. පිරිවිතර කියවන්න
දිගු විවේකයකින් පසු YAML වෙත නැවත පැමිණීම, සංචාරය කිරීම ප්රයෝජනවත් වේ
5. ව්යාජ සැකසුම්
පොතක් හෝ ලිපියක් ලිවීමේදී, අවම වශයෙන් පටුනක ආකාරයෙන් හෝ මුලික දළ සටහනක් සටහන් කිරීම සැමවිටම ප්රයෝජනවත් වේ. YAML එකත් එහෙමයි. බොහෝ දුරට, YAML ගොනුවකට ලිවිය යුතු දත්ත මොනවාද යන්න පිළිබඳව ඔබට අදහසක් ඇත, නමුත් එය එකිනෙකා සමඟ සම්බන්ධ කරන්නේ කෙසේදැයි ඔබට සැබවින්ම තේරෙන්නේ නැත. එබැවින්, YAML මූර්ති කිරීමට පෙර, ව්යාජ වින්යාසයක් අඳින්න.
ව්යාජ වින්යාසය ව්යාජ කේතයට සමාන වේ, එහිදී ඔබට ව්යුහය හෝ ඉන්ඩෙන්ටේෂන්, මාපිය-ළමා සබඳතා, උරුමය සහ කැදැල්ල ගැන කරදර විය යුතු නැත. මෙහි ද එයම වේ: ඔබ දත්ත ඔබේ හිසෙහි පැන නගින විට ඒවා පුනරාවර්තනය කරයි.
ව්යාජ-වින්යාස ලැයිස්තුගත කිරීමේ ක්රමලේඛකයින් (මාටින් සහ තබිතා) සහ ඔවුන්ගේ කුසලතා (ක්රමලේඛන භාෂා: පයිතන්, පර්ල්, පැස්කල් සහ ලිස්ප්, ෆෝට්රාන්, එර්ලන්ග්, පිළිවෙලින්).
කඩදාසි කැබැල්ලක ව්යාජ වින්යාසයක් ඇඳීමෙන් පසු, එය හොඳින් විශ්ලේෂණය කර, සියල්ල පිළිවෙලට තිබේ නම්, එය වලංගු YAML ගොනුවක් ආකාරයෙන් සංයුති කරන්න.
6. The Tabs එදිරිව Spaces Dilemma
ඔබට උභතෝකෝටිකය විසඳා ගැනීමට සිදුවනු ඇත
ඕනෑම සාමාන්ය පෙළ සංස්කාරකයක, ඔබට ස්වයංක්රීයව නිවැරදි ටැබ් නියම කළ හිස් සංඛ්යාවකට වින්යාසගත කළ හැක, එබැවින් ප්රධාන අනුගාමිකයින්ගේ කැරැල්ල ටැබ් ඔබ බිය විය යුතු නැත.
සෑම YAML වෛරකරුවෙකුම හොඳින් දන්නා පරිදි, ඔබට තිරය මත ටැබ් සහ හිස්තැන් අතර වෙනස දැකිය නොහැක. තවද යමක් නොපෙනෙන විට, සාමාන්යයෙන් මිනිසුන්ට මතක තබා ගත හැකි අවසාන දෙය එයයි, ඔවුන් විසඳා, පරීක්ෂා කර, අනෙකුත් ඇතිවිය හැකි ගැටළු සියල්ල ඉවත් කළ පසු. වගු වක්රයක් හෝ අවකාශ සමූහයක් සෙවීමට ගත කළ පැයක කාලයක් සරලව කෑගසන්නේ ඔබට එකක් හෝ වෙනත් එකක් භාවිතා කිරීම සඳහා ප්රතිපත්තියක් ඉක්මනින් නිර්මාණය කළ යුතු බවත්, පසුව එයට අනුකූල වීම සඳහා ශක්තිමත් කරන ලද කොන්ක්රීට් චෙක්පතක් ක්රියාත්මක කළ යුතු බවත්ය (උදාහරණයක් ලෙස, හරහා ලින්ටරයක් හරහා එය බල කිරීමට Git කොක්කක්).
7. අඩු වැඩි (හෝ වැඩි නම් අඩු)
සමහර අය YAML හි ලිවීමට කැමති වන්නේ එය ව්යුහය අවධාරණය කරන බැවිනි. ඒ අතරම, ඔවුන් දත්ත කුට්ටි ඉස්මතු කිරීමට සක්රියව ඉන්ඩෙන්ටේෂන් භාවිතා කරයි. මෙය පැහැදිලි පරිසීමක භාවිතා කරන සලකුණු භාෂා අනුකරණය කිරීම සඳහා කරන වංචාවකි.
මෙන්න එවැනි ව්යුහයක උදාහරණයක්
# Employee records
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
සමහරුන්ට, මෙම විකල්පය ඔවුන්ගේ හිසෙහි ඇති YAML ව්යුහය නිරාකරණය කිරීමට උපකාරී වේ; අනෙක් අයට, ඊට පටහැනිව, එය ඔවුන්ගේ මතය අනුව, අනවශ්ය, ඉන්ඩෙන්ට් වලින් ඔවුන්ව කුපිත කරයි.
නමුත් ඔබ YAML ලේඛනයේ හිමිකරු නම් සහ එය නඩත්තු කිරීමේ වගකීම දරන්නේ නම්, එසේ නම් ඔබ සහ ඔබ පමණි ඉන්ඩෙන්ටේෂන් භාවිතා කරන ආකාරය නිර්වචනය කළ යුතුය. විශාල පිරවුමකින් ඔබට කරදරයක් නම්, YAML පිරිවිතරයට අනුව එය හැකිතාක් අවම කර ගන්න. උදාහරණයක් ලෙස, Ansible ලේඛනයෙන් ඉහත ගොනුව කිසිදු අලාභයකින් තොරව නැවත ලිවිය හැකිය:
---
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
8. හිස් තැන් භාවිතා කරන්න
YAML ගොනුවක් පුරවන විට ඔබ නිරන්තරයෙන් එකම වැරදි පුනරුච්චාරණය කරන්නේ නම්, අදහස් දැක්වීමක් ලෙස අච්චුවක් එයට ඇතුල් කිරීම අර්ථවත් කරයි. ඊළඟ වතාවේ ඔබට මෙම අච්චුව පිටපත් කර එහි සැබෑ දත්ත ඇතුළත් කළ හැකිය, උදාහරණයක් ලෙස:
---
# - <common name>:
# name: Given Surname
# job: JOB
# skills:
# - LANG
- martin:
name: Martin D'vloper
job: Developer
skills:
- python
- perl
- pascal
- tabitha:
name: Tabitha Bitumen
job: Developer
skills:
- lisp
- fortran
- erlang
9. වෙනස් දෙයක් භාවිතා කරන්න
යෙදුමට ඔබ මත සිරවීමක් නොමැති නම්, YAML වෙනත් ආකෘතියකට වෙනස් කිරීම වටී. කාලයාගේ ඇවෑමෙන්, වින්යාස ගොනු තමන්ම අභිබවා යා හැකි අතර පසුව ඒවා Lua හෝ Python හි සරල ස්ක්රිප්ට් බවට පරිවර්තනය කිරීම වඩා හොඳය.
YAML යනු එහි අවමත්වය සහ සරල බව සඳහා බොහෝ අය ප්රිය කරන විශිෂ්ට දෙයකි, නමුත් එය ඔබේ අවි ගබඩාවේ ඇති එකම මෙවලමට වඩා බොහෝ සෙයින් වෙනස් ය. එබැවින් සමහර විට ඔබට එය ප්රතික්ෂේප කළ හැකිය. විග්රහ කිරීමේ පුස්තකාල YAML සඳහා සොයා ගැනීම පහසුය, එබැවින් ඔබ පහසු සංක්රමණ විකල්ප ලබා දෙන්නේ නම්, ඔබේ පරිශීලකයින් මෙම අසාර්ථකත්වය සාපේක්ෂව වේදනා රහිතව බේරෙනු ඇත.
ඔබට YAML නොමැතිව කළ නොහැකි නම්, මෙම ඉඟි 10 ගෙන YAML සඳහා ඔබේ අකමැත්ත එක් වරක් සහ සියල්ලටම ජය ගන්න!
මූලාශ්රය: www.habr.com