10 tilaabo ilaa YAML Zen

Dhammaanteen waan jecelnahay macquul, laakiin macquul waa YAML. Waxaa jira qaabab badan oo loogu talagalay faylasha qaabeynta: liisaska qiyamka, lammaane-qiimaha-qiyamka, faylasha INI, YAML, JSON, XML iyo kuwo kale oo badan. Si kastaba ha ahaatee, dhowr sababood oo dhamaantood ka mid ah, YAML waxaa badanaa loo arkaa inay adag tahay. Gaar ahaan, in kasta oo ay yar-yaraanta soo kicinayso iyo awoodaha cajiibka ah ee la shaqaynta qiyamka kala sareynta, YAML syntax waxay noqon kartaa mid ka cadhaysiisa habka Python-u eg ee soo gelista.

10 tilaabo ilaa YAML Zen

Haddii YAML uu kaa xanaaqo, waad awoodaa - waana inaad! - qaado 10-kan tillaabo ee soo socda si aad u yarayso niyad-jabkaaga heer la aqbali karo oo aad jacayl u qabto YAML. Sida liiskan ku habboon, tobankayaga talo waxaa laga tirin doonaa meel eber ah, waxaanu ku dari doonaa ka fiirsashada iyo dhaqamada ruuxiga ah sida la doono πŸ˜‰

0. Ka dhig tifaftirahaaga inuu shaqeeyo

Dhib malaha tafatiraha qoraalka aad haysato, malaha waxaa jira ugu yaraan hal plugin oo la shaqaynaysa YAML. Haddii aadan mid haysan, raadi oo si degdeg ah u rakib. Wakhtiga lagu qaatay raadinta iyo dejinta waxay kuu soo baxaysaa marar badan mar kasta oo aad wax ka beddesho YAML.

Tusaale ahaan, tifaftire Atom waxay taageertaa YAML si caadi ah, laakiin GNU Emacs waa inaad ku rakibtaa baakado dheeraad ah, tusaale ahaan, yaml-mode.

10 tilaabo ilaa YAML Zen

Emacs ee qaabka YAML iyo muujinta meelaha bannaan.

Haddii tifaftiraha aad jeceshahay uusan lahayn qaabka YAML, markaa qaar ka mid ah dhibaatooyinka waxaa lagu xallin karaa adigoo la shaqeynaya goobaha. Tusaale ahaan, tifaftiraha qoraalka caadiga ah ee GNOME Gedit ma laha qaab YAML ah, laakiin asal ahaan waxay muujineysaa YAML syntax waxayna kuu ogolaaneysaa inaad ku habeyso shaqada is-dhexgalka:

10 tilaabo ilaa YAML Zen

Dejinta indents gudaha Gedit.

plugin meelaha barbaro Gedit, wuxuu u muujiyaa boosaska dhibco ahaan, isaga oo meesha ka saaraya madmadowga leh heerarka galitaanka.

Si kale haddii loo dhigo, waqti ku bixi barashada tafatiraha aad jeceshahay. Soo ogow waxa isaga ama bulshadiisa horumarineed ay ku yaboohayaan la shaqaynta YAML, oo ​​isticmaal sifooyinkaas. Waxaa hubaal ah inaadan ka shallayn doonin.

1. Isticmaal liinta

Sida habboon, luqadaha barnaamijyada iyo luqadaha calaamadaynta waxay isticmaalaan syntax la saadaalin karo. Kumbuyuutarku waxay ku fiican yihiin saadaalinta, taas oo ah sababta fikradda lintera. Haddii 40-kii sano ee jiritaankeeda ay ku dhaaftay oo aadan weli isticmaalin YAML linter, markaa waa waqtigii la isku dayi lahaa yamllint.

Rakib yamllint Waxaad isticmaali kartaa maamulaha xirmada Linux caadiga ah. Tusaale ahaan, in Red Hat Enterprise Linux 8 ama Fedora waxaa loo sameeyaa sidan:

$ sudo dnf install yamllint

Kadib waxaad si fudud u socodsiisaa yamllint, adigoo u gudbinaya faylka YAML si aad u hubiso. Tani waa sida ay u egtahay haddii aad u gudbiso fayl qalad leh linter:

