এক্সএমএলে <! [CDATA []]> এর অর্থ কী?


1014

আমি প্রায়শই ফাইলগুলিতে এই অদ্ভুত CDATAট্যাগটি খুঁজে পাই XML:

<![CDATA[some stuff]]>

আমি পর্যবেক্ষণ করেছি যে এই CDATAট্যাগটি সর্বদা শুরুতে আসে এবং তারপরে কিছু স্টাফ থাকে।

তবে কখনও কখনও এটি ব্যবহৃত হয়, কখনও কখনও এটি হয় না। আমি ধরে নিলাম এটি some stuff"ডেটা" চিহ্নিত করার জন্য এটি পরে প্রবেশ করা হবে। তবে কী ধরণের ডেটা some stuff? আমি এক্সএমএল ট্যাগগুলিতে কিছু লিখছি না যা কোনও ধরণের ডেটা হয়?

উত্তর:


951

CDATA ঘোরা ক্যারেক্টার ডেটা এবং এটি এর মানে হল যে এই স্ট্রিং মধ্যে ডাটা ডেটা আছে যা অন্তর্ভুক্ত পারে এক্সএমএল মার্কআপ হিসেবে ব্যাখ্যা করা, কিন্তু না হওয়া উচিত।

সিডিএটিএ এবং মন্তব্যের মধ্যে মূল পার্থক্যগুলি হ'ল:

এর অর্থ একটি সুগঠিত নথি থেকে এক্সএমএলের এই চারটি স্নিপেট দেওয়া:

<!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>

35
Cend ক্রমের একটি চরিত্র কীভাবে পালানো যায়?
টমাস ওয়েলার

23
আপনি আছে দুই কনক্যাটেনেট করার CDATA বিভাগগুলি ]]এবং >- দেখুন এই উত্তরটি কেমন এবং whys জন্য।
শান ভিয়েরা

2
সিডিএটিএ আরম্ভ এবং কাঁচা ডেটার মধ্যে কি নতুন লাইন চরিত্র থাকতে হবে?
বেন সেওয়ার্ডস

2
নেই সেখানে @ বেনসওয়ার্ডস নেই
সান ভিয়েরা

5
এই টুকরা তাই সি-মত কোড সহজেই একটি CDATA অধ্যায় রাখা করতে পারা যায়নি: if (a[b[c]]>10) { }
অ্যান্ডার্স টর্নব্ল্যাড

341

একটি সিডিএটিএ বিভাগটি " উপাদান সামগ্রীর একটি বিভাগ যা পার্সারের জন্য চিহ্নিত করা হয় কেবলমাত্র অক্ষর ডেটা হিসাবে চিহ্নিত করা, মার্কআপ নয় " "

কৃত্রিমভাবে, এটি একটি মন্তব্যের সাথে একইভাবে আচরণ করে:

<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 ]]>"));

এই ডিওএম ম্যানিপুলেশন কোডটি একটি ব্যতিক্রম (ফায়ারফক্সে) ফেলে দেবে বা খারাপ কাঠামোগত এক্সএমএল ডকুমেন্টের ফলস্বরূপ: http://jsfiddle.net/9NNHA/


3
তাহলে কেন সিডিএটাতে "ý" অনুমোদিত নয়?
bjan

10
@ বিজন - আপনি কী ভাবেন যে এটি একটি অবৈধ চরিত্র? মনে হচ্ছে আপনার এনকোডিংয়ের সমস্যা হতে পারে।
রিচার্ড জে পি লে গুয়েন

আইই তে আমি ডকটি খুললাম, আমি এমএসএক্সএমএল পার্সারও ব্যবহার করছি যা এটিকে একটি অবৈধ চরিত্র হিসাবে ঘোষণা করেছে। আমার একটি এক্সএসডি রয়েছে যাতে এটি "টাইপ =" এক্সএস: স্ট্রিং "" হিসাবে ঘোষিত হয়। এটি কি এনকোডিং বা এক্সএমএল সংস্করণের সাথে সম্পর্কিত?
bjan

সিডিএটিএ পার্স করা হয়েছে এবং কেবলমাত্র বৈধ পরিসরের অক্ষরও এখানে অনুমোদিত, এটি
অক্ষরযুক্ত

1
সুতরাং আমরা কিছু HTML কে এক্সএমএল ডকুমেন্টে পাচারের জন্য সিডিটিএটি ব্যবহার করতে পারি, যাতে এইচটিএমএল এক্সএমএল নথি কাঠামোকে বিভ্রান্ত না করে এবং এরপরে এক্সএসএলটি ব্যবহার করে এটি বের করে আউটপুট হচ্ছে এমন একটি HTML নথিতে থুতু দেয় sp
কাজ

69

