डेटा फ़ॉर्मैट

XML में CDATA क्या है? सिंटैक्स और उदाहरण

CDATA सेक्शन XML एलिमेंट के भीतर सीधे < और & वाला टेक्स्ट रखने देता है। पार्सर इस सामग्री को एलिमेंट मार्कअप की जगह टेक्स्ट मानता है।

प्रकाशित

XML एलिमेंट के भीतर CDATA का सिंटैक्स

एलिमेंट का टेक्स्ट x < 10 & ready है। Delimiters XML सिंटैक्स हैं और टेक्स्ट का भाग नहीं हैं। CDATA कोई child element नहीं बनाता, एन्कोडिंग घोषित नहीं करता और सामग्री को चलने वाला कोड नहीं बनाता।

<message><![CDATA[x < 10 & ready]]></message>

CDATA और escaped text एक ही मान दे सकते हैं

दोनों एलिमेंट में <b>Hello</b> & ready स्ट्रिंग है। cdata में b टैग जैसे हिस्से टेक्स्ट हैं। escaped में पार्सर entity references को उन्हीं वर्णों में बदलता है। XML पढ़ने में जो रूप आसान हो उसे चुनें; उपभोक्ता को सामान्यतः अंतिम मान चाहिए।

<samples>
  <cdata><![CDATA[<b>Hello</b> & ready]]></cdata>
  <escaped>&lt;b&gt;Hello&lt;/b&gt; &amp; ready</escaped>
</samples>

CDATA के भीतर entity references literal रहते हैं

literal में &amp; के पाँच वर्ण हैं, जबकि resolved में एक ampersand है। पहले मान escape करके फिर CDATA में रखने से अंतिम टेक्स्ट बदल जाता है। नीचे के इंटरैक्टिव उदाहरण में दोनों स्थितियों का वास्तविक आउटपुट देखें।

<literal><![CDATA[&amp;]]></literal>
<resolved>&amp;</resolved>

नेस्टिंग के बिना ]]> कैसे रखें

इसमें दो साथ-साथ सेक्शन हैं। पहला दो literal closing brackets के बाद समाप्त होता है; दूसरा > से शुरू होता है। दोनों का संयुक्त टेक्स्ट a ]]> b है। सामान्य escaped text भी उपयोग कर सकते हैं: <message>a ]]&gt; b</message>।

CDATA सेक्शन नेस्ट नहीं हो सकते। XML बनाते समय किसी भी user input को delimiters के बीच जोड़ने के बजाय XML serializer और text nodes उपयोग करें। DOM का createCDATASection उस मान को अस्वीकार करता है जिसमें ]]> हो।

<message><![CDATA[a ]]]]><![CDATA[> b]]></message>

CDATA और PCDATA, attributes और comments का अंतर

DTD में CDATA type वाला attribute इस शब्द का अलग उपयोग है। इससे attribute value के भीतर <![CDATA[...]]> लिखने की अनुमति नहीं मिलती। वहाँ सामान्य attribute escaping करें।

रूपअर्थसामान्य गलती
CDATA सेक्शनliteral markup वर्णों वाला एलिमेंट टेक्स्टसेक्शन के भीतर &amp; से & बनने की अपेक्षा
PCDATA / सामान्य पार्स किया टेक्स्टऐसा टेक्स्ट जिसमें entity references पहचाने जाते हैंliteral & को escape किए बिना छोड़ना
Attribute valuestart tag के भीतर उद्धरण में रखा मानमान में CDATA सेक्शन डालना
XML टिप्पणीएलिमेंट टेक्स्ट से अलग comment सिंटैक्सडेटा को comment out करने के लिए CDATA उपयोग करना

CDATA को JSON में बदलने पर क्या होता है?

कन्वर्टर की Smart mapping पार्स हुए character data को JSON स्ट्रिंग बनाती है। इसमें CDATA की सीमाएँ और entities की मूल वर्तनी सुरक्षित नहीं रहती। मानों की तुलना करें; मूल XML की बाइट-दर-बाइट पुनर्रचना की अपेक्षा न करें।

उदाहरण में Привет और नमस्ते हैं। CDATA के भीतर ये सामान्य Unicode टेक्स्ट हैं। यदि मूल फ़ाइल के बाइट गलत एन्कोडिंग से पढ़े गए हों, तो CDATA wrapper उस गलती को ठीक नहीं करता।

CDATA HTML को सुरक्षित बनाने का तरीका नहीं है

जब XML पार्सर CDATA पढ़ता है, तब <b>Hello</b> वाली स्ट्रिंग डेटा रहती है। यदि ऐप बाद में उसे HTML की तरह डालता है, तो ब्राउज़र HTML के नियम लगाएगा। उसे टेक्स्ट की तरह दिखाएँ, या HTML सच में चाहिए तो ऐप की sanitization नीति लागू करें।

CDATA सिंटैक्स XML का हिस्सा है। सामान्य HTML दस्तावेज़ों में इसे सार्वभौमिक escaping तरीका न मानें। यहाँ उदाहरणों में बनी स्ट्रिंग टेक्स्ट के रूप में दिखाई जाती हैं।

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

क्या CDATA में दूसरा CDATA सेक्शन हो सकता है?

नहीं। पहला ]]> वर्तमान सेक्शन बंद कर देता है। टेक्स्ट को साथ-साथ सेक्शन में बाँटें या XML serializer से सामान्य टेक्स्ट की तरह escape कराएँ।

क्या CDATA में कोई भी binary data रख सकते हैं?

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

XML में HTML रखने के लिए CDATA ज़रूरी है?

नहीं। सही तरह escaped element text वही HTML स्ट्रिंग दर्शा सकता है। CDATA स्रोत लिखने का सुविधाजनक तरीका है; इससे उस HTML को render करना सुरक्षित होने की गारंटी नहीं मिलती।

उदाहरण आज़माएँ

CDATA, escaping और literal entities की तुलना करें

टेक्स्ट के तीन रूपों वाला एक दस्तावेज़ बदलें।

<samples><cdata><![CDATA[<b>Привет / नमस्ते</b> & ready]]></cdata><escaped>&lt;b&gt;Привет / नमस्ते&lt;/b&gt; &amp; ready</escaped><literal><![CDATA[&amp;]]></literal></samples>

अपेक्षित परिणाम: cdata और escaped का टेक्स्ट समान है; literal में पाँच-वर्ण वाली &amp; स्ट्रिंग है।

उदाहरण आज़माएँ

दो CDATA सेक्शन का टेक्स्ट जोड़ें

]]> वर्ण साथ-साथ सेक्शन में बाँटे गए हैं।

<message><![CDATA[a ]]]]><![CDATA[> b]]></message>

अपेक्षित परिणाम: message का मान a ]]> b है। CDATA delimiters पार्स हुए टेक्स्ट का भाग नहीं हैं।

पार्स हुआ टेक्स्ट देखें

देखें कि CDATA से JSON में क्या मिलता है

तुलना वाला उदाहरण लोड करें और स्थानीय XML to JSON कन्वर्टर में बनी स्ट्रिंग जाँचें।

XML to JSON Converter खोलें →

दस्तावेज़ और मानक