क्यों - (3 डैश / हाइफ़न) yaml फ़ाइल में?


116

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

दस्तावेज़ सामग्री से निर्देशों को अलग करने के लिए YAML तीन डैश ("---") का उपयोग करता है। यदि कोई निर्देश मौजूद नहीं है, तो यह किसी दस्तावेज़ की शुरुआत का संकेत देने का काम भी करता है।

इसके अलावा, मैंने इसके बिना एक नमूना लेने की कोशिश की ---और समझा कि उनका होना अनिवार्य नहीं है।

मुझे लगता है मैं की एक स्पष्ट समझ की जरूरत नहीं है directiveऔर document। किसी को भी एक सरल उदाहरण के साथ समझा सकते हैं?


3
क्या आपने YAML विनिर्देशन की जाँच की है? यह बहुत हद तक वर्णन करता है कि एक निर्देश या दस्तावेज क्या है। क्षमा करें, यह मेरी पुस्तक पर idownvotedbecau.se/noresearch के लिए अर्हता प्राप्त करता है ।
लेक्सिकोर

19
@lexicore मैंने उदाहरण आज़माने से पहले डॉक्स की जाँच की। लेकिन मुझे स्पष्ट समझ नहीं मिली और मुझे लगा कि अगर कोई समझाएगा तो मैं बेहतर समझ पाऊंगा। मुझे खेद है कि अगर यह बहुत ही बुनियादी है, तो एफवाईआई मैं केवल एक शुरुआत है।
एंडी

जवाबों:


66

जैसा कि आप पहले ही पता लगा चुके हैं, तीन डैश ---का उपयोग किसी दस्तावेज़ की शुरुआत को इंगित करने के लिए किया जाता है , अर्थात:

  1. दस्तावेज़ को इंगित करने के लिए निर्देश के बाद शुरू होता है , अर्थात, %YAMLया %TAGवर्तमान कल्पना के अनुसार लाइनें। उदाहरण के लिए:

    %YAML 1.2
    %TAG !foo! !foo-types/
    ---
    myKey: myValue
    
  2. दस्तावेज़ को शुरू करने के लिए संकेत दें जब आपके पास एक ही स्ट्रीम में कई yaml दस्तावेज़ हों , उदाहरण के लिए, एक yaml फ़ाइल:

    doc 1
    ---
    doc 2
    

    यदि डॉक्टर 2 में कुछ पूर्ववर्ती निर्देश हैं, तो हमें ...पार्सर को डॉक्टर 1 के अंत (और संभावित निर्देशों की शुरुआत से पहले डॉक्टर 2) को इंगित करने के लिए तीन डॉट्स का उपयोग करना होगा। उदाहरण के लिए:

    doc 1
    ...
    %TAG !bar! !bar-types/
    ---
    doc 2
    

यामल पार्सर कार्यान्वयनकर्ताओं के लिए युक्ति अच्छी है। हालांकि, मुझे यह लेख उपयोगकर्ता के दृष्टिकोण से पढ़ने में आसान लगता है।


मैं उत्पादन नियम 211 को YAML 1.2 में इस तरह से पढ़ता हूं कि आपको दस्तावेज़-एंड-इंडिकेटर की आवश्यकता नहीं है, भले ही आपके पास निम्नलिखित दस्तावेज़ में निर्देश हों, केवल उस मामले में आवश्यक बात यह है कि आपके पास एक अंत है- सूचक निर्देश (शुरुआत में l-explicit-document)।
एंथन

तीन बिंदुओं के उपयोग पर मेरी समझ से इस वाक्य पर आधारित है कल्पना : "एक दस्तावेज के एक दस्तावेज अंत मार्कर लाइन द्वारा समाप्त नहीं है, तो उसके बाद निम्न दस्तावेज़ एक निर्देशों अंत मार्कर लाइन के साथ शुरू होगा।" एक दस्तावेज की आवश्यकता होती है के साथ शुरू निर्देशों के अंत मार्कर ---का मतलब होगा कि उस दस्तावेज़ के लिए कोई निर्देश की अनुमति नहीं है। इसलिए यदि डॉक 2 में निर्देश हैं, तो डॉक 1 को दस्तावेज़ के अंत मार्कर के साथ समाप्त किया जाना चाहिए ...
यी औ

वास्तव में, एल-स्पष्ट-दस्तावेज़ की परिभाषा इसके लिए निर्देशों को मना करती है: "एक स्पष्ट दस्तावेज़ एक स्पष्ट निर्देश अंत मार्कर लाइन के साथ शुरू होता है लेकिन कोई निर्देश नहीं।"
यी

नियम 211 में स्पष्ट रूप से एल-स्पष्ट-दस्तावेज़ के बाहर निर्देश हैं, और मुझे यकीन नहीं है कि यदि आपके पाठ का उद्धरण भी विरोधाभासी है। किसी भी मामले में पायथन यम एलएल पार्सर इसे इस तरह से लागू करते हैं (यानी आपको अगले दस्तावेजों के निर्देशों से पहले एक स्पष्ट अंत-दस्तावेज़ संकेतक की आवश्यकता नहीं है)।
एंथन

मैं नियम 211 के निर्देशों को पूर्ववर्ती अनुमति नहीं देता l-explicit-document। अभिव्यक्ति l-document-prefix*में निर्देश नहीं होते हैं। मैं पायथन यमल पार्सर से परिचित नहीं हूं, लेकिन एक दिलचस्प सवाल यह होगा कि क्या यह चुपचाप निर्देशों को छोड़ देता है, अगर वे डॉट्स से पहले नहीं हैं।
यी औ

55

यदि आप YAMLएक निर्देश के साथ अपनी शुरुआत नहीं करते हैं, तो उनका होना अनिवार्य नहीं है । यदि यह मामला है, तो आपको उनका उपयोग करना चाहिए।

आइए प्रलेखन पर एक नज़र डालें

3.2.3.4। निर्देशों

प्रत्येक दस्तावेज़ निर्देशों के एक सेट के साथ जुड़ा हो सकता है। एक निर्देश में एक नाम और मापदंडों का एक वैकल्पिक अनुक्रम होता है। निर्देश YAML प्रोसेसर के लिए निर्देश हैं, और अन्य सभी प्रस्तुति विवरण की तरह YAML क्रमांकन पेड़ या प्रतिनिधित्व ग्राफ में परिलक्षित नहीं होते हैं । YAML का यह संस्करण एक दो निर्देशों को परिभाषित करता है, "YAML" और "TAG"। अन्य सभी निर्देश YAML के भविष्य के संस्करणों के लिए आरक्षित हैं।

इसका एक उदाहरण निर्देशन के लिए प्रलेखन में भी पाया जा सकता हैYAML

%YAML 1.2 # Attempt parsing
           # with a warning
---
"foo"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.