2012-01-18 15 views
13

में एकाधिक स्तर घोंसले मैं एप्लिकेशन में उपयोग की जाने वाली सभी संग्रहीत प्रोसेस की सूची बनाने के लिए वाईएएमएल का उपयोग करने की कोशिश कर रहा हूं और कहां से कहलाता हूं। मैंने नीचे की तरह कुछ कल्पना की लेकिन मुझे लगता है कि वाईएएमएल कई स्तर घोंसले की अनुमति नहीं देता है।वाईएएमएल

access_log: 
    stored_proc: getsomething 
    uses: 
     usedin: some->bread->crumb 
     usedin: something else here 
    stored_proc: anothersp 
    uses: 
     usedin: blahblah 

reporting: 
    stored_proc: reportingsp 
    uses: 
     usedin: breadcrumb 

क्या वाईएएमएल में ऐसा करने का कोई तरीका है और यदि नहीं, तो अन्य विकल्प क्या हैं?

उत्तर

13

यह ठीक है कि मैंने पर्ल स्क्रिप्ट के लिए कॉन्फ़िगरेशन फ़ाइलों के लिए YAML में नेस्टेड स्तर का उपयोग कैसे किया है। रूबी में इच्छित संरचना को संभालने के तरीके पर This YAML Tutorial आपके लिए एक अच्छा संदर्भ हो सकता है।

मुझे लगता है कि आपकी समस्या प्रकारों को मिश्रण करने की कोशिश कर रही है। मैं इस तरह संशोधन का सुझाव देते हैं:

reporting: 
    stored_procs: 
    reportingsp 
     uses: 
     usedin: breadcrumb 
    secondProc 
     uses: 
     usedin: something_else 
+0

हम्म कि ट्यूटोरियल गहरी नेस्टिंग नहीं दिखाती है। अगर मैं अपनी रूबी स्क्रिप्ट में उपरोक्त संरचित याम लोड करता हूं, तो यह यम फ़ाइल को लोड करते समय मुझे एक त्रुटि देता है। – Anthony

+0

मैंने निश्चित रूप से घोंसले के कई स्तरों का उपयोग किया है। मैंने जो देखा, मैंने नहीं किया है, यह है कि आपके पास चीजों का मिश्रण है। जैसे guarant_proc एक मूल्य के साथ और अधिक घोंसला नीचे। यह मुद्दा हो सकता है। – Ilion

+0

हाँ, यह मुद्दा है। मुझे गहरी घोंसला चाहिए ताकि सब कुछ गठबंधन हो जाए। मुझे लगता है कि yaml – Anthony

13

@Ilion द्वारा बताया गया है, यदि आप एक संपत्ति दोनों एक स्ट्रिंग और एक वस्तु की ओर इशारा करते नहीं हो सकता है; आपको या तो एक सरणी की आवश्यकता होगी, या अपने संग्रहित_प्रोक नामों को लेबल देना होगा। साथ ही, आप एक ही नाम का उपयोग करके अपनी चाबियों पर चलते रहते हैं, जब आप वास्तव में चाहते हैं कि एक सरणी है। यहाँ एक सरल उदाहरण और सबूत है कि यह काम करता है:

MY_YAML = " 
access_log: 
    - 
    name: getsomething 
    uses: 
     - some->bread 
     - something else here 
    - 
    name: anothersp 
    uses: 
     - blahblah" 

require 'yaml' 
require 'pp' 
pp YAML.load(MY_YAML) 
#=> {"access_log"=>[ 
#=> {"name"=>"get something", "uses"=>["some->bread", "something else here"]}, 
#=> {"name"=>"anothersp", "uses"=>["blahblah"]} 
#=> ]} 
-3
--- 
access_log: 
    - stored_proc: getsomething  
    - uses:  
    - usedin: some->bread->crumb  
    - usedin: something else here 
    - stored_proc: anothersp  
    - uses:  
    - usedin: blahblah 
reporting: 
    - stored_proc: reportingsp  
    - uses:  
    - usedin: breadcrumb 
+0

यह क्यों नुकीला था ताकि हम सभी सीख सकें? –

+4

@Brian एक एकल-तत्व सूची वाले एकल-तत्व सूची वाले प्रत्येक शब्दकोश तत्व को प्रतिस्थापित करके एक ही नाम के साथ एकाधिक शब्दकोश कुंजी रखने में असमर्थता को रोकता है। यह संरचना को बहुत गहरा और काफी विशिष्ट बनाता है। इसे http://www.yamllint.com/ या कहीं और पेस्ट करने का प्रयास करें और आप अधिक स्पष्ट रूप से देखेंगे कि संरचना वास्तव में कैसे है। – Godsmith

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