2011-02-02 14 views
12

कहते हैं कि मैं निम्नलिखित YAML फ़ाइल है:YAML उपकुंजी ओवरराइड

- 
    key1: value 
# and so on... 
    key99: value 
    key100: 
     subkey1: value 
# and so on... 
     subkey100: value 
- 
    key1: value 
# and so on... 
    key99: value 
    key100: 
     subkey1: value 
# and so on... 
     subkey100: SOME DIFFERENT VALUE 

प्राकृतिक तरीके से समान डेटा की एक बड़ी राशि को संभालने के लिए लंगर के साथ हो सकता है, और सिर्फ महत्वपूर्ण यह है कि बदल अधिभावी।

सवाल यह है कि, यहां एक उपकुंजी अलग है। क्या संदर्भित करने का कोई आसान तरीका है कि key100['subkey100'] बदल गया? या क्या मुझे प्रत्येक स्तर पर एंकरों की एक श्रृंखला का उपयोग करना है?

- &anchor 
    key1: value 
# and so on... 
    key99: value 
    key100: &subanchor 
     subkey1: value 
# and so on... 
     subkey100: value 
- 
    <<: *anchor 
    key100: 
     <<: *subanchor 
     subkey100: SOME DIFFERENT VALUE 
+0

यह एक आसान समस्या होनी चाहिए! कॉमन लोग! – Thomas

उत्तर

7

मैं सही ढंग से सवाल समझ में आ गया है, मैं कल्पना लंगर नोड्स के अधिभावी तत्वों का समर्थन करता नहीं लगता कि:

अर्थात, और वहाँ के लिए एक आशुलिपि है।

spec पढ़ने पर (संस्करण 1.2 है, लेकिन 1.1 एक ही कहते हैं), अनुभाग 7.1 Alias Nodes राज्यों (जोर मेरा):

एक पहले धारावाहिक नोड के बाद घटनाओं उर्फ ​​नोड्स के रूप में प्रस्तुत कर रहे हैं। नोड की पहली घटना को एंकर द्वारा चिह्नित किया जाना चाहिए ताकि बाद की घटनाओं को उपनाम नोड्स के रूप में प्रस्तुत किया जा सके।

एक उपनाम नोड "*" संकेतक द्वारा दर्शाया गया है। उपनाम सबसे हालिया पूर्ववर्ती नोड को एक ही एंकर वाले संदर्भित करता है। यह एक उपनाम नोड के लिए एक एंकर का उपयोग करने में त्रुटि है जो पहले दस्तावेज़ में नहीं होती है। यह एंकर निर्दिष्ट करने में कोई त्रुटि नहीं है जिसका उपयोग किसी भी उपनाम नोड द्वारा नहीं किया जाता है।

ध्यान दें कि एक उपनाम नोड को किसी गुण या सामग्री को निर्दिष्ट नहीं करना चाहिए, क्योंकि ये पहले से ही नोड की पहली घटना में निर्दिष्ट थे।

दो अंक यहाँ:

  1. "इससे पहले धारावाहिक नोड" - यह शब्द पता चलता है कि उर्फ ​​मूल नोड का एक और घटना, मूल नोड में न सिर्फ डेटा का प्रतिनिधित्व करने के लिए है। दूसरे शब्दों में, यह एक ही वस्तु का प्रतिनिधित्व करता है, प्रतिलिपि नहीं।

  2. यदि उपनाम में कोई सामग्री नहीं है (दूसरा बोल्ड सेक्शन), तो आप प्रश्न में सुझाए गए फैशन में ओवरराइड निर्दिष्ट नहीं कर सकते हैं।

तो कल्पना की मेरी व्याख्या यह है कि आप इसे spec के अनुसार नहीं कर सकते हैं।

हालांकि - यदि आप मूल से उदाहरण (दूसरा कोड ब्लॉक) को this online tool में चिपकाते हैं (आप 'कैनोनिकल' को अनचेक करना चाहते हैं), तो वह टूल मूल सामग्री की प्रतिलिपि बनाकर उपकुंजी 100 को ओवरराइड करने के लिए इसे प्रश्न में लक्षित करता है। YAML Lint Tool के लिए, this online parser के समान है।

तो ऐसा लगता है कि यह अभ्यास में काम करता है, लेकिन मुझे spec के भीतर इसके लिए समर्थन नहीं मिल रहा है।

संबंधित मुद्दे