HTML की तरह XML में भी टैग बनाने के लिए एंगल ब्रैकेट और एम्परसैंड इस्तेमाल होते हैं, इसलिए ये चिह्न टेक्स्ट कंटेंट के अंदर सीधे नहीं आ सकते — ऐसा होने पर डॉक्यूमेंट अमान्य XML बन जाता है, और पार्सर गलती को नज़रअंदाज़ करने की बजाय एरर देकर रुक जाता है।
पाँच अनिवार्य entity
HTML में सैकड़ों नामित entity होते हैं, लेकिन XML स्पेसिफिकेशन सिर्फ पाँच की मांग करता है:
<—<की जगह>—>की जगह&—&की जगह'— एकल उद्धरण चिह्न'की जगह"— दोहरे उद्धरण चिह्न"की जगह
उद्धरण चिह्न सिर्फ attribute की वैल्यू के अंदर एस्केप करना ज़रूरी है, जबकि < और & किसी भी टेक्स्ट कंटेंट में एस्केप होने चाहिए।
यह असल में कहाँ काम आता है
UIDAI की ऑफलाइन आधार e-KYC फ़ाइल XML फॉर्मेट में आती है, और इसमें नाम या पते में मौजूद कोई भी एम्परसैंड बिना एस्केप किए पूरी फ़ाइल को अमान्य बना सकता है। यही समस्या न्यूज़ वेबसाइट के RSS फ़ीड में भी दिखती है — किसी हेडलाइन में बिना एस्केप & होने पर पूरी फ़ीड सब्सक्राइबर के रीडर में टूट जाती है।
XML, HTML से ज़्यादा सख़्त क्यों है
ब्राउज़र आम तौर पर गलत HTML को "माफ़" कर देते हैं और गलतियों के बावजूद पेज दिखाने की कोशिश करते हैं। XML पार्सर ऐसा नहीं करते — एक भी बिना एस्केप किया गया एम्परसैंड या एंगल ब्रैकेट पूरे डॉक्यूमेंट को अमान्य बना देता है, और प्रोसेसिंग एरर के साथ रुक जाती है।
यह कब काम आता है
- XML डॉक्यूमेंट (फ़ीड, कॉन्फ़िग, SOAP मैसेज) में डालने से पहले यूज़र-इनपुट टेक्स्ट तैयार करना।
- डिबगिंग: मिले हुए XML में entity के पीछे छिपा असली टेक्स्ट देखना।
- XML फ़ाइलों को हाथ से एडिट करना, जहाँ डॉक्यूमेंट का ढांचा टूटना नहीं चाहिए।
Entity का विकल्प: CDATA सेक्शन
अगर किसी टेक्स्ट ब्लॉक में बहुत सारे खास चिह्न हों — जैसे XML के अंदर HTML या कोड का टुकड़ा — तो उसे <![CDATA[...]]> में लपेटना आसान होता है, जहाँ < और & को एस्केप करने की ज़रूरत नहीं पड़ती और वे सादे टेक्स्ट की तरह पढ़े जाते हैं। अपवाद है ]]> क्रम, जो CDATA को बंद कर देता है और इसलिए खुद सेक्शन के कंटेंट में नहीं आ सकता।