একটি বড় ব্যবহারের ক্ষেত্রে: আপনার এক্সএমএল একটি ডেটা হিসাবে একটি প্রোগ্রাম অন্তর্ভুক্ত (যেমন জাভা জন্য একটি ওয়েব পৃষ্ঠা টিউটোরিয়াল)। এই পরিস্থিতিতে আপনার ডেটাতে অক্ষরগুলির একটি বড় অংশ রয়েছে যা '&' এবং '<' অন্তর্ভুক্ত করে তবে সেই অক্ষরগুলি এক্সএমএল নয়।

তুলনা করা:

<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>

বিশেষত যদি আপনি কোনও ফাইল থেকে এই কোডটি অনুলিপি / আটকানো (বা এটি সহ, প্রি-প্রসেসরে অন্তর্ভুক্ত) করছেন তবে আপনার এক্সএমএল ফাইলে আপনার যে অক্ষরগুলি চান তা ঠিক আছে, ডাব্লু / ও এগুলি এক্সএমএল ট্যাগ / বৈশিষ্ট্যগুলির সাথে বিভ্রান্ত করছেন। @ পেয়ার হিসাবে উল্লিখিত হিসাবে, অন্যান্য সাধারণ ব্যবহারগুলির মধ্যে অন্তর্ভুক্ত থাকে যখন আপনি এমপিড্রেড থাকা URL গুলি এম্বেড করেন amp পরিশেষে, এমনকি যদি ডেটাতে কয়েকটি কয়েকটি বিশেষ অক্ষর থাকে তবে ডেটা খুব দীর্ঘ হয় (একটি অধ্যায়টির পাঠ্যটি বলুন), আপনি আপনার এক্সএমএল ফাইল সম্পাদনা করার সাথে সাথে সেই কয়েকটি সত্তা এন / ডি-কোডিং না করে রাখা ভাল nice ।

