सीडीएटीए: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 1: Line 1:
{{Short description|Section delimiter in the markup languages SGML and XML}}
{{Short description|Section delimiter in the markup languages SGML and XML}}
सीडीएटीए शब्द, जिसका अर्थ चरित्र डेटा है, का उपयोग विशिष्ट, लेकिन संबंधित उद्देश्यों के लिए मार्कअप भाषाओं [[मानक सामान्यीकृत मार्कअप भाषा]] और [[एक्सएमएल]] में किया जाता है। शब्द इंगित करता है कि दस्तावेज़ का एक निश्चित भाग सामान्य 'वर्ण डेटा' है, बजाय गैर-वर्ण डेटा या अधिक विशिष्ट, सीमित संरचना वाले चरित्र डेटा के बजाय।


== XML में CDATA सेक्शन ==
 
एक एक्सएमएल दस्तावेज़ या बाहरी इकाई में, एक सीडीएटीए अनुभाग तत्व सामग्री का एक टुकड़ा है जिसे पाठ्य डेटा के रूप में शाब्दिक रूप से व्याख्या करने के लिए चिह्नित किया गया है, चिह्नित सामग्री के रूप में नहीं।<ref>[https://www.w3.org/TR/REC-xml/#sec-cdata-sect CDATA Sections]</ref> एक सीडीएटीए अनुभाग चरित्र डेटा व्यक्त करने के लिए केवल एक वैकल्पिक वाक्यविन्यास है; सीडीएटीए अनुभाग में चरित्र डेटा और मानक सिंटैक्स में चरित्र डेटा के बीच कोई अर्थपूर्ण अंतर नहीं है, उदाहरण के लिए,<code>&lt;</code>और<code>&amp;</code>द्वारा प्रतिनिधित्व किया जाता है<code>&amp;lt;</code>और<code>&amp;amp;</code>, क्रमश।
सीडीएटीए शब्द का अर्थ कैरेक्टर डेटा है, जिसका उपयोग मार्कअप भाषाओं एसजीएमएल और एक्सएमएल में अलग किंतु संबंधित उद्देश्यों के लिए किया जाता है। यह शब्द इंगित करता है कि दस्तावेज़ का एक निश्चित भाग गैर-वर्ण डेटा या अधिक विशिष्ट सीमित संरचना वाले कैरेक्टर डेटा के अतिरिक्त सामान्य कैरेक्टर डेटा है।
 
== एक्सएमएल में सीडीएटीए अनुभाग ==
एक एक्सएमएल दस्तावेज़ या बाहरी इकाई में एक सीडीएटीए अनुभाग तत्व सामग्री का एक टुकड़ा है जिसे पाठ्य डेटा के रूप में शाब्दिक रूप से व्याख्या करने के लिए चिह्नित किया गया है, चिह्नित सामग्री के रूप में नहीं।<ref>[https://www.w3.org/TR/REC-xml/#sec-cdata-sect CDATA Sections]</ref> एक सीडीएटीए अनुभाग कैरेक्टर डेटा व्यक्त करने के लिए केवल एक वैकल्पिक वाक्यविन्यास है; सीडीएटीए अनुभाग में कैरेक्टर डेटा और मानक सिंटैक्स में कैरेक्टर डेटा के बीच कोई अर्थपूर्ण अंतर नहीं है, उदाहरण के लिए,<code>&lt;</code>और<code>&amp;</code><code>&amp;lt;</code>और<code>&amp;amp;</code>, क्रमश द्वारा प्रतिनिधित्व किया जाता है।


===वाक्यविन्यास और व्याख्या ===
===वाक्यविन्यास और व्याख्या ===
एक सीडीएटीए अनुभाग निम्नलिखित क्रम से शुरू होता है:
एक सीडीएटीए अनुभाग निम्नलिखित क्रम से प्रारंभ होता है:


<syntaxhighlight lang="xml"><![CDATA[</syntaxhighlight>
<syntaxhighlight lang="xml"><![CDATA[</syntaxhighlight>
Line 12: Line 14:


<syntaxhighlight lang="xml">]]></syntaxhighlight>
<syntaxhighlight lang="xml">]]></syntaxhighlight>
इन दो अनुक्रमों के बीच संलग्न सभी वर्णों की व्याख्या वर्णों के रूप में की जाती है, मार्कअप या इकाई संदर्भों के रूप में नहीं। प्रत्येक वर्ण को शाब्दिक रूप से लिया जाता है, केवल एक ही अपवाद है <code>]]></code> वर्णों का क्रम। में:
इन दो अनुक्रमों के बीच संलग्न सभी वर्णों की व्याख्या वर्णों के रूप में की जाती है, मार्कअप या इकाई संदर्भों के रूप में नहीं। प्रत्येक वर्ण को शाब्दिक रूप से लिया जाता है, केवल एक ही अपवाद <code>]]></code> वर्णों का क्रम है। में:
<syntaxhighlight lang="xml"><sender>John Smith</sender></syntaxhighlight>
<syntaxhighlight lang="xml"><sender>John Smith</sender></syntaxhighlight>
प्रारंभ और अंत प्रेषक टैग मार्कअप के रूप में व्याख्या किए जाते हैं। हालाँकि, कोड:
प्रारंभ और अंत प्रेषक टैग मार्कअप के रूप में व्याख्या किए जाते हैं। चूँकि  कोड:


