YAML क्या है? सिंटैक्स, डेटा प्रकार, उपयोग और समस्याएँ
Scrapeless Scraping API JSON या CSV में संरचित वेब डेटा लौटाता है, जिसे एक नियंत्रित पाइपलाइन YAML में बदल सकती है जब एक मानव-सम्पादित कॉन्फ़िगरेशन सीमा की आवश्यकता होती है।
TL;DR
- YAML एक मानव-केंद्रित डेटा सीरियलाइजेशन भाषा है। यह मैपिंग, अनुक्रम और स्केलर मानों को इंडेंटेशन और सीमित विराम चिह्नों के साथ प्रस्तुत करता है।
- YAML कॉन्फ़िगरेशन फ़ाइलों में सामान्य है। टिप्पणियाँ, पठनीय कुंजी, ब्लॉक स्ट्रिंग और संकुचित सूचियाँ इसे स्रोत नियंत्रण में समीक्षा किए गए सेटिंग्स के लिए सुविधाजनक बनाती हैं।
- व्हाइटस्पेस संरचना ले जाती है। स्पेस नेस्टिंग की स्थापना करते हैं, जबकि टैब हैंडलिंग और असंगत इंडेंटेशन गलतियाँ या आश्चर्यजनक डेटा उत्पन्न कर सकती है।
- पार्सर का व्यवहार नियंत्रित होना चाहिए। YAML संस्करण, स्कीमा, टैग, डुप्लिकेट कुंजी, और अनुमानित टाइपिंग पाठ को एप्लिकेशन मानों में बदलने के तरीके को बदल सकते हैं।
- YAML हर डेटा पथ के लिए आदर्श नहीं है। API के लिए JSON अक्सर स्पष्ट होता है, और बड़ी विश्लेषणात्मक डेटासेट्स के लिए टाइप किए गए बाइनरी या कॉलमर प्रारूप बेहतर होते हैं।
YAML का क्या मतलब है?
YAML का मतलब है “YAML टाइम मार्कअप लैंग्वेज नहीं है।” यह एक यूनिकोड-आधारित डेटा सीरियलाइजेशन भाषा है जिसे सामान्य प्रोग्रामिंग संरचनाओं के साथ साफ़ तरीके से मानचित्रण के लिए डिज़ाइन किया गया है। एक YAML दस्तावेज़ तीन मुख्य नोड प्रकारों से निर्मित होता है: कुंजी-मूल्य संघों के लिए मैपिंग, क्रमबद्ध संग्रह के लिए अनुक्रम, और व्यक्तिगत मानों के लिए स्केलर।
यह YAML 1.2.2 विनिर्देश प्रतिनिधित्व मॉडल, सीरियलाइजेशन ट्री, प्रस्तुतिकरण स्ट्रीम, सिंटैक्स, टैग, और स्कीमा का वर्णन करता है। YAML की प्रस्तुति परत समकक्ष डेटा लिखने के कई तरीके प्रदान करती है, जो मानव लेखकों के लिए सहायक होती है लेकिन कार्यान्वयनकर्ताओं को JSON की छोटी व्याकरण की तुलना में अधिक विकल्प देती है।
YAML डेटा है, परिभाषा द्वारा एक निर्देश भाषा नहीं। अनुप्रयोग इसे तैनातियों, निर्माण प्रणालियों, ऑटोमेशन नौकरियों, स्थिर साइट मेटाडेटा, और स्थानीय डेवलपर टूल्स को कॉन्फ़िगर करने के लिए अक्सर उपयोग करते हैं। अनुप्रयोग यह निर्धारित करता है कि कौन सी कुंजी मान्य हैं और उन कुंजियों का क्या कार्य है।
बुनियादी YAML सिंटैक्स
एक YAML कॉन्फ़िगरेशन मैपिंग, अनुक्रम, संख्याएँ, बूलियन, और नेस्टेड मानों को मिला सकता है:
service:
name: catalog-worker
enabled: true
workers: 4
regions:
- us-east
- eu-west
output:
format: json
include_metadata: true
कोलन एक मैपिंग कुंजी को उसके मूल्य से अलग करता है। एक डैश ब्लॉक शैली में एक अनुक्रम आइटम को शुरू करता है। इंडेंटेशन स्थान रखती है name, enabled, और शेष सेटिंग्स के तहत। serviceदस्तावेज़ को इस शैली में ब्रेसेस या कोलन की आवश्यकता नहीं होती है।
मैपिंग
एक मैपिंग कुंजियों को मूल्यों के साथ जोड़ती है। कुंजी आमतौर पर स्पष्ट स्ट्रिंग होती हैं, हालांकिं भाषा मॉडल अधिक जटिल कुंजियों की अनुमति देता है। कॉन्फ़िगरेशन लेखक को सरल, अद्वितीय स्ट्रिंग कुंजी को प्राथमिकता देनी चाहिए क्योंकि अनुप्रयोग पुस्तकालय और मानकीकरण उपकरण उन्हें पूर्वानुमानित रूप से संभालते हैं।
डुप्लिकेट मैपिंग कुंजियाँ पोर्टेबिलिटी की समस्या हैं। पुस्तकालय उन्हें अस्वीकार कर सकते हैं, एक मान रख सकते हैं, या एक विकल्प द्वारा नियंत्रित व्यवहार को उजागर कर सकते हैं। एक उत्पादन कॉन्फ़िगरेशन लोडर को डुप्लिकेट को अस्वीकार करना चाहिए ताकि एक समीक्षक और चल रही एप्लिकेशन समान प्रभावी सेटिंग देख सकें।
अनुक्रम
एक अनुक्रम क्रमबद्ध है। ब्लॉक शैली प्रति आइटम एक डैश का उपयोग करती है, जबकि फ़्लो शैली कोष्ठकों का उपयोग करती है:
regions: [us-east, eu-west]
checks:
- name: schema
required: true
- name: links
required: true
प्रत्येक आइटम एक स्केलर, मैपिंग, या अन्य अनुक्रम हो सकता है। आदेश का उपयोग केवल तब किया जाना चाहिए जब एप्लिकेशन अनुबंध को इसका अर्थ सौंपता है।
स्केलर और उद्धरण
स्केलर में स्ट्रिंग, संख्या, बूलियन, नुल, कुछ स्कीमा के तहत टाइमस्टैम्प जैसे मान और स्पष्ट टैग के साथ मान शामिल हैं। स्पष्ट स्केलर उद्धरणों को छोड़ देते हैं, लेकिन विराम चिह्न और कुछ शब्द YAML संस्करणों या पार्सर स्कीमा में अप्रत्याशित तरीकों से व्याख्यायी हो सकते हैं। जब उनके टेक्स्ट फॉर्म को सटीक रखना आवश्यक हो, तो मानों को उद्धरण करें, जिसमें संस्करण संख्या, अग्रणी ज़ीरो वाले पहचानकर्ता, और स्ट्रिंग जो बूलियन या नुल के समान लगते हैं।
एकल-उद्धृत स्ट्रिंग अधिकांश अक्षरों को शाब्दिक रूप में मानती हैं। डबल-उद्धृत स्ट्रिंग भागने वाले अनुक्रम का समर्थन करती हैं। ब्लॉक स्केलर का उपयोग | लाइन ब्रेक को बनाए रखने के लिए या > लाइनों को स्पेस में मोड़ने के लिए, अतिरिक्त संकेतकों के साथ जो इंडेंटेशन और अंतिम लाइन ब्रेक को नियंत्रित करते हैं।
टिप्पणियाँ, एंकर, उपनाम और टैग
हैश चरित्र एक उद्धृत स्केलर के बाहर एक टिप्पणी शुरू करता है। टिप्पणियाँ YAML को कॉन्फ़िगरेशन के लिए आकर्षक बनाती हैं क्योंकि रखरखाव करने वाले यह समझा सकते हैं कि सेटिंग क्यों मौजूद है। टिप्पणियाँ प्रस्तुति का हिस्सा होती हैं न कि कोर डेटा मॉडल का, इसलिए कई पार्सर उन्हें दस्तावेज़ लोड करते और लिखते समय छोड़ देते हैं।
एक एंकर एक नोड को लेबल करता है, और एक उपनाम उस नोड को कहीं और संदर्भित करता है। यह दोहराए गए कॉन्फ़िगरेशन को कम कर सकता है:
defaults: &defaults
timeout_seconds: 30
output: json
jobs:
catalog:
<<: *defaults
region: us-east
यहाँ दिखाया गया मर्ज की कुंजी व्यापक रूप से उपयोग की जाती है, लेकिन मर्ज व्यवहार हर YAML प्रोसेसिंग पथ की एक सरल सार्वभौमिक सुविधा नहीं है। सुनिश्चित करें कि चयनित पुस्तकालय और एप्लिकेशन क्या समर्थन करते हैं। अत्यधिक एंकर ग्राफ़ भी कॉन्फ़िगरेशन समीक्षा को कठिन बना देते हैं क्योंकि प्रभावी मूल्य अब एक स्थान पर दृश्य नहीं है।
टैग एक नोड के प्रकार या व्याख्या की पहचान करते हैं। मानक टैग स्ट्रिंग, पूर्णांक, मैपिंग, अनुक्रम, और अन्य कोर मानों को कवर करते हैं। कुछ पुस्तकालय भाषा वस्तुओं का निर्माण करने के लिए अनुप्रयोग-विशिष्ट टैग का समर्थन करते हैं। अप्रत्याशित टैग को ऑब्जेक्ट कन्स्ट्रक्टर में लोड करना खतरनाक हो सकता है; एक सुरक्षित लोडर का उपयोग करें जो निर्माण को अपेक्षित डेटा प्रकारों तक सीमित करता है।
YAML स्कीमा और संस्करण भिन्नताएँ
एक YAML स्कीमा निर्धारित करता है कि स्केलर पाठ टैग तक कैसे पहुँचता है। संस्करण और स्कीमा के भिन्नताएं कॉन्फ़िगरेशन रिपोजिटरी में पाए गए कई आश्चर्यजनक उदाहरणों की व्याख्या करती हैं। एक प्रोसेसिंग मोड द्वारा एक बूलियन के रूप में व्याख्यायित एक शब्द दूसरे के तहत एक स्ट्रिंग के रूप में बने रह सकता है। संख्यात्मक सिंटैक्स और टाइमस्टैम्प हैंडलिंग भी भिन्न हो सकती है।
YAML 1.2 ने अपने JSON स्कीमा को संरेखित किया ताकि JSON दस्तावेज़ प्रमाणित YAML में अपेक्षित संगतता मॉडल में मान्य हों। इसका मतलब यह नहीं है कि हर YAML फ़ाइल मान्य JSON है: टिप्पणियाँ, बिना उद्धृत कुंजी, ब्लॉक संग्रह, एंकर, उपनाम और टैग YAML विशेषताएँ हैं जो JSON सिंटैक्स के बाहर हैं।
यह YAML मीडिया प्रकार विनिर्देश रजिस्टर करता है application/yaml और +yaml संरचित वाक्यSyntax प्रत्यय। एक फ़ाइल एक्सटेंशन अकेले पार्सर स्कीमा या अनुप्रयोग अनुबंध को नहीं बताता है। परियोजनाओं को पार्सर पुस्तकालय को पिन करना चाहिए, समर्थित YAML संस्करण या उपसमुच्चय को दस्तावेज़ करना चाहिए, और लोड किए गए डेटा को अनुप्रयोग स्कीमा के विरुद्ध मान्य करना चाहिए।
YAML बनाम JSON
| आयाम | YAML | JSON |
|---|---|---|
| प्राथमिक शक्ति | मानव-लेखित कॉन्फ़िगरेशन और पढ़ने योग्य संरचित दस्तावेज़ | पूर्वानुमानित मशीन विनिमय और वेब एपीआई |
| संरचना | इनडेंटेशन, ब्लॉक शैली, या प्रवाह शैली | कुंडल, ब्रैकेट, अल्पविराम, और उद्धृत संपत्ति नाम |
| टिप्पणियाँ | समर्थित | मानक JSON का हिस्सा नहीं |
| संदर्भ | एंकर और उपनाम | कोई स्वदेशी संदर्भ वाक्यSyntax नहीं |
| पार्सिंग सतह | स्कीमाओं, टैग, और कई प्रस्तुति शैलियों के साथ व्यापक व्याकरण | छोटा व्याकरण और कम प्रतिनिधित्व विकल्प |
| सामान्य फ़ाइल उपयोग | सेटिंग्स, मैनिफेस्ट, निर्माण और तैनाती कॉन्फ़िगरेशन | API पेलोड, घटनाएँ, अनुप्रयोग स्थिति, कॉन्फ़िगरेशन |
| स्ट्रीमिंग रिकॉर्ड | कई दस्तावेज़ धाराओं का समर्थन करता है, लेकिन अनुप्रयोग की परंपराएँ भिन्न होती हैं | ऐसे फ्रेमिंग की आवश्यकता होती है जैसे कि सरणियाँ या NDJSON |
सामान्य YAML उपयोग के मामले
अनुप्रयोग कॉन्फ़िगरेशन
पढ़ने योग्य नेस्टेड सेटिंग्स, टिप्पणियाँ, और सूचियाँ तब अच्छी काम करती हैं जब डेवलपर्स संस्करण नियंत्रण में परिवर्तन की समीक्षा करते हैं।
इन्फ्रास्ट्रक्चर मैनिफेस्ट
घोषणात्मक प्रणाली YAML का उपयोग इच्छित संसाधनों, नीतियों, रिश्तों, और तैनाती पैरामीटर का वर्णन करने के लिए करती हैं।
स्वचालन पाइपलाइंस
निर्माण और डिलीवरी उपकरण अक्सर YAML का उपयोग चरण, नौकरियों, निर्भरताओं, वातावरण, और शर्तों को सूचीबद्ध करने के लिए करते हैं।
दस्तावेज़ फ्रंट मैटर
स्थिर-साइट और प्रकाशन उपकरण मानव-लिखित सामग्री के बगल में एक छोटा YAML मानचित्र रखते हैं ताकि शीर्षक, टैग, और लेआउट विकल्प घोषित किए जा सकें।
YAML सुरक्षा और विश्वसनीयता
अविश्वसनीय YAML को अविश्वसनीय संरचित इनपुट के रूप में माना जाना चाहिए। एक सुरक्षित-लोडिंग मोड का उपयोग करें जो केवल सामान्य डेटा मानों का निर्माण करता है, भाषास्पष्ट वस्तुएं या अनुप्रयोग वर्ग नहीं। सामान्य जोखिम उस व्यापक श्रेणी में आता है जिसे CWE-502: अविश्वसनीय डेटा का डेसिरियलाइजेशन.
इनपुट आकार, नेस्टिंग गहराई, उपनाम, और समग्र विस्तार पर सीमाएँ निर्धारित करें। एक छोटा दस्तावेज़ कई बार एंकर किए गए मानों का उल्लेख कर सकता है, जिससे लोडर एक बहुत बड़े इन-मेमोरी संरचना का निर्माण कर सकता है। पुस्तकालय विभिन्न नियंत्रणों को उजागर करते हैं, इस प्रकार परीक्षणों को प्रतिनिधि सीमाओं के साथ तैनात पार्सर का अभ्यास करना चाहिए।
पार्सिंग के बाद लोड किए गए डेटा को मान्य करें। जब कॉन्फ़िगरेशन की गलतियाँ खतरनाक होती हैं तो अज्ञात शीर्ष-स्तरीय कुंजी को अस्वीकार करें। आवश्यक फ़ील्ड, अनुमति प्राप्त एनम मान, संख्यात्मक रेंज, पथ धाराओं, और सेटिंग्स के बीच संबंधों की जांच करें। सत्यापन त्रुटि पर रहस्यों या पूर्ण कॉन्फ़िगरेशन को लॉग न करें।
सामान्य YAML गलतियाँ
- इनडेंटेशन के लिए टैब का उपयोग करना। स्पेस का चयन करें और संपादक सेटिंग्स और एक प्रारूपक के माध्यम से एक इनडेंटेशन चौड़ाई को लागू करें।
- अस्पष्ट स्केलर्स को उद्धृत करना छोड़ना। बूलियन, नल, संख्या, या समय-चिह्न की तरह दिखने वाले पहचानकर्ताओं और पाठ को उद्धृत करें।
- डुप्लिकेट कीज़ की अनुमति देना। लोडर या लिंटर को उन्हें अस्वीकार करने के लिए कॉन्फ़िगर करें।
- मान लेना कि टिप्पणियाँ राउंड ट्रिप पर जीवित रहती हैं। कई ऑब्जेक्ट-आधारित लोडर टिप्पणियों और मूल स्वरूपण को हटा देते हैं।
- अधिकांश एंकर और विलय का अधिक उपयोग। पुनः उपयोग दोहराव को कम कर सकता है, लेकिन छिपे हुए प्रभावी मूल्य समीक्षाओं और अधिभारों को कठिन बनाते हैं।
- स्कीमा सत्यापन को छोड़ना। एक अच्छी तरह से निर्मित दस्तावेज़ अभी भी गलत वर्तनी वाले कीज़ या असुरक्षित मूल्यों को शामिल कर सकता है।
YAML का सही उपयोग कैसे करें
- एक छोटे समर्थित उपसेट को परिभाषित करें। निर्णय लें कि क्या परियोजना एंकर, विलय कीज़, कस्टम टैग, मल्टी-डॉक्यूमेंट स्ट्रीम और फ्लो स्टाइल की अनुमति देती है।
- पार्सर और व्यवहार को पिन करें। লাইब्रेरी, समर्थित YAML संस्करण, डुप्लिकेट-की नीति, और सुरक्षित-लोडिंग मोड को रिकॉर्ड करें।
- लिंटिंग और स्कीमा चेक जोड़ें। निर्माण से पहले उन्हें चलाएं ताकि इंडेंटेशन त्रुटियाँ और अज्ञात कीज़ जल्दी विफल हो जाएँ।
- गोपनीयताओं को प्रतिबद्ध YAML के बाहर रखें। आवेदन के दस्तावेज़ीकृत तंत्र के अनुसार पर्यावरण-प्रदत्त या गुप्त-प्रबंधक मूल्यों का संदर्भ लें।
- प्रभावी कॉन्फ़िगरेशन की समीक्षा करें। जब विरासत या विलय होता है, तो एक कमांड प्रदान करें जो अंतिम सेटिंग्स को बिना गुप्त मूल्यों को उजागर किए प्रस्तुत करता है।
- सीमा बदलने पर एक अन्य स्वरूप का उपयोग करें। सार्वजनिक APIs के लिए JSON को प्राथमिकता दें और बड़े डेटा सेट के लिए टाइपेड विश्लेषणात्मक स्वरूप।
निष्कर्ष
YAML एक लचीला सीरियलाइज़ेशन भाषा है जिसकी पठनीय ब्लॉक शैली इसे विशेष रूप से कॉन्फ़िगरेशन के लिए उपयोगी बनाती है। इसका आराम एक बड़े व्याख्या की सतह के साथ आता है: इंडेंटेशन, स्कीमा, टैग, एंकर, उपनाम, डुप्लिकेट कीज़, और पार्सर विकल्प सभी लोड किए गए मूल्यों को प्रभावित कर सकते हैं। एक विश्वसनीय YAML वर्कफ़्लो समर्थित फ़ीचर सेट को संकुचित करता है, सुरक्षित लोडिंग का उपयोग करता है, परिणामी डेटा को मान्य करता है, और मानव-हितैषी कॉन्फ़िगरेशन को उच्च-मात्रा मशीन एक्सचेंज से अलग रखता है।
क्या आप एक संरचित कॉन्फ़िगरेशन वर्कफ़्लो बनाने के लिए तैयार हैं?
Scrapeless Scraping API के साथ संरचित वेब डेटा एकत्र करें, फिर केवल उन मान्य मूल्यों को बदलें जो आपका कॉन्फ़िगरेशन अनुबंध अनुमति देता है।
आज ही साइन अप करें और पाएं $5 मुफ्त क्रेडिट — कोई क्रेडिट कार्ड आवश्यक नहीं.
अपने $5 क्रेडिट का दावा करें →अक्सर पूछे जाने वाले प्रश्न
क्या YAML एक प्रोग्रामिंग भाषा है?
नहीं, YAML एक डेटा सीरियलाइज़ेशन भाषा है। एक एप्लिकेशन YAML कीज़ को निर्देशों के रूप में व्याख्या कर सकता है, लेकिन यह व्यवहार एप्लिकेशन से संबंधित है न कि YAML स्वयं से।
क्या YAML JSON का सुपरसेट है?
YAML 1.2 को डिज़ाइन किया गया था ताकि JSON प्रशंसा अपनी संगतता मॉडल में फिट हो, लेकिन वास्तविक पार्सर समर्थन और परिधीय मामले संस्करणों और कार्यान्वयों पर निर्भर करते हैं। YAML-विशिष्ट सिंटैक्स मान्य JSON नहीं है।
YAML में इंडेंटेशन का महत्व क्या है?
इंडेंटेशन ब्लॉक-शैली YAML में पैरेंट-चाइल्ड संरचना को परिभाषित करता है। स्पेस बदलने से एक मान को दूसरे मैपिंग या अनुक्रम में ले जाया जा सकता है, या दस्तावेज़ को अमान्य बना सकता है।
क्या YAML टिप्पणियाँ शामिल कर सकता है?
हाँ, YAML टिप्पणियों का समर्थन करता है जो क़्वोट किए गए स्केलर के बाहर हैश के साथ शुरू होती हैं। कई पार्सर लोड-और-लिखें राउंड ट्रिप के दौरान टिप्पणियों को हटा देते हैं।
क्या बिना विश्वसनीय स्रोत से YAML पार्स करना सुरक्षित है?
अविश्वसनीय YAML को एक सुरक्षित लोडर, संसाधन सीमाएँ, निष्क्रिय एप्लिकेशन-विशिष्ट ऑब्जेक्ट निर्माण, और स्कीमा सत्यापन की आवश्यकता होती है। अविश्वसनीय इनपुट पर सामान्य ऑब्जेक्ट-डीसरीलाइज़ेशन मोड का कभी उपयोग न करें।