$ yamllint errorprone.yaml
errorprone.yaml
23:10     error    syntax error: mapping values are not allowed here
23:11     error    trailing spaces  (trailing-spaces)

Tirooyinka bidixdu maaha wakhtiga, laakiin isku-duwayaasha khaladka: safka iyo lambarka tiirka. Sharaxaadda khaladku waxba kuma sheegi karto, laakiin si sax ah ayaad u garanaysaa meesha uu ku yaal. Kaliya ka fiirso meeshan koodka, waxayna u badan tahay in wax walbaa ay caddaan doonaan.

Marka yamllint ka helin wax khalad ah faylka, waxba laguma daabaco shaashadda. Haddii aamusnaanta noocaas ahi ay ku cabsi geliso oo aad rabto in yar oo jawaab celin ah, markaa waxaad ku socodsiin kartaa linter-ka amarka echo ee shuruudda leh adoo isticmaalaya ampersand double (&&), sidan oo kale ah:

$ yamllint perfect.yaml && echo "OK"
OK

Gudaha POSIX, ampersand labanlaab ah ayaa dabka ku shida haddii iyo kaliya haddii amarkii hore soo laabto 0. Oo yamllint kaliya waxay soo celisaa tirada khaladaadka la helay, taas oo ah sababta dhismahan shuruudaha oo dhan u shaqeeyo.

2. Ku qor Python, ma aha YAML

Haddii YAML runtii kaa xanaaqo, kaliya ha ku qorin, macno ahaan. Waxay dhacdaa in YAML uu yahay qaabka kaliya ee codsigu fahmo. Laakiin xitaa kiiskan, muhiim maaha in la abuuro faylka YAML. Ku qor waxaad jeceshahay ka dibna beddel. Tusaale ahaan, waxaa jira maktabad weyn oo loogu talagalay Python pyaml iyo laba hab oo beddelasho: is-beddelid iyo beddelaad iyada oo loo marayo qoraallo.

Is-beddelid

Xaaladdan oo kale, faylka xogta sidoo kale waa qoraal Python ah oo soo saara YAML. Habkani wuxuu ku habboon yahay xogta yaryar. Waxaad si fudud ugu qortaa xogta JSON doorsoome Python ah, horudhac u samee dardaaranka soo dejinta, iyo dhamaadka faylka ku dar saddex sadar si aad u hirgeliso wax soo saarka.

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

Hadda waxaan ku socodsiineynaa faylka Python oo waxaan helnaa faylka 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

Tani waa YAML sax ah oo sax ah, laakiin yamllint wuxuu kaaga digayaa inaysan ku bilaaban -. Hagaag, tan si fudud ayaa loo sixi karaa gacanta ama wax yar ayaa lagu beddeli karaa qoraalka Python.

U beddelashada qoraallada

Xaaladdan oo kale, waxaan marka hore ku qornaa JSON, ka dibna u wadnaa beddelaha sidii qoraal Python oo kale ah, kaas oo soo saara YAML sida wax soo saarka. Marka la barbardhigo habkii hore, habkani wuu ka sii miisaamaa, maadaama beddelaaddu ay ka duwan tahay xogta.

Marka hore, aynu abuurno faylka JSON tusaale ahaan.json, tusaale ahaan, waxaad ka qaadan kartaa json.org:

{
	"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"
			}
		  }
		}
	  }
	}

Markaa waxaanu samayn doonaa qoraal beddele fudud oo aan ku kaydin doono magaca json2yaml.py. Qoraalkani waxa uu soo dejiyaa labada qaybood ee YAML iyo JSON Python, oo waxa uu ku shubaa faylka JSON ee isticmaaluhu cayimay, waxa uu sameeyaa beddelka, oo u qoraa xogta faylka soo saarka.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()

Ku keydi qoraalkan jidka nidaamka oo u socodsii sida loogu baahdo:

$ ~/bin/json2yaml.py example.json

3. Wax badan iyo marar badan

Mararka qaarkood waxaa faa'iido leh in dhibka laga eego dhinac kale. Haddii ay dhibaato kaa haysato matalaadda xidhiidhka ka dhexeeya xogtaada gudaha YAML, waxaad si ku meel gaar ah ugu beddeli kartaa wax aad la yaqaan.

