YAML - त्वरित गाइड

YAML Ain't Markup Language एक डेटा क्रमांकन भाषा है जो डेटा के बारे में उपयोगकर्ता की अपेक्षाओं से मेल खाती है। यह मानव के अनुकूल होने के लिए डिज़ाइन किया गया है और अन्य प्रोग्रामिंग भाषाओं के साथ पूरी तरह से काम करता है। यह डेटा का प्रबंधन करने के लिए उपयोगी है और इसमें यूनिकोड प्रिंट करने योग्य वर्ण शामिल हैं। यह अध्याय आपको YAML का परिचय देगा और आपको इसकी विशेषताओं के बारे में एक विचार देगा।

प्रारूप

नीचे दिखाए गए पाठ पर विचार करें -

Quick brown fox jumped over the lazy dog.

इसके लिए YAML पाठ को नीचे दिखाए अनुसार दर्शाया जाएगा -

yaml.load(Quick brown fox jumped over the lazy dog.)
>>'Quick brown fox jumped over the lazy dog.'

ध्यान दें कि YAML स्ट्रिंग प्रारूप में मूल्य लेता है और ऊपर बताए अनुसार आउटपुट का प्रतिनिधित्व करता है।

उदाहरण

आइए हम निम्नलिखित उदाहरणों की सहायता से YAML के स्वरूपों को समझते हैं -

"पी" की निम्नलिखित बिंदु संख्या पर विचार करें, जिसका मूल्य 3.1415926 है। YAML में, इसे नीचे दिखाए गए अनुसार एक फ्लोटिंग संख्या के रूप में दर्शाया गया है -

>>> yaml.load('3.1415926536')
3.1415926536

मान लीजिए, कई डेटा विशिष्ट डेटा संरचना में लोड किए जाने हैं, जैसा कि नीचे बताया गया है -

eggs
ham
spam
French basil salmon terrine

जब आप इसे YAML में लोड करते हैं, तो मान एक सरणी डेटा संरचना में लिए जाते हैं जो सूची का एक रूप है। आउटपुट नीचे दिखाया गया है -

>>> yaml.load('''
   - eggs
   - ham
   - spam
   - French basil salmon terrine
   ''')
['eggs', 'ham', 'spam', 'French basil salmon terrine']

विशेषताएं

YAML में महत्वपूर्ण मार्कअप के साथ मार्कअप लैंग्वेज शामिल होती है, डॉक्यूमेंट मार्कअप के साथ डेटा-ओरिएंटेड लैंग्वेज को अलग करने के लिए। YAML के डिजाइन लक्ष्य और विशेषताएं नीचे दी गई हैं -

  • चुस्त कार्यप्रणाली और इसकी भाषाओं जैसे पेरल, पायथन, पीएचपी, रूबी और जावास्क्रिप्ट की मूल डेटा संरचनाओं से मेल खाता है

  • YAML डेटा प्रोग्रामिंग भाषाओं के बीच पोर्टेबल है

  • डेटा संगत डेटा मॉडल शामिल है

  • मनुष्यों द्वारा आसानी से पठनीय

  • एक-दिशा प्रसंस्करण का समर्थन करता है

  • कार्यान्वयन और उपयोग में आसानी

अब आपके पास YAML और इसकी विशेषताओं के बारे में एक विचार है, आइए हम सिंटैक्स और अन्य कार्यों के साथ इसकी मूल बातें जानें। याद रखें कि YAML में एक मानव पठनीय संरचित प्रारूप शामिल है।

YAML फ़ाइल बनाने के नियम

जब आप YAML में एक फ़ाइल बना रहे हैं, तो आपको निम्नलिखित बुनियादी नियमों को याद रखना चाहिए -

  • YAML संवेदनशील है

  • फाइलें होनी चाहिए .yaml विस्तार के रूप में

  • YAML फ़ाइल बनाते समय YAML टैब के उपयोग की अनुमति नहीं देता है; इसके बजाय रिक्त स्थान की अनुमति है

YAML फ़ाइल के बुनियादी घटक

YAML के मूल घटक नीचे वर्णित हैं -

पारंपरिक ब्लॉक प्रारूप

यह ब्लॉक प्रारूप का उपयोग करता है hyphen+spaceएक निर्दिष्ट सूची में एक नया आइटम शुरू करने के लिए। नीचे दिखाए गए उदाहरण को ध्यान से देखें -

--- # Favorite movies
 - Casablanca
 - North by Northwest
 - The Man Who Wasn't There

Inline Format

इनलाइन प्रारूप के साथ सीमांकित किया गया है comma and spaceऔर आइटम JSON में संलग्न हैं। नीचे दिखाए गए उदाहरण को ध्यान से देखें -

--- # Shopping list
   [milk, groceries, eggs, juice, fruits]

Folded Text

मुड़ा हुआ पाठ नए स्थानों को रिक्त स्थान में परिवर्तित करता है और प्रमुख व्हाट्सएप को हटाता है। नीचे दिखाए गए उदाहरण को ध्यान से देखें -

- {name: John Smith, age: 33}
- name: Mary Smith
  age: 27

जो संरचना YAML के सभी बुनियादी सम्मेलनों का अनुसरण करती है, उसे नीचे दिखाया गया है -

men: [John Smith, Bill Jones]
women:
  - Mary Smith
  - Susan Williams

YAML बुनियादी तत्वों का सारांश

  • YAML मूल तत्वों का सारांश यहाँ दिया गया है: YAML में टिप्पणियाँ (से शुरू होती हैं)#) चरित्र।

  • व्हाट्सएप द्वारा टिप्पणियों को अन्य टोकन से अलग किया जाना चाहिए।

  • व्हाट्सएप का इंडेंटेशन संरचना को दर्शाने के लिए उपयोग किया जाता है।

  • टैब को YAML फ़ाइलों के लिए इंडेंटेशन के रूप में शामिल नहीं किया गया है।

  • सूची सदस्यों को एक प्रमुख हाइफ़न द्वारा चिह्नित किया जाता है (-)।

  • सूची सदस्यों को वर्ग कोष्ठक में संलग्न किया जाता है और अल्पविराम द्वारा अलग किया जाता है।

  • सहयोगी सरणियों का उपयोग बृहदान्त्र का प्रतिनिधित्व करते हैं ( : )मुख्य मूल्य जोड़ी के प्रारूप में। वे घुंघराले ब्रेसिज़ में संलग्न हैं{}

  • एकल धाराओं वाले कई दस्तावेज़ों को 3 हाइफ़न (---) के साथ अलग किया जाता है।

  • प्रत्येक फ़ाइल में बार-बार नोड्स को एक एम्परसेंड द्वारा निरूपित किया जाता है (&) और तारांकन द्वारा (*) बाद में चिह्नित करें।

  • YAML को हमेशा कॉलोन और अल्पविरामों की आवश्यकता होती है जिनका उपयोग सूची विभाजक के रूप में किया जाता है, जिसके बाद स्केलर मानों के साथ स्थान होता है।

  • नोड्स को विस्मयादिबोधक चिह्न के साथ लेबल किया जाना चाहिए (!) या डबल विस्मयादिबोधक चिह्न (!!), इसके बाद स्ट्रिंग जो एक URI या URL में विस्तारित की जा सकती है।

इंडेंटेशन और पृथक्करण दो मुख्य अवधारणाएं हैं जब आप किसी भी प्रोग्रामिंग भाषा सीख रहे हैं। यह अध्याय YAML से संबंधित इन दो अवधारणाओं के बारे में विस्तार से बात करता है।

YAML का इंडेंटेशन

YAML में कोई अनिवार्य स्थान शामिल नहीं है। इसके अलावा, लगातार बने रहने की आवश्यकता नहीं है। मान्य YAML इंडेंटेशन नीचे दिखाया गया है -

a:
   b:
      - c
      -  d
      - e
