XML

XML फ़ाइल क्या होती है?

JSON का लंबा-चौड़ा पूर्वज। कंपनियों और सरकारों के बीच डेटा आदान-प्रदान की रीढ़ आज भी यही है।

XML है क्या

XML एक सादा टेक्स्ट फ़ॉर्मेट है, जो किसी भी एडिटर में खुल जाता है। इसका इस्तेमाल प्रोग्रामों के बीच डेटा ले जाना के लिए होता है।

एक्सटेंशन .xml है और पूरा नाम Extensible Markup Language। दोनों उतना नहीं बताते जितना यह कि फ़ाइल अंदर क्या-क्या रख सकती है — और इस पन्ने का बाक़ी हिस्सा इसी के बारे में है।

XML आया कहाँ से

इसे W3C ने 1998 में जारी किया था। विनिर्देश XML 1.0 है।

जो फ़ॉर्मेट इतने लंबे समय तक पढ़ा जाता रहा हो, उसे वह चीज़ सौंपी जा सकती है जो आपको दस साल बाद वापस चाहिए।

विनिर्देश सार्वजनिक है

यह पूरा प्रकाशित है, इसलिए कोई भी इसे देखकर अंदाज़ा लगाने के बजाय दस्तावेज़ पढ़कर लागू कर सकता है। यही वजह है कि यह फ़ॉर्मेट इतने सारे प्रोग्रामों में मिलता है, और यही वजह है कि बीस साल पहले लिखी गई फ़ाइलें आज भी खुल जाती हैं। पर विनिर्देश का प्रकाशित होना और उसका रॉयल्टी-मुक्त होना एक बात नहीं है: जहाँ फ़ॉर्मेट किसी कोडेक को अपने अंदर लपेटता है, वहाँ पेटेंट का लाइसेंस एक अलग सवाल है, और मानक उसका जवाब नहीं देता।

कुछ भी फेंका नहीं जाता

XML फ़ाइल अपना अंदरूनी हिस्सा हूबहू सहेजती है। दोबारा सहेजने से कुछ नहीं बदलता, इसलिए इसे जितनी बार चाहें खोलिए, बदलिए और फिर से सहेजिए — नुक़सान जमा नहीं होता। यही बात इसे सौंपने का नहीं, काम करने का फ़ॉर्मेट बनाती है।

इसमें टिप्पणी छोड़ी जा सकती है

XML फ़ाइल में टिप्पणी लिखने का तरीक़ा मौजूद है — और यही उस फ़ाइल में, जिसे कोई इंसान सँभालता है, और उसमें, जिसे कोई प्रोग्राम लिखता है, फ़र्क़ करता है। बिना टिप्पणी वाले फ़ॉर्मेट में बदलते समय सबसे पहले यही जाती हैं, और चेतावनी कोई नहीं देता।

XML को खोलता कौन है

Visual Studio Code और oXygen XML Editor इसे पढ़ते हैं, और इसी तरह के ज़्यादातर दूसरे प्रोग्राम भी।

फ़ाइल न खुले तो कसूर फ़ॉर्मेट का शायद ही कभी होता है — अक्सर प्रोग्राम ही फ़ॉर्मेट से पुराना होता है। किसी पुरानी चीज़ में बदल लेना इससे निकलने का भरोसेमंद रास्ता है, और इस वेबसाइट का बाक़ी हिस्सा इसी के लिए है।

इसे ब्राउज़र में खोलना

इसे हर मौजूदा ब्राउज़र पढ़ लेता है।

इसलिए इसे किसी पन्ने पर रखना या संदेश के साथ भेजना बेफ़िक्र होकर किया जा सकता है — सामने वाले ने क्या इंस्टॉल कर रखा है, यह सोचने की ज़रूरत नहीं।

यह काम करने का फ़ॉर्मेट है

XML इसलिए बना है कि इसे खोला और बदला जाए। जब तक काम चल रहा है फ़ाइल इसी फ़ॉर्मेट में रखिए, और जब भी बनी हुई प्रति चाहिए हो, इसी से निर्यात कीजिए।

संरचना लिखने का तरीक़ा, फ़ॉर्मेट नहीं

