Nzọụkwụ 10 gaa YAML Zen

Anyị niile hụrụ Asible n'anya, mana ihe nwere ike ime bụ YAML. Enwere ọtụtụ usoro maka faịlụ nhazi: ndepụta nke ụkpụrụ, paramita-uru ụzọ abụọ, faịlụ INI, YAML, JSON, XML na ọtụtụ ndị ọzọ. Agbanyeghị, n'ihi ọtụtụ ihe n'ime ha niile, a na-ele YAML anya dị ka ihe siri ike. Karịsịa, n'agbanyeghị minimalism na-enye ume ọhụrụ na ikike dị egwu maka ịrụ ọrụ na ụkpụrụ nhazi, usoro YAML nwere ike iwe iwe na ụzọ Python dị ka ntinye.

Nzọụkwụ 10 gaa YAML Zen

Ọ bụrụ na YAML kpasuru gị iwe, ị nwere ike - ma ị kwesịrị! - Mee usoro iri ndị a iji belata nkụda mmụọ gị gaa n'ọkwa a na-anakwere wee hụ YAML n'anya. Dị ka dabara na ndepụta a, a ga-agụta ndụmọdụ iri anyị site na ọkọ, anyị ga-agbakwunye ntụgharị uche na omume ime mmụọ na ọchịchọ 😉

0. Mee ka onye nchịkọta akụkọ gị rụọ ọrụ

Ọ baghị uru ihe editọ ederede ị nwere, enwere ike ọ dịkarịa ala otu ngwa mgbakwunye maka ịrụ ọrụ na YAML. Ọ bụrụ na ịnweghị otu, chọta ma wụnye ya ozugbo. Oge a na-eji nyocha na nhazi ga-akwụ ụgwọ ọtụtụ oge oge ọ bụla ị ga-edezi YAML.

Dịka ọmụmaatụ, onye nchịkọta akụkọ Atọm na-akwado YAML na ndabara, mana maka GNU Emacs ị ga-etinyerịrị ngwugwu ndị ọzọ, dịka ọmụmaatụ, yaml-mode.

Nzọụkwụ 10 gaa YAML Zen

Emacs na ọnọdụ YAML na ngosipụta oghere.

Ọ bụrụ na onye nchịkọta akụkọ ọkacha mmasị gị enweghị ọnọdụ YAML, mgbe ahụ enwere ike idozi ụfọdụ nsogbu site na iji ntọala arụ ọrụ. Dịka ọmụmaatụ, onye nchịkọta ederede GNOME ọkọlọtọ Gedit enweghị ọnọdụ YAML, mana na ndabara ọ na-egosipụta syntax YAML ma na-enye gị ohere ịhazi ọrụ na ntinye aka:

Nzọụkwụ 10 gaa YAML Zen

Ịtọba indents na Gedit.

Ngwa mgbakwunye drawspaces maka Gedit, na-egosiputa oghere dị ka ntụpọ, na-ewepụ ọgbaghara na ọkwa ntinye.

N'ikwu ya n'ụzọ ọzọ, wepụta oge mụta maka onye nchịkọta akụkọ ọkacha mmasị gị. Chọpụta ihe ya ma ọ bụ obodo mmepe ya ga-enye maka ịrụ ọrụ na YAML, wee jiri atụmatụ ndị ahụ. Ị gaghị akwa ụta na ya.

1. Jiri linter

Dị ka o kwesịrị, asụsụ mmemme na asụsụ akara akara na-eji syntax a ga-ebu amụma. Kọmputa dị mma na amụma amụma, ya mere echiche nke lintera. Ọ bụrụ na n'ime afọ 40 nke ịdị adị ya, ọ gafere gị ma ị ka na-ejighị YAML linter, mgbe ahụ ọ bụ oge ịnwale yamllint.

Wụnye yamllint Ị nwere ike iji njikwa ngwugwu Linux ọkọlọtọ. Dịka ọmụmaatụ, na Uhie okpu Enterprise Linux 8 ma ọ bụ Fedora ọ mere dị ka nke a:

$ sudo dnf install yamllint

