xml एक्सएमएल में<![सीडीएटीए[]]> क्या है?




cdata (9)

मुझे अक्सर XML फाइलों में यह अजीब CDATA टैग मिलता है:

<![CDATA[some stuff]]>

मैंने देखा है कि यह CDATA टैग हमेशा शुरुआत में आता है, और फिर कुछ सामानों के बाद आता है।

लेकिन कभी-कभी इसका इस्तेमाल होता है, कभी-कभी यह नहीं होता है। मुझे लगता है कि यह चिह्नित करना है कि some stuff "डेटा" है जो इसके बाद डाला जाएगा। लेकिन some stuff किस प्रकार का डेटा है? एक्सएमएल टैग में कुछ भी नहीं है जो मैं कुछ प्रकार के डेटा में लिखता हूं?


एक सीडीएटीए अनुभाग " तत्व सामग्री का एक वर्ग है जिसे पार्सर के लिए केवल वर्ण डेटा के रूप में व्याख्या करने के लिए चिह्नित किया गया है, मार्कअप नहीं। "

संवैधानिक रूप से, यह एक टिप्पणी के समान व्यवहार करता है:

<exampleOfAComment>
<!--
    Since this is a comment
    I can use all sorts of reserved characters
    like > < " and &
    or write things like
    <foo></bar>
    but my document is still well-formed!
-->
</exampleOfAComment>

... लेकिन यह अभी भी दस्तावेज़ का हिस्सा है:

<exampleOfACDATA>
<![CDATA[
    Since this is a CDATA section
    I can use all sorts of reserved characters
    like > < " and &
    or write things like
    <foo></bar>
    but my document is still well formed!
]]>
</exampleOfACDATA>

निम्न को .xhtml फ़ाइल ( .html नहीं ) के रूप में सहेजने का प्रयास करें और टिप्पणी और सीडीएटीए अनुभाग के बीच अंतर देखने के लिए फ़ायरफ़ॉक्स ( इंटरनेट एक्सप्लोरर नहीं ) का उपयोग करके इसे खोलें; जब आप ब्राउज़र में दस्तावेज़ को देखते हैं तो टिप्पणी दिखाई नहीं देगी, जबकि सीडीएटीए अनुभाग होगा:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" >
<head>
<title>CDATA Example</title>
</head>
<body>

<h2>Using a Comment</h2>
<div id="commentExample">
<!--
You won't see this in the document
and can use reserved characters like
< > & "
-->
</div>

<h2>Using a CDATA Section</h2>
<div id="cdataExample">
<![CDATA[
You will see this in the document
and can use reserved characters like
< > & "
]]>
</div>

</body>
</html>

सीडीएटीए अनुभागों के साथ कुछ ध्यान रखना है कि उनके पास कोई एन्कोडिंग नहीं है, इसलिए स्ट्रिंग को शामिल करने का कोई तरीका नहीं है ]]> उनमें। कोई भी चरित्र डेटा जिसमें शामिल है ]]> को - जहां तक ​​मुझे पता है - इसके बजाय एक टेक्स्ट नोड बनना होगा। इसी प्रकार, एक डोम हेरफेर परिप्रेक्ष्य से आप एक सीडीएटीए अनुभाग नहीं बना सकते जिसमें ]]> :

var myEl = xmlDoc.getElementById("cdata-wrapper");
myEl.appendChild(xmlDoc.createCDATASection("This section cannot contain ]]>"));

यह डोम मैनिपुलेशन कोड या तो एक अपवाद (फ़ायरफ़ॉक्स में) फेंक देगा या नतीजतन एक खराब संरचित XML दस्तावेज़ में होगा: http://jsfiddle.net/9NNHA/


सीडीएटी एक ऐसा डेटा है जिसे आप एक्सएमएल पार्सर में पास करना चाहते हैं और अभी भी एक्सएमएल के रूप में व्याख्या नहीं किया गया है।

उदाहरण के लिए कहें: - आपके पास एक एक्सएमएल है जो प्रश्न / उत्तर वस्तु को समाहित करता है। ऐसे खुले क्षेत्रों में कोई भी डेटा हो सकता है जो मूल डेटा प्रकार या एक्सएमएल परिभाषित कस्टम डेटा प्रकारों के तहत सख्ती से नहीं आती है। पसंद है - क्या यह xml टिप्पणी के लिए एक सही टैग है? .-- आपको इसे पास करने की आवश्यकता हो सकती है क्योंकि यह xml पार्सर द्वारा किसी अन्य बच्चे तत्व के रूप में व्याख्या किए बिना है। यहां सीडीटा आपके बचाव में आता है। सीडीएटी के रूप में घोषित करके आप पार्सर को एक XML के रूप में लिपटे डेटा का इलाज नहीं कर रहे हैं (हालांकि यह एक जैसा दिख सकता है)


