14

ここでXML/XSLT関連の質問をする人がよくいますが、これはCDATAがどのように機能するかを把握できないことに起因しています(このように)。

そもそもなぜ存在するのだろうか。XMLがそれなしでは実現できなかったわけではありません。CDATAセクションに入れることができるものはすべて「ネイティブ」(XMLエスケープ)として表現できます。

CDATAによって結果のドキュメントが少し小さくなる可能性があることを理解していますが、それに直面しましょう。XMLはとにかく冗長です。小さなXMLドキュメントは、たとえば圧縮によってより簡単に実現できます。

私にとって、CDATAは、肉眼ではマークアップのように見えるデータを持つことができるため、マークアップとデータの明確な分離を破ります。これは悪いことだと思います。(これは、文字列処理または正規表現をXMLに不適切に適用するように人々を促すものの1つでさえあるかもしれません。)

だから:CDATAを使用する理由は何ですか?

4

9 に答える 9

12

CDATAセクションは、プログラムではなく、人間の作者の便宜のためだけのものです。<それらの唯一の用途は、すべてを慎重に置き換える必要なしに、たとえばSVGサンプルコードをXHTMLページに簡単に含めることができるようにすること&lt;です。

それが私にとっての使用目的です。<の代わりに使用できるため、結果のドキュメントを数バイト小さくしないでください&lt;

また、上記のサンプル(xhtmlのSVGコード)を使用すると、XHTMLファイルのソースコードを確認し、SVGコードをコピーして貼り付けるだけで簡単にでき&lt;ます<

于 2009-11-11T10:13:51.030 に答える
5

PCDATA-解析された文字データ。これは、入力されたデータがパーサーによって解析されることを意味します。

CDATA-CDATA要素間に入力されたデータはパーサーによって解析されません。つまり、CDATAセクション内のテキストはパーサーによって無視されます。その結果、悪意のあるユーザーがこれらのCDATA要素を使用して破壊的なデータをアプリケーションに送信する可能性があります。

CDATAセクションは。で始まり、<![CDATA[で終わり]]>ます。

CDATAで発生できない唯一の文字列はです]]>

CDATAを使用する唯一の理由は、Javascriptコードのようなテキストに多くの<&文字が含まれていることです。エラーを回避するために、スクリプトコードをCDATAとして定義できます<。これは、パーサーが新しい要素の開始として解釈するため、単独で使用するとエラーが生成されるためです。同様に&、パーサーは文字エンティティの開始として解釈できます。

于 2009-11-13T11:16:32.677 に答える
4

CDATAは、生のバイナリデータを許可することを目的としていたと思います。「]]>」が含まれていない限り、CDATAセクションには何でも入ります。これにより、通常のXMLとは一線を画し、解析が高速化されます(また、フルテキストエンコーディングの必要性がなくなるため、パフォーマンスが2番目に向上します)。実際、人々が終了シーケンスをエスケープせず、いくつかの初期のパーサーがさまざまに壊れている場合、それは非常に問題があることがわかりました。そのため、ほとんどの場合、バイナリデータにテキストエンコーディングを使用するだけで、CDATAセクションはやや無意味になります。

編集: Tomalakがコメントで特定しているように、この答えは実際には間違っていることに注意してください。生のバイナリはCDATAで受け入れられると考えている人が他にもいることを知っているので、削除しませんでした。これにより、その小さな誤解が解消される可能性があります。

于 2009-11-11T10:36:09.887 に答える
3

私にとって、CDATAは怠惰の別の言葉です。XMLを使い始めたときはそれを使用していましたが、最近は常にデータを変換しています。

私が思いつくことができる一番の理由は、便利さです。特に、あるシステムから別のシステムにデータを転送するために、何らかの形式のラッパーとしてXMLを使用している場合、この場合、次のようになる可能性があります。

XMLラッパーを作成する
データをXMLに変換するデータを
ラッパー内に配置
するXMLをレシーバーに送信するXMLをXMLに
分割する+XMLのデータXML
のデータをデータに変換する

一方、CDATAを使用すると、追加の変換手順は必要ありません。

別の使用法は、埋め込まれたデータのさまざまな名前空間を気にすることなくデータを埋め込むことです。しかし、それは実際にはそれを使用するための素晴らしい方法ではありません。

