YAML Zen ڏانهن 10 قدم

اسان سڀني کي جواب ڏيڻ سان پيار آهي، پر جوابي YAML آهي. ڪنفيگريشن فائلن لاءِ ڪيترائي فارميٽ آھن: قدرن جون لسٽون، پيٽرول-قدر جوڙو، INI فائلون، YAML، JSON، XML ۽ ٻيا ڪيترائي. بهرحال، انهن سڀني مان ڪيترن ئي سببن لاء، YAML اڪثر ڪري خاص طور تي ڏکيو سمجهيو ويندو آهي. خاص طور تي، ان جي تازگي واري minimalism ۽ حيرت انگيز قدرن سان ڪم ڪرڻ لاءِ متاثر ڪندڙ صلاحيتن جي باوجود، YAML نحو ان جي پٿون-جهڙي انداز سان انڊينٽيشن سان ناراض ٿي سگهي ٿو.

YAML Zen ڏانهن 10 قدم

جيڪڏهن YAML توهان کي پريشان ڪري ٿو، توهان ڪري سگهو ٿا- ۽ توهان کي گهرجي! - ھيٺ ڏنل 10 قدم وٺو توھان جي مايوسي کي گھٽائڻ لاءِ قابل قبول سطح تي ۽ YAML سان پيار ڪرڻ. جيئن ته هن فهرست جي فائدي ۾، اسان جا ڏهه ٽوٽڪا شروع کان شمار ڪيا ويندا، اسان مراقبي ۽ روحاني طريقا شامل ڪنداسين 😉

0. پنهنجو ايڊيٽر ڪم ڪريو

اهو مسئلو ناهي ته توهان وٽ ڪهڙو ٽيڪسٽ ايڊيٽر آهي، شايد گهٽ ۾ گهٽ هڪ پلگ ان آهي YAML سان ڪم ڪرڻ لاءِ. جيڪڏهن توهان وٽ ناهي، ڳوليو ۽ انسٽال ڪريو فوري طور تي. ڳولها ۽ سيٽنگ ڪرڻ ۾ خرچ ڪيل وقت هر وقت توهان کي YAML کي ايڊٽ ڪرڻ جي ڀيٽ ۾ ڪيترائي ڀيرا ادا ڪندو.

مثال طور، ايڊيٽر جوهر ڊفالٽ طور YAML کي سپورٽ ڪري ٿو، پر GNU Emacs لاءِ توهان کي اضافي پيڪيجز انسٽال ڪرڻا پوندا، مثال طور، yaml-mode.

YAML Zen ڏانهن 10 قدم

Emacs YAML موڊ ۾ ۽ جڳھ ڏيکاريندي.

جيڪڏهن توهان جي پسنديده ايڊيٽر وٽ YAML موڊ ناهي، ته پوءِ سيٽنگن سان ڪم ڪندي ڪجهه مسئلا حل ڪري سگهجن ٿا. مثال طور، معياري GNOME ٽيڪسٽ ايڊيٽر گيڊٽ وٽ YAML موڊ نه آهي، پر ڊفالٽ طور اهو YAML نحو کي نمايان ڪري ٿو ۽ توهان کي ڪم کي ترتيب ڏيڻ جي اجازت ڏئي ٿو اشارن سان:

YAML Zen ڏانهن 10 قدم

Gedit ۾ انگن اکرن کي ترتيب ڏيڻ.

هڪ پلگ ان ڇڪڻ واري جاءِ Gedit لاءِ، ڊٽس جي طور تي اسپيس ڏيکاري ٿو، انڊينٽيشن ليولز سان ابهام کي ختم ڪري ٿو.

ٻين لفظن ۾، پنهنجي پسنديده ايڊيٽر بابت سکڻ ۾ وقت گذاريو. ڳولهيو ته هن کي يا هن جي ترقياتي ڪميونٽي کي YAML سان ڪم ڪرڻ لاءِ ڇا پيش ڪرڻو آهي، ۽ انهن خاصيتن کي استعمال ڪريو. توهان کي يقيني طور تي افسوس نه ٿيندو.

1. هڪ لينٽر استعمال ڪريو

مثالي طور، پروگرامنگ ٻوليون ۽ مارڪ اپ ٻوليون استعمال ڪن ٿيون اڳڪٿي لائق نحو. ڪمپيوٽر اڳڪٿي ڪرڻ جي صلاحيت ۾ سٺا آهن، انهي ڪري جو تصور لينٽرا. جيڪڏهن ان جي وجود جي 40 سالن ۾ اهو توهان جي طرفان گذري چڪو آهي ۽ توهان اڃا تائين استعمال نه ڪيو آهي YAML linter، پوء اهو وقت آهي yamllint جي ڪوشش ڪرڻ جو.

انسٽال ڪريو ياملنٽ توھان استعمال ڪري سگھو ٿا معياري لينڪس پيڪيج مينيجر. مثال طور، ۾ Red Hat Enterprise Linux 8 يا بيدل اهو ٿي چڪو آهي:

