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




cdata (8)

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

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

<![CDATA[some stuff]]>

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

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


इसका उपयोग करने के एक और उदाहरण के रूप में ...

यदि आपके पास आरएसएस फ़ीड (एक्सएमएल दस्तावेज़) है और विवरण के प्रदर्शन में कुछ बुनियादी HTML एन्कोडिंग शामिल करना चाहते हैं, तो आप इसे एन्कोड करने के लिए सीडीटा का उपयोग कर सकते हैं:

<item>
  <title>Title of Feed Item</title>
  <link>/mylink/article1</link>
  <description>
    <![CDATA[
      <p>
      <a href="/mylink/article1"><img style="float: left; margin-right: 5px;" height="80" src="/mylink/image" alt=""/></a>
      Author Names
      <br/><em>Date</em>
      <br/>Paragraph of text describing the article to be displayed</p>
    ]]>
  </description>
</item>

आरएसएस रीडर विवरण में खींचता है और सीडीएटीए के भीतर एचटीएमएल प्रस्तुत करता है।

नोट - सभी HTML टैग काम नहीं करते - मुझे लगता है कि यह आपके द्वारा उपयोग किए जा रहे आरएसएस रीडर पर निर्भर करता है।

और इस उदाहरण के लिए सीडीएटा (और उचित पबडाटा और डीसी: निर्माता टैग) का उपयोग क्यों नहीं किया गया है, यह एक आरएसएस विजेट का उपयोग करके वेबसाइट डिस्प्ले के लिए है जिसके लिए हमारे पास कोई वास्तविक स्वरूपण नियंत्रण नहीं है।

यह हमें शामिल छवि की ऊंचाई और स्थिति निर्दिष्ट करने में सक्षम बनाता है, लेखक के नाम और दिनांक को सही ढंग से प्रारूपित करता है, और आगे, बिना किसी नए विजेट की आवश्यकता के। इसका मतलब यह भी है कि मैं इसे स्क्रिप्ट कर सकता हूं और उन्हें हाथ से जोड़ना नहीं है।


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


एक बड़ा उपयोग-मामला: आपके एक्सएमएल में एक प्रोग्राम शामिल है, डेटा के रूप में (उदाहरण के लिए जावा के लिए एक वेब पेज ट्यूटोरियल)। उस स्थिति में आपके डेटा में वर्णों का एक बड़ा हिस्सा शामिल है जिसमें '&' और '<' शामिल हैं लेकिन वे वर्ण 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 को एम्बेड कर रहे हैं जिनमें एम्परसैंड शामिल हैं। आखिरकार, यहां तक ​​कि यदि डेटा में केवल कुछ विशेष वर्ण होते हैं लेकिन डेटा बहुत लंबा होता है (अध्याय का पाठ, कहें), यह अच्छा है कि आप उन कुछ इकाइयों को डी / कोडिंग न करें क्योंकि आप अपनी एक्सएमएल फाइल को संपादित करते हैं ।

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


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

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

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


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

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

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

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


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


CDATA चरित्र डेटा के लिए खड़ा है और इसका मतलब है कि इन तारों के बीच के डेटा में डेटा शामिल है जिसे एक्सएमएल मार्कअप के रूप में व्याख्या किया जा सकता है, लेकिन यह नहीं होना चाहिए।

सीडीएटीए और टिप्पणियों के बीच महत्वपूर्ण अंतर हैं:

  • जैसा कि रिचर्ड बताते हैं , सीडीएटीए अभी भी दस्तावेज़ का हिस्सा है, जबकि एक टिप्पणी नहीं है।
  • CDEnd में आप स्ट्रिंग को शामिल नहीं कर सकते ]]> ( CDEnd ), जबकि एक टिप्पणी में -- अमान्य है
  • पैरामीटर इकाई संदर्भ टिप्पणियों के अंदर पहचाना नहीं जाता है।

इसका मतलब है कि एक अच्छी तरह से गठित दस्तावेज़ से एक्सएमएल के इन तीन स्निपेट दिए गए हैं:

<!ENTITY MyParamEntity "Has been expanded">
<!--
Within this comment I can use ]]>
and other reserved characters like <
&, ', and ", but %MyParamEntity; will not be expanded
(if I retrieve the text of this node it will contain
%MyParamEntity; and not "Has been expanded")
and I can't place two dashes next to each other.
-->
<![CDATA[
Within this Character Data block I can
use double dashes as much as I want (along with <, &, ', and ")
*and* %MyParamEntity; will be expanded to the text
"Has been expanded" ... however, I can't use
the CEND sequence. If I need to use CEND I must escape one of the
brackets or the greater-than sign using concatenated CDATA sections.
]]>
<description>An example of escaped CENDs</description>
<!-- This text contains a CEND ]]> -->
<!-- In this first case we put the ]] at the end of the first CDATA block
     and the > in the second CDATA block -->
<data><![CDATA[This text contains a CEND ]]]]><![CDATA[>]]></data>
<!-- In this second case we put a ] at the end of the first CDATA block
     and the ]> in the second CDATA block -->
<alternative><![CDATA[This text contains a CEND ]]]><![CDATA[]>]]></alternative>




cdata