सीधे कंटेंट पर जाएं

अपना XML जांचें

बेमेल टैग, अपरिभाषित एंटिटी, टूटे नेमस्पेस — ब्राउज़र के अपने XML पार्सर से पकड़े और सटीक जगह के साथ बताए जाते हैं। कुछ भी स्टोर नहीं किया जाता।

  • कभी स्टोर नहीं होती
  • न कतार, न इंतज़ार
  • साइनअप नहीं, वॉटरमार्क नहीं
फ़ॉर्मैट किया हुआ

XML पेस्ट करें, टाइप करते-करते उसकी जांच होती रहेगी।

यह कैसे काम करता है

1

अपना XML पेस्ट करें

या फ़ाइल छोड़ें। कुछ भी कहीं नहीं भेजा जाता।

2

नतीजा पढ़ें

well-formed, और अंदर क्या है उसका सारांश। या पहली गड़बड़ी की सटीक लाइन और कॉलम।

3

ठीक करें और दोबारा जांचें

वहीं एडिट करें; टाइप करते-करते जवाब अपडेट होता है।

दो अलग कसौटियां, और यह कौन-सी है

XML सही होने के दो स्तर तय करता है, और इन्हें अक्सर आपस में मिला दिया जाता है। Well-formed का मतलब है कि डॉक्यूमेंट XML के अपने सिंटैक्स का पालन करता है: एक रूट एलिमेंट, हर टैग बंद, सही नेस्टिंग, मान्य कैरेक्टर, ठीक से एस्केप किए गए ऐम्परसैंड और ऐंगल ब्रैकेट, कोट में एट्रिब्यूट वैल्यू, और एक एलिमेंट में एट्रिब्यूट के नाम अलग-अलग। Valid इससे ज़्यादा सख़्त है — कि डॉक्यूमेंट किसी ख़ास स्कीमा से भी मेल खाता है, सही एलिमेंट सही क्रम में, सही तरह की वैल्यू के साथ। यह पेज पहली चीज़ जांचता है। इसमें फ़ेल होने वाले डॉक्यूमेंट को हर XML पार्सर मना कर देता है, इसलिए यही जांच तय करती है कि फ़ाइल पढ़ी भी जा सकती है या नहीं।

गड़बड़ियां अनुमान के मुताबिक़ ही होती हैं। बिना एस्केप किया & सबसे आम है, बहुत बड़े अंतर से — यह एंटिटी रेफ़रेंस शुरू करता है, इसलिए query string वाला URL सीधे किसी एलिमेंट में पेस्ट करने से डॉक्यूमेंट टूट जाता है। टेक्स्ट में अकेला < भी यही करता है। फिर आते हैं बेमेल या बंद न किए गए टैग, ग़लत क्रम में बंद किए गए एलिमेंट, दो रूट एलिमेंट, और कोई भटका हुआ कंट्रोल कैरेक्टर जिसे XML बिल्कुल अनुमति नहीं देता, भले ही वह फ़ाइल में अदृश्य रूप से बैठा हो।

DTD या स्कीमा जानबूझकर कभी नहीं लाया जाता, और यह कोई कमी नहीं बल्कि सुरक्षा की ख़ूबी है। XML डॉक्यूमेंट किसी बाहरी एंटिटी का नाम दे सकता है, और उसे resolve करने वाला पार्सर जाकर वह चीज़ ले आएगा जिसकी ओर वह इशारा करती है — डिस्क पर कोई फ़ाइल, किसी इंटरनल नेटवर्क का कोई पता। यही XML External Entity कमज़ोरी है, जो सबसे ज़्यादा इस्तेमाल की जाने वाली बग कैटेगरी में से एक है, और इससे पूरा बचाव सिर्फ़ यह है कि इन्हें resolve ही न किया जाए। इसलिए यहां कुछ भी किसी चीज़ तक नहीं पहुंचता, और इसकी क़ीमत यह है कि स्कीमा के हिसाब से वैलिडेशन इसके दायरे से बाहर है।

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

जब आपको कुछ और चाहिए

स्कीमा के हिसाब से वैलिडेट करने के लिए xmllint मानक टूल है: XSD के लिए xmllint --noout --schema schema.xsd file.xml, RELAX NG के लिए --relaxng, और DTD के लिए --noout --valid। यह पहली गड़बड़ी पर रुकने के बजाय हर उल्लंघन बताता है, और जब डॉक्यूमेंट सिर्फ़ टूटा हुआ नहीं बल्कि सच में ग़लत हो, तब आपको यही चाहिए।