Mgbe ahụ ị na-agba yamllint, na-ebufe ya faịlụ YAML ka ịlele. Nke a bụ otu ọ dị ma ọ bụrụ na ịnyefe faịlụ nwere mperi na linter:

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

Ọnụọgụ dị n'aka ekpe abụghị oge, mana nhazi nke njehie: ahịrị na nọmba kọlụm. Nkọwa nke njehie ahụ nwere ike ọ gaghị agwa gị ihe ọ bụla, mana ị maara kpọmkwem ebe ọ dị. Naanị lelee ebe a na koodu ahụ, ma eleghị anya ihe niile ga-edo anya.

Mgbe yamllint ahụghị mperi na faịlụ, ọ nweghị ihe a na-ebipụta na ihuenyo. Ọ bụrụ na ịgbachi nkịtị na-atụ gị ụjọ ma ịchọrọ nzaghachi ntakịrị, mgbe ahụ ị nwere ike iji iwu echo na-agba ọsọ site na ampersand abụọ (&&), dị ka nke a:

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

Na POSIX, ampersand okpukpu abụọ na-agba ọkụ ma ọ bụrụ na naanị ma ọ bụrụ na iwu nke bu ụzọ laghachi 0. Yamllint na-eweghachite ọnụ ọgụgụ nke njehie achọtara, nke mere na ọrụ a dum na-arụ ọrụ.

2. Dee na Python, ọ bụghị YAML

Ọ bụrụ na YAML na-akpasu gị iwe, naanị edela ya na ya, n'ụzọ nkịtị. Ọ na-eme na YAML bụ naanị usoro ngwa ahụ ghọtara. Mana ọbụlagodi na nke a, ọ dịghị mkpa ịmepụta faịlụ YAML. Dee ihe masịrị gị wee tụgharịa. Dịka ọmụmaatụ, enwere nnukwu ọba akwụkwọ maka Python pyaml na ụzọ ntụgharị abụọ: ntụgharị onwe na ntụgharị site na edemede.

Ntughari onwe onye

N'okwu a, faịlụ data bụkwa edemede Python na-emepụta YAML. Usoro a kachasị mma maka obere data data. Naanị dee data JSON n'ime Python variable, bute ya na ntuziaka mbubata, na njedebe nke faịlụ tinye ahịrị atọ iji mejuputa mmepụta.

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

Ugbu a, anyị na-agba ọsọ faịlụ a na Python wee nweta faịlụ mmepụta.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

Nke a ziri ezi YAML, mana yamllint ga-adọ gị aka na ntị na ọ naghị ebido na -. Ọfọn, enwere ike iji aka dozie nke a ngwa ngwa ma ọ bụ gbanwee ntakịrị na edemede Python.

Ntughari site na edemede

N'okwu a, anyị na-ebu ụzọ dee na JSON, wee mee ihe ntụgharị dị ka edemede Python dị iche, nke na-emepụta YAML dị ka mmepụta. E jiri ya tụnyere usoro gara aga, usoro a na-akawanye mma, ebe ọ bụ na ntụgharị dị iche na data.

Mbụ, ka anyị mepụta faịlụ JSON example.json, dịka ọmụmaatụ, ị nwere ike wepụta ya 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"
			}
		  }
		}
	  }
	}

Mgbe ahụ, anyị ga-emepụta edemede ntụgharị dị mfe ma chekwaa ya n'okpuru aha json2yaml.py. Edemede a na-ebubata ma YAML na JSON Python modul, ma na-ebunye faịlụ JSON akọwapụtara nke onye ọrụ, na-eme mgbanwe ahụ, ma dee data na faịlụ mmepụta.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()

Chekwaa edemede a na usoro usoro ma mee ya dị ka achọrọ:

$ ~/bin/json2yaml.py example.json

3. Na-akpachapụ anya ọtụtụ mgbe

Mgbe ụfọdụ, ọ bara uru ile nsogbu anya site n'akụkụ dị iche. Ọ bụrụ na ị na-enwe nsogbu ịnọchite anya mmekọrịta dị n'etiti data gị na YAML, ị nwere ike gbanwee ya nwa oge ka ọ bụrụ ihe amara nke ọma.