<syntaxhighlight lang="xml"><![CDATA[<sender>John Smith</sender>]]></syntaxhighlight>
<syntaxhighlight lang="xml"><![CDATA[<sender>John Smith</sender>]]></syntaxhighlight>
के बराबर है:
के समान है:


<syntaxhighlight lang="xml">&lt;sender&gt;John Smith&lt;/sender&gt;</syntaxhighlight>
<syntaxhighlight lang="xml">&lt;sender&gt;John Smith&lt;/sender&gt;</syntaxhighlight>
इस प्रकार, टैग्स की ठीक वही स्थिति होगी जो जॉन स्मिथ की है; उन्हें पाठ के रूप में माना जाएगा।
इस प्रकार, टैग्स की ठीक वही स्थिति होगी जो जॉन स्मिथ की है; उन्हें पाठ के रूप में माना जाएगा।


इसी प्रकार, यदि संख्यात्मक वर्ण संदर्भ <code>&amp;#240;</code> तत्व सामग्री में दिखाई देता है, इसे एकल [[यूनिकोड]] वर्ण 00F0 (छोटा अक्षर [[eth]]) के रूप में समझा जाएगा। लेकिन अगर वही सीडीएटीए सेक्शन में दिखाई देता है, तो इसे छह वर्णों के रूप में पार्स किया जाएगा: एम्परसेंड, हैश मार्क, अंक 2, अंक 4, अंक 0, अर्धविराम।
इसी प्रकार, यदि संख्यात्मक वर्ण संदर्भ <code>&amp;#240;</code> तत्व सामग्री में दिखाई देता है, इसे एकल [[यूनिकोड]] वर्ण 00F0 (छोटा अक्षर [[eth|एथ]]) के रूप में समझा जाएगा। किंतु यदि वही सीडीएटीए सेक्शन में दिखाई देता है, तो इसे छह वर्णों के रूप में पार्स किया जाएगा: एम्परसेंड, हैश मार्क, अंक 2, अंक 4, अंक 0, अर्धविराम।


=== सीडीएटीए अनुभागों का उपयोग ===
=== सीडीएटीए अनुभागों का उपयोग ===
एक्सएमएल दस्तावेजों के नए लेखक अक्सर सीडीएटीए अनुभाग के उद्देश्य को गलत समझते हैं, गलती से मानते हैं कि इसका उद्देश्य प्रसंस्करण के दौरान डेटा को सामान्य चरित्र डेटा के रूप में व्यवहार करने से बचाना है। एक्सएमएल दस्तावेज़ों के साथ काम करने के लिए कुछ एपीआई सीडीएटीए अनुभागों तक स्वतंत्र पहुंच के विकल्प प्रदान करते हैं, लेकिन ऐसे विकल्प एक्सएमएल प्रोसेसिंग सिस्टम की सामान्य आवश्यकताओं के ऊपर और परे मौजूद हैं, और अभी भी डेटा के अंतर्निहित अर्थ को नहीं बदलते हैं। चरित्र डेटा चरित्र डेटा है, चाहे वह सीडीएटीए अनुभाग या सामान्य मार्कअप के माध्यम से व्यक्त किया गया हो। सीडीएटीए अनुभाग एक्सएमएल दस्तावेज़ के भीतर टेक्स्ट डेटा के रूप में एक्सएमएल कोड लिखने के लिए उपयोगी होते हैं। उदाहरण के लिए, यदि कोई [[एक्स्टेंसिबल स्टाइलशीट लैंग्वेज]] के साथ एक पुस्तक टाइप करना चाहता है जो एक्सएमएल एप्लिकेशन के उपयोग की व्याख्या करता है, तो एक्सएमएल मार्कअप पुस्तक में दिखाई देने के लिए सीडीएटीए अनुभाग में स्रोत फ़ाइल में लिखा जाएगा।
एक्सएमएल दस्तावेजों के नए लेखक अधिकांशतः सीडीएटीए अनुभाग के उद्देश्य को गलत समझते हैं, यह गलती से मानते हैं कि इसका उद्देश्य प्रसंस्करण के समय डेटा को सामान्य कैरेक्टर डेटा के रूप में व्यवहार करने से बचाना है। एक्सएमएल दस्तावेज़ों के साथ काम करने के लिए कुछ एपीआई सीडीएटीए अनुभागों तक स्वतंत्र पहुंच के विकल्प प्रदान करते हैं, किंतु ऐसे विकल्प एक्सएमएल प्रोसेसिंग सिस्टम की सामान्य आवश्यकताओं के ऊपर और हट कर उपस्थित हैं, और अभी भी डेटा के अंतर्निहित अर्थ को नहीं बदलते हैं। कैरेक्टर डेटा कैरेक्टर डेटा है, चाहे वह सीडीएटीए अनुभाग या सामान्य मार्कअप के माध्यम से व्यक्त किया गया हो। सीडीएटीए अनुभाग एक्सएमएल दस्तावेज़ के अंदर टेक्स्ट डेटा के रूप में एक्सएमएल कोड लिखने के लिए उपयोगी होते हैं। उदाहरण के लिए, यदि कोई [[एक्स्टेंसिबल स्टाइलशीट लैंग्वेज]] के साथ एक पुस्तक टाइप करना चाहता है जो एक्सएमएल एप्लिकेशन के उपयोग की व्याख्या करता है, तो एक्सएमएल मार्कअप पुस्तक में दिखाई देने के लिए सीडीएटीए अनुभाग में स्रोत फ़ाइल में लिखा जाएगा।