जहां इनपुट भरोसेमंद न हो, वहां वैलिडेटर से ज़्यादा पार्सर की कॉन्फ़िगरेशन मायने रखती है। जो भी भाषा आप इस्तेमाल कर रहे हैं, उसमें external entity resolution और DTD प्रोसेसिंग साफ़ तौर पर बंद करें — Python में defusedxml, PHP में LIBXML_NONET, Java में secure processing — क्योंकि कई लोकप्रिय पार्सर आज भी डिफ़ॉल्ट रूप से एंटिटी resolve करते हैं, और कमज़ोरी इसी डिफ़ॉल्ट में है।

अक्सर पूछे जाने वाले सवाल

क्या मेरा XML कहीं स्टोर होता है?

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

“well-formed” का मतलब क्या है?

कि डॉक्यूमेंट XML के अपने नियमों का पालन करता है: हर टैग बंद, टैग सही क्रम में नेस्ट, ठीक एक रूट एलिमेंट, एट्रिब्यूट कोट में, और हर & और < या तो एस्केप किया गया हो या किसी मान्य एंटिटी का हिस्सा हो। XML के बारे में पूछे जा सकने वाले दो सवालों में से यह पहला है। दूसरा — कि डॉक्यूमेंट किसी ख़ास स्कीमा से मेल खाता है या नहीं — अलग सवाल है, और यह पेज उसका जवाब नहीं देता।

क्या यह DTD या XSD स्कीमा के हिसाब से वैलिडेट करता है?

नहीं। यह जांचता है कि डॉक्यूमेंट well-formed XML है, और ज़्यादातर लोग असल में इसी गड़बड़ी से जूझ रहे होते हैं। स्कीमा वैलिडेशन के लिए आपकी स्कीमा फ़ाइल और एक वैलिडेटिंग पार्सर चाहिए, और कोई भी ब्राउज़र ऐसा पार्सर साथ नहीं देता; यहां ऐसा करने का दावा करने का मतलब होता या तो आपका डॉक्यूमेंट सर्वर पर भेजना या चुपचाप जांच न करना। यह फ़र्क़ जानने लायक है: कोई डॉक्यूमेंट पूरी तरह well-formed होकर भी अपने स्कीमा के हिसाब से ग़लत हो सकता है।

XML की सबसे आम गड़बड़ियां कौन-सी हैं?

अकेला ऐम्परसैंड सबसे आम है — & को &amp; लिखना ज़रूरी है, URL के अंदर भी, इसलिए query string सीधे किसी एलिमेंट में पेस्ट करने से डॉक्यूमेंट टूट जाता है। उसके बाद: ग़लत क्रम में बंद किया गया टैग, दो रूट एलिमेंट, &nbsp; जैसी अपरिभाषित एंटिटी (जिसे HTML परिभाषित करता है, XML नहीं), और बिना डिक्लेयर किए इस्तेमाल किया गया नेमस्पेस प्रीफ़िक्स। हर गड़बड़ी उसके नाम और जगह के साथ बताई जाती है।

क्या HTML मान्य XML है?

आमतौर पर नहीं, और यह ग़लती नहीं, सामान्य बात है। HTML में <br> और <li> जैसे बिना बंद किए टैग, बिना कोट के एट्रिब्यूट और अकेले ऐम्परसैंड चलते हैं; XML में इनमें से कुछ भी नहीं चलता। अगर आपको ऐसा HTML चाहिए जो मान्य XML भी हो, तो वह XHTML है, और उसमें हर टैग बंद करना ज़रूरी है।

क्या कोई साइज़ लिमिट है?

उपलब्ध मेमोरी, न कि हमारी लगाई कोई सीमा। कुछ मेगाबाइट के डॉक्यूमेंट तुरंत फ़ॉर्मैट हो जाते हैं; बहुत बड़े डॉक्यूमेंट की सीमा यह है कि एक बार में कितना मेमोरी में रखा जा सकता है, हमारी तरफ़ की कोई चीज़ नहीं।

ध्यान दें: यह well-formedness की जांच है, स्कीमा वैलिडेशन नहीं। टैग का संतुलन, सही नेस्टिंग और मान्य कैरेक्टर जांचे जाते हैं और पहली गड़बड़ी की सटीक लाइन और कॉलम बताया जाता है। DTD या XSD के हिसाब से वैलिडेट करने के लिए उसे लाना पड़ता, यानी नेटवर्क रिक्वेस्ट — जो यह पेज जानबूझकर कभी नहीं करता।

यह टूल अपनी वेबसाइट पर लगाएं

किसी भी ब्लॉग, क्लास पेज या हेल्प आर्टिकल के लिए मुफ़्त। एक स्निपेट पेस्ट करें और आपके विज़िटर इसे सीधे आपके पेज पर इस्तेमाल कर सकेंगे।