(আমি মন্তব্যগুলির সাথে সমস্ত তুলনা সন্দেহজনকভাবে বিভ্রান্তিকর / অপ্রয়োজনীয় suspect


41

যখন আমার এক্সএমএল উপাদানটি এইচটিএমএল কোড সঞ্চয় করতে প্রয়োজন তখন আমাকে একবার সিডিটিএ ব্যবহার করতে হয়েছিল। কিছুটা এইরকম

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

সুতরাং সিডিএটিএ এর অর্থ এটি এমন কোনও চরিত্রকে অগ্রাহ্য করবে যা অন্যথায় <ও> ইত্যাদি এক্সএমএল ট্যাগ হিসাবে ব্যাখ্যা করা যায় etc.


2
প্রথম বাক্যে "ট্যাগ" নয় তবে উপাদান।
লুডোভিক কিউটি

32

এতে থাকা ডেটাগুলিকে এক্সএমএল হিসাবে বিশ্লেষণ করা হবে না এবং যেমন বৈধ এক্সএমএল হওয়ার প্রয়োজন হয় না বা এমন উপাদান থাকতে পারে যা এক্সএমএল হিসাবে প্রদর্শিত হতে পারে তবে তা নয়।


16

উইকিপিডিয়া থেকে:

একটি এক্সএমএল নথি বা বহিরাগত পার্সড সত্তা [ইন], একটি সিডিএটিএ অংশটি উপাদান সামগ্রীর একটি অংশ যা পার্সারের জন্য চিহ্নিত করা হয় কেবলমাত্র অক্ষর ডেটা হিসাবে চিহ্নিত করতে, মার্কআপ নয়।

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

সুতরাং: সিডিএটিএর ভিতরে পাঠ্যকে পার্সার দ্বারা দেখা যায় তবে কেবলমাত্র এক্সএমএল নোড হিসাবে নয় এমন অক্ষর হিসাবে।


13

এর ব্যবহারের আরও একটি উদাহরণ হিসাবে:

যদি আপনার কাছে আরএসএস ফিড (এক্সএমএল ডকুমেন্ট) থাকে এবং বর্ণনার প্রদর্শনে কিছু বেসিক এইচটিএমএল এনকোডিং অন্তর্ভুক্ত করতে চান তবে আপনি এটি এনকোড করার জন্য সিডিটা ব্যবহার করতে পারেন:

<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>

আরএসএস রিডার বর্ণনায় টানছে এবং সিডিএটিএ-র মধ্যে এইচটিএমএলকে রেন্ডার করে।

দ্রষ্টব্য - সমস্ত এইচটিএমএল ট্যাগ কাজ করে না - আমি মনে করি এটি আপনি ব্যবহার করছেন আরএসএস পাঠকের উপর নির্ভর করে।


এবং এই উদাহরণটি কেন সিডিটা ব্যবহার করে তার ব্যাখ্যা হিসাবে (এবং উপযুক্ত পাবডাটা এবং ডিসি: স্রষ্টা ট্যাগ নয়): এটি আরএসএস উইজেট ব্যবহার করে ওয়েবসাইট প্রদর্শনের জন্য যার জন্য আমাদের কোনও আসল বিন্যাস নিয়ন্ত্রণ নেই।

এটি আমাদেরকে অন্তর্ভুক্ত চিত্রটির উচ্চতা এবং অবস্থান নির্দিষ্ট করতে, লেখকের নাম এবং তারিখটি সঠিকভাবে ফর্ম্যাট করতে এবং নতুন উইজেটের প্রয়োজন ছাড়াই নির্দিষ্ট করতে সক্ষম করে। এর অর্থ এটিও আমি স্ক্রিপ্ট করতে পারি এবং এগুলি হাতে হাতে যুক্ত করতে হবে না।


9

সিডিএটিএ মানে ক্যারেক্টার ডেটা। আপনি এটি এমন কোনও অক্ষর থেকে বাঁচতে ব্যবহার করতে পারেন যা অন্যথায় নিয়মিত এক্সএমএল হিসাবে বিবেচিত হবে। এর ভিতরে থাকা ডেটাগুলি বিশ্লেষণ করা হবে না। উদাহরণস্বরূপ, আপনি যদি এটিতে থাকা কোনও URL পাস করতে চান তবে &এটি করতে আপনি সিডিএটিএ ব্যবহার করতে পারেন। অন্যথায়, আপনি একটি ত্রুটি পাবেন কারণ এটি নিয়মিত এক্সএমএল হিসাবে পার্স করা হবে।


6

এটি ডেটা ধারণ করতে ব্যবহৃত হয় যা অন্যথায় এক্সএমএল হিসাবে দেখা যেতে পারে কারণ এতে নির্দিষ্ট অক্ষর রয়েছে।

এই ভাবে অভ্যন্তরের ডেটা প্রদর্শিত হবে তবে ব্যাখ্যা করা হবে না।


5

এটি এমন একটি স্ট্রিং থেকে পালিয়ে যায় যা যথারীতি XML এ যেতে পারে না:

উদাহরণ:

স্ট্রিংটিতে এটি "&" রয়েছে।

তুমি পার না:

<FL val="Company Name">Dolce & Gabbana</FL>

অতএব, আপনাকে অবশ্যই সিডিএটিএ ব্যবহার করতে হবে:

<FL val="Company Name"> <![CDATA["Dolce & Gabbana"]]> </FL>

1

সাধারণত এক্সএমএল ডকুমেন্টের মধ্যে ছবি বা শব্দ ডেটার মতো কাস্টম ডেটা এম্বেড করার জন্য ব্যবহৃত হয়।


3
যদিও আপনি একটি সিডিএটিএ বিভাগে পাঠ্য-এনকোডেড বাইনারি ডেটা রাখতে পারেন তবে আপনার দরকার নেই, কারণ বাইনারি কোনও কিছুর সাথে সিডিএটির সরাসরি কোনও সম্পর্ক নেই।
জোয়েল মুলার

1

সিডিটা হ'ল এমন একটি ডেটা যা আপনি কোনও এক্সএমএল পার্সারে যেতে চান এবং এখনও এক্সএমএল হিসাবে ব্যাখ্যা করেন না।

উদাহরণস্বরূপ বলুন: - আপনার কাছে এমন একটি এক্সএমএল রয়েছে যা প্রশ্ন / উত্তর অবজেক্টকে এনপ্যাপুলেট করে। এই জাতীয় উন্মুক্ত ক্ষেত্রগুলিতে এমন কোনও ডেটা থাকতে পারে যা মৌলিক ডেটা টাইপ বা এক্সএমএল সংজ্ঞায়িত কাস্টম ডেটা ধরণের অধীনে না আসে। পছন্দ - এটি কি এক্সএমএল মন্তব্যের জন্য সঠিক ট্যাগ? .-- এক্সএমএল পার্সার দ্বারা অন্য শিশু উপাদান হিসাবে ব্যাখ্যা না করেই আপনার এটি পাস করার প্রয়োজন হতে পারে। এখানে সিডাটা আপনার উদ্ধারে আসে। সিডাটা হিসাবে ঘোষণার মাধ্যমে আপনি পার্সারকে বলছেন যে এক্সএমএল হিসাবে মোড়ানো ডেটাটি ব্যবহার করবেন না (যদিও এটি দেখতে একরকম দেখাচ্ছে)


0

মনে রাখবেন যে CDATAএক্সএমএল পাঠ্য ফাইলে সরাসরি পাঠ্য স্থাপন করা হলেই কেবল নির্মাণের প্রয়োজন।

এটি হ'ল, কেবলমাত্র CDATAযদি হাত টাইপ করা হয় বা প্রোগ্রামালিমে সরাসরি এক্সএমএল পাঠ্য তৈরি করা হয় তবে আপনার ব্যবহার করতে হবে ।

কোনও ডম প্রসেসর এপিআই বা সিম্পল এক্সএমএল ব্যবহার করে প্রবেশ করা যে কোনও পাঠ্য এক্সএমএল বিষয়বস্তুর নিয়মকানুনে বাধা রোধ করতে স্বয়ংক্রিয়ভাবে পালিয়ে যাবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.