Tusaale ahaan, haddii aad ku qanacsan tahay inaad la shaqeyso liisaska qaamuuska ama JSON, waxaad YAML u rogi kartaa JSON oo leh laba amar oo keliya oo ku jira qolofka Python ee is-dhexgalka. Aynu nidhaahno waxaad haysaa faylka YAML mydata.yaml, markaa tani waa sida ay u ekaan doonto:

$ 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.'}

Waxaad ka heli kartaa tusaalooyin kale oo badan oo mawduucan ah. Intaa waxaa dheer, waxaa jira beddelayaal badan oo online ah iyo baarayaasha maxalliga ah oo la heli karo. Markaa ha ka waaban inaad dib u habayn ku samayso xogta markaad aragto wax aan ahayn jumlo aan la fahmi karin.

4. Akhri faahfaahinta

Ku noqoshada YAML nasasho dheer ka dib, waa faa'iido inaad booqato yaml.org oo dib u akhri faahfaahinta Haddii ay kugu adag tahay YAML, laakiin aadan ka helin faahfaahinta, markaa waa waqtigii la hagaajin lahaa xaaladdan. Faahfaahinta si la yaab leh ayey u fududahay in la qoro, iyo shuruudaha syntax-ka waxaa lagu muujiyey tiro badan oo tusaalooyin ah 6.

5. Qaab-dhismeedka beenta ah

Marka aad qorayso buug ama maqaal, waxa had iyo jeer faa'iido leh in marka hore la sawiro dulucda hordhaca ah, ugu yaraan qaab tusmada. Waa la mid YAML. Waxay u badan tahay, inaad haysatid fikrad ah xogta loo baahan yahay in lagu qoro faylka YAML, laakiin dhab ahaantii ma fahmin sida loola xiriiriyo midba midka kale. Sidaa darteed, ka hor intaanad sawirin YAML, sawir qaab-dhismeedka been abuurka ah.

Pseudo-config waxay la mid tahay koodhka beenta ah, halkaas oo aadan ka walwalin qaab dhismeedka ama galitaanka, xiriirka waalidka iyo ilmaha, dhaxalka iyo buulka. Waa isku mid halkan: waxaad sawirtaa soo noqnoqoshada xogta marka ay ka soo baxaan madaxaaga.

10 tilaabo ilaa YAML Zen

Barnaamij-yaqaannada liis-ku-dhigista (Martin iyo Tabitha) iyo xirfadahooda ( luqadaha barnaamijka: Python, Perl, Pascal iyo Lisp, Fortran, Erlang, siday u kala horreeyaan).

Ka dib markaad ku sawirto qaab been abuur ah warqad, si taxadar leh u falanqee oo, haddii wax walba ay hagaagsan yihiin, u qaabee qaab faylka YAML sax ah.

6. Tabs vs. Spaces Dilemma

Waxaad u baahan doontaa inaad xalliso dhibaatada "Tabaha ama meelaha bannaan?". Ma aha dareen caalami ah, laakiin kaliya heerka ururkaaga, ama ugu yaraan mashruuc. Dhib malahan in ka-baahinta ka-dib-u-socodka qoraalka sed-ka ah la isticmaalo, samaynta tifaftirayaasha qoraalka mashiinnada barnaamijyada, ama si caalami ah loo qaato rasiidhada u hoggaansanaanta awaamiirta linter-ka ee hanjabaada cayrinta, laakiin dhammaan xubnaha kooxdaada kuwaas oo mid ka mid ah si ama mid kale oo la xidhiidha YAML waa in ay isticmaalaan meelo bannaan oo keliya (sida loo baahan yahay qeexitaanka YAML).

Tafatire kasta oo qoraalka caadiga ah, waxaad u habayn kartaa tabs si toos ah u saxan tiro boosas ah, markaa fallaagada kuwa raacsan ee muhiimka ah Tab uma baahnid inaad cabsato.

