2008-09-24 10 views
61

यह ऐसा कुछ है जो मुझे दूसरों को समझाने में थोड़ा मुश्किल लगता है: एक्सएमएल नेमस्पेस क्यों मौजूद हैं? हमें उनका उपयोग कब करना चाहिए और हमें कब नहीं करना चाहिए? एक्सएमएल में नेमस्पेस के साथ काम करते समय आम नुकसान क्या हैं?एक्सएमएल नेमस्पेस के लिए क्या हैं?

इसके अलावा, वे एक्सएमएल स्कीमा से कैसे संबंधित हैं? क्या एक्सएसडी स्कीमा हमेशा नामस्थान से जुड़े रहना चाहिए?

उत्तर

31

वे तत्व और गुण नामों के संघर्षों के बारे में चिंता किए बिना एकाधिक मार्कअप भाषाओं को संयुक्त करने की अनुमति देने के लिए हैं।

उदाहरण के लिए, एक्सएसएलटी कोड के किसी भी बिट को देखें, और फिर सोचें कि क्या होगा यदि आपने नेमस्पेस का उपयोग नहीं किया था और एक्सएसएलटी लिखने की कोशिश कर रहे थे जहां आउटपुट में "टेम्पलेट", "प्रत्येक के लिए" , आदि, तत्वों। सिंटेक्स त्रुटियां, क्या है।

मैं से आई

+1