f:
      "ghi"
  • YAML में इंडेंटेशन के साथ काम करते समय आपको निम्नलिखित नियमों को याद रखना चाहिए: फ्लो ब्लॉक्स का उद्देश्य कम से कम कुछ रिक्त स्थान के साथ आसपास के ब्लॉक स्तर के साथ होना चाहिए।

  • YAML की प्रवाह सामग्री कई पंक्तियों तक फैली हुई है। प्रवाह सामग्री की शुरुआत के साथ शुरू होता है{ या [

  • ब्लॉक सूची आइटम में आसपास के ब्लॉक स्तर के समान इंडेंटेशन शामिल है क्योंकि - इंडेंटेशन का एक हिस्सा माना जाता है।

बरकरार ब्लॉक का उदाहरण

निम्न कोड का निरीक्षण करें जो उदाहरणों के साथ इंडेंटेशन दिखाता है -

--- !clarkevans.com/^invoice
invoice: 34843
date   : 2001-01-23
bill-to: &id001
   given  : Chris
   family : Dumars
   address:
      lines: |
            458 Walkman Dr.
            Suite #292
      city    : Royal Oak
      state   : MI
      postal  : 48046
ship-to: *id001
product:
    - sku         : BL394D
      quantity    : 4
      description : Basketball
      price       : 450.00
   - sku         : BL4438H
      quantity    : 1
      description : Super Hoop
      price       : 2392.00
tax  : 251.42
total: 4443.52
comments: >
    Late afternoon is best.
    Backup contact is Nancy
    Billsmer @ 338-4338.

स्ट्रिंग्स का पृथक्करण

डबल-उद्धृत स्ट्रिंग का उपयोग करके स्ट्रिंग्स को अलग किया जाता है। यदि आप किसी दिए गए स्ट्रिंग में न्यूलाइन वर्णों से बचते हैं, तो इसे पूरी तरह से हटा दिया जाता है और अंतरिक्ष मूल्य में अनुवादित किया जाता है।

उदाहरण

इस उदाहरण में हमने स्ट्रिंग प्रकार के डेटा के साथ एक सरणी संरचना के रूप में सूचीबद्ध जानवरों की सूची पर ध्यान केंद्रित किया है। प्रत्येक नए तत्व को उपसर्ग के रूप में उल्लिखित हाइफ़न के एक उपसर्ग के साथ सूचीबद्ध किया गया है।

-
 - Cat
 - Dog
 - Goldfish
-
 - Python
 - Lion
 - Tiger

YAML में स्ट्रिंग प्रतिनिधित्व की व्याख्या करने के लिए एक और उदाहरण नीचे वर्णित है।

errors:
      messages:
         already_confirmed: "was already confirmed, please try signing in"
         confirmation_period_expired: "needs to be confirmed within %{period}, please request a new one"
         expired: "has expired, please request a new one"
         not_found: "not found"
         not_locked: "was not locked"
         not_saved:
            one: "1 error prohibited this %{resource} from being saved:"
            other: "%{count} errors prohibited this %{resource} from being saved:"

यह उदाहरण त्रुटि संदेशों के सेट को संदर्भित करता है जिसका उपयोग उपयोगकर्ता मुख्य पहलू का उल्लेख करके और तदनुसार मूल्यों को प्राप्त करने के लिए कर सकता है। YAML का यह पैटर्न JSON की संरचना का अनुसरण करता है जिसे उपयोगकर्ता द्वारा समझा जा सकता है जो YAML में नया है।

अब जब आप YAML के सिंटैक्स और बेसिक्स के साथ सहज होते हैं, तो हम इसके विवरण में आगे बढ़ते हैं। इस अध्याय में, हम देखेंगे कि कैसे YAML में टिप्पणियों का उपयोग किया जाए।

YAML supports single line comments। इसकी संरचना नीचे एक उदाहरण की मदद से बताई गई है -

# this is single line comment.

YAML does not support multi line comments। यदि आप कई लाइनों के लिए टिप्पणियां प्रदान करना चाहते हैं, तो आप ऐसा कर सकते हैं जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है -

# this
# is a multiple
# line comment

टिप्पणियों की विशेषताएं

YAML में टिप्पणियों की विशेषताएं नीचे दी गई हैं -

  • एक टिप्पणी ब्लॉक निष्पादन के दौरान छोड़ दिया जाता है।

  • टिप्पणियाँ निर्दिष्ट कोड ब्लॉक के लिए विवरण जोड़ने में मदद करती हैं।

  • टिप्पणियां स्केलर के अंदर प्रकट नहीं होनी चाहिए।

  • YAML में हैश प्रतीक (#) से बचने का कोई तरीका शामिल नहीं है इसलिए मल्टी-लाइन स्ट्रिंग के भीतर इसलिए कच्चे स्ट्रिंग मान से टिप्पणी को विभाजित करने का कोई तरीका नहीं है।

एक संग्रह के भीतर टिप्पणी नीचे दी गई है -

key: #comment 1
   - value line 1
   #comment 2
   - value line 2
   #comment 3
   - value line 3

YAML ब्लॉक टिप्पणी करने के लिए शॉर्टकट कुंजी संयोजन है Ctrl+Q

यदि आप उपयोग कर रहे हैं Sublime Text editorब्लॉक टिप्पणी करने के लिए चरणों का उल्लेख नीचे दिया गया है -

ब्लॉक का चयन करें। लिनक्स और विंडोज पर "CTRL + /" और मैक ऑपरेटिंग सिस्टम के लिए "CMD + /" का उपयोग करें। ब्लॉक को निष्पादित करें।

ध्यान दें कि यदि आप उपयोग कर रहे हैं तो वही चरण लागू होते हैं Visual Studio Code Editor। यह हमेशा उपयोग करने के लिए अनुशंसित हैSublime Text Editor यह सबसे ऑपरेटिंग सिस्टम द्वारा समर्थित के रूप में YAML फ़ाइलों को बनाने के लिए और डेवलपर के अनुकूल शॉर्टकट कुंजी भी शामिल है।

YAML में ब्लॉक संग्रह शामिल हैं जो गुंजाइश के लिए इंडेंटेशन का उपयोग करते हैं। यहां, प्रत्येक प्रविष्टि एक नई लाइन से शुरू होती है। संग्रह में ब्लॉक अनुक्रम एक के साथ प्रत्येक प्रविष्टि का संकेत देते हैंdash and space(-)। YAML में, ब्लॉक संग्रह शैलियों को किसी विशिष्ट संकेतक द्वारा निरूपित नहीं किया जाता है। YAML में ब्लॉक संग्रह अन्य स्केलर राशियों से अलग हो सकता है, जिनमें प्रमुख मूल्य जोड़ी की पहचान शामिल है।

मैपिंग JSON संरचना में शामिल प्रमुख मूल्य का प्रतिनिधित्व है। इसका उपयोग बहु-भाषी सहायता प्रणालियों और मोबाइल अनुप्रयोगों में एपीआई के निर्माण में अक्सर किया जाता है। मैपिंग के उपयोग के साथ मुख्य मूल्य जोड़ी प्रतिनिधित्व का उपयोग करते हैंcolon and space (:)।

उदाहरण

स्केलर के अनुक्रम के उदाहरण पर विचार करें, उदाहरण के लिए गेंद खिलाड़ियों की सूची जैसा कि नीचे दिखाया गया है -

- Mark Joseph
- James Stephen
- Ken Griffey

निम्न उदाहरण स्केलर को स्केलिंग को दिखाता है -

hr: 87
avg: 0.298
rbi: 149

निम्नलिखित उदाहरण अनुक्रम को मैपिंग स्केल दिखाता है -

European:
- Boston Red Sox
- Detroit Tigers
- New York Yankees

national:
- New York Mets
- Chicago Cubs
- Atlanta Braves

संग्रह का उपयोग अनुक्रम मैपिंग के लिए किया जा सकता है जो नीचे दिखाए गए हैं -

-
   name: Mark Joseph
   hr: 87
   avg: 0.278
-
   name: James Stephen
   hr: 63
   avg: 0.288

संग्रह के साथ, YAML में स्थान को निरूपित करने के लिए इंडेंटेशन का उपयोग करने के बजाय स्पष्ट संकेतकों का उपयोग करके प्रवाह शैलियों को शामिल किया गया है। संग्रह में प्रवाह अनुक्रम वर्ग कोष्ठक में संलग्न अल्पविराम से अलग सूची के रूप में लिखा गया है। संग्रह के लिए सबसे अच्छा चित्रण जो PHP फ्रेमवर्क में सिम्फनी की तरह शामिल है।

[PHP, Perl, Python]

ये संग्रह दस्तावेजों में संग्रहीत हैं। YAML में दस्तावेजों के पृथक्करण को तीन हाइफ़न या डैश (---) के साथ दर्शाया गया है। दस्तावेज़ का अंत तीन डॉट्स (…) के साथ चिह्नित है।

YAML में दस्तावेजों के पृथक्करण को तीन डैश (---) द्वारा दर्शाया गया है। दस्तावेज़ का अंत तीन डॉट्स (…) के साथ दर्शाया गया है।

दस्तावेज़ प्रतिनिधित्व को संरचना प्रारूप के रूप में संदर्भित किया जाता है जो नीचे उल्लिखित है -

# Ranking of 1998 home runs
---
- Mark Joseph
- James Stephen
- Ken Griffey 

# Team ranking
---
- Chicago Cubs
- St Louis Cardinals

अंतरिक्ष के संयोजन के साथ एक प्रश्न चिह्न संरचना में एक जटिल मानचित्रण को इंगित करता है। एक ब्लॉक संग्रह के भीतर, उपयोगकर्ता डैश, कोलन और प्रश्न चिह्न के साथ संरचना को शामिल कर सकता है। निम्नलिखित उदाहरण दृश्यों के बीच मानचित्रण को दर्शाता है -

- 2001-07-23
? [ New York Yankees,Atlanta Braves ]
: [ 2001-07-02, 2001-08-12, 2001-08-14]

YAML में स्केल को ब्लॉक प्रारूप में शाब्दिक प्रकार का उपयोग करके लिखा जाता है जिसे ()|)। यह लाइन ब्रेक काउंट को दर्शाता है। YAML में, स्केलर्स को तह शैली में लिखा जाता है (>) जहां प्रत्येक पंक्ति एक तह स्थान को दर्शाती है जो एक के साथ समाप्त होता है empty line या more indented लाइन।

नई लाइनों को शाब्दिक रूप में संरक्षित किया गया है -

ASCII Art
--- |
\//||\/||
// || ||__

तह newlines के लिए संरक्षित कर रहे हैं more indented lines तथा blank lines जैसा कि नीचे दिखाया गया है -

>
Sammy Sosa completed another
fine season with great stats.
63 Home Runs
0.288 Batting Average
What a year!

YAML प्रवाह स्केलर में सादे शैली और उद्धृत शैली शामिल हैं। डबल उद्धृत शैली में विभिन्न एस्केप सीक्वेंस शामिल हैं। फ्लो स्केलर में कई लाइनें शामिल हो सकती हैं; इस संरचना में लाइन ब्रेक हमेशा मुड़े होते हैं।

plain:
This unquoted scalar
spans many lines.
quoted: "So does this
quoted scalar.\n"

YAML में, एक विशिष्ट प्रकार के एप्लिकेशन के साथ अनटैग नोड्स निर्दिष्ट किए जाते हैं। टैग विनिर्देश के उदाहरण आमतौर पर उपयोग करते हैंseq, map तथा strYAML टैग भंडार के लिए प्रकार। टैग्स को नीचे दिए गए उदाहरणों के रूप में दर्शाया गया है -

पूर्णांक टैग

इन टैगों में पूर्णांक मान शामिल हैं। उन्हें संख्यात्मक टैग भी कहा जाता है।

canonical: 12345
decimal: +12,345
sexagecimal: 3:25:45
octal: 014
hexadecimal: 0xC

दशमलव संख्याएं

इन टैग में दशमलव और घातीय मान शामिल हैं। उन्हें घातीय टैग भी कहा जाता है।

canonical: 1.23015e+3
exponential: 12.3015e+02
sexagecimal: 20:30.15
fixed: 1,230.15
negative infinity: -.inf
not a number: .NaN

विविध टैग

इसमें विभिन्न प्रकार के पूर्णांक, अस्थायी और स्ट्रिंग मान शामिल हैं। इसलिए इसे विविध टैग कहा जाता है।

null: ~
true: y
false: n
string: '12345'

निम्नलिखित पूर्ण लंबाई का उदाहरण YAML के निर्माण को निर्दिष्ट करता है जिसमें प्रतीक और विभिन्न प्रतिनिधित्व शामिल हैं जो JSON प्रारूप में उन्हें परिवर्तित या संसाधित करते समय सहायक होंगे। इन विशेषताओं को JSON दस्तावेजों में प्रमुख नामों के रूप में भी कहा जाता है। ये सूचनाएं सुरक्षा उद्देश्यों के लिए बनाई गई हैं।

उपरोक्त YAML प्रारूप डिफॉल्ट्स, एडेप्टर और होस्ट की विभिन्न विशेषताओं के साथ विभिन्न विशेषताओं का प्रतिनिधित्व करता है। YAML उत्पन्न की गई प्रत्येक फ़ाइल का एक लॉग भी रखता है जो उत्पन्न त्रुटि संदेशों का ट्रैक रखता है। JSON प्रारूप में निर्दिष्ट YAML फ़ाइल को परिवर्तित करने पर हमें नीचे बताए अनुसार वांछित आउटपुट मिलता है -

defaults: &defaults
   adapter:  postgres
   host:     localhost

development:
   database: myapp_development
   <<: *defaults

test:
   database: myapp_test
   <<: *defaults

आइए YAML को JSON फॉर्मेट में कन्वर्ट करें और आउटपुट पर चेक करें।

{
   "defaults": {
      "adapter": "postgres",
      "host": "localhost"
   },
   "development": {
      "database": "myapp_development",
      "adapter": "postgres",
      "host": "localhost"
   },
   "test": {
      "database": "myapp_test",
      "adapter": "postgres",
      "host": "localhost"
   }
}

"<<: *" के एक उपसर्ग के साथ कुंजी को चूक के रूप में शामिल किया गया है और जब आवश्यकता होती है तो एक ही कोड को बार-बार लिखने की आवश्यकता नहीं होती है।

YAML प्रक्रिया प्रवाह के लिए एक मानक प्रक्रिया का पालन करता है। YAML में मूल डेटा संरचना में नोड्स जैसे सरल अभ्यावेदन शामिल हैं। इसे रिप्रेजेंटेशन नोड ग्राफ भी कहा जाता है।

इसमें मैपिंग, सीक्वेंस और स्केलर मात्राएँ शामिल हैं जिन्हें क्रमबद्ध पेड़ बनाने के लिए क्रमबद्ध किया जा रहा है। क्रमांकन के साथ वस्तुओं को बाइट्स की धारा के साथ परिवर्तित किया जाता है।

क्रमिक घटना वृक्ष निम्नलिखित आरेख में दर्शाए गए चरित्र धाराओं की प्रस्तुति बनाने में मदद करता है।

रिवर्स प्रक्रिया धारावाहिक घटना पेड़ में बाइट्स की धारा को पार्स करती है। बाद में, नोड्स नोड ग्राफ में परिवर्तित हो जाते हैं। ये मान बाद में YAML मूल डेटा संरचना में परिवर्तित हो जाते हैं। नीचे दिए गए आंकड़े यह बताते हैं -

YAML में जानकारी का उपयोग दो तरीकों से किया जाता है: machine processing तथा human consumption। YAML में प्रोसेसर को ऊपर दिए गए आरेख में पूरक विचारों के बीच जानकारी परिवर्तित करने की प्रक्रिया के लिए एक उपकरण के रूप में उपयोग किया जाता है। यह अध्याय उन सूचना संरचनाओं का वर्णन करता है जो किसी दिए गए आवेदन में एक YAML प्रोसेसर प्रदान करना चाहिए।

YAML में सीरियल प्रारूप में डेटा ऑब्जेक्ट्स का प्रतिनिधित्व करने के लिए एक क्रमांकन प्रक्रिया शामिल है। YAML जानकारी के प्रसंस्करण में तीन चरण शामिल हैं:Representation, Serialization, Presentation and parsing। आइए हम उनमें से प्रत्येक पर विस्तार से चर्चा करें।

प्रतिनिधित्व

YAML नोड्स के तीन प्रकारों का उपयोग करके डेटा संरचना का प्रतिनिधित्व करता है: sequence, mapping तथा scalar

अनुक्रम

अनुक्रम अनुक्रमित प्रविष्टियों की संख्या को संदर्भित करता है, जो मुख्य मूल्य जोड़ी के अनियंत्रित एसोसिएशन को मैप करता है। यह पर्ल या पायथन सरणी सूची से मेल खाता है।

नीचे दिखाया गया कोड अनुक्रम प्रतिनिधित्व का एक उदाहरण है -

product:
   - sku         : BL394D
     quantity    : 4
     description : Football
     price       : 450.00
   - sku         : BL4438H
     quantity    : 1
     description : Super Hoop
     price       : 2392.00

मानचित्रण

दूसरी ओर मानचित्रण शब्दकोश डेटा संरचना या हैश तालिका का प्रतिनिधित्व करता है। उसी का एक उदाहरण नीचे दिया गया है -

batchLimit: 1000
threadCountLimit: 2
key: value
keyMapping: <What goes here?>

Scalars

स्केलर स्ट्रिंग, पूर्णांक, दिनांक और परमाणु डेटा प्रकारों के मानक मूल्यों का प्रतिनिधित्व करते हैं। ध्यान दें कि YAML में नोड्स भी शामिल हैं जो डेटा प्रकार संरचना को निर्दिष्ट करते हैं। स्केलर पर अधिक जानकारी के लिए, कृपया इस ट्यूटोरियल के अध्याय 6 को देखें।

क्रमबद्धता

YAML में सीरियलाइज़ेशन प्रक्रिया की आवश्यकता होती है जो मानव के अनुकूल महत्वपूर्ण आदेश और एंकर नामों को आसान बनाती है। क्रमांकन का परिणाम एक YAML क्रमांकन वृक्ष है। यह YAML डेटा के ईवेंट कॉल की एक श्रृंखला का उत्पादन करने के लिए ट्रैवर्स किया जा सकता है।

क्रमांकन के लिए एक उदाहरण नीचे दिया गया है -

consumer:
   class: 'AppBundle\Entity\consumer'
   attributes:
      filters: ['customer.search', 'customer.order', 'customer.boolean']
   collectionOperations:
      get:
         method: 'GET'
         normalization_context:
       groups: ['customer_list']
   itemOperations:
      get:
         method: 'GET'
         normalization_context:
            groups: ['customer_get']

प्रस्तुतीकरण

YAML क्रमांकन के अंतिम आउटपुट को प्रस्तुति कहा जाता है। यह मानव के अनुकूल तरीके से एक चरित्र धारा का प्रतिनिधित्व करता है। YAML प्रोसेसर में स्ट्रीम बनाने, इंडेंटेशन और फ़ॉर्मेटिंग सामग्री को संभालने के लिए विभिन्न प्रस्तुति विवरण शामिल हैं। यह पूरी प्रक्रिया उपयोगकर्ता की प्राथमिकताओं द्वारा निर्देशित है।

YAML प्रस्तुति प्रक्रिया के लिए एक उदाहरण JSON मूल्य का परिणाम है। बेहतर समझ के लिए नीचे दिए गए कोड को देखें -

{
   "consumer": {
      "class": "AppBundle\\Entity\\consumer",
      "attributes": {
         "filters": [
            "customer.search",
            "customer.order",
            "customer.boolean"
         ]
      },
      "collectionOperations": {
         "get": {
            "method": "GET",
            "normalization_context": {
               "groups": [
                  "customer_list"
               ]
            }
         }
      },
      "itemOperations": {
         "get": {
            "method": "GET",
            "normalization_context": {
               "groups": [
                  "customer_get"
               ]
            }
         }
      }
   }
}

पदच्छेद

पार्सिंग प्रस्तुति की विलोम प्रक्रिया है; इसमें पात्रों की एक धारा शामिल है और घटनाओं की एक श्रृंखला बनाता है। यह प्रस्तुति प्रक्रिया में पेश किए गए विवरणों को छोड़ देता है जो क्रमबद्ध घटनाओं का कारण बनता है। पार्सिंग प्रक्रिया बीमार इनपुट के कारण विफल हो सकती है। यह मूल रूप से यह जांचने की एक प्रक्रिया है कि क्या YAML अच्छी तरह से गठित है या नहीं।

एक YAML उदाहरण पर विचार करें जो नीचे उल्लिखित है -

---
   environment: production
   classes:
      nfs::server:
         exports:
            - /srv/share1
            - /srv/share3
   parameters:
      paramter1

तीन हाइफ़न के साथ, यह दस्तावेज़ की शुरुआत का प्रतिनिधित्व करता है जिसमें विभिन्न विशेषताओं को बाद में परिभाषित किया गया है।

YAML लिंट YAML का ऑनलाइन पार्सर है और यह जाँचने में मदद करता है कि यह वैध है या नहीं। YAML लिंट के लिए आधिकारिक लिंक नीचे उल्लिखित है:http://www.yamllint.com/

आप नीचे दिखाए गए अनुसार पार्सिंग का आउटपुट देख सकते हैं -

यह अध्याय उन प्रक्रियाओं और प्रक्रियाओं के बारे में विस्तार से बताएगा जिसकी चर्चा हमने पिछले अध्याय में की थी। YAML में सूचना मॉडल एक विशिष्ट आरेख का उपयोग करके व्यवस्थित प्रारूप में क्रमांकन और प्रस्तुति प्रक्रिया की विशेषताओं को निर्दिष्ट करेगा।

एक सूचना मॉडल के लिए, एप्लिकेशन जानकारी का प्रतिनिधित्व करना महत्वपूर्ण है जो प्रोग्रामिंग वातावरण के बीच पोर्टेबल हैं।

ऊपर दिखाया गया आरेख सामान्य सूचना मॉडल का प्रतिनिधित्व करता है जिसे ग्राफ प्रारूप में दर्शाया जाता है। YAML में, देशी डेटा का प्रतिनिधित्व निहित है, जुड़ा हुआ है और टैग किए गए नोड्स का निर्देशित ग्राफ है। यदि हम निर्देशित ग्राफ का उल्लेख करते हैं, तो इसमें निर्देशित ग्राफ के साथ नोड्स का एक सेट शामिल है। जैसा कि सूचना मॉडल में बताया गया है, YAML तीन प्रकार के नोड्स का समर्थन करता है -

  • Sequences
  • Scalars
  • Mappings

इन प्रतिनिधित्व नोड्स की मूल परिभाषा पर पिछले अध्याय में चर्चा की गई थी। इस अध्याय में, हम इन शब्दों के योजनाबद्ध दृष्टिकोण पर ध्यान केंद्रित करेंगे। निम्न अनुक्रम आरेख विभिन्न प्रकार के टैग और मैपिंग नोड्स के साथ किंवदंतियों के वर्कफ़्लो का प्रतिनिधित्व करता है।

तीन प्रकार के नोड हैं: sequence node, scalar node तथा mapping node

दृश्यों

अनुक्रम नोड अनुक्रमिक वास्तुकला का अनुसरण करता है और इसमें शून्य या अधिक नोड्स की एक क्रमबद्ध श्रृंखला शामिल होती है। एक YAML अनुक्रम में एक ही नोड बार-बार या एक नोड हो सकता है।

Scalars

YAML में स्केलर्स की सामग्री में यूनिकोड वर्ण शामिल हैं जिन्हें प्रारूप में शून्य की एक श्रृंखला के साथ दर्शाया जा सकता है। सामान्य तौर पर, स्केलर नोड में स्केलर मात्रा शामिल होती है।

मानचित्रण

मैपिंग नोड में प्रमुख मूल्य जोड़ी प्रतिनिधित्व शामिल है। मैपिंग नोड की सामग्री में एक अनिवार्य शर्त के साथ कुंजी-मूल्य जोड़ी का संयोजन शामिल है जिसे कुंजी नाम को अद्वितीय बनाए रखा जाना चाहिए। अनुक्रम और मैपिंग सामूहिक रूप से एक संग्रह बनाते हैं।

ध्यान दें कि ऊपर दिखाए गए आरेख में, स्केलर, अनुक्रम और मैपिंग को एक व्यवस्थित प्रारूप में दर्शाया गया है।

विभिन्न प्रकार के पात्रों का उपयोग विभिन्न क्रियाओं के लिए किया जाता है। यह अध्याय YAML में प्रयुक्त सिंटैक्स के बारे में विस्तार से बात करता है और चरित्र हेरफेर पर केंद्रित है।

सूचक वर्ण

संकेतक पात्रों में एक विशेष शब्दार्थ शामिल है जिसका उपयोग YAML दस्तावेज़ की सामग्री का वर्णन करने के लिए किया जाता है। निम्न तालिका इस पर विस्तार से दर्शाती है।

अनु क्रमांक। चरित्र और कार्यक्षमता
1

_

यह एक ब्लॉक अनुक्रम प्रविष्टि को दर्शाता है

2

?

यह एक मैपिंग कुंजी को दर्शाता है

3

:

यह एक मानचित्रण मूल्य को दर्शाता है

4

,

यह प्रवाह संग्रह प्रविष्टि को दर्शाता है

5

[

यह एक प्रवाह क्रम शुरू करता है

6

]

यह एक प्रवाह क्रम को समाप्त करता है

7

{

यह एक प्रवाह मानचित्रण शुरू करता है

8

}

यह एक प्रवाह मानचित्रण को समाप्त करता है

9

#

यह टिप्पणियों को दर्शाता है

10

&

यह नोड की एंकर संपत्ति को दर्शाता है

1 1

*

यह अलियास नोड को दर्शाता है

12

!

यह नोड के टैग को दर्शाता है

13

|

यह एक शाब्दिक ब्लॉक स्केलर को दर्शाता है

14

>

यह एक मुड़ा हुआ ब्लॉक स्केलर को दर्शाता है

15

`

एकल उद्धरण एक उद्धृत प्रवाह स्केलर को घेरता है

16

"

डबल उद्धरण डबल उद्धृत प्रवाह अदिश

17

%

यह प्रयुक्त निर्देश को निरूपित करता है

निम्नलिखित उदाहरण वाक्य रचना में प्रयुक्त वर्णों को दर्शाता है -

%YAML 1.1
---
!!map {
   ? !!str "sequence"
   : !!seq [
      !!str "one", !!str "two"
   ],
   ? !!str "mapping"
   : !!map {
      ? !!str "sky" : !!str "blue",
      ? !!str "sea" : !!str "green",
   }
}

# This represents
# only comments.
---
!!map1 {
   ? !!str "anchored"
   : !local &A1 "value",
   ? !!str "alias"
   : *A1,
}
!!str "text"

इस अध्याय में आप YAML में वाक्यविन्यास प्रधानता के निम्नलिखित पहलुओं के बारे में जानेंगे -

  • उत्पादन मापदंडों
  • इंडेंटेशन स्पेस
  • पृथक्करण स्थान
  • उपेक्षित रेखा उपसर्ग
  • लाइन तह

आइए प्रत्येक पहलू को विस्तार से समझें।

उत्पादन पैरामीटर

उत्पादन मापदंडों में मापदंडों का एक सेट और अनुमत मानों की श्रेणी शामिल होती है जो किसी विशिष्ट उत्पादन पर उपयोग की जाती हैं। उत्पादन मानकों की निम्नलिखित सूची YAML में उपयोग की जाती है -

खरोज

इसे चरित्र द्वारा निरूपित किया जाता है n या mचरित्र धारा इसमें शामिल ब्लॉकों के इंडेंटेशन स्तर पर निर्भर करती है। कई प्रोडक्शंस ने इन विशेषताओं को मापित किया है।

प्रसंग

इसके द्वारा निरूपित किया जाता है c। YAML संदर्भों के दो समूहों का समर्थन करता है:block styles तथा flow styles

अंदाज

इसे s द्वारा दर्शाया गया है। स्केलर सामग्री को पाँच शैलियों में से एक में प्रस्तुत किया जा सकता है:plain, double quoted and single quoted flow, literal and folded block.

chomping

इसके द्वारा निरूपित किया जाता है t। ब्लॉक स्केलर कई तंत्र प्रदान करते हैं जो ब्लॉक को ट्रिम करने में मदद करते हैं:strip, clip तथा keep। चोमपिंग नई लाइन स्ट्रिंग्स को फॉर्मेट करने में मदद करता है। यह ब्लॉक शैली प्रतिनिधित्व का उपयोग किया जाता है। चॉम्पिंग प्रक्रिया संकेतक की मदद से होती है। संकेतक नियंत्रित करते हैं कि स्ट्रिंग की नई लाइनों के साथ क्या उत्पादन किया जाना चाहिए। के साथ नई कड़ियों को हटा दिया जाता है(-) ऑपरेटर और newlines के साथ जोड़ा जाता है (+) ऑपरेटर।

चोमिंग प्रक्रिया के लिए एक उदाहरण नीचे दिखाया गया है -

strip: |-
   text↓
clip: |
   text↓
keep: |+
   text↓

निर्दिष्ट YAML उदाहरण को पार्स करने के बाद आउटपुट निम्नानुसार है -

इंडेंटेशन स्पेस

YAML चरित्र स्ट्रीम में, इंडेंटेशन को शून्य या अधिक वर्णों द्वारा लाइन ब्रेक चरित्र के रूप में परिभाषित किया गया है। ध्यान रखने योग्य सबसे महत्वपूर्ण बात यह है कि इंडेंटेशन में कोई टैब वर्ण नहीं होना चाहिए। इंडेंटेशन में पात्रों को कभी भी नोड की सामग्री जानकारी का हिस्सा नहीं माना जाना चाहिए। बेहतर समझ के लिए निम्नलिखित कोड देखें -

%YAML 1.1
---
!!map {
   ? !!str "Not indented"
   : !!map {
      ? !!str "By one space"
      : !!str "By four\n spaces\n",
      ? !!str "Flow style"
      : !!seq [
         !!str "By two",
         !!str "Still by two",
         !!str "Again by two",
      ]
   }
}

इंडेंटेशन के बाद आप जो आउटपुट देख सकते हैं वह इस प्रकार है -

{
   "Not indented": {
      "By one space": "By four\n spaces\n", 
      "Flow style": [
         "By two", 
         "Still by two", 
         "Again by two"
      ]
   }
}

पृथक्करण स्थान

YAML टोकन के बीच पृथक्करण के लिए अंतरिक्ष वर्ण का उपयोग करता है। सबसे महत्वपूर्ण बात यह है कि YAML में जुदाई में टैब वर्ण नहीं होना चाहिए।

निम्नलिखित कोड की जुदाई रिक्त स्थान के उपयोग को दर्शाता है -

{ · first: · Sammy, · last: · Sosa · }
{
   "\u00b7 last": "\u00b7 Sosa \u00b7", 
   "\u00b7 first": "\u00b7 Sammy"
}

उपेक्षित रेखा उपसर्ग

खाली उपसर्ग में हमेशा स्केलर प्रकार के आधार पर इंडेंटेशन शामिल होता है जिसमें एक प्रमुख व्हाट्सएप भी शामिल होता है। सादे स्केलरों में कोई टैब वर्ण नहीं होना चाहिए। दूसरी ओर, उद्धृत स्केलरों में टैब वर्ण हो सकते हैं। ब्लॉक स्केलर पूरी तरह से इंडेंटेशन पर निर्भर करते हैं।

निम्नलिखित उदाहरण एक व्यवस्थित तरीके से उपेक्षित रेखा उपसर्ग के काम को दर्शाता है -

%YAML 1.1
---
!!map {
   ? !!str "plain"
   : !!str "text lines",
   ? !!str "quoted"
   : !!str "text lines",
   ? !!str "block"
   : !!str "text·®lines\n"
}

ब्लॉक स्ट्रीम के लिए प्राप्त आउटपुट इस प्रकार है -

{
   "plain": "text lines", 
   "quoted": "text lines", 
   "block": "text\u00b7\u00aelines\n"
}

लाइन तह

लाइन तह पठनीयता के लिए लंबी लाइनों को तोड़ने की अनुमति देता है। कम मात्रा में अधिक मात्रा का मतलब बेहतर पठनीयता है। लंबी लाइन के मूल शब्दार्थ को ध्यान में रखते हुए लाइन फोल्डिंग प्राप्त की जाती है। निम्नलिखित उदाहरण लाइन तह प्रदर्शित करता है -

%YAML 1.1
--- !!str
"specific\L\
trimmed\n\n\n\
as space"

आप JSON फॉर्मेट में लाइन फोल्डिंग के लिए आउटपुट निम्नानुसार देख सकते हैं -

"specific\u2028trimmed\n\n\nas space"

YAML में, आप विभिन्न चरित्र धाराओं में आते हैं -

  • Directives
  • दस्तावेज़ सीमा मार्कर
  • Documents
  • पूरी स्ट्रीम

इस अध्याय में, हम उनके बारे में विस्तार से चर्चा करेंगे।

निर्देशों

निर्देश YAML प्रोसेसर में उपयोग किए जाने वाले बुनियादी निर्देश हैं। निर्देश टिप्पणी की तरह प्रस्तुति विवरण हैं जो क्रमिक वृक्ष में परिलक्षित नहीं होते हैं। YAML में, निजी निर्देशों को परिभाषित करने का कोई तरीका नहीं है। यह खंड प्रासंगिक उदाहरणों के साथ विभिन्न प्रकार के निर्देशों की चर्चा करता है -

आरक्षित निर्देश

आरक्षित निर्देशों को तीन हाइफ़न वर्णों (---) के साथ आरंभ किया गया है जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है। आरक्षित निर्देशों को JSON के विशिष्ट मूल्य में परिवर्तित किया जाता है।

%YAML 1.1
--- !!str
"foo"

यमला डायरेक्टिव

YAML निर्देश डिफ़ॉल्ट निर्देश हैं। यदि JSON में परिवर्तित किया जाता है, तो प्राप्त मूल्य पूर्ववर्ती और समाप्ति वर्णों में आगे स्लैश वर्ण शामिल करता है।

%YAML 1.1
---
!!str "foo"

दस्तावेज़ सीमा मार्कर

YAML इन मार्करों का उपयोग एक धारा में एक से अधिक दस्तावेज़ों को शामिल करने की अनुमति देने के लिए करता है। ये मार्कर विशेष रूप से YAML दस्तावेज़ की संरचना को बताने के लिए उपयोग किए जाते हैं। ध्यान दें कि "---" से शुरू होने वाली एक लाइन का उपयोग एक नया दस्तावेज़ शुरू करने के लिए किया जाता है।

निम्नलिखित कोड उदाहरणों के साथ इस बारे में बताते हैं -

%YAML 1.1
---
!!str "foo"
%YAML 1.1
---
!!str "bar"
%YAML 1.1
---
!!str "baz"

दस्तावेज़

YAML दस्तावेज़ को एकल रूट नोड के रूप में प्रस्तुत एक एकल मूल डेटा संरचना माना जाता है। निर्देश, टिप्पणी, इंडेंटेशन और शैलियों जैसे YAML दस्तावेज़ में प्रस्तुति का विवरण उनमें शामिल सामग्री के रूप में नहीं माना जाता है।

YAML में दो प्रकार के दस्तावेजों का उपयोग किया जाता है। उन्हें इस भाग में समझाया गया है -

स्पष्ट दस्तावेज

यह रूट नोड की प्रस्तुति के बाद दस्तावेज़ प्रारंभ मार्कर के साथ शुरू होता है। YAML स्पष्ट घोषणा का उदाहरण नीचे दिया गया है -

---

some: yaml

...

इसमें एक स्पष्ट शुरुआत और अंत मार्कर शामिल हैं जो दिए गए उदाहरण में "---" और "..." हैं। JSON प्रारूप में निर्दिष्ट YAML को परिवर्तित करने पर, हमें नीचे दिखाए अनुसार आउटपुट मिलता है -

{
   "some": "yaml"
}

निहित दस्तावेज

ये दस्तावेज़ एक दस्तावेज़ प्रारंभ मार्कर से शुरू नहीं होते हैं। नीचे दिए गए कोड को ध्यान से देखें -

fruits:
   - Apple
   - Orange
   - Pineapple
   - Mango

JSON प्रारूप में इन मानों को परिवर्तित करने से हमें निम्न के रूप में एक साधारण JSON ऑब्जेक्ट के रूप में आउटपुट मिलता है -

{
   "fruits": [
      "Apple",
      "Orange",
      "Pineapple",
      "Mango"
   ]
}

पूरी स्ट्रीम

YAML में बाइट्स का एक अनुक्रम शामिल है जिसे चरित्र धारा कहा जाता है। धारा एक उपसर्ग के साथ शुरू होती है जिसमें एक बाइट क्रम होता है जो एक वर्ण एन्कोडिंग को दर्शाता है। पूरी धारा एक उपसर्ग के साथ शुरू होती है जिसमें एक वर्ण कूटबन्धन होता है, उसके बाद टिप्पणी होती है।

पूर्ण धारा (चरित्र धारा) का एक उदाहरण नीचे दिखाया गया है -

%YAML 1.1
---
!!str "Text content\n"

प्रत्येक प्रस्तुति नोड में दो प्रमुख विशेषताओं को शामिल किया जाता है anchor तथा tag। नोड गुणों को नोड सामग्री के साथ निर्दिष्ट किया जा सकता है, जो चरित्र स्ट्रीम से छोड़ा गया है।

नोड प्रतिनिधित्व का मूल उदाहरण इस प्रकार है -

%YAML 1.1
---
!!map {
   ? &A1 !!str "foo"
   : !!str "bar",
   ? !!str &A2 "baz"
   : *a1
}

नोड एंकर

एंकर संपत्ति भविष्य के संदर्भ के लिए एक नोड का प्रतिनिधित्व करती है। नोड में YAML प्रतिनिधित्व की चरित्र धारा के साथ निरूपित किया जाता हैampersand (&)सूचक। YAML प्रोसेसर को इसमें प्रस्तुत प्रतिनिधित्व विवरण के साथ लंगर नाम को संरक्षित करने की आवश्यकता नहीं है। निम्नलिखित कोड यह बताते हैं -

%YAML 1.1
---
!!map {
   ? !!str "First occurence"
   : &A !!str "Value",
   ? !!str "Second occurence"
   : *A
}

लंगर नोड्स के साथ उत्पन्न YAML का उत्पादन नीचे दिखाया गया है -

---
!!map {
   ? !!str "First occurence"
   : !!str "Value",
   ? !!str "Second occurence"
   : !!str "Value",
}

नोड टैग

टैग संपत्ति मूल डेटा संरचना के प्रकार का प्रतिनिधित्व करती है जो एक नोड को पूरी तरह से परिभाषित करती है। एक टैग के साथ प्रतिनिधित्व किया है (!) सूचक। टैग को प्रतिनिधित्व ग्राफ के एक अंतर्निहित भाग के रूप में माना जाता है। विस्तार से निम्नलिखित नोड टैग बताते हैं -

%YAML 1.1
---
!!map {
   ? !<tag:yaml.org,2002:str> "foo"
   : !<!bar> "baz"
}

नोड सामग्री

नोड सामग्री को एक प्रवाह सामग्री या ब्लॉक प्रारूप में दर्शाया जा सकता है। ब्लॉक सामग्री लाइन के अंत तक फैली हुई है और संरचना को दर्शाने के लिए इंडेंटेशन का उपयोग करती है। प्रत्येक संग्रह प्रकार को एक विशिष्ट एकल प्रवाह संग्रह शैली में दर्शाया जा सकता है या एकल ब्लॉक के रूप में माना जा सकता है। निम्नलिखित कोड इसे विस्तार से बताता है -

%YAML 1.1
---
!!map {
   ? !!str "foo"
   : !!str "bar baz"
}

%YAML 1.1
---
!!str "foo bar"

%YAML 1.1
---
!!str "foo bar"

%YAML 1.1
---
!!str "foo bar\n"

इस अध्याय में, हम विभिन्न स्केलर प्रकारों पर ध्यान केंद्रित करेंगे जो सामग्री का प्रतिनिधित्व करने के लिए उपयोग किए जाते हैं। YAML में, टिप्पणियां पूर्ववर्ती हो सकती हैं या स्केलर सामग्री का अनुसरण कर सकती हैं। यह ध्यान रखना महत्वपूर्ण है कि टिप्पणियों को अदिश सामग्री में शामिल नहीं किया जाना चाहिए।

ध्यान दें कि सभी प्रवाह स्केलर शैलियों में एकाधिक कुंजियों में उपयोग के अलावा कई लाइनें शामिल हो सकती हैं।

स्केलर का प्रतिनिधित्व नीचे दिया गया है -

%YAML 1.1
---
!!map {
   ? !!str "simple key"
   : !!map {
      ? !!str "also simple"
      : !!str "value",
      ? !!str "not a simple key"
      : !!str "any value"
   }
}

ब्लॉक स्केलर हेडर का उत्पन्न आउटपुट नीचे दिखाया गया है -

{
   "simple key": {
      "not a simple key": "any value", 
      "also simple": "value"
   }
}

दस्तावेज़ मार्कर स्केलर सामग्री

इस उदाहरण के सभी पात्रों को सामग्री के रूप में माना जाता है, जिसमें आंतरिक अंतरिक्ष वर्ण शामिल हैं।

%YAML 1.1
---
!!map {
   ? !!str "---"
   : !!str "foo",
   ? !!str "...",
   : !!str "bar"
}

%YAML 1.1
---
!!seq [
   !!str "---",
   !!str "...",
   !!map {
      ? !!str "---"
      : !!str "..."
   }
]

नीचे दी गई उदाहरण के साथ सादा रेखा विराम को दर्शाया गया है -

%YAML 1.1
---
!!str "as space \
trimmed\n\
specific\L\n\
none"

उसी के लिए संबंधित JSON आउटपुट नीचे उल्लिखित है -

"as space trimmed\nspecific\u2028\nnone"

YAML में प्रवाह शैलियों को JSON के प्राकृतिक विस्तार के रूप में सोचा जा सकता है ताकि बेहतर पठनीय विशेषता के लिए तह सामग्री लाइनों को कवर किया जा सके जो ऑब्जेक्ट इंस्टेंस बनाने के लिए एंकर और उपनाम का उपयोग करता है। इस अध्याय में, हम निम्नलिखित अवधारणाओं के प्रवाह प्रतिनिधित्व पर ध्यान केंद्रित करेंगे -

  • एलियास नोड्स
  • खाली नोड्स
  • प्रवाह स्केलर शैलियों
  • संग्रह शैलियों प्रवाह
  • नोड्स प्रवाहित करें

उर्फ नोड्स का उदाहरण नीचे दिखाया गया है -

%YAML 1.2
---
!!map {
   ? !!str "First occurrence"
   : &A !!str "Foo",
   ? !!str "Override anchor"
   : &B !!str "Bar",
   ? !!str "Second occurrence"
   : *A,
   ? !!str "Reuse anchor"
   : *B,
}

ऊपर दिए गए कोड का JSON आउटपुट नीचे दिया गया है -

{
   "First occurrence": "Foo", 
   "Second occurrence": "Foo", 
   "Override anchor": "Bar", 
   "Reuse anchor": "Bar"
}

खाली सामग्री वाले नोड्स को खाली नोड्स माना जाता है। निम्न उदाहरण से पता चलता है -

%YAML 1.2
---
!!map {
   ? !!str "foo" : !!str "",
   ? !!str "" : !!str "bar",
}

JSON में खाली नोड्स का आउटपुट निम्नानुसार दर्शाया गया है -

{
   "": "bar", 
   "foo": ""
}

फ्लो स्केलर शैलियों में दोहरे-उद्धृत, एकल-उद्धृत और सादे प्रकार शामिल हैं। उसी के लिए मूल उदाहरण नीचे दिया गया है -

%YAML 1.2
---
!!map {
   ? !!str "implicit block key"
   : !!seq [
      !!map {
         ? !!str "implicit flow key"
         : !!str "value",
      }
   ]  
}

ऊपर दिए गए उदाहरण के लिए JSON प्रारूप में आउटपुट नीचे दिखाया गया है -

{
   "implicit block key": [
      {
         "implicit flow key": "value"
      }
   ] 
}

YAML में प्रवाह संग्रह एक अन्य प्रवाह संग्रह के भीतर एक ब्लॉक संग्रह के साथ नेस्टेड है। प्रवाह संग्रह प्रविष्टियों के साथ समाप्त किया जाता हैcomma (,) सूचक। निम्न उदाहरण विस्तार से प्रवाह संग्रह ब्लॉक की व्याख्या करता है -

%YAML 1.2
---
!!seq [
   !!seq [
      !!str "one",
      !!str "two",
   ],
   
   !!seq [
      !!str "three",
      !!str "four",
   ],
]

JSON में प्रवाह संग्रह के लिए आउटपुट नीचे दिखाया गया है -

[
   [
      "one", 
      "two"
   ], 
   [
      "three", 
      "four"
   ]
]

JSON जैसी प्रवाह शैलियों में प्रारंभ और अंत संकेतक शामिल हैं। एकमात्र प्रवाह शैली जिसमें कोई गुण नहीं होता है, वह समतल स्केलर होती है।

%YAML 1.2
---
!!seq [
!!seq [ !!str "a", !!str "b" ],
!!map { ? !!str "a" : !!str "b" },
!!str "a",
!!str "b",
!!str "c",]

JSON फॉर्मेट में ऊपर दिखाए गए कोड का आउटपुट नीचे दिया गया है -

[
   [
      "a", 
      "b"
   ], 
   
   {
      "a": "b"
   }, 
   
   "a", 
   "b", 
   "c"
]

YAML में दो ब्लॉक स्केलर शैलियाँ शामिल हैं: literal तथा folded। ब्लॉक स्केलर को कुछ संकेतक के साथ नियंत्रित किया जाता है, जिसमें हेडर से पहले सामग्री होती है। ब्लॉक स्केलर हेडर का एक उदाहरण नीचे दिया गया है -

%YAML 1.2
---
!!seq [
   !!str "literal\n",
   !!str "·folded\n",
   !!str "keep\n\n",
   !!str "·strip",
]

डिफ़ॉल्ट व्यवहार के साथ JSON प्रारूप में आउटपुट नीचे दिया गया है -

[
   "literal\n", 
   "\u00b7folded\n", 
   "keep\n\n", 
   "\u00b7strip"
]

ब्लॉक शैलियाँ के प्रकार

ब्लॉक शैलियों के चार प्रकार हैं: literal, folded, keep तथा stripशैलियों। ब्लॉक ब्लॉकिंग परिदृश्य की मदद से इन ब्लॉक शैलियों को परिभाषित किया जाता है। ब्लॉक चॉम्पिंग परिदृश्य का एक उदाहरण नीचे दिया गया है -

%YAML 1.2
---
!!map {
   ? !!str "strip"
   : !!str "# text",
   ? !!str "clip"
   : !!str "# text\n",
   ? !!str "keep"
   : !!str "# text\n",
}

आप नीचे दिए गए अनुसार JSON में तीन प्रारूपों के साथ उत्पन्न आउटपुट देख सकते हैं -

{
   "strip": "# text", 
   "clip": "# text\n", 
   "keep": "# text\n"
}

YAML में चुम्बन अंतिम विराम को नियंत्रित करता है और खाली लाइनों को पीछे छोड़ता है जिसकी व्याख्या विभिन्न रूपों में की जाती है।

अलग करना

इस मामले में, अंतिम लाइन ब्रेक और खाली लाइनों को स्केलर सामग्री के लिए बाहर रखा गया है। यह चोमिंग संकेतक "-" द्वारा निर्दिष्ट किया गया है।

कतरन

यदि कोई स्पष्ट चॉम्पिंग संकेतक निर्दिष्ट नहीं किया गया है, तो क्लिपिंग को एक डिफ़ॉल्ट व्यवहार माना जाता है। अंतिम ब्रेक चरित्र स्केलर की सामग्री में संरक्षित है। ऊपर दिए गए उदाहरण में कतरन का सबसे अच्छा उदाहरण प्रदर्शित किया गया है। यह न्यूलाइन के साथ समाप्त होता है“\n” चरित्र।

रखना

रखते हुए "संकेतक" के प्रतिनिधित्व के साथ इसके अलावा को संदर्भित करता है। बनाई गई अतिरिक्त लाइनें तह के अधीन नहीं हैं। अतिरिक्त लाइनें तह के अधीन नहीं हैं।

अनुक्रम शैलियों को समझने के लिए, संग्रह को समझना महत्वपूर्ण है। संग्रह और अनुक्रम शैलियों की अवधारणा समानांतर में काम करती है। YAML में संग्रह को उचित अनुक्रम शैलियों के साथ दर्शाया गया है। यदि आप टैगों की उचित अनुक्रमणिका को संदर्भित करना चाहते हैं, तो हमेशा संग्रह देखें। YAML में संग्रह अनुक्रमिक पूर्णांकों द्वारा अनुक्रमित शून्य से शुरू होता है जैसा कि सरणियों में दर्शाया गया है। अनुक्रम शैलियों का ध्यान संग्रह से शुरू होता है।

उदाहरण

आइए हम ब्रह्मांड में ग्रहों की संख्या को एक अनुक्रम के रूप में मानते हैं जिसे एक संग्रह के रूप में बनाया जा सकता है। निम्नलिखित कोड दिखाता है कि ब्रह्मांड में ग्रहों की अनुक्रम शैलियों का प्रतिनिधित्व कैसे करें -

# Ordered sequence of nodes in YAML STRUCTURE
Block style: !!seq
- Mercury   # Rotates - no light/dark sides.
- Venus     # Deadliest. Aptly named.
- Earth     # Mostly dirt.
- Mars      # Seems empty.
- Jupiter   # The king.
- Saturn    # Pretty.
- Uranus    # Where the sun hardly shines.
- Neptune   # Boring. No rings.
- Pluto     # You call this a planet?
Flow style: !!seq [ Mercury, Venus, Earth, Mars,      # Rocks
                    Jupiter, Saturn, Uranus, Neptune, # Gas
                    Pluto ]                           # Overrated

फिर, आप JSON प्रारूप में दिए गए अनुक्रम के लिए निम्न आउटपुट देख सकते हैं -

{
   "Flow style": [
      "Mercury", 
      "Venus", 
      "Earth", 
      "Mars", 
      "Jupiter", 
      "Saturn", 
      "Uranus", 
      "Neptune", 
      "Pluto"
   ], 
   
   "Block style": [
      "Mercury", 
      "Venus", 
      "Earth", 
      "Mars", 
      "Jupiter", 
      "Saturn", 
      "Uranus", 
      "Neptune", 
      "Pluto"
   ]
}

YAML में प्रवाह मैपिंग प्रमुख मूल्य जोड़े के अनियोजित संग्रह का प्रतिनिधित्व करते हैं। इन्हें मैपिंग नोड भी कहा जाता है। ध्यान दें कि कुंजियों को अद्वितीय बनाए रखा जाना चाहिए। यदि प्रवाह मानचित्रण संरचना में कुंजियों का दोहराव है, तो यह एक त्रुटि उत्पन्न करेगा। क्रम क्रम वृक्ष में उत्पन्न होता है।

उदाहरण

प्रवाह मानचित्रण संरचना का एक उदाहरण नीचे दिखाया गया है -

%YAML 1.1
paper:
   uuid: 8a8cbf60-e067-11e3-8b68-0800200c9a66
   name: On formally undecidable propositions of  Principia Mathematica and related systems I.
   author: Kurt Gödel.
tags:
   - tag:
      uuid: 98fb0d90-e067-11e3-8b68-0800200c9a66
      name: Mathematics
   - tag:
      uuid: 3f25f680-e068-11e3-8b68-0800200c9a66
      name: Logic

JSON फॉर्मेट में मैप किए गए अनुक्रम (अनऑर्डर की गई सूची) का आउटपुट नीचे दिखाया गया है -

{
   "paper": {
      "uuid": "8a8cbf60-e067-11e3-8b68-0800200c9a66",
      "name": "On formally undecidable propositions of Principia Mathematica and related systems I.",
      "author": "Kurt Gödel."
   },
   "tags": [
      {
         "tag": {
            "uuid": "98fb0d90-e067-11e3-8b68-0800200c9a66",
            "name": "Mathematics"
         }
      },
      {
         "tag": {
            "uuid": "3f25f680-e068-11e3-8b68-0800200c9a66",
            "name": "Logic"
         }
      }
   ]
}

यदि आप इस आउटपुट का अवलोकन करते हैं जैसा कि ऊपर दिखाया गया है, तो यह देखा गया है कि प्रमुख नाम YAML मैपिंग संरचना में अद्वितीय बनाए हुए हैं।

YAML के ब्लॉक अनुक्रम नोड्स की एक श्रृंखला का प्रतिनिधित्व करते हैं। प्रत्येक आइटम को एक प्रमुख "-" संकेतक द्वारा दर्शाया जाता है। ध्यान दें कि YAML में "-" सूचक को सफेद स्थान के साथ नोड से अलग किया जाना चाहिए।

ब्लॉक अनुक्रम का मूल प्रतिनिधित्व नीचे दिया गया है -

block sequence:
··- one↓
  - two : three↓

उदाहरण

ब्लॉक अनुक्रमों की बेहतर समझ के लिए निम्नलिखित उदाहरण देखें।

उदाहरण 1

port: &ports
  adapter:  postgres
  host:     localhost

development:
  database: myapp_development
  <<: *ports

JSON प्रारूप में ब्लॉक अनुक्रमों का आउटपुट नीचे दिया गया है -

{
   "port": {
      "adapter": "postgres",
      "host": "localhost"
   },
   "development": {
      "database": "myapp_development",
      "adapter": "postgres",
      "host": "localhost"
   }
}

एक YAML स्कीमा को टैग के सेट के संयोजन के रूप में परिभाषित किया गया है और इसमें गैर-विशिष्ट टैग को हल करने के लिए एक तंत्र शामिल है। YAML में फेलसेफ स्कीमा इस तरह से बनाया गया है कि इसका उपयोग किसी भी YAML दस्तावेज़ के साथ किया जा सकता है। इसे जेनेरिक YAML दस्तावेज़ के लिए अनुशंसित स्कीमा के रूप में भी माना जाता है।

प्रकार

दो प्रकार के फेलसेफे स्कीमा हैं: Generic Mapping तथा Generic Sequence

जेनेरिक मैपिंग

यह एक सहयोगी कंटेनर का प्रतिनिधित्व करता है। यहां, प्रत्येक कुंजी एसोसिएशन में अद्वितीय है और बिल्कुल एक मूल्य के लिए मैप की गई है। YAML में प्रमुख परिभाषाओं के लिए कोई प्रतिबंध शामिल नहीं है।

जेनेरिक मैपिंग का प्रतिनिधित्व करने के लिए एक उदाहरण नीचे दिया गया है -

Clark : Evans
Ingy : döt Net
Oren : Ben-Kiki
Flow style: !!map { Clark: Evans, Ingy: döt Net, Oren: Ben-Kiki }

JSON प्रारूप में जेनेरिक मैपिंग संरचना का आउटपुट नीचे दिखाया गया है -

{
   "Oren": "Ben-Kiki", 
   "Ingy": "d\u00f6t Net", 
   "Clark": "Evans", 
   "Flow style": {
      "Oren": "Ben-Kiki", 
      "Ingy": "d\u00f6t Net", 
      "Clark": "Evans"
   }
}

सामान्य अनुक्रम

यह एक प्रकार के अनुक्रम का प्रतिनिधित्व करता है। इसमें शून्य से शुरू होने वाले अनुक्रमिक पूर्णांकों द्वारा अनुक्रमित संग्रह शामिल है। इसके साथ प्रतिनिधित्व किया है!!seq टैग।

Clark : Evans
Ingy : döt Net
Oren : Ben-Kiki
Flow style: !!seq { Clark: Evans, Ingy: döt Net, Oren: Ben-Kiki }

विफलता के इस सामान्य अनुक्रम के लिए आउटपुट

schema is shown below:
{
   "Oren": "Ben-Kiki", 
   "Ingy": "d\u00f6t Net", 
   "Clark": "Evans", 
   "Flow style": {
      "Oren": "Ben-Kiki", 
      "Ingy": "d\u00f6t Net", 
      "Clark": "Evans"
   }
}

YAML में JSON स्कीमा को अधिकांश आधुनिक कंप्यूटर भाषाओं का सामान्य भाजक माना जाता है। यह JSON फ़ाइलों को पार्स करने की अनुमति देता है। यह YAML में दृढ़ता से अनुशंसित है कि अन्य स्कीमाओं को JSON स्कीमा पर माना जाना चाहिए। इसका मुख्य कारण यह है कि इसमें मुख्य मूल्य संयोजन शामिल हैं जो उपयोगकर्ता के अनुकूल हैं। संदेशों को कुंजी के रूप में एन्कोड किया जा सकता है और आवश्यकता पड़ने पर उपयोग किया जा सकता है।

JSON स्कीमा स्केलर है और इसमें मान का अभाव है। JSON स्कीमा में एक मैपिंग प्रविष्टि को कुछ कुंजी और मूल्य जोड़ी के प्रारूप में दर्शाया जाता है जहां नल को वैध माना जाता है।

उदाहरण

एक शून्य JSON स्कीमा को नीचे दिखाए अनुसार दर्शाया गया है -

!!null null: value for null key
key with null value: !!null null

JSON प्रतिनिधित्व का उत्पादन नीचे उल्लिखित है -

{
   "null": "value for null key", 
   "key with null value": null
}

उदाहरण

निम्नलिखित उदाहरण बूलियन JSON स्कीमा का प्रतिनिधित्व करता है -

YAML is a superset of JSON: !!bool true
Pluto is a planet: !!bool false

निम्नलिखित JSON प्रारूप में उसी के लिए आउटपुट है -

{
   "YAML is a superset of JSON": true, 
   "Pluto is a planet": false
}

उदाहरण

निम्न उदाहरण पूर्णांक JSON स्कीमा का प्रतिनिधित्व करता है -

negative: !!int -12
zero: !!int 0
positive: !!int 34
{
   "positive": 34, 
   "zero": 0, 
   "negative": -12
}

उदाहरण

JSON स्कीमा के टैग निम्न उदाहरण के साथ दर्शाए गए हैं -

A null: null
Booleans: [ true, false ]
Integers: [ 0, -0, 3, -19 ]
Floats: [ 0., -0.0, 12e03, -2E+05 ]
Invalid: [ True, Null, 0o7, 0x3A, +12.3 ]

आप नीचे दिए गए अनुसार JSON आउटपुट पा सकते हैं -

{
   "Integers": [
      0, 
      0, 
      3, 
      -19
   ], 
   
   "Booleans": [
      true, 
      false
   ], 
   "A null": null, 

   "Invalid": [
         true, 
         null, 
         "0o7", 
         58, 
         12.300000000000001
   ], 
   
   "Floats": [
      0.0, 
      -0.0, 
      "12e03", 
      "-2E+05"
   ]
}