CDATAを使用する良い方法の別の例を見つけました。これは、私が考えるべきものです。これは、コードをXMLファイルに埋め込む必要がある場合、コードが変換されないか、機能しないか、簡単に読み取れない場合です。

于 2009-11-11T10:14:03.630 に答える
3

これがどれほど役立つかはわかりませんが、これも投入します。

問題の1つは、XML開発者の明確な陣営がいくつかあることです。ここでは、XMLをデータの表現として見る人もいれば、よりドキュメント中心の方法で見る人もいます。(XMLの利点は、両方でうまく機能することです。)

XMLをデータの表現と見なす人(XMLはツールによって生成および消費されることが多く、人間はトラブルシューティングにのみ関与します)は、CDATAセクションにほとんど価値がありません。彼らのツールに対して、よりドキュメント中心の目的でXMLを使用する人は、CDATAセクションがはるかに役立つと感じるかもしれません。

于 2009-11-11T15:22:58.487 に答える
2

疑わしい場合は、仕様を確認してください

2.7CDATAセクション

[定義:CDATAセクションは、文字データが発生する可能性のある場所であればどこでも発生する可能性があります。これらは、マークアップとして認識される文字を含むテキストのブロックをエスケープするために使用されます。

于 2009-11-11T13:12:21.027 に答える
2

MXMLは、CDATAタグの優れた使用法を示しています。MXMLについて私が気に入っていることの1つは、有効なXMLです。つまり、変換を使用して別のXMLファイルからプログラムでフラッシュウィジェットを生成したり、スキーマに対してMXMLを検証したりするなどの便利なことができます。

CDATAタグは、MXMLファイル内でActionScriptスクリプトブロックを定義するため、MXMLで役立ちます。これにより、ECMAタイプのスクリプト言語(>や<など)と有効なXMLを1つのファイルに組み合わせることができます。

編集:

MXMLとActionScriptを組み合わせる別のオプションは、HTMLとJavascriptを組み合わせる方法でそれらを組み合わせることであると思います。つまり、スクリプトをスクリプトブロック内のXMLコメントタグでラップし、代わりにCDATAを使用することを選択しました。 MXMLコンパイラの開発者。MXMLエディターは、構文をチェックしてコンテキストヘルプを提供するためにスキーマに対してコードを検証し、構文とコンテキストヘルプのためにアクションスクリプトコードを解析するため、推論はおそらく編集と関係があると思います。エディタでCDATAを使用すると、XMLコメントとスクリプトブロックの両方を実行して区別することができます。

于 2009-11-11T10:16:18.413 に答える
1

CDATAセクションは、一部のXMLのスキーマを定義したいが、その一部が制御不能であり、スキーマに適合したりXMLを壊したりしないことを保証できない場合に非常に役立ちます。

多くの場合、整形式のXHTMLではないHTML出力を持つレガシーシステムを使用する必要があります。XMLが正しく構造化されていることを確認するスキーマをアタッチできますが、潜在的に不良なHTMLを格納するためのCDATAセクションを含むタグがあります。 CDATA。

これは一般的な使用法ではありませんが、他の人の緩いプログラミングでシステムを壊したくない場合に使用できます。

于 2009-11-11T14:53:03.273 に答える
0

これは、 CDATAを使用する理由/時期具体例です

CDATAを取り除くと、この単純なSVGはブラウザーによる解析に失敗します。

<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1"
    baseProfile="full"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink"
    xmlns:ev="http://www.w3.org/2001/xml-events"
    >

<title>CDATA</title>

<style type="text/css"><![CDATA[

/**
 * Imagine you mention this element <foo> in a comment… or use the & sign.
 * Then…
 *
 * If this weren't wrapped into CDATA (mind both the starting and closing
 * tags), then the browser would fail to parse the file correctly. For example:
 *
 * Firefox would fail with this:
 * > XML Parsing Error: mismatched tag. Expected: [foo's closing tag].
 *
 * Chrome and Safari would fail with this:
 * > This page contains the following errors:
 * > error on line 22 at column 9: Opening and ending tag mismatch: foo line 0 and style
 */

]]></style>


<text x="20" y="60" font-size="60">Hello</text>

<script><![CDATA[

// <text>
// see comment in the CSS, because it's the same situation here.

]]></script>
</svg>

これはSVGファイルの場合でしたが、どのXMLファイルでも同じ予防策を講じる必要があります。

于 2020-02-19T15:04:45.553 に答える