Dịka ọmụmaatụ, ọ bụrụ na ọ dị gị mma na-arụ ọrụ na ndepụta ọkọwa okwu ma ọ bụ JSON, ị nwere ike ịtụgharị YAML ka ọ bụrụ JSON naanị site na iwu abụọ na shei Python mmekọrịta. Ka anyị kwuo na ị nwere faịlụ YAML mydata.yaml, yabụ nke a bụ ihe ọ ga-adị ka:

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

Ị nwere ike ịchọta ọtụtụ ihe atụ ndị ọzọ na isiokwu a. Na mgbakwunye, enwere ọtụtụ ndị ntụgharị n'ịntanetị na ndị ntụgharị mpaghara dị. Ya mere, egbula oge ịmegharị data ahụ mgbe ị na-ahụ naanị jumble na-enweghị nghọta na ya.

4. Gụọ nkọwa

Ịlaghachi na YAML mgbe ogologo ezumike gasịrị, ọ bara uru ịga leta yaml.org ma gụgharịa nkọwapụta (ụdịdị). Ọ bụrụ na ị nwere nsogbu na YAML, mana ị nwetabeghị nkọwapụta, mgbe ahụ ọ bụ oge iji dozie ọnọdụ a. Ụdịdị nkọwapụta ahụ dị nnọọ mfe ịde ihe n'ụzọ dị ịtụnanya, a na-egosipụtakwa ihe ndị chọrọ syntax na ọtụtụ ihe atụ na Isi nke 6.

5. Pseudo-configs

Mgbe ị na-ede akwụkwọ ma ọ bụ akụkọ, ọ na-aba uru mgbe niile ka ibu ụzọ chepụta ndepụta mbido, ọbụlagodi n'ụdị tebụl ọdịnaya. Otú ahụ ka ọ dịkwa YAML. O yikarịrị, ị nwere echiche nke ihe data kwesịrị ka edee n'ime faịlụ YAML, mana ị ghọtaghị otu esi ejikọta ya na ibe gị. Ya mere, tupu ịkpụ ya YAML, see pseudo-config.

Pseudo-config yiri pseudo-code, ebe ị na-agaghị echegbu onwe gị maka nhazi ma ọ bụ ntinye, mmekọrịta nne na nna na ụmụaka, ihe nketa na akwụ. Ọ bụ otu ihe ahụ ebe a: ị na-esetịpụ data ka ha na-ebili n'isi gị.

Nzọụkwụ 10 gaa YAML Zen

Pseudo-config ndepụta mmemme (Martin na Tabitha) na nkà ha (asụsụ mmemme: Python, Perl, Pascal na Lisp, Fortran, Erlang, n'otu n'otu).

Mgbe sere pseudo-config na mpempe akwụkwọ, nyochaa ya nke ọma ma, ọ bụrụ na ihe niile dị n'usoro, hazie ya n'ụdị faịlụ YAML dị mma.

6. The Taabụ vs. oghere nsogbu

Ị ga-edozi nsogbu ahụ "taabụ ma ọ bụ oghere?". Ọ bụghị n'echiche zuru ụwa ọnụ, mana naanị na ọkwa nke nzukọ gị, ma ọ bụ opekata mpe ọrụ. Ọ baghị uru ma nke a gụnyere iji post-processing na sed script, ịtọlite ​​​​ndị editọ ederede na igwe mmemme, ma ọ bụ na-anata nnata zuru ụwa ọnụ nke nrube isi na ntuziaka linter n'okpuru iyi egwu ịchụpụ, mana ndị otu gị niile nọ na ya. Otu ụzọ ma ọ bụ ọzọ metụtara YAML ga-eji naanị oghere (dị ka nkọwa YAML chọrọ).

N'ime ndezi ederede ọ bụla, ị nwere ike hazie taabụ na-edozi onwe ya ka ọ bụrụ ọnụ ọgụgụ oghere akọwapụtara, yabụ nnupụisi nke ndị na-akwado isi. Tab ị gaghị atụ egwu.