==== घोंसला बनाना ====
==== नेस्टिंग ====
सीडीएटीए अनुभाग में स्ट्रिंग नहीं हो सकती है<code>]]></code>और इसलिए सीडीएटीए अनुभाग के लिए नेस्टेड सीडीएटीए अनुभाग शामिल करना संभव नहीं है। ट्रायड वाले टेक्स्ट को एनकोड करने के लिए CDATA सेक्शन का उपयोग करने का पसंदीदा तरीका<code>]]></code>त्रय की प्रत्येक घटना को ठीक पहले विभाजित करके कई सीडीएटीए अनुभागों का उपयोग करना है<code>></code>. उदाहरण के लिए, सांकेतिक शब्दों में बदलना<code>]]></code>कोई लिखेगा:
एक सीडीएटीए अनुभाग में स्ट्रिंग <code>]]></code>नहीं हो सकती है और इसलिए सीडीएटीए अनुभाग के लिए नेस्टेड सीडीएटीए अनुभाग सम्मिलित करना संभव नहीं है। <code>]]></code> त्रय वाले पाठ को एन्कोड करने के लिए सीडीएटीए अनुभागों का उपयोग करने का पसंदीदा विधि ">" से ठीक पहले त्रय की प्रत्येक घटना को विभाजित करके एकाधिक सीडीएटीए अनुभागों का उपयोग करना है। उदाहरण के लिए <code>]]></code> को एनकोड करने के लिए कोई लिखेगा:


<syntaxhighlight lang="xml"><![CDATA[]]]]><![CDATA[>]]></syntaxhighlight>
<syntaxhighlight lang="xml"><![CDATA[]]]]><![CDATA[>]]></syntaxhighlight>
इसका मतलब है कि सांकेतिक शब्दों में बदलना<code>]]></code>सीडीएटीए अनुभाग के बीच में, की सभी घटनाओं को बदलें<code>]]></code>निम्नलिखित के साथ:   
इसका अर्थ है कि सांकेतिक शब्दों में बदलना<code>]]></code>सीडीएटीए अनुभाग के बीच में, की सभी घटनाओं को बदलें<code>]]></code>निम्नलिखित के साथ:   
    
    
<syntaxhighlight lang="xml">]]]]><![CDATA[></syntaxhighlight>
<syntaxhighlight lang="xml">]]]]><![CDATA[></syntaxhighlight>
यह सीडीएटीए अनुभाग को प्रभावी ढंग से रोकता है और पुनरारंभ करता है।
यह सीडीएटीए अनुभाग को प्रभावी रूप से रोकता है और पुनरारंभ करता है।
 
==== एन्कोडिंग के साथ उद्देश्य ====
टेक्स्ट डेटा में, <code><?एक्सएमएल ...?></code> हेडर में घोषित एन्कोडिंग में उपलब्ध नहीं होने वाले किसी भी यूनिकोड वर्ण को &#nnn; का उपयोग करके दर्शाया जा सकता है। [[संख्यात्मक चरित्र संदर्भ|संख्यात्मक कैरेक्टर संदर्भ]] किंतु सीडीएटीए अनुभाग के अंदर का पाठ एन्कोडिंग में उपलब्ध वर्णों तक सख्ती से सीमित है।
 
इस वजह से डेटा को कोट करने के लिए प्रोग्रामेटिक रूप से सीडीएटीए सेक्शन का उपयोग करना जिसमें संभावित रूप से <code>&amp;</code>' या '<code>&lt;</code>' वर्ण सम्मिलित हो सकता है' तब समस्याएँ उत्पन्न  कर सकते हैं जब डेटा में ऐसे वर्ण होते हैं जिन्हें एन्कोडिंग में प्रदर्शित नहीं किया जा सकता है। एनकोडर के कार्यान्वयन के आधार पर, ये वर्ण खो सकते हैं,  <code>&amp;#nnn;</code> के वर्णों में परिवर्तित हो सकते हैं कैरेक्टर संदर्भ, या एन्कोडिंग विफल होने का कारण बन सकता है। किंतु उनका रखरखाव नहीं किया जाएगा।


==== एन्कोडिंग के साथ मुद्दे ====
एक और उद्देश्य यह है कि परिवहन के समय एक एक्सएमएल दस्तावेज़ को एक एन्कोडिंग से दूसरे में ट्रांसकोड किया जा सकता है। जब एक्सएमएल दस्तावेज़ को अधिक सीमित वर्ण सेट में परिवर्तित किया जाता है, जैसे कि एएससीआईआई, ऐसे वर्ण जिन्हें अब प्रदर्शित नहीं किया जा सकता है, उन्हें रूपांतरित किया जाता है <code>&amp;#nnn;</code> दोषरहित रूपांतरण के लिए कैरेक्टर संदर्भ किंतु एक सीडीएटीए अनुभाग के अंदर  इन वर्णों का बिल्कुल भी प्रतिनिधित्व नहीं किया जा सकता है, और सीडीएटीए अनुभाग की सामग्री को बदलते हुए, उन्हें हटा दिया जाना चाहिए या कुछ समकक्ष में परिवर्तित किया जाना चाहिए।
टेक्स्ट डेटा में, घोषित एन्कोडिंग में कोई यूनिकोड वर्ण उपलब्ध नहीं है <code><?xml ...?></code> शीर्षलेख को a का उपयोग करके प्रदर्शित किया जा सकता है <code>&amp;#nnn;</code> [[संख्यात्मक चरित्र संदर्भ]]। लेकिन सीडीएटीए अनुभाग के भीतर का पाठ सख्ती से एन्कोडिंग में उपलब्ध वर्णों तक ही सीमित है।


इस वजह से, डेटा को कोट करने के लिए प्रोग्रामेटिक रूप से सीडीएटीए सेक्शन का उपयोग करना जिसमें संभावित रूप से 'हो सकता है'<code>&amp;</code>' या '<code>&lt;</code>' वर्ण समस्याएँ पैदा कर सकते हैं जब डेटा में ऐसे वर्ण होते हैं जिन्हें एन्कोडिंग में प्रदर्शित नहीं किया जा सकता है। एनकोडर के कार्यान्वयन के आधार पर, ये वर्ण खो सकते हैं, के वर्णों में परिवर्तित हो सकते हैं <code>&amp;#nnn;</code> चरित्र संदर्भ, या एन्कोडिंग विफल होने का कारण बन सकता है। लेकिन उनका रखरखाव नहीं किया जाएगा।
=== प्रोग्राम आउटपुट में सीडीएटीए का उपयोग ===
[[एक्सएचटीएमएल]] दस्तावेजों में सीडीएटीए अनुभाग वेब ब्राउज़र द्वारा अलग-अलग पार्स किए जाने के लिए उत्तरदायी हैं यदि वे दस्तावेज़ को एचटीएमएल के रूप में प्रस्तुत करते हैं, क्योंकि एचटीएमएल पार्सर सीडीएटीए प्रारंभ और अंत मार्करों को नहीं पहचानते हैं, और न ही वे एचटीएमएल इकाई संदर्भों को पहचानते हैं जैसे कि <code>&amp;lt;</code> अंदर <code>&lt;script&gt;</code> टैग। यह वेब ब्राउज़र में रेंडरिंग की समस्या उत्पन्न  कर सकता है और यदि अविश्वसनीय स्रोतों से डेटा प्रदर्शित करने के लिए उपयोग किया जाता है, तो [[ क्रॉस साइट स्क्रिप्टिंग |क्रॉस साइट स्क्रिप्टिंग]] भेद्यता हो सकती है, क्योंकि दो प्रकार के पार्सर इस बात पर असहमत होंगे कि सीडीएटीए अनुभाग कहाँ समाप्त होता है।


एक और मुद्दा यह है कि परिवहन के दौरान एक XML दस्तावेज़ को एक एन्कोडिंग से दूसरे में ट्रांसकोड किया जा सकता है। जब XML दस्तावेज़ को अधिक सीमित वर्ण सेट में परिवर्तित किया जाता है, जैसे कि ASCII, ऐसे वर्ण जिन्हें अब प्रदर्शित नहीं किया जा सकता है, उन्हें रूपांतरित किया जाता है <code>&amp;#nnn;</code> दोषरहित रूपांतरण के लिए चरित्र संदर्भ। लेकिन एक सीडीएटीए अनुभाग के भीतर, इन वर्णों का बिल्कुल भी प्रतिनिधित्व नहीं किया जा सकता है, और सीडीएटीए अनुभाग की सामग्री को बदलते हुए, उन्हें हटा दिया जाना चाहिए या कुछ समकक्ष में परिवर्तित किया जाना चाहिए।
चूंकि वेब पेज स्क्रिप्ट में कम-से-कम चिह्न (<code>&lt;</code>)और एम्परसेंड (<code>&amp;</code>)  और कुछ सीमा तक शैलियों का उपयोग करने में सक्षम होना उपयोगी है, उनसे बचने के लिए याद किए बिना, चारों ओर सीडीएटीए मार्कर का उपयोग करना समान्य है एक्सएचटीएमएल दस्तावेज़ों में इनलाइन <code>&lt;script&gt;</code> और <code>&lt;style&gt;</code> तत्वों का पाठ। किंतु दस्तावेज़ को एचटीएमएल पार्सर्स द्वारा भी पार्स किया जा सकता है, जो सीडीएटीए मार्करों को नहीं पहचानते हैं, सीडीएटीए मार्करों को सामान्यतः टिप्पणी-आउट कर दिया जाता है, जैसा कि इस जावास्क्रिप्ट उदाहरण में है:


== प्रोग्राम आउटपुट == में सीडीएटीए का उपयोग
<syntaxhighlight>
[[एक्सएचटीएमएल]] दस्तावेजों में सीडीएटीए अनुभाग वेब ब्राउज़र द्वारा अलग-अलग पार्स किए जाने के लिए उत्तरदायी हैं यदि वे दस्तावेज़ को एचटीएमएल के रूप में प्रस्तुत करते हैं, क्योंकि एचटीएमएल पार्सर सीडीएटीए प्रारंभ और अंत मार्करों को नहीं पहचानते हैं, न ही वे एचटीएमएल इकाई संदर्भों को पहचानते हैं जैसे कि <code>&amp;lt;</code> अंदर <code>&lt;script&gt;</code> टैग। यह वेब ब्राउज़र में रेंडरिंग की समस्या पैदा कर सकता है और यदि अविश्वसनीय स्रोतों से डेटा प्रदर्शित करने के लिए उपयोग किया जाता है, तो [[ क्रॉस साइट स्क्रिप्टिंग |क्रॉस साइट स्क्रिप्टिंग]] भेद्यता हो सकती है, क्योंकि दो प्रकार के पार्सर इस बात पर असहमत होंगे कि सीडीएटीए अनुभाग कहाँ समाप्त होता है।
<script type="text/javascript">
//<![CDATA[
document.write("<");
//]]>
</script>
</syntaxhighlight>'''<वाक्यविन्यास लैंग = html4सख्त>'''


चूंकि यह कम-से-कम संकेतों का उपयोग करने में सक्षम होने के लिए उपयोगी है (<code>&lt;</code>) और एम्परसेंड (<code>&amp;</code>) वेब पेज स्क्रिप्ट में, और कुछ हद तक शैलियों में, उनसे बचने के लिए याद किए बिना, इनलाइन के टेक्स्ट के चारों ओर सीडीएटीए मार्कर का उपयोग करना आम है <code>&lt;script&gt;</code> और <code>&lt;style&gt;</code> एक्सएचटीएमएल दस्तावेजों में तत्व। लेकिन ताकि दस्तावेज़ को HTML पार्सर्स द्वारा भी पार्स किया जा सके, जो सीडीएटीए मार्करों को नहीं पहचानते हैं, सीडीएटीए मार्करों को आमतौर पर टिप्पणी-आउट किया जाता है, जैसा कि इस [[जावास्क्रिप्ट]] उदाहरण में है:
'''<स्क्रिप्ट प्रकार = पाठ/जावास्क्रिप्ट>'''


<वाक्यविन्यास लैंग = html4सख्त>
'''//<![सीडीएटीए[
<स्क्रिप्ट प्रकार = पाठ/जावास्क्रिप्ट>
//<![सीडीएटीए[
दस्तावेज़.लेखन (<);
दस्तावेज़.लेखन (<);
//>
//>
</स्क्रिप्ट>
</स्क्रिप्ट>
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>'''


या यह [[व्यापक शैली पत्रक]] उदाहरण:
या यह [[व्यापक शैली पत्रक]] उदाहरण:<syntaxhighlight>
 
<style type="text/css">
<वाक्यविन्यास लैंग = html4सख्त>
/*<![CDATA[*/
body { background-image: url("marble.png?width=300&height=300") }   
/*]]>*/
</style>
</syntaxhighlight>'''<वाक्यविन्यास लैंग = html4सख्त>
<शैली का प्रकार = पाठ/सीएसएस>
<शैली का प्रकार = पाठ/सीएसएस>
/*<![CDATA[*/
/*<![CDATA[*/
Line 64: Line 78:
/*>*/
/*>*/
</शैली>
</शैली>
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>'''


यह तकनीक केवल इनलाइन स्क्रिप्ट और स्टाइलशीट का उपयोग करते समय आवश्यक है और भाषा-विशिष्ट है। सीएसएस स्टाइलशीट, उदाहरण के लिए, केवल टिप्पणी-आउट की दूसरी शैली का समर्थन करती है (<code>{{nowrap|/* … */}}</code>), लेकिन CSS की भी कम आवश्यकता है <code>&lt;</code> और <code>&</code> जावास्क्रिप्ट की तुलना में वर्ण और इसलिए स्पष्ट सीडीएटीए मार्करों की कम आवश्यकता है।
यह तकनीक केवल इनलाइन स्क्रिप्ट और स्टाइलशीट का उपयोग करते समय आवश्यक है, और भाषा-विशिष्ट है। उदाहरण के लिए, सीएसएस स्टाइलशीट केवल टिप्पणी करने की दूसरी शैली (<code>{{nowrap|/* … */}}</code>), का समर्थन करती है, किंतु सीएसएस में जावास्क्रिप्ट की तुलना में <code>&lt;</code> और <code>&</code> वर्णों की कम आवश्यकता होती है और इसलिए स्पष्ट सीडीएटीए मार्करों की भी कम आवश्यकता होती है।


== डीटीडी में सीडीएटीए ==
== डीटीडी में सीडीएटीए ==


=== सीडीएटीए-प्रकार विशेषता मान ===
=== सीडीएटीए-प्रकार विशेषता मान ===
एसजीएमएल और एक्सएमएल के लिए [[दस्तावेज़ प्रकार परिभाषा]] (डीटीडी) फाइलों में, एक विशेषता मान को सीडीएटीए प्रकार के रूप में निर्दिष्ट किया जा सकता है: मनमाना चरित्र डेटा। सीडीएटीए-प्रकार विशेषता के भीतर, चरित्र और इकाई संदर्भ मार्कअप की अनुमति है और दस्तावेज़ पढ़ने पर संसाधित किया जाएगा।
एसजीएमएल और एक्सएमएल के लिए [[दस्तावेज़ प्रकार परिभाषा]] (डीटीडी) फाइलों में, एक विशेषता मान को सीडीएटीए प्रकार के रूप में निर्दिष्ट किया जा सकता है: इच्छानुसार कैरेक्टर डेटा  सीडीएटीए-प्रकार विशेषता के अंदर, कैरेक्टर और इकाई संदर्भ मार्कअप की अनुमति है और दस्तावेज़ पढ़ने पर संसाधित किया जाता है ।


उदाहरण के लिए, यदि किसी XML DTD में
उदाहरण के लिए, यदि किसी एक्सएमएल डीटीडी में


<syntaxhighlight lang="dtd"><!ATTLIST foo a CDATA #IMPLIED></syntaxhighlight>
<syntaxhighlight lang="dtd"><!ATTLIST foo a CDATA #IMPLIED></syntaxhighlight>
इसका अर्थ है कि फू नाम के तत्वों में वैकल्पिक रूप से a नाम की एक विशेषता हो सकती है जो कि CDATA प्रकार की है। इस DTD के अनुसार मान्य XML दस्तावेज़ में, ऐसा तत्व दिखाई दे सकता है:
इसका अर्थ है कि फू नाम के तत्वों में वैकल्पिक रूप से a नाम की एक विशेषता हो सकती है जो कि सीडीएटीए प्रकार की है। इस डीटीडी के अनुसार मान्य एक्सएमएल दस्तावेज़ में, ऐसा तत्व दिखाई दे सकता है:


<syntaxhighlight lang="xml"><foo a="1 &amp; 2 are &lt; &#51; &#x0A;" /></syntaxhighlight>
<syntaxhighlight lang="xml"><foo a="1 &amp; 2 are &lt; &#51; &#x0A;" /></syntaxhighlight>
Line 82: Line 96:


=== सीडीएटीए-प्रकार इकाई ===
=== सीडीएटीए-प्रकार इकाई ===
एक SGML या XML DTD में इकाई घोषणाएँ भी शामिल हो सकती हैं जिसमें टोकन CDATA का उपयोग यह इंगित करने के लिए किया जाता है कि इकाई में वर्ण डेटा शामिल है। चरित्र डेटा घोषणा के भीतर ही प्रकट हो सकता है या एक [[यूनिफॉर्म रिसोर्स पहचानकर्ता]] द्वारा संदर्भित बाहरी रूप से उपलब्ध हो सकता है। किसी भी मामले में, इकाई में चरित्र संदर्भ और पैरामीटर इकाई संदर्भ मार्कअप की अनुमति है, और जब इसे पढ़ा जाता है तो इसे संसाधित किया जाएगा।
एक एसजीएमएल या एक्सएमएल डीटीडी में इकाई घोषणाएँ भी सम्मिलित हो सकती हैं जिसमें टोकन सीडीएटीए का उपयोग यह इंगित करने के लिए किया जाता है कि इकाई में वर्ण डेटा सम्मिलित है। कैरेक्टर डेटा घोषणा के अंदर ही प्रकट हो सकता है या एक [[यूनिफॉर्म रिसोर्स पहचानकर्ता]] द्वारा संदर्भित बाहरी रूप से उपलब्ध हो सकता है। किसी भी स्थितियों में, इकाई में कैरेक्टर संदर्भ और पैरामीटर इकाई संदर्भ मार्कअप की अनुमति है, और जब इसे पढ़ा जाता है तो इसे संसाधित किया जाएगा।
<syntaxhighlight lang="xml">
<syntaxhighlight lang="xml">
<DISPLAY_NAME Attribute="Y"><![CDATA[PFTEST0__COUNTER_6__:4:199:, PFTEST0__COUNTER_7__:4:199:]]></DISPLAY_NAME>
<DISPLAY_NAME Attribute="Y"><![CDATA[PFTEST0__COUNTER_6__:4:199:, PFTEST0__COUNTER_7__:4:199:]]></DISPLAY_NAME>
Line 98: Line 112:


==बाहरी संबंध==
==बाहरी संबंध==
* [http://www.flightlab.com/~joe/sgml/cdata.html CDATA Confusion]
* [http://www.flightlab.com/~joe/sgml/cdata.html सीडीएटीए Confusion]
* [http://www.w3.org/TR/REC-xml/#syntax Character Data and Markup (in XML)]
* [http://www.w3.org/TR/REC-xml/#syntax Character Data and Markup (in XML)]
[[Category: एक्सएमएल]]  
[[Category: एक्सएमएल]]  

Revision as of 11:16, 28 June 2023


सीडीएटीए शब्द का अर्थ कैरेक्टर डेटा है, जिसका उपयोग मार्कअप भाषाओं एसजीएमएल और एक्सएमएल में अलग किंतु संबंधित उद्देश्यों के लिए किया जाता है। यह शब्द इंगित करता है कि दस्तावेज़ का एक निश्चित भाग गैर-वर्ण डेटा या अधिक विशिष्ट सीमित संरचना वाले कैरेक्टर डेटा के अतिरिक्त सामान्य कैरेक्टर डेटा है।

एक्सएमएल में सीडीएटीए अनुभाग

एक एक्सएमएल दस्तावेज़ या बाहरी इकाई में एक सीडीएटीए अनुभाग तत्व सामग्री का एक टुकड़ा है जिसे पाठ्य डेटा के रूप में शाब्दिक रूप से व्याख्या करने के लिए चिह्नित किया गया है, चिह्नित सामग्री के रूप में नहीं।[1] एक सीडीएटीए अनुभाग कैरेक्टर डेटा व्यक्त करने के लिए केवल एक वैकल्पिक वाक्यविन्यास है; सीडीएटीए अनुभाग में कैरेक्टर डेटा और मानक सिंटैक्स में कैरेक्टर डेटा के बीच कोई अर्थपूर्ण अंतर नहीं है, उदाहरण के लिए,<और&&lt;और&amp;, क्रमश द्वारा प्रतिनिधित्व किया जाता है।

वाक्यविन्यास और व्याख्या

एक सीडीएटीए अनुभाग निम्नलिखित क्रम से प्रारंभ होता है:

<![CDATA[

और अनुक्रम की अगली घटना के साथ समाप्त होता है:

]]>

इन दो अनुक्रमों के बीच संलग्न सभी वर्णों की व्याख्या वर्णों के रूप में की जाती है, मार्कअप या इकाई संदर्भों के रूप में नहीं। प्रत्येक वर्ण को शाब्दिक रूप से लिया जाता है, केवल एक ही अपवाद ]]> वर्णों का क्रम है। में:

<sender>John Smith</sender>

प्रारंभ और अंत प्रेषक टैग मार्कअप के रूप में व्याख्या किए जाते हैं। चूँकि कोड:

<![CDATA[<sender>John Smith</sender>]]>

के समान है:

&lt;sender&gt;John Smith&lt;/sender&gt;

इस प्रकार, टैग्स की ठीक वही स्थिति होगी जो जॉन स्मिथ की है; उन्हें पाठ के रूप में माना जाएगा।

इसी प्रकार, यदि संख्यात्मक वर्ण संदर्भ &#240; तत्व सामग्री में दिखाई देता है, इसे एकल यूनिकोड वर्ण 00F0 (छोटा अक्षर एथ) के रूप में समझा जाएगा। किंतु यदि वही सीडीएटीए सेक्शन में दिखाई देता है, तो इसे छह वर्णों के रूप में पार्स किया जाएगा: एम्परसेंड, हैश मार्क, अंक 2, अंक 4, अंक 0, अर्धविराम।

सीडीएटीए अनुभागों का उपयोग

एक्सएमएल दस्तावेजों के नए लेखक अधिकांशतः सीडीएटीए अनुभाग के उद्देश्य को गलत समझते हैं, यह गलती से मानते हैं कि इसका उद्देश्य प्रसंस्करण के समय डेटा को सामान्य कैरेक्टर डेटा के रूप में व्यवहार करने से बचाना है। एक्सएमएल दस्तावेज़ों के साथ काम करने के लिए कुछ एपीआई सीडीएटीए अनुभागों तक स्वतंत्र पहुंच के विकल्प प्रदान करते हैं, किंतु ऐसे विकल्प एक्सएमएल प्रोसेसिंग सिस्टम की सामान्य आवश्यकताओं के ऊपर और हट कर उपस्थित हैं, और अभी भी डेटा के अंतर्निहित अर्थ को नहीं बदलते हैं। कैरेक्टर डेटा कैरेक्टर डेटा है, चाहे वह सीडीएटीए अनुभाग या सामान्य मार्कअप के माध्यम से व्यक्त किया गया हो। सीडीएटीए अनुभाग एक्सएमएल दस्तावेज़ के अंदर टेक्स्ट डेटा के रूप में एक्सएमएल कोड लिखने के लिए उपयोगी होते हैं। उदाहरण के लिए, यदि कोई एक्स्टेंसिबल स्टाइलशीट लैंग्वेज के साथ एक पुस्तक टाइप करना चाहता है जो एक्सएमएल एप्लिकेशन के उपयोग की व्याख्या करता है, तो एक्सएमएल मार्कअप पुस्तक में दिखाई देने के लिए सीडीएटीए अनुभाग में स्रोत फ़ाइल में लिखा जाएगा।

नेस्टिंग

एक सीडीएटीए अनुभाग में स्ट्रिंग ]]>नहीं हो सकती है और इसलिए सीडीएटीए अनुभाग के लिए नेस्टेड सीडीएटीए अनुभाग सम्मिलित करना संभव नहीं है। ]]> त्रय वाले पाठ को एन्कोड करने के लिए सीडीएटीए अनुभागों का उपयोग करने का पसंदीदा विधि ">" से ठीक पहले त्रय की प्रत्येक घटना को विभाजित करके एकाधिक सीडीएटीए अनुभागों का उपयोग करना है। उदाहरण के लिए ]]> को एनकोड करने के लिए कोई लिखेगा:

