मैं एक्सएमएल स्कीमा और डब्लूएसडीएल में इस्तेमाल किए गए लक्ष्य नामस्थान के उद्देश्य को समझना चाहता हूं। वास्तव में, चीजों को सरल रखने के लिए, आइए इस प्रश्न को एक्सएमएल स्कीमा तक सीमित करें।हमें लक्ष्य नामस्थान की आवश्यकता क्यों है?
मुझे लगता है कि मैं (सरल) एक्सएमएल नेमस्पेस की धारणा को पूरी तरह से समझता हूं। सम्मेलन से हम यूआरआई/यूआरएल का उपयोग करते हैं, लेकिन हम किसी भी स्ट्रिंग का उपयोग कर सकते हैं, जिसे हम एक्सएमएल नोड्स और विशेषताओं द्वारा पुन: उपयोग करने के लिए उपसर्ग को असाइन करते हैं, या हाथ में दायरे के लिए डिफ़ॉल्ट नामस्थान के रूप में उपयोग करते हैं। अब तक सब ठीक है ?
अब एक्सएमएल स्कीमा में प्रवेश करता है। कुछ कारणों से एक्सएमएल स्कीमा के आविष्कारकों ने महसूस किया कि सरल नामस्थानों की धारणा पर्याप्त नहीं थी और उन्हें लक्ष्य नामस्थान पेश करना पड़ा। मेरा सवाल यह है कि: लक्ष्यनामस्पेस का परिचय क्या महत्वपूर्ण लाभ है जो सामान्य XML नामस्थान द्वारा प्रदान नहीं किया जा सकता है? यदि कोई XML दस्तावेज़ xsd दस्तावेज़ का संदर्भ देता है, या तो स्कीमालोकेशन या आयात विवरण के साथ, किसी भी मामले में मैं संदर्भित वास्तविक xsd दस्तावेज़ का पथ देता हूं। यह वह विशिष्टता है जिसे मैं स्कीमा को संदर्भित करना चाहता हूं जिसे मैं संदर्भित करना चाहता हूं। यदि इसके अतिरिक्त मैं अपने स्कीमा दस्तावेज़ में किसी विशेष नामस्थान पर इस स्कीमा को बांधना चाहता हूं, तो मुझे पहले से ही एक्सएमएल स्कीमा में परिभाषित सटीक लक्ष्य नामस्थान को दोहराने के लिए बाध्य क्यों होना चाहिए? मैं इस नामस्थान को फिर से परिभाषित क्यों नहीं कर सकता था, हालांकि मैं XML दस्तावेज़ के भीतर चाहता हूं जिसमें इस नामस्थान का उपयोग उस विशेष XML स्कीमा दस्तावेज़ को संदर्भित करने के लिए किया जाएगा जिसे मैं संदर्भित करना चाहता हूं?
अद्यतन:
एक उदाहरण देने के लिए, अगर मैं एक एक्सएमएल उदाहरण दस्तावेज में निम्नलिखित:
<p:Person
xmlns:p="http://contoso.com/People"
xmlns:v="http://contoso.com/Vehicles"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://contoso.com/schemas/Vehicles
http://contoso.com/schemas/vehicles.xsd
http://contoso.com/schemas/People
http://contoso.com/schemas/people.xsd">
<name>John</name>
<age>28</age>
<height>59</height>
<v:Vehicle>
<color>Red</color>
<wheels>4</wheels>
<seats>2</seats>
</v:Vehicle>
</p:Person>
जैसे क्यों people.xsd स्कीमा को एक लक्ष्य नामस्थान परिभाषित करने की आवश्यकता है जो "http://contoso.com/schemas/People" है? हमें xsd दस्तावेज़ में लक्ष्य नेमस्पेस परिभाषा की आवश्यकता क्यों है? ऐसा लगता है कि स्कीमालोकेशन के नामस्थान भाग से आपको जो कुछ हासिल करना है, वह पहले ही एक्सएमएल इंस्टेंस दस्तावेज़ में निहित है। Xsd दस्तावेज़ में बराबर मान के साथ लक्ष्य नामस्थान के अस्तित्व को लागू करने का क्या लाभ है?
पॉल जवाब देने के लिए फ़ॉलो-अप प्रश्न:
आप मुझे एक ठोस उदाहरण दे सकते हैं जहां XSD तत्व नामों के बीच इस तरह के "संघर्ष" स्पष्ट हो जाता है और उस targetNamespace के लिए की जरूरत समझाएंगे?
ठीक है, यहां मेरे अपने प्रश्न का उत्तर देने का प्रयास है। अगर आपको यह सुसंगत लगता है तो मुझे बताएं। पॉल द्वारा लिखे गए पेज पर उदाहरणों को देखते हुए मेरी मदद की।
यदि हम ऊपर दिए गए मूल प्रश्न में XML उदाहरण उदाहरण लेते हैं, तो हमारे पास वाहन तत्व की परिभाषा के दो संदर्भ हैं। एक एक्सएमएल इंस्टेंस दस्तावेज़ में स्वयं स्पष्ट और दृश्यमान है, लेकिन हमें यह भी कल्पना करनी चाहिए कि person.xsd XML स्कीमा उसी वाहन परिभाषा को फिर से व्यक्ति के अनुमत बाल तत्व के रूप में संदर्भित करता है। यदि हम सामान्य नामस्थानों का उपयोग करना चाहते थे, जहां प्रत्येक दस्तावेज़ को वाहन के लिए अपना नामस्थान परिभाषित करने की अनुमति थी, तो हम कैसे जानेंगे कि XML उदाहरण वाहन के लिए समान XML स्कीमा परिभाषा का संदर्भ दे रहा है जैसा कि person.xsd है? एकमात्र तरीका नेमस्पेस की अवधारणा को लागू करना है जो मूल सरल से कठोर है और जिसे कई दस्तावेज़ों में बिल्कुल वही लिखा जाना चाहिए।
अगर मैं इसे टैबलेट पर नहीं लिख रहा था तो मैं एक कोड उदाहरण प्रदान करूंगा, लेकिन यहां मैं केवल उस उदाहरण का वर्णन करने का प्रयास करूंगा जो मेरे मन में है।
कल्पना कीजिए कि हमारे पास वाहन तत्व के लिए दो अलग-अलग XML स्कीमा परिभाषाएं हैं। LOCATION1/वाहनों।xsd में ऐसी परिभाषा होगी जो इस पोस्ट के प्रश्न (रंग, पहियों और सीटों के बाल तत्वों) के उदाहरण से उदाहरण को मान्य करेगी, जबकि स्थान 2/veh.xsd में वाहन तत्व के लिए पूरी तरह से अलग परिभाषा होगी, (कहें, बाल तत्वों के साथ वर्ष, मॉडल, और मात्रा)। अब, यदि एक्सएमएल इंस्टेंस दस्तावेज़ स्थान 1 स्कीमा को संदर्भित करता है, जैसा उपर्युक्त उदाहरण में है, लेकिन person.xsd कहता है कि व्यक्ति तत्व में स्थान 2 स्कीमा में परिभाषित प्रकार के वाहन बच्चे तत्व हो सकते हैं, फिर धारणा के बिना एक लक्ष्य नामस्थान का, एक्सएमएल उदाहरण मान्य होगा, भले ही यह स्पष्ट रूप से सही प्रकार का वाहन अपने व्यक्ति तत्व के बच्चे तत्व के रूप में न हो।
लक्ष्य नामस्थान तब हमें यह सुनिश्चित करने में मदद करते हैं कि यदि दो अलग-अलग दस्तावेज एक ही तीसरे एक्सएमएल स्कीमा का संदर्भ दे रहे हैं, तो वे दोनों एक ही स्कीमा का संदर्भ दे रहे हैं और न सिर्फ एक स्कीमा जिसमें तत्व समान हैं, लेकिन समान नहीं हैं एक और ...
क्या इससे कोई समझ आती है?
पॉल, इस तरह के त्वरित उत्तर के लिए धन्यवाद! चर्चा सामान्य और टिप्पणियों की धारा के बाहर रखने के लिए मैं अपने मूल प्रश्न में एक फॉलो-अप प्रश्न पोस्ट करूंगा ... – Student
क्या 'एक्सएमएलशेमा-इंस्टेंस' के बारे में कुछ पवित्र है? – CodyBugstein
बीटीडब्ल्यू भयानक लिंक! यह बहुत अच्छी तरह से समझाया गया है – CodyBugstein