सीडीएटीए
सीडीएटीए शब्द का अर्थ कैरेक्टर डेटा है, जिसका उपयोग मार्कअप भाषाओं एसजीएमएल और एक्सएमएल में अलग किंतु संबंधित उद्देश्यों के लिए किया जाता है। यह शब्द इंगित करता है कि दस्तावेज़ का एक निश्चित भाग गैर-वर्ण डेटा या अधिक विशिष्ट सीमित संरचना वाले कैरेक्टर डेटा के अतिरिक्त सामान्य कैरेक्टर डेटा है।
एक्सएमएल में सीडीएटीए अनुभाग
एक एक्सएमएल दस्तावेज़ या बाहरी इकाई में एक सीडीएटीए अनुभाग तत्व सामग्री का एक टुकड़ा है जिसे पाठ्य डेटा के रूप में शाब्दिक रूप से व्याख्या करने के लिए चिह्नित किया गया है, चिह्नित सामग्री के रूप में नहीं।[1] एक सीडीएटीए अनुभाग कैरेक्टर डेटा व्यक्त करने के लिए केवल एक वैकल्पिक वाक्यविन्यास है; सीडीएटीए अनुभाग में कैरेक्टर डेटा और मानक सिंटैक्स में कैरेक्टर डेटा के बीच कोई अर्थपूर्ण अंतर नहीं है, उदाहरण के लिए,<
और&
<
और&
, क्रमश द्वारा प्रतिनिधित्व किया जाता है।
वाक्यविन्यास और व्याख्या
एक सीडीएटीए अनुभाग निम्नलिखित क्रम से प्रारंभ होता है:
<![CDATA[
और अनुक्रम की अगली घटना के साथ समाप्त होता है:
]]>
इन दो अनुक्रमों के बीच संलग्न सभी वर्णों की व्याख्या वर्णों के रूप में की जाती है, मार्कअप या इकाई संदर्भों के रूप में नहीं। प्रत्येक वर्ण को शाब्दिक रूप से लिया जाता है, केवल एक ही अपवाद ]]>
वर्णों का क्रम है। में:
<sender>John Smith</sender>
प्रारंभ और अंत प्रेषक टैग मार्कअप के रूप में व्याख्या किए जाते हैं। चूँकि कोड:
<![CDATA[<sender>John Smith</sender>]]>
के समान है:
<sender>John Smith</sender>
इस प्रकार, टैग्स की ठीक वही स्थिति होगी जो जॉन स्मिथ की है; उन्हें पाठ के रूप में माना जाएगा।
इसी प्रकार, यदि संख्यात्मक वर्ण संदर्भ ð
तत्व सामग्री में दिखाई देता है, इसे एकल यूनिकोड वर्ण 00F0 (छोटा अक्षर एथ) के रूप में समझा जाएगा। किंतु यदि वही सीडीएटीए सेक्शन में दिखाई देता है, तो इसे छह वर्णों के रूप में पार्स किया जाएगा: एम्परसेंड, हैश मार्क, अंक 2, अंक 4, अंक 0, अर्धविराम।
सीडीएटीए अनुभागों का उपयोग
एक्सएमएल दस्तावेजों के नए लेखक अधिकांशतः सीडीएटीए अनुभाग के उद्देश्य को गलत समझते हैं, यह गलती से मानते हैं कि इसका उद्देश्य प्रसंस्करण के समय डेटा को सामान्य कैरेक्टर डेटा के रूप में व्यवहार करने से बचाना है। एक्सएमएल दस्तावेज़ों के साथ काम करने के लिए कुछ एपीआई सीडीएटीए अनुभागों तक स्वतंत्र पहुंच के विकल्प प्रदान करते हैं, किंतु ऐसे विकल्प एक्सएमएल प्रोसेसिंग सिस्टम की सामान्य आवश्यकताओं के ऊपर और हट कर उपस्थित हैं, और अभी भी डेटा के अंतर्निहित अर्थ को नहीं बदलते हैं। कैरेक्टर डेटा कैरेक्टर डेटा है, चाहे वह सीडीएटीए अनुभाग या सामान्य मार्कअप के माध्यम से व्यक्त किया गया हो। सीडीएटीए अनुभाग एक्सएमएल दस्तावेज़ के अंदर टेक्स्ट डेटा के रूप में एक्सएमएल कोड लिखने के लिए उपयोगी होते हैं। उदाहरण के लिए, यदि कोई एक्स्टेंसिबल स्टाइलशीट लैंग्वेज के साथ एक पुस्तक टाइप करना चाहता है जो एक्सएमएल एप्लिकेशन के उपयोग की व्याख्या करता है, तो एक्सएमएल मार्कअप पुस्तक में दिखाई देने के लिए सीडीएटीए अनुभाग में स्रोत फ़ाइल में लिखा जाएगा।
नेस्टिंग
एक सीडीएटीए अनुभाग में स्ट्रिंग ]]>
नहीं हो सकती है और इसलिए सीडीएटीए अनुभाग के लिए नेस्टेड सीडीएटीए अनुभाग सम्मिलित करना संभव नहीं है। ]]>
त्रय वाले पाठ को एन्कोड करने के लिए सीडीएटीए अनुभागों का उपयोग करने का पसंदीदा विधि ">" से ठीक पहले त्रय की प्रत्येक घटना को विभाजित करके एकाधिक सीडीएटीए अनुभागों का उपयोग करना है। उदाहरण के लिए ]]>
को एनकोड करने के लिए कोई लिखेगा:
<![CDATA[]]]]><![CDATA[>]]>
इसका अर्थ है कि सांकेतिक शब्दों में बदलना]]>
सीडीएटीए अनुभाग के बीच में, की सभी घटनाओं को बदलें]]>
निम्नलिखित के साथ:
]]]]><![CDATA[>
यह सीडीएटीए अनुभाग को प्रभावी रूप से रोकता है और पुनरारंभ करता है।
एन्कोडिंग के साथ उद्देश्य
टेक्स्ट डेटा में, <?एक्सएमएल ...?>
हेडर में घोषित एन्कोडिंग में उपलब्ध नहीं होने वाले किसी भी यूनिकोड वर्ण को &#nnn; का उपयोग करके दर्शाया जा सकता है। संख्यात्मक कैरेक्टर संदर्भ किंतु सीडीएटीए अनुभाग के अंदर का पाठ एन्कोडिंग में उपलब्ध वर्णों तक सख्ती से सीमित है।
इस वजह से डेटा को कोट करने के लिए प्रोग्रामेटिक रूप से सीडीएटीए सेक्शन का उपयोग करना जिसमें संभावित रूप से &
' या '<
' वर्ण सम्मिलित हो सकता है' तब समस्याएँ उत्पन्न कर सकते हैं जब डेटा में ऐसे वर्ण होते हैं जिन्हें एन्कोडिंग में प्रदर्शित नहीं किया जा सकता है। एनकोडर के कार्यान्वयन के आधार पर, ये वर्ण खो सकते हैं, &#nnn;
के वर्णों में परिवर्तित हो सकते हैं कैरेक्टर संदर्भ, या एन्कोडिंग विफल होने का कारण बन सकता है। किंतु उनका रखरखाव नहीं किया जाएगा।
एक और उद्देश्य यह है कि परिवहन के समय एक एक्सएमएल दस्तावेज़ को एक एन्कोडिंग से दूसरे में ट्रांसकोड किया जा सकता है। जब एक्सएमएल दस्तावेज़ को अधिक सीमित वर्ण सेट में परिवर्तित किया जाता है, जैसे कि एएससीआईआई, ऐसे वर्ण जिन्हें अब प्रदर्शित नहीं किया जा सकता है, उन्हें रूपांतरित किया जाता है &#nnn;
दोषरहित रूपांतरण के लिए कैरेक्टर संदर्भ किंतु एक सीडीएटीए अनुभाग के अंदर इन वर्णों का बिल्कुल भी प्रतिनिधित्व नहीं किया जा सकता है, और सीडीएटीए अनुभाग की सामग्री को बदलते हुए, उन्हें हटा दिया जाना चाहिए या कुछ समकक्ष में परिवर्तित किया जाना चाहिए।
प्रोग्राम आउटपुट में सीडीएटीए का उपयोग
एक्सएचटीएमएल दस्तावेजों में सीडीएटीए अनुभाग वेब ब्राउज़र द्वारा अलग-अलग पार्स किए जाने के लिए उत्तरदायी हैं यदि वे दस्तावेज़ को एचटीएमएल के रूप में प्रस्तुत करते हैं, क्योंकि एचटीएमएल पार्सर सीडीएटीए प्रारंभ और अंत मार्करों को नहीं पहचानते हैं, और न ही वे एचटीएमएल इकाई संदर्भों को पहचानते हैं जैसे कि <
अंदर <script>
टैग। यह वेब ब्राउज़र में रेंडरिंग की समस्या उत्पन्न कर सकता है और यदि अविश्वसनीय स्रोतों से डेटा प्रदर्शित करने के लिए उपयोग किया जाता है, तो क्रॉस साइट स्क्रिप्टिंग भेद्यता हो सकती है, क्योंकि दो प्रकार के पार्सर इस बात पर असहमत होंगे कि सीडीएटीए अनुभाग कहाँ समाप्त होता है।
चूंकि वेब पेज स्क्रिप्ट में कम-से-कम चिह्न (<
)और एम्परसेंड (&
) और कुछ सीमा तक शैलियों का उपयोग करने में सक्षम होना उपयोगी है, उनसे बचने के लिए याद किए बिना, चारों ओर सीडीएटीए मार्कर का उपयोग करना समान्य है एक्सएचटीएमएल दस्तावेज़ों में इनलाइन <script>
और <style>
तत्वों का पाठ। किंतु दस्तावेज़ को एचटीएमएल पार्सर्स द्वारा भी पार्स किया जा सकता है, जो सीडीएटीए मार्करों को नहीं पहचानते हैं, सीडीएटीए मार्करों को सामान्यतः टिप्पणी-आउट कर दिया जाता है, जैसा कि इस जावास्क्रिप्ट उदाहरण में है:
<script type="text/javascript">
//<![CDATA[
document.write("<");
//]]>
</script>
या यह व्यापक शैली पत्रक उदाहरण:
<style type="text/css">
/*<![CDATA[*/
body { background-image: url("marble.png?width=300&height=300") }
/*]]>*/
</style>
यह तकनीक केवल इनलाइन स्क्रिप्ट और स्टाइलशीट का उपयोग करते समय आवश्यक है, और भाषा-विशिष्ट है। उदाहरण के लिए, सीएसएस स्टाइलशीट केवल टिप्पणी करने की दूसरी शैली (/* … */
), का समर्थन करती है, किंतु सीएसएस में जावास्क्रिप्ट की तुलना में <
और &
वर्णों की कम आवश्यकता होती है और इसलिए स्पष्ट सीडीएटीए मार्करों की भी कम आवश्यकता होती है।
डीटीडी में सीडीएटीए
सीडीएटीए-प्रकार विशेषता मान
एसजीएमएल और एक्सएमएल के लिए दस्तावेज़ प्रकार परिभाषा (डीटीडी) फाइलों में, एक विशेषता मान को सीडीएटीए प्रकार के रूप में निर्दिष्ट किया जा सकता है: इच्छानुसार कैरेक्टर डेटा सीडीएटीए-प्रकार विशेषता के अंदर, कैरेक्टर और इकाई संदर्भ मार्कअप की अनुमति है और दस्तावेज़ पढ़ने पर संसाधित किया जाता है ।
उदाहरण के लिए, यदि किसी एक्सएमएल डीटीडी में
<!ATTLIST foo a CDATA #IMPLIED>
इसका अर्थ है कि फू नाम के तत्वों में वैकल्पिक रूप से a नाम की एक विशेषता हो सकती है जो कि सीडीएटीए प्रकार की है। इस डीटीडी के अनुसार मान्य एक्सएमएल दस्तावेज़ में, ऐसा तत्व दिखाई दे सकता है:
<foo a="1 & 2 are < 3 
" />
और एक एक्सएमएल पार्सर एट्रिब्यूट के मान को कैरेक्टर डेटा के रूप में व्याख्या करेगा 1 और 2 <3 हैं।
सीडीएटीए-प्रकार इकाई
एक एसजीएमएल या एक्सएमएल डीटीडी में इकाई घोषणाएँ भी सम्मिलित हो सकती हैं जिसमें टोकन सीडीएटीए का उपयोग यह इंगित करने के लिए किया जाता है कि इकाई में वर्ण डेटा सम्मिलित है। कैरेक्टर डेटा घोषणा के अंदर ही प्रकट हो सकता है या एक यूनिफॉर्म रिसोर्स पहचानकर्ता द्वारा संदर्भित बाहरी रूप से उपलब्ध हो सकता है। किसी भी स्थितियों में, इकाई में कैरेक्टर संदर्भ और पैरामीटर इकाई संदर्भ मार्कअप की अनुमति है, और जब इसे पढ़ा जाता है तो इसे संसाधित किया जाएगा।
<DISPLAY_NAME Attribute="Y"><![CDATA[PFTEST0__COUNTER_6__:4:199:, PFTEST0__COUNTER_7__:4:199:]]></DISPLAY_NAME>
<SVLOBJECT><LONG name="" val="" INTEGER name="" val="" LONG name="" val=""/></SVLOBJECT>
यह भी देखें
संदर्भ