PCDATA と CDATA の大まかな定義は、
- PCDATA は文字データですが、解析されます。
- CDATA は文字データであり、解析されません。
しかし、誰かが私に、CDATA は実際に解析されているか、PCDATA は実際には解析されていないと言ったので、少し混乱しています。本当のことを知っている人はいますか?
更新:私は実際にウィキペディアに PCDATA 定義を追加しました...その答えをあまり真剣に受け止めないでください。
WIKI から:
簡単に言えば、PCDATA は Parsed Character Data の略です。これは、文字が XML、XHTML、または HTML パーサーによって解析されることを意味します。(
<
は < に変更され、<p>
は段落タグなどを意味するものと見なされます)。これを、文字が XML、XHTML、または HTML パーサーによって解析されない CDATA と比較してください。
文字データを意味する CDATA という用語は、マークアップ言語 SGML および XML で、明確ではあるが関連する目的で使用されます。この用語は、ドキュメントの特定の部分が、非文字データまたはより具体的で限定された構造を持つ文字データではなく、一般的な文字データであることを示します。
PCDATA と CDATA の両方が解析されます。どちらも文字データです。
どちらにも有効な文字のみを含める必要があります。たとえば、ドキュメントのエンコーディングが UTF-8 の場合、CDATA セクションのコンテンツは有効な UTF-8 文字である必要があります。そのため、ランダムなバイナリ データは、ドキュメントの整形を妨げる可能性があります。また、CDATA セクションは、セクション終了タグを見つけるためだけに解析されます。ただし、<、>、& などのその他のマークアップのような文字は無視され、パーサーによってそのまま渡されます。
PCDATA リテラル<
and &
(属性値の and'
または"
) の OTOH はエスケープする必要があります。そうしないと、マークアップとして解釈されます。エンティティも拡張されます。
はい、CDATA セクションは実際に解析されます。ただし、PCDATA が解析されていないと言われた理由はわかりません。
デフォルトでは、すべてが PCDATA です。次の例では、ルートを無視<bar>
すると解析され、コンテンツはなく、1 つの子が含まれます。
<?xml version="1.0"?>
<foo>
<bar><test>content!</test></bar>
</foo>
要素にテキストのみが含まれ、子要素が含まれないように指定する場合は、キーワード PCDATA を使用します。これは、このキーワードが要素に解析可能な文字データ (つまり、以下の文字を除くすべてのテキスト) を含める必要があることを指定するためです (< ) 、大なり (>) 、アンパサンド (&)、引用符 (') および二重引用符 (")。
次の例では、bar は CDATA であり、解析されず、 content を持っています"<test>content!</test>"
。
<?xml version="1.0"?>
<foo>
<bar><![CDATA[<test>content!</test>]]></bar>
</foo>
SGML にはいくつかのコンテンツ モデルがあります。#PCDATA コンテンツ モデルでは、要素にプレーン テキストを含めることができるとしています。その「解析された」部分は、その中のマークアップ (PI、コメント、および SGML ディレクティブを含む) が生のテキストとして表示される代わりに解析されることを意味します。また、エンティティ参照が置き換えられることも意味します。
プレーン テキスト コンテンツを許可する別のタイプのコンテンツ モデルは CDATA です。XML では、要素コンテンツ モデルが暗黙的に CDATA に設定されない場合がありますが、SGML では、要素のコンテンツでマークアップとエンティティ参照が無視されることを意味します。ただし、CDATA タイプの属性では、エンティティ参照が置き換えられます。
XML では #PCDATA が唯一のプレーン テキスト コンテンツ モデルです。要素にテキスト コンテンツを許可したい場合に使用します。CDATA コンテンツ モデルは、#PCDATA の CDATA ブロック マークアップを通じて明示的に使用できますが、要素のコンテンツはデフォルトで CDATA として定義されない場合があります。
DTD では、テキストを含む属性の型は CDATA でなければなりません。属性宣言の CDATA キーワードは、XML ドキュメントの CDATA セクションとは異なる意味を持ちます。CDATA セクションでは、"]]>" 終了タグを除くすべての文字 (<、>、&、および " 文字を含む) が有効です。
#PCDATA は、属性のタイプには適していません。「リーフ」テキストのタイプに使用されます。
#PCDATA は単に歴史的な理由から、ハッシュ (「ハッシュタグ」または octothorp とも呼ばれます) が先頭に追加されます。
最初の定義は正しいです。
PCDATA が解析されます。これは、エンティティが展開され、テキストがマークアップとして扱われることを意味します。CDATA は XML パーサーによって解析されません。
XHTML DTDでデフォルトで要素のみがCDATAに設定されている場合、多くの醜い手動オーバーライドを節約できます...なぜスクリプトブロックに他の要素が含まれるのでしょうか。そのような要素がある場合、それらはDOM操作アクションでJSインタープリターによって処理されます。その場合でも、ドキュメントの挿入とレンダリングの前に、XMLパーサーによって完全に無視される必要があります。外部スクリプトリソースファイルの使用を強制するように設計されている可能性がありますが、これは最終的には良いことです。