मुझे आश्चर्य है कि [इस फॉरेसी] (http://lists.xml.org/archives/xml-dev/200306/msg00010.html) 10-15 साल बाद भी चल रहा है। यह भी देखें [यह] (http://lists.xml.org/archives/xml-dev/200305/msg00836.html) – arayq2

+1

क्या आप कह रहे हैं कि यह गलत है कि नामस्थान एक अच्छा समाधान है, या आप कह रहे हैं कि यह गलत है कि वे थे deconflict करने के लिए इस्तेमाल किया जाने का इरादा है, और अभ्यास में इस तरह से उपयोग किया जाता है (जो भी कमियों के साथ)? मैं केवल उत्तरार्द्ध का दावा करता हूं। –

+1

मैं कह रहा हूं कि एक्सएमएल नेमस्पेस बिल्कुल समाधान नहीं हैं। डिवाइस केवल कुछ उपयोग मामलों को हल करता है, लेकिन किसी भी तरह से, और इसके अलावा एक सामान्य समाधान को रोकने की लागत पर - जो वास्तव में मौजूद है, और वास्तव में इस मूर्खता से पहले दिन की रोशनी देखी गई थी। और, बीटीडब्ल्यू, मूल रूप से वे उद्भव को चिह्नित करने के लिए "इरादा" थे, लेकिन जब यह इंगित किया गया था कि यह पहले से ही एक हल समस्या है, तो समर्थकों ने गोलपोस्ट को चारों ओर ले जाना शुरू कर दिया, और आलोचकों को [जब तक बेहतर चीजें नहीं मिलीं उनका समय] (http://lists.xml.org/archives/xml-dev/200305/msg00344.html)। – arayq2

0

W3 recommendation से ...

एक्सएमएल नामस्थान योग्यता तत्व के लिए एक सरल तरीका प्रदान करने और उन्हें URI सन्दर्भ से पहचान नामस्थान से संबद्ध करके एक्सटेंसिबल मार्कअप लैंग्वेज दस्तावेजों में इस्तेमाल किया विशेषता नाम।

+2

प्रश्न का उत्तर नहीं देता है। प्रश्न "नामस्थान क्या हैं", नहीं "कृपया परिभाषा दें"। – MarkJ

+0

मुझे लगता है कि यह वास्तव में आपके दृष्टिकोण को देने में मददगार होगा। हो सकता है कि आप इस व्यक्ति को कुछ अंतर्दृष्टि दे सकें जो W3 अनुशंसा पढ़ रहा था। – Jacques

0

नेमस्पेस ऐसे नाम हैं जो आप दस्तावेज़ के भीतर उपयोग को स्पष्ट करने के लिए उपयोग किया जाता है और अधिक अनुभव के साथ दूसरों के लिए सलाह और नुकसान छोड़ देंगे। यह आपको नाम स्थान पर संक्षिप्त नाम देने की क्षमता भी देता है जिसका उपयोग दूरस्थ तत्व या विशेषता को संदर्भित करने के लिए किया जा सकता है। नाम स्थान स्वयं उस स्थान को संदर्भित करता है जो दस्तावेज़ में उपयोग किए जाने वाले तत्वों और विशेषताओं को परिभाषित करता है। जानने के लिए बहुत कुछ है, लेकिन यह उसका दिल है। here पर बहुत अधिक जानकारी है।

16

यह पूछ के रूप में लगभग एक ही है "कारण है कि हम के लिए जावा/सी # संकुल प्रयोग करते हैं?":

  • पुनर्प्रयोग: आप टैग का एक सेट का पुन: उपयोग कर सकते हैं/विशेषताओं के एक्सएमएल दस्तावेजों के विभिन्न प्रकारों में परिभाषित ।
  • मॉड्यूलरिटी: यदि आपको अपने एक्सएमएल में कुछ "पहलू" जोड़ना है; अपने एक्सएमएल दस्तावेज़ में एक नामस्थान जोड़ना आपकी पूरी एक्सएमएल स्कीमा परिभाषा को बदलने से आसान है।
  • "मुख्य" नामस्थान को दूषित करने से बचें: आप अपने पार्सर को एक विशाल स्कीमा परिभाषा के साथ काम करने के लिए मजबूर नहीं करते हैं, बस उस नामस्थान का उपयोग करें जिसकी आपको आवश्यकता है।
+1

हाय नाथन। नहीं, जो मुझे समझ में नहीं आया। पुन: प्रयोज्यता यहां लागू नहीं होती है ... मैं नामस्थान के उद्देश्य से भी लड़ाई करता हूं। एक्सएचटीएमएल में आपको वहां एक नामस्थान मिलेगा, जिसका उद्देश्य मैं कल्पना करता हूं कि ब्राउज़र को निर्देशित करना है कि आप पेज को कैसे प्रस्तुत करना चाहते हैं। लेकिन SOAP जैसे कुछ में जहां एक संदेश अनुबंध नामस्थान का उपयोग करता है ... मुझे नहीं लगता कि इसका उपयोग कहां आता है। – Jacques

1

उदाहरण के लिए: XML Namespaces by Example

मेरे शब्दों में: आप (उदाहरण के लिए) बाहरी कंपनी के लिए कुछ XML स्वरूप का उपयोग करना चाहिए और आप XML दस्तावेज़ कुछ जानकारियां, जो एक ही नाम है में प्रदान की जरूरत है, तो आप एक की जरूरत है नाम स्थान। उदाहरण:

<sampleDoc> 
    <header title="Hello world!"> 
     <items> 
     <item name="Volvo" color="White" my_unique_namespace:color="#FFFFFF"/> 
     </items> 
    </header> 
</sampleDoc> 

बेशक -:

<sampleDoc> 
    <header title="Hello world!"> 
     <items> 
     <item name="Volvo" color="Blue"/> 
     </items> 
    </header> 
</sampleDoc> 

और आप इस दस्तावेज़ है, जो एक ही नाम है में कुछ डेटा मर्ज चाहते हैं, लेकिन एक और अर्थ है, आप एक नाम स्थान का उपयोग करना चाहिए (ताकि मूल्य के लिए) आप विशेषता का नाम बदल सकते हैं। उदाहरण के लिए "my_unique_color"। किसी अन्य दस्तावेज़ में बड, फिर से उसी नाम के साथ विशेषता हो सकती है।इसलिए, यदि आपके पास एक अद्वितीय नेमस्पेस है (उदाहरण के लिए हमारा वेब डोमेन), तो आप हमेशा तत्वों और/या विशेषताओं के समान नामों का उपयोग किसी भी समस्या से कर सकते हैं।

+0

अतीत से एक विस्फोट! काफी समय पहले, वह लेख एक [xml-dev सूची पर लंबे धागे] के लिए springboard था (http://lists.xml.org/archives/xml-dev/200305/threads.html#00787)। उदाहरण वास्तव में [कुछ और] दिखा सकता है (http://lists.xml.org/archives/xml-dev/200305/msg00840.html)। दुर्भाग्य से, [आवश्यक बिंदु] (http://lists.xml.org/archives/xml-dev/200306/msg00036.html) ज्यादातर लोगों पर खो गया था, और उसी अंधेरे स्थान पर आज भी जारी है। – arayq2

5

उनके बारे में तत्व प्रकारों के लिए उपनाम के रूप में सोचें। यदि आपके पास दो दोस्त हैं, दोनों बॉब कहलाते हैं, और आप उनमें से किसी एक के बारे में बात कर रहे हैं, तो कोई पूछ सकता है कि आप किस बॉब के बारे में बात कर रहे हैं। सिर्फ "बॉब" कहना बहुत उपयोगी नहीं है, इसलिए आप "बॉब स्मिथ" या "बॉब जोन्स" कहते हैं।

यह तत्व प्रकारों के साथ समान है। कभी-कभी एक छोटा नाम पर्याप्त नहीं होता है, क्योंकि अलग-अलग लोग एक ही नाम चुन सकते हैं। तो आप वहां विभिन्न बॉब्स के बीच अंतर करने के लिए एक यूआरआई को "उपनाम" के रूप में शामिल करते हैं।

5

एक्सएमएल एक सुपर-भाषा है, जिसका अर्थ यह है कि यह किसी भी XML- आधारित भाषा का आधार है (समझ में आता है, है ना?)। XML के बारे में एक पेन के रूप में सोचें जो कि किसी भी भाषा में कोई भी वाक्य लिख सकता है। यह सब लेखक पर निर्भर करता है, और अधिमानतः भाषा पाठक को जानी चाहिए।

एक एक्सएमएल नेमस्पेस मूल रूप से "अंग्रेजी" या "עברית" जैसी भाषा का नाम है। मैं XML दस्तावेज़ के प्राप्तकर्ता को इसका विश्लेषण करने और जानकारी को निकालने में सहायता करता हूं।

मान लें कि मेरे पास फर्नीचर कारखाना है और आपके पास फर्नीचर स्टोर है। अपने भंडारण आवेदन और मेरे आपूर्ति आवेदन पूरी तरह से संबंधित नहीं हैं, लेकिन जब वे XML संदेश के माध्यम से संवाद, संदेशों से समझा जा सकता है और आसानी से दोनों पक्षों

इसलिए, दोनों प्रणालियों स्कीमा, जो भाषा को परिभाषित करता है पता करने की जरूरत से पार्स किया जाना चाहिए वाक्यविन्यास और सहमत प्रतिबंध। स्कीमा को शब्दकोश और व्याकरण पाठ्यपुस्तक के रूप में सोचें। स्कीमा दस्तावेज है कि दोनों प्रणालियों को पता होना चाहिए कि जो भी प्रत्येक सिस्टम में पार्सिंग कोड लिखता है उसे पता होना चाहिए, और इसमें नामस्थान की घोषणा भी शामिल है।

प्रत्येक नेमस्पेस को यूआरआई के रूप में नामित किया गया है, जो ज्यादातर मामलों में स्कीमा दस्तावेज़ का स्थान है जो इसे परिभाषित करता है।

बेशक, प्रत्येक XML दस्तावेज़ को नामस्थान की आवश्यकता नहीं होती है, खासकर जब इसका उपयोग रिमोट सिस्टम को जानकारी देने के लिए नहीं किया जाता है। उदाहरण के लिए, जब आप अपने डेटाबेस में बने रहने के लिए एक्सएमएल में वस्तुओं को क्रमबद्ध करते हैं।

+1

नामस्थान के लिए स्कीमा की आवश्यकता नहीं है। – stephbu

+0

अच्छा, अगर कोई सत्यापन नहीं किया जाता है, तो सुनिश्चित करें। लेकिन फिर, नामस्थान क्या है?= 8-) – Yuval

12

आईएमएचओ का सबसे बड़ा नुकसान मानव-बातचीत व्याख्या दस्तावेज है उदा। एक एक्सएमएल दस्तावेज़ को संसाधित करने के लिए कोड विकसित करना। दस्तावेज़ को पार्स करने के इन्फोसेट परिणाम की बजाय दस्तावेज़ की शाब्दिक अभिव्यक्ति पर ध्यान देना बहुत आसान है।

उदा। अभी तक बहुत भोली आंखों के लिए अलग - निम्नलिखित नोड्स

<a xmlns="uri:foo"/> 
<foo:a xmlns:foo="uri:foo"/> 
<bar:a xmlns:bar="uri:foo"/> 

सभी शब्दार्थ समान हैं।

पहला उदाहरण XPaths विकसित करने में एक बहुत ही आम गलती पैदा करता है - इस तथ्य को याद करते हुए कि "ए" नामस्थान में है - इस प्रकार // कोई उपज कोई मिलान नहीं करता है। (या फिर भी एक अलग नामस्थान में नोड्स से मेल खाता है!)

तीसरा उदाहरण समझने में एक और दोष खोलता है - कि उपसर्ग टेक्स्ट अर्थात् महत्वपूर्ण है। XPATH के साथ दस्तावेज़ों को पार्स करते समय मैं किसी भी उपसर्ग को तब तक घोषित कर सकता हूं जब तक कि यह यूरी दस्तावेज से मेल खाता हो।

3

हम नामस्थान का उपयोग करते हैं क्योंकि लोग जीप एक ही शब्द का उपयोग अपने निजी इडाहो में अलग-अलग चीजों के लिए करना चाहते हैं। आम तौर पर, आप संदर्भ से निर्धारित कर सकते हैं कि किसी व्यक्ति का क्या अर्थ है। एक कर्मियों के डेटाबेस में, एक्सएमएल कर्मियों के रिकॉर्ड है। वाहन रजिस्ट्री डेटाबेस में, एक्सएमएल वाहन रजिस्ट्री रिकॉर्ड है।

दोनों "स्थान" नाम का एक टैग रखते हैं, लेकिन टैग का मतलब प्रत्येक के लिए अलग-अलग चीजें हैं और इसमें विभिन्न फ़ील्ड हैं।

अब, यह अच्छा है: लेकिन यदि आपको एक ही डेटाबेस में दोनों से एक्सएमएल स्टोर करना है या नहीं करना है तो क्या होगा? या, अधिक दिलचस्प बात यह है कि क्या होगा यदि दोनों डेटाबेस किसी अन्य, सामान्य डेटाबेस (जैसे: एक खाता डेटाबेस) से एक्सएमएल भाग स्टोर करना चाहते हैं।

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

बात यह है कि यह सब उपयोगी बनाता है XPATH है।

उपर्युक्त के साथ, आप XPATH अभिव्यक्तियां लिखना शुरू कर सकते हैं जो कहें जैसे: मुझे इस XML में कहीं भी accounts:account overdue अनुभाग खोजें। या: मुझे XML के इस विशेष खंड में कहीं भी accounts:warning message आइटम ढूंढें, जहां चेतावनी संदेश personnel:payment नोड या vehicle:status नोड का एक बच्चा नोड (हालांकि गहरा) है।

xpath एक्सप्रेशन एक XSLT दस्तावेज़, जिनका काम यह प्रदर्शन के लिए एक्सएचटीएमएल या xpdf में एक्सएमएल कन्वर्ट करने के लिए, है में कहीं भी इस्तेमाल किया जा सकता है।

भुगतान क्या है? क्यो ऐसा करें? चूंकि आप एक्सएमएल लॉगफाइल खोज सकते हैं, जहां भी वे दिखाई देते हैं, सभी खातों को अतिदेय संदेश खींचें, अन्य सिस्टम द्वारा उत्पादित "संदेश" टैग के साथ भ्रमित किए बिना, 'em से xhtml में कनवर्ट करें, और उन्हें एक सीएसएस टैग के माध्यम से बोल्ड लाल में प्रदर्शित करें : सभी प्रक्रियात्मक कोड का स्क्रैप लिखने के बिना।

+0

[इनमें से कोई भी नहीं (esp। Xpaths के बारे में) आवश्यक है] (http://lists.xml.org/archives/xml-dev/200305/msg00864.html)। – arayq2

+0

इस उत्तर की मेरी समझ यह है कि एक्सएमएल का नामस्थान अनिवार्य रूप से समूह के लिए एक टैग है या एक्सएमएल तत्वों के समूह की पहचान करता है? – KMC

13

एक्सएमएल नेमस्पेस क्यों मौजूद हैं?

क्योंकि, 1 99 7 में, डब्ल्यू 3 सी में कुछ बहुत प्रभावशाली व्यक्ति उन्हें चाहते थे, और जवाब के लिए कोई जवाब नहीं देंगे। यहां तक ​​कि जब यह प्रदर्शित किया गया था, तब भी मैं कहता हूं कि "समस्या" को हल करने के बेहतर तरीके थे, उन्होंने सोचा कि वे अभी भी अपने प्रभाव को W3C अनुशंसा में लिखे गए हैं।

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

Much pain, no gain

हमें उनका उपयोग कब करना चाहिए और हमें कब नहीं करना चाहिए?

आप उन्हें इस्तेमाल कभी नहीं करना चाहिए, यदि आप इसे कर सकते हैं। दुर्भाग्यवश, इच्छुक पक्षों द्वारा इस बीएडी [*] डिवाइस के निरंतर प्रचार ने आज चश्मा के क्लस्टरफ * सीके को बढ़ावा दिया है जो किसी भी समय या किसी अन्य समय एक्सएमएल नेमस्पेस के साथ संघर्ष नहीं करना व्यावहारिक रूप से असंभव बना देता है। इसलिए, यदि आप एक्सएमएल नेमस्पेस स्वयं को छोड़ देते हैं, तो आपको नाम-स्थान-एन्क्रिप्स्टेड क्रूड आपके दिशानिर्देशों से, या इससे भी बदतर, टूलसेट्स मिल जाएगा जो कि काम करने से इनकार करते हैं जब तक कि आप उन्हें इस तरह की क्रूड नहीं खिलाते।

एक्सएमएल में नेमस्पेस के साथ काम करते समय आम नुकसान क्या हैं?

एक्सपैथ अभिव्यक्तियों का उपयोग उन दस्तावेज़ों के साथ एक बहुत आम गड़बड़ है जहां नामस्थान "डिफ़ॉल्ट" किया गया है: नामस्थान को अभिव्यक्तियों में स्पष्ट होना होगा। दस्तावेजों का निर्माण करते समय एक और मुद्दा उन्हें "सही ढंग से" उपयोग कर रहा है: they create problems out of thin air

साथ ही, वे एक्सएमएल स्कीमा से कैसे संबंधित हैं? क्या एक्सएसडी स्कीमा हमेशा नामस्थान से जुड़े रहना चाहिए?

कोई आवश्यक संबंध नहीं है, सिवाय इसके कि एक्सएसडी स्कीमा स्पेक एक समय में विकसित किया गया था जब समिति के हर किसी के बारे में एक्सएमएल नेमस्पेस उनके दांतों में थोड़ा था। इसलिए उन्होंने इसे जितना गहराई से काम किया उतना काम किया। यह संभव है, फिर भी, नामस्थानों के बिना एक्सएसडी स्कीमा का उपयोग करने के लिए, लेकिन यह एक तेज उछाल वाला नारा है क्योंकि एक्सएसडी स्कीमा का समर्थन करने वाले हर टूलसेट का मानना ​​है कि आप नेमस्पेस का उपयोग करने के लिए "चाहें" होंगे।

[*] खराब = बनाया गया

अद्यतन के रूप में टूटी: An old essay on this non-solution to a non-problem

+0

मैं भावना के साथ सहमत हूं, पूरी तरह से दिल से, अगर arayq2 के उत्साह के स्तर के लिए पर्याप्त नहीं है। हालांकि मुझे मिली समस्याओं को स्पष्ट करता हूं: 1) – Abacus

+1

1) नामस्थानों से छुटकारा पाने में कठिनाई होती है। कम से कम .NET टूल्स का उपयोग कर रहा हूं, xml ऑब्जेक्ट से नेमस्पेस को निकालना मुश्किल नहीं है। "एक बार जब आप अंधेरे पथ को शुरू कर देते हैं, तो यह हमेशा आपके भाग्य पर हावी होगा" 2) कार्यान्वयन अलग-अलग होते हैं; XPath वाक्यविन्यास हमेशा एक ही लागू नहीं होता है (रेगेक्स की तरह अलग-अलग स्वाद होते हैं। 3) जटिलता! और यदि आपको नहीं लगता कि कोई अनावश्यक जटिलता एक बड़ी गड़बड़ी है, तो मैंने जो भी कहा है उसे अनदेखा करें। – Abacus

+0

आह, आखिरकार, कोई टिप्पणी के साथ एक डाउन-टिक। मुझे एक भावना को चोट लगी होगी। – arayq2

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