उसमें निहित डेटा को एक्सएमएल के रूप में पार्स नहीं किया जाएगा, और इस तरह के लिए वैध एक्सएमएल होने की आवश्यकता नहीं है या इसमें ऐसे तत्व हो सकते हैं जो एक्सएमएल हो सकते हैं लेकिन नहीं हैं।


सीडीएटीए चरित्र डेटा के लिए खड़ा है। आप इसका उपयोग कुछ पात्रों से बचने के लिए कर सकते हैं जिन्हें अन्यथा नियमित एक्सएमएल के रूप में माना जाएगा। इसके अंदर का डेटा पार्स नहीं किया जाएगा। उदाहरण के लिए, यदि आप उस URL को पास करना चाहते हैं जिसमें इसमें शामिल है, तो आप इसे करने के लिए सीडीएटीए का उपयोग कर सकते हैं। अन्यथा, आपको एक त्रुटि मिलेगी क्योंकि इसे नियमित XML के रूप में पार्स किया जाएगा।


इसका उपयोग डेटा को करने के लिए किया जाता है जो अन्यथा एक्सएमएल के रूप में देखा जा सकता है क्योंकि इसमें कुछ वर्ण होते हैं।

इस तरह के अंदर डेटा प्रदर्शित किया जाएगा, लेकिन व्याख्या नहीं की जाएगी।


जब मुझे अपने एक्सएमएल टैग को एचटीएमएल कोड स्टोर करने की आवश्यकता होती है तो मुझे सीडीएटीए का उपयोग करना पड़ता था। कुछ इस तरह

<codearea>
  <![CDATA[ 
  <div> <p> my para </p> </div> 
  ]]>
</codearea>

तो सीडीएटीए का मतलब है कि यह किसी भी चरित्र को अनदेखा कर देगा जिसे अन्यथा एक्सएमएल टैग जैसे <और> आदि के रूप में व्याख्या किया जा सकता है।


आम तौर पर एक XML दस्तावेज़ के भीतर चित्र या ध्वनि डेटा जैसे कस्टम डेटा एम्बेड करने के लिए उपयोग किया जाता है।


एक बड़ा उपयोग-मामला: आपके एक्सएमएल में एक प्रोग्राम शामिल है, डेटा के रूप में (उदाहरण के लिए जावा के लिए एक वेब पेज ट्यूटोरियल)। उस स्थिति में आपके डेटा में वर्णों का एक बड़ा हिस्सा शामिल है जिसमें '&' और '<' शामिल हैं लेकिन वे वर्ण xml होने के लिए नहीं हैं।

की तुलना करें:

<example-code>
while (x &lt; len &amp;&amp; !done) {
    print( &quot;Still working, &apos;zzz&apos;.&quot; );
    ++x;
    }
</example-code>

साथ में

<example-code><![CDATA[
while (x < len && !done) {
    print( "Still working, 'zzzz'." );
    ++x;
    }
]]></example-code>

विशेष रूप से यदि आप इस कोड को किसी फ़ाइल (या इसमें पूर्व-प्रोसेसर में) से कॉपी / पेस्ट कर रहे हैं, तो अपने एक्सएमएल फाइल में केवल वही अक्षर रखना चाहिए, जो उन्हें एक्सएमएल टैग / विशेषताओं के साथ भ्रमित कर रहे हैं। जैसा कि @paary ने उल्लेख किया है, अन्य सामान्य उपयोगों में शामिल हैं जब आप उन URL को एम्बेड कर रहे हैं जिनमें एम्परसैंड शामिल हैं। आखिरकार, यहां तक ​​कि यदि डेटा में केवल कुछ विशेष वर्ण होते हैं लेकिन डेटा बहुत लंबा होता है (अध्याय का पाठ, कहें), यह अच्छा है कि आप उन कुछ इकाइयों को डी / कोडिंग न करें क्योंकि आप अपनी एक्सएमएल फाइल को संपादित करते हैं ।

(मुझे संदेह है कि टिप्पणियों की सभी तुलना थोड़ी भ्रामक / अनुपयोगी हैं।)


विकिपीडिया से:

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

http://en.wikipedia.org/wiki/CDATA

इस प्रकार: सीडीएटीए के अंदर पाठ पार्सर द्वारा देखा जाता है लेकिन केवल वर्णों के रूप में एक्सएमएल नोड्स के रूप में नहीं।





cdata