$ 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 فائل ۾ ڪا به غلطي نه ڳولي، اسڪرين تي ڪجھ به نه ڇپيل آهي. جيڪڏهن اهڙي خاموشي توهان کي خوفزده ڪري ٿي ۽ توهان ٿورو وڌيڪ راءِ چاهيو ٿا، ته پوءِ توهان ڊبل ايمپرسينڊ (&&) ذريعي مشروط گونج ڪمانڊ سان لينٽر هلائي سگهو ٿا:

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

POSIX ۾، هڪ ڊبل ايمپرسينڊ فائر ٿئي ٿو جيڪڏهن ۽ صرف ان صورت ۾ جڏهن اڳئين ڪمانڊ 0 موٽائي ٿي. ۽ yamllint صرف مليل غلطين جو تعداد واپس ڪري ٿو، جنهن ڪري هي سڄو مشروط تعمير ڪم ڪري ٿو.

2. Python ۾ لکو، YAML نه

جيڪڏهن YAML واقعي توهان کي پريشان ڪري ٿو، صرف ان ۾ نه لکو، لفظي. اهو ٿئي ٿو ته YAML واحد فارميٽ آهي جيڪا ايپليڪيشن سمجهي ٿي. پر انهي صورت ۾ به، اهو ضروري ناهي ته YAML فائل ٺاهي. ان تي لکو جيڪو توهان پسند ڪيو ۽ پوء تبديل ڪريو. مثال طور، اتي Python لاء هڪ وڏي لائبريري آهي pyyaml ۽ ٻه تبادلي جا طريقا: خود-تبديلي ۽ اسڪرپٽ ذريعي تبديلي.

پاڻ بدلائڻ

انهي صورت ۾، ڊيٽا فائل پڻ هڪ پٿون اسڪرپٽ آهي جيڪو YAML ٺاهي ٿو. اهو طريقو ننڍڙو ڊيٽا سيٽ لاء بهترين آهي. توھان صرف JSON ڊيٽا کي Python variable ۾ لکو، ان کي درآمد واري ھدايت سان پيش ڪريو، ۽ فائل جي آخر ۾ ٻاھرين کي لاڳو ڪرڻ لاء ٽي لائين شامل ڪريو.

#!/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 ۾ لکندا آهيون، ۽ پوء ڪنورٽر کي هڪ الڳ پٿون اسڪرپٽ طور هلائيندا آهيون، جيڪو YAML پيدا ڪري ٿو. پوئين طريقي جي مقابلي ۾، ھي طريقو بھتر آھي، ڇو ته تبديلي ڊيٽا کان الڳ آھي.

پهرين، اچو ته هڪ JSON فائل ٺاهيو example.json، مثال طور، توهان ان کان وٺي سگهو ٿا 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"
			}
		  }
		}
	  }
	}

پوءِ اسان هڪ سادي ڪنورٽر اسڪرپٽ ٺاهينداسين ۽ ان کي 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 ۾ صرف ٻن حڪمن سان انٽرايڪٽو Python شيل ۾. اچو ته چئو ته توهان وٽ 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 ڏانهن واپسي، اهو دورو ڪرڻ مفيد آهي yaml.org ۽ وضاحتون (چشمي) ٻيهر پڙهو. جيڪڏهن توهان کي YAML سان مشڪلاتون آهن، پر تفصيل جي چوڌاري حاصل نه ڪيو آهي، پوء اهو وقت هن صورتحال کي درست ڪرڻ جو وقت آهي. چشمي حيرت انگيز طور تي لکڻ ۾ آسان آهي، ۽ نحو جي گهرج کي وڏي تعداد ۾ مثالن سان بيان ڪيو ويو آهي. گلي 6.

5. Pseudo-configs

جڏهن ڪو ڪتاب يا مضمون لکندو هجي، اهو هميشه ڪارائتو هوندو آهي ته پهريان هڪ ابتدائي خاڪو ٺاهيو، گهٽ ۾ گهٽ مواد جي جدول جي صورت ۾. اهو ساڳيو YAML سان آهي. گهڻو ڪري، توهان وٽ هڪ خيال آهي ته ڪهڙي ڊيٽا کي YAML فائل ۾ لکڻ جي ضرورت آهي، پر توهان واقعي نه ٿا سمجهو ته ان کي هڪ ٻئي سان ڪيئن ڳنڍجي. تنهن ڪري، YAML کي مجسم ڪرڻ کان اڳ، هڪ pseudo-config ٺاهي.

Pseudo-config pseudo-code سان ملندڙ جلندڙ آهي، جتي توهان کي ساخت يا انڊينٽيشن، والدين-ٻارن جي رشتي، وراثت ۽ nesting بابت پريشان ٿيڻ جي ضرورت ناهي. اهو هتي ساڳيو آهي: توهان ڊيٽا جي ورهاڱي کي ڇڪيو جيئن اهي توهان جي سر ۾ پيدا ٿين ٿا.

YAML Zen ڏانهن 10 قدم

Pseudo-config لسٽنگ پروگرامر (مارٽن ۽ تبيتا) ۽ انهن جون صلاحيتون (پروگرامنگ ٻوليون: Python، Perl، Pascal ۽ Lisp، Fortran، Erlang، ترتيب سان).