Dị ka onye ọ bụla na-akpọ YAML si mara nke ọma, ị nweghị ike ịhụ ọdịiche dị n'etiti taabụ na oghere na ihuenyo. Ma mgbe ihe na-adịghị ahụ anya, ọ na-abụkarị ihe ikpeazụ ndị mmadụ na-echeta, mgbe ha edozichara, nyochaa ma kpochapụ nsogbu ndị ọzọ niile. Otu awa nke oge ejiri na-achọ usoro ntụgharị ma ọ bụ ngọngọ nke oghere na-eti mkpu na ị chọrọ ngwa ngwa ịmepụta amụma maka iji otu ma ọ bụ nke ọzọ, wee mejuputa nlele nyocha siri ike maka nnabata ya (dịka ọmụmaatụ, site na site na iji ya). nko Git ịmanye ya site na linter).

7. Obere obere (ma ọ bụ karịa bụ obere)

Ụfọdụ ndị mmadụ na-enwe mmasị ide na YAML n'ihi na ọ na-emesi nhazi ike. N'otu oge ahụ, ha na-arụsi ọrụ ike na-eji indentation pụta ìhè blocks nke data. Nke a bụ ụdị ojoro iji ṅomie asụsụ akara akara nke na-eji ihe nhụsianya doro anya.

Nke a bụ ihe atụ nke usoro dị otú ahụ si Akwụkwọ nwere ike ime:

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

Maka ụfọdụ, nhọrọ a na-enyere ha aka ịhazi usoro YAML n'isi ha; maka ndị ọzọ, kama nke ahụ, ọ na-akpasu ha iwe na ọtụtụ ihe na-adịghị mkpa, n'echiche ha, indents.

Mana ọ bụrụ na ị bụ onye nwe akwụkwọ YAML ma bụrụkwa ọrụ idobe ya, yabụ gị na naanị gị ga-akọwapụta otu esi eji indentation. Ọ bụrụ na nnukwu padding na-ewe gị iwe, debe ya ka ọ dịkarịa ala enwere ike dịka nkọwapụta YAML siri dị. Dịka ọmụmaatụ, faịlụ dị n'elu sitere na akwụkwọ nwere ike ịdegharị nwere ike idegharị dị ka nke a na-enweghị mfu ọ bụla:

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

8. Jiri oghere

Ọ bụrụ na ị na-emeghachi otu mmejọ mgbe niile mgbe ị na-ejuputa faịlụ YAML, ọ bụ ihe ezi uche dị na ya itinye ndebiri n'ime ya dị ka nkwupụta. Mgbe ọzọ ị nwere ike idetuo ndebiri a wee tinye ezigbo data ebe ahụ, dịka ọmụmaatụ:

---
# - <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. Jiri ihe dị iche

Ọ bụrụ na ngwa ahụ enweghị ihe mgbochi na gị, mgbe ahụ ọ ga-aba uru ịgbanwe YAML ka ọ bụrụ usoro dị iche. Ka oge na-aga, faịlụ nhazi nwere ike ịpụta onwe ha ma mgbe ahụ ọ ka mma ịtụgharị ha ka ọ bụrụ ederede dị mfe na Lua ma ọ bụ Python.

YAML bụ nnukwu ihe na ọtụtụ ndị mmadụ hụrụ n'anya maka minimalism na ịdị mfe ya, mana ọ dị anya na naanị ngwá ọrụ dị na ngwa agha gị. Ya mere, mgbe ụfọdụ ị nwere ike ịjụ ya. Ịchọta ọba akwụkwọ dị mfe maka YAML, yabụ ọ bụrụ na ị na-enye nhọrọ mbugharị dị mfe, ndị ọrụ gị ga-alanarị ọdịda a n'enweghị mgbu.

Ọ bụrụ na ịnweghị ike ịme ya na-enweghị YAML, were ndụmọdụ 10 ndị a wee merie enweghị mmasị nke YAML ozugbo na ihe niile!

isi: www.habr.com

Tinye a comment