2013-03-21 16 views
38

में पाइप प्रतीक के उपयोग मैं YAML लिए नया हूँ है, और मैं एक प्रश्न है। पाइप सिम्बल (|) एकाधिक लाइन के लिए उपयोग किया जाता है। में yaml के पास नीचे की तरह कोई वाक्यविन्यास है?क्या YAML

परीक्षण: | 6+

मैं दो नीचे की तरह एक YAML कोड है, सबसे पहले एक काम कर रहा है और दूसरा नहीं है। मुझे नहीं पता कि वहां क्या हो रहा था।
पहले फ़ाइल

Name : 
    - 
    testing: 
    val1 
    - 
    second: 
    val2 
    - 
    third: 
    val3 
    - 
    then 
    - 
    final: | 
    a 
    aa 
    aaa 
    aaaa : 'test:' 

दूसरा फ़ाइल

Name : 
    - 
    testing: 
    val1 
    - 
    second: 
    val2 
    - 
    third: 
    val3 
    - 
    then 
    - 
    final: |6+ 
     a 
     aa 
     aaa 
     aaaa : 'test:' 

पी.एस: दूसरा फ़ाइल ग्राहक की है। मैं xmlbeans का उपयोग कर रहा हूं और मुझे मिला "com.esotericsoftware.yamlbeans.parser.Parser $ पार्सर एक्सेप्शन: लाइन 17, कॉलम 12: अपेक्षित 'ब्लॉक एंड' लेकिन पाया गया: ब्लॉक मैपिंग शुरू करें"

संपादित xmlbeans "मैं उपयोग कर रहा हूँ" के पास गयी।

उत्तर

67

YAML में एक पंक्ति के अंत में पाइप प्रतीक का प्रतीक है कि किसी भी दांतेदार पाठ इस प्रकार है कि एक बहु लाइन अदिश मूल्य के रूप में व्याख्या की जानी चाहिए। the YAML spec देखें।

विशेष रूप से, पाइप इंगित करता है कि (खरोज को छोड़कर) अदिश मूल्य इस तरह से कि नई-पंक्तियों को बरकरार रखता है में सचमुच व्याख्या की जानी चाहिए। इसके विपरीत, > वर्ण इंगित करता है कि बहु-रेखा "फोल्ड" स्केलर निम्नानुसार है, जिसका अर्थ है कि न्यूलाइन को रिक्त स्थान में परिवर्तित किया जाता है।

>>> import yaml 
>>> yaml.load(""" 
... | 
... This is a multi-line 
... literal style scalar. 
... """) 
'This is a multi-line\nliteral style scalar.\n' 
>>> yaml.load(""" 
... > 
... This is a multi-line 
... folded scalar; new lines are folded into 
... spaces. 
... """) 
'This is a multi-line folded scalar; new lines are folded into spaces.\n' 

6+ हिस्सा खरोज सूचक (खरोज में से कितने रिक्त स्थान इस्तेमाल किया जाना चाहिए की एक स्पष्ट विनिर्देश) "chomping सूचक" + जो अदिश शाब्दिक के अंत में कैसे अतिरिक्त व्हाइट को नियंत्रित करता है के साथ है: उदाहरण के लिए संभाला जाना चाहिए।

त्रुटि आप हो रही है एक मुश्किल से एक है: यह क्योंकि खरोज वर्तमान ब्लॉक स्तर तत्व के अनुरूप होना चाहिए है। तो इस मामले में यह 4+ बजाय 6+ होना चाहिए क्योंकि पिछले ब्लॉक स्तर तत्व सरणी मद (- द्वारा निर्दिष्ट) है और शाब्दिक इसे से 4 इंडेंट है। कुछ हद तक आश्चर्यजनक रूप से final: | मानचित्रण को ब्लॉक तत्व नहीं माना जाता है, भले ही इसका मान बहु-पंक्तिबद्ध है। यदि आप इसके बारे में सोचते हैं तो यह समझ में आता है - यह अभी भी एक 'एक-लाइनर' 'कुंजी है: मान "मैपिंग। मान बहु-पंक्ति स्केलर मानों के लिए एक विशेष वाक्यविन्यास का उपयोग करने के लिए होता है। भ्रामक है, लेकिन किसी भी तरह लगातार ...

+0

जब आप कहते हैं कि "कैसे खरोज की कई लाइनों इस्तेमाल किया जाना चाहिए", आप खरोज वर्ण (के रिक्त स्थान मान लीजिए) क्या मतलब है? या वास्तव में लाइनें? – ROunofF

+1

@ROunofF चार साल का पुराना उत्तर और आप इसे इंगित करने वाले पहले व्यक्ति हैं। यह "इंडेंटेशन की जगह" कहना चाहिए। मैं इसे ठीक कर दूंगा। – Iguananaut

+1

http://yaml-multiline.info/ डेमो के साथ कुछ बहुत अच्छी व्याख्या है। –