मैंने XML फ़ाइल में निम्न पंक्ति देखी:
xmlns:android="http://schemas.android.com/apk/res/android"
मैंने xmlns
कई अन्य एक्सएमएल फाइलों में भी देखा है जिन्हें मैंने देखा है।
यह क्या है?
मैंने XML फ़ाइल में निम्न पंक्ति देखी:
xmlns:android="http://schemas.android.com/apk/res/android"
मैंने xmlns
कई अन्य एक्सएमएल फाइलों में भी देखा है जिन्हें मैंने देखा है।
यह क्या है?
जवाबों:
यह एक XML नेमस्पेस को परिभाषित करता है ।
आपके उदाहरण में, Namespace Prefix " android " है और Namespace URI " http://schemas.android.com/apk/res/android " है
दस्तावेज़ में, आप इस तरह के तत्व देखते हैं: <android:foo />
पूर्ण नामस्थान URI के लिए संक्षिप्त नाम उपनाम के साथ एक चर के रूप में नामस्थान उपसर्ग के बारे में सोचें। यह <http://schemas.android.com/apk/res/android:foo />
एक XML पार्सर दस्तावेज़ को पढ़ते समय "इसका अर्थ" के संबंध में लिखने के बराबर है ।
नोट: आप वास्तव में XML नाम दस्तावेज़ में नामस्थान उपसर्ग के स्थान पर पूर्ण नामस्थान URI का उपयोग नहीं कर सकते।
नेमस्पेस पर इस ट्यूटोरियल को देखें : http://www.sitepoint.com/xml-namespaces-explained/
<LinearLayout
उपसर्ग के बिना काम करता है?
इसका अर्थ है XML नाम स्थान ।
मूल रूप से, XML में प्रत्येक तत्व (या विशेषता) एक नेमस्पेस, तत्व के नाम को "अर्हता प्राप्त" करने का एक तरीका है।
आप कल्पना कीजिए और मैं दोनों अपने एक्सएमएल का आविष्कार करते हैं। आप लोगों का वर्णन करने के लिए एक्सएमएल का आविष्कार करते हैं, मैं शहरों का वर्णन करने के लिए मेरा आविष्कार करता हूं। हम दोनों में एक तत्व कहा जाता है name
। आपका नाम व्यक्ति के नाम को संदर्भित करता है, और मेरा नाम शहर के नाम पर - ठीक है, यह थोड़ा सा वंचित है।
<person>
<name>Rob</name>
<age>37</age>
<homecity>
<name>London</name>
<lat>123.000</lat>
<long>0.00</long>
</homecity>
</person>
यदि हमारे दो एक्सएमएल को एक ही दस्तावेज़ में जोड़ा गया था, तो हम दो नामों को अलग कैसे बताएंगे? जैसा कि आप ऊपर देख सकते हैं, दो name
तत्व हैं, लेकिन वे दोनों के अलग-अलग अर्थ हैं।
इसका उत्तर यह है कि आप और मैं दोनों हमारे XML को एक नामस्थान सौंपेंगे, जिसे हम अद्वितीय बनाएंगे:
<personxml:person xmlns:personxml="http://www.your.example.com/xml/person"
xmlns:cityxml="http://www.my.example.com/xml/cities">
<personxml:name>Rob</personxml:name>
<personxml:age>37</personxml:age>
<cityxml:homecity>
<cityxml:name>London</cityxml:name>
<cityxml:lat>123.000</cityxml:lat>
<cityxml:long>0.00</cityxml:long>
</cityxml:homecity>
</personxml:person>
अब हमने अपने XML को पूरी तरह से योग्य कर लिया है, इसमें कोई अस्पष्टता नहीं है कि प्रत्येक name
तत्व का क्या अर्थ है। टैग के साथ शुरू की सभी personxml:
अपने एक्सएमएल से संबंधित टैग कर रहे हैं, सब जो कि के साथ शुरू cityxml:
की खान कर रहे हैं।
नोट करने के लिए कुछ बिंदु हैं:
यदि आप किसी भी नाम स्थान की घोषणा को बाहर करते हैं, तो चीजों को डिफ़ॉल्ट नाम स्थान में माना जाता है।
यदि आप पहचानकर्ता के बिना एक नाम स्थान की घोषणा करते हैं, अर्थात् xmlns="http://somenamespace"
, इसके बजाय xmlns:rob="somenamespace"
, यह दस्तावेज़ के लिए डिफ़ॉल्ट नाम स्थान निर्दिष्ट करता है।
वास्तविक नाम स्थान, अक्सर एक आईआरआई , कोई वास्तविक परिणाम नहीं है। यह अद्वितीय होना चाहिए, इसलिए लोग आईआरआई / यूआरआई का चयन करते हैं जो उनके पास है, लेकिन इसका इससे बड़ा अर्थ नहीं है। कभी-कभी लोग निर्दिष्ट आईआरआई में XML के लिए स्कीमा (परिभाषा) को जगह देंगे, लेकिन यह केवल कुछ लोगों का एक सम्मेलन है।
उपसर्ग का कोई परिणाम नहीं होता है। केवल एक चीज जो मायने रखती है वह यह है कि उपसर्ग को किस नामस्थान के रूप में परिभाषित किया गया है। विभिन्न उपसर्गों के साथ शुरू होने वाले कई टैग, जिनमें से सभी नाम एक ही नामस्थान के समान हैं।
उदाहरण के लिए, यदि उपसर्ग personxml
और mycityxml
दोनों समान नामस्थान पर मैप किए गए हैं (जैसा कि नीचे दिए गए स्निपेट में है), तो इससे कोई फर्क नहीं पड़ेगा कि यदि आप किसी दिए गए तत्व के साथ उपसर्ग करते हैं personxml
या mycityxml
, वे दोनों एक ही चीज़ के रूप में एक XML पार्सर द्वारा व्यवहार किए जाएंगे । मुद्दा यह है कि एक XML पार्सर परवाह नहीं करता है कि आपने उपसर्ग के रूप में क्या चुना है, केवल यह नाम भी मैप करता है। उपसर्ग केवल एक अप्रत्यक्ष नामस्थान की ओर इशारा करता है।
<personxml:person
xmlns:personxml="http://example.com/same/url"
xmlns:mycityxml="http://example.com/same/url" />
विशेषताएँ योग्य हो सकती हैं लेकिन आम तौर पर नहीं हैं। वे अपने नाम स्थान को उस तत्व से विरासत में नहीं लेते हैं जिस तत्व पर वे तत्वों के विपरीत हैं (नीचे देखें)।
इसके अलावा, मूल नाम तत्वों को मूल तत्व से विरासत में मिला है। दूसरे शब्दों में, मैं उपरोक्त XML को समान रूप से लिख सकता था
<person xmlns="http://www.your.example.com/xml/person">
<name>Rob</name>
<age>37</age>
<homecity xmlns="http://www.my.example.com/xml/cities">
<name>London</name>
<lat>123.000</lat>
<long>0.00</long>
</homecity>
</person>
मुझे लगता है कि सबसे बड़ा भ्रम यह है कि xml नेमस्पेस किसी तरह का URL इंगित कर रहा है जिसमें कोई जानकारी नहीं है। लेकिन सच्चाई यह है कि जिस व्यक्ति ने नीचे नामस्थान का आविष्कार किया था:
xmlns:android="http://schemas.android.com/apk/res/android"
इसे भी इस तरह कह सकते हैं:
xmlns:android="asjkl;fhgaslifujhaslkfjhliuqwhrqwjlrknqwljk.rho;il"
यह सिर्फ एक विशिष्ट पहचानकर्ता है। हालाँकि यह स्थापित किया गया है कि आपको वहाँ URL डालना चाहिए जो अद्वितीय है और संभावित रूप से उस नामस्थान में उपयोग किए गए टैग / विशेषताओं के विनिर्देश को इंगित कर सकता है। यह आवश्यक नहीं है।
यह अनूठा क्यों होना चाहिए? क्योंकि नामस्थान का उद्देश्य उन्हें अद्वितीय बनाना है, इसलिए उदाहरण के लिए आपके नामस्थान से पृष्ठभूमि नामक विशेषता को अन्य नामस्थान से पृष्ठभूमि से अलग किया जा सकता है ।
उस विशिष्टता के कारण आपको यह चिंता करने की आवश्यकता नहीं है कि यदि आप अपनी कस्टम विशेषता बनाते हैं तो आपके पास नाम टक्कर है।
xmlns - xml नाम स्थान। यह तत्व नाम संघर्ष से बचने की एक विधि है। उदाहरण के लिए:
<config xmlns:rnc="URI1" xmlns:bsc="URI2">
<rnc:node>
<rnc:rncId>5</rnc:rncId>
</rnc:node>
<bsc:node>
<bsc:cId>5</bsc:cId>
</bsc:node>
</config>
node
एक xml फ़ाइल में दो अलग-अलग तत्व। नामस्थान के बिना यह फ़ाइल मान्य नहीं होगी।
आपके पास नाम स्थान हैं इसलिए आपके पास विश्व स्तर पर अद्वितीय तत्व हो सकते हैं। हालाँकि, 99% यह वास्तव में मायने नहीं रखता है, लेकिन जब आप इसे सिमेंटिक वेब के परिप्रेक्ष्य में रखते हैं , तो यह महत्वपूर्ण होने लगता है।
उदाहरण के लिए, आप उचित का उपयोग करके विभिन्न योजनाओं का XML मैश-अप कर सकते हैं xmlns
। उदाहरण के लिए, vCard के साथ एक दोस्त के दोस्त को मैश करें , आदि।