ڪاغذ جي هڪ ٽڪري تي هڪ pseudo-config ڊرائنگ ڪرڻ کان پوء، احتياط سان تجزيو ڪريو ۽، جيڪڏهن سڀ ڪجهه ترتيب ۾ آهي، ان کي فارميٽ ڪريو صحيح YAML فائل جي صورت ۾.

6. ٽيب بمقابلہ اسپيس ڊيليما

توهان کي مشڪوڪ حل ڪرڻو پوندو "ٽيب يا اسپيس؟". عالمي معنى ۾ نه، پر صرف توهان جي تنظيم جي سطح تي، يا گهٽ ۾ گهٽ هڪ پروجيڪٽ. اهو مسئلو ناهي ته ڇا ان ۾ پوسٽ پروسيسنگ کي sed اسڪرپٽ سان استعمال ڪرڻ، پروگرامرز جي مشينن تي ٽيڪسٽ ايڊيٽرن کي ترتيب ڏيڻ، يا برطرفي جي خطري هيٺ لينٽر جي هدايتن جي سخت تعميل جون رسيدون شامل آهن، پر توهان جي ٽيم جا سڀئي ميمبر جيڪي ھڪڙو طريقو يا ٻيو تعلق YAML سان تعلق رکي ٿو صرف اسپيس استعمال ڪرڻ گھرجي (جيئن گھربل YAML وضاحت سان).

ڪنهن به عام ٽيڪسٽ ايڊيٽر ۾، توهان ترتيب ڏئي سگهو ٿا خودڪار-صحيح ٽيب هڪ مخصوص تعداد ۾ جڳهن تي، تنهنڪري اهم پيروي ڪندڙن جي بغاوت ٽيبل توهان کي ڊڄڻ جي ضرورت ناهي.

جيئن ته هر YAML نفرت ڪندڙ چڱي طرح ڄاڻي ٿو، توهان اسڪرين تي ٽيب ۽ اسپيس جي وچ ۾ فرق نه ڏسي سگهو ٿا. ۽ جڏهن ڪا شيءِ نظر نه ايندي آهي، اها عام طور تي آخري شيءِ آهي جيڪا ماڻهو ياد ڪندا آهن، انهن کي ترتيب ڏيڻ، جانچڻ ۽ ٻين سڀني ممڪن مسئلن کي ختم ڪرڻ کان پوءِ. ٽيبلوليشن وکر يا اسپيس جي بلاڪ جي ڳولا ۾ صرف هڪ ڪلاڪ جو وقت صرف دانهون ڪري ٿو ته توهان کي فوري طور تي هڪ يا ٻئي جي استعمال لاءِ پاليسي ٺاهڻ جي ضرورت آهي، ۽ پوءِ ان جي تعميل لاءِ هڪ مضبوط ڪنڪريٽ چيڪ لاڳو ڪريو (مثال طور، ذريعي. هڪ گٽ ٿلهو ان کي لينٽر ذريعي مجبور ڪرڻ لاءِ).

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 دستاويز جا مالڪ آهيو ۽ ان کي برقرار رکڻ جا ذميوار آهيو، ته پوءِ تون ۽ صرف تون وضاحت ڪرڻ گهرجي ته ڪيئن استعمال ڪجي indentation. جيڪڏهن توهان وڏي پئڊنگ کان ناراض آهيو، ان کي گهٽ ۾ گهٽ رکو ته YAML وضاحت جي مطابق. مثال طور، جوابي دستاويزن مان مٿين فائل کي بغير ڪنهن نقصان جي هن طرح ٻيهر لکي سگهجي ٿو:

---
- 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 کي مختلف شڪل ۾ تبديل ڪرڻ جي قابل. وقت گذرڻ سان گڏ، ڪنفيگريشن فائلون پاڻ کي اڳتي وڌائي سگھن ٿيون ۽ پوءِ اھو بھتر آھي ته انھن کي لوا يا پٿون ۾ سادي اسڪرپٽ ۾ تبديل ڪيو وڃي.

YAML هڪ عظيم شيءِ آهي جنهن کي ڪيترائي ماڻهو پسند ڪن ٿا ان جي گھٽتائي ۽ سادگي لاءِ ، پر اهو پري آهي توهان جي هٿيارن ۾ واحد اوزار. تنهنڪري ڪڏهن ڪڏهن توهان ان کي رد ڪري سگهو ٿا. YAML لاءِ لڏپلاڻ ڪندڙ لائبريريون ڳولڻ آسان آهن، تنهن ڪري جيڪڏهن توهان آسان لڏپلاڻ جا اختيار پيش ڪندا آهيو، توهان جا صارف هن ناڪاميءَ کان بچي ويندا نسبتاً بي درديءَ سان.

جيڪڏهن توهان YAML کان سواءِ نٿا ڪري سگهو، پوءِ اهي 10 ٽوٽڪا وٺو ۽ هڪ ڀيرو ۽ سڀني لاءِ YAML جي پنهنجي ناپسنديدگي تي قابو پاؤ!

جو ذريعو: www.habr.com

تبصرو شامل ڪريو