2012-10-13 23 views
7

मैं अपने सिर को नोड.जेएस धाराओं के चारों ओर लपेटने की कोशिश कर रहा हूं, न कि मैं जावास्क्रिप्ट और नोड के लिए काफी नया हूं, आखिरी भाषाओं में मुझे वास्तव में पर्ल और PHP थे: - डीNode.js में जावास्क्रिप्ट ऑब्जेक्ट्स को पिपिंग/स्ट्रीमिंग

मैंने बफर/स्ट्रीम दस्तावेज @ nodejs.org पढ़ा है, जेम्स हॉलिडे @LXJS देखा, अपनी स्ट्रीम-हैंडबुक और थॉर्स्टन लोरेन event-stream post पढ़ा। मैं मूल बातें समझना शुरू करता हूं :)

मैं डेटा को संसाधित करता हूं जो आरडीएफ में क्रमबद्ध है (जो न तो JSON और न ही एक्सएमएल है)। मैं डेटा लाने के लिए (वास्तविक कोड में अनुरोध के माध्यम से) लाने के लिए प्रबंधन करता हूं और rdfstore मॉड्यूल का उपयोग करके इसे जेएस ऑब्जेक्ट में पार्स करता हूं।

अब तक मैं यह कर:

s.createReadStream('myRDFdata.ttl').pipe(serialize()).pipe(process.stdout); 

कहाँ serialize() अभी एक ही समय में एक serializing कोड पार्स करने का काम करता है। मैं स्ट्रीम में इंटरफ़ेस के लिए through मॉड्यूल का उपयोग करता हूं।

अब मैं कुछ और तरीकों (नहीं असली समारोह घोषणा लेकिन मुझे आशा है कि आप समझ गए होंगे):

  • getRecipe(parsedRDF) -> (JavaScript ऑब्जेक्ट के रूप में) लेता है पार्स RDF और मुझे बताता है कि कैसे उपयोग करने के लिए यह
  • createMeal(parsedRDF, recipe) -> पार्स RDF और ऊपर से नुस्खा लेता है और यह
  • से बाहर एक नया RDF वस्तु बनाता है यह नई वस्तु धारावाहिक हो और (ब्राउज़र
  • के लिए भेजा असली दुनिया getRecipe Wil में करने की जरूरत है मुझे ब्राउज़र में उपयोगकर्ता इंटरैक्शन करना है)

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

  • क्या यह वास्तव में समझ में आता है? क्या मैं अनावश्यक ओवरहेड जोड़ता हूं या यह नगण्य है?
  • मुझे नहीं लगता कि मैं निर्भरता के साथ दोनों तरीकों से पार्सडआरडीएफ कैसे दे सकता हूं कि getRecipe को पहले कॉल करना होगा और आउटपुट createMeal के लिए भी इनपुट होगा। क्या मॉड्यूल हैं जो उस पर मेरी मदद करते हैं?
  • ऐसा हो सकता है कि मुझे अंतिम नुस्खा चयन के लिए उपयोगकर्ता से पूछना है, इसलिए मुझे अंतिम उत्तर प्राप्त करने के लिए ब्राउज़र में सामान भेजने की आवश्यकता हो सकती है। क्या मैं इस तरह कुछ सॉकेट पर कर सकता हूं जबकि पाइप "प्रतीक्षा" कर रहा है?

मुझे उम्मीद है कि यह दिखाता है कि मैं क्या करने की कोशिश कर रहा हूं, अगर नहीं, तो मैं अधिक जानकारी/रेफ्रेज़ देने की कोशिश करूंगा।

अद्यतन: यह खत्म हो गया सो बाद मैं कुछ और बातें पता लगा:

  • यह शायद मतलब नहीं है कुछ गैर मानक में RDF की तरह एक प्रारूप को क्रमानुसार करने अगर वहाँ आधिकारिक क्रमबद्धता स्वरूप हैं।तो stringify का उपयोग करने के बजाय मैं
  • के बीच एक आधिकारिक आरडीएफ क्रमबद्धता पास कर दूंगा, यह दर्शाता है कि मैं प्रत्येक चरण में वस्तुओं को पार्स/क्रमबद्ध करता हूं और यह निश्चित रूप से ओवरहेड जोड़ता है। प्रश्न मुझे परवाह है? मैं RDF मॉड्यूल मैं धारा से पार्स और एक
  • में क्रमानुसार करने मैं बस parseRDF को getRecipe से कुछ जानकारी जोड़कर getRecipe और createMeal के बीच निर्भरता के साथ समस्या को हल कर सकते हैं का उपयोग का विस्तार कर सकता है, यह बिना RDF के साथ बहुत आसानी से किया जा सकता है मूल डेटा मॉडल तोड़ना। लेकिन मैं अभी भी पता करने के लिए अगर मैं पाइप

उत्तर

5

हाँ के साथ इस तरह निर्भरता को संभाल सकता रुचि होगी, यह js वस्तुओं की एक धारा बनाने के लिए ठीक है तुम सिर्फ कुछ है कि क्रमानुसार जाएगा के माध्यम से यह पाइप के लिए याद करने के लिए है आईओ को लिखने से पहले फिर से स्ट्रीम करें।

मैं एक मॉड्यूल rdfStream कहा जाता है कि पार्स करके rdf serializes लेखन की सिफारिश करना चाहते हैं, तो आप इस

var rdf = require('rdf-stream') 

fs.createReadStream(file) //get a text stream 
    .pipe(rdf.parse())  //turn it into objects 
    .pipe(transform)  //optional, do something with the objects 
    .pipe(rdf.stringify()) //turn back into text 
    .pipe(process.stdout) //write to IO. 

तरह का प्रयोग करेंगे और यह भी अन्य नोड में rdf साथ काम कर रहे लोगों द्वारा इस्तेमाल किया जा सकता है, भयानक!

+0

उत्तर के लिए धन्यवाद, मैं वास्तव में आरडीएफ पुस्तकालय में पाइप समर्थन जोड़ूंगा और इसे मॉड्यूल के रूप में भी उपलब्ध कराऊंगा! –