वाईएएमएल
| Filename extensions | .yaml, .yml |
|---|---|
| Internet media type | Not registered |
| Uniform Type Identifier (UTI) | public.yaml[1] |
| Initial release | 11 May 2001 |
| Latest release | 1.2 (Revision 1.2.2) 1 October 2021 |
| Type of format | Data interchange |
| Open format? | Yes |
| Website | yaml |
वाईएएमएल (/ˈjæməl/) (देखना § History and name) मानव-पठनीय क्रमांकन|डेटा-क्रमांकन भाषा है। इसका उपयोग आमतौर पर विन्यास फाइल और उन अनुप्रयोगों में किया जाता है जहां डेटा संग्रहीत या प्रसारित किया जा रहा है। YAML एक्सटेंसिबल मार्कअप लैंग्वेज (XML) के समान कई संचार अनुप्रयोगों को लक्षित करता है, लेकिन इसमें न्यूनतम सिंटैक्स होता है जो जानबूझकर मानक सामान्यीकृत मार्कअप लैंग्वेज (SGML) से भिन्न होता है।[2]यह नेस्टिंग को इंगित करने के लिए पायथन (प्रोग्रामिंग भाषा) शैली इंडेंटेशन और अधिक कॉम्पैक्ट प्रारूप दोनों का उपयोग करता है [...] सूचियों के लिए और {...} मानचित्रों के लिए[2] लेकिन टैब वर्णों को इंडेंटेशन के रूप में उपयोग करने से रोकता है[3] इस प्रकार केवल कुछ JSON फ़ाइलें ही मान्य YAML 1.2 हैं।[4]
कस्टम डेटा प्रकारों की अनुमति है, लेकिन YAML मूल रूप से अदिश (कंप्यूटिंग) (जैसे स्ट्रिंग (कंप्यूटर विज्ञान), इंटीजर (कंप्यूटर विज्ञान), और तैरनेवाला स्थल), सूची (कंप्यूटिंग), और सहयोगी सरणी (जिसे मानचित्र, शब्दकोश या के रूप में भी जाना जाता है) को एन्कोड करता है। हैश)। ये डेटा प्रकार पर्ल प्रोग्रामिंग भाषा पर आधारित हैं, हालांकि आमतौर पर उपयोग की जाने वाली सभी उच्च-स्तरीय प्रोग्रामिंग भाषाएं बहुत समान अवधारणाएं साझा करती हैं।[5][6][7] कोलन-केंद्रित सिंटैक्स, विशेषता-मूल्य जोड़ी | कुंजी-मूल्य जोड़े को व्यक्त करने के लिए उपयोग किया जाता है, इलेक्ट्रॉनिक मेल हेडर से प्रेरित है जैसा कि इसमें परिभाषित किया गया है RFC 822, और सीमान्तक --- MIME से उधार लिया गया है (RFC 2046). एस्केप अनुक्रमों का पुन: उपयोग C (प्रोग्रामिंग भाषा) से किया जाता है, और मल्टी-लाइन स्ट्रिंग्स के लिए व्हाइटस्पेस रैपिंग HTML से प्रेरित है। सूचियों और हैश में नेस्टेड सूचियाँ और हैश शामिल हो सकते हैं, जो वृक्ष संरचना बनाते हैं; मनमाना ग्राफ़ (अमूर्त डेटा प्रकार) को YAML उपनामों (SOAP में XML के समान) का उपयोग करके दर्शाया जा सकता है।[2]YAML का उद्देश्य स्ट्रीम में पढ़ना और लिखना है, यह XML के लिए Simple API से प्रेरित सुविधा है।[2]
YAML को पढ़ने और लिखने के लिए समर्थन कई प्रोग्रामिंग भाषाओं के लिए उपलब्ध है।[8] कुछ स्रोत-कोड संपादक जैसे विम (पाठ संपादक),[9] Emacs,[10] और विभिन्न एकीकृत विकास वातावरण[11][12][13] इसमें ऐसी विशेषताएं हैं जो YAML को संपादित करना आसान बनाती हैं, जैसे नेस्टेड संरचनाओं को मोड़ना या सिंटैक्स त्रुटियों को स्वचालित रूप से हाइलाइट करना।
YAML फ़ाइलों के लिए आधिकारिक अनुशंसित फ़ाइल नाम एक्सटेंशन रहा है .yaml 2006 से।[14]
इतिहास और नाम
वाईएएमएल (/ˈjæməl/, ऊँट के साथ तुकबंदी करता है[4] पहली बार 2001 में क्लार्क इवांस द्वारा प्रस्तावित किया गया था,[15] जिन्होंने Ingy dot Net के साथ मिलकर इसे डिज़ाइन किया है[16] और ओरेन बेन-किकी।[16]मूल रूप से YAML का अर्थ और मार्कअप भाषा कहा जाता था,[17] क्योंकि यह उस युग में जारी किया गया था जिसमें प्रस्तुति और कनेक्टिविटी (HTML, XML, SGML, आदि) के लिए मार्कअप भाषाओं का प्रसार देखा गया था। इसका प्रारंभिक नाम मौखिक संदर्भ के रूप में था[18] प्रौद्योगिकी परिदृश्य में, इसके उद्देश्य को अन्य निर्माण के साथ मार्कअप भाषा के रूप में संदर्भित किया गया था, लेकिन फिर इसे डेटा-उन्मुख के रूप में इसके उद्देश्य को अलग करने के लिए, पुनरावर्ती संक्षिप्त नाम, YAML इज़ नॉट पाठ के प्रस्तुतिकरण के लिए प्रयुक्त भाषा के रूप में पुनर्निर्मित किया गया था। दस्तावेज़ मार्कअप की तुलना में.
संस्करण
| version | release date |
|---|---|
| YAML 1.0 | 29 January 2004 |
| YAML 1.1 | 18 January 2005 |
| YAML 1.2.0 | 21 July 2009 |
| YAML 1.2.1 | 1 October 2009 |
| YAML 1.2.2 | 1 October 2021 |
डिज़ाइन
सिंटेक्स
आधिकारिक साइट पर चीट शीट और पूर्ण विवरण उपलब्ध हैं।[19] निम्नलिखित मूल तत्वों का सारांश है।
YAML कुछ नियंत्रण वर्णों को छोड़कर संपूर्ण यूनिकोड वर्ण सेट को स्वीकार करता है, और इसे UTF-8, UTF-16 या UTF-32 में से किसी में एन्कोड किया जा सकता है। (हालाँकि UTF-32 अनिवार्य नहीं है, पार्सर के लिए JSON संगतता होना आवश्यक है।)[20]
- व्हाइटस्पेस (कंप्यूटर विज्ञान) इंडेंट शैली का उपयोग संरचना को दर्शाने के लिए किया जाता है; हालाँकि, उस इंडेंटेशन के भाग के रूप में टैब वर्ण की अनुमति नहीं है।
- टिप्पणियाँ संख्या चिह्न से शुरू होती हैं (
#), किसी लाइन पर कहीं भी शुरू हो सकता है और लाइन के अंत तक जारी रह सकता है। टिप्पणियों को व्हाइटस्पेस वर्णों द्वारा अन्य टोकन से अलग किया जाना चाहिए।[21] यदि # अक्षर स्ट्रिंग के अंदर दिखाई देते हैं, तो वे संख्या चिह्न हैं (#) शाब्दिक. - सूची के सदस्यों को अग्रणी हाइफ़न-माइनस द्वारा दर्शाया जाता है (
-) प्रति पंक्ति सदस्य के साथ।- सूची को वर्गाकार कोष्ठकों में पाठ संलग्न करके भी निर्दिष्ट किया जा सकता है (
[...]) प्रत्येक प्रविष्टि को अल्पविराम (विराम चिह्न) द्वारा अलग किया जाता है।
- सूची को वर्गाकार कोष्ठकों में पाठ संलग्न करके भी निर्दिष्ट किया जा सकता है (
- सहयोगी सरणी प्रविष्टि को फॉर्म कुंजी में कोलन (विराम चिह्न) स्पेस (विराम चिह्न) का उपयोग करके दर्शाया जाता है: प्रति पंक्ति प्रविष्टि के साथ मान। YAML के लिए जरूरी है कि कोलन के बाद स्पेस हो ताकि यूआरएल-स्टाइल स्ट्रिंग्स जैसी हो जाएं
http://www.wikipedia.orgको उद्धरण चिह्नों में संलग्न किए बिना दर्शाया जा सकता है।- प्रश्न चिह्न का उपयोग कुंजी के सामने ?key: मान के रूप में किया जा सकता है, जिससे कुंजी में बिना उद्धरण चिह्नों के अग्रणी डैश, वर्गाकार कोष्ठक आदि शामिल हो सकें।
- सहयोगी सरणी को घुंघराले ब्रेसिज़ में संलग्न पाठ द्वारा भी निर्दिष्ट किया जा सकता है (
{...}), कुंजियों को कोलन द्वारा मानों से अलग किया जाता है और प्रविष्टियों को अल्पविराम से अलग किया जाता है (JSON के साथ संगतता बनाए रखने के लिए रिक्त स्थान की आवश्यकता नहीं होती है)।
- स्ट्रिंग (कंप्यूटर विज्ञान) (वाईएएमएल में प्रकार का स्केलर) आमतौर पर उद्धृत नहीं किया जाता है, लेकिन दोहरे उद्धरण चिह्न में संलग्न किया जा सकता है|दोहरे उद्धरण चिह्न (
"), या एकल उद्धरण|एकल-उद्धरण (').- डबल-कोट्स के भीतर, विशेष वर्णों को सी (प्रोग्रामिंग भाषा) के साथ दर्शाया जा सकता है | बैकस्लैश से शुरू होने वाले सी-शैली एस्केप अनुक्रम (
\). दस्तावेज़ीकरण के अनुसार केवल ऑक्टल एस्केप समर्थित है\0. - एकल उद्धरण के भीतर एकमात्र समर्थित एस्केप अनुक्रम दोगुना एकल उद्धरण है (
'') एकल उद्धरण को स्वयं के रूप में निरूपित करना'don''t'.
- डबल-कोट्स के भीतर, विशेष वर्णों को सी (प्रोग्रामिंग भाषा) के साथ दर्शाया जा सकता है | बैकस्लैश से शुरू होने वाले सी-शैली एस्केप अनुक्रम (
- ब्लॉक स्केलर को संरक्षित करने के लिए वैकल्पिक संशोधक के साथ इंडेंट शैली के साथ सीमांकित किया गया है (
|) या मोड़ो (>) नई पंक्तियाँ। - ही स्ट्रीम में एकाधिक दस्तावेज़ों को तीन हाइफ़न द्वारा अलग किया जाता है (
---).- तीन पूर्ण विराम (
...) वैकल्पिक रूप से किसी दस्तावेज़ को स्ट्रीम के भीतर समाप्त करें।
- तीन पूर्ण विराम (
- दोहराए गए नोड्स को प्रारंभ में एम्परसेंड द्वारा दर्शाया जाता है (
&) और उसके बाद तारांकन चिह्न के साथ संदर्भित (*). - दोहरे विस्मयादिबोधक चिह्न का उपयोग करके नोड्स को प्रकार या टैग के साथ लेबल किया जा सकता है (
!!) के बाद स्ट्रिंग आती है, जिसे यूआरआई में विस्तारित किया जा सकता है। - स्ट्रीम में YAML दस्तावेज़ों के पहले प्रतिशत चिह्न से बना 'निर्देश' हो सकता है (
%) के बाद नाम और स्थान-सीमांकित पैरामीटर आते हैं। YAML 1.1 में दो निर्देश परिभाषित हैं:- किसी दिए गए दस्तावेज़ में YAML के संस्करण की पहचान करने के लिए %YAML निर्देश का उपयोग किया जाता है।
- %TAG निर्देश का उपयोग URI उपसर्गों के शॉर्टकट के रूप में किया जाता है। फिर इन शॉर्टकट्स का उपयोग नोड प्रकार टैग में किया जा सकता है।
बुनियादी घटक
पारंपरिक ब्लॉक प्रारूप सूची में नया आइटम शुरू करने के लिए हाइफ़न+स्पेस का उपयोग करता है।
--- # Favorite movies
- Casablanca
- North by Northwest
- The Man Who Wasn't There
वैकल्पिक इनलाइन प्रारूप को अल्पविराम+स्पेस द्वारा सीमांकित किया गया है और कोष्ठक में संलग्न किया गया है (जावास्क्रिप्ट ऑब्जेक्ट नोटेशन के समान)।[22]
--- # Shopping list
[milk, pumpkin pie, eggs, juice]
कुंजियाँ को कोलन+स्पेस द्वारा मानों से अलग किया जाता है। इंडेंटेड ब्लॉक, जो YAML डेटा फ़ाइलों में आम हैं, कुंजी/मूल्य जोड़े को अलग करने के लिए इंडेंटेशन और नई लाइनों का उपयोग करते हैं। इनलाइन ब्लॉक, जो कि YAML डेटा स्ट्रीम में आम है, ब्रेसिज़ के बीच कुंजी/मान जोड़े को अलग करने के लिए अल्पविराम+स्पेस का उपयोग करते हैं।
--- # Indented Block
name: John Smith
age: 33
--- # Inline Block
{name: John Smith, age: 33}
स्ट्रिंग्स को उद्धरण चिह्नों की आवश्यकता नहीं है. मल्टी-लाइन स्ट्रिंग्स लिखने के दो तरीके हैं, न्यूलाइन्स को संरक्षित करना (का उपयोग करना)। | कैरेक्टर) और वह जो न्यूलाइन्स को फोल्ड करता है (का उपयोग करके)। > वर्ण), दोनों के बाद नई पंक्ति वर्ण आता है।
data: |
There once was a tall man from Ealing
Who got on a bus to Darjeeling
It said on the door
"Please don't sit on the floor"
So he carefully sat on the ceiling
डिफ़ॉल्ट रूप से, अग्रणी इंडेंटेशन (पहली पंक्ति का) और अनुगामी रिक्त स्थान हटा दिए जाते हैं, हालांकि अन्य व्यवहार को स्पष्ट रूप से निर्दिष्ट किया जा सकता है।
data: >
Wrapped text
will be folded
into a single
paragraph
Blank lines denote
paragraph breaks
मुड़ा हुआ पाठ नई पंक्तियों को रिक्त स्थान में परिवर्तित करता है और प्रमुख रिक्त स्थान को हटा देता है।
--- # The Smiths
- {name: John Smith, age: 33}
- name: Mary Smith
age: 27
- [name, age]: [Rae Smith, 4] # sequences as keys are supported
--- # People, by gender
men: [John Smith, Bill Jones]
women:
- Mary Smith
- Susan Williams
ऑब्जेक्ट और सूचियाँ yaml में महत्वपूर्ण घटक हैं और इन्हें मिश्रित किया जा सकता है। पहला उदाहरण कुंजी-मूल्य वाली वस्तुओं की सूची है, सभी स्मिथ परिवार के लोग हैं। दूसरा उन्हें लिंग के आधार पर सूचीबद्ध करता है; यह कुंजी-मूल्य वाली वस्तु है जिसमें दो सूचियाँ हैं।
उन्नत घटक
दो विशेषताएं जो YAML को अन्य डेटा-क्रमांकन भाषाओं की क्षमताओं से अलग करती हैं, वे संरचनाएं हैं[23] और डेटा टाइपिंग।
YAML संरचनाएं ही फ़ाइल के भीतर कई दस्तावेज़ों के भंडारण, बार-बार नोड्स के लिए संदर्भों के उपयोग और कुंजी के रूप में मनमाने नोड्स के उपयोग को सक्षम करती हैं।[23]
स्पष्टता, सघनता और डेटा प्रविष्टि त्रुटियों से बचने के लिए, YAML नोड एंकर (उपयोग करके) प्रदान करता है &) और संदर्भ (उपयोग करके)। *). एंकर के संदर्भ सभी डेटा प्रकारों के लिए काम करते हैं (नीचे दिए गए उदाहरण में शिप-टू संदर्भ देखें)।
नीचे उपकरण अनुक्रमक में कतार का उदाहरण दिया गया है जिसमें दो चरणों को हर बार पूरी तरह से वर्णित किए बिना बार-बार पुन: उपयोग किया जाता है।
--- # Sequencer protocols for Laser eye surgery
- step: &id001 # defines anchor label &id001
instrument: Lasik 2000
pulseEnergy: 5.4
pulseDuration: 12
repetition: 1000
spotSize: 1mm
- step: &id002
instrument: Lasik 2000
pulseEnergy: 5.0
pulseDuration: 10
repetition: 500
spotSize: 2mm
- Instrument1: *id001 # refers to the first step (with anchor &id001)
- Instrument2: *id002 # refers to the second step
अधिकांश YAML दस्तावेज़ों में स्पष्ट डेटा टाइपिंग शायद ही कभी देखी जाती है क्योंकि YAML सरल प्रकारों का स्वत: पता लगाता है। डेटा प्रकारों को तीन श्रेणियों में विभाजित किया जा सकता है: कोर, परिभाषित और उपयोगकर्ता-परिभाषित। कोर से किसी भी पार्सर में मौजूद होने की उम्मीद की जाती है (उदाहरण के लिए फ्लोट्स, इनट्स, स्ट्रिंग्स, सूचियां, मानचित्र, ...)। कई और उन्नत डेटा प्रकार, जैसे बाइनरी डेटा, को YAML विनिर्देश में परिभाषित किया गया है लेकिन सभी कार्यान्वयन में समर्थित नहीं है। अंत में YAML उपयोगकर्ता-परिभाषित वर्गों, संरचनाओं या प्राइमेटिव्स (उदाहरण के लिए क्वाड-प्रिसिजन फ्लोट्स) को समायोजित करने के लिए स्थानीय रूप से डेटा प्रकार परिभाषाओं को विस्तारित करने का तरीका परिभाषित करता है।
YAML इकाई के डेटाटाइप का स्वतः पता लगाता है, लेकिन कभी-कभी कोई डेटाटाइप को स्पष्ट रूप से डालना चाहता है। सबसे आम स्थिति वह है जहां एकल-शब्द स्ट्रिंग जो संख्या, बूलियन या टैग की तरह दिखती है, उसे उद्धरण चिह्नों के साथ घेरकर या स्पष्ट डेटाटाइप टैग का उपयोग करके अस्पष्टता की आवश्यकता होती है।
---
a: 123 # an integer
b: "123" # a string, disambiguated by quotes
c: 123.0 # a float
d: !!float 123 # also a float via explicit data type prefixed by (!!)
e: !!str 123 # a string, disambiguated by explicit type
f: !!str Yes # a string via explicit type
g: Yes # a boolean True (yaml1.1), string "Yes" (yaml1.2)
h: Yes we have No bananas # a string, "Yes" and "No" disambiguated by context.
YAML के प्रत्येक कार्यान्वयन में प्रत्येक विनिर्देश-परिभाषित डेटा प्रकार नहीं होता है। ये अंतर्निहित प्रकार डबल-विस्मयादिबोधक सिगिल (कंप्यूटर प्रोग्रामिंग) उपसर्ग का उपयोग करते हैं (!!). विशेष रूप से दिलचस्प जो यहां नहीं दिखाए गए हैं वे सेट, ऑर्डर किए गए मानचित्र, टाइमस्टैम्प और हेक्साडेसिमल हैं। यहां बेस64-एन्कोडेड बाइनरी डेटा का उदाहरण दिया गया है।
---
picture: !!binary |
R0lGODdhDQAIAIAAAAAAANn
Z2SwAAAAADQAIAAACF4SDGQ
ar3xxbJ9p0qa7R0YxwzaFME
1IAADs=
YAML के कई कार्यान्वयन ऑब्जेक्ट क्रमांकन के लिए उपयोगकर्ता-परिभाषित डेटा प्रकारों का समर्थन कर सकते हैं। स्थानीय डेटा प्रकार सार्वभौमिक डेटा प्रकार नहीं हैं, लेकिन इन्हें YAML पार्सर लाइब्रेरी का उपयोग करके एप्लिकेशन में परिभाषित किया गया है। स्थानीय डेटा प्रकार एकल विस्मयादिबोधक चिह्न का उपयोग करते हैं (!).
उदाहरण
डेटा-संरचना पदानुक्रम को रूपरेखा इंडेंटेशन द्वारा बनाए रखा जाता है।
---
receipt: Oz-Ware Purchase Invoice
date: 2012-08-06
customer:
first_name: Dorothy
family_name: Gale
items:
- part_no: A4786
descrip: Water Bucket (Filled)
price: 1.47
quantity: 4
- part_no: E1628
descrip: High Heeled "Ruby" Slippers
size: 8
price: 133.7
quantity: 1
bill-to: &id001
street: |
123 Tornado Alley
Suite 16
city: East Centerville
state: KS
ship-to: *id001
specialDelivery: >
Follow the Yellow Brick
Road to the Emerald City.
Pay no attention to the
man behind the curtain.
...
ध्यान दें कि स्ट्रिंग्स को उद्धरण चिह्नों में संलग्न करने की आवश्यकता नहीं है। इंडेंटेशन में रिक्त स्थान की विशिष्ट संख्या तब तक महत्वहीन है जब तक समानांतर तत्वों का बायां औचित्य समान होता है और पदानुक्रमित रूप से नेस्टेड तत्वों को आगे इंडेंट किया जाता है। यह नमूना दस्तावेज़ 7 शीर्ष स्तरीय कुंजियों के साथ सहयोगी सरणी को परिभाषित करता है: कुंजी में से एक, आइटम में 2-तत्व सूची होती है, जिनमें से प्रत्येक तत्व स्वयं अलग-अलग कुंजी के साथ सहयोगी सरणी है। संबंधपरक डेटा और अतिरेक निष्कासन प्रदर्शित किया जाता है: शिप-टू एसोसिएटिव एरे सामग्री को बिल-टू एसोसिएटिव एरे की सामग्री से कॉपी किया जाता है जैसा कि एंकर द्वारा दर्शाया गया है (&) और संदर्भ (*) लेबल. पठनीयता के लिए वैकल्पिक रिक्त पंक्तियाँ जोड़ी जा सकती हैं। एकाधिक दस्तावेज़ ही फ़ाइल/स्ट्रीम में मौजूद हो सकते हैं और अलग-अलग होते हैं ---. वैकल्पिक ... का उपयोग फ़ाइल के अंत में किया जा सकता है (पाइप को बंद किए बिना स्ट्रीम किए गए संचार के अंत का संकेत देने के लिए उपयोगी)।
सुविधाएँ
इंडेंटेड परिसीमन
क्योंकि YAML मुख्य रूप से संरचना के लिए रूपरेखा इंडेंटेशन पर निर्भर करता है, यह विशेष रूप से सीमांकक टकराव के लिए प्रतिरोधी है। स्केलर मानों में उद्धरण चिह्नों और ब्रेसिज़ के प्रति YAML की असंवेदनशीलता का मतलब है कि कोई XML, JSON या यहां तक कि YAML दस्तावेज़ों को YAML दस्तावेज़ के अंदर बस ब्लॉक शाब्दिक में इंडेंट करके एम्बेड कर सकता है (का उपयोग करके) | या >):
---
example: >
HTML goes into YAML without modification
message: |
<blockquote style="font: italic 1em serif">
<p>"Three is always greater than two,
even for large values of two"</p>
<p>--Author Unknown</p>
</blockquote>
date: 2007-06-01
YAML को सभी आंतरिक उद्धरण चिह्नों को उद्धृत करके और उनसे बचकर JSON में रखा जा सकता है। YAML को आरक्षित वर्णों से बचकर XML में रखा जा सकता है (<, >, &, ', ") और व्हाइटस्पेस को परिवर्तित करके, या इसे सीडीएटीए अनुभाग में रखकर।
गैर-पदानुक्रमित डेटा मॉडल
JSON के विपरीत, जो केवल एकल अभिभावक वाले प्रत्येक चाइल्ड नोड के साथ पदानुक्रमित मॉडल में डेटा का प्रतिनिधित्व कर सकता है, YAML सरल संबंधपरक योजना भी प्रदान करता है जो समान डेटा के दोहराव को अनावश्यक रूप से दर्ज करने के बजाय पेड़ में दो या दो से अधिक बिंदुओं से संदर्भित करने की अनुमति देता है। वे बिंदु. यह XML में निर्मित IDREF सुविधा के समान है।[24] फिर YAML पार्सर इन संदर्भों को पूरी तरह से भरे हुए डेटा संरचनाओं में विस्तारित करता है, जिन्हें पढ़ते समय वे दर्शाते हैं, इसलिए जो भी प्रोग्राम पार्सर का उपयोग कर रहा है, उसे XML प्रोसेसर के विपरीत, रिलेशनल एन्कोडिंग मॉडल के बारे में पता होना जरूरी नहीं है, जो संदर्भों का विस्तार नहीं करता है। यह विस्तार कॉन्फ़िगरेशन फ़ाइलों या प्रोसेसिंग प्रोटोकॉल में डेटा प्रविष्टि त्रुटियों को कम करते हुए पठनीयता को बढ़ा सकता है, जहां रिकॉर्ड की अनुक्रमिक श्रृंखला में कई पैरामीटर समान रहते हैं जबकि केवल कुछ भिन्न होते हैं। उदाहरण यह है कि इनवॉइस में शिप-टू और बिल-टू रिकॉर्ड लगभग हमेशा ही डेटा होते हैं।
व्यावहारिक विचार
YAML लाइन-ओरिएंटेड है और इस प्रकार मौजूदा प्रोग्रामों के असंरचित आउटपुट को YAML प्रारूप में परिवर्तित करना अक्सर आसान होता है, जबकि उनमें मूल दस्तावेज़ का अधिकांश स्वरूप बरकरार रहता है। चूँकि संतुलन के लिए कोई समापन टैग, ब्रेसिज़ या उद्धरण चिह्न नहीं हैं, इसलिए आम तौर पर अपरिष्कृत कार्यक्रमों के भीतर वितरित प्रिंट स्टेटमेंट से सीधे अच्छी तरह से गठित YAML उत्पन्न करना आसान होता है। इसी तरह, व्हाइटस्पेस डिलीमीटर ग्रेप, AWK, पर्ल, रूबी और पायथन में लाइन-ओरिएंटेड कमांड का उपयोग करके YAML फ़ाइलों की त्वरित और गंदी फ़िल्टरिंग की सुविधा प्रदान करता है।
विशेष रूप से, मार्कअप भाषाओं के विपरीत, लगातार YAML लाइनों के टुकड़े स्वयं अच्छी तरह से निर्मित YAML दस्तावेज़ होते हैं। इससे पार्सर्स लिखना बहुत आसान हो जाता है, जिसके लिए किसी दस्तावेज़ को उसकी संपूर्णता में संसाधित करने की आवश्यकता नहीं होती है (उदाहरण के लिए टैग खोलने और बंद करने और उद्धृत और एस्केप किए गए वर्णों को नेविगेट करना) इससे पहले कि वे विशिष्ट रिकॉर्ड निकालना शुरू कर दें। यह संपत्ति विशेष रूप से समीचीन है जब एकल, स्टेटलेस पास में, किसी फ़ाइल में रिकॉर्ड्स पर पुनरावृत्ति होती है, जिसकी संपूर्ण डेटा संरचना मेमोरी में रखने के लिए बहुत बड़ी है, या जिसके लिए आइटम को निकालने के लिए पूरी संरचना का पुनर्गठन करना अत्यधिक महंगा होगा।
विपरीत रूप से, हालांकि इसका इंडेंटेड परिसीमन गहराई से निहित पदानुक्रमों को जटिल बनाता प्रतीत हो सकता है, YAML इंडेंट को एकल स्थान जितना छोटा संभालता है, और यह मार्कअप भाषाओं की तुलना में बेहतर संपीड़न प्राप्त कर सकता है। इसके अतिरिक्त, अत्यधिक गहरे इंडेंटेशन से पूरी तरह से बचा जा सकता है: 1) इंडेंटेशन के बिना इनलाइन शैली (यानी JSON-जैसे प्रारूप) पर वापस लौटना; या 2) पदानुक्रम को सपाट रूप में खोलने के लिए रिलेशनल एंकर का उपयोग करना, जिसे YAML पार्सर पारदर्शी रूप से पूर्ण डेटा संरचना में पुनर्गठित करेगा।[25]
सुरक्षा
YAML पूरी तरह से डेटा-प्रस्तुति भाषा है और इस प्रकार इसमें कोई निष्पादन योग्य कमांड नहीं है। जबकि एप्लिकेशन सुरक्षा और क्लाइंट में JavaScript#गलत विश्वास किसी भी डेटा भाषा में स्वाभाविक रूप से संभव है, कार्यान्वयन इतना कुख्यात नुकसान है कि YAML की संबंधित कमांड भाषा की कमी सापेक्ष सुरक्षा लाभ हो सकती है।
हालाँकि, YAML भाषा-विशिष्ट टैग की अनुमति देता है ताकि उन टैग का समर्थन करने वाले पार्सर द्वारा मनमाना स्थानीय ऑब्जेक्ट बनाया जा सके। कोई भी YAML पार्सर जो परिष्कृत ऑब्जेक्ट इंस्टेंटेशन को निष्पादित करने की अनुमति देता है, इंजेक्शन हमले की संभावना को खोलता है। पर्ल पार्सर्स जो मनमानी कक्षाओं की वस्तुओं को लोड करने की अनुमति देते हैं, तथाकथित धन्य मान बनाते हैं। इन मानों का उपयोग अप्रत्याशित व्यवहार को ट्रिगर कर सकता है, उदा. यदि कक्षा अतिभारित ऑपरेटरों का उपयोग करती है। इससे मनमाने ढंग से पर्ल कोड का निष्पादन हो सकता है।[26]
स्थिति पायथन या रूबी पार्सर्स के लिए समान है। PyYAML दस्तावेज़ के अनुसार:[27]
ध्यान दें कि यदि आप इंटरनेट जैसे किसी अविश्वसनीय स्रोत से YAML दस्तावेज़ प्राप्त करते हैं तो मनमाना पायथन ऑब्जेक्ट बनाने की क्षमता खतरनाक हो सकती है। कार्यक्रम yaml.safe_load इस क्षमता को सरल पायथन ऑब्जेक्ट्स जैसे पूर्णांक या सूचियों तक सीमित करता है। [...]
PyYAML आपको किसी भी प्रकार का पायथन ऑब्जेक्ट बनाने की अनुमति देता है। यहां तक कि पायथन कक्षाओं के उदाहरणों का निर्माण भी इसका उपयोग करके किया जा सकता है !!python/object दिन।</ब्लॉककोट>
डेटा प्रोसेसिंग और प्रतिनिधित्व
YAML विनिर्देश इंस्टेंस दस्तावेज़ को प्रेजेंटेशन या कैरेक्टर स्ट्रीम के रूप में पहचानता है।[28] YAML इंस्टेंस दस्तावेज़ में प्राथमिक तार्किक संरचनाएं स्केलर, अनुक्रम और मैपिंग हैं।[29] YAML विनिर्देश कुछ बुनियादी बाधाओं को भी इंगित करता है जो इन प्राथमिक तार्किक संरचनाओं पर लागू होते हैं। उदाहरण के लिए, विनिर्देश के अनुसार, मैपिंग कुंजियों में कोई क्रम नहीं होता है। प्रत्येक मामले में जहां नोड क्रम महत्वपूर्ण है, अनुक्रम का उपयोग किया जाना चाहिए।[30]
इसके अलावा, YAML प्रोसेसर के लिए अनुरूपता को परिभाषित करने में, YAML विनिर्देश दो प्राथमिक संचालन को परिभाषित करता है: डंप और लोड। सभी YAML-संगत प्रोसेसरों को इनमें से कम से कम ऑपरेशन प्रदान करना होगा, और वैकल्पिक रूप से दोनों प्रदान कर सकते हैं।[31] अंत में, YAML विनिर्देश सूचना मॉडल या प्रतिनिधित्व ग्राफ़ को परिभाषित करता है, जिसे डंप और लोड संचालन दोनों के लिए प्रसंस्करण के दौरान बनाया जाना चाहिए, हालांकि इस प्रतिनिधित्व को एपीआई के माध्यम से उपयोगकर्ता को उपलब्ध कराने की आवश्यकता नहीं है।[32]
अन्य क्रमांकन प्रारूपों के साथ तुलना
JSON के साथ तुलना
जावास्क्रिप्ट ऑब्जेक्ट नोटेशन सिंटैक्स YAML संस्करण 1.2 का आधार है, जिसे YAML को आधिकारिक उपसमुच्चय के रूप में JSON के अनुपालन में लाने के स्पष्ट उद्देश्य से प्रख्यापित किया गया था।[4] हालाँकि YAML के पूर्व संस्करण पूरी तरह से संगत नहीं थे,[33] विसंगतियाँ शायद ही ध्यान देने योग्य थीं, और अधिकांश JSON दस्तावेज़ों को Syck जैसे कुछ YAML पार्सर्स द्वारा पार्स किया जा सकता है।[34] ऐसा इसलिए है क्योंकि JSON की सिमेंटिक संरचना YAML लिखने की वैकल्पिक इनलाइन-शैली के बराबर है। जबकि विस्तारित पदानुक्रम को JSON जैसी इनलाइन-शैली में लिखा जा सकता है, यह अनुशंसित YAML शैली नहीं है, सिवाय इसके कि जब यह स्पष्टता में सहायता करता है।
YAML में कई अतिरिक्त सुविधाएं हैं जो JSON में मौजूद नहीं हैं, जिनमें टिप्पणियाँ, एक्स्टेंसिबल डेटा प्रकार, रिलेशनल एंकर, उद्धरण चिह्नों के बिना स्ट्रिंग और कुंजी क्रम को संरक्षित करने वाले मैपिंग प्रकार शामिल हैं।
कॉन्सिज़न के कारण, JSON क्रमबद्धता और डिसेरिएलाइज़ेशन YAML की तुलना में बहुत तेज़ है।[35][36]
TOML के साथ तुलना
TOML को INI_file|.ini फ़ाइल स्वरूप की उन्नति के रूप में डिज़ाइन किया गया था। YAML द्वारा सूचक वर्णों के न्यूनतम उपयोग की तुलना TOML द्वारा उद्धरण चिह्नों और वर्गाकार कोष्ठकों की सख्त आवश्यकता से की जाती है। YAML का ऑफ-साइड_रूल और नेस्टिंग का उपयोग कम वर्बोज़ संरचनाओं की अनुमति देता है, ऐसी सुविधा जो TOML के पास तुलनीय वाक्यात्मक स्तर पर नहीं है, इसके बजाय समान अर्थ संरचना को व्यक्त करने के लिए वे अपनी कुंजी और तालिका नामों में Properties_(programming)#Dot_notation पर निर्भर हैं।[37].
एक्सएमएल के साथ तुलना
YAML में XML में पाए जाने वाले टैग विशेषताओं की अवधारणा का अभाव है। इसके बजाय YAML में एक्स्टेंसिबल प्रकार की घोषणाएँ हैं (वस्तुओं के लिए वर्ग प्रकार सहित)।
YAML में स्वयं XML की भाषा-परिभाषित दस्तावेज़ स्कीमा डिस्क्रिप्टर नहीं है जो, उदाहरण के लिए, किसी दस्तावेज़ को स्व-सत्यापित करने की अनुमति देता है। हालाँकि, YAML के लिए कई बाहरी रूप से परिभाषित स्कीमा डिस्क्रिप्टर भाषाएँ हैं (उदाहरण के लिए सिद्धांत (PHP)PHP), Kwalify और Rx) जो उस भूमिका को पूरा करती हैं। इसके अलावा, YAML दस्तावेज़ में YAML की भाषा-परिभाषित प्रकार की घोषणाओं द्वारा प्रदान किया गया शब्दार्थ अक्सर सरल, सामान्य स्थितियों में सत्यापनकर्ता की आवश्यकता को कम करता है। इसके अतिरिक्त, YAXML, जो XML में YAML डेटा संरचनाओं का प्रतिनिधित्व करता है, XML स्कीमा आयातकों और एक्स्टेंसिबल स्टाइलशीट भाषा परिवर्तन जैसे आउटपुट तंत्र को YAML पर लागू करने की अनुमति देता है।
डेटा-क्रमबद्धता प्रारूपों की तुलना अन्य क्रमबद्धता प्रारूपों के साथ YAML की अधिक व्यापक तुलना प्रदान करती है।
सॉफ़्टवेयर (उत्सर्जक और पार्सर)
निश्चित डेटा संरचनाओं के लिए, YAML फ़ाइलें केवल प्रिंट कमांड का उपयोग करके उत्पन्न की जा सकती हैं जो डेटा और YAML विशिष्ट सजावट दोनों लिखती हैं। हालाँकि, भिन्न, या जटिल, पदानुक्रमित डेटा को डंप करने के लिए, समर्पित YAML एमिटर बेहतर है। इसी तरह, सरल YAML फ़ाइलें (उदाहरण के लिए कुंजी-मूल्य जोड़े) को नियमित अभिव्यक्तियों के साथ आसानी से पार्स किया जाता है। अधिक जटिल, या भिन्न, डेटा संरचनाओं के लिए, औपचारिक YAML पार्सर की अनुशंसा की जाती है।
कई लोकप्रिय भाषाओं के लिए YAML एमिटर और पार्सर मौजूद हैं। उनमें से अधिकांश मूल भाषा में ही लिखे गए हैं। कुछ सी लाइब्रेरी libyaml की भाषा बाइंडिंग हैं; वे तेज़ दौड़ सकते हैं। वहाँ और सी लाइब्रेरी हुआ करती थी, जिसे सिक कहा जाता था, जो भाग्यशाली स्टिफ़ के कारण लिखी गई और अनाथ हो गई: इसका रखरखाव नहीं किया गया है, कोई आधिकारिक स्रोत बंडल नहीं है, और वेब साइट को हाईजैक कर लिया गया है। इसलिए एकमात्र अनुशंसित सी लाइब्रेरी libyaml है। इसे मूल रूप से किरिल सिमोनोव द्वारा विकसित किया गया था। 2018 में, नए अनुरक्षक इयान कॉर्डास्को और इंगी डॉट नेट द्वारा विकास फिर से शुरू किया गया।[38]
C++ प्रोग्रामर के पास C लाइब्रेरी libyaml और C++ लाइब्रेरी libyaml-cpp के बीच विकल्प होता है। दोनों के पास पूरी तरह से स्वतंत्र कोड आधार और पूरी तरह से अलग अप्लिकेशन प्रोग्रामिंग अंतरफलक है। लाइब्रेरी libyaml-cpp में अभी भी प्रमुख संस्करण संख्या 0 है, जो दर्शाता है कि एपीआई किसी भी समय बदल सकता है, जैसा कि वास्तव में संस्करण 0.3 के बाद हुआ था। नेस्टेड तत्वों के विस्तार के उद्देश्य से C# में व्याकरण-केंद्रित कार्यान्वयन लिखा गया है।[39]
YAML के कुछ कार्यान्वयन, जैसे कि पर्ल का YAML.pm, संपूर्ण फ़ाइल (स्ट्रीम) लोड करेगा और इसे सामूहिक रूप से पार्स करेगा। PyYaml जैसे अन्य कार्यान्वयन आलसी हैं और अनुरोध पर ही अगले दस्तावेज़ पर पुनरावृत्त होते हैं। बहुत बड़ी फ़ाइलों के लिए जिनमें दस्तावेज़ों को स्वतंत्र रूप से संभालने की योजना है, प्रसंस्करण से पहले पूरी फ़ाइल को तुरंत चालू करना निषेधात्मक हो सकता है। इस प्रकार YAML.pm में, कभी-कभी किसी फ़ाइल को दस्तावेज़ों में विभाजित करना पड़ता है और उन्हें अलग-अलग पार्स करना पड़ता है। YAML इसे आसान बनाता है, क्योंकि इसके लिए दस्तावेज़ के अंत मार्कर पर विभाजन की आवश्यकता होती है, जिसे पंक्ति की शुरुआत में तीन अवधियों के रूप में परिभाषित किया जाता है जिसके बाद रिक्त स्थान (और संभवतः टिप्पणी) होती है। यह मार्कर सामग्री में वर्जित है.[40]
आलोचना
YAML की इसके महत्वपूर्ण रिक्त स्थान, भ्रमित करने वाली विशेषताओं, असुरक्षित डिफ़ॉल्ट और इसके जटिल और अस्पष्ट विनिर्देश के लिए आलोचना की गई है:[41][42][43]
- कॉन्फ़िगरेशन फ़ाइलें उपयोगकर्ताओं को इसका एहसास हुए बिना कमांड निष्पादित कर सकती हैं या सामग्री लोड कर सकती हैं।[41]* बड़ी YAML फ़ाइलों को संपादित करना कठिन है, क्योंकि इंडेंटेशन त्रुटियों पर ध्यान नहीं दिया जा सकता है।[41]* टाइप ऑटोडिटेक्शन त्रुटियों का स्रोत है। उदाहरण के लिए, अउद्धृत
YesऔरNOबूलियन में परिवर्तित हो जाते हैं; सॉफ़्टवेयर संस्करण संख्याओं को फ़्लोट में परिवर्तित किया जा सकता है।[41][44] - टर्मिनेटर की अनुपस्थिति के कारण काटी गई फ़ाइलों को अक्सर वैध YAML के रूप में समझा जाता है।
- मानक की जटिलता के कारण असंगत कार्यान्वयन हुआ और भाषा गैर-पोर्टेबल बन गई।[41][45]
YAML की कथित खामियों और जटिलता के कारण strictYAML और NestedText जैसे सख्त विकल्प सामने आए हैं।[44]
यह भी देखें
- डेटा-क्रमांकन प्रारूपों की तुलना
- हल्की मार्कअप भाषा
संदर्भ
- ↑ "yaml". Apple Developer Documentation: Uniform Type Identifiers. Apple Inc.
- ↑ 2.0 2.1 2.2 2.3 "Yet Another Markup Language (YAML) 1.0 / Working Draft". 10 Dec 2001.
- ↑ "YAML specification v1.2.2 Section 6.1. Indentation Spaces".
- ↑ 4.0 4.1 4.2 "YAML Ain't Markup Language (YAML) Version 1.2". YAML.org. Retrieved 2019-05-29.
- ↑ "Built-in Types — Python 3.9.6 documentation". docs.python.org. Retrieved 2021-08-19.
- ↑ "Standard built-in objects - JavaScript | MDN". developer.mozilla.org (in English). Retrieved 2021-08-19.
- ↑ corob-msft (17 August 2021). "अंतर्निहित प्रकार (C++)". docs.microsoft.com (in English). Retrieved 2021-08-19.
- ↑ "आधिकारिक YAML वेब साइट". yaml.org.
- ↑ "YAML संपादन के लिए विम की स्थापना". arthurkoziel.com.
- ↑ "यमल मोड". EmacsWiki. 2015-06-12. Retrieved 2016-12-05.
- ↑ aukaost. "सुंदर YAML - पैकेज - पैकेज नियंत्रण". Packagecontrol.io. Retrieved 2016-12-05.
- ↑ "yaml | Eclipse Plugins, Bundles and Products - Eclipse Marketplace". Marketplace.eclipse.org. Retrieved 2016-12-05.
- ↑ Ruth Kusterer. "नेटबीन्स आईडीई - रूबी और रूबी ऑन रेल्स डेवलपमेंट". Netbeans.org. Retrieved 2016-12-05.
- ↑ "YAML मार्कअप भाषा नहीं है". September 24, 2006. Archived from the original on 2006-09-24.
- ↑ Evans, Clark (May 11, 2001). "वाईएएमएल ड्राफ्ट 0.1". Yahoo! Tech groups: sml-dev. Archived from the original on 2001-06-03. Retrieved 2019-03-21.
- ↑ 16.0 16.1 "YAML मार्कअप भाषा नहीं है: के बारे में". YAML.org. Retrieved 2019-05-29.
- ↑ "फिर भी एक और मार्कअप लैंग्वेज (YAML) 1.0". YAML.org. Retrieved 2019-05-29.
- ↑ "फिर भी एक और मार्कअप लैंग्वेज (YAML) 1.0". stackoverflow.com. Retrieved 2021-03-24.
- ↑ "YAML 1.1 Reference Card". YAML.org. Retrieved 2019-05-29.
- ↑ "YAML Ain't Markup Language (YAML) Version 1.2". YAML.org. Retrieved 2019-05-29.
- ↑ "YAML Ain't Markup Language (YAML) Version 1.2". YAML.org. Retrieved 2019-05-29.
- ↑ "क्लाउड आधारित प्रबंधन ऐप्स". JigoCloud.com. Archived from the original on 2016-09-17. Retrieved 2016-09-28.
- ↑ 23.0 23.1 "YAML 1.2 संरचनाओं की विशिष्टता". YAML.org. Retrieved 2019-05-29.
- ↑ "एक्स्टेंसिबल मार्कअप लैंग्वेज (एक्सएमएल) 1.0 (दूसरा संस्करण)". W3.org. Retrieved 27 May 2015.
- ↑ "Free Courses | Introduction to YAML - A hands -on course". Insidelearn (in English). Retrieved 2022-08-04.
- ↑ "वाईएएमएल". Teknik Informatika. 2022-08-04. Retrieved 2022-08-04.
- ↑ "PyYAML दस्तावेज़ीकरण, YAML लोड हो रहा है". Pyyaml.org. Retrieved 2016-09-28.
- ↑ "मार्कअप लैंग्वेज (YAML) संस्करण 1.1 नहीं है". YAML.org. Retrieved 2019-05-29.
- ↑ Additional, optional-use, logical structures are enumerated in the YAML types repository."Language-Independent Types for YAML Version 1.1". YAML.org. Retrieved 2019-05-29. The tagged types in the YAML types repository are optional and therefore not essential for conformant YAML processors. "The use of these tags is not mandatory."
- ↑ "YAML मार्कअप लैंग्वेज (YAML) संस्करण 1.1 नहीं है". YAML.org. Retrieved 2019-05-29.
- ↑ "मार्कअप लैंग्वेज (YAML) संस्करण 1.1 नहीं है". YAML.org. Retrieved 2019-05-29.
- ↑ "YAML मार्कअप लैंग्वेज (YAML) संस्करण 1.1 नहीं है". YAML.org. Retrieved 2019-05-29.
- ↑ The incompatibilities were as follows: JSON allows extended character sets like UTF-32 and had incompatible unicode character escape syntax relative to YAML; YAML required a space after separators like comma, equals, and colon while JSON does not. Some non-standard implementations of JSON extend the grammar to include Javascript's
/*...*/comments. Handling such edge cases may require light pre-processing of the JSON before parsing as in-line YAML. See also [1]. - ↑ Parsing JSON with SYCK. Note that e.g. Symfony's YAML parser does not support line breaks inside [] or {} structures, which is a major incompatibility with JSON.
- ↑ "गो में YAML बनाम JSON बनाम XML". Medium. 15 June 2021. Retrieved 7 March 2023.
- ↑ "YAML और JSON के बीच अंतर". Baeldung. 9 July 2020. Retrieved 7 March 2023.
- ↑ What is wrong with TOML?
- ↑ yaml-core@lists.sourceforge.net, mail of June 27, 2018.
- ↑ "लेक्सेपर्स के लिए YAML व्याकरण". GitHub.
- ↑ "YAML मार्कअप लैंग्वेज नहीं है (YAML) संस्करण 1.2 # 9.1.2 दस्तावेज़ मार्कर". YAML.org. Retrieved 2019-05-29.
- ↑ 41.0 41.1 41.2 41.3 41.4 Tournoij, Martin (4 Sep 2016). "YAML: probably not so great after all". Retrieved 16 May 2019.
- ↑ "यह बहुत सारा YAML है". Retrieved 16 May 2019.
- ↑ "वाईएएमएल बेकार है". GitHub. Retrieved 16 May 2019.
- ↑ 44.0 44.1 "नॉर्वे समस्या - क्यों स्ट्रिक्टवाईएएमएल अंतर्निहित टाइपिंग करने से इंकार कर देता है और आपको भी ऐसा करना चाहिए". Retrieved 3 June 2020.
- ↑ "YAML Test Matrix".