XML में "xmlns" का क्या अर्थ है?


415

मैंने XML फ़ाइल में निम्न पंक्ति देखी:

xmlns:android="http://schemas.android.com/apk/res/android"

मैंने xmlnsकई अन्य एक्सएमएल फाइलों में भी देखा है जिन्हें मैंने देखा है।

यह क्या है?




अब आपको यह भी पता चल गया होगा कि जब हम गलत तरीके से या गलत जगह पर टैग का उपयोग करते हैं तो हमें xml में त्रुटियां क्यों होती हैं। :)
Vaibs

जवाबों:


299

यह एक 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/


62
मैं हमेशा उन यूआरआई को एक वेब ब्राउज़र में पेस्ट करता हूं, यह देखने के लिए कि पार्सर क्या देख रहा है, लेकिन यह हमेशा 404 देता है। क्या यह एक वास्तविक यूआरआई माना जाता है जिसे अंत तक एक मानक फ़ाइल नाम से निपटने की आवश्यकता है, या यह सिर्फ एक तकनीक है एक अद्वितीय आईडी बनाने के लिए
पैट्रिक

36
@ पैट्रिक हां, इसका सिर्फ एक यूआरआई है जो अद्वितीय होने की आवश्यकता है ताकि यह इंगित किया जा सके कि यह दूसरों से एक अलग नामस्थान है और किसी भी संभावित डुप्लिकेट टैग को इसलिए सही ढंग से व्याख्या किया जाएगा। इसलिए यूआरआई अक्सर कुछ नहीं करने के लिए इंगित करेगा।
foochow

3
हम्म ... अच्छा है कि यह एक नाम स्थान है। मुझे आश्चर्य होता था कि क्या एक यूआरआई को निर्दिष्ट करने से HTML पेज वास्तव में एक स्कीमा निर्धारित करने के लिए उस वेबसाइट तक पहुंच जाता है।
नव

17
@ पैट्रिक, यूआरआई URL के समान नहीं है। एक URL एक लोकेटर है और एक URI एक पहचानकर्ता है। आप बहुत अच्छी तरह से एक URI के रूप में एक GUID चुन सकते हैं। वास्तव में, पुस्तकों के लिए हमारे पास जो आईएसबीएन है, वह यूआरआई का एक रूप है।
Jaywalker

फिर टैग कैसे काम करता है? मेरा मतलब है कि <LinearLayoutउपसर्ग के बिना काम करता है?
आसिफ मुश्ताक

676

इसका अर्थ है 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>

13
+1 अच्छा, मददगार वैचारिक उत्तर। आप चाहते हैं कि "मूल रूप से, xml में प्रत्येक तत्व (या विशेषता) एक नेमस्पेस से संबंधित है", क्योंकि कुछ तत्वों और विशेषताओं को "नो नेमस्पेस" कहा जाता है। हालांकि मैं समझता हूं कि आप मूल बातें दे रहे थे।
लार्स

1
@ रोब लेविन "गुण नाम दिया जा सकता है लेकिन आम तौर पर नहीं होता है।" Android के बारे में क्या?
बजे पॉल ब्रेवस्कीस्की

1
तो उदाहरण के लिए " your.example.com/xml/person " का उपयोग कैसे किया जाता है? ठीक है मेरे पास एक व्यक्ति है: नाम> टैग, अब क्या? क्या आप इसे स्पष्ट कर सकते हैं?
कोरे तुगाय

1
@ नेटवर्क - हाँ - आप सही हैं। जब आप अपनी क्वेरी को परिभाषित करते हैं, तो आपको नामस्थान निर्दिष्ट करने की आवश्यकता होती है, शायद उपसर्ग के माध्यम से। उदाहरण के लिए, C # System.Xml दुनिया में, आप XmlNamespaceManager.AddNamespace का उपयोग करके नामस्थान प्रबंधक के साथ एक उपसर्ग दर्ज करेंगे, और फिर अपनी क्वेरी में इस उपसर्ग का उपयोग करेंगे। तथ्य यह है कि दस्तावेज़ में उपसर्ग दिखाई नहीं देता है - कोई फर्क नहीं पड़ता कि केवल यह क्या नामस्थान भी मैप करता है।
रोब लेविन

2
यह Microsoft दस्तावेज़ लिंक: " msdn.microsoft.com/en-us/library/aa468565.aspx " XML में नामस्थान को बहुत अच्छी तरह से समझाता है।
दीन जॉन

16

मुझे लगता है कि सबसे बड़ा भ्रम यह है कि xml नेमस्पेस किसी तरह का URL इंगित कर रहा है जिसमें कोई जानकारी नहीं है। लेकिन सच्चाई यह है कि जिस व्यक्ति ने नीचे नामस्थान का आविष्कार किया था:

xmlns:android="http://schemas.android.com/apk/res/android"

इसे भी इस तरह कह सकते हैं:

xmlns:android="asjkl;fhgaslifujhaslkfjhliuqwhrqwjlrknqwljk.rho;il"

