सबसे पहले आपको समझने की आवश्यकता होगी XML नामस्थान हैं। यदि आपके पास बर्बाद करने के लिए कुछ समय है, तो आप the specification पढ़ सकते हैं। मैंने यह एक्सएमएल से संबंधित स्पष्ट चश्मा में से एक पाया। इससे कोई फर्क नहीं पड़ता कि आप जो कुछ भी कहते हैं उसे समझ में नहीं आता है, यह एक अच्छा आधार है। लेकिन यहां एक त्वरित रैंड डाउन है।
एक्सएमएल तत्वों और विशेषताओं का नाम है। जब आप <test att="hello"/>
देखते हैं, तो आप "test" नाम वाले तत्व को देख रहे हैं, जिसमें हमारे पास "att" नाम के साथ एक विशेषता है। लेकिन यह वास्तव में पूरी कहानी नहीं है ...
एक्सएमएल एक वाक्यविन्यास है जो आपको विभिन्न मार्कअप भाषाओं से सामग्री मिश्रण करने की अनुमति देता है। उदाहरण के लिए, एक्सएमएलटी का उपयोग एक्सएमएलएल पेज को एक्सएचटीएमएल पेज में बदलने के लिए करते समय, आप एक्सएमएल में परिभाषित कम से कम तीन मार्कअप भाषाओं से निपट रहे हैं: आपके इनपुट दस्तावेज़, एक्सएसएलटी और एक्सएचटीएमएल। इस तरह के मिश्रण अधिक कठिन हो जाएंगे यदि प्रत्येक व्यक्ति ने अपने तत्व/विशेषता नाम आरक्षित किए हैं और किसी भी टकराव की अनुमति नहीं थी।
एक्सएमएल नेमस्पेस दर्ज करें। एक एक्सएमएल नेमस्पेस "गोलाकार" को परिभाषित करता है जिसमें तत्व और विशेषता नामों में वास्तविक अर्थशास्त्र होता है। एक्सएसएलटी नेमस्पेस में तत्व "टेम्पलेट" का एक अच्छी तरह से परिभाषित अर्थ है। एक्सएमएल स्कीमा नेमस्पेस में तत्व "कॉम्प्लेक्स टाइप" का एक अच्छी तरह से परिभाषित अर्थ है। यदि आप एक्सएमएल का उपयोग करके अपनी खुद की मार्कअप भाषा में उपयोग करना चाहते हैं, तो यह संभव है बशर्ते आप एक अलग नेमस्पेस में ऐसा करें।
यह सुनिश्चित करने के लिए कि नामस्थान अद्वितीय है, आपको कुछ अद्वितीय पहचानकर्ता प्रदान करना होगा। यूआरआई के उपयोग पर विनिर्देशन, अक्सर एक HTTP यूआरएल के रूप में। इसका कारण सरल है: ऐसे यूआरएल अच्छे अद्वितीय पहचानकर्ता होते हैं। लेकिन यह भ्रम के लिए भी एक बहुत ही आम कारण है क्योंकि लोग सोचते हैं कि यूआरएल वास्तव में अर्थ रखता है या एक्सएमएल प्रोसेसिंग के दौरान नेटवर्क पर पहुंचाया जाएगा। बहुत अच्छी तरह से पता है कि यह मामला नहीं है! यूआरएल किसी भी मौजूदा संसाधन को इंगित करने के लिए आवश्यक नहीं है। यह किसी भी परिवर्तन के माध्यम से नहीं होगा या किसी नेटवर्क पते पर हल नहीं होगा।पहले test
तत्व उस नामस्थान में भी है, क्योंकि हमने उपसर्ग का उपयोग नहीं किया है, लेकिन हम उस डिफ़ॉल्ट नामस्थान के दायरे में हैं। उपसर्ग so
के साथ दूसरा test
तत्व नामस्थान http://www.stackoverflow.com
में निहित है क्योंकि यही वह है जिसे हमने उपसर्ग को बाध्य किया है।
तो फिर तीसरा, सबसे कम test
तत्व है। इसमें क्या नामस्थान है? इसमें उपसर्ग नहीं है, इसलिए यह डिफ़ॉल्ट नामस्थान में होना चाहिए। लेकिन, हमने दूसरे टेस्ट तत्व में अपना डिफ़ॉल्ट नेमस्पेस बदल दिया है! तो अब वह सबसे निचला तत्व http://www.bar.com
नामस्थान से संबंधित है, http://www.foo.com
नहीं।
अभी तक उलझन में है? बस निम्नलिखित याद रखें:
- एक नामस्थान केवल एक स्ट्रिंग है। अद्वितीय पहचानकर्ताओं के पास यूआरआई का सुविधाजनक तरीका है।
- नामस्थान का प्रतिनिधित्व करने के लिए एक उपसर्ग का उपयोग किया जाता है, लेकिन इसका नाम कोई अर्थ नहीं है। बस इसे प्लेसहोल्डर के रूप में सोचें।
- आप एक डिफ़ॉल्ट नामस्थान सेट कर सकते हैं। अपने दायरे के भीतर सभी तत्व जिनके पास उपसर्ग नहीं है, फिर इसका हिस्सा बन जाते हैं।
ओह। अब, डब्ल्यू 3 सी एक्सएमएल स्कीमा पर। यह सब कैसे संबंधित है?
ठीक है, स्टार्टर्स के लिए एक्सएमएल स्कीमा एक्सएमएल में परिभाषित एक मार्कअप भाषा है। तो इसका कारण यह है कि इसे अपना नामस्थान मिलता है। और वह नामस्थान आधिकारिक तौर पर http://www.w3.org/2001/XMLSchema
है। यदि आप S
को कम मामले के रूप में लिखते हैं, तो यह गलत है। यह देखना शुरू हो रहा है कि क्यों कुछ लोग वास्तव में नामस्थान से नफरत करते हैं?
निम्नलिखित तीन दस्तावेजों बिल्कुल वैसा ही कर रहे हैं:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
</xsd:schema>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
</xs:schema>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
</schema>
सभी कि मायने रखती है हम XML स्कीमा नाम स्थान से सामान का उपयोग कर रहे हैं। एक सम्मेलन के रूप में, लोग XML स्कीमा में उपसर्ग xs
या xsd
का उपयोग करते हैं।
जब हमारे पास एक XML दस्तावेज़ है, तो हम यह निर्दिष्ट करना चाहेंगे कि इसके लिए स्कीमा कहां स्थित है। एक से अधिक स्कीमा एक XML दस्तावेज़ के लिए प्रासंगिक हो सकते हैं, क्योंकि जैसा कि हमने कहा है कि भाषाओं को XML में मिश्रित किया जा सकता है। यह कहने के लिए कि एक एक्सएमएल दस्तावेज़ स्कीमा का एक उदाहरण है, एक बार फिर एक विशेष नामस्थान उपलब्ध है: http://www.w3.org/2001/XMLSchema-instance
। सम्मेलन से, हम इस नामस्थान को xsi
उपसर्ग करने के लिए बाध्य करते हैं। लेकिन फिर, यह अनिवार्य नहीं है।
उस स्कीमा इंस्टेंस नेमस्पेस में परिभाषित कुछ विशेषताएं हैं। उनमें से schemaLocation
और noNamespaceSchemaLocation
हैं। इस दस्तावेज़ पर एक नज़र डालें:
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.foo.com/schema">
</root>
क्या खुशी है? सबसे पहले हमने कहा कि हम xsi
को नामस्थान http://www.w3.org/2001/XMLSchema-instance
पर उपसर्ग xsi
बाध्यकारी कर रहे हैं। फिर हम उस नामस्थान के भीतर एक विशेषता का उपयोग कर रहे हैं: noNamespaceSchemaLocation
। वह विशेषता हमें बताती है कि स्कीमा दस्तावेज़ के उन हिस्सों को मान्य करने के लिए कहां स्थित है जो किसी भी विशेष नामस्थान में नहीं हैं। निम्नलिखित XML दस्तावेज़ बिल्कुल वैसा ही है, शब्दार्थ:
<root xmlns:huh="http://www.w3.org/2001/XMLSchema-instance" huh:noNamespaceSchemaLocation="http://www.test.com/schema">
</root>
याद रखें, उपसर्ग नाम कोई अर्थ नहीं। वे प्लेसहोल्डर्स हैं। तो, noNamespaceSchemaLocation
विशेषता के साथ क्या है? असल में, यह हमें बताता है कि हम एक स्कीमा का पता लगा सकते हैं।अब नामस्थान यूआरआई के विपरीत, यह निश्चित रूप से ऐसा कुछ है जिसका उपयोग किसी नेटवर्क या स्थानीय संग्रहण से सामान लाने के लिए किया जा सकता है। एक एक्सएमएल प्रोसेसर जो दस्तावेज़ में घोषित स्कीमा के खिलाफ मान्य करता है, उसे प्राप्त करने का प्रयास कर सकता है।
फिर यह तथ्य है कि इसे noNamespaceSchemaLocation
कहा जाता है। एक स्कीमा "लक्ष्य नामस्थान" को परिभाषित करता है। यह क्या करता है यह बताता है कि तत्वों और गुणों को परिभाषित करने वाले गुणों का नाम क्या है। लेकिन लक्ष्य नामस्थान छोड़ा जा सकता है। उस स्थिति में, हमें नामस्थान के बिना एक्सएमएल दस्तावेजों के लिए एक स्कीमा मिला है। इस तरह की एक स्कीमा को noNamespaceSchemaLocation
के साथ संदर्भित किया जा सकता है।
कई मामलों में, एक स्कीमा वास्तव में नामस्थान परिभाषित करेगा। यह कहने के लिए कि कौन सा स्कीमा किस नामस्थान से संबंधित है, हम http://www.w3.org/2001/XMLSchema-instance
नामस्थान से अन्य विशेषता का उपयोग कर सकते हैं: schemaLocation
। उस विशेषता में नामस्थान यूआरआई और स्कीमा यूआरआई के जोड़े (रिक्त स्थान से अलग) हो सकते हैं। मान लें कि हमारे पास http://www.myschemas.com/foo-schema
पर स्थित नेमस्पेस http://www.foo.com
के लिए स्कीमा है। तब हम कह सकते हैं कि इस प्रकार है:
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.foo.com http://www.myschemas.com/foo-schema http://www.bar.com http://www.randomschemas.com/bar-schema">
</root>
क्या तुम यहाँ याद करने की आवश्यकता है कि http://www.w3.org/2001/XMLSchema-instance
सामान एक्सएमएल दस्तावेजों हैं कि में उपयोग के लिए है:
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.foo.com http://www.myschemas.com/foo-schema">
</root>
यहाँ कई नाम स्थान-स्थान जोड़े के साथ एक उदाहरण है schemas के उदाहरण। नेमस्पेस http://www.w3.org/2001/XMLSchema
वह स्कीमा को स्वयं परिभाषित करने के लिए उपयोग किया जाता है।
अब हम यूआरआई और विशेष अर्थ के साथ अजीब दिखने विशेषताओं में हमारी गर्दन करने वाले हैं तो द्वारा। नामस्थानों के साथ यह बात है: जब तक आप यह नहीं समझते कि वे कितने सरल हैं, वे बहुत जटिल दिखते हैं। बस यूपीआई के नाम से क्या उपसर्ग है, और यह पता है कि यूआरआई क्या परिभाषित करता है, इस पर नज़र डालें। xs:import
और xs:include
:
वहाँ स्कीमा मैं अपने प्रश्न के लिए पता करने के लिए की जरूरत के बारे में दो और बातें है। ध्यान दें कि मैंने xs
उपसर्ग सम्मेलन का उपयोग कैसे किया है, क्योंकि हम डब्ल्यू 3 सी एक्सएमएल स्कीमा के बारे में बात कर रहे हैं।
शामिल तत्व का उपयोग उसी लक्ष्य नामस्थान के साथ स्कीमा को गठबंधन करने के लिए किया जा सकता है। असल में यह हमें छोटे भागों में स्कीमा को मॉड्यूलर करने और उन्हें एक साथ रखने की अनुमति देता है।
आयात तत्व समान प्रकार का है, लेकिन स्कीमा के लिए विभिन्न लक्ष्य नामस्थान के साथ। यह हमें विभिन्न मार्कअप भाषाओं के लिए स्कीमा को गठबंधन करने की अनुमति देता है।
संक्षिप्त करने के लिए तो:
xmlns
: एक डिफ़ॉल्ट नाम स्थान निर्दिष्ट करने के लिए इस्तेमाल किया।
xmlns:prefix
: prefix
पर नामस्थान को बांधने के लिए उपयोग किया जाता है।
http://www.w3.org/2001/XMLSchema
: एक्सएमएल स्कीमा के लिए नामस्थान। सम्मेलन द्वारा अक्सर xs
उपसर्ग करने के लिए बाध्य किया जाता है, लेकिन यह अनिवार्य नहीं है और न ही यह स्वचालित रूप से किया जाता है।
http://www.w3.org/2001/XMLSchema-instance
: नामस्थान जो एक XML दस्तावेज़ को स्कीमा का उदाहरण है, के विवरण घोषित करने के लिए उपयोगी चीजों का एक समूह परिभाषित करता है। सम्मेलन द्वारा अक्सर xsi
उपसर्ग करने के लिए बाध्य किया जाता है, लेकिन यह अनिवार्य नहीं है और न ही यह स्वचालित रूप से किया जाता है।
targetNamespace
: एक विशेषता जो एक्सएमएल स्कीमा (मूल तत्व पर) में उपयोग की जा सकती है, यह निर्दिष्ट करने के लिए कि कौन सा नेमस्पेस एक स्कीमा परिभाषा है।
schemaLocation
: नामस्थान http://www.w3.org/2001/XMLSchema-instance
द्वारा परिभाषित विशेषताओं में से एक, यह इंगित करने के लिए उपयोग किया जाता है कि एक या अधिक नामस्थानों के लिए एक या अधिक स्कीमा कहां मिल सकते हैं।
मेरी अंतिम सलाह: स्कीमा के खिलाफ दस्तावेजों को प्रमाणित करने और थोड़ा सा खेलने के लिए कुछ सुविधाजनक तरीका ढूंढें। नामस्थानों के साथ प्रयोग, शामिल और आयात। एकाधिक नामस्थानों का उपयोग करके दस्तावेज़ बनाएं और स्कोपिंग आज़माएं।
उसके बाद, एक्सएमएल के विनिर्देशों, एक्सएमएल नेमस्पेस और एक्सएमएल स्कीमा की जांच करें। यह कट्टर पढ़ना है, लेकिन यदि आप इसके माध्यम से अपना रास्ता बनाते हैं तो आपको समझ में आ जाएगा कि एक्सएमएल का उपयोग करने के वर्षों के बाद भी कई लोग याद करते हैं। आखिरकार यह सब समझ में आएगा।
गुड लक!
सहमत हूं यह महाकाव्य है - इस प्रकार के प्रश्न का निश्चित उत्तर होना चाहिए, अगर स्टैक ओवरफ़्लो इस सुविधा का समर्थन करता है। इसे पोस्ट करने के लिए धन्यवाद मैंने बहुत कुछ सीखा और देख सकता हूं कि मेरा जवाब वास्तव में क्यों सीमित था। –
@hugh यह भी पूरा नहीं है ... विशेषताओं के लिए, उपसर्गों में कुछ हद तक विचलित नियम हैं। वे डिफ़ॉल्ट रूप से योग्य नहीं हैं। लेकिन मैं पूरी तरह से निश्चित नहीं हूं कि क्या उन्हें तत्व के नामस्थान में रखा गया है या नहीं, इसलिए मैं इसके बारे में बयान देने के लिए सावधान हूं। और वहां और भी सामान है जो मैंने उल्लेख किया था, लेकिन सच्चाई यह है कि केवल चश्मा निश्चित उत्तर प्रदान कर सकते हैं। –
जी_एच यह बेहद दुर्लभ है कि किसी को इस सवाल के जवाब देने के लिए समय लगता है। धन्यवाद! – IAmYourFaja