खोज…
टिप्पणियों
XML में तत्व और विशेषता नाम QNames (योग्य नाम) कहलाते हैं।
एक QName इससे बना है:
- एक नाम स्थान (एक यूआरआई)
- एक उपसर्ग (एक NCName, NC क्योंकि इसमें कोई बृहदान्त्र शामिल नहीं है)
- स्थानीय नाम (NCName)
केवल नामस्थान और स्थानीय नाम दो QNames की तुलना करने के लिए प्रासंगिक हैं। उपसर्ग केवल नाम स्थान के लिए एक प्रॉक्सी है।
नाम स्थान और उपसर्ग वैकल्पिक हैं, लेकिन नाम स्थान हमेशा मौजूद होता है यदि उपसर्ग मौजूद है (यह सिंटैक्टिक स्तर पर सुनिश्चित किया जाता है, इसलिए यह गलत नहीं किया जा सकता है)।
एक QName का शाब्दिक प्रतिनिधित्व prefix:local-name
। नामस्थान विशेष xmlns:...
का उपयोग करके अलग से बंधा हुआ है xmlns:...
विशेषताएँ (अनुस्मारक: xml के साथ शुरू होने वाले गुण XML में आरक्षित हैं)।
यदि उपसर्ग खाली है, तो QName के शाब्दिक प्रतिनिधित्व में कोई बृहदान्त्र का उपयोग नहीं किया जाता है, जिसमें केवल local-name
। खाली उपसर्ग वाले QNames का कोई नामस्थान नहीं है (यदि कोई डिफ़ॉल्ट नाम स्थान नहीं है) या डिफ़ॉल्ट नाम स्थान में हैं।
एक नामस्थान के लिए एक उपसर्ग बांधें
एक नेमस्पेस एक यूआरआई है, लेकिन वर्बोसिटी से बचने के लिए, उपसर्गों को एक प्रॉक्सी के रूप में उपयोग किया जाता है।
निम्नलिखित उदाहरण में, उपसर्ग my-prefix
नामस्थान से जुड़ा हुआ है http://www.example.com/my-namespace
विशेष विशेषता xmlns:my-prefix
का उपयोग करके xmlns:my-prefix
( my-prefix
को किसी अन्य उपसर्ग के साथ बदला जा सकता है) :
<?xml version="1.0"?>
<my-prefix:foo xmlns:my-prefix="http://www.example.com/my-namespace">
<!-- the element my-prefix:foo
lives in the namespace http://www.example.com/my-namespace -->
</my-prefix:foo>
नाम स्थान की अनुपस्थिति
XML में, तत्व और विशेषता नाम नेमस्पेस में रहते हैं।
डिफ़ॉल्ट रूप से, वे किसी भी नामस्थान में नहीं हैं:
<?xml version="1.0"?>
<foo attr="value">
<!-- the foo element is in no namespace, neither is the attr attribute -->
</foo>
उपसर्गों की अप्रासंगिकता
ये दो दस्तावेज शब्दांशों के रूप में शब्दार्थ के समान हैं, उपसर्ग नहीं।
<?xml version="1.0"?>
<myns:foo xmlns:myns="http://www.example.com/my-namespace">
</myns:foo>
<?xml version="1.0"?>
<ns:foo xmlns:ns="http://www.example.com/my-namespace">
</ns:foo>
डिफ़ॉल्ट नाम स्थान
डिफ़ॉल्ट नामस्थान किसी भी उपसर्ग की अनुपस्थिति के लिए नाम स्थान है। यह विशेष xmlns
विशेषता के साथ घोषित किया जा सकता है।
<?xml version="1.0"?>
<foo xmlns="http://www.example.com/my-namespace">
<!-- the element foo is in the namespace
http://www.example.com/my-namespace -->
</foo>
यदि कोई डिफ़ॉल्ट नाम स्थान घोषित नहीं किया गया है, तो बिना किसी उपसर्ग वाले नाम किसी भी नामस्थान में नहीं हैं।
कोई उपसर्ग के साथ नाम संलग्न करें
डिफ़ॉल्ट नामस्थान के संबंध में तत्व और गुण अलग-अलग व्यवहार करते हैं। यह अक्सर भ्रम का स्रोत होता है।
एक विशेषता जिसका नाम में कोई उपसर्ग नहीं है, किसी भी नामस्थान में नहीं है, तब भी जब एक डिफ़ॉल्ट नाम स्थान गुंजाइश में है ।
<?xml version="1.0"?>
<foo attr="value" xmlns="http://www.example.com/my-namespace">
<!-- The attribute attr is in no namespace, even though
a default namespace is in scope. The element foo,
however, is in the default namespace. -->
</foo>
नेमस्पेस बाइंडिंग का दायरा
एक नेमस्पेस बाइंडिंग (विशेष xmlns
या xmlns:...
विशेषता) इस तत्व सहित संलग्न तत्व के सभी वंशों के लिए गुंजाइश है।
<?xml version="1.0"?>
<root>
<my:element xmlns:my="http://www.example.com/ns1">
<!-- here, the prefix my is bound to http://www.example.com/ns1 -->
</my:element>
<my:element xmlns:my="http://www.example.com/ns2">
<!-- here, the prefix my is bound to http://www.example.com/ns2 -->
</my:element>
</root>
बंधन को एक नेस्टेड तत्व में ओवरराइड किया जा सकता है (हालांकि यह पठनीयता को प्रभावित करता है):
<?xml version="1.0"?>
<my:element xmlns:my="http://www.example.com/ns1">
<!-- here, the prefix my is bound to http://www.example.com/ns1 -->
<my:first-child-element/>
<my:child-element xmlns:my="http://www.example.com/ns2">
<!-- here, the prefix my is bound to http://www.example.com/ns2,
including for the element my:child-element -->
</my:child-element>
<!-- here, the prefix my is bound to http://www.example.com/ns1 -->
<my:last-child-element/>
</my:element>
जड़ तत्व में सभी नाम स्थान बाइंडिंग की घोषणा करना बहुत आम है, जो पठनीयता में सुधार करता है।
<?xml version="1.0"?>
<root
xmlns="http://www.example.com/default-namespace"
xmlns:ns1="http://www.example.com/ns1"
xmlns:ns2="http://www.example.com/ns2">
<ns1:element>
<ns2:other-element/>
</ns1:element>
</root>