यह सिर्फ एक विशिष्ट पहचानकर्ता है। हालाँकि यह स्थापित किया गया है कि आपको वहाँ URL डालना चाहिए जो अद्वितीय है और संभावित रूप से उस नामस्थान में उपयोग किए गए टैग / विशेषताओं के विनिर्देश को इंगित कर सकता है। यह आवश्यक नहीं है।

यह अनूठा क्यों होना चाहिए? क्योंकि नामस्थान का उद्देश्य उन्हें अद्वितीय बनाना है, इसलिए उदाहरण के लिए आपके नामस्थान से पृष्ठभूमि नामक विशेषता को अन्य नामस्थान से पृष्ठभूमि से अलग किया जा सकता है ।

उस विशिष्टता के कारण आपको यह चिंता करने की आवश्यकता नहीं है कि यदि आप अपनी कस्टम विशेषता बनाते हैं तो आपके पास नाम टक्कर है।


हाय मॉर्फिडन। कृपया, क्या आप अपने उत्तर में एक संदर्भ के लिंक को जोड़ सकते हैं जो यह निर्दिष्ट कर सकता है कि सामग्री या URL कुछ भी हो सकता है? क्या अद्वितीय होना चाहिए? कृपया विशिष्टता को भी स्पष्ट करें: XML नामस्थान या URL की सामग्री का नाम? चीयर्स
ओलिव्रे जूल

@olibre यदि आप android के नामस्थान का उपयोग करना चाहते हैं, तो आपको उनके नाम का उपयोग करना चाहिए। यही उनका अनोखा नाम है। उन्होंने वहां एक URL डालने का फैसला किया। यदि आप अपना खुद का नाम स्थान बना रहे हैं, तो आप इसे कॉल कर सकते हैं, जो आप चाहते हैं, बस यह सुनिश्चित करें कि यह अद्वितीय है। यह कहा जाता है कि आपको URL का उपयोग उस स्थान पर करना चाहिए, जहाँ आप वर्णन करते हैं कि उस नामस्थान के अंदर क्या है, लेकिन जैसा कि आप देख सकते हैं कि एंड्रॉइड नेमस्पेस के रचनाकारों ने भी ऐसा नहीं किया।
मॉर्फिडन

धन्यवाद Morfidon। रॉब के जवाब को पढ़ते हुए मैंने आखिरकार उस बिंदु को समझ लिया है । मुझे आपका उत्तर पसंद है क्योंकि यह एक महत्वपूर्ण पहलू को उजागर करता है जो अच्छी तरह से ज्ञात नहीं है। लेकिन कृपया अपने उत्तर को बेहतर बनाने का प्रयास करें, स्पष्ट करें कि कौन सा भाग अद्वितीय होना चाहिए, संदर्भ प्रदान करें, रीफ़्रेज़ करें, शब्दों की जाँच करें ... कुछ पाठक आपके वर्तमान उत्तर से भ्रमित हो सकते हैं। चीयर्स
ओलिब्रे

1
यह उत्तर मुझे चाहिए! इसलिए इस विशेषता मान के लिए एक URI का उपयोग करने को भ्रमित करना, क्योंकि लोग URI = URL सोचते हैं, और अपेक्षा करते हैं कि कुछ दस्तावेज़ स्थान पर निवास करें। अगर AFRI 404 देता है तो AFAICT पूरी तरह से ठीक है। यह सिर्फ एक अद्वितीय पहचानकर्ता है जो एक पते की तरह दिखता है। कुछ विशेष सत्यापनकर्ता हो सकते हैं जो उस स्थान पर एक स्कीमा या डीटीडी (जो समझ में आएंगे) खोजने की अपेक्षा करते हैं, लेकिन ये विशेष मामले हैं जो मुझे लगता है। कृपया मुझे सही करें अगर मैं यहाँ गलत हूँ।
ब्रेनन्यूंग

1
@brennanyoung यह बिल्कुल वैसा ही है जैसा आपने कहा है :)
Morfidon

12

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 फ़ाइल में दो अलग-अलग तत्व। नामस्थान के बिना यह फ़ाइल मान्य नहीं होगी।


4

आपके पास नाम स्थान हैं इसलिए आपके पास विश्व स्तर पर अद्वितीय तत्व हो सकते हैं। हालाँकि, 99% यह वास्तव में मायने नहीं रखता है, लेकिन जब आप इसे सिमेंटिक वेब के परिप्रेक्ष्य में रखते हैं , तो यह महत्वपूर्ण होने लगता है।

उदाहरण के लिए, आप उचित का उपयोग करके विभिन्न योजनाओं का XML मैश-अप कर सकते हैं xmlns। उदाहरण के लिए, vCard के साथ एक दोस्त के दोस्त को मैश करें , आदि।


तुच्छ xml के लिए यह मुझे नजरअंदाज कर सकता है, बाकी सब के लिए नामस्थान अत्यंत महत्वपूर्ण हैं। + मैं वास्तव में अर्थ वेब और नेमस्पेस के बीच संबंध नहीं देखता। सिमेंटिक वेब एक अवधारणा है, नाम स्थान XML मानक का हिस्सा है, आप इंटरफ़ेस परिभाषा और कार्यान्वयन विवरण मिश्रण कर रहे हैं।
न्यूटॉपियन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.