Sida qof kasta oo neceb YAML si fiican u yaqaan, ma arki kartid faraqa u dhexeeya tabs iyo meelaha bannaan ee shaashadda. Marka wax la arki waayo, inta badan waa waxa ugu dambeeya ee dadku ay xasuustaan, ka dib marka ay kala soocaan, hubiyaan oo tirtiraan dhammaan dhibaatooyinka kale ee suurtagalka ah. Saacad ka mid ah wakhtiga lagu qaatay raadinta qalooca tabka ama meelaha bannaan ayaa si fudud u qaylinaya inaad si degdeg ah ugu baahan tahay inaad abuurto siyaasad isticmaalka mid ama mid kale, ka dibna hirgeli hubin la taaban karo oo la xoojiyay si loogu hoggaansamo (tusaale, iyada oo loo marayo jillaab Git ah si uu ugu qasbo linter).

7. In ka yar ayaa ka badan (ama ka badan ayaa ka yar)

Dadka qaarkiis waxay jecel yihiin inay wax ku qoraan YAML sababtoo ah waxay xooga saaraysaa qaabdhismeedka. Isla mar ahaantaana, waxay si firfircoon u isticmaalaan gelinta si ay u muujiyaan blocks of xogta. Tani waa nooc khiyaano ah oo lagu daydo luqadaha calaamadaynta ee isticmaala xad-dhaafyo cad.

Halkan waxaa ah tusaale qaab-dhismeedkan oo kale ah oo ka yimid Dukumeenti macquul ah:

# Employee records
-  martin:
        name: Martin D'vloper
        job: Developer
        skills:
            - python
            - perl
            - pascal
-  tabitha:
        name: Tabitha Bitumen
        job: Developer
        skills:
            - lisp
            - fortran
            - erlang

Qaar ka mid ah, doorashadani waxay ka caawisaa inay xalliyaan qaab dhismeedka YAML ee madaxooda; kuwa kale, liddi ku ah, waxay ka xanaajisaa wax badan oo aan loo baahnayn, ra'yigooda, faleebo.

Laakiin haddii aad tahay mulkiilaha dukumeentiga YAML oo aad mas'uul ka tahay ilaalinta, markaa adiga iyo adiga kaliya waa in uu qeexaa sida loo isticmaalo gelinta. Haddii aad ka cadhaysiiso suufka weyn, u dhig ilaa ugu yar ee suurtogalka ah sida waafaqsan qeexitaanka YAML. Tusaale ahaan, faylka kore ee dukumentiga macquulka ah ayaa dib loo qori karaa sidaan iyadoon wax khasaare ah dhicin:

---
- martin:
   name: Martin D'vloper
   job: Developer
   skills:
   - python
   - perl
   - pascal
- tabitha:
   name: Tabitha Bitumen
   job: Developer
   skills:
   - lisp
   - fortran
   - erlang

8. Isticmaal meelo bannaan

Haddii aad si joogto ah ugu celceliso khaladaad isku mid ah markaad buuxinayso faylka YAML, waxay macno samaynaysaa inaad geliso template si faallo ah. Markaa marka xigta waxaad si fudud u koobi kartaa template-ka oo aad geli kartaa xogta dhabta ah halkaas, tusaale ahaan:

---
# - <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. Isticmaal wax ka duwan

Haddi codsigu aanu kugu haynin, waxa laga yaabaa inay mudan tahay in YAML loo beddelo qaab kale. Waqti ka dib, feylasha qaabeynta ayaa naftooda ka bixi kara ka dibna waxaa fiican in loo beddelo qoraallo fudud Lua ama Python.

YAML waa shay aad u wanaagsan oo dad badani ay jecel yihiin yaraantiisa iyo fududaanteeda, laakiin way ka fog tahay qalabka kaliya ee ku jira arsenalkaaga. Markaa mararka qaarkood waad diidi kartaa. Baarista maktabadaha way fududahay in loo helo YAML, marka haddii aad bixiso doorashooyin socdaal oo sahlan, isticmaalayaashaadu waxay si xanuun la'aan uga badbaadi doonaan guuldarradan.

Haddii aadan samayn karin YAML la'aanteed, ka dib qaado 10kan talooyin oo ka gudub nacaybkaaga YAML hal mar iyo dhammaan!

Source: www.habr.com

Add a comment