<![CDATA[]]]]><![CDATA[>]]>

इसका अर्थ है कि सांकेतिक शब्दों में बदलना]]>सीडीएटीए अनुभाग के बीच में, की सभी घटनाओं को बदलें]]>निम्नलिखित के साथ:

]]]]><![CDATA[>

यह सीडीएटीए अनुभाग को प्रभावी रूप से रोकता है और पुनरारंभ करता है।

एन्कोडिंग के साथ उद्देश्य

टेक्स्ट डेटा में, <?एक्सएमएल ...?> हेडर में घोषित एन्कोडिंग में उपलब्ध नहीं होने वाले किसी भी यूनिकोड वर्ण को &#nnn; का उपयोग करके दर्शाया जा सकता है। संख्यात्मक कैरेक्टर संदर्भ किंतु सीडीएटीए अनुभाग के अंदर का पाठ एन्कोडिंग में उपलब्ध वर्णों तक सख्ती से सीमित है।

इस वजह से डेटा को कोट करने के लिए प्रोग्रामेटिक रूप से सीडीएटीए सेक्शन का उपयोग करना जिसमें संभावित रूप से &' या '<' वर्ण सम्मिलित हो सकता है' तब समस्याएँ उत्पन्न कर सकते हैं जब डेटा में ऐसे वर्ण होते हैं जिन्हें एन्कोडिंग में प्रदर्शित नहीं किया जा सकता है। एनकोडर के कार्यान्वयन के आधार पर, ये वर्ण खो सकते हैं, &#nnn; के वर्णों में परिवर्तित हो सकते हैं कैरेक्टर संदर्भ, या एन्कोडिंग विफल होने का कारण बन सकता है। किंतु उनका रखरखाव नहीं किया जाएगा।

एक और उद्देश्य यह है कि परिवहन के समय एक एक्सएमएल दस्तावेज़ को एक एन्कोडिंग से दूसरे में ट्रांसकोड किया जा सकता है। जब एक्सएमएल दस्तावेज़ को अधिक सीमित वर्ण सेट में परिवर्तित किया जाता है, जैसे कि एएससीआईआई, ऐसे वर्ण जिन्हें अब प्रदर्शित नहीं किया जा सकता है, उन्हें रूपांतरित किया जाता है &#nnn; दोषरहित रूपांतरण के लिए कैरेक्टर संदर्भ किंतु एक सीडीएटीए अनुभाग के अंदर इन वर्णों का बिल्कुल भी प्रतिनिधित्व नहीं किया जा सकता है, और सीडीएटीए अनुभाग की सामग्री को बदलते हुए, उन्हें हटा दिया जाना चाहिए या कुछ समकक्ष में परिवर्तित किया जाना चाहिए।

प्रोग्राम आउटपुट में सीडीएटीए का उपयोग

एक्सएचटीएमएल दस्तावेजों में सीडीएटीए अनुभाग वेब ब्राउज़र द्वारा अलग-अलग पार्स किए जाने के लिए उत्तरदायी हैं यदि वे दस्तावेज़ को एचटीएमएल के रूप में प्रस्तुत करते हैं, क्योंकि एचटीएमएल पार्सर सीडीएटीए प्रारंभ और अंत मार्करों को नहीं पहचानते हैं, और न ही वे एचटीएमएल इकाई संदर्भों को पहचानते हैं जैसे कि &lt; अंदर <script> टैग। यह वेब ब्राउज़र में रेंडरिंग की समस्या उत्पन्न कर सकता है और यदि अविश्वसनीय स्रोतों से डेटा प्रदर्शित करने के लिए उपयोग किया जाता है, तो क्रॉस साइट स्क्रिप्टिंग भेद्यता हो सकती है, क्योंकि दो प्रकार के पार्सर इस बात पर असहमत होंगे कि सीडीएटीए अनुभाग कहाँ समाप्त होता है।

चूंकि वेब पेज स्क्रिप्ट में कम-से-कम चिह्न (<)और एम्परसेंड (&) और कुछ सीमा तक शैलियों का उपयोग करने में सक्षम होना उपयोगी है, उनसे बचने के लिए याद किए बिना, चारों ओर सीडीएटीए मार्कर का उपयोग करना समान्य है एक्सएचटीएमएल दस्तावेज़ों में इनलाइन <script> और <style> तत्वों का पाठ। किंतु दस्तावेज़ को एचटीएमएल पार्सर्स द्वारा भी पार्स किया जा सकता है, जो सीडीएटीए मार्करों को नहीं पहचानते हैं, सीडीएटीए मार्करों को सामान्यतः टिप्पणी-आउट कर दिया जाता है, जैसा कि इस जावास्क्रिप्ट उदाहरण में है:

<script type="text/javascript">
//<![CDATA[
document.write("<");
//]]>
</script>

<वाक्यविन्यास लैंग = html4सख्त>

<स्क्रिप्ट प्रकार = पाठ/जावास्क्रिप्ट>

//<![सीडीएटीए[ दस्तावेज़.लेखन (<); //> </स्क्रिप्ट> </वाक्यविन्यास हाइलाइट>

या यह व्यापक शैली पत्रक उदाहरण:

<style type="text/css">
/*<![CDATA[*/
body { background-image: url("marble.png?width=300&height=300") }     
/*]]>*/
</style>

<वाक्यविन्यास लैंग = html4सख्त>

<शैली का प्रकार = पाठ/सीएसएस> /*<![CDATA[*/ शरीर { background-image: url("marble.png?चौड़ाई=300&ऊंचाई=300) } /*>*/ </शैली> </वाक्यविन्यास हाइलाइट>

यह तकनीक केवल इनलाइन स्क्रिप्ट और स्टाइलशीट का उपयोग करते समय आवश्यक है, और भाषा-विशिष्ट है। उदाहरण के लिए, सीएसएस स्टाइलशीट केवल टिप्पणी करने की दूसरी शैली (/* … */), का समर्थन करती है, किंतु सीएसएस में जावास्क्रिप्ट की तुलना में < और & वर्णों की कम आवश्यकता होती है और इसलिए स्पष्ट सीडीएटीए मार्करों की भी कम आवश्यकता होती है।

डीटीडी में सीडीएटीए

सीडीएटीए-प्रकार विशेषता मान

एसजीएमएल और एक्सएमएल के लिए दस्तावेज़ प्रकार परिभाषा (डीटीडी) फाइलों में, एक विशेषता मान को सीडीएटीए प्रकार के रूप में निर्दिष्ट किया जा सकता है: इच्छानुसार कैरेक्टर डेटा सीडीएटीए-प्रकार विशेषता के अंदर, कैरेक्टर और इकाई संदर्भ मार्कअप की अनुमति है और दस्तावेज़ पढ़ने पर संसाधित किया जाता है ।

उदाहरण के लिए, यदि किसी एक्सएमएल डीटीडी में

<!ATTLIST foo a CDATA #IMPLIED>

इसका अर्थ है कि फू नाम के तत्वों में वैकल्पिक रूप से a नाम की एक विशेषता हो सकती है जो कि सीडीएटीए प्रकार की है। इस डीटीडी के अनुसार मान्य एक्सएमएल दस्तावेज़ में, ऐसा तत्व दिखाई दे सकता है:

<foo a="1 &amp; 2 are &lt; &#51; &#x0A;" />

और एक एक्सएमएल पार्सर एट्रिब्यूट के मान को कैरेक्टर डेटा के रूप में व्याख्या करेगा 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>


यह भी देखें

संदर्भ


बाहरी संबंध