XML अपने-आप कुछ नहीं बताता। यह नेस्टेड एलिमेंट और एट्रिब्यूट से दस्तावेज़ को मार्कअप करने के नियमों का सेट है, और मतलब उस पर बनी शब्दावली से आता है — RSS, SVG, SOAP, sitemap फ़ाइलें, हर Office और OpenDocument फ़ाइल का भीतरी हिस्सा।

तो «एक XML फ़ाइल» कहना उतना ही बताता है जितना «एक टेक्स्ट फ़ाइल» कहना। मायने रखता है वह किस शब्दावली का पालन करती है, और यह आमतौर पर root एलिमेंट में या फ़ाइल के इशारा किए स्कीमा में घोषित होता है।

Well-formed और valid अलग शब्द हैं

Well-formed का मतलब है वाक्य-रचना सही है: एक root एलिमेंट, हर टैग बंद, एलिमेंट सही ढंग से नेस्टेड, एट्रिब्यूट उद्धृत। पार्सर इससे कम कुछ ठुकरा देता है — XML जान-बूझकर सख़्त है, और HTML के उलट कोई एरर-रिकवरी नहीं।

Valid का मतलब है अतिरिक्त रूप से स्कीमा का पालन करना: यह एलिमेंट सिर्फ़ वे एलिमेंट रख सकता है, यह एट्रिब्यूट ज़रूरी है, यह मूल्य तारीख़ होनी चाहिए। कोई दस्तावेज़ पूरी तरह well-formed और अपने मक़सद के लिए पूरी तरह ग़लत हो सकता है।

नेमस्पेस, और उनसे आने वाले बग

नेमस्पेस इसलिए हैं ताकि दो शब्दावलियाँ अपने एलिमेंट नाम टकराए बिना जोड़ी जा सकें। नेमस्पेस URI से पहचाना जाता है, जो एक नाम है, पता नहीं: वहाँ से कुछ नहीं लाया जाता, और उसे किसी चीज़ तक पहुँचना ज़रूरी नहीं।

ये XML पार्सिंग बग की सबसे बड़ी वजह भी हैं। नेमस्पेस को ध्यान में रखे बिना लिखी क्वेरी चुपचाप कुछ नहीं मिलाती, और दस्तावेज़ किसी इंसान को पढ़ने में सही लगता है। पार्सर ज़ोर दे कि ऐसा कोई एलिमेंट है ही नहीं जबकि आप उसे सीधे देख रहे हों, तो पहले नेमस्पेस जाँचिए।

एनकोडिंग घोषणा सजावट नहीं है

सही ढंग से लिखी XML फ़ाइल की पहली लाइन वर्शन और कैरेक्टर एनकोडिंग घोषित करती है। सादी टेक्स्ट फ़ाइल के उलट, यह एनकोडिंग को अंदाज़े की जगह दस्तावेज़ का हिस्सा बनाता है — यही वजह है कि XML अंतरराष्ट्रीय पाठ CSV या INI से कहीं ज़्यादा भरोसे से सँभालता है।

दो नतीजे जानने लायक़ हैं। एक एनकोडिंग घोषित और दूसरी में सहेजी फ़ाइल उलझाने वाली पार्स एरर देती है, ग़लत दिखते अक्षरों की जगह। और घोषणा से पहले byte order mark कुछ पार्सर को परेशान करता है।

बाहरी entity असली सुरक्षा समस्या है

XML के पास शॉर्टहैंड परिभाषित करने का तंत्र है — entity — और पुराने ढंग से यह किसी बाहरी संसाधन की ओर इशारा कर सकती थी। जो पार्सर उन्हें हल करता है वह स्थानीय फ़ाइलें पढ़ या नेटवर्क अनुरोध कर सकता है।

यही XXE कमज़ोरी है, और इसने साधारण दिखने वाले अपलोड से सर्वर फ़ाइलें उजागर करके असली उल्लंघन किए हैं। billion laughs हमला entity परिभाषाओं को इस तरह नेस्ट करता है कि छोटी फ़ाइल गीगाबाइट तक फैल जाती है। बाहर से आई कोई भी XML अविश्वसनीय इनपुट है।

औज़ार ही वजह है कि XML टिका है

XPath किसी दस्तावेज़ के किसी भी हिस्से को छोटी अभिव्यक्ति से पहचानता है। XSLT एक XML दस्तावेज़ को दूसरे में, या HTML या पाठ में घोषणात्मक रूप से बदलता है। XSD स्कीमा परिभाषित और लागू करता है। तीनों मानक हैं, तीनों परिपक्व हैं।

यही वह है जब लोग कहते हैं XML बड़बोला पर सक्षम है। कोण-कोष्ठक क़ीमत हैं; क्वेरी, ट्रांसफ़ॉर्मेशन और मान्यता तंत्र ख़रीदी जा रही चीज़ है, और जिन उद्योगों को इसकी ज़रूरत है वहाँ अब भी इसका कोई ठीक समकक्ष नहीं।

इसे पढ़ना, संपादित करना और बदलना

कोई भी टेक्स्ट एडिटर इसे खोलता है, और XML समर्थन वाला एडिटर काम आता है: यह हिस्से समेट सकता है, टाइप करते वक़्त well-formedness जाँच सकता है। ब्राउज़र भी XML को मोड़ने लायक़ पेड़ की तरह रेंडर करते हैं।

JSON में बदलना आम है और एक दिशा में हानिकारक: एट्रिब्यूट का कोई JSON समकक्ष नहीं और उन्हें गढ़ा कुंजी-नाम मिलता है, और mixed content — भीतर मार्कअप वाला पाठ — का कोई प्रतिनिधित्व ही नहीं। डेटा-आकार वाली XML साफ़ बदलती है; दस्तावेज़-आकार वाली नहीं बचती।

ज़रूरी जानकारी, एक जगह

XML फ़ॉर्मेट की पहचान और उसका स्रोत।
एक्सटेंशन.xml
मीडिया टाइपapplication/xml, text/xml
प्रकाशकW3C
पहली बार प्रकाशित1998
विनिर्देशXML 1.0

XML फ़ाइलें: आम सवाल

XML फ़ाइल कैसे खोलूँ

कोई भी टेक्स्ट एडिटर, और ब्राउज़र इसे मोड़ने लायक़ पेड़ की तरह रेंडर करता है, जो अनजान फ़ाइल जाँचने का सबसे तेज़ तरीक़ा है। XML समर्थन वाला एडिटर well-formedness जाँच जोड़ता है और एक लंबी लाइन में आई फ़ाइल को पढ़ने लायक़ बना सकता है।

Well-formed और valid XML में क्या फ़र्क़ है

Well-formed का मतलब है वाक्य-रचना सही है — एक root, सब कुछ बंद और सही नेस्टेड। Valid का मतलब है यह स्कीमा का भी पालन करता है जो बताता है कहाँ कौन-से एलिमेंट और एट्रिब्यूट अनुमत हैं। दस्तावेज़ well-formed और अपने मक़सद के लिए पूरी तरह ग़लत हो सकता है।

मेरा पार्सर क्यों कहता है कोई एलिमेंट मौजूद नहीं

लगभग हमेशा नेमस्पेस। एलिमेंट के नेमस्पेस को ध्यान में रखे बिना लिखी क्वेरी चुपचाप कुछ नहीं मिलाती, जबकि दस्तावेज़ किसी इंसान को सही लगता है। पहले root एलिमेंट पर नेमस्पेस घोषणाएँ जाँचिए।

क्या XML फ़ाइलें सुरक्षा जोखिम हैं

हो सकती हैं। बाहरी entity हल होने से दिया गया दस्तावेज़ स्थानीय फ़ाइलें पढ़ सकता है या नेटवर्क अनुरोध कर सकता है — XXE कमज़ोरी — और नेस्टेड entity छोटी फ़ाइल को गीगाबाइट तक फैला सकती हैं। लाइब्रेरी के हिसाब से तयशुदा सेटिंग अलग होती है।

क्या XML को JSON में बदल सकता हूँ

डेटा-आकार वाली XML साफ़ बदलती है। एट्रिब्यूट का कोई JSON समकक्ष नहीं और गढ़ा कुंजी-नाम मिलता है, और mixed content का कोई प्रतिनिधित्व ही नहीं, इसलिए दस्तावेज़-आकार वाली XML आने-जाने में नहीं बचती।

क्या XML पुराना पड़ चुका है

नहीं। EPUB, DOCX, XLSX और SVG नीचे XML हैं, और स्वास्थ्य सेवा, वित्त, सरकार और प्रकाशन XML मानकों पर चलते हैं। इसने वेब API JSON को खोए; इसने दस्तावेज़ या नियमित आदान